diff -r a3a1ae9acec6 -r da5135c61bad emailuis/emailui/inc/FreestyleEmailUiMailViewerVisualiser.h --- a/emailuis/emailui/inc/FreestyleEmailUiMailViewerVisualiser.h Mon Mar 15 12:39:10 2010 +0200 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,496 +0,0 @@ -/* -* 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: FreestyleEmailUi mail viewer visualiser definition -* -*/ - - -#ifndef __FREESTYLEEMAILUI_MAILVIEWERVISUALISER_H__ -#define __FREESTYLEEMAILUI_MAILVIEWERVISUALISER_H__ - -// SYSTEM INCLUDE FILES -#include -#include -#include -// -#include "fstextviewerobserver.h" -//#include -#include -#include -// -// -#include "mfsmailrequestobserver.h" -#include "mesmricalviewercallback.h" -#include "mesmricalviewerobserver.h" -// - -// INTERNAL INCLUDE FILES -#include "FreestyleEmailUiViewBase.h" -#include "FreestyleEmailUiListVisualiser.h" -#include "FreestyleEmailDownloadInformationMediator.h" -#include "FreestyleEmailUiConstants.h" -#include "FreestyleEmailUiControlBarCallback.h" -#include "FreestyleEmailUiUtilities.h" -#include "FreestyleEmailUiContactHandlerObserver.h" -#include "FreestyleEmailUiMailViewerRichText.h" - -// FORWARD DECLARATIONS -class CFSMailMessage; -class CFreestyleEmailUiAppUi; -class CFsTextViewer; -class CFsTextViewerWatermark; -class CFsSmileyDictionary; -class CFreestyleEmailUiMailViewerControl; -class CAiwServiceHandler; -class CBrowserLauncher; -class CFSEmailUiStatusIndicator; -class CFlagSelectionGlobalNoteHandler; -class CAknGlobalListQuery; -class CAknGlobalNote; -class CAknWaitDialog; // -class CAknNavigationDecorator; - -// list of different types of action menus to be shown. -enum TActionMenuType - { - ENoActionMenuFocused = 0, - EFocusOnNumberWithinMessage, - EFocusOnHyperLinkWithinMessage, - EFocusOnNameInAddressField, - EFocusOnEMailInBodyText, - EFocusOnAttachmentName, - EFocusOnAttachmentsText - }; - - -/** -* CFSEmailUiMailViewerVisualiser implements message viewer view. -* It uses FS Generic TV component, which displays rich text with hotspots. -* View contains hotspot related action menu handling and many options menu -*/ -class CFSEmailUiMailViewerVisualiser : public CFsEmailUiViewBase, - public MFsTextViewerObserver, - public MFSEmailDownloadInformationObserver, - public MFSMailRequestObserver, - public MFSEmailUiFolderListCallback, - public MProgressDialogCallback, //cmail - public MFSEmailUiGenericTimerCallback, - public MFSEmailUiContactHandlerObserver, - public MESMRIcalViewerCallback, - public MESMRIcalViewerObserver, - public MAknNaviDecoratorObserver - { -public: // construction and destruction - static CFSEmailUiMailViewerVisualiser* NewL( CAlfEnv& aEnv, CFreestyleEmailUiAppUi& aAppUi, CAlfControlGroup& aMailViewerControlGroup ); - static CFSEmailUiMailViewerVisualiser* NewLC( CAlfEnv& aEnv, CFreestyleEmailUiAppUi& aAppUi, CAlfControlGroup& aMailViewerControlGroup ); - ~CFSEmailUiMailViewerVisualiser(); - void PrepareForExit(); - -public: // methods - CAlfControl* ViewerControl(); - void SetMskL(); - // Event handling forwarded from control - TBool OfferEventL( const TAlfEvent& aEvent ); - - // Handle accept/decline/tentative/remove commands given for meeting request message directly from list UI. - void HandleMrCommandL( TInt aCommandId, TFSMailMsgId aMailboxId, TFSMailMsgId aFolderId, TFSMailMsgId aMessageId ); - - void CompletePendingMrCommand(); - void CancelPendingMrCommandL(); - - // Helper funcitons to get viewed message ID and Folder id - TFSMailMsgId ViewedMessageFolderId(); - TFSMailMsgId ViewedMessageId(); - - // Called from global flag selection dialog - void FlagselectionCompleteL( TInt aSelection ); - - void HandleMailBoxEventL( TFSMailEvent aEvent, TFSMailMsgId aMailbox, - TAny* aParam1, TAny* aParam2, TAny* aParam3 ); - -public: // from CFsEmailUiViewBase - void DynInitMenuPaneL(TInt aResourceId, CEikMenuPane* aMenuPane); - void HandleCommandL( TInt aCommand ); - - TUid Id() const; - - void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType ); - void HandleDynamicVariantSwitchOnBackgroundL( CFsEmailUiViewBase::TDynamicSwitchType aType ); - void HandleForegroundEventL(); - -protected: // from CFsEmailUiViewBase - /*void DoDoActivateL( const TVwsViewId& aPrevViewId, - TUid aCustomMessageId, - const TDesC8& aCustomMessage );*/ - void ChildDoDeactivate(); - void ActivateControlGroup( TInt aDelay = 0 ); - void GetParentLayoutsL( RPointerArray& aLayoutArray ) const; - void NavigateBackL(); - -public: // from MFsTextViewerObserver - void HandleTextViewerEventL( TFsTextViewerEvent aEvent ); - -public : // from MFSEmailDownloadInformationObserver - void RequestResponseL( const TFSProgress& aEvent, const TPartData& aPart ); - -public : // for MFSMailRequestObserver - void RequestResponseL( TFSProgress aEvent, TInt aRequestId ); - -public: // from MFSEmailUiFolderListCallback - void FolderSelectedL( TFSMailMsgId aSelectedFolderId, - TFSEmailUiCtrlBarResponse aResponse ); - -public: // from MAknBackgroundProcess - // we are using different wait note - //void StepL(); - //TBool IsProcessDone() const; - //void ProcessFinished(); - //void DialogDismissedL( TInt /*aButtonId*/ ); - //TInt CycleError( TInt aError ); - - // from MProgressDialogCallback - void DialogDismissedL( TInt aButtonId); - // - -public: // from MFSEmailUiGenericTimerCallback - void TimerEventL( CFSEmailUiGenericTimer* aTriggeredTimer ); - -public: // from MFSEmailUiContactHandlerObserver - void OperationCompleteL( TContactHandlerCmd aCmd, - const RPointerArray& aContacts ); - void OperationErrorL( TContactHandlerCmd, TInt aError ); - -public: // from MESMRIcalViewerCallback - void ProcessAsyncCommandL( TESMRIcalViewerOperationType aCommandId, const CFSMailMessage& aMessage, MESMRIcalViewerObserver* aObserver = NULL ); - void ProcessSyncCommandL( TESMRIcalViewerOperationType aCommandId, const CFSMailMessage& aMessage ); - TBool CanProcessCommand( TESMRIcalViewerOperationType aCommandId ) const; - -public: // from MESMRIcalViewerObserver - void OperationCompleted( TIcalViewerOperationResult aResult ); - void OperationError( TIcalViewerOperationResult aResult ); - -public: // from MAknNaviDecoratorObserver - - /** - * Called by navigationDecorator if navi arrows (left/right) have been pressed - * @aParam aEventID specifies a tapping of either left or right arrow - */ - void HandleNaviDecoratorEventL( TInt aEventID ); - -// Toolbar -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; -// Toolbar - -private: // methods - - // Class constructing - CFSEmailUiMailViewerVisualiser( CAlfEnv& aEnv, CFreestyleEmailUiAppUi& aAppUi, - CAlfControlGroup& aMailViewerControlGroup ); - void ConstructL(); - - // Constructing & refreshing the view - void AddBackgroundPicturesL(); - void ClearMailViewer(); - void UpdateMailViewerL(); - void RefreshL( TBool aFirstStart = EFalse ); - // Callback function to encapsulate actions which are deferred form RefreshL() to - // make it complete faster - static TInt DoPostRefresh( TAny* aSelfPtr ); - void PostRefreshL(); - void SetActionButtonIconAndHighLight(); - void CheckMessageStructureL(); - void UpdateDownloadIndicatorL( TFSProgress::TFSProgressStatus aStatus = TFSProgress::EFSStatus_Waiting ); - - // Update our message pointer and change observed message - void UpdateMessagePtrL( TFSMailMsgId aNewMailbox, TFSMailMsgId aNewFolder, TFSMailMsgId aNewMessage ); - void UpdateMessagePtr( CFSMailMessage* aNewMessagePtr ); - - // Message stack handling. Ownership of message is transferred when succesful. - void PushMessageL( CFSMailMessage* aMessage, TBool aIsEmbedded ); - CFSMailMessage* PopMessage(); - void EraseMessageStack(); - // Html viewer opening - void LaunchHtmlViewerL(); - - // Changing message states - void SetMessageFollowupFlagL(); - void ChangeMsgReadStatusL( TBool aRead, TBool aCmdFromMrui ); - - // For deleting current mail - // Return value indicating whether message was deleted - TBool DeleteMailL( CFSMailMessage& aMessagePtr, TBool aReturnPreviousView, TBool aDisableNote = EFalse ); - - // Options menu dimm checking - TBool ShowActionsMenuInOptionsL() const; - TBool ShowDownloadManagerMenuInOptions() const; - TBool ShowNextMessageMenuInOptions() const; - TBool ShowPreviousMessageMenuInOptions() const; - void ShowNextMessageL(); - void ShowPreviousMessageL(); - - // Action menu lauching and selection handling - void LaunchActionMenuL(); - void CreateActionMenuItemsL( TActionMenuType aActionMenuType ); - void HandleActionMenuCommandL( TActionMenuCustomItemId aSelectedActionMenuItem, TActionMenuType aActionMenuType ); - - - // Action menu command handling - void OpenLinkInIntranetL( TBool aMenuSelection = ETrue ); - void OpenHotSpotUrlInBrowserL( CFindItemEngine::SFoundItem& aHotSpot ); - void CallToBodyHotSpotNumberL( CFindItemEngine::SFoundItem& aHotSpot ); - void ComposeMailL(); - void WriteEmailToHotSpotAddressL( CFindItemEngine::SFoundItem& aHotSpot ); - - void OpenContactDetailsL(); - - void LaunchRemoteLookupL( const TDesC& aHotspotText ) const; - void AddToBookmarksL( const CFindItemEngine::SFoundItem& aBodyHotspotData ) const; - - void CallHotSpotAddressL(); - void CreateMessageL() const; - - TBool IsCopyToClipBoardAvailableL() const; - void CopyCurrentHotspotToClipBoardL() const; - - // Attachment handling - TBool ShowOpenAttachmentOptionL(); - TBool ShowSaveAttachmentOptionL(); - TBool ShowDownloadOptionL(); - TBool ShowMskDownloadOptionL(); - TBool ShowCancelDownloadOption(); - void OpenAttachmentL(); - void OpenAttachmentsViewL(); - void StartDowloadingAttachmentsL(); - void CancelDowloadingAttachmentsL(); - void SaveAllAttachmentsL(); - void RemoveFetchedAttachmentL(); - - // Helper method for creating Part data needed when calling to download mediator - TPartData MailData(); - - // Content fecthing - - // list of different types of content - enum TFetchedContentType - { - EMessagePlainTextBodyPart = 0, - EMessageHtmlBodyPart, - EMessageStructure - }; - TBool StartFetchingBodyAfterOpeningL() const; - TBool MessageStructureKnown( CFSMailMessage& aMsg ) const; - TBool MessagePartFullyFetchedL( TFetchedContentType aFetchedContentType ) const; - void StartFetchingMessagePartL( CFSMailMessage& aMessagePtr, - TFetchedContentType aFetchedContentType ); - void StartFetchingMessageStructureL( CFSMailMessage& aMsg ); - void StartWaitedFetchingL( TFetchedContentType aFetchedContentType ); - void StartFetchingRemaininBodyLinesIfAtBottomL(); - void CancelFetchings(); - - void SaveEmailAsContactL( const TDesC& aEmailAddress ); - void SavePhoneNumberAsContactL( const TDesC& aPhoneNumber ); - - void SetMailboxNameToStatusPaneL(); - - TInt ResolveBodyTextSchemaUrlTypeL( CFindItemEngine::SFoundItem aHotSpot ); - - void SetActionMenuIconVisbilityL(); - - void SendEventToAppUiL( TFSMailEvent aEventType ); - - void DoFirstStartL(); - - /** - * Initiates the hotspot action, if currently focused header hotspot has - * some direct hotspot action defined (not opening action menu). Returns - * ETrue if direct action specified (and initiated) for the focused - * hotspot, otherwise EFalse. - */ - TBool HandleHeaderHotspotActionL( TViewerHeadingHotspotType aHotspotType ); - - /** - * Handles updating of navigation pane content - * (navi arrows + priority and followup icons) - * - * @param aForESMR Whether the navi pane update is for meeting - * request or not. - */ - void UpdateNaviPaneL( TBool aForESMR = EFalse ); - - /** - * Sets mailviewer's navipane to background - */ - void HideNaviPane(); - -private: // Methods for moving message - - // Start moving current visible message to different folder - // Return EFalse if moving is not a supported function - TBool OpenFolderListForMessageMovingL(); - - // Message is moved and viewer is closed asynchronously after selecting a folder - // from the move to folder dialog. This is necessary because view swithching is asynchronous. - static TInt MoveToFolderAndExitL( TAny* aMailViewerVisualiser ); - -private: // data for moving message to different folder action - - TBool iMoveToFolderOngoing; - TBool iMovingMeetingRequest; - CAsyncCallBack* iAsyncCallback; - TFSMailMsgId iMoveDestinationFolder; - -private: // data related to fetching - - TBool iFetchingMessageStructure; - TInt iCurrentStructureFetchRequestId; - - TBool iFetchingPlainTextMessageBody; - TInt iCurrentPlainTextBodyFetchRequestId; - - TBool iFetchingHtmlMessageBody; - TInt iCurrentHtmlBodyFetchRequestId; - - TFetchedContentType iStartAsyncFetchType; - - // Wait note stuff - // - //CAknWaitNoteWrapper* iAsyncWaitNote; - CAknWaitDialog* iWaitDialog; - CAknWaitDialog* iWaitDialogOpening; - TBool iDialogNotDismissed; - // - TBool iFetchingAlready; - TBool iAsyncProcessComplete; - -private: // data for fetching timer - - CFSEmailUiGenericTimer* iFetchingAnimationTimer; - -private: // other class data - - // Handle to ALF environment - CAlfEnv& iEnv; - - // Stack of open messages. Messages are owned by this stack. - CStack* iOpenMessages; - // Stack of embedded messages. Message are NOT owned by this stack. Similar to iOpenMessages - // but has NULL pointer in slots which correspond non-embedded messages. - CStack* iEmbeddedMessages; - // Mail message pointer, changes always in do activate - CFSMailMessage* iMessage; - - // Mail box where the iMessage object is. - CFSMailBox* iMailBox; - - // AlfControl for capturing right and left navigation key events - CFreestyleEmailUiMailViewerControl* iControl; - - // Text viewer and control object - CFsTextViewer* iTextViewer; - - // Pointer to TV component control - CAlfControl* iTextViewerControl; // not owned - - // Rich text for the view. - CFSEmailUiMailViewerRichText* iViewerRichText; - - // Basic smileys for the - CFsSmileyDictionary* iSmDictionary; - - // For opening the intranet app - CAiwServiceHandler* iIBServiceHandler; - - // Boolean to indicate that layout has changed while some other view was active - TBool iLayoutChangedWhileNotActive; - - // Temporary mail address for opening editor - CFSMailAddress* iNewMailTempAddress; - - // Meeting request observer stuff. - // Pointer to observer to inform, not owned. - MESMRIcalViewerObserver* iMrObserverToInform; - MESMRIcalViewerObserver::TIcalViewerOperationResult iOpResult; - TBool iMrUiActive; - - // Flag to indicate that we are moving into next or previous message - TBool iNextOrPevMessageSelected; - - CAlfControlGroup* iDownloadProgressControlGroup; // owned by AlfEnv - CFSEmailUiStatusIndicator* iDownloadProgressIndicator; - - // Flag selection handler active object for global note - CFlagSelectionGlobalNoteHandler* iFlagSelectionHanler; - - TBool iFirstStartCompleted; - TBool iShowMskDownloadOption; - - // Flag to indicate we are viewing an embedded message. Many UI options need to be hidden in that case. - TBool iEmbeddedMessageMode; - - // - // Message pointer to a deleted mail from Mrui - TFSMailMsgId iDeletedMessageFromMrui; - // - }; - - -//////////////////////////////////////// -// FLAG selection dialog global note handler -///////////////////////////////////////// -class CFlagSelectionGlobalNoteHandler : public CActive - { - public: // Constructors and destructor - static CFlagSelectionGlobalNoteHandler* NewL( CFSEmailUiMailViewerVisualiser& aViewerVisualiser ); - virtual ~CFlagSelectionGlobalNoteHandler(); - void Cancel(); - void LaunchFlagListQueryDialogL(); - - private: - - void RunL(); - void DoCancel(); - TInt RunError( TInt aError ); - - private: - CFlagSelectionGlobalNoteHandler( CFSEmailUiMailViewerVisualiser& aVoIPDialogObserver ); - - - private: - CFSEmailUiMailViewerVisualiser& iViewerVisualiser; - CAknGlobalListQuery* iGlobalFlagQuery; - HBufC* iPrompt; - TInt iSelection; - }; - - -#endif //__FREESTYLEEMAILUI_MAILVIEWERVISUALISER_H__ - -