--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/inc/FreestyleEmailUiHtmlViewerView.h Thu Dec 17 08:39:21 2009 +0200
@@ -0,0 +1,351 @@
+/*
+* 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: CFsEmailUiHtmlViewerView class definition
+*
+*/
+
+
+
+#ifndef __FREESTYLEEMAILUI_HTML_VIEWER_VIEW_H__
+#define __FREESTYLEEMAILUI_HTML_VIEWER_VIEW_H__
+
+#include <cstack.h>
+#include "MFSMailRequestObserver.h"
+#include "mesmricalviewercallback.h"
+#include "mesmricalviewerobserver.h"
+#include "FreestyleEmailUiViewBase.h"
+#include "FreestyleEmailUiConstants.h"
+#include "FreestyleEmailUiContactHandlerObserver.h"
+#include "FreestyleEmailUiAttachmentsListModel.h"
+#include <AknWaitDialog.h>
+#include <AknNaviDecoratorObserver.h>
+#include "FreestyleEmailDownloadInformationMediator.h"
+#include "FreestyleEmailUiControlBarCallback.h"
+
+class CFSMailMessage;
+class CFreestyleEmailUiAppUi;
+class CFsEmailUiHtmlViewerContainer;
+class CFreestyleMessageHeaderURL;
+class CFreestyleAttachmentDownloadProgressBar;
+class CAknWaitDialog; //<cmail>
+class CFlagSelectionNoteHandler;
+class CAknGlobalListQuery;
+class CAknGlobalNote;
+/**
+ * Html viewer view.
+ */
+class CFsEmailUiHtmlViewerView : public CFsEmailUiViewBase,
+ public MFSEmailUiContactHandlerObserver,
+ public MFSEmailUiAttachmentsStatusObserver,
+ public MFSEmailDownloadInformationObserver,
+ public MFSMailRequestObserver,
+ public MProgressDialogCallback,
+ public MFSEmailUiFolderListCallback,
+ public MESMRIcalViewerCallback,
+ public MESMRIcalViewerObserver,
+ public MAknNaviDecoratorObserver
+ {
+public:
+
+ /** Two-phased constructor. */
+ static CFsEmailUiHtmlViewerView* NewL( CAlfEnv& aEnv,
+ CFreestyleEmailUiAppUi& aAppUi,
+ CAlfControlGroup& aControlGroup );
+
+ /** Destructor. */
+ ~CFsEmailUiHtmlViewerView();
+
+public: // from CAknView
+
+ /**
+ * Id
+ * @return Id Uid value
+ */
+ TUid Id() const;
+
+ /**
+ * HandleCommandL
+ * From CAknView, takes care of command handling.
+ * @param aCommand Command to be handled
+ */
+ void HandleCommandL( TInt aCommand );
+
+ // 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();
+ /**
+ * ChildDoDeactivate
+ * From CFsEmailUiViewBase, deactivate the AknView
+ * Remove the container class instance from the App UI's stack and
+ * deletes the instance
+ */
+ void ChildDoDeactivate();
+
+ /**
+ * DoExitL
+ * Handler called when exiting the view.
+ */
+ void DoExitL();
+
+ void DynInitMenuPaneL( TInt aResourceId, CEikMenuPane* aMenuPane );
+
+ void SetMskL();
+ void PrepareForExit();
+public : // for MFSMailRequestObserver
+ void RequestResponseL( TFSProgress aEvent, TInt aRequestId );
+public:
+ // from MProgressDialogCallback
+ void DialogDismissedL( TInt aButtonId);
+
+ CFSMailMessage* CurrentMessage();
+ CFSEmailUiAttachmentsListModel* CurrentAttachmentsListModel();
+
+public:
+ void HandleDynamicVariantSwitchL( CFsEmailUiViewBase::TDynamicSwitchType aType );
+ void HandleMailBoxEventL( TFSMailEvent aEvent,
+ TFSMailMsgId aMailbox, TAny* aParam1, TAny* /*aParam2*/, TAny* /*aParam3*/ );
+
+ void HandleEmailAddressCommandL( TInt aCommand, const TDesC& aEmailAddress );
+
+ void DownloadAttachmentL( const TAttachmentData& aAttachment );
+ void DownloadAllAttachmentsL();
+ void CancelAttachmentL( const TAttachmentData& aAttachment );
+ void OpenAttachmentL( const TAttachmentData& aAttachment );
+ void SaveAttachmentL( const TAttachmentData& aAttachment );
+ void SaveAllAttachmentsL();
+ void RemoveAttachmentContentL( const TAttachmentData& aAttachment );
+ void OpenAttachmentsListViewL();
+ TBool IsEmbeddedMsgView();
+ TBool IsEmbeddedMsgSavingAllowed();
+ // Helper funcitons to get viewed message ID and Folder id
+ TFSMailMsgId ViewedMessageFolderId();
+ TFSMailMsgId ViewedMessageId();
+
+ TBool GetAsyncFetchStatus();
+public: // from MFSEmailUiContactHandlerObserver
+ void OperationCompleteL( TContactHandlerCmd aCmd,
+ const RPointerArray<CFSEmailUiClsItem>& aContacts );
+ void OperationErrorL( TContactHandlerCmd, TInt aError );
+ TBool IsRemoteLookupSupportedL();
+
+public : // from MFSEmailDownloadInformationObserver
+ void RequestResponseL( const TFSProgress& aEvent, const TPartData& aPart );
+
+public: // from MFSEmailUiAttachmentsStatusObserver
+ void DownloadStatusChangedL( TInt aIndex );
+
+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 );
+private: // from
+ /**
+ * @see CFsEmailUiViewBase::ChildDoActivateL
+ */
+ void ChildDoActivateL( const TVwsViewId& aPrevViewId,
+ TUid aCustomMessageId,
+ const TDesC8& aCustomMessage );
+
+ /**
+ * @see CFsEmailUiViewBase::ToolbarResourceId
+ */
+ TInt ToolbarResourceId() const;
+
+ /**
+ * @see CFsEmailUiViewBase::GetInitiallyDimmedItemsL
+ */
+ virtual void GetInitiallyDimmedItemsL( const TInt aResourceId,
+ RArray<TInt>& aDimmedItems ) const;
+
+ /**
+ * @see CFsEmailUiViewBase::OfferToolbarEventL
+ */
+ void OfferToolbarEventL( TInt aCommand );
+
+ /**
+ * @see CFsEmailUiViewBase::NavigateBackL
+ */
+ void NavigateBackL();
+private: // New functions
+ // list of different types of content
+ enum TFetchedType
+ {
+ EMessagePlainTextBodyPart = 0,
+ EMessageHtmlBodyPart,
+ EMessageStructure
+ };
+ void ClearMailViewer();
+ void LoadContentFromFileL( const TDesC& aFileName );
+ void LoadContentFromFileL( RFile& aFile );
+ void LoadContentFromUrlL( const TDesC& aUrl );
+ void LoadContentFromMailMessageL( CFSMailMessage* aMailMessage );
+ void DeleteMailL();
+ void HideContainer();
+ void ShowContainerL();
+ void DynInitZoomMenuL( CEikMenuPane* aMenuPane );
+ TInt ZoomLevelIndexL();
+ void SetZoomLevelIndexL( TInt aIndex );
+ void SaveEmailAsContactL(
+ const TDesC& aEmailAddress );
+ //new functions for support of HTML viewer
+ void CallAdressL( const TDesC& aEmailAddress, TBool aVideoCall );
+ void OpenContactDetailsL( const TDesC& aEmailAddress );
+ void LaunchRemoteLookupL( const TDesC& aEmailAddress );
+ void CreateMessageL( const TDesC& aEmailAddress );
+
+ void UpdateDownloadIndicatorL( const TPartData& aPart,
+ const TFSProgress& aEvent );
+ //fetching related API
+ TBool MessagePartFullyFetchedL( TFetchedType aFetchedContentType ) const;
+ void StartFetchingMessagePartL( CFSMailMessage& aMessagePtr,
+ TFetchedType aFetchedContentType );
+ void UpdateMessagePtrL( TFSMailMsgId aNewMailboxId,
+ TFSMailMsgId aNewFolderId,
+ TFSMailMsgId aNewMessageId );
+ void CancelFetchings();
+ void StartFetchingMessageStructureL( CFSMailMessage& aMsg );
+ TBool MessageStructureKnown( CFSMailMessage& aMsg ) const;
+ void StartWaitedFetchingL( TFetchedType aFetchedContentType );
+ // Message stack handling. Ownership of message is transferred when succesful.
+ void PushMessageL( CFSMailMessage* aMessage, TBool aIsEmbedded );
+ CFSMailMessage* PopMessage();
+ void EraseMessageStack();
+ TBool OpenFolderListForMessageMovingL();
+ void ShowPreviousMessageL();
+ TBool ShowPreviousMessageMenuInOptions() const;
+ void ShowNextMessageL();
+ TBool ShowNextMessageMenuInOptions() const;
+ void ChangeMsgReadStatusL(TBool aRead, TBool aCmdFromMrui );
+ void SetMessageFollowupFlagL();
+ void SendEventToAppUiL( TFSMailEvent aEventType );
+ // 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 );
+ void FolderSelectedL( TFSMailMsgId aSelectedFolderId,
+ TFSEmailUiCtrlBarResponse aResponse );
+
+ void UpdateNaviPaneL( TBool aForESMR = EFalse );
+ void HideNaviPane();
+ TBool IsOpenedInMRViewerL();
+private: // Constructors
+
+ void ConstructL();
+ CFsEmailUiHtmlViewerView( CAlfEnv& aEnv,
+ CFreestyleEmailUiAppUi& aAppUi,
+ CAlfControlGroup& aControlGroup );
+
+private:
+ CAlfEnv& iEnv;
+ CFsEmailUiHtmlViewerContainer* iContainer;
+ CFSMailMessage* iMessage;
+ THtmlViewerActivationData iActivationData;
+ CFSEmailUiAttachmentsListModel* iAttachmentsListModel;
+ CFreestyleAttachmentDownloadProgressBar* iProgressBar;
+
+ // Stack of open messages. Messages are owned by this stack.
+ CStack<CFSMailMessage, ETrue>* 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<CFSMailMessage, EFalse>* iEmbeddedMessages;
+ TBool iCreateNewMsgFromEmbeddedMsg;
+
+ // <cmail>
+ // Temporary mail address for opening editor
+ CFSMailAddress* iNewMailTempAddress;
+ // </cmail>
+ CFSMailBox* iMailBox;
+private: // data for moving message to different folder action
+ TBool iFetchingMessageStructure;
+ TInt iCurrentStructureFetchRequestId;
+
+ TBool iFetchingPlainTextMessageBody;
+ TInt iCurrentPlainTextBodyFetchRequestId;
+
+ TBool iFetchingHtmlMessageBody;
+ TInt iCurrentHtmlBodyFetchRequestId;
+
+ TFetchedType iStartAsyncFetchType;
+
+ // Wait note stuff
+ //<cmail>
+ //CAknWaitNoteWrapper* iAsyncWaitNote;
+ CAknWaitDialog* iWaitDialog;
+ CAknWaitDialog* iWaitDialogOpening;
+ TBool iDialogNotDismissed;
+ //</cmail>
+ TBool iFetchingAlready;
+ TBool iAsyncProcessComplete;
+ CActiveSchedulerWait iWait;
+ TBool iMoveToFolderOngoing;
+ TBool iMovingMeetingRequest;
+ CAsyncCallBack* iAsyncCallback;
+
+ TFSMailMsgId iMoveDestinationFolder;
+ // Meeting request observer stuff.
+ // Pointer to observer to inform, not owned.
+ MESMRIcalViewerObserver* iMrObserverToInform;
+ MESMRIcalViewerObserver::TIcalViewerOperationResult iOpResult;
+ TBool iMrUiActive;
+ //<cmail>
+ // Message pointer to a deleted mail from Mrui
+ TFSMailMsgId iDeletedMessageFromMrui;
+ // Flag selection handler active object for global note
+ CFlagSelectionNoteHandler* iFlagSelectionHandler;
+ TBool iNextOrPrevMessageSelected;
+ };
+
+////////////////////////////////////////
+// FLAG selection dialog global note handler
+/////////////////////////////////////////
+class CFlagSelectionNoteHandler : public CActive
+ {
+ public: // Constructors and destructor
+ static CFlagSelectionNoteHandler* NewL( CFsEmailUiHtmlViewerView& aViewerVisualiser );
+ virtual ~CFlagSelectionNoteHandler();
+ void Cancel();
+ void LaunchFlagListQueryDialogL();
+
+ private:
+
+ void RunL();
+ void DoCancel();
+ TInt RunError( TInt aError );
+
+ private:
+ CFlagSelectionNoteHandler( CFsEmailUiHtmlViewerView& aVoIPDialogObserver );
+
+
+ private:
+ CFsEmailUiHtmlViewerView& iViewerView;
+ CAknGlobalListQuery* iGlobalFlagQuery;
+ HBufC* iPrompt;
+ TInt iSelection;
+ };
+
+
+#endif // __FREESTYLEEMAILUI_HTML_VIEW_H__