diff -r 000000000000 -r 8466d47a6819 emailuis/uicomponents/src/fsslideeffect.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/uicomponents/src/fsslideeffect.cpp Thu Dec 17 08:39:21 2009 +0200 @@ -0,0 +1,354 @@ +/* +* Copyright (c) 2007 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: Freestyle tree node implementation. +* +*/ + + +//////SYSTEM INCLUDES +#include "emailtrace.h" +#include + +//////TOOLKIT INCLUDES +// SF +#include +#include +#include +#include +#include +#include +#include +// + +//////PROJECT INCLUDES +// removed __FS_ALFRED_SUPPORT flag +//#include +// removed __FS_ALFRED_SUPPORT flag +#include "fsslideeffect.h" +#include "fsslideeffectobserver.h" + + +// ======== MEMBER FUNCTIONS ======== + + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CFsSlideEffect* CFsSlideEffect::NewL( CAlfControl* aControl, CAlfVisual* aRoot, TInt aTime ) + { + FUNC_LOG; + CFsSlideEffect* self = new (ELeave) CFsSlideEffect( aControl, aRoot, aTime ); + return self; + } + +// --------------------------------------------------------------------------- +// Two-phased constructor. +// --------------------------------------------------------------------------- +// +CFsSlideEffect* CFsSlideEffect::NewL( + CAlfControl* aControl, + MFsSlideEffectObserver* aObserver, + CAlfVisual* aRoot, + TInt aTime) + { + FUNC_LOG; + CFsSlideEffect* self = new (ELeave) CFsSlideEffect( aControl, aObserver, aRoot, aTime ); + return self; + } + + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +CFsSlideEffect::CFsSlideEffect(CAlfControl* aControl, CAlfVisual* aRoot, TInt aTime) + : iControl(aControl), + iRoot(aRoot), + iTime(aTime) + { + FUNC_LOG; + //No implementation nedeed + } + +// --------------------------------------------------------------------------- +// Constructor. +// --------------------------------------------------------------------------- +// +CFsSlideEffect::CFsSlideEffect( + CAlfControl* aControl, + MFsSlideEffectObserver* aObserver, + CAlfVisual* aRoot, TInt aTime) + : iControl(aControl), + iRoot(aRoot), + iObserver(aObserver), + iTime(aTime) + { + FUNC_LOG; + //No implementation needed. + } + +// --------------------------------------------------------------------------- +// Launches slide in effect. +// --------------------------------------------------------------------------- +// +void CFsSlideEffect::SlideIn( + CFsSlideEffect::TSlideEffectDirection aDirection) + { + FUNC_LOG; + + TAlfRealPoint pos( iRoot->Layout()->Pos().ValueNow() ); + TAlfRealPoint size( iRoot->Layout()->Size().ValueNow() ); + + TAlfRealRect rectFinal; + TAlfRealRect rectStart; + + //coordinates in reference to parent layout + rectFinal.iTl.iX = 0; + rectFinal.iTl.iY = 0; + rectFinal.iBr.iX = size.iX; + rectFinal.iBr.iY = size.iY; + + TRect sreenRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, sreenRect ); + + switch(aDirection) + { + case ESlideNone: + { + iRoot->SetRect(rectFinal,0); + break; + } + case ESlideFromTop: + { + rectStart.iTl.iX = rectFinal.iTl.iX; + rectStart.iTl.iY = -pos.iY - size.iY; + rectStart.iBr.iX = rectFinal.iTl.iX + size.iX; + rectStart.iBr.iY = -pos.iY; + iRoot->SetRect( rectStart, 0 ); + iRoot->SetRect(rectFinal,iTime); + break; + } + + case ESlideFromBottom: + { + rectStart.iTl.iX = rectFinal.iTl.iX; + rectStart.iTl.iY = sreenRect.Height() - pos.iY; + rectStart.iBr.iX = rectFinal.iTl.iX + size.iX; + rectStart.iBr.iY = sreenRect.Height() - pos.iY + size.iY; + iRoot->SetRect( rectStart, 0 ); + iRoot->SetRect(rectFinal,iTime); + break; + } + + case ESlideFromLeft: + { + rectStart.iTl.iX = -pos.iX - size.iX; + rectStart.iTl.iY = rectFinal.iTl.iY; + rectStart.iBr.iX = -pos.iX; + rectStart.iBr.iY = rectFinal.iBr.iY; + iRoot->SetRect( rectStart, 0 ); + iRoot->SetRect(rectFinal,iTime); + break; + } + + case ESlideFromRight: + { + rectStart.iTl.iX = sreenRect.Width(); + rectStart.iTl.iY = rectFinal.iTl.iY; + rectStart.iBr.iX = sreenRect.Width() + size.iX; + rectStart.iBr.iY = rectFinal.iBr.iY; + iRoot->SetRect( rectStart, 0 ); + iRoot->SetRect(rectFinal,iTime); + break; + } + default: + return; + } + + + if (iObserver) + { + iObserver->SlideEffectEvent(MFsSlideEffectObserver::ESlidingIn); + } + + //cancel pending events + if ( iControl ) + { + iControl->Env().CancelCustomCommands(this); + + //send a command to inform about end of slide in effect + TInt error = iControl->Env().Send(TAlfCustomEventCommand( ECustomEventSlideInFinished, this), iTime); + if (error != KErrNone) + { + + } + } + } + +// --------------------------------------------------------------------------- +// Launches slide out effect. +// --------------------------------------------------------------------------- +// +void CFsSlideEffect::SlideOut( + CFsSlideEffect::TSlideEffectDirection aDirection) + { + FUNC_LOG; + TAlfRealPoint pos = iRoot->Layout()->Pos().ValueNow(); + TAlfRealPoint size = iRoot->Layout()->Size().ValueNow(); + + TAlfRealRect rectStart; + TAlfRealRect rectFinal; + + rectStart.iTl.iX = 0; + rectStart.iTl.iY = 0; + rectStart.iBr.iX = size.iX; + rectStart.iBr.iY = size.iY; + + TRect sreenRect; + AknLayoutUtils::LayoutMetricsRect( AknLayoutUtils::EMainPane, sreenRect ); + + switch( aDirection ) + { + case ESlideNone: + { + iRoot->SetRect( rectStart, 0 ); + break; + } + case ESlideFromTop: + { + rectFinal.iTl.iX = rectStart.iTl.iX; + rectFinal.iTl.iY = (pos.iY - sreenRect.Height()) - size.iY; + rectFinal.iBr.iX = rectStart.iBr.iX; + rectFinal.iBr.iY = (pos.iY - sreenRect.Height()); + iRoot->SetRect( rectFinal ,iTime ); + break; + } + + case ESlideFromBottom: + { + rectFinal.iTl.iX = rectStart.iTl.iX; + rectFinal.iTl.iY = sreenRect.Height() - pos.iY; + rectFinal.iBr.iX = rectStart.iBr.iX; + rectFinal.iBr.iY = sreenRect.Height() - pos.iY + size.iY; + iRoot->SetRect( rectFinal ,iTime ); + break; + } + + case ESlideFromLeft: + { + rectFinal.iTl.iX = ( pos.iX - sreenRect.Width() ) - size.iX; + rectFinal.iTl.iY = rectStart.iTl.iY; + rectFinal.iBr.iX = pos.iX - sreenRect.Width(); + rectFinal.iBr.iY = rectStart.iBr.iY; + iRoot->SetRect( rectFinal ,iTime ); + break; + } + + case ESlideFromRight: + { + rectFinal.iTl.iX = sreenRect.Width(); + rectFinal.iTl.iY = rectStart.iTl.iY; + rectFinal.iBr.iX = sreenRect.Width() + size.iX; + rectFinal.iBr.iY = rectStart.iBr.iY; + iRoot->SetRect( rectFinal ,iTime ); + break; + } + default: + return; + } + + + if ( iObserver ) + { + iObserver->SlideEffectEvent( MFsSlideEffectObserver::ESlidingOut ); + } + + //cancel pending events + if ( iControl ) + { + iControl->Env().CancelCustomCommands(this); + + //send a command to inform about end of slide out effect + TInt error = iControl->Env().Send(TAlfCustomEventCommand( ECustomEventSlideOutFinished, this), iTime); + if (error != KErrNone) + { + + } + } + } + +// --------------------------------------------------------------------------- +// Sets duration of slide in/out effect. +// --------------------------------------------------------------------------- +// +void CFsSlideEffect::SetTime( const TInt aTime) + { + FUNC_LOG; + iTime = aTime; + } + + +// --------------------------------------------------------------------------- +// Returns duration of the slide effect +// --------------------------------------------------------------------------- +// +TInt CFsSlideEffect::Time() const + { + FUNC_LOG; + return iTime; + } + + +// --------------------------------------------------------------------------- +// From MAlfEventHandler +// Called when an input event is being offered to this object. +// --------------------------------------------------------------------------- +// +TBool CFsSlideEffect::OfferEventL(const TAlfEvent& aEvent) + { + FUNC_LOG; + TBool result(EFalse); + if( aEvent.IsCustomEvent() ) + { + if ( aEvent.CustomParameter() == ECustomEventSlideInFinished ) + { + result = ETrue; + //inform observer + if ( iObserver ) + { + iObserver->SlideEffectEvent(MFsSlideEffectObserver::ESlideInFinished); + } + } + else if ( aEvent.CustomParameter() == ECustomEventSlideOutFinished ) + { + result = ETrue; + //inform observer + if ( iObserver ) + { + iObserver->SlideEffectEvent(MFsSlideEffectObserver::ESlideOutFinished); + } + } + } + else + { + result = EFalse; + } + + return result; + } + + +//End Of File +