diff -r 000000000000 -r 72b543305e3a mobilemessaging/mmsui/notviewerinc/NotViewerAppUi.h --- /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 +#include // FindItem stuff +#include // CMsgEditorAppUi +#include // ResLoader +#include // link against CenRepNotifHandler.lib +#include // Single operation watcher +#include // TMuiuAddressType + +#include // MMsvProgressDecoder +#include // MAknNaviDecoratorObserver +#include + +#ifdef RD_SCALABLE_UI_V2 +#include +#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& 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* 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