diff -r d189ee25cf9d -r 3533d4323edc emailuis/emailui/inc/FreestyleEmailUiLauncherGridVisualiser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/inc/FreestyleEmailUiLauncherGridVisualiser.h Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,453 @@ +/* +* Copyright (c) 2007-2010 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: FreestyleEmailUi main UI grid definition. +* +*/ + + + +#ifndef __FREESTYLEEMAILUI_MAINGRIDUIVISUALISER_H__ +#define __FREESTYLEEMAILUI_MAINGRIDUIVISUALISER_H__ + +// SYSTEM INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include + +// INTERNAL INCLUDE FILES +#include "FreestyleEmailUiViewBase.h" +#include "FreestyleEmailUiLauncherGridModel.h" +#include "FreestyleEmailUiAppui.h" + +#include "FSEmailLauncherItem.h" +#include "freestyleemailuimailboxdeleter.h" +#include "FreestyleEmailUiUtilities.h" + +// FORWARD DECLARATIONS +class CBrushAnimation; +class CFsAlfScrollbarLayout; +class CAknStylusPopUpMenu; +class CCoeControl; +class CAknPhysics; + +class TFSLauncherGridMailboxStatus + { + public: + TInt iMailboxCount; + TInt iMailboxesOnline; + TInt iMailboxesOffline; + TInt iMailboxesSyncing; + }; + + +// Grid visualiser +class CFSEmailUiLauncherGridVisualiser : public CFsEmailUiViewBase, + public MAlfBitmapProvider, + public MFSEmailLauncherItemObserver, + public MEikScrollBarObserver, + public MFSEmailUiMailboxDeleteObserver, + public MFSEmailUiGenericTimerCallback, + public MAknPhysicsObserver + { +public: + enum TDirection + { + EDirectionRight=0, + EDirectionLeft, + EDirectionUp, + EDirectionDown, + EDirectionReset, + EDirectionNone, + // + EDirectionTouch + // + }; + + static CFSEmailUiLauncherGridVisualiser* NewL(CAlfEnv& aEnv, + CFSEmailUiLauncherGrid* aControl, + CFreestyleEmailUiAppUi* aAppUi, + CAlfControlGroup& aControlGroup, + TInt aColumns, + TInt aRows); + + static CFSEmailUiLauncherGridVisualiser* NewLC(CAlfEnv& aEnv, + CFSEmailUiLauncherGrid* aControl, + CFreestyleEmailUiAppUi* aAppUi, + CAlfControlGroup& aControlGroup, + TInt aColumns, + TInt aRows); + + void AddMenuItemL(TUid aUid); + void SelectL(); + // Menu pane init and command handling + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); + void HandleCommandL(TInt aCommand); + + TBool OfferEventL(const TAlfEvent& aEvent); + // + /** + * Handler for touch related events + * @param aEvent, event type + * @return ETrue if event was used + */ + TBool HandlePointerEventL(const TAlfEvent& aEvent); + + /** + * Function for searching right item when pointer event occurs + * @param aEvent, event type + * @return KErrnone if item was not found, else index to founded item + */ + TInt FindPointedItem( const TAlfEvent& aEvent ); + + /** + * Function for setting focus to item + * @param aId, id of item where focus is going to be changed + */ + void SetFocusedItemL( TInt aId ); + + void HandleRowMovement( TDirection aDir, TInt aSelected ); + // + TUid Id() const; + // Toolbar + /* + void DoActivateL(const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage); + */ + void ChildDoDeactivate(); + + void VisualLayoutUpdatedL(); + + // Dynamic switch handling + void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType ); + void HandleDynamicVariantSwitchOnBackgroundL( CFsEmailUiViewBase::TDynamicSwitchType aType ); + + // React to changes in grid contents + void HandleContentChangeL(); + + void LaunchWizardL(); + void GoToInboxL( TFSMailMsgId& mailboxId, + TFSMailMsgId& mailboxInboxId ); + + // From MFSEmailLauncherItemObserver + void RefreshLauncherViewL(); + + TBool UiOperationLaunched(); + + // Modifies the value of iWizardWaitnoteShown + void SetWizardWaitnoteShown( TBool aWaitnoteShown ); + + // Bitmap provider for grid ecom plugins icons + void ProvideBitmapL(TInt aId, CFbsBitmap*& aBitmap, CFbsBitmap*& aMaskBitmap); + + // Set refresh needed flag + void SetRefreshNeeded(); + // + // Handling of foreground events + void HandleForegroundEventL( TBool aForeground ); + + /** + * From MEikScrollBarObserver + * + * Callback method for scroll bar events + * + * Scroll bar observer should implement this method to get scroll bar events. + * + * @since S60 0.9 + * @param aScrollBar A pointer to scrollbar which created the event + * @param aEventType The event occured on the scroll bar + */ + void HandleScrollEventL(CEikScrollBar* aScrollBar, TEikScrollEvent aEventType); + // + + // From base class CFsEmailUiViewBase + void GetParentLayoutsL( RPointerArray& aLayoutArray ) const; + + void FadeOut(TBool aDirectionOut); + + /** + * Called when flip state changes. + */ + void FlipStateChangedL( TBool aKeyboardFlipOpen ); + + /** + * Handles application foreground events. When applcation is brought to + * foreground, calls the virtual HandleForegroundEventL() method, which + * can be implemented by subclasses. + */ + virtual void HandleAppForegroundEventL( TBool aForeground ); + + // Fire timer callback + void TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer ); + + +// Toolbar +private: // from + + /** + * @see CFsEmailUiViewBase::ChildDoActivateL + */ + void ChildDoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); +// Toolbar + +private: // from MFSEmailUiMailboxDeleteObserver + + void MailboxDeletionComplete(); + +private: // from MAknPhysicsObserver + + /** + * @see MAknPhysicsObserver::ViewPositionChanged + */ + virtual void ViewPositionChanged( const TPoint& aNewPosition, + TBool aDrawNow, TUint aFlags ); + + /** + * @see MAknPhysicsObserver::PhysicEmulationEnded + */ + virtual void PhysicEmulationEnded(); + + /** + * @see MAknPhysicsObserver::ViewPosition + */ + virtual TPoint ViewPosition() const; + +private: // New methods. + + CFSEmailUiLauncherGridVisualiser(CAlfEnv& aEnv, + CFSEmailUiLauncherGrid* aControl, + CFreestyleEmailUiAppUi* aAppUi, + CAlfControlGroup& aControlGroup); + void ConstructL(TInt aColumns, TInt aRows); + virtual ~CFSEmailUiLauncherGridVisualiser(); + void CreateModelL(); + void MoveSelection( TDirection aDir ); + void MoveSelectorToCurrentItem( TDirection aDir ); + void Select(); + void DisplayProductInfoL(); + void RescaleIconsL(); + void SetRingWrapLimits(); + void AddItemToModelL( CFSEmailLauncherItem* aItem, TInt aPluginArrayIndex ); + + void ConstructScrollbarL( CAlfLayout* aParent ); + void UpdateScrollBarRangeL(); + CFSMailBox* ShowMailboxSelectionQueryL( const RPointerArray& aMailBoxes ); + + // Check status of all configured mailboxes + TFSLauncherGridMailboxStatus CheckMailboxStatusL(); + + void DoFirstStartL(); + + /** + * Funciton should decide if item focus should still be drawn dispite of + * releasing button. + */ + void HandleButtonReleaseEvent(); + + /** + * Reduces item's icon size. + */ + void ResizeItemIcon( TBool aReduce ); + + /** + * Handles the focus state changes of CFSEmailUiLauncherGridVisualiser + * @param aVisible Indicates if focus should become visible or removed + */ + void FocusVisibilityChange( TBool aVisible ); + + /** + * Launches and displays the pop-up menu invoked by a long tap event. + * @param aItemId The ID of the item for which to open the menu. + */ + void LaunchStylusPopupMenu( const TInt aItemId ); + + +private: // data types + + struct TItemVisualData + { + CAlfAnchorLayout* iBase; + CAlfImageVisual* iImage; + CAlfTextVisual* iText; + }; + + struct TLevel + { + CAlfGridLayout* iGridLayout; + RArray iItemVisualData; + TInt iSelected; + TInt iParent; + TPoint iParentPos; + RArray iItems; + }; + + struct TPluginIdIconIdPair + { + TInt iPluginArrayIndex; + TInt iIconId; + }; + + class TRingMovementFuncMappingDataProvider: public MAlfTableMappingFunctionDataProvider + { + public: + inline TRingMovementFuncMappingDataProvider() : iStart(0), iEnd(0) { } + // From MAlfTableMappingFunctionDataProvider + TReal32 MapValue( TReal32 aValue, TInt aMode ) const; + inline void SetStart( TReal32 aStart ) { iStart = aStart; } + inline void SetEnd( TReal32 aEnd ) { iEnd = aEnd; } + private: + TReal32 iStart; + TReal32 iEnd; + }; + + /** + * Structure for passing button down events + */ + struct TItemIdInButtonDownEvent + { + TInt iItemId; + TBool iLaunchSelection; + }; + +private: // methods + void ConstructRingL(); + + void CreateCaptionForApplicationL(TUid aUid, TDes& aCaption, TBool aShortCaption); + void FocusItem(TBool aHasFocus, TInt aItem); + void ScrollToRow(TInt row); + void PopulateL(TLevel& aLevel); + void UpdateLauncherItemListL(); + void UpdateGridOffset(); + void SetDefaultStatusPaneTextL(); + + void DetachSelectorMappingFunctions(); + void UpdateFocusVisibility(); + void UpdatePhysicsL(); + +private: // data + CAlfEnv& iEnv; + CAlfControl* iControl; + TLevel iCurrentLevel; + CFSEmailUiLauncherGridModel* iModel; + TInt iVisibleRows; + TInt iVisibleColumns; + TInt iRowCount; + TInt iFirstVisibleRow; + TReal iRowHeight; + TReal iColumnWidth; + // Selector layout. Not own. + CAlfLayout* iSelector; + // Mapping function for selector horizontal position. Own. + CAlfTableMappingFunction* iRingMovementXFunc; + // Mapping function for selector vertical position. Own. + CAlfTableMappingFunction* iRingMovementYFunc; + TRingMovementFuncMappingDataProvider iRingMovementXFuncMappingDataProvider; + TRingMovementFuncMappingDataProvider iRingMovementYFuncMappingDataProvider; + + TBool iStartupAnimation; + CAlfAnchorLayout* iWaterMarkBackgroundImageLayout; + TInt iStartupEffectStyle; + TInt iNewEmailCount; + CAlfTextVisual* iNewMailTextVisual; + CAlfImageVisual* iNewMailBgVisual; + CAlfAnchorLayout* iTopTextLayout; + CAlfTextVisual* iTimeTitle; + CAlfImageVisual *iSelectorImageVisual; + RPointerArray iIconArray; + RArray iMailboxRequestIds; + TBool iSynchronizingMailbox; + TBool iMailboxOnline; + RPointerArray iLauncherItems; + RArray iLauncherItemUids; + + CAlfDeckLayout* iParentLayout; + CAlfAnchorLayout* iWidgetLayout; + // + CAknDoubleSpanScrollBar* iScrollbar; + TAknDoubleSpanScrollBarModel iScrollbarModel; + // + CAlfImageVisual* iBgImageVisual; + + CAiwServiceHandler* iAiwSHandler; + + /** + * ETrue if "Creating mailbox" wait note is shown. + * Then the key presses are ignored. + */ + TBool iWizardWaitnoteShown; + + /** + * ETrue indicates that the grid contents and layout must be updated next time when the + * grid is activated. + */ + TBool iRefreshNeeded; + + // Array holding pairs of plugin id's vs icon id's + RArray iPluginIdIconIdPairs; + + // Plugin texture count, also serves as index when adding items to array + // and if for bitmap provider + TInt iPluginTextureId; + + // Boolean value indicating that construction has completed. + TBool iConstructionCompleted; + + // To indicate whether grid has started, for ODS, IAD and + // "create mailbox query" interoperability + TBool iFirstStartComplete; + + // Boolean value to prevent wizard/help crash when double-clicking. + TBool iDoubleClickLock; + + // Item id that was seleceted in button down event + TItemIdInButtonDownEvent iItemIdInButtonDownEvent; + + // Boolean value - true is user has launched any operation from UI. + TBool iUiOperationLaunched; + + // Mailbox deleter - handles deletion of one or more mailboxes. + CFSEmailUiMailboxDeleter* iMailboxDeleter; + + // A pop-up menu that is invoked by long tap events. Used for e.g. + // deleting mail boxes. + CAknStylusPopUpMenu* iStylusPopUpMenu; + TBool iStylusPopUpMenuLaunched; + + // Contains the ID of a selected mailbox. Used for deleting mailboxes + // with long tap pop-up menu. + TFSMailMsgId iMailboxToDelete; + + CCoeControl* iCoeControl; + + // Timer to postpone the Drawing + CFSEmailUiGenericTimer* iStartupCallbackTimer; + + CAknPhysics* iPhysics; + TBool iPointerAction; + TBool iIsDragging; + TPoint iPreviousPosition; + TPoint iOriginalPosition; + TTime iStartTime; + TBool iScrolled; + TInt iTotalDragging; + TBool iLaunchWizardExecuted; // prevents reentrant Wizard calling + }; // class CFSEmailUiLauncherGridVisualiser + +#endif // __FREESTYLEEMAILUI_MAINGRIDUIVISUALISER_H__