uifw/ganes/src/HgScrollBufferManager.cpp
changeset 47 2f0c06423c72
parent 46 0e1e0022bd03
child 53 3c67ea82fafc
--- a/uifw/ganes/src/HgScrollBufferManager.cpp	Thu Jul 29 14:21:56 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,335 +0,0 @@
-/*
-* Copyright (c) 2009 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:     
-*
-*/
-
-
-#include "HgScrollBufferManager.h"
-#include <ganes/HgScrollBufferObserverIface.h>
-
-#include <e32debug.h>
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::NewL()
-// -----------------------------------------------------------------------------
-//
-CHgScrollBufferManager* CHgScrollBufferManager::NewL( 
-        MHgScrollBufferObserver& aObserver, 
-        TInt aBufferSize,
-        TInt aBufferTreshold,
-        TInt aInitialPosition,
-        TInt aTotalCount )
-    {
-    CHgScrollBufferManager* self = new (ELeave) CHgScrollBufferManager(
-                                                        aObserver, 
-                                                        aBufferSize, 
-                                                        aBufferTreshold, 
-                                                        aInitialPosition, 
-                                                        aTotalCount );
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::CHgScrollBufferManager()
-// -----------------------------------------------------------------------------
-//
-CHgScrollBufferManager::CHgScrollBufferManager(
-        MHgScrollBufferObserver& aObserver, 
-        TInt aBufferSize,
-        TInt aBufferTreshold,
-        TInt aInitialPosition,
-        TInt aTotalCount )
-: CActive( CActive::EPriorityHigh ), 
-    iObserver( aObserver ),
-    iBufferSize( aBufferSize ),
-    iBufferTreshold( aBufferTreshold ),
-    iBufferPosition( aInitialPosition ),
-    iTotalCount( aTotalCount )
-    {
-    
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::ConstructL()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::ConstructL()
-    {
-    CActiveScheduler::Add(this);
-    
-    iResetOrdered = ETrue;
-    ResetBuffer(iBufferPosition, iTotalCount);
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::~CHgScrollBufferManager()
-// -----------------------------------------------------------------------------
-//
-CHgScrollBufferManager::~CHgScrollBufferManager()
-    {
-    Cancel();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::RunL()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::RunL()
-    {
-    MHgScrollBufferObserver::THgScrollDirection direction = MHgScrollBufferObserver::EHgBufferNoMove;
-    
-    if(iResetOrdered)
-        {
-        iResetOrdered = EFalse;
-        direction = MHgScrollBufferObserver::EHgBufferReset;
-        }
-    else
-        {
-        if(iDiff < 0)
-            {
-            iReleaseStart = iBufferPosition;
-            iRequestStart = iBufferPosition + iBufferSize;
-            direction = MHgScrollBufferObserver::EHgBufferScrollDown;
-            }
-        else if( iDiff > 0)
-            {
-            iReleaseStart = iBufferPosition + iBufferSize - iDiff;
-            iRequestStart = iBufferPosition - iDiff;
-            direction = MHgScrollBufferObserver::EHgBufferScrollUp;
-            }
-        }
-    
-    // Release 
-    TInt end = iReleaseStart + iReleaseCount < iTotalCount ?
-        iReleaseStart + iReleaseCount: iTotalCount; 
-    end--;
-    if(end >= iReleaseStart )
-        {
-        iObserver.Release(iReleaseStart, end);
-        if(iOwner) iOwner->Release( iReleaseStart, end );
-        }
-    
-    iReleaseCount = 0;
-    
-    // Request
-    end = iRequestStart + iRequestCount < iTotalCount ? 
-        iRequestStart + iRequestCount : iTotalCount;
-
-    end--;
-    if(end >= iRequestStart )
-        iObserver.Request(iRequestStart, end, direction);
-      
-    iRequestCount = 0;
-
-    // Move Buffer
-    iBufferPosition -= iDiff;
-    // Reset Diff
-    iDiff = 0;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::DoCancel()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::DoCancel()
-    {
-    // Nothing to do here
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::RunError()
-// -----------------------------------------------------------------------------
-//
-TInt CHgScrollBufferManager::RunError( TInt /*aError*/ )
-    {
-    return KErrNone;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::SetPosition()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::SetPosition( TInt aIndex )
-    {
-    TBool forceUpdate = EFalse;
-    aIndex -= iBufferSize / 2; // normalize index to Buffer start
-    
-    if(aIndex < 0)
-        {
-        aIndex = 0;
-        forceUpdate = ETrue;
-        }
-    else if( aIndex > iTotalCount - iBufferSize )
-        {
-        aIndex = iTotalCount - iBufferSize;
-        forceUpdate = ETrue;
-        }
-    
-    iDiff = iBufferPosition - aIndex; 
-    
-    // Too large change reset whole buffer
-    if( iDiff >= iBufferSize || -iDiff >= iBufferSize || iResetOrdered ) 
-        {
-        ResetBuffer(aIndex + (iBufferSize/2), iTotalCount);
-        }
-    // Move Up
-    else if( iDiff >= iBufferTreshold ) 
-        {
-        iRequestCount = iDiff;
-        iReleaseCount = iDiff;
-        NotifyObserver();
-        }
-    // Move Down
-    else if( -iDiff >= iBufferTreshold ) 
-        {
-        iRequestCount = -iDiff;
-        iReleaseCount = -iDiff;
-        NotifyObserver();
-        }
-    // Top or bottom has been reached
-    else if( forceUpdate && iDiff )
-        {
-        TInt diff = iDiff < 0 ? -iDiff : iDiff;
-        iRequestCount = diff;
-        iReleaseCount = diff;
-        NotifyObserver();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::SetTotalCount()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::SetTotalCount( TInt aTotalCount )
-    {
-    iTotalCount = aTotalCount;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::SetBufferOwner()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::SetBufferOwner( MHgBufferOwner& aOwner )
-    {
-    iOwner = &aOwner;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::ResetBuffer()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::ResetBuffer( TInt aPosition, TInt aTotalCount)
-    {
-    if( !iResetOrdered )
-        {
-        // release Old buffer
-        iReleaseStart = iBufferPosition;
-        iReleaseCount = iBufferSize;
-        }
-    
-    // set position and count
-    iBufferPosition = aPosition - (iBufferSize / 2);
-    iTotalCount = aTotalCount;
-    iDiff = 0;
-    
-    if( iBufferPosition + iBufferSize > iTotalCount - 1 )
-        {
-        iBufferPosition = iTotalCount - iBufferSize;
-        }
-    
-    if(iBufferPosition < 0 )
-        {
-        iBufferPosition = 0;
-        }
-    
-    //request new Buffer
-    iRequestStart = iBufferPosition;
-    iRequestCount = iBufferSize;
-    iResetOrdered = ETrue;
-    
-    NotifyObserver();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::NotifyObserver()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::NotifyObserver()
-    {
-    if( !IsActive() )
-        {
-        SetActive();
-        TRequestStatus* status = &iStatus;
-        User::RequestComplete(status, KErrNone);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScrollBufferManager::ItemChanged()
-// -----------------------------------------------------------------------------
-//
-void CHgScrollBufferManager::ItemCountChanged( 
-        TInt aIndex, 
-        TBool aRemoved,
-        TInt aNewTotalCount )
-    {  
-    iTotalCount = aNewTotalCount;
-    if ( aIndex >= iBufferPosition && aIndex < iBufferPosition + iBufferSize )
-        {
-        // Change inside the buffer
-        MHgScrollBufferObserver::THgScrollDirection direction = MHgScrollBufferObserver::EHgBufferNoMove;
-        if( aRemoved )
-            {
-            // Release removed item ( Item deleted already from the owner )
-            iObserver.Release( aIndex, aIndex );
-            if( iTotalCount >= iBufferSize )
-                {
-                // There are more items to keep the buffer filled
-                if( iBufferPosition + iBufferSize <= iTotalCount )
-                    {
-                    // Requested from the end
-                    iObserver.Request( iBufferPosition + iBufferSize - 1, 
-                            iBufferPosition + iBufferSize - 1, direction );
-                    }
-                else if( iBufferPosition > 0 )
-                    {
-                    // Move buffer and request from the beginning 
-                    iBufferPosition--;
-                    iObserver.Request( iBufferPosition, iBufferPosition, direction );
-                    }
-                }
-            }            
-        else
-            {
-            if( iTotalCount > iBufferSize )
-                {
-                // One item needs to be released
-                if( iBufferPosition + iBufferSize < iTotalCount )
-                    {
-                    // Release from the end of the buffer
-                    iObserver.Release(iBufferPosition + iBufferSize, iBufferPosition + iBufferSize);
-                    if(iOwner)
-                        iOwner->Release(iBufferPosition + iBufferSize, iBufferPosition + iBufferSize);
-                    }
-                }
-            // Request added item
-            iObserver.Request(aIndex, aIndex, direction);
-            }
-        }
-    }
-