mulwidgets/muldatamodel/src/mulpagedatawindow.cpp
changeset 17 3eca7e70b1b8
parent 3 4526337fb576
--- a/mulwidgets/muldatamodel/src/mulpagedatawindow.cpp	Tue Feb 02 00:28:09 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,485 +0,0 @@
-/*
-* Copyright (c) 2007-2008 Nokia Corporation and/or its subsidiary(-ies). 
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of "Eclipse Public License v1.0"
-* which accompanies this distribution, and is available
-* at the URL "http://www.eclipse.org/legal/epl-v10.html".
-*
-* Initial Contributors:
-* Nokia Corporation - initial contribution.
-*
-* Contributors:
-*
-* Description:  Implementation of Data window
-*
-*/
-
-
-//Includes
-#include "mulpagedatawindow.h"
-
-#include <stdexcept>
-
-//Internal includes
-#include "mulassert.h"
-#include "mulmodelimpl.h"
-#include "mullog.h"
-
-using namespace std;
-
-namespace Alf
-    {
-    
-// ---------------------------------------------------------------------------
-// MulPageDataWindow
-// ---------------------------------------------------------------------------
-//
-MulPageDataWindow::MulPageDataWindow( MulModelImpl& aMulModel )
-			  :mMulModel( aMulModel ),
-			   mHighlight(KNotInitialized),
-			   mPageTopIndex(KNotInitialized),
-			   mOldPageTopIndex(KNotInitialized),
-			   mBufferSize(KNotInitialized),
-			   mWindowSize(KNotInitialized),
-			   mWindowTop(KNotInitialized),
-			   mWindowBottom(KNotInitialized),
-			   mBufferTop(0),
-			   mBufferBottom(0),
-			   mOldBufferTop(KNotInitialized),
-			   mOldBufferBottom(KNotInitialized),
-			   mRearBufferTop(0),
-			   mRearBufferBottom(0),
-			   mOldRearBufferTop(KNotInitialized),
-			   mOldRearBufferBottom(KNotInitialized)
-	{	
-	}
-
-// ---------------------------------------------------------------------------
-// SetWindowSize
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::SetWindowSize( int aWindowSize, int aPageTopIndex )
-	{
-	MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::SetWindowSize()"); 
-	
-	__MUL_ASSERT( aWindowSize > 0, KLInvalidArgument );
-
-	if( mWindowSize != aWindowSize ||  mWindowTop != aPageTopIndex)
-		{
-		if( KNotInitialized == mBufferSize )
-			{
-			mBufferSize = aWindowSize;			
-			}
-			
-		mWindowSize = aWindowSize;
-		mOldPageTopIndex = mPageTopIndex;
-		mPageTopIndex = aPageTopIndex; 
-		
-		
-		/*adjusting window offset
-		//if window size changes then the top and bottom offset should be 
-		//adjusted such that highlight remains at the centre
-		//window top and bottom are inclusive*/
-		
-		//assing page top index to window top by default aPageTopIndex is KNotInitialized
-		mWindowTop = aPageTopIndex ;
-		mWindowTop = ( mWindowTop == KNotInitialized ) ? 0 : mWindowTop;			
-		mWindowBottom = mWindowTop + mWindowSize - 1;
-		//make sure that window bottom is not more than model count
-		mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ? ( mMulModel.CurrentItemCount() -1) : mWindowBottom;	
-		
-		MUL_LOG_INFO2("MUL::MulDataWindow::SetWindowSize() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom); 
-		
-		AdjustBuffer();
-		mMulModel.DataWindowUpdated();
-		}
-	//else nothing needed
-	}
-	
-// ---------------------------------------------------------------------------
-// SetBufferSize
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::SetBufferSize( int aBufferSize )
-	{	
-	MUL_LOG_ENTRY_EXIT("MUL::MulDataWindow::SetBufferSize()"); 
-	
-	__MUL_ASSERT( aBufferSize > 0, KLInvalidArgument );
-	
-	if( mBufferSize != aBufferSize )
-		{			
-		mBufferSize = aBufferSize;
-		
-		if(mMulModel.CurrentItemCount() > 0)
-			{
-			AdjustBuffer();
-			mMulModel.DataWindowUpdated();
-			}
-		}
-	//else nothing needed
-	}
-
-// ---------------------------------------------------------------------------
-// ~MulDataWindow
-// ---------------------------------------------------------------------------
-//
-MulPageDataWindow::~MulPageDataWindow()
-	{
-	// do nothing
-	}
-
-// ---------------------------------------------------------------------------
-// SetHighlight
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::SetHighlight( int aHighlightIndex )
-	{	
-	MUL_LOG_INFO2("MUL::MulDataWindow::SetHighlight() mHighlight:%d,modelCount:%d",aHighlightIndex,mMulModel.CurrentItemCount()); 
-	
-	__MUL_ASSERT( aHighlightIndex >= 0 && aHighlightIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
-	
-	mHighlight = aHighlightIndex; 
-	}
-
-
-// ---------------------------------------------------------------------------
-// UpdateHighlight
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::UpdateHighlight( int aHighlightIndex )
-	{
-	// No need to assert. We should send highlight -1 when all the items are removed.
-	// Widget should handle. to show emty text visualization
-	mHighlight = aHighlightIndex; 
-	}
-
-// ---------------------------------------------------------------------------
-// AdjustOffset
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::AdjustOffset()
-    {
-    if( BottomWindowOffset() >= mMulModel.CurrentItemCount() )
-        {
-        mWindowBottom = mMulModel.CurrentItemCount() -1;
-        mWindowTop = mWindowBottom - WindowSize() + 1;
-        mWindowTop = mWindowTop < 0 ? 0 : mWindowTop;
-        
-        MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustOffset() : windowTop:%d::windowBottom%d",mWindowTop,mWindowBottom);
-        }
-    else if( (BottomWindowOffset() - TopWindowOffset() +1 ) < WindowSize() )
-        {
-        mWindowTop = 0;
-        mWindowBottom = mWindowTop + WindowSize() -1;
-        int modelCount = mMulModel.CurrentItemCount();
-        mWindowBottom = mWindowBottom >=  modelCount ? (modelCount - 1) : mWindowBottom;
-        
-        MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustOffset() :: windowTop:%d::windowBottom%d",mWindowTop,mWindowBottom);       
-        }
-
-    // save old values to check if teh buffer offsets are modified. If the buffer offsets are 
-    // modified then should inform the widget to update the visualization
-    SaveOldValues();
-    AdjustBuffer();
-    }
-
-		
-// ---------------------------------------------------------------------------
-// ScrollWindow
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::ScrollWindow( int aPageTopIndex )
-	{
-	MUL_LOG_INFO2("MUL::MulDataWindow::ScrollWindow() aPageTopIndex:%d,modelCount:%d",aPageTopIndex,mMulModel.CurrentItemCount()); 
-	
-	__MUL_ASSERT( aPageTopIndex >= 0 && aPageTopIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
-	
-	if( mPageTopIndex != aPageTopIndex )
-		{
-		mOldPageTopIndex = mPageTopIndex;
-		mPageTopIndex = aPageTopIndex; 
-	
-		UpdateDataWindow();
-		}
-	//else same highlight
-	}
-
-
-// ---------------------------------------------------------------------------
-// UpdateDataWindow
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::UpdateDataWindow()
-	{
-	MUL_LOG_INFO1("MUL::MulPageDataWindow::UpdateDataWindow() diff:%d ", mPageTopIndex - mOldPageTopIndex ); 
-	
-	//If diffrence is negative than highlight is moved up else down
-	//(( mPageTopIndex - mOldPageTopIndex ) < 0 ) ? ShiftWindowUp() : ShiftWindowDown() ;
-	
-	MUL_LOG_ENTRY_EXIT("MUL::MulPageDataWindow::ShiftWindowDown()");  
-    MUL_LOG_INFO2("MUL::MulPageDataWindow::ShiftWindowDown() mPageTopIndex:%d,mWindowBottom:%d",mPageTopIndex,mWindowBottom); 
-    
-    mWindowTop = mPageTopIndex;
-    mWindowBottom = mWindowTop + mWindowSize -1;
-    //bottom can't exceeding model count
-    mWindowBottom = mWindowBottom >= mMulModel.CurrentItemCount() ? 
-                    mWindowBottom = mMulModel.CurrentItemCount() - 1 : mWindowBottom;
-                    
-    MUL_LOG_INFO2("MUL::MulDataWindow::ShiftWindowDown() mWindowTop:%d,mWindowBottom:%d",mWindowTop,mWindowBottom);                     
-    
-    SaveOldValues();
-    AdjustBuffer();
-    mMulModel.DataWindowUpdated();
-	}
-
-// ---------------------------------------------------------------------------
-// AdjustBuffer
-// ---------------------------------------------------------------------------
-//
-void MulPageDataWindow::AdjustBuffer()
-	{
-	MUL_LOG_ENTRY_EXIT("MUL::MulPageDataWindow::AdjustBuffer()");  
-	
-	int modelCount = mMulModel.CurrentItemCount() -1;
-		
-	//remove data is new window is smaller/add is new window is bigger
-	//create rear buffer only if model has more data
-	if( mWindowTop == 0 && ActualBufferSize() <= modelCount )
-		{		
-		MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mWindowTop == 0 ");  		
-		
-		mBufferTop = mWindowTop;
-		mBufferBottom = mBufferTop + mWindowSize + mBufferSize - 1;
-		
-		//Create rear top and rear bottom only in looping case
-		//window top is zero so data at other end should be buffered
-		mRearBufferBottom = modelCount;
-		mRearBufferTop = mRearBufferBottom - mBufferSize +1;		
-		}
-	else if( mWindowBottom == modelCount && ActualBufferSize() <= modelCount )
-		{
-		MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mWindowBottom == modelCount ");  
-		
-		mBufferBottom = mWindowBottom ;
-		mBufferTop = mBufferBottom - (mWindowSize + mBufferSize) + 1;
-		
-		//Create rear top and rear bottom only in looping case
-		//window bottom is equal to model count so data at other end should be buffered
-		mRearBufferTop = 0;
-		mRearBufferBottom = mRearBufferTop + mBufferSize -1 ;
-		}
-	else
-		{
-		MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() else ");  
-		
-		mBufferTop = mWindowTop - mBufferSize;
-		mBufferBottom = mWindowBottom + mBufferSize;
-		
-		//check if top or bottom is out of bound and update offset accordingly
-		if( mBufferTop < 0 )
-			{
-			MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mBufferTop < 0 "); 
-			
-			mBufferTop = 0;
-			mBufferBottom = mBufferTop + ActualBufferSize()  - 1;
-			//buffer bottom cant be larger then model count
-			mBufferBottom = mBufferBottom > modelCount ? modelCount : mBufferBottom;
-			}
-		else if( mBufferBottom > modelCount )
-			{
-			MUL_LOG_INFO("MUL::MulPageDataWindow::AdjustBuffer() mBufferBottom > modelCount"); 
-			
-			mBufferBottom = modelCount ;
-			mBufferTop = mBufferBottom - ActualBufferSize() + 1;
-			//buffer top cant be less then 0
-			mBufferTop = mBufferTop < 0 ? 0 : mBufferTop;
-			}
-		
-		//in other case rear top and rear bottom is not use set to -1
-		mRearBufferTop = KNotInitialized;
-		mRearBufferBottom = KNotInitialized;
-		}
-	
-	MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mOldBufferTop:%d,mOldBufferBottom:%d",mOldBufferTop,mOldBufferBottom); 
-	MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mOldRearBufferBottom:%d,mOldRearBufferTop:%d",mOldRearBufferBottom,mOldRearBufferTop); 
-	
-	MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mBufferTop:%d,mBufferBottom:%d",mBufferTop,mBufferBottom); 
-	MUL_LOG_INFO2("MUL::MulPageDataWindow::AdjustBuffer() mRearBufferBottom:%d,mRearBufferTop:%d",mRearBufferBottom,mRearBufferTop); 
-
-	__MUL_ASSERT_DEBUG( mWindowTop >= 0 && mWindowBottom < mMulModel.CurrentItemCount(), _L("Invlid Window"));
-	__MUL_ASSERT_DEBUG( mBufferTop >= 0 && mBufferBottom < mMulModel.CurrentItemCount(), _L("Invlid Buffer"));
-	}
-		
-// ---------------------------------------------------------------------------
-// IsItemInDataWindow
-// ---------------------------------------------------------------------------
-//
-bool MulPageDataWindow::IsItemInDataWindow(int aItemIndex ) const
-	{
-	//__MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
-	
-	bool result( false );
-	
-	if(mWindowSize == KNotInitialized )
-		{
-		result = false;
-		}
-	//check that rear buffer is on or not in looping case
-	else if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
-		{
-		if( ( aItemIndex >= mBufferTop &&  aItemIndex <= mBufferBottom ) || 
-			( aItemIndex >= mRearBufferTop &&  aItemIndex <= mRearBufferBottom )	)
-			{
-			result = true;
-			}
-		}
-	else if( aItemIndex >= mBufferTop &&  aItemIndex <= mBufferBottom )
-		{
-		result = true;
-		}
-	return result;
-	}
-
-// ---------------------------------------------------------------------------
-// IsItemInDataWindow
-// ---------------------------------------------------------------------------
-//
-bool MulPageDataWindow::IsItemInVisibleWindow(int aItemIndex ) const
-    {
-    //__MUL_ASSERT_DEBUG( aItemIndex >= 0 && aItemIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
-        
-    if(mWindowSize == KNotInitialized )
-        {
-        return false;
-        }
-    else if( aItemIndex >= mWindowTop &&  aItemIndex <= mWindowBottom )
-        {
-        return true;
-        }
-    return false;
-    }
-
-// ---------------------------------------------------------------------------
-// RelativeIndex
-// ---------------------------------------------------------------------------
-//
-int MulPageDataWindow::RelativeIndex( int aAbsoluteIndex ) const
-	{
-	__MUL_ASSERT_DEBUG( aAbsoluteIndex >= 0 && aAbsoluteIndex <= mMulModel.CurrentItemCount()-1, KLInvalidArgument );
-	
-	if( !IsItemInDataWindow(aAbsoluteIndex) )
-	    {
-	    return -1;
-	    }
-	
-	if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
-		{
-		if( mRearBufferBottom == mMulModel.CurrentItemCount() - 1 )
-			{
-			if( aAbsoluteIndex >= mRearBufferTop && aAbsoluteIndex <= mRearBufferBottom )	
-				{
-				int bufferSize = BottomOffset() - TopOffset() + 1;
-				int rearDiff = aAbsoluteIndex - mRearBufferTop;
-				int relativeIndex = bufferSize + rearDiff;
-				return relativeIndex;
-				}
-			else
-				{
-				int relativeIndex = aAbsoluteIndex < TopOffset() ? 
-									aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;	
-				return relativeIndex;	
-				}		
-			}
-		else
-			{
-			if( aAbsoluteIndex >= mRearBufferTop && aAbsoluteIndex <= mRearBufferBottom )
-				{
-				int relativeIndex = aAbsoluteIndex < TopOffset() ? 
-									aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;	
-				return relativeIndex;	
-				}
-			else
-				{	
-				int bufferSize = mRearBufferBottom - mRearBufferTop + 1;
-				int diff = aAbsoluteIndex - TopOffset();
-				int relativeIndex = bufferSize + diff;
-				return relativeIndex;		
-				}
-			}
-		}
-	else
-		{		
-		int relativeIndex = aAbsoluteIndex < TopOffset() ? 
-							aAbsoluteIndex : aAbsoluteIndex - TopOffset() ;	
-		return relativeIndex;
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// AbsoluteIndex
-// ---------------------------------------------------------------------------
-//
-int MulPageDataWindow::AbsoluteIndex( int aRelativeIndex ) const
-	{
-	__MUL_ASSERT_DEBUG( aRelativeIndex >= 0 && aRelativeIndex <= ActualBufferSize(), _L("Invalid Relative Index"));
-	
-	if( mRearBufferTop != KNotInitialized && mRearBufferBottom != KNotInitialized )
-		{
-		if( mRearBufferBottom == mMulModel.CurrentItemCount() - 1 )
-			{
-			if( aRelativeIndex > BottomOffset() )
-				{
-				//relative index is in loop buffer
-				int diff = aRelativeIndex - BottomOffset() - 1;
-				int absoluteIndex = RearTopOffset() + diff;
-				return absoluteIndex;
-				}
-			else
-				{
-				int absoluteIndex = TopOffset() + aRelativeIndex;
-				return absoluteIndex;
-				}
-			}
-		else
-			{
-			if( aRelativeIndex <= RearBottomOffset() )
-				{
-				//relative index is in loop buffer
-				int absoluteIndex = RearTopOffset() + aRelativeIndex;
-				return absoluteIndex;
-				}
-			else
-				{
-				int diff = aRelativeIndex - RearBottomOffset() - 1;
-				int absoluteIndex = TopOffset() + diff;
-				return absoluteIndex;
-				}
-			}
-		}
-	else
-		{		
-		int absoluteIndex = TopOffset() + aRelativeIndex;
-		return absoluteIndex;
-		}
-	}
-
-// ---------------------------------------------------------------------------
-// IsBufferOffsetChanged
-// ---------------------------------------------------------------------------
-//
-bool MulPageDataWindow::IsBufferOffsetChanged()
-	{
-	if(mRearBufferBottom != mOldRearBufferBottom || 
-	   mRearBufferTop != mOldRearBufferTop || 
-	   mBufferTop != mOldBufferTop || 
-	   mBufferBottom != mOldBufferBottom )
-		{
-		return true;
-		}
-	return false;
-	}
-			
-    } // namespace Alf
-
-//End of file