diff -r 000000000000 -r 72b543305e3a mobilemessaging/postcard/postcardinc/PostcardAppUi.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mobilemessaging/postcard/postcardinc/PostcardAppUi.h Thu Dec 17 08:44:11 2009 +0200 @@ -0,0 +1,621 @@ +/* +* Copyright (c) 2005 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: PostcardAppUi declaration +* +*/ + + + +#ifndef POSTCARDAPPUI_H +#define POSTCARDAPPUI_H + +// ========== INCLUDE FILES ================================ + +#include // CMsgEditorAppUi +#include //zoom +#include //zoom + +#include // MMGFetchVerifier +#include // fetchtype + +#include "PostcardDocument.h" // TPostcardMsgType +#include "PostcardOperationObserver.h" // MPostcardOperationObserver +#include "PostcardQueryWaiter.h" // PostcardQueryWaiter +#ifdef RD_SCALABLE_UI_V2 +#include "PostcardPointerObserver.h" // MPocaPointerEventObserver +#endif + + +// ========== CONSTANTS ==================================== + +const TInt KPostcardAmountOfFreeDiskSpaceNeeded = 2000; + +// ========== MACROS ======================================= + +// ========== DATA TYPES =================================== + +// ========== FUNCTION PROTOTYPES ========================== + +// ========== FORWARD DECLARATIONS ========================= + +class CAknNavigationControlContainer; +class CAknTitlePane; +class CAknInputBlock; +class CAknWaitDialog; +class CAknGlobalMsgQuery; +class CEikMenuBar; +class CEikMenuPane; + +class CIdle; +class CPlainText; +class CContactCard; +class CFbsBitmap; +class CGulIcon; + +class CMsgImageInfo; + +class CPostcardOperation; +class CPostcardController; +class CPostcardCenRep; + +// ========== CLASS DECLARATION ============================ + +/** + * Postcard AppUi module + * + */ +class CPostcardAppUi : + public CMsgEditorAppUi, + public MMGFetchVerifier, + public MPostcardOperationObserver, +#ifdef RD_SCALABLE_UI_V2 + public MPocaPointerEventObserver, +#endif // RD_SCALABLE_UI_V2 + public MPostcardQueryWaiterCallback +{ + +public: + + /** + * Constructor. + */ + CPostcardAppUi(); + + /** + * 2nd phase constructor. + */ + void ConstructL(); + + /** + * Destructor. + */ + ~CPostcardAppUi(); + + /** + * Route key events to view. + * @param aKeyEvent key event + * @param aType event type + * @return response + * from CCoeAppUi + */ + TKeyResponse HandleKeyEventL( + const TKeyEvent& aKeyEvent, TEventCode aType); + + /** + * From CEikAppUi + */ + void HandleCommandL( TInt aCommand ); + + /** + * From MEikMenuObserver + */ + void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane ); + + +private: + + /** + * Inits the main menu options + * @param aMenuPane + */ + void DynInitMainMenuL( CEikMenuPane* aMenuPane ); + + /** + * Inits the Insert submenu options + * @param aMenuPane + */ + void DynInitInsertSubMenuL( CEikMenuPane* aMenuPane ); + + /** + * Inits the context menu options + * @param aMenuPane + */ + void DynInitContextMenuL( CEikMenuPane* aMenuPane ); + + /** + * Checks if option aMenuItem is invisible + * @param aMenuitem + * @return ETrue if invisible + */ + TBool IsMainMenuOptionInvisible( TInt aMenuItem ); + + /** + * Creates a media info object from given file and + * performs a preliminary check whether it is ok to + * insert the given media file. + * + * The media info object is created to "iImageInfo" + * member variable. + * + * @param aFileName Media file to be checked + * @return ETrue if media info object was created + * EFalse otherwise + */ + TBool CreateMediaInfoForInsertL( const TDesC& aFileName ); + + /** + * Handles selection key press. Either opens text/greeting dialog or open context menu + */ + void DoSelectionKeyL(); + +public: + + /** + * Launches help application + * @param aContext launches the aContext help page from Postcard manual + */ + void LaunchHelpL( const TDesC& aContext ); + + /** + * Accessor + * Get reference to file session + * @return Reference to file session + */ + RFs& FsSession() const; + + /** + * Tries to exit the application. + */ + void DoExternalExit( ); + + /** + * Callback for CIdle + */ + static TInt DelayedExit( TAny* aThis ); + + /** + * From MMGFetchVerifier + */ + TBool VerifySelectionL( const MDesCArray* aSelectedFiles ); + + /** + * From MMsgEditorLauncher + */ + void LaunchViewL(); + + /** + * From CMsgEditorAppUi + */ + void DoMsgSaveExitL(); + + /** + * From MPostcardOperationObserver + * Checks the result of the event and shows possible error note. + * Calls right function to finalize launch, save or image insertion. + */ + void PostcardOperationEvent( + TPostcardOperationType aOperation, + TPostcardOperationEvent aEvent ); + + /** + * From MPostcardQueryWaiterCallback + * If aResult is ok, starts the sending operation (save operation with right flag). + * Otherwise just deletes the query and returns. + */ + void QueryWaiterCallbackL( TInt aResult ); + + /** + * From MPostcardQueryWaiterCallback + * Called when QueryWaiterCallbackL() leaves. Should perform cleanup. + * After the callback, the leave is propagated to active scheduler. + */ + void QueryWaiterCallbackError(); + + /** + * Returns application menubar. + * @return pointer to menubar. + */ + CEikMenuBar* MenuBar() const; + + /** + * Asks the controller to reread the coordinates from the laf + */ + void HandleResourceChangeL( TInt aType ); + + /** + * Starts CIdle to call ExternalExit + */ + void DoDelayedExit( TInt aDelayTime ); + + /** + * Save message and exits + */ + void ExitAndSaveL(); + + /** + * Shows "closing message" list query. The options + * in the query are "Save to draft" and "Delete message". + * Should be called when "Close" softkey is pressed in + * non-empty message. + * + * @return EMsgCloseCancel, if the query is cancelled + * EMsgCloseSave, if "Save to drafts" is selected + * EMsgCloseDelete, if "Delete message" is selected + */ + TInt ShowCloseQueryL(); + + /** + * Takes the ownership of the aIcon and also passes the icon to controller + */ + void SetImage( CGulIcon* aIcon ); + + /** + * Takes the ownership of the aItem. + * Takes the right fields from aItem and writes them into a bitmap + * Passes the bitmap to controller. + */ + void SetRecipientL( CContactCard& aItem ); + + /** + * Takes the ownership of the aPlainText. + * Writes the text into a bitmap. + * Passes the bitmap to controller. + */ + void SetTextL( CPlainText& aPlainText ); + + /** + * Get maximum text length allowed for edit control + */ + TInt MaxTextLength( TInt aControlId ); + + /** + * Return reference to cenrep parameters + */ + const CPostcardCenRep& CenRep(); + + /** + * Gets the local zoom level + */ + void GetZoomLevelL( TInt& aZoomLevel ); + + /** + * Handles the changing of the local zoom by calling CMsgEditorAppUi::HandleLocalZoomChangeL + * @param aNewZoom is the new zoom level + */ + void HandleLocalZoomChangeL( TMsgCommonCommands aNewZoom ); + + +protected: + + /** + * Active scheduler start for saving. + */ + void BeginActiveWait(); + + /** + * Active scheduler stop for saving. + */ + void EndActiveWait(); + +#ifdef RD_SCALABLE_UI_V2 +private: // from MPocaPointerEventObserver + void PocaPointerEventL( TPocaPointerEvent aEvent, TPocaPointerEventType aEventType ); +#endif // RD_SCALABLE_UI_V2 + +private: + + /** + * Called when open operation finishes. Removes wait note. + * Updates navipane, checks if greeting or address fields are too long. + * Focuses the right object. + */ + void CompleteLaunchViewL( ); + + /** + * Checks whether there is enough disk space to save message or image. + */ + TBool CanSaveMessageL( TInt aAmount = KPostcardAmountOfFreeDiskSpaceNeeded ); + + /** + * Checks message content and start the sending query + */ + void DoSendL(); + + /** + * Starts the saving operation. + */ + void DoSaveL(); + + /** + * Shows the save query if necessary and calls DoSave if needed + */ + void DoBackSaveL(); + + /** + * Deletes image if it's focused + */ + void DoBackspaceL( ); + + /** + * Calls MTMUI's Forward feature to forward the postcard to someone else + */ + void DoForwardMessageL( ); + + /** + * Opens the address dialog. + * param aKeyEvent - if set, SimulateKeyEvent is called for it in the dialog + * param aFirstFocused - if set, focuses the given field when dialog started + */ + void DoEditAddressL( TKeyEvent aKeyEvent = TKeyEvent(), + TInt aFirstFocused = -1 ); + + /** + * Opens the greeting text dialog + * param aKeyEvent - if set, SimulateKeyEvent is called for it in the dialog + */ + void DoEditGreetingL( TKeyEvent aKeyEvent = TKeyEvent( ) ); + + /** + * Updates TMsvEntry and calls DoShowMessageInfoL + */ + void DoUpdateEntryAndShowMessageInfoL( ); + + /** + * Calls MsgAttachmentUtils::FetchFileL to fetch file aFetchType + */ + TBool FetchFileL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType ); + + /** + * Call FetchFileL with right parameter + * @param aFetchType: EImage or ENewImage + */ + void DoInsertImageL( + MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType ); + + /** + * Calls NextMessageL if next/prev message is available + */ + TKeyResponse NavigateBetweenMessagesL( TBool aNextMessage ); + +public: // These are functions that also address and greeting dialogs use + + /** + * Creates and shows an information note with text string aResourceId + */ + void ShowInformationNoteL( TInt aResourceID, TBool aWaiting ); + + /** + * Creates and shows an information note with text string aText + */ + void ShowInformationNoteL( const TDesC& aText, TBool aWaiting ); + + /** + * Calls global error UI to show an information note with text string aResourceId. + */ + void ShowGlobalInformationNoteL( TInt aResourceId, TBool aWaiting ); + + /** + * Creates and shows a confirmation query. + * First loads the string aResourceId from the resource file. + * Then calls the other ShowConfirmationQuery to show the query. + */ + TInt ShowConfirmationQueryL( TInt aResourceId, TBool aOnlyOK=EFalse ) const; + + /** + * Creates and shows a confirmation query. + * Creates a query dialog with text aText. If aOnlyOK is true, the softkeys + * are OK-Empty. Otherwise they are Yes-No. + * Returns the value returned by the dialog. + */ + TInt ShowConfirmationQueryL( const TDesC& aText, TBool aOnlyOK=EFalse ) const; + + + /** + * Puts a wait note on the screen with text aResourceId + * Stays on the screen until RemoveWaitNote is called + * param aNoTimeout - if true, note is shown immediately + * result true if the dialog was successfully shown + */ + TBool ShowWaitNoteL( TInt aResourceId, TBool aNoTimeout ); + + /** + * Removes possible current wait note from the screen. + */ + void RemoveWaitNote(); + + /** + * Reads and returns the mandatory fields' byte from the resource + */ + TInt MandatoryAddressFields( ); + + /** + * Reads string aResourceId from the resource file and leaves in the callstack + * return the read string + */ + HBufC* ReadFromResourceLC( TInt& aResourceId ); + + /** + * Calls MTMUI to show the message info in the screen. + */ + void DoShowMessageInfoL(); + + /** + * Called by Text editor dialog to ask if the recipient field has any data + * Returns ETrue if iContact has any data. + */ + TBool ContactHasData( ); + +private: + + /** + * Returns true if there's no image, no text nor recipient address + */ + TBool IsMessageEmpty( ); + + /** + * Returns a reference to the document class + */ + CPostcardDocument& Document(); + + /** + * Creates a set of address strings by using iContact + * and passes the strings into CreateTransparentIconL. + * Passes the returned transparent bitmap to Controller class. + */ + void RefreshRecipientBitmapL( ); + + /** + * Refreshes the lines how the greeting and recipients focus lines are drawn + */ + void RefreshFocusLinesL( ); + + /** + * Uses iGreeting as source text. + * Writes the text into a transparent bitmap and passes it into controller + */ + void CreateGreetingBitmapL( ); + + /** + * Creates a transparent icon with text aText written into it. + */ + CGulIcon* CreateTransparentIconL( const TDesC& aText ); + + /** + * Creates a transparent icon with text aStrings line by line written into it. + */ + CGulIcon* CreateTransparentIconL( const MDesCArray& aStrings ); + + /** + * Creates an empty bitmap of size aSize. + * Used by the functions above. + */ + CFbsBitmap* CreateEmptyBitmapLC( const TSize& aSize ); + + /** + * Returns ETrue if aContact's any field has any data + */ + TBool ContactHasData( const CContactCard& aContact ); + + /** + * Reads the max lenghts of each field from resources. + * Returns EFalse if either greeting text or any of the address fields + * are too long. + */ + TBool CheckLengthsL( ); + + /** + * Creates and returns the string that is shown in the send confirmation query + * after user has chosen to send the postcard. + */ + HBufC* CreateAddressStringForSendConfirmLC( ); + + /** + * Set main view middle softkey label according to the postcard side + * viewed and mode (viewer / edit). + */ + void SetMiddleSoftkeyL(); + + /** + * Creates and sets application icon to title pane. + */ + void CreateAndSetTitleIconL(); + + /** + * Sets application icon to title pane. + */ + void SetTitleIconL(); + + /** + * Checks if phone is in offline mode or not + * + * @return ETrue if phone is in offline mode + * Otherwise EFalse. + */ + TBool IsPhoneOfflineL() const; + +private: + + enum TPostcardFlags + { + EPostcardGreetingActive = 1, // Is Greeting dialog open + EPostcardRecipientActive = 2, // Is Address dialog open + EPostcardCamcorder = 4, // Is Camcorder supported + EPostcardEditMessageActive = 8, // Is Edit message active + EPostcardHelp = 16, // Is Help supported + EPostcardExitCalledFromDialog = 32,// Is exit called from text or address dialogs + EPostcardRunAppShutterAtExit = 64, + EPostcardLaunchSuccessful = 128, + EPostcardClosing = 256, + EPostcardFeatureOffline = 512 // Is offline supported + }; + + enum TPostcardFocusArea + { + EPostcardFocusAreaGreeting = 0, + EPostcardFocusAreaAddress, + EPostcardFocusAreaLast + }; + + enum TPostcardCloseQueryOptions + { + EPostcardCloseCancel, + EPostcardCloseSave, + EPostcardCloseDelete + }; + + TInt iPocaFlags; // postcard flags + TInt iResourceFile; // Offset of resource file + TInt iBaseResourceFile; // Offset of editor base res file + + CAknNavigationControlContainer* iNaviPane; + CAknTitlePane* iTitlePane; + CGulIcon* iAppIcon; + + CMsgImageInfo* iImageInfo; // media info created by verify selection + + CPostcardOperation* iOperation; // current postcard operation + CAknInputBlock* iAbsorber; // For absorbing keypresses + CPeriodic* iIdle; // For making external exit + CPostcardController* iController; // Postcard controller class + + // Global message query + CAknGlobalMsgQuery* iMessageQuery; // Message query for confirming send operation + HBufC* iSendText; // query text used by MsgQuery + + CAknWaitDialog* iWaitDialog; // wait dialog to be shown on screen + TPostcardMsgType iMsgType; // type of postcard that is open + CGulIcon* iImage; // image that user has inserted + CPlainText* iGreeting; // greeting text that user has entered + TInt iGreetingLength;// length of greeting text (excluding end separator) + CContactCard* iContact; // recipient address that user has entered + + TInt iMskResource; // current middle softkey resource ID + CPostcardCenRep* iCenRep; // central repository interface + + CActiveSchedulerWait iWait; +}; + +#endif + +// End of File