diff -r d189ee25cf9d -r 3533d4323edc emailuis/emailui/inc/FreestyleEmailUiFolderListVisualiser.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/emailuis/emailui/inc/FreestyleEmailUiFolderListVisualiser.h Wed Sep 01 12:28:57 2010 +0100 @@ -0,0 +1,488 @@ +/* +* 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: FreestyleEmailUi folder list visualiser definition +* +*/ + + + +#ifndef __FREESTYLEEMAILUI_FOLDERLISTVISUALISER_H__ +#define __FREESTYLEEMAILUI_FOLDERLISTVISUALISER_H__ + + +#include + +// +#include "fstreelistconstants.h" +// + +#include "FreestyleEmailUiConstants.h" +#include "FreestyleEmailUiViewBase.h" +#include "FreestyleEmailUiControlBarCallback.h" +#include "fstreelistobserver.h" +#include +#include +// forward declarations +class CAlfTextVisual; +class CAlfGridLayout; +class CAlfImageVisual; +class CAlfShadowBorderBrush; +class CAlfDeckLayout; +class CAlfAnchorLayout; +class CFSEmailUiFolderListControl; +class CFSEmailUiFolderListModel; +class CAlfBorderBrush; +class CFSMailMessage; +class CScrollerTimer; +class CMessageChangerTimer; +class CFreestyleEmailUiTextureManager; +class CFreestyleEmailUiAppUi; + +class CFsTreeVisualizerBase; +class CFsTreeList; + +class MFsTreeItemVisualizer; +class CFsTreePlainOneLineItemData; +class CFsTreePlainOneLineNodeData; +class CFsTreePlainOneLineItemVisualizer; +class CFsTreePlainOneLineNodeVisualizer; +class MFsControlButtonInterface; + +class TFSMailMsgId; +class CFSMailClient; +class CFSMailBox; +class CFSMailFolder; + +class CAlfFrameBrush; + +class CFSEmailUiFolderListVisualiser : public CFsEmailUiViewBase, + public MFsTreeListObserver + { +public: // Data types + enum TExpandCollapseType + { + EFolderListExpand, + EFolderListCollapse, + EFolderListAutomatic + }; + +public: // Construction and destruction + /** + * Destructor + */ + ~CFSEmailUiFolderListVisualiser(); + + /** + * Two phase constructors + * + * @param aEnv Alfred environmet + * @param aControlGroup Alfred control group + * @param aAppUi Application main UI class + * @return Pointer to newly created object + */ + static CFSEmailUiFolderListVisualiser* NewL( CAlfEnv& aEnv, + CAlfControlGroup& aControlGroup, + CFreestyleEmailUiAppUi& aAppUi ); + static CFSEmailUiFolderListVisualiser* NewLC( CAlfEnv& aEnv, + CAlfControlGroup& aControlGroup, + CFreestyleEmailUiAppUi& aAppUi ); + +public: // From base class CAknView + void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); + void HandleCommandL( TInt aCommand ); + TUid Id() const; + void ChildDoDeactivate(); + void DoTransitionEffect( TBool aDirectionOut ); + void GetParentLayoutsL( RPointerArray& aLayoutArray ) const; + void FadeOut( TBool aDirectionOut ); + +public: // Own public functions + + virtual TBool HandleWsEventL( const TWsEvent& aEvent ); + + // Handle foreground event (called by FreestyleEmailUiMailListVisualiser) + void HandleForegroundEventL(); + + /** + * Dynamic switch handling and background updating + */ + void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType ); + + /** + * Event handling forwarded from control + * + * @param aEvent Event forwarded from control + * @return ETrue if event was consumed, otherwise EFalse + */ + TBool OfferEventL( const TAlfEvent& aEvent ); + + /** + * Handling pointer events. + * + * @param aEvent Event forwarded from control + * @return ETrue if event was consumed, otherwise EFalse + */ + TBool HandlePointerEventL(const TAlfEvent& aEvent); + + /** + * Expands or collpases the currently highlighted folder + */ + void ExpandOrCollapseL( const TExpandCollapseType& aType ); + + /** + * Tells wheter the folder list is shown in full screen or in popup + * + * @return ETrue if list is shown in fullscreen, otherwise EFalse + */ + TBool IsFullScreen() const; + + /** + * Show folder list in control bar popup + * + * @param aFolderId Folder id of the currently visible folder in mail list + * @param aCallback Call back to inform the result of the folder query + * @param aButton Control bar button from where the popup is opened + */ + void ShowInPopupL( const TFSMailMsgId aFolderId, + MFSEmailUiFolderListCallback* aCallback, + MFsControlButtonInterface* aButton = NULL ); + + /** + * Quick and dirty solution to show the sort list with the same list. + * Could be changed to some more elegant implementation (e.g. folder list + * and sort list derive from some generic control base class that + * implements the common operations), if time permits. + * + * @param aCurrentSortCriteria Current sort criteria in mail list + * @param aFolderType Folder type of the currently visible folder in mail list + * @param aCallback Call back to inform the result of the sort order query + * @param aButton Control bar button from where the popup is opened + */ + void ShowSortListPopupL( const TFSMailSortCriteria aCurrentSortCriteria, + const TFSFolderType aFolderType, + MFSEmailUiSortListCallback* aCallback, + MFsControlButtonInterface* aButton = NULL ); + + /** + * Does a horizontal scroll for the list if needed + * + * @param aForceRecalculation If ETrue, recalculates the list rect always. + * If EFalse, recalculates the list rect only + * if list level has changed. + */ + void DoHorizontalScrollL( TBool aForceRecalculation = EFalse ); + + /** + * Function to check whether folder list is displaying popup + */ + TBool IsPopupShown(); + + /** + * Function to hide popup + */ + void HidePopupL(); + + /** + * From MFsTreeListObserver + */ + void TreeListEventL( const TFsTreeListEvent aEvent, + const TFsTreeItemId aId, + const TPoint& aPoint ); + +// Receiving online/offline events + void HandleMailBoxEventL( TFSMailEvent aEvent, TFSMailMsgId aMailbox, + TAny* aParam1, TAny* aParam2, TAny* aParam3 ); +// + + /** + * From CFsEmailUiViewBase + * This method is called from the appui when the focus state is changed. + * + * @param aVisible Indicates if focus should become visible or removed + */ + void FocusVisibilityChange( TBool aVisible ); + +private: // from + + /** + * @see CFsEmailUiViewBase::ChildDoActivateL + */ + void ChildDoActivateL( const TVwsViewId& aPrevViewId, + TUid aCustomMessageId, + const TDesC8& aCustomMessage ); + + /** + * @see CFsEmailUiViewBase::OfferToolbarEventL + */ + void OfferToolbarEventL( TInt aCommand ); + + /** + * @see CFsEmailUiViewBase::ToolbarResourceId + */ + TInt ToolbarResourceId() const; + +private: // Private functions + + /** + * Comparison function for TLinearOrder + * + * @param aFirst First folder to compare + * @param aSecond Second folder to compare + * @return Zero if parameters are equal, + * negative if first parameter is less than second, + * positive if first parameter is greater than second + */ + static TInt CompareFolders( const CFSMailFolder& aFirst, const CFSMailFolder& aSecond ); + + // Construction + CFSEmailUiFolderListVisualiser( CAlfEnv& aEnv, CFreestyleEmailUiAppUi &aAppUi, CAlfControlGroup& aControlGroup ); + void ConstructL(); + void LoadIconsL(); + + // Internal functions used when showing and hiding the list + //void DoShowInPopupL(); + void DoShowInPopupL( MFsControlButtonInterface* aButton, + MFSEmailUiFolderListCallback* aFolderCallback, + MFSEmailUiSortListCallback* aSortCallback ); + void PrepareFolderListL(); + void PopulateFolderListL(); + void PopulateFolderListDeferred(); + static TInt DoPopulateFolderList( TAny* aSelfPtr ); + + // Recreate list content + void UpdateFolderListL(); + void UpdateSortListL(); + + // View layout handling and item position calculation + void UpdateListSizeAttributes(); + void ResizeListIcons(); + void ResizeListItemsL(); + void StartScrollingListItemsL(); + void AdaptScreenRectToListContent(); + void AdjustWidthByContent( TRect& aRect ) const; + void SetAnchors(); + void SetItemVisualizerPropertiesL( MFsTreeItemVisualizer* aItemVisualizer ); + + // Popup list position calcualtion + TRect LeftListRectInThisResolution(); + TRect RightListRectInThisResolution(); + TRect FolderListRectInThisResolution(); + TRect SortListRectInThisResolution(); + + // Handle the selection or cancelation of the list + void HandleSelectionL( TFSEmailUiCtrlBarResponse aSelection ); + TBool HandleCallbackL(); + + // Set header text + void SetHeaderTextByResourceIdL( TInt aResourceId ); + + // Append folder list data + void AppendActiveMailboxFoldersL(); + void AppendMoreFoldersL(); + void AppendMailboxesL(); + void AppendSeparatorLineL(); + + // Append sort list data + void AppendSortListItemsL(); + + // Helper functions used to append different kind of items to list + void AppendSubfoldersL( TFSMailMsgId aFolder, + TFsTreeItemId aParentNode, + TBool aRefreshLastItem ); + TFsTreeItemId AppendNodeFolderL( CFSMailFolder* aFolder, TFsTreeItemId aParentNode ); + TFsTreeItemId AppendLeafFolderL( CFSMailFolder* aFolder, TFsTreeItemId aParentNode, TBool aAllowRefresh ); + + TFsTreeItemId AppendNodeToListFromResourceL( TInt aResourceId, + TFsTreeItemId aParentNode, + CAlfTexture* aIcon, + TUint aUnreadCnt = 0); + + TFsTreeItemId AppendNodeToListL( TDesC* aItemData, + TFsTreeItemId aParentNode, + CAlfTexture* aIcon, + TUint aUnreadCnt); + + TFsTreeItemId AppendItemToListFromResourceL( TInt aResourceId, + TFsTreeItemId aParentNode, + CAlfTexture* aIcon, + TBool aAllowRefresh, + TUint aUnreadCnt = 0); + + TFsTreeItemId AppendItemToListL( TDesC* aItemData, + TFsTreeItemId aParentNode, + CAlfTexture* aIcon, + TBool aAllowRefresh, + TUint aUnreadCnt = 0); + + TDesC* CFSEmailUiFolderListVisualiser::GetItemDisplayNameLC( TDesC& aItemData, TUint aUnreadCnt ); + + void CreatePlainItemLC2( const TDesC* aItemDataBuff, + CFsTreePlainOneLineItemData* &aItemData, + CFsTreePlainOneLineItemVisualizer* &aItemVisualizer, + CAlfTexture* aIcon ); + void CreatePlainNodeLC2( TDesC* aItemDataBuff, + CFsTreePlainOneLineNodeData* &aItemData, + CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer, + CAlfTexture* aIcon ); + + TBool GetStandardFolderResouceIdAndIconL( const TInt aFolderType, TInt &aResourceId, CAlfTexture* &aIcon ) const; + TBool ShowThisTypeOfFolderL( CFSMailFolder* folder ) const; + + // Hepler function for folder comparison, return internal folder priority + // used when sorting the list + static TInt GetFolderPriorityByType( const CFSMailFolder& aFolder ); + + // Set and clear soft keys when popup list shown + void SetPopupSoftkeysL(); + void ClearPopupSoftkeys(); + + // Set initial list focus by current/previous activity + void SetFocusToCurrentSortItemL(); + void SetFocusToCurrentFolderL(); + void SetFocusToLatestMovedFolderL(); + + // Move list focus to first or to last item + void GoToTopL(); + void GoToBottomL(); + + // Set toolbar buttons' dimmed/undimmed statuses. + void UpdateToolbarButtons(); + + // Check wheter all list nodes are expanded or collapsed + TBool AllNodesCollapsed() const; + TBool AllNodesExpanded( TFsTreeItemId aParentNodeId = KFsTreeRootID ) const; + + // Recursive function to get item's root level parent + TFsTreeItemId GetRootParent( const TFsTreeItemId aItemId ) const; + + void DoFirstStartL(); + void SetHeaderTextAttributesL(); + void ConnectToMailboxL(); + void DisconnectFromMailboxL(); + TBool CbaButtonPressed( TPoint aPosition ); + void GetCbaRects( TRect& aLeftCbaRect, TRect& aRightCbaRect ); + TBool IsAreaSideRightPaneActive(); + +private: + + // Array of list item infos + RPointerArray< CFsTreePlainOneLineItemData > iListItemDatas; + +private: // Typedefs and member variables + // Array type for the list icons + typedef RPointerArray TFsEmailFolderListIconArray; + // Array type for the sort list icons + typedef RPointerArray TFsEmailSortListIconArray; + + // ALF environment + CAlfEnv& iEnv; + + // View layouts + CAlfDeckLayout* iFaderLayout; + CAlfAnchorLayout* iParentLayout; + CAlfLayout* iListLayout; + CAlfLayout* iHeaderLayout; + + // ALF visuals etc. for list background and header + CAlfImageVisual* iListBgImageVisual; + CAlfImageVisual* iHeaderImageVisual; + CAlfTextVisual* iHeaderTextVisual; + CAlfFrameBrush* iBackgroundBrush; + CAlfShadowBorderBrush* iShadowBrush; + + // ALF visual for background + CAlfVisual* iFaderVisual; + + // Pointers to control and model + CFSEmailUiFolderListControl* iControl; // not owned (owned by ALF env) + CFSEmailUiFolderListModel* iModel; // owned + + // Callback pointers + MFSEmailUiFolderListCallback* iCallback; + MFSEmailUiSortListCallback* iSortListCallback; + + // Type of the currently visible folder in mail list + TFSFolderType iCurrentFolderType; + + // Custom message ID passed in view activation + TUid iCustomMessageId; + + // List/view size attributes + TRect iScreenRect; + TRect iCtrlButtonRect; + TRect iPreviousListRect; + TInt iListItemHeight; + TInt iListHeaderHeight; + TInt iListSeparatorHeight; + TSize iListIconSize; + TSize iPreviousListIconSize; + + TPoint iPadding; + + // ETrue if list shown in fullscreen + TBool iFullScreen; + + // List id of the "More folders" item in folder list + TFsTreeItemId iMoreFoldersItemId; + + // Pointer to the tree list component visualizer. + CFsTreeVisualizerBase* iTreeVisualizer; + + // Pointer to the tree list component, owned + CFsTreeList* iTreeList; + + // Mailbox that is currently active in mail list + CFSMailBox* iActiveMailbox; + + // Folder list icons, items not owned (are owned by texture manager) + TFsEmailFolderListIconArray iIconArray; + + // Sort list icons, items not owned (are owned by texture manager) + TFsEmailSortListIconArray iSortIconArray; + + // Previously selected items + TFSMailMsgId iLatestSelectedMoveFolderId; + TFSMailMsgId iCurrentFolderId; + TFSMailSortCriteria iCurrentSortCriteria; + + // Pointers to list items (and nodes) + RPointerArray iListItemVisulizers; + + // Previous level in list, used in horizontal scrolling + TInt iPreviousListLevel; + + TBool iFirstStartCompleted; + + TBool iPopupListShown; + + //For header text caption + TBool iTitleCaptionVisible; + + // Flag to see if view opened with move/copy command + TBool iMoveOrCopyInitiated; + // Flag to see if connection was started + TBool iWaitingToGoOnline; + // Do we need to connect the mailbox before showing the folder list + TBool iNoConnectNeeded; + + // Should we use expansion animation for the next transition effect + TBool iAnimateNextActivation; + + CAsyncCallBack* iAsyncCallback; + + TBool iConsumeUntilNextUpEvent; + }; + + +#endif //__FREESTYLEEMAILUI_FOLDERLISTVISUALISER_H__