emailuis/emailui/inc/FreestyleEmailUiMailListVisualiser.h
changeset 1 12c456ceeff2
parent 0 8466d47a6819
child 2 5253a20d2a1e
--- a/emailuis/emailui/inc/FreestyleEmailUiMailListVisualiser.h	Thu Dec 17 08:39:21 2009 +0200
+++ b/emailuis/emailui/inc/FreestyleEmailUiMailListVisualiser.h	Thu Jan 07 12:38:38 2010 +0200
@@ -1,5 +1,5 @@
 /*
-* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
+* 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 the License "Symbian Foundation License v1.0"
@@ -11,12 +11,12 @@
 *
 * Contributors:
 *
-* Description:  FreestyleEmailUi double line list visualiser definition 
+* Description:  FreestyleEmailUi double line list visualiser definition
 *
 */
 
- 
-    
+
+
 #ifndef __FREESTYLEEMAILUI_MAILLISTVISUALISER_H__
 #define __FREESTYLEEMAILUI_MAILLISTVISUALISER_H__
 
@@ -89,13 +89,13 @@
 
 struct STimeDateFormats
 	{
-	TDateFormat iDateFormat;	
+	TDateFormat iDateFormat;
 	TChar iDateSeparator;
 	TTimeFormat iTimeFormat;
 	TChar iTimeSeparator;
 	TLocalePos iAmPmPosition;
 	};
-	
+
 enum TMailListUiControls
 	{
 	EControlBarComponent=0,
@@ -117,9 +117,9 @@
 	};
 
 // <cmail>
-class CFSEmailUiMailListVisualiser : public CFsEmailUiViewBase, 
-									 public MFsControlBarObserver, 
-									 public MFSEmailUiFolderListCallback, 
+class CFSEmailUiMailListVisualiser : public CFsEmailUiViewBase,
+									 public MFsControlBarObserver,
+									 public MFSEmailUiFolderListCallback,
 									 public MFSEmailUiSortListCallback,
 									 public MFsTreeListObserver,
 									 public MFSEmailUiContactHandlerObserver,
@@ -136,16 +136,16 @@
 	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
 	// Refresh the whole list
 	void RefreshL( TFSMailMsgId* aFocusToMessage = NULL );
-	// From view 
-	TUid Id() const;	
+	// From view
+	TUid Id() const;
 	// <cmail> Toolbar
 	/*void DoActivateL(const TVwsViewId& aPrevViewId,
 	                 TUid aCustomMessageId,
 	                 const TDesC8& aCustomMessage);*/
     // </cmail> Toolbar
 	TInt NewEmailsInModelL() const;
-	TInt EmailsInModelL() const;	              
-	CFSEmailUiMailListModel* Model();	
+	TInt EmailsInModelL() const;
+	CFSEmailUiMailListModel* Model();
 	// Current active folder
 	TFSMailMsgId FolderId();
 	// Dynamic variant switch, called by appui
@@ -154,100 +154,104 @@
 	// Handle foregroundevent
 	void HandleForegroundEventL();
 	// Sets softkeys
-	void SetViewSoftkeysL( TInt aResourceId );	
+	void SetViewSoftkeysL( TInt aResourceId );
 	void SetMskL();
 	// Highlighted index
 	TInt HighlightedIndex() const;
 	void SetHighlightedIndexL( TInt aWantedIndex );
 	// Event handling forwarded from control
-	TBool OfferEventL( const TAlfEvent& aEvent ); 
+	TBool OfferEventL( const TAlfEvent& aEvent );
 
     // <cmail>
 	/**
-	 * Open highlighted mail or node. 
+	 * Open highlighted mail or node.
 	 * (Touchwork: Called from touch manager)
 	 */
 	void DoHandleListItemOpenL();
 
 	/**
-     * Open folderlist or shortlist.  
+     * Open folderlist or shortlist.
      * (Touchwork: Called from touch manager)
-     * 
-     * @param TInt button id. (shortlist or folderlist) 
+     *
+     * @param TInt button id. (shortlist or folderlist)
      */
 	void DoHandleControlBarOpenL( TInt aControlBarButtonId );
 
     /**
-     * Open action menu.   
+     * Open action menu.
      * (Touchwork: Called from touch manager)
      */
 	void DoHandleListItemLongTapL();
 
     /**
-     * Get control which is currently focused.    
+     * Get control which is currently focused.
      * (Touchwork: Called from touch manager)
-     * 
+     *
      * @return TInt id of control
      */
-	TInt GetFocusedControl() const; 
+	TInt GetFocusedControl() const;
 
     /**
-     * Set control bar as focused control.   
+     * Set control bar as focused control.
      * (Touchwork: Called from touch manager)
      */
 	void SetControlBarFocusedL();
 
     /**
-     * Set tree list as focused control.   
+     * Set tree list as focused control.
      * (Touchwork: Called from touch manager)
      */
-	void SetTreeListFocusedL(); 
+	void SetTreeListFocusedL();
 
     /**
-     * Helper function for disable controls to send 
-     * any events.    
+     * Helper function for disable controls to send
+     * any events.
      * (Touchwork)
-     * 
-     * @param TBool state of controls. 
+     *
+     * @param TBool state of controls.
      */
 	void DisableMailList( TBool aValue );
 	// </cmail>
-	
+
 	// Command handling
 	void HandleCommandL(TInt aCommand);
-	// Read status 
+	// Read status
 	void ChangeReadStatusOfHighlightedL( TBool aRead );
 	void ChangeReadStatusOfMarkedL( TBool aRead );
 	void ChangeReadStatusOfIndexL( TBool aRead, TInt aIndex );
-	// Delete messages 
-	void DeleteMessagesL(); 	
+	// Delete messages
+	void DeleteMessagesL();
 	// Move to drafts
 	void MoveMessagesToDraftsL();
-	
+
 	// From base class MFSEmailUiFolderListCallback
 	// Handle folder list selection
 	void FolderSelectedL( TFSMailMsgId aSelectedFolderId,
 	 					 TFSEmailUiCtrlBarResponse aResponse );
 	void MailboxSelectedL( TFSMailMsgId aSelectedFolderId );
 	TRect FolderButtonRect();
-	
+
 	// From base class MFSEmailUiSortListCallback
 	void SortOrderChangedL( TFSMailSortField aSortField,
 	 					   TFSEmailUiCtrlBarResponse aResponse );
 	TRect SortButtonRect();
-	
+
+	// Update theme colors
+	void UpdateTheme();
+
 	// Navigation functions, used mainly from viewer
 	TBool IsNextMsgAvailable( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId, TFSMailMsgId& aFoundNextMsgFolder ) const;
 	TBool IsPreviousMsgAvailable( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId, TFSMailMsgId& aFoundPrevMsgFolder ) const;
 	TInt MoveToNextMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundNextMsgId );
 	TInt MoveToPreviousMsgL( TFSMailMsgId aCurrentMsgId, TFSMailMsgId& aFoundPreviousMsgId );
-
+	TInt MoveToPreviousMsgAfterDeleteL( TFSMailMsgId aFoundPreviousMsgId );
+	
 	/**
-     * Sets the manual mailbox syncronisation flag if the user chose   
+     * Sets the manual mailbox syncronisation flag if the user chose
      * to synchorise mail box from the menu
      */
     void ManualMailBoxSync( TBool aManualMailBoxSync );
-    
+
     // Returns ETrue if mailbox is syncronizing and EFalse if not
     TBool GetLatestSyncState();
 
@@ -277,14 +281,14 @@
     * Called when CDateChangeTimer completes. This happens when either when date
     * changes or when user alters the system time. Redraws the list to ensure that
     * time stamp texts in emails and nodes are up-to-date.
-    */ 
+    */
     void NotifyDateChangedL();
 // <cmail>
     TPoint ActionMenuPosition();
 // </cmail>
-  
+
 private: // from
-    
+
     /**
      * @see CFsEmailUiViewBase::ChildDoActivateL
      */
@@ -295,9 +299,9 @@
     void GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const;
     /**
 	 * @see CFsEmailUiViewBase::SetStatusBarLayout
-	 */ 
+	 */
     void SetStatusBarLayout();
-    
+
 private: // Private functions
     CFSEmailUiMailListVisualiser( CAlfEnv& aEnv, CFreestyleEmailUiAppUi* aAppUi,
         CAlfControlGroup& aMailListControlGroup );
@@ -306,48 +310,49 @@
 	// Refresh funcions
     void InsertNewMessagesL( const RArray<TFSMailMsgId>& aMessages );
     void InsertNewMessageL( CFSMailMessage* aNewMessage, const TBool aAllowRefresh ); // ownership is transferred
-    
+
     void RefreshListItemsL();
     // Refresh the list order only
     void RefreshOrderL();
-    
+
     // To start refreshing asynchronously
     void RefreshDeferred( TFSMailMsgId* aFocusToMessage = NULL );
     static TInt DoRefresh( TAny* aSelfPtr );
     void CompletePendingRefresh();
-    
+
     // Create and insert one list node item according to given model item.
     // Omitting the argument aChildIdx causes the new node to be appended at the end of the list.
     TFsTreeItemId InsertNodeItemL( TInt aModelIndex, TInt aChildIndex = KErrNotFound, const TBool aAllowRefresh = EFalse );
     // Create and insert one list item according the given model item. The item is added under the given node.
     // Omitting the argument aChildIdx causes the new item to be appended as last child of the node.
     TFsTreeItemId InsertListItemL( TInt aModelIndex, TFsTreeItemId aParentNodeId, TInt aChildIdx = KErrNotFound, TBool aAllowRefresh = ETrue );
-	
+
 	// Mail model update
 	void UpdateMailListModelL();
 	void CreateModelItemsL( RPointerArray<CFSMailMessage>& aMessages );
-	
+
 	// Create title divider model item for the given message. Separator text depends on active sorting mode.
 	CFSEmailUiMailListModelItem* CreateSeparatorModelItemLC( CFSMailMessage& aMessage ) const;
-	
+
 	// Checks if the given messages belong under the same title divider. This depends on the currect sorting mode.
 	TBool MessagesBelongUnderSameSeparatorL( const CFSMailMessage& aMessage1, const CFSMailMessage& aMessage2 ) const;
-	
-	// Rescale UI	
+
+	// Rescale UI
 	void SetMailListLayoutAnchors();
 
 	// Control bar functions
 	void CreateControlBarLayoutL();
 	void ScaleControlBarL();
 	void SetSortButtonTextAndIconL();
+	HBufC* GetSortButtonTextLC();
     void HandleControlBarEvent( TFsControlBarEvent aEvent, TInt aData );
 
 	// Followup flag
 	void SetMessageFollowupFlagL();
 
 	void CreatePlainNodeL( const TDesC* aItemDataBuff,
-                           CFsTreePlainOneLineNodeData* &aItemData,   
-                           CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const;                           	
+                           CFsTreePlainOneLineNodeData* &aItemData,
+                           CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const;
 
 	// Move messages to folder
 	TInt MoveMsgsToFolderL( const TFSMailMsgId& aDestinationFolderId );
@@ -361,7 +366,7 @@
 	void MarkAllItemsL();
 	void UnmarkAllItemsL();
 	TInt CountMarkedItemsL();
-	
+
 	void MarkMessagesIfFoundL( const RArray<TFSMailMsgId>& aMessageIDs );
 
 	// Message deletion internal functions
@@ -371,19 +376,19 @@
 
 	// Helper functions to access model data
 	TFSMailMsgId MsgIdFromIndex( TInt aItemIdx ) const;
-	CFSMailMessage& MsgPtrFromListIdL( TFsTreeItemId aListId );	
-    const CFSMailMessage& MsgPtrFromListIdL( TFsTreeItemId aListId ) const; 
+	CFSMailMessage& MsgPtrFromListIdL( TFsTreeItemId aListId );
+    const CFSMailMessage& MsgPtrFromListIdL( TFsTreeItemId aListId ) const;
 
-	// Item data and visualiser helper functions 
-	MFsTreeItemData* ItemDataFromItemId( TFsTreeItemId aItemId );										
+	// Item data and visualiser helper functions
+	MFsTreeItemData* ItemDataFromItemId( TFsTreeItemId aItemId );
 	MFsTreeItemVisualizer* ItemVisualiserFromItemId( TFsTreeItemId aItemId );
-	
+
 	// Helpers to get the ordinal of a message in the iModel
 	TInt ItemIndexFromMessageId( const TFSMailMsgId& aMessageId ) const;
 	TInt NextMessageIndex( TInt aCurMsgIdx ) const;
 	TInt PreviousMessageIndex( TInt aCurMsgIdx ) const;
 	TInt ModelIndexFromListId( TFsTreeItemId aItemId ) const;
-	
+
 	// Open highlighted mail
 	void OpenHighlightedMailL();
 	void OpenMailItemL( TFsTreeItemId aMailItem );
@@ -394,52 +399,52 @@
 	// Shortcut specific toggles
 	void ShortcutReadUnreadToggleL();
 	void ShortcutCollapseExpandAllToggleL();
-	
+
 	// Utility functions to check if all nodes are expanded or collapsed
 	TBool AllNodesCollapsed() const;
 	TBool AllNodesExpanded() const;
-	
+
 	// Utility functions to check if mark as read/unread options should be available in menus
 	TBool IsMarkAsReadAvailableL() const;
 	TBool IsMarkAsUnreadAvailableL() const;
-	
+
 	// Utility function to get list of entries which will be targeted by the Actions menu commands.
 	// The list contains either marked entries or the focused message entry or is empty.
 	void GetActionsTargetEntriesL( RFsTreeItemIdList& aListItems ) const;
-	
+
 	// Action menu specific functions
 	void LaunchActionMenuL();
 	void HandleActionMenuCommandL( TActionMenuCustomItemId itemId );
 	void LaunchStylusPopupMenuL();
-	
+
 	// Compose, reply, reply all and forward
 	void CreateNewMsgL();
 	void ReplyL( CFSMailMessage* aMsgPtr );
 	void ReplyAllL( CFSMailMessage* aMsgPtr );
 	void ForwardL( CFSMailMessage* aMsgPtr );
 	void DoReplyForwardL( TEditorLaunchMode aMode, CFSMailMessage* aMsgPtr = NULL );
-	
+
 	// Some misc housekeeping functions
 	void RemoveUnnecessaryNodesL();
-	void UpdateMailListSettingsL();	
+	void UpdateMailListSettingsL();
 	void UpdateMailListTimeDateSettings();
 	STimeDateFormats MailListTimeDateSettings();
 
 	// Request to update list item data from given message pointer
     void UpdateItemDataL( CFsTreePlainTwoLineItemData* aData, const CFSMailMessage* aMsgPtr );
-	
+
 	// Request to update preview pane data for list id with msg ptr
 	void UpdatePreviewPaneTextForItemL( TFsTreeItemId aListItemId, CFSMailMessage* aMsgPtr );
 	void UpdatePreviewPaneTextForItemL( CFsTreePlainTwoLineItemData* aTwoLineItemData, CFSMailMessage* aMsgPtr );
     void UpdatePreviewPaneTextIfNecessaryL( TFsTreeItemId aListItemId, TBool aUpdateItem = ETrue );
-	
+
 	// Sender/Recipient text depending on the mail folder
 	HBufC* GetListFirstTextLineL( const CFSMailMessage* aMsgPtr );
 
 	// Reload message pointer from mail client and update list item contents to match it. Item is
 	// removed if it isn't valid anymore.
 	void UpdateItemAtIndexL( TInt aIndex );
-	
+
 	// Check validity of highlighted msg and remove from list if needed
 	// EFalse indicates that mail was not valid anymore.
 	TBool CheckValidityOfHighlightedMsgL();
@@ -461,27 +466,27 @@
 
     // Gives the parent node if the item has one. Returns KErrNotFound if no parent node available.
     TFsTreeItemId ParentNode( TFsTreeItemId aItemId ) const;
-    
+
     // Either marks or unmarks the current item depending on the current marking state
     // as stored in iListMarkItemsState. Used for marking when shift is depressed while
     // scrolling. Returns ETrue if the highlighted item is markable.
     TBool DoScrollMarkUnmarkL();
-    
+
     /**
      * Mark/unmark items under current separator.
-     * 
+     *
      * @param aMarked If ETrue mark all items else unmark.
      * @param aSeparatorId Id of the separator.
      */
     void MarkItemsUnderSeparatorL( TBool aMarked, TInt aSeparatorId );
-    
+
     //When maillist is activated this method handles the connection icon change
     void ConnectionIconHandling();
-    
+
     void SetListAndCtrlBarFocusL();
-    
+
     void SetMailListItemsExtendedL();
-    
+
     void DoFirstStartL();
 
     // Called when flip state is changed
@@ -489,44 +494,58 @@
 
     /**
      * Handles the focus state changes
-     * @param aShow Indicates if focus should become visible or removed
+     * @param aVisible Indicates if focus should become visible or removed
+     */
+    void FocusVisibilityChange( TBool aVisible );
+
+    /**
+     * Update texts in command area buttons
      */
-    void HandleTimerFocusStateChange( TBool aShow );
+    void UpdateButtonTextsL();
+
+    /**
+     * Tests whether a point is inside the control.
+     *
+     * @param aControl  Control that is tested.
+     * @param aPoint    Point in display coordinates.
+     *
+     * @return  <code>ETrue</code>, if the point is inside one of the
+     *          control's visuals. Otherwise <code>EFalse</code>.
+     */
+    TBool HitTest( const CAlfControl& aControl, const TPoint& aPoint ) const;
 
 private: // data types
 
-    
+
 private: // Private objects
     // Reference to Alf environment
     CAlfEnv& iEnv;
   	// Mail list updater timer
 	// Timer delays mail update to prevent unnesessary redraw events
-	CMailListUpdater* iMailListUpdater; 
+	CMailListUpdater* iMailListUpdater;
 	// Msg moved note timer
-	CMsgMovedNoteTimer* iMsgNoteTimer; 
+	CMsgMovedNoteTimer* iMsgNoteTimer;
   	// Screen layout uses iMailListControl
 	CAlfAnchorLayout* iScreenAnchorLayout;
   	// Control bar control and layout and store visual pointer
 	CFsControlBar* iControlBarControl;
 	CAlfVisual* iControlBarVisual;
- 	CAlfDeckLayout* iControlBarLayout;  
+ 	CAlfDeckLayout* iControlBarLayout;
   	// Mail List control and layout
     CFreestyleEmailUiMailListControl* iMailListControl;
  	CAlfDeckLayout* iListLayout;
-// <cmail> this feature is waiting for title divider bg graphics
     CAlfImageVisual* iTitleDividerBgVisual;
-// </cmail>
-    CFSEmailUiMailListModel* iModel; 
+    CFSEmailUiMailListModel* iModel;
   	CFsTreeList* iMailList;
     CFsTreeVisualizerBase* iMailTreeListVisualizer;
-  	TInt iNumSlots;		
+  	TInt iNumSlots;
    	CFSMailFolder* iMailFolder;
-    TInt iNewEmailsInModel; 	
-	RArray<SMailListItem> iTreeItemArray;   
+    TInt iNewEmailsInModel;
+	RArray<SMailListItem> iTreeItemArray;
     RArray<TInt> iButtonsIds;
     TInt iFocusedControl;
     TBool iToolbarInUse;
-    TInt iListMode;    
+    TInt iListMode;
     TInt iNodesInUse;
     TInt iNewEmailButtonId;
 	TInt iFolderListButtonId;
@@ -535,9 +554,9 @@
 	MFsControlButtonInterface* iIconButton;
 	MFsControlButtonInterface* iNewEmailButton;
 	MFsControlButtonInterface* iFolderListButton;
-	MFsControlButtonInterface* iSortButton;	
-	TBool iThisViewActive;	
-	CPbkxContactActionMenu* iActionMenu;	
+	MFsControlButtonInterface* iSortButton;
+	TBool iThisViewActive;
+	CPbkxContactActionMenu* iActionMenu;
     TFSMailSortCriteria iCurrentSortCriteria;
 	// Set to indicate whether items should be marked or unmarked
 	TBool iListMarkItemsState;
@@ -564,16 +583,16 @@
 	CDateChangeTimer* iDateChangeTimer;
 	TBool iFirstStartCompleted;
 	// generic use async callback object
-	CAsyncCallBack* iAsyncCallback; 
+	CAsyncCallBack* iAsyncCallback;
 	// async callback for deferred redrawing
 	CAsyncCallBack* iAsyncRedrawer;
 	TFSMailMsgId iMsgToFocusAfterRedraw;
+	HBufC* iNewEmailText;
 
-    //<cmail>
-    CEUiEmailListTouchManager* iTouchManager; 
-    //</cmail>
-    CAknStylusPopUpMenu* iStylusPopUpMenu; 
-    
+    CEUiEmailListTouchManager* iTouchManager;
+    CAknStylusPopUpMenu* iStylusPopUpMenu;
+    TBool iStylusPopUpMenuLaunched;
+
     TBool iShowReplyAll;
   	};
 
@@ -598,7 +617,7 @@
     CAknWaitDialog* iWaitNote;
     };
 
-// Delayd note timer 
+// Delayd note timer
 class CMsgMovedNoteTimer : public CTimer
     {
 public:
@@ -626,12 +645,12 @@
     ~CDateChangeTimer();
     void Start();
     void RunL();
-    
+
 protected:
     CDateChangeTimer( CFSEmailUiMailListVisualiser& aMailListVisualiser );
-    
+
 private:
     CFSEmailUiMailListVisualiser& iMailListVisualiser;
     };
 
-#endif 
+#endif