--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/mmsui/notviewerinc/NotViewerAppUi.h Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,641 @@
+/*
+* Copyright (c) 2004 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:
+* Notification Viewer
+*
+*/
+
+
+
+#ifndef NOTVIEWERAPPUI_H
+#define NOTVIEWERAPPUI_H
+
+// INCLUDES
+#include <bldvariant.hrh>
+#include <finditemengine.h> // FindItem stuff
+#include <MsgEditorAppUi.h> // CMsgEditorAppUi
+#include <ConeResLoader.h> // ResLoader
+#include <cenrepnotifyhandler.h> // link against CenRepNotifHandler.lib
+#include <MuiuMsvSingleOpWatcher.h> // Single operation watcher
+#include <muiumsvuiserviceutilitiesinternal.h> // TMuiuAddressType
+
+#include <MsvPrgReporter.h> // MMsvProgressDecoder
+#include <AknNaviDecoratorObserver.h> // MAknNaviDecoratorObserver
+#include <txtfrmat.h>
+
+#ifdef RD_SCALABLE_UI_V2
+#include <akntoolbarobserver.h>
+#include "NotUi.hrh"
+#endif
+
+#include "NotViewer.hrh" // Panic codes
+
+// FUNCTION PROTOTYPES
+GLREF_C void Panic(TNotViewerExceptions aPanic);
+
+// FORWARD DECLARATIONS
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+class CAknNavigationDecorator;
+#endif
+class CAknNavigationControlContainer;
+class CEikRichTextEditor;
+class CRichText;
+class CNotViewerDocument;
+class CMmsNotificationClientMtm;
+class CSendUi;
+class CFindItemMenu;
+class CFindItemEngine;
+class CMsgAddressControl;
+class CMmsSettingsHandler;
+class CRepository;
+class CMsgVoIPExtension;
+class CAknInputBlock;
+class CUniAddressHandler;
+#ifdef RD_SCALABLE_UI_V2
+class CAknToolbar;
+#endif
+
+
+// CLASS DECLARATION
+/**
+* CNotViewerAppUi
+* Inherited from CMsgEditorAppUi
+*/
+class CNotViewerAppUi : public CMsgEditorAppUi,
+ public MMsvSingleOpWatcher,
+ public MCenRepNotifyHandlerCallback,
+ public MMsvProgressDecoder
+#ifdef RD_SCALABLE_UI_V2
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+ , public MAknNaviDecoratorObserver //pen support for navi decorator
+#endif
+ , public MAknToolbarObserver //toolbar
+#endif
+ {
+
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CNotViewerAppUi();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CNotViewerAppUi();
+
+ public: // From base classes
+
+ /**
+ * EntryChangedL (from CMsgEditorAppUi)
+ * Called by Document when the TMsvEntry (usually status field)
+ * has been changed. This function updates the field in richtext body.
+ * (by calling these AddXXXFieldL functions)
+ */
+ void EntryChangedL( );
+
+ /**
+ * From MMsvSingleOpWatcher, called when operation has completed
+ */
+ virtual void OpCompleted(
+ CMsvSingleOpWatcher& aOpWatcher,
+ TInt aCompletionCode );
+
+ /**
+ * Called by OpCompleted when user has selected to delete notification
+ * both from server and locally. It initializes CAknInputBlock,
+ * starts the local delete process and initializes iIdle
+ */
+ void DoDeleteOpCompletedL( );
+
+ /**
+ * From MMsvProgressDecoder
+ * decode progress
+ * @param aProgress: progress buffer
+ * @param aReturnString: String to be displayed to the user usually in the CMsvWrappableProgressDialog dialog.
+ * @param aTotalEntryCount: total entries to be processes
+ * @param aEntriesDone: entries processes so far
+ * @param aCurrentEntrySize: total size of the entries to be processes
+ * used to display progress bar (for example mail size to be fetched is 42000 bytes)
+ * If for example deleting messges then this should be number of messages to be deleted
+ * @param aCurrentBytesTrans: number of bytes received so far
+ * used to display progress bar (for example received bytes is 21000 bytes, then progress bar half done)
+ * If for example deleting messges then this should be number of messages to deleted so far
+ * @param aInternal: used only in CImapConnectionOp
+ */
+ TInt DecodeProgress (
+ const TDesC8& aProgress,
+ TBuf<CBaseMtmUi::EProgressStringMaxLen>& aReturnString,
+ TInt& aTotalEntryCount,
+ TInt& aEntriesDone,
+ TInt& aCurrentEntrySize,
+ TInt& aCurrentBytesTrans, TBool aInternal );
+
+ private: // New functions
+
+ /**
+ * The handling of opening options-menu
+ * @param aMenuPane pointer to CEikMenuPane
+ */
+ void DynInitOptionsMenuL( CEikMenuPane* aMenuPane );
+
+ /**
+ * The handling of opening reply-menu
+ * @param aMenuPane pointer to CEikMenuPane
+ */
+ void DynInitReplyMenuL( CEikMenuPane* aMenuPane );
+
+ /**
+ * The handling of opening context sensitive menu
+ * @param aMenuPane pointer to CEikMenuPane
+ */
+ void DynInitContextMenuL( CEikMenuPane* aMenuPane );
+
+ /**
+ * Starts the fetching of MMS message. Calls the FetchMessageL
+ * function of NotificationClientMtm
+ */
+ void FetchL( );
+
+ /**
+ * Turns Viewer into Editor for forwarding the notification.
+ * Calls Forward function of the base class CMsgEditorAppUi.
+ * In the end updates the body text by calling EntryChangedL.
+ */
+ void DoForwardL( );
+
+ /**
+ * First verifies all the addresses in the TO field. Then calls
+ * SendL function of NotificationClientMtm to send the forward request.
+ * Exists the Viewer in the end.
+ */
+ void SendL( );
+
+ /**
+ * Replying to a message. Uses CSendAppUi to open either MMS or SMS Editor.
+ * Exists the Notification Viewer after opening the Editor.
+ * Overrides the function in base class.
+ * @param aReplyMms IN If ETrue, opens MMS Editor, otherwise SMS Editor.
+ */
+ void UniReplyL( TBool aReplyMms );
+
+ /**
+ * Deletes the notification that is currently open in the Notification Viewer.
+ * There are three different alternatives: For all the notifications it calls
+ * DeleteNotificationL function of NotificationClientMtm. For unsent Forward
+ * Request just Exit is called (as there's nothing saved in the MCE for unsent
+ * messages). For sent Forward Request DeleteAndExitL function is called.
+ */
+ void DeleteNotificationL( );
+
+ /**
+ * Calls MsvUiServiceUtilities's CallServiceL function to make a phone call
+ * either the sender of the notification or focused number in body field
+ */
+ void CallToNumberL( );
+
+ /**
+ * Calls MmsAddressHandler's AddRecipientL function to add recipients into
+ * the To field. Moves focus there if recipients were added.
+ */
+ void AddRecipientL( );
+
+ /**
+ * Calls VerifyAddressesL to verify the addresses in the To field.
+ */
+ void CheckNamesL( );
+
+ /**
+ * VerifyAddressesL()
+ * Calls MmsAddressHandler's VerifyAddressesL function to verify every address.
+ * @param aModified OUT ETrue, if some of the address where modified during verification
+ * @retun ETrue if all the addresses are OK
+ */
+ TBool VerifyAddressesL( TBool& aModified );
+
+ /**
+ * Calls HlpLauncher's LaunchHelpApplicationL function to launch Help application.
+ */
+ void LaunchHelpL( );
+
+ /**
+ * Launch msg info dialog
+ * If the address control has been modified since the message has been saved the previous
+ * time, AddressHandler's CopyAddressToMtmL function is called to update the Client MTM.
+ * Then the message is saved by calling Client MTM's SaveMessageL function.
+ * Then UI MTM's InvokeAsyncFunctionL function is called with command id
+ * KMtmUiFunctionMessageInfo.
+ */
+ void MessageDetailsL( );
+
+ /**
+ * Returns a pointer to current richtext
+ * @return reference to CEikRichText
+ */
+ CRichText& RichText( ) const;
+
+ /**
+ * Return a pointer to document-object
+ * Overrides the function in base class.
+ * @return CNotEditorDocument* a pointer to CNotViewerDocument-object
+ */
+ CNotViewerDocument* Document( ) const;
+
+ /**
+ * Adds a label and value pair.
+ * @param aLabel text to displayed in label text format.
+ * @param aValue text to displayed in text format.
+ */
+ void AddItemL( const TDesC& aLabel, const TDesC& aValue );
+
+ /**
+ * Applies the format of value and label text to viewer.
+ * @param aFormat Character format to be applied.
+ * @param aMask Character format mask
+ * @aIsLabel Determines is the text label or value.
+ */
+ void ApplyFormat( TCharFormat& aFormat, TCharFormatMask& aMask, TBool aIsLabel );
+
+ /**
+ * Add text to viewer, checks and removes linefeeds and carriage returns
+ * @param aText text to be added
+ * @param aFormat Character format
+ * @param aMask Character format mask
+ */
+ void AppendTextL( const TDesC& aText,
+ const TCharFormat& aFormat,
+ const TCharFormatMask& aMask );
+
+ /**
+ * Returns the control id of the currently focused control.
+ * @return Control id of the focused control or
+ * EMsgComponentIdNull if no control focused
+ */
+ TInt FocusedControlId();
+
+ protected: // Functions from base classes
+
+ /**
+ * From CMsgEditorAppUi
+ * This handles the case if mms entry currently viewed is suddenly deleted from MSGS
+ * In other words, just Exit is called.
+ */
+ void HandleEntryDeletedL( );
+
+ /**
+ * From CMsgEditorAppUi
+ * This handles the case if mms entry currently viewer is changed (status changed etc.)
+ */
+ void HandleEntryChangeL();
+
+ /**
+ * From MMsgEditorObserver
+ */
+ void EditorObserver(
+ TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+ void DoEditorObserverL(TMsgEditorObserverFunc aFunc, TAny* aArg1, TAny* aArg2, TAny* aArg3);
+
+ /**
+ * From MAknNaviDecoratorObserver
+ * Handles the events coming from arrow presses
+ * related to next/previous message
+ */
+#ifdef RD_SCALABLE_UI_V2
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+ void HandleNaviDecoratorEventL( TInt aEventID );
+#endif
+#endif
+ private: // Functions from base classes
+
+ /**
+ * From MsgEditorAppUi
+ * Calls just Exit() as nothing is really saved in Notification Viewer when
+ * exit is pressed.
+ */
+ void DoMsgSaveExitL( );
+
+ /**
+ * DoSaveL( )
+ * This is called only before the sending of a Forward Request is started.
+ * It first calls AddressHandler's function CopyAddressesToMtmL and then calls
+ * ClientMtm's SaveMessageL to save the latest changes. Then AddressHandler's
+ * MakeDetails is called.
+ */
+ void DoSaveL( );
+
+ /**
+ * From MMsgEditorLauncher
+ */
+ void LaunchViewL( );
+
+ /**
+ * From CCoeAppUi
+ * @param aKeyEvent - check CCoeAppUi
+ * @param aType - check CCoeAppUi
+ * @return TKeyResponse - check CCoeAppUi
+ */
+ TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * From CEikAppUi
+ * @param aCommand - check CEikAppUi
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * DoSelectionKeyL
+ * Handles selection and enter keys.
+ * If the focus is on To field - AddRecipientL is called.
+ * Otherwise opens the context sensitive menu.
+ * @return ETrue, selection or enter key was handled
+ * EFalse, selection or enter key was not handled
+ */
+ TBool DoSelectionKeyL();
+
+ /**
+ * DoHandleSendKeyL
+ */
+ void DoHandleSendKeyL();
+
+
+ /**
+ * From MEikMenuObserver
+ * @param aMenuId look from MEikMenuObserver
+ * @param aMenuPane look from MEikMenuObserver
+ */
+ void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane );
+
+ /**
+ * From CCoeAppUi
+ * Returns help context
+ */
+ CArrayFix<TCoeHelpContext>* HelpContextL( ) const;
+
+ /**
+ * AddSubjectFieldL
+ * Adds message field into the rich text body. Gets the right sentence from the
+ * resource file according to the current message status and calls AddItemL.
+ */
+ void AddMessageFieldL( );
+
+ /**
+ * AddSubjectFieldL
+ * Adds subject field into the rich text body
+ */
+ void AddSubjectFieldL( );
+
+ /**
+ * AddTextFieldL
+ * Adds text field into the rich text body
+ */
+ void AddTextFieldL( );
+
+ /**
+ * AddExpiryFieldL
+ * Adds expiry field into the rich text body
+ */
+ void AddExpiryFieldL( );
+
+ /**
+ * AddSizeFieldL
+ * Adds size field into the rich text body
+ */
+ void AddSizeFieldL( );
+
+ /**
+ * AddClassFieldL
+ * Adds class field into the rich text body
+ */
+ void AddClassFieldL( );
+
+ /**
+ * AddPriorityFieldL
+ * Adds priority field into the rich text body
+ */
+ void AddPriorityFieldL( );
+
+ /**
+ * ShowConfirmationQueryL
+ * Creates CAknQueryDialog with resource aResourceId and executes it.
+ * User is shown a confirmation query.
+ * Shows confirmation query with question aResourceId
+ * @param IN aResourceId id of the confirmation resource
+ * @return OUT return value of dlg->ExecuteLD
+ */
+ TInt ShowConfirmationQueryL( TInt aResourceId ) const;
+
+ /**
+ * ShowInformationNoteL
+ * Shows information note for user
+ * @param aResourceID
+ * @param aWaiting, is note waiting or not.
+ */
+ void ShowInformationNoteL(TInt aResourceID, TBool aWaiting );
+
+
+ /**
+ * AddressControl
+ * Returns pointer to the current AddressControl (either To or From).
+ */
+ CMsgAddressControl* AddressControl( );
+
+ /**
+ * UpdateTitlePane
+ * This is called only when there is Forward Request open.
+ * Updates the title text in the Title pane. In case of unsent Forward
+ * Request, changes the CBA to Options-Cancel.
+ */
+ void UpdateTitlePaneL( );
+
+ /**
+ * MessageStatus
+ * Gets the status of the current message according to the expiry time and
+ * iMtmData2 field. Not applicable for Forward Requests.
+ * @return OUT TNotViewerStatus - the status of the notification.
+ */
+ TNotViewerStatus MessageStatus( ) const;
+
+ /**
+ * GetTypeL
+ * Checks if the entry is a notification or Forward Request according to
+ * the iMtmData1 field and sets the right bit in iFlags.
+ * Also calls MessageStatus to update the status of iMsgStatus.
+ * Leaves with KErrNotSupported, if unknown notifcation type flags set in
+ * TMsvEntry::iMtmData1.
+ */
+ void GetTypeL( );
+
+
+ /**
+ * Sets automatic highlighting on/off.
+ * @param aEnable if ETrue sets automatic highlighting on,
+ * if EFalse sets automatic highlighting off
+ */
+ void SetFindModeL( TBool aEnable );
+
+ /**
+ * From MMessageIteratorObserver
+ * @param See documentation of MMessateIteratorObserver
+ */
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+ void HandleIteratorEventL(TMessageIteratorEvent aEvent);
+#endif
+ /**
+ * Initializes navipane according to message content
+ */
+ void InitNavipaneL();
+
+ /**
+ * Sub function for InitNavipaneL();
+ * @param aText string in the right hand side of navipane
+ */
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+ void CreateTabGroupL( const TDesC& aText );
+#endif
+
+ /**
+ * Checks if the message has been deleted from MMBox already
+ * @result ETrue - already deleted
+ * EFalse - not deleted yet
+ */
+ TBool AlreadyDeletedFromServer( );
+
+ /**
+ * Checks if the MMS AP Settings are ok
+ * @result ETrue - they were ok, it's ok to continue
+ * EFalse - Not ok and cancel was selected
+ */
+ TBool CheckAPSettingsL( );
+
+#ifdef RD_SCALABLE_UI_V2
+ /**
+ * From MAknToolbarObserver
+ * Should be used to set the properties of some toolbar components
+ * before it is drawn.
+ * @param aResourceId The resource ID for particular toolbar
+ * @param aToolbar The toolbar object pointer
+ */
+ virtual void DynInitToolbarL( TInt aResourceId,
+ CAknToolbar* aToolbar );
+
+ /**
+ * From MAknToolbarObserver
+ * Handles toolbar events for a certain toolbar item.
+ * @param aCommand The command ID of some toolbar item.
+ */
+ virtual void OfferToolbarEventL( TInt aCommand );
+
+ /**
+ * OperationOngoing returns status whether operation is going on.
+ * Needed by MsgStatus
+ */
+ TBool OperationOngoing( const TMsvEntry& aEntry ) const;
+
+ /**
+ * OperationFinished returns status whether operation has finished
+ * successfully or unsuccessfully
+ * Needed by MsgStatus
+ */
+ TBool OperationFinished( const TMsvEntry& aEntry ) const;
+
+ /// From CCoeAppUi
+ void HandleForegroundEventL(TBool aForeground);
+
+#endif
+
+
+ private:
+
+ /**
+ * By default Symbian OS constructor is private.
+ */
+ void ConstructL();
+
+ void HandleNotifyInt(TUint32 aId, TInt aNewValue);
+ void HandleNotifyError(TUint32 aId, TInt error, CCenRepNotifyHandler* aHandler);
+ void HandleNotifyGeneric(TUint32 aId);
+
+ /**
+ * Starts CPeriodic to call DelayedExit after aDelay
+ */
+ void DoDelayedExitL( const TInt aDelay );
+
+ /**
+ * Tries to exit the application. Called by CIdle
+ */
+ void DoInternalExitL( );
+
+ /**
+ * Callback for CIdle
+ */
+ static TInt DelayedExit( TAny* aThis );
+
+ /**
+ * From CEikAppUi
+ */
+ void HandleResourceChangeL(TInt aType);
+
+ /**
+ * Sets title of the mms viewer app into status pane
+ */
+ void SetTitleIconL();
+
+ private: // Data
+
+ CMmsNotificationClientMtm* iMtm; // Client MTM of MMS Notifications
+
+ CMmsSettingsHandler* iSettingsHandler; // Settings handler
+ CUniAddressHandler* iAddressHandler; // Wrapper for address handling
+ CPeriodic* iIdle; // Idle stuff
+ CAknInputBlock* iAbsorber; // For absorbing keypresses
+
+ CCenRepNotifyHandler* iNotifyHandler;
+ CRepository* iCUiRepository;
+ CRepository* iMuiuSettRepository;
+
+ CSendUi* iSendUi; // For replying to the sender
+ CFindItemMenu* iFindItemMenu;
+
+ CAknNavigationControlContainer* iNaviPane;
+#ifndef RD_MSG_NAVIPANE_IMPROVEMENT
+ CAknNavigationDecorator* iNaviDecorator; // Overrides the variable in base class
+#endif
+ CMsvSingleOpWatcher* iOperation;
+
+ // Own: Contains information of the VoIP profiles.
+ CMsgVoIPExtension* iMsgVoIPExtension;
+
+ HBufC* iAlias; // The alias name of the sender
+ TMuiuAddressType iSenderType; // Phone, email, none
+ TNotViewerStatus iMsgStatus; // Waiting, expired, forwarding etc.
+ TInt iFlags; // Help, auto find, notification etc.
+ TMsvId iMsgId; // Id of the message
+ TCharFormat iLabelFormat;
+ TCharFormatMask iLabelMask;
+ TCharFormat iValueFormat;
+ TCharFormatMask iValueMask;
+#ifdef RD_SCALABLE_UI_V2
+ CAknToolbar* iToolbar;
+#endif
+ CAknTitlePane* iTitlePane;
+ CGulIcon* iAppIcon;
+ // Remote address is shown in the From field
+ TBool iRemoteAlias;
+ };
+
+#endif // NotVIEWERAPPUI_H
+
+// End of File