emailuis/emailui/inc/FreestyleEmailUiMailListVisualiser.h
changeset 0 8466d47a6819
child 1 12c456ceeff2
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/FreestyleEmailUiMailListVisualiser.h	Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,637 @@
+/*
+* 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"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  FreestyleEmailUi double line list visualiser definition 
+*
+*/
+
+ 
+    
+#ifndef __FREESTYLEEMAILUI_MAILLISTVISUALISER_H__
+#define __FREESTYLEEMAILUI_MAILLISTVISUALISER_H__
+
+// SYSTEM INCLUDES
+#include <EIKMOBS.H>
+//<cmail>
+#include "fscontrolbarobserver.h"
+#include "fstreelistobserver.h"
+#include "CFSMailCommon.h"
+#include "MFSMailEventObserver.h"
+#include "fsccontactactionmenudefines.h"
+//</cmail>
+#include "FSEmailBuildFlags.h"
+
+// INTERNAL INCLUDES
+#include "FreestyleEmailUiViewBase.h"
+#include "FreestyleEmailUiListVisualiser.h"
+#include "FreestyleEmailUiConstants.h"
+#include "FreestyleEmailUiControlBarCallback.h"
+#include "FreestyleEmailUiUtilities.h"
+#include "FreestyleEmailUiContactHandlerObserver.h"
+
+// FORWARD DECLARATIONS
+class CAlfTextVisual;
+class CAlfGridLayout;
+class CFSEmailUiList;
+class CAlfImageVisual;
+class CAlfDeckLayout;
+class CAlfAnchorLayout;
+class CFSEmailUiMailListModelItem;
+class CFSEmailUiMailListModel;
+class CListModeChanger;
+class CFreestyleEmailUiTextureManager;
+class CFSMailFolder;
+class CFSMailClient;
+class CFSMailAddress;
+class CFsTreeList;
+class CFsTreeVisualizerBase;
+class MFsTreeItemData;
+class MFsTreeItemVisualizer;
+class CFreestyleEmailUiTextureManager;
+class CFreestyleEmailUiMailListControl;
+class CFreestyleEmailUiAppUi;
+class CFsControlBar;
+class CFSMailMessage;
+class CFsMailFolder;
+class CFsTreePlainOneLineNodeData;
+class CFsTreePlainOneLineNodeVisualizer;
+class MFsControlButtonInterface;
+class CPbkxContactActionMenu;
+class CMailListUpdater;
+class CMsgMovedNoteTimer;
+class CIdle;
+class CESMRIcalViewer;
+class CAknWaitDialog;
+class CDateChangeTimer;
+class CFsTreePlainTwoLineItemData;
+class CFsTreePlainTwoLineItemVisualizer;
+//<cmail>
+class CEUiEmailListTouchManager;
+//</cmail>
+class CAknStylusPopUpMenu;
+
+struct SMailListItem
+	{
+	TFsTreeItemId iListItemId;
+	MFsTreeItemData* iTreeItemData;
+	MFsTreeItemVisualizer* iTreeItemVisualiser;
+	};
+
+struct STimeDateFormats
+	{
+	TDateFormat iDateFormat;	
+	TChar iDateSeparator;
+	TTimeFormat iTimeFormat;
+	TChar iTimeSeparator;
+	TLocalePos iAmPmPosition;
+	};
+	
+enum TMailListUiControls
+	{
+	EControlBarComponent=0,
+	EMailListComponent
+	};
+
+enum TListControlType
+	{
+	EListControlTypeSingleLinePreviewOff=0,
+	EListControlTypeSingleLinePreviewOn,
+	EListControlTypeDoubleLinePreviewOff,
+	EListControlTypeDoubleLinePreviewOn
+	};
+
+enum TListControlSeparatorValue
+	{
+	EListControlSeparatorDisabled=0,
+	EListControlSeparatorEnabled
+	};
+
+// <cmail>
+class CFSEmailUiMailListVisualiser : public CFsEmailUiViewBase, 
+									 public MFsControlBarObserver, 
+									 public MFSEmailUiFolderListCallback, 
+									 public MFSEmailUiSortListCallback,
+									 public MFsTreeListObserver,
+									 public MFSEmailUiContactHandlerObserver,
+									 public MFsActionMenuPositionGiver
+// </cmail>
+	{
+friend class CMailListUpdater;
+public:
+	static CFSEmailUiMailListVisualiser* NewL(CAlfEnv& aEnv, CFreestyleEmailUiAppUi* aAppUi, CAlfControlGroup& aMailListControlGroup);
+	static CFSEmailUiMailListVisualiser* NewLC(CAlfEnv& aEnv, CFreestyleEmailUiAppUi* aAppUi, CAlfControlGroup& aMailListControlGroup);
+    virtual ~CFSEmailUiMailListVisualiser();
+    void PrepareForExit();
+
+	void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane);
+	// Refresh the whole list
+	void RefreshL( TFSMailMsgId* aFocusToMessage = NULL );
+	// 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();	
+	// Current active folder
+	TFSMailMsgId FolderId();
+	// Dynamic variant switch, called by appui
+	void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType );
+	void HandleDynamicVariantSwitchOnBackgroundL( CFsEmailUiViewBase::TDynamicSwitchType aType );
+	// Handle foregroundevent
+	void HandleForegroundEventL();
+	// Sets softkeys
+	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 ); 
+
+    // <cmail>
+	/**
+	 * Open highlighted mail or node. 
+	 * (Touchwork: Called from touch manager)
+	 */
+	void DoHandleListItemOpenL();
+
+	/**
+     * Open folderlist or shortlist.  
+     * (Touchwork: Called from touch manager)
+     * 
+     * @param TInt button id. (shortlist or folderlist) 
+     */
+	void DoHandleControlBarOpenL( TInt aControlBarButtonId );
+
+    /**
+     * Open action menu.   
+     * (Touchwork: Called from touch manager)
+     */
+	void DoHandleListItemLongTapL();
+
+    /**
+     * Get control which is currently focused.    
+     * (Touchwork: Called from touch manager)
+     * 
+     * @return TInt id of control
+     */
+	TInt GetFocusedControl() const; 
+
+    /**
+     * Set control bar as focused control.   
+     * (Touchwork: Called from touch manager)
+     */
+	void SetControlBarFocusedL();
+
+    /**
+     * Set tree list as focused control.   
+     * (Touchwork: Called from touch manager)
+     */
+	void SetTreeListFocusedL(); 
+
+    /**
+     * Helper function for disable controls to send 
+     * any events.    
+     * (Touchwork)
+     * 
+     * @param TBool state of controls. 
+     */
+	void DisableMailList( TBool aValue );
+	// </cmail>
+	
+	// Command handling
+	void HandleCommandL(TInt aCommand);
+	// Read status 
+	void ChangeReadStatusOfHighlightedL( TBool aRead );
+	void ChangeReadStatusOfMarkedL( TBool aRead );
+	void ChangeReadStatusOfIndexL( TBool aRead, TInt aIndex );
+	// 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();
+	
+	// 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 );
+
+	/**
+     * 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();
+
+	void GetMarkedMessagesL( RArray<TFSMailMsgId>& aMessageIDs ) const;
+	CFsTreeList& GetMailList();
+	// Get message ID corresponding given list ID. If the list ID is for a node, its first child message ID is returned.
+	TFSMailMsgId MsgIdFromListId( TFsTreeItemId aListId ) const;
+
+    void HandleMailBoxEventL( TFSMailEvent aEvent, TFSMailMsgId aMailbox,
+        TAny* aParam1, TAny* aParam2, TAny* aParam3 );
+
+// from base class MFsTreeListObserver
+
+    /** Handles tree list events. */
+    // <cmail> Touch
+    void TreeListEventL( const TFsTreeListEvent aEvent, const TFsTreeItemId aId );
+    // </cmail>
+
+// from base class MFSEmailUiContactHandlerObserver
+
+    /** Handles completed contact handler event. */
+    void OperationCompleteL( TContactHandlerCmd aCmd,
+        const RPointerArray<CFSEmailUiClsItem>& aContacts );
+    void OperationErrorL( TContactHandlerCmd, TInt aError );
+
+    /**
+    * 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
+     */
+    void ChildDoActivateL( const TVwsViewId& aPrevViewId,
+            TUid aCustomMessageId,
+            const TDesC8& aCustomMessage );
+    void ChildDoDeactivate();
+    void GetParentLayoutsL( RPointerArray<CAlfVisual>& aLayoutArray ) const;
+    /**
+	 * @see CFsEmailUiViewBase::SetStatusBarLayout
+	 */ 
+    void SetStatusBarLayout();
+    
+private: // Private functions
+    CFSEmailUiMailListVisualiser( CAlfEnv& aEnv, CFreestyleEmailUiAppUi* aAppUi,
+        CAlfControlGroup& aMailListControlGroup );
+    void ConstructL();
+
+	// 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	
+	void SetMailListLayoutAnchors();
+
+	// Control bar functions
+	void CreateControlBarLayoutL();
+	void ScaleControlBarL();
+	void SetSortButtonTextAndIconL();
+    void HandleControlBarEvent( TFsControlBarEvent aEvent, TInt aData );
+
+	// Followup flag
+	void SetMessageFollowupFlagL();
+
+	void CreatePlainNodeL( const TDesC* aItemDataBuff,
+                           CFsTreePlainOneLineNodeData* &aItemData,   
+                           CFsTreePlainOneLineNodeVisualizer* &aNodeVisualizer ) const;                           	
+
+	// Move messages to folder
+	TInt MoveMsgsToFolderL( const TFSMailMsgId& aDestinationFolderId );
+
+	// Collapse/Expand nodes
+	void ExpandAllNodesL();
+	void CollapseAllNodesL();
+	void ExpandOrCollapseL();
+
+	// Mark control functions
+	void MarkAllItemsL();
+	void UnmarkAllItemsL();
+	TInt CountMarkedItemsL();
+	
+	void MarkMessagesIfFoundL( const RArray<TFSMailMsgId>& aMessageIDs );
+
+	// Message deletion internal functions
+	void DeleteFocusedMessageL();
+	void DeleteMarkedMessagesL();
+	static TInt DoDeleteMarkedMessages( TAny* aSelfPtr );
+
+	// Helper functions to access model data
+	TFSMailMsgId MsgIdFromIndex( TInt aItemIdx ) const;
+	CFSMailMessage& MsgPtrFromListIdL( TFsTreeItemId aListId );	
+    const CFSMailMessage& MsgPtrFromListIdL( TFsTreeItemId aListId ) const; 
+
+	// 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 );
+
+	// Create folder name buffer, either from database or from actual folder name
+	HBufC* CreateFolderNameLC( const CFSMailFolder* aFolder ) const;
+
+	// 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 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();
+
+	// Icon update for msg item
+	void UpdateMsgIconAndBoldingL( CFSMailMessage* aMsgPtr );
+	void UpdateMsgIconAndBoldingL( TInt aListIndex, TBool aRefreshItem = ETrue );
+	void UpdateMsgIconAndBoldingL( CFsTreePlainTwoLineItemData* aItemData,
+	                               CFsTreePlainTwoLineItemVisualizer* aItemVis,
+	                               CFSMailMessage* aMsgPtr );
+
+	// Message removing from list if found
+	void RemoveMsgItemsFromListIfFoundL( const RArray<TFSMailMsgId>& aEntryIds );
+
+	// Branding functions
+	void SetBrandedMailBoxIconL();
+	void SetMailboxNameToStatusPaneL();
+	void SetBrandedListWatermarkL();
+
+    // 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
+    void FlipStateChangedL( TBool aFlipOpen );
+
+    /**
+     * Handles the focus state changes
+     * @param aShow Indicates if focus should become visible or removed
+     */
+    void HandleTimerFocusStateChange( TBool aShow );
+
+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; 
+	// Msg moved note timer
+	CMsgMovedNoteTimer* iMsgNoteTimer; 
+  	// Screen layout uses iMailListControl
+	CAlfAnchorLayout* iScreenAnchorLayout;
+  	// Control bar control and layout and store visual pointer
+	CFsControlBar* iControlBarControl;
+	CAlfVisual* iControlBarVisual;
+ 	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; 
+  	CFsTreeList* iMailList;
+    CFsTreeVisualizerBase* iMailTreeListVisualizer;
+  	TInt iNumSlots;		
+   	CFSMailFolder* iMailFolder;
+    TInt iNewEmailsInModel; 	
+	RArray<SMailListItem> iTreeItemArray;   
+    RArray<TInt> iButtonsIds;
+    TInt iFocusedControl;
+    TBool iToolbarInUse;
+    TInt iListMode;    
+    TInt iNodesInUse;
+    TInt iNewEmailButtonId;
+	TInt iFolderListButtonId;
+	TInt iSortButtonId;
+	TInt iImageButtonId;
+	MFsControlButtonInterface* iIconButton;
+	MFsControlButtonInterface* iNewEmailButton;
+	MFsControlButtonInterface* iFolderListButton;
+	MFsControlButtonInterface* iSortButton;	
+	TBool iThisViewActive;	
+	CPbkxContactActionMenu* iActionMenu;	
+    TFSMailSortCriteria iCurrentSortCriteria;
+	// Set to indicate whether items should be marked or unmarked
+	TBool iListMarkItemsState;
+	// Set to indicate if Shift key is being held down in which case selection key has mark/unmark functionality
+	TBool iShiftDepressed;
+	// Set to indicate has other key events occured during hash key press (in which case hash is used as shift and not handled individually)
+	TBool iOtherKeyPressedWhileShiftDepressed;
+	// Move to folder toggle
+	TBool iMoveToFolderOngoing;
+	// Timers
+	CFSEmailUiGenericTimer* iMsgMoveTimer;
+	//ETrue if user started the sync
+	TBool iManualMailBoxSync;
+	TAknUiZoom iCurrentZoomLevel;
+	STimeDateFormats iDateFormats;
+	TRect iCurrentClientRect;
+	CAlfTexture* iMailBoxIconTexture;
+	CAlfTexture* iMailBoxWatermarkTexture;
+	TBool iSkinChanged;
+	TBool iDateChanged;
+	TFSMailMsgId iLatestOpenedMrId;
+	TBool iListOrderMayBeOutOfDate;
+	CAknWaitDialog* iDeletingWaitNote;
+	CDateChangeTimer* iDateChangeTimer;
+	TBool iFirstStartCompleted;
+	// generic use async callback object
+	CAsyncCallBack* iAsyncCallback; 
+	// async callback for deferred redrawing
+	CAsyncCallBack* iAsyncRedrawer;
+	TFSMailMsgId iMsgToFocusAfterRedraw;
+
+    //<cmail>
+    CEUiEmailListTouchManager* iTouchManager; 
+    //</cmail>
+    CAknStylusPopUpMenu* iStylusPopUpMenu; 
+    
+    TBool iShowReplyAll;
+  	};
+
+
+// Definition of the mail updater timer. This timer is used for
+// delayed drawing of the mail list to avoid viewsrv:11 panics.
+class CMailListUpdater : public CTimer
+    {
+public:
+    static CMailListUpdater* NewL( CFSEmailUiMailListVisualiser* aMailListVisualiser );
+    ~CMailListUpdater();
+    void StartL( TBool aIsSorting = EFalse );
+    void Stop();
+    void RunL();
+
+protected:
+    CMailListUpdater( CFSEmailUiMailListVisualiser* aMailListVisualiser );
+
+private:
+    CFSEmailUiMailListVisualiser* iMailListVisualiser;
+    TBool iIsSorting;
+    CAknWaitDialog* iWaitNote;
+    };
+
+// Delayd note timer 
+class CMsgMovedNoteTimer : public CTimer
+    {
+public:
+    static CMsgMovedNoteTimer* NewL( CFreestyleEmailUiAppUi* aAppUi, CFSEmailUiMailListVisualiser* aMailListVisualiser );
+    ~CMsgMovedNoteTimer();
+    void Start( TInt aMsgCount, const TFSMailMsgId aDestinationFolderId );
+    void Stop();
+    void RunL();
+
+protected:
+    CMsgMovedNoteTimer( CFreestyleEmailUiAppUi* aAppUi, CFSEmailUiMailListVisualiser* aMailListVisualiser );
+
+private:
+    CFreestyleEmailUiAppUi* iAppUi;
+    CFSEmailUiMailListVisualiser* iMailListVisualiser;
+    TFSMailMsgId iDestinationFolderId;
+    TInt iMsgCount;
+    };
+
+// Date changing timer. Updates the mail list when date changes.
+class CDateChangeTimer : public CTimer
+    {
+public:
+    static CDateChangeTimer* NewL( CFSEmailUiMailListVisualiser& aMailListVisualiser );
+    ~CDateChangeTimer();
+    void Start();
+    void RunL();
+    
+protected:
+    CDateChangeTimer( CFSEmailUiMailListVisualiser& aMailListVisualiser );
+    
+private:
+    CFSEmailUiMailListVisualiser& iMailListVisualiser;
+    };
+
+#endif