idlehomescreen/xmluirendering/uiengine/src/xnviewswitcher.cpp
branchRCL_3
changeset 102 ba63c83f4716
parent 93 b01126ce0bec
child 103 966d119a7e67
--- a/idlehomescreen/xmluirendering/uiengine/src/xnviewswitcher.cpp	Wed Sep 15 12:00:00 2010 +0300
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,994 +0,0 @@
-/*
- * Copyright (c) 2002-2004 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 for wrapper for a box
- *
- */
-
-// System includes
-#include <akntouchgesturefwevents.h>
-#include <centralrepository.h>
-
-#include <activeidle2domaincrkeys.h>
-#include <gfxtranseffect/gfxtranseffect.h>  
-
-#ifdef RD_TACTILE_FEEDBACK
-#include <touchfeedback.h>
-#endif // RD_TACTILE_FEEDBACK
-
-// User includes
-#include "xnappuiadapter.h"
-#include "xnuiengine.h"
-#include "xnproperty.h"
-#include "xnviewmanager.h"
-#include "xnviewdata.h"
-#include "xndomnode.h"
-#include "xnnode.h"
-#include "xnviewcontroladapter.h"
-#include "xneffectmanager.h"
-#include "xnrootdata.h"
-#include "xnviewadapter.h"
-#include "xnbackgroundmanager.h"
-
-#include "xnviewswitcher.h"
-
-// Constants
-const TInt KDrawDelay( 25000 ); // 16100 = 62 fps
-const TInt KDragTreshold( 30 );
-const TInt KMaxScrollSpeed( 150 );
-const TInt KMinScrollSpeed( 20 );
-const TInt KAnimationDuration( 500000 );
-const TInt KDragOffsetForBackground( 100 );
-const TInt KDragOffsetForPageSwitch( 50 );
-
-enum TViewPosition
-    {
-    KCurrentView, KNextView, KPreviousView
-    };
-
-// ============================= LOCAL FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void HideAdapter( CXnControlAdapter* aAdapter )
-    {
-    if( aAdapter )
-        {
-        aAdapter->Window().SetOrdinalPosition( -1 );
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void ShowAdapter( CXnControlAdapter* aAdapter )
-    {
-    if( aAdapter )
-        {
-        aAdapter->Window().SetOrdinalPosition( 1 );
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// Changes window position
-// -----------------------------------------------------------------------------
-//
-void SetWindowPosition( CXnControlAdapter* aAdapter, const TPoint& aPos )
-    {
-    if( aAdapter )
-        {
-        aAdapter->Window().SetPosition( aPos );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// Hide/Show control
-// -----------------------------------------------------------------------------
-//
-void SetVisible( CCoeControl* aControl, TBool aVisible )
-    {
-    if( aControl )
-        {
-        aControl->MakeVisible( aVisible );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// ShowNodes
-// -----------------------------------------------------------------------------
-//
-void ShowNodesL( CXnNode& aNode, TBool aShow )
-    {    
-    CXnDomStringPool* sp( aNode.DomNode()->StringPool() );
-    
-    CXnProperty* prop( NULL );
-    if( aShow )
-        {
-        prop = CXnProperty::NewL(
-            XnPropertyNames::style::common::KDisplay, 
-            XnPropertyNames::style::common::display::KBlock,
-            CXnDomPropertyValue::EString, *sp );    
-        } 
-    else
-        {
-        prop = CXnProperty::NewL(
-            XnPropertyNames::style::common::KDisplay, 
-            XnPropertyNames::style::common::display::KNone,
-            CXnDomPropertyValue::EString, *sp );
-        }
-    CleanupStack::PushL( prop );    
-    
-    aNode.SetPropertyWithoutNotificationL( prop );
-    CleanupStack::Pop( prop );
-    }
-
-// -----------------------------------------------------------------------------
-// IsNodeVisible
-// -----------------------------------------------------------------------------
-//
-TBool IsNodeVisibleL( CXnNode& aNode )
-    {
-    CXnProperty* displayProp( aNode.DisplayL() );
-
-    if ( displayProp )
-        {
-        const TDesC8& display( displayProp->StringValue() );
-
-        if ( display == XnPropertyNames::style::common::display::KBlock )
-            {
-            return ETrue;
-            }
-        }
-    return EFalse;
-    }
-    
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CXnViewSwitcher::NewL
-// Symbian static 1st phase constructor
-// -----------------------------------------------------------------------------
-//
-CXnViewSwitcher* CXnViewSwitcher::NewL()
-    {
-    CXnViewSwitcher* self = new (ELeave) CXnViewSwitcher();
-
-    CleanupStack::PushL(self);
-    self->ConstructL();
-    CleanupStack::Pop(self);
-
-    return self;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnViewSwitcher::ConstructL
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::ConstructL()
-    {
-    iFingerFollowSupported = IsFingerFollowSupportedL();
-    iTimer = CPeriodic::NewL( CActive::EPriorityUserInput );
-    iViewSwitchState = KViewSwitchIdle;
-    }
-
-// -----------------------------------------------------------------------------
-// CXnViewSwitcher::CXnViewSwitcher
-// C++ default constructor
-// -----------------------------------------------------------------------------
-//
-CXnViewSwitcher::CXnViewSwitcher() :
-    iAppUi(static_cast<CXnAppUiAdapter&> (*iAvkonAppUi))
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CXnViewSwitcher::~CXnViewSwitcher
-// C++ destructor
-// -----------------------------------------------------------------------------
-//
-CXnViewSwitcher::~CXnViewSwitcher()
-    {    
-    if (iTimer->IsActive())
-        {
-        iTimer->Cancel();
-        }
-    delete iTimer;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CXnViewSwitcher::FingerFollowSupported() const
-    {
-    return iFingerFollowSupported;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CXnViewSwitcher::ProcessPointerEventL(const TPointerEvent& aPointerEvent )
-    {
-    TBool consumed(EFalse);
-    
-    if ( FingerFollowSupported() )
-        {
-        TPoint parentPos = aPointerEvent.iParentPosition;
-
-        switch (aPointerEvent.iType)
-            {
-            case TPointerEvent::EButton1Down:
-                {
-                if ( iViewSwitchState == KViewSwitchBegin || iViewSwitchState
-                        == KViewSwitchIdle )
-                    {
-                    if (iTimer->IsActive())
-                        {
-                        iTimer->Cancel();
-                        }
-                    if( SetupViewsL() )
-                        {
-                        iViewSwitchState = KViewSwitchBegin;
-                        iStartPosition = parentPos;
-                        iScrollSpeed = KMaxScrollSpeed;
-                        iTickAmount = 0;
-                        iDirection = KCurrentView;
-                        iScrollDistance = 0;
-                        iScrollDirectionDistance = 0;
-                        }
-                    }
-                else if( iViewSwitchState == KViewSwitchDragOngoing )
-                    {
-                    consumed = ETrue;
-                    }
-                else if( iViewSwitchState == KViewSwitchScroll )
-                    {
-                    consumed = ETrue;
-
-                    if( iActivateView == KCurrentView )
-                        {
-                        if (iTimer->IsActive())
-                            {
-                            iTimer->Cancel();
-                            }                    
-
-                        iViewSwitchState = KViewSwitchDragOngoing;
-                        consumed = ETrue;    
-                        iViewStartPosition = iViewPosition;
-                        iScrollDistance = 0;
-                        iScrollDirectionDistance = 0;
-                        iStartPosition = parentPos;
-
-                        iTimer->Start( 0, KDrawDelay, TCallBack(
-                                TimerCallback, this ) );
-                        }
-                    else if( iActivateView == KNextView )
-                        {
-                        if( iCurrentView.iAdapter && iNextView.iAdapter && 
-                            iPreviousView.iAdapter )
-                            {
-                            if (iTimer->IsActive())
-                                {
-                                iTimer->Cancel();
-                                }
-                            
-                            iViewSwitchState = KViewSwitchDragOngoing;
-                            iActivateView = KCurrentView;
-                            
-                            if( iPreviousView.iAdapter == iNextView.iAdapter )
-                                {
-                                iPreviousView = iCurrentView;
-                                iCurrentView = iNextView;
-                                iNextView = iPreviousView;
-                                }
-                            else
-                                {
-                                iPreviousView = iCurrentView;
-    
-                                iCurrentView = iNextView;
-                                
-                                iNextView.iReadyToDraw = EFalse;
-                                CXnViewData* nextViewData( 
-                                    ViewData( *iCurrentView.iViewData, KNextView ) );
-                                CXnNode* nextViewNode( nextViewData->ViewNode() );
-                                if( nextViewNode )
-                                    {
-                                    iNextView.iAdapter = nextViewNode->Control();
-                                    iNextView.iViewData = nextViewData;
-                                    iNextView.iBgDrawn = EFalse;
-                                    }                            
-                                }
-                            
-                            iViewStartPosition = iCurrentView.iAdapter->Window().Position();
-                            iScrollDistance = 0;
-                            iScrollDirectionDistance = 0;
-                            iStartPosition = parentPos;
-                        
-                            iScrollSpeed = KMaxScrollSpeed;
-                            iTickAmount = 0;
-                            iTimer->Start( 0, KDrawDelay, TCallBack(
-                                    TimerCallback, this ) );
-                            }
-                        consumed = ETrue;
-                        }
-                    else if( iActivateView == KPreviousView )
-                        {
-                        if( iCurrentView.iAdapter && iNextView.iAdapter && 
-                            iPreviousView.iAdapter )
-                            {
-                            if (iTimer->IsActive())
-                                {
-                                iTimer->Cancel();
-                                }
-                            
-                            iViewSwitchState = KViewSwitchDragOngoing;
-                            iActivateView = KCurrentView;
-
-                            if( iPreviousView.iAdapter == iNextView.iAdapter )
-                                {
-                                iNextView = iCurrentView;
-                                iCurrentView = iPreviousView;
-                                iPreviousView = iNextView;
-                                }
-                            else
-                                {
-                                iNextView = iCurrentView;
-    
-                                iCurrentView = iPreviousView;
-                                
-                                iPreviousView.iReadyToDraw = EFalse;
-                                CXnViewData* prevViewData( 
-                                    ViewData( *iCurrentView.iViewData, KPreviousView ) );
-                                CXnNode* prevViewNode( prevViewData->ViewNode() );
-                                if( prevViewNode )
-                                    {
-                                    iPreviousView.iAdapter = prevViewNode->Control();
-                                    iPreviousView.iViewData = prevViewData;
-                                    iPreviousView.iBgDrawn = EFalse;
-                                    }                            
-                                }
-
-                            iViewStartPosition = iCurrentView.iAdapter->Window().Position();
-                            iScrollDistance = 0;
-                            iScrollDirectionDistance = 0;
-                            iStartPosition = parentPos;
-                        
-                            iScrollSpeed = KMaxScrollSpeed;
-                            iTickAmount = 0;
-                            iTimer->Start( 0, KDrawDelay, TCallBack(
-                                TimerCallback, this ) );
-                            }
-                        consumed = ETrue;
-                        }
-                    }
-                }
-                break;
-            case TPointerEvent::EDrag:
-                {
-                if( iViewSwitchState == KViewSwitchIdle )
-                    {
-                    consumed = EFalse;
-                    }
-                else if( iViewSwitchState == KViewSwitchBegin )
-                    {
-                    TPoint delta = parentPos - iStartPosition;
-
-                    if( Abs(delta.iX) > KDragTreshold || Abs(delta.iY) > KDragTreshold )
-                        {
-#ifdef RD_TACTILE_FEEDBACK            
-                        MTouchFeedback* feedback( MTouchFeedback::Instance() );
-                        
-                        if ( feedback )
-                            {
-                            feedback->InstantFeedback( ETouchFeedbackBasic );
-                            }
-#endif                           
-
-                        iViewSwitchState = KViewSwitchDragOngoing;
-                        iActivateView = KCurrentView;
-                        iViewPosition.iY = iCurrentView.iAdapter->Position().iY;
-                        iViewPosition.iX = 0;
-                        iStartPosition = parentPos;
-
-                        StartViewDraggingL();
-
-                        iTimer->Start( 0, KDrawDelay, TCallBack(
-                                TimerCallback, this ) );
-                        }
-                    consumed = ETrue;
-                    }
-                else if( iViewSwitchState == KViewSwitchDragOngoing )
-                    {
-                    iScrollDistance = parentPos.iX - iStartPosition.iX;
-                    consumed = ETrue;
-                    }
-                else
-                    {
-                    consumed = EFalse;                
-                    }
-                }
-                break;
-            case TPointerEvent::EButton1Up:
-                {
-                if( iViewSwitchState == KViewSwitchBegin )
-                    {
-                    iViewSwitchState = KViewSwitchIdle;
-                    }
-                else if( iViewSwitchState == KViewSwitchDragOngoing )
-                    {
-                    if (iTimer->IsActive())
-                        {
-                        iTimer->Cancel();
-                        }                    
-
-#ifdef RD_TACTILE_FEEDBACK            
-/*
-                    MTouchFeedback* feedback( MTouchFeedback::Instance() );
-                    
-                    if ( feedback )
-                        {
-                        feedback->InstantFeedback( ETouchFeedbackBasic );
-                        }
-*/
-#endif                           
-
-                    consumed = ETrue;
-                    
-                    StartViewScrolling();
-                    iViewSwitchState = KViewSwitchScroll;
-                    }
-                else if( iViewSwitchState == KViewSwitchScroll )
-                    {
-                    consumed = ETrue;
-                    }
-                }
-                break;
-            default:
-                break;
-            }
-        }
-
-    return consumed;
-    }
-    
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::TouchGesture( TAknTouchGestureFwType& /*aTouchGesture*/ )
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CXnViewSwitcher::SizeChanged
-// -----------------------------------------------------------------------------
-// 
-void CXnViewSwitcher::SizeChanged( TRect aRect )
-    {
-    iRect = aRect;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CXnViewSwitcher::SetupViewsL()
-    {
-    TBool ret = EFalse;
-    
-    CXnViewManager& wManager = iAppUi.ViewManager();
-    iCurrentView.iViewData = &wManager.ActiveViewData();
-    iCurrentView.iAdapter = iCurrentView.iViewData->ViewNode()->Control();
-    iCurrentView.iReadyToDraw = ETrue;
-    iCurrentView.iBgDrawn = ETrue;
-
-    iViewStartPosition = TPoint( 0, iCurrentView.iAdapter->Window().Position().iY );
-
-    if ( wManager.ViewAmount() > 1 )
-        {
-        ret = ETrue;
-        
-        CXnNode* nextViewNode( wManager.NextViewData().ViewNode() );
-        if( nextViewNode )
-            {
-            iNextView.iAdapter = nextViewNode->Control();
-            iNextView.iViewData = &wManager.NextViewData();
-            }
-
-        CXnNode* prevViewNode( wManager.PreviousViewData().ViewNode() );
-        if( prevViewNode && prevViewNode == nextViewNode )
-            {
-            // Only 2 views in Homesceern -> previous = next
-            iPreviousView = iNextView;
-            }
-        else if( prevViewNode )
-            {
-            iPreviousView.iAdapter = prevViewNode->Control();
-            iPreviousView.iViewData = &wManager.PreviousViewData();
-            }
-        }
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::PrepareViewL( CXnViewSwitcher::TViewInformation& aView )
-    {
-    if( !aView.iAdapter || !aView.iViewData )
-        {
-        return;
-        }
-    
-    CXnControlAdapter& adapter = *aView.iAdapter;
-    RWindow& win( adapter.Window() );
-    win.SetOrdinalPosition( -1 );
-    adapter.MakeVisible( ETrue );
-
-    CXnNode* viewNode( aView.iViewData->ViewNode() );
-    TBool nodesVisible( IsNodeVisibleL( *viewNode ) );
-    if( !nodesVisible )
-        {
-        // Set visible temporarily
-        ShowNodesL( *viewNode, ETrue );
-        }
-    
-    iAppUi.ViewAdapter().EnterEditStateL( *aView.iViewData, EFalse );
-        
-    viewNode->UiEngine()->RenderUIL( viewNode );
-    aView.iReadyToDraw = ETrue;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::StartViewDraggingL()
-    {
-    // Remove focused node, in order to prevent activate triggers
-    CXnNode* currentViewNode =
-            iAppUi.ViewManager().ActiveViewData(). Node()->LayoutNode();
-    CXnUiEngine* engine(currentViewNode->UiEngine());
-
-    CXnNode* focusedNode = engine->FocusedNode();
-    if (focusedNode)
-        {
-        focusedNode->UnsetStateL(XnPropertyNames::style::common::KPressedDown);
-        focusedNode->UnsetStateL(XnPropertyNames::style::common::KFocus);
-        }
-
-    // Send button up to prevent long tapping 
-    TPointerEvent pointerEvent;
-    pointerEvent.iType = TPointerEvent::EButton1Up;
-    if ( iCurrentView.iAdapter )
-        {
-        iCurrentView.iAdapter->CXnControlAdapter::HandlePointerEventL(
-                pointerEvent);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::StartViewScrolling()
-    {
-    TInt screenWidth = iCurrentView.iAdapter->Window().Size().iWidth;
-
-    UpdateViewToBeActivated( KDragOffsetForPageSwitch );
-
-    switch (iActivateView)
-        {
-        case KPreviousView:
-            {
-            iScrollDistance = screenWidth - iViewPosition.iX;
-            }
-            break;
-        case KNextView:
-            {
-            iScrollDistance = -screenWidth - iViewPosition.iX;
-            }
-            break;
-        default: // KCurrentView
-            {
-            iScrollDistance = -iViewPosition.iX;
-            }
-            break;
-        }
-
-    TInt minSpeed = Abs( iScrollDistance / ( KAnimationDuration / KDrawDelay ) );
-    iScrollSpeed = Abs( iScrollSpeed );
-    if( iScrollSpeed < minSpeed )
-        {
-        iScrollSpeed = minSpeed;
-        }
-    if( iScrollSpeed < KMinScrollSpeed )
-        {
-        iScrollSpeed = KMinScrollSpeed;
-        }
-    if (iTimer->IsActive())
-        {
-        iTimer->Cancel();
-        }
-    
-    iTimer->Start(KDrawDelay, KDrawDelay, TCallBack(
-            TimerCallback, this));
-    }
-
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::ViewSwitchEndedL()
-    {
-    iViewSwitchState = KViewSwitchIdle;
-
-    if (iTimer->IsActive())
-        {
-        iTimer->Cancel();
-        }
-
-    iViewPosition.iX = 0;
-
-    if ( iCurrentView.iAdapter )
-        {
-        CXnViewManager& wManager( iAppUi.ViewManager() );
-        CXnViewData* activeViewData( &wManager.ActiveViewData() ); 
-        
-        switch( iActivateView )
-            {
-            case KCurrentView:
-                SetVisible( iNextView.iAdapter, EFalse );
-                SetVisible( iPreviousView.iAdapter, EFalse );    
-                
-                if( iCurrentView.iViewData && activeViewData != iCurrentView.iViewData )
-                    {
-                    wManager.ActivateViewL( *iCurrentView.iViewData, TUid::Null(), EFalse );            
-                    }
-                break;
-            case KPreviousView:
-                if ( iPreviousView.iAdapter )
-                    {
-                    SetVisible( iCurrentView.iAdapter, EFalse );
-                    if( iPreviousView.iAdapter != iNextView.iAdapter )
-                        {
-                        SetVisible( iNextView.iAdapter, EFalse );
-                        }
-
-                    CXnViewData* prevViewData( ViewData( *iCurrentView.iViewData, KPreviousView ) );
-                    if( prevViewData && activeViewData != prevViewData )
-                        {
-                        wManager.ActivateViewL( *prevViewData, TUid::Null(), EFalse );            
-                        }
-                    }
-                break;
-            case KNextView:
-                if ( iNextView.iAdapter )
-                    {
-                    SetVisible( iCurrentView.iAdapter, EFalse );
-                    if( iPreviousView.iAdapter != iNextView.iAdapter )
-                        {
-                        SetVisible( iPreviousView.iAdapter, EFalse );                
-                        }
-
-                    CXnViewData* nextViewData( ViewData( *iCurrentView.iViewData, KNextView ) );
-                    if( nextViewData && activeViewData != nextViewData )
-                        {
-                        wManager.ActivateViewL( *nextViewData, TUid::Null(), EFalse );            
-                        }                    
-                    }
-                break;
-            }
-
-        ClearViews();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::Scroll()
-    {
-    TInt scrollStep = iScrollDistance / 1.5;
-
-    if( Abs( scrollStep ) > Abs( iScrollSpeed ) )
-        {
-        scrollStep = ( scrollStep > 0 ) ? iScrollSpeed : -iScrollSpeed;
-        }
-
-    iViewPosition.iX += scrollStep;
-    iScrollDistance -= scrollStep;
-    }
-        
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::DoScroll()
-    {
-    SetWindowPosition( iCurrentView.iAdapter, iViewPosition );
-
-    if( iViewPosition.iX < 0 && iNextView.iAdapter )
-        {
-        // next view shown
-        if( !iNextView.iReadyToDraw )
-            {
-            TRAP_IGNORE( PrepareViewL( iNextView ) );
-            if( iPreviousView.iAdapter == iNextView.iAdapter )
-                {
-                iPreviousView.iReadyToDraw = ETrue;          
-                }
-            }
-        
-        ShowAdapter( iNextView.iAdapter );
-        if( iPreviousView.iAdapter != iNextView.iAdapter )
-            {
-            HideAdapter( iPreviousView.iAdapter );
-            }
-        
-        TPoint pos( TPoint( iViewPosition.iX + iRect.Width(), iViewPosition.iY ) );
-        SetWindowPosition( iNextView.iAdapter, pos );
-        }
-
-    else if( iViewPosition.iX > 0 && iPreviousView.iAdapter )
-        {
-        // previous view shown
-        if( !iPreviousView.iReadyToDraw )
-            {
-            TRAP_IGNORE( PrepareViewL( iPreviousView ) );
-            }
-
-        ShowAdapter( iPreviousView.iAdapter );
-        if( iPreviousView.iAdapter != iNextView.iAdapter )
-            {
-            HideAdapter( iNextView.iAdapter );
-            }
-        TPoint pos( TPoint( iViewPosition.iX - iRect.Width(), iViewPosition.iY ) );
-        SetWindowPosition( iPreviousView.iAdapter, pos );
-        }
-    
-    else
-        {
-        HideAdapter( iPreviousView.iAdapter );
-        HideAdapter( iNextView.iAdapter );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TInt CXnViewSwitcher::TimerCallback(TAny *aPtr)
-    {
-    CXnViewSwitcher* self = reinterpret_cast<CXnViewSwitcher*> (aPtr);
-
-    if( self->iViewSwitchState == KViewSwitchDragOngoing )
-        {
-        TInt prevViewPos( self->iViewPosition.iX );
-        self->iViewPosition.iX = self->iViewStartPosition.iX + self->iScrollDistance;
-        self->DoScroll();
-        
-        self->UpdateViewToBeActivated( KDragOffsetForBackground );
-        
-        // Hack for informing NGA to draw. 
-        self->iAppUi.ViewAdapter().BgManager().DrawNow(TRect(0,0,1,1));
-        
-        // Scroll speed is average drag delta between timer callbacks.
-        self->iTickAmount++;
-
-        TInt scrollDistance = self->iViewPosition.iX - prevViewPos;
-        
-        if( ( scrollDistance < 0 && self->iScrollDirectionDistance > 0 ) || 
-            ( scrollDistance > 0 && self->iScrollDirectionDistance < 0 ) )
-            {
-            // Scroll direction has been changed
-            self->iScrollDirectionDistance = scrollDistance;
-            self->iScrollSpeed = scrollDistance;
-            self->iTickAmount = 1;            
-            }
-        else
-            {
-            self->iScrollDirectionDistance += scrollDistance;
-            self->iScrollSpeed = self->iScrollDistance / self->iTickAmount;    
-            }
-        
-        if( scrollDistance < 0 )
-            {
-            self->iDirection = KNextView;
-            }
-        else if( scrollDistance > 0 )
-            {
-            self->iDirection = KPreviousView;
-            }
-
-        return 0;
-        }
-
-    if ( Abs( self->iScrollDistance ) <= 2 )
-        {
-        TRAP_IGNORE( self->ViewSwitchEndedL() );
-        }
-    else
-        {
-        self->Scroll();
-        self->DoScroll();
-        
-        // Hack for inforing NGA to draw. 
-        self->iAppUi.ViewAdapter().BgManager().DrawNow(TRect(0,0,1,1));
-        }
-    return 0;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-TBool CXnViewSwitcher::IsFingerFollowSupportedL() const
-    {    
-    CRepository* repository =
-            CRepository::NewL(TUid::Uid(KCRUidActiveIdleLV));
-    TBool value(EFalse);
-    TInt err(repository->Get(KAIFingerFollowSupport, value));
-    delete repository;
-
-    return value && (KErrNone == err);
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-CXnViewData* CXnViewSwitcher::ViewData( CXnViewData& aCurrentViewData, 
-    TInt aView )
-    {
-    CXnRootData& rootData = iAppUi.ViewManager().ActiveAppData();
-    RPointerArray<CXnPluginData>& rootDataArr = rootData.PluginData();
-
-    CXnViewData* ret( NULL );
-    
-    TInt viewAmount( rootDataArr.Count() );
-    for( TInt i = 0; i < viewAmount; i++ )
-        {
-        CXnViewData* viewData = static_cast<CXnViewData*>( rootDataArr[i] );
-        if( &aCurrentViewData == viewData )
-            {
-            if( aView == KNextView )
-                {
-                if( i < viewAmount - 1 )
-                    {
-                    ret = static_cast<CXnViewData*>( rootDataArr[i + 1] );
-                    }
-                else
-                    {
-                    ret = static_cast<CXnViewData*>( rootDataArr[0] );            
-                    }
-                break;
-                }
-            else if( aView == KPreviousView )
-                {
-                if( i == 0 )
-                    {
-                    ret = static_cast<CXnViewData*>( rootDataArr[viewAmount - 1] );
-                    }
-                else
-                    {
-                    ret = static_cast<CXnViewData*>( rootDataArr[i - 1] );            
-                    }            
-                break;
-                }
-            }
-        }
-    
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::ClearViews()
-    {
-    TPoint p( 0, iCurrentView.iAdapter->Window().Position().iY );
-    SetWindowPosition( iCurrentView.iAdapter, p );
-    SetWindowPosition( iPreviousView.iAdapter, p );
-    SetWindowPosition( iNextView.iAdapter, p );
-    ShowAdapter( iPreviousView.iAdapter );
-    ShowAdapter( iNextView.iAdapter );
-    ShowAdapter( iCurrentView.iAdapter );
-    iCurrentView.iAdapter = NULL;
-    iCurrentView.iViewData = NULL;
-    iCurrentView.iReadyToDraw = EFalse;
-    iCurrentView.iBgDrawn = EFalse;
-    iNextView.iAdapter = NULL;
-    iNextView.iViewData = NULL;
-    iNextView.iReadyToDraw = EFalse;
-    iNextView.iBgDrawn = EFalse;
-    iPreviousView.iAdapter = NULL;
-    iPreviousView.iViewData = NULL;
-    iPreviousView.iReadyToDraw = EFalse;
-    iPreviousView.iBgDrawn = EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::UpdateViewToBeActivated( TInt aOffset )
-    {
-    if ( iViewPosition.iX > aOffset && iDirection == KPreviousView && 
-        iScrollDirectionDistance > aOffset / 2)
-        {
-        if( iActivateView != KPreviousView &&
-            iPreviousView.iViewData && iCurrentView.iViewData )
-            {
-            iActivateView = KPreviousView;
-            if( !iPreviousView.iBgDrawn )
-                {
-                ChangeBackground( *iCurrentView.iViewData, 
-                    *iPreviousView.iViewData );
-                iPreviousView.iBgDrawn = ETrue; 
-                iNextView.iBgDrawn = EFalse;
-                iCurrentView.iBgDrawn = EFalse;
-                }
-            }
-        }
-    else if ( iViewPosition.iX < -aOffset && iDirection == KNextView && 
-        iScrollDirectionDistance < -aOffset / 2 )
-        {
-        if( iActivateView != KNextView && 
-            iNextView.iViewData && iCurrentView.iViewData )
-            {
-            iActivateView = KNextView;
-            if( !iNextView.iBgDrawn )
-                {
-                ChangeBackground( *iCurrentView.iViewData, 
-                    *iNextView.iViewData );
-                iPreviousView.iBgDrawn = EFalse; 
-                iNextView.iBgDrawn = ETrue;
-                iCurrentView.iBgDrawn = EFalse;                            
-                }
-            }
-        }
-    else if( iActivateView != KCurrentView && 
-        iPreviousView.iViewData && iNextView.iViewData && iCurrentView.iViewData )
-        {
-        if( Abs( iScrollDirectionDistance ) > aOffset / 2 )
-            {
-            iActivateView = KCurrentView;
-            if( !iCurrentView.iBgDrawn )
-                {    
-                ChangeBackground( ( iPreviousView.iBgDrawn ) ? *iPreviousView.iViewData :
-                    *iNextView.iViewData, *iCurrentView.iViewData );                                
-                iPreviousView.iBgDrawn = EFalse; 
-                iNextView.iBgDrawn = EFalse;
-                iCurrentView.iBgDrawn = ETrue;                            
-                }        
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::ChangeBackground( CXnViewData& aCurrent, CXnViewData& aNext )
-    {
-    CXnBackgroundManager& bg( iAppUi.ViewAdapter().BgManager() );
-
-    GfxTransEffect::Begin( &bg, KGfxControlActionBgImgToImgAppear );
-    
-    bg.ChangeWallpaper( aCurrent, aNext, EFalse );
-
-    GfxTransEffect::SetDemarcation( &bg, bg.Position() );
-    GfxTransEffect::End( &bg ); 
-    }
-
-// -----------------------------------------------------------------------------
-// -----------------------------------------------------------------------------
-//
-void CXnViewSwitcher::StopViewSwitchL()
-    {
-    ViewSwitchEndedL();
-    }
-
-// End of file