--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/unieditor/application/inc/UniEditorAppUi.h Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,1401 @@
+/*
+* Copyright (c) 2006-2009 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: Unified SMS and MMS Editor Application UI class definition.
+*
+*/
+
+
+
+#ifndef _UNIEDITORAPPUI_H
+#define _UNIEDITORAPPUI_H
+
+// INCLUDES
+
+#include <gmxmlparser.h> // for MMDXMLParserObserver & CMDXMLParser
+
+#include <MsgEditorAppUi.h> // for CMsgEditorAppUi
+#include <MsgEditorView.h>
+#include <MsgAddressControl.h>
+#include <MsgBodyControl.h> // for CMsgBodyControl
+#include <MsgEditor.hrh>
+#include <msgimagecontrol.h> // for CMsgImageControl (needed in .inl)
+#include <msgasynccontrolobserver.h>
+
+#include <MsgRecipientItem.h> // for CMsgRecipientArray
+#include <MsgAttachmentUtils.h>
+#include <MMGFetchVerifier.h>
+#include <akntoolbarobserver.h>
+#include <AknServerApp.h> // for MAknServerAppExitObserver
+#include <AknProgressDialog.h> // for MProgressDialogCallback
+#include <peninputclient.h>
+#include <peninputsrveventhandler.h>
+#include <cenrepnotifyhandler.h> // MCenRepNotifyHandlerCallback
+
+#include <eikedwob.h> // for MEikEdwinObserver
+
+#include <aknlongtapdetector.h> // for long tap
+// Needed by inline functions
+#include "uniobjectlist.h"
+#include "unidatamodel.h"
+#include "UniSendingSettings.h"
+
+#include "UniEditorHeader.h" // THeadersFields,
+#include "UniEditorApp.hrh" // TUniEditorPanicIds
+#include "UniEditorOperation.h" // MUniEditorOperatorObserver
+
+// CONSTANTS
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+class TFilename;
+class TChar;
+class CAknTitlePane;
+class CAknNavigationDecorator;
+class CAknNavigationControlContainer;
+class CAknWaitDialog;
+class CUniEditorDocument;
+class CAknLocalScreenClearer;
+class CRepository;
+class CSelectionItemList;
+class CEikImage; // for context icon
+class CAknInfoPopupNoteController;
+class CDocumentHandler;
+class CAknIconArray;
+class CAknInputBlock;
+class CMDXMLDocument;
+class CAknToolbar;
+
+class CMsgMediaInfo;
+class CMsgImageControl;
+class TMsgControlsIds;
+
+class CUniClientMtm;
+class CUniSmilModel;
+class CUniSlideLoader;
+class CUniEditorLaunchOperation;
+class CUniEditorSaveOperation;
+class CUniEditorSendOperation;
+class CUniEditorChangeSlideOperation;
+class CUniEditorInsertOperation;
+class CUniEditorVCardOperation;
+class CUniEditorHeader;
+class CAknToolbarExtension;
+class CAknStylusPopUpMenu;
+
+// CLASS DECLARATION
+
+/**
+* CUniEditorAppUi
+*
+* @since 3.2
+*/
+class CUniEditorAppUi :
+ public CMsgEditorAppUi,
+ public MMGFetchVerifier,
+ public MMsgAsyncControlObserver,
+ public MUniEditorOperationObserver,
+ public MAknToolbarObserver,
+ public MMDXMLParserObserver,
+ public MAknServerAppExitObserver,
+ public MEikEdwinObserver,
+ public MProgressDialogCallback,
+ public MPenUiActivationHandler,
+ public MCenRepNotifyHandlerCallback,
+ public MAknLongTapDetectorCallBack
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CUniEditorAppUi();
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUniEditorAppUi();
+
+ /**
+ * Removes object from screen. (Objectsview callback method)
+ * @param aRegion, region to remove the object from
+ * @param aLayout, layout before removed from model
+ */
+ void RemoveObjectL( TUniRegion aRegion, TUniLayout aLayout );
+
+ /**
+ * Changes object order on screen. (Objectsview callback method)
+ * @param aLayout, new layout
+ */
+ void ChangeOrderL( TUniLayout aLayout );
+
+ /**
+ * If there is image control, sets image release/lock
+ * according to parameter. Otherwise does nothing.
+ * @param aRelease, ETrue = release/unlock, EFalse = lock
+ */
+ void ReleaseImage( TBool aRelease );
+
+ /**
+ * Saves, if needed and exits
+ */
+ void ExitAndSaveL();
+
+ /**
+ * Wrapper on the FetchFileL function of Base Editor.
+ * Called by "Insert" functions.
+ *
+ * @param aFetchType, EImage or ENewImage or
+ * EAudio or ENewAudio or
+ * EVideo or ENewVideo
+ */
+ TBool FetchFileL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType );
+
+ /**
+ * Sets focus to first focusable control on body.
+ */
+ void SetFocusToBodyBeginningL();
+
+ /**
+ * Callback for CPeriodic
+ */
+ static TInt DelayedExitL( TAny* aThis );
+
+ /**
+ * Callback for MProgressDialogCallback
+ */
+ void DialogDismissedL( TInt /*dismissed*/ );
+
+ /**
+ * Exit Unieditor without save during critimal memory condition
+ */
+ void ExitWithoutSave();
+ public: // Functions from base classes
+
+ /**
+ * From MMsgEditorObserver. Calls DoEditorObserverL()
+ *
+ * For passing events from Base Editor to MMS Editor
+ */
+ void EditorObserver( TMsgEditorObserverFunc aFunc,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3 );
+
+ /**
+ * Handles the editor observer event.
+ */
+ void DoEditorObserverL( TMsgEditorObserverFunc aFunc,
+ TAny* aArg1,
+ TAny* aArg2,
+ TAny* aArg3 );
+
+ /**
+ * From MMGFetchVerifier
+ */
+ TBool VerifySelectionL( const MDesCArray* aSelectedFiles );
+
+ /**
+ * From MAknToolbarObserver
+ */
+ void DynInitToolbarL( TInt aResourceId, CAknToolbar* aToolbar );
+
+ /**
+ * From MAknToolbarObserver
+ */
+ void OfferToolbarEventL( TInt aCommand );
+
+ /**
+ * From MApaServerAppExitObserver
+ */
+ void HandleServerAppExit( TInt aReason );
+
+ /**
+ * From MEikEdwinObserver
+ */
+ void HandleEdwinEventL( CEikEdwin* aEdwin, TEdwinEvent aEventType );
+
+ /**
+ * From CMsgEditorAppUi
+ */
+ void HandleEntryMovedL( TMsvId aOldParent, TMsvId aNewParent );
+
+ /*
+ * From MPenUiActivationHandler
+ */
+ void OnPeninputUiDeactivated();
+
+ /*
+ * From MPenUiActivationHandler
+ */
+ void OnPeninputUiActivated();
+
+ private: // Functions from base classes
+
+ /**
+ * From MMsgEditorLauncher
+ */
+ void LaunchViewL();
+
+ /**
+ * From CCoeAppUi
+ */
+ TKeyResponse HandleKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType );
+
+ /**
+ * From CEikAppUi
+ */
+ void HandleCommandL( TInt aCommand );
+
+ /**
+ * Performs the command.
+ */
+ void DoHandleCommandL( TInt aCommand );
+
+ /**
+ * Performs the command.
+ */
+ void DoOfferToolbarEventL( TInt aCommand );
+
+ /**
+ * From CAknAppUi.
+ *
+ * Handles navipane updating when launched from idle and
+ * when returning from preview.
+ *
+ * @param aForeground, ETrue if app is foreground.
+ */
+ void HandleForegroundEventL(TBool aForeground);
+
+ /**
+ * From MEikMenuObserver
+ */
+ void DynInitMenuPaneL( TInt aMenuId, CEikMenuPane* aMenuPane );
+
+ /**
+ * Helper function to be called in normal unimode and upload mode.
+ * Handles the menu options based on the focused media object
+ */
+ void DynInitFocusedMediaBasedOptionsL( CEikMenuPane* aMenuPane );
+
+ /**
+ * From MUniEditorOperationObserver. Called when operation
+ * state is changed.
+ */
+ void EditorOperationEvent( TUniEditorOperationType aOperation,
+ TUniEditorOperationEvent aEvent );
+
+ /**
+ * Performs the real operation event handling
+ */
+ void DoEditorOperationEventL( TUniEditorOperationType aOperation,
+ TUniEditorOperationEvent aEvent );
+
+ /**
+ * From MUniEditorOperationObserver. Query is wanted to be shown
+ * to the user.
+ */
+ TBool EditorOperationQuery( TUniEditorOperationType aOperation,
+ TUniEditorOperationQuery aEvent );
+
+
+ /**
+ * Shows the query to the user.
+ */
+ TBool DoEditorOperationQueryL( TUniEditorOperationType aOperation,
+ TUniEditorOperationQuery aEvent );
+
+ /**
+ * Performs the change slide operation event handling.
+ */
+ void DoChangeSlideCompleteL();
+
+ /**
+ * Performs the insert operation event handling.
+ */
+ void DoInsertCompleteL( TUniEditorOperationEvent aEvent );
+
+ /**
+ * Performs the 2nd phase of insert operation event handling.
+ */
+ void DoInsertComplete2ndPhaseL();
+
+ /**
+ * Performs launch operation event handling.
+ */
+ void DoLaunchCompleteL();
+
+ /**
+ * Performs save operation event handling.
+ */
+ void DoSaveCompleteL();
+
+ /**
+ * Performs the 2nd phase of saving operation event handling.
+ */
+ void DoSavingComplete2ndPhase();
+
+ /**
+ * Performs send operation event handling.
+ */
+ void DoSendCompleteL();
+
+ /**
+ * Performs 2nd phase of send operation event handling.
+ */
+ void DoSendComplete2ndPhase();
+
+ /**
+ * Performs vCard insert operation event handling.
+ */
+ void DoVCardCompleteL();
+
+ /**
+ * Shows insert errors
+ */
+ void ShowInsertErrorsL();
+
+ /**
+ * From MMsgAsyncControlObserver. Called when asynchronous control
+ * state is changed
+ */
+ void MsgAsyncControlStateChanged( CMsgBaseControl& aControl,
+ TMsgAsyncControlState aNewState,
+ TMsgAsyncControlState aOldState );
+
+ /**
+ * From MMsgAsyncControlObserver. Called when asynchronous control
+ * receives resource change event.
+ */
+ void MsgAsyncControlResourceChanged( CMsgBaseControl& aControl, TInt aType );
+
+ /**
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+ // From MAknLongTapDetectorCallBack
+ /**
+ * @see MAknLongTapDetectorCallBack
+ */
+ void HandleLongTapEventL(
+ const TPoint& aPenEventLocation,
+ const TPoint& aPenEventScreenLocation );
+
+ private:
+
+ enum TUniEditorInsertTextType
+ {
+ ETemplateText,
+ EMemoText
+ };
+
+ enum TUniEditorInsertOtherType
+ {
+ ETextFile,
+ EOtherFile
+ };
+
+ private: // New functions
+
+ /**
+ * Update the msglength information in navipane.
+ * Reads the current size from document.
+ *
+ * @param aForceDraw, forces drawing of size label.
+ */
+ void MsgLengthToNavipaneL( TBool aForceDraw = EFalse );
+
+ /**
+ * Calculates the SMS Messages Characters left in the current segment and Total No. of segments in the message
+ * Total No. of segments in the message
+ *
+ * @Return value
+ * charsLeft: Characters left in the current segment
+ * msgsParts: Total No of segments
+ */
+ void CalculateSMSMsgLen(TInt& charsLeft, TInt& msgsParts);
+
+ /**
+ * Check if message has any data i.e. either in header ("To"),
+ * in message body or as attachments.
+ *
+ * @return ETrue, message empty,
+ * EFalse, message not empty
+ */
+ TBool IsMessageEmpty() const;
+
+ /**
+ * Draw the "not viewable" icons
+ * (editable 3GPP SMIL or non-editable SMIL).
+ *
+ * @param aEditable, ETrue should be set if SMIL is Template SMIL
+ */
+ void InsertPresentationL( TBool aEditable );
+
+ /**
+ * Updates the address size to CUniEditorDocument
+ */
+ void SetAddressSize();
+
+ /**
+ * Updates the subject size to CUniEditorDocument
+ */
+ void SetSubjectSize();
+
+ /**
+ * Checks message content and if ok send message
+ */
+ void DoUserSendL();
+
+ /**
+ * Handles message saving after exit
+ */
+ void DoMsgSaveExitL();
+
+ /**
+ * Handles delayed (external) exit
+ * @param aDelayTime in microsecods
+ */
+ void DoDelayedExit( TInt aDelayTime );
+
+ /**
+ * Handles message saving after user has pressed close.
+ */
+ void DoBackSaveL();
+
+ /**
+ * Does actual saving of message to DRAFT folder.
+ *
+ * @param aSaveType, Controls how the saving is done
+ * e.g. keep entry hidden etc.
+ */
+ void DoSaveL( TUniSaveType aSaveType );
+
+ /**
+ * Verifies addresses in address control.
+ *
+ * @return ETrue, if verify successful,
+ * EFalse otherwise
+ */
+ TBool VerifyAddressesL( TBool& aModified );
+
+ /**
+ * Handles user move and select page commands.
+ */
+ void DoUserMoveOrSelectPageL( TBool aMovePage );
+
+ /**
+ * Handles user objects view command.
+ */
+ void DoUserObjectsViewL( TBool aFocusAttachments );
+
+ /**
+ * Handles user add recipient command.
+ */
+ void DoUserAddRecipientL();
+
+ /**
+ * Handles user message info command.
+ */
+ void DoUserMessageInfoL();
+
+ /**
+ * Handles user sending settings command.
+ */
+ void DoUserSendingOptionsL();
+
+ /**
+ * Handles user insert media command.
+ */
+ void DoUserInsertMediaL();
+
+ /**
+ * Handles user insert image command. Creates attachment
+ * and draws image to display.
+ *
+ * @param aFetchType, ENewImage or EImage
+ */
+ void DoUserInsertImageL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType );
+
+ /**
+ * Handles user insert video command. Creates attachment
+ * and draws image to display.
+ *
+ * @param aFetchType, ENewVideo or EVideo
+ */
+ void DoUserInsertVideoL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType );
+
+ /**
+ * Handles user insert audio command. Creates atta and draws audio
+ * (indicator) to display.
+ *
+ * @param aFetchType, ENewAudio or EAudio
+ */
+ void DoUserInsertAudioL( MsgAttachmentUtils::TMsgAttachmentFetchType aFetchType );
+
+ /**
+ * Starts insert operation
+ *
+ * @param aAddSlide Indicates whether new slide should be added.
+ * @param aAddAsAttachment Indicates that file is inserted as attachment.
+ */
+ void DoStartInsertL( TBool aAddSlide, TBool aAddAsAttachment );
+
+ /**
+ * 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 "iInsertingMedia"
+ * member variable.
+ *
+ * @param aMediaType Media type to be checked
+ * @param aFileName Media file to be checked
+ * @return ETrue if media info object was created
+ * EFalse otherwise
+ */
+ TBool CreateMediaInfoForInsertL( TMsgMediaType aMediaType,
+ const TDesC& aFileName );
+
+ /**
+ * Checks whether the media object in "iInsertingMedia"
+ * member variable is SuperDistributable or not. If yes
+ * and Full OMA DRM is supported gives "Send without
+ * rights query".
+ *
+ * Deletes the "iInsertingMedia" variable if query is
+ * not accepted.
+ *
+ * @return ETrue, if it is ok to insert the media
+ * EFalse, otherwise (iInsertingMedia deleted!)
+ */
+ TBool SuperDistributionCheckForInsertL();
+
+
+ /**
+ * Checks whether it is ok to insert the media object
+ * in "iInsertingMedia" member variable.
+ *
+ * Deletes the "iInsertingMedia" variable if inserting
+ * is not allowed.
+ *
+ * @return ETrue, if it is ok to insert the media
+ * EFalse, otherwise (iInsertingMedia deleted!)
+ */
+ TBool CheckMediaInfoForInsertL();
+
+ /**
+ * Handles user insert slide command.
+ */
+ void DoUserInsertSlideL();
+
+ /**
+ * Handles user remove slide command.
+ */
+ void DoUserRemoveSlideL();
+
+ /**
+ * Does the actual slide removal. First removes
+ * All objects from the slide, then removes the
+ * actual slide and finally changes the current slide
+ */
+ void DoRemoveSlideL();
+
+ /**
+ * Handles user slide change command, i.e.
+ * this is called when the user scrolls out of
+ * the current slide.
+ *
+ * @param aSlideNum Number of the next slide to be drawn
+ */
+ void DoUserChangeSlideL( TInt aSlideNum );
+
+ /**
+ * Sets focus after slide is drawn
+ */
+ void DoSetFocusL();
+
+ /**
+ * Sets text to title pane
+ */
+ void SetTitleL();
+
+ /**
+ * Handles user remove image, audio of video media object
+ * @param aMediaControlId media control id
+ * @param aRegion region the control resides
+ * @param aConfirmResource confirm query to be shown to user
+ */
+ void DoUserRemoveMediaL( TMsgControlId aMediaControlId,
+ TUniRegion aRegion );
+
+ /**
+ * Handles user insert text command.
+ *
+ * @param aType Text type wanted to be inserted.
+ */
+ void DoUserInsertTextL( TUniEditorInsertTextType aType );
+
+ /**
+ * Handles user insert other file command.
+ *
+ * @param aType Other file type wanted to be inserted.
+ */
+ void DoUserInsertOtherFileL( TUniEditorInsertOtherType aType );
+
+ /**
+ * Handles user insert vCard command.
+ */
+ void DoUserInsertVCardL();
+
+// /**
+// * Handles user insert SVG command.
+// */
+// void DoUserInsertSvgL();
+
+ /**
+ * Draws navipane at launch time.
+ */
+ void InitNaviPaneL();
+
+ /**
+ * Updates following navi indicators to both avkon editor pane and navidecorator pane
+ * - Priority low / high
+ */
+ void UpdateIndicatorIconsL();
+
+ /**
+ * Auxiliary function. Shows a infomation note using notewrappers.
+ *
+ * @param aResourceID
+ * @param aWaiting, is note waiting or not.
+ */
+ void ShowInformationNoteL(TInt aResourceID, TBool aWaiting );
+
+ /**
+ * Auxiliary function. Shows an error note using notewrappers.
+ *
+ * @param aResourceID
+ * @param aWaiting, is note waiting or not.
+ */
+ void ShowErrorNoteL(TInt aResourceID, TBool aWaiting );
+
+ /**
+ * Auxiliary function.
+ * Shows a confirmation query.
+ *
+ * @param aResourceID
+ * @return the return value returned by CAknQueryDialog::ExecuteLD
+ */
+ TInt ShowConfirmationQueryL( TInt aResourceID );
+ TInt ShowConfirmationQueryL( const TDesC& aText ) const;
+ TInt ShowConfirmationNoQuestionQueryL( const TDesC& aText ) const;
+ TInt ShowConfirmableInfoL( TInt aResourceID );
+ TInt ShowConfirmableInfoL( const TDesC& aText ) const;
+ TInt ShowConfirmableInfoErrorL( const TDesC& aText ) const;
+
+ /**
+ * Auxiliary function. Shows a confirmation query if it is not shown before.
+ *
+ * @param aResourceID
+ * @return the return value returned by CAknQueryDialog::ExecuteLD
+ */
+ TInt ShowGuidedModeConfirmationQueryL( TInt aResourceID );
+
+ /**
+ * Shows wait note using CAknWaitDialog.
+ *
+ * @param aResourceID
+ */
+ TBool ShowWaitNoteL( TInt aResourceId );
+
+ /**
+ * Remove wait note from screen.
+ */
+ void RemoveWaitNote();
+
+ /**
+ * Handles text addition to model when needed, updates size
+ * when addreses or bodytext edited.
+ */
+ void HandleCharInputL();
+
+ /**
+ * Checks whether text object should be added to smilmodel when
+ * after characters are added/removed
+ */
+ void UpdateSmilTextAttaL();
+
+ /**
+ * Message size according to TS 23.140 v5.5.0
+ *
+ * @return size in bytes
+ */
+ TInt MessageSizeInBytes();
+
+ /**
+ * Handles selection key press.
+ */
+ void DoSelectionKeyL();
+
+ /**
+ * Performs launch finalization.
+ */
+ void FinalizeLaunchL();
+
+ /**
+ * Shows possible notes related to editor launching.
+ * These notes include both error notes and notes related to content & MMS creation mode.
+ *
+ * @aParam aShutDown Returns ETrue if launching can proceed
+ * EFalse if launching should be aborted immediatelly.
+ */
+ void ShowLaunchNotesL( TBool& aShutDown );
+
+ /**
+ * Sets an error resource id to be handled later
+ * (usually after LaunchViewL).
+ *
+ * @param aStoreId IN/OUT The correct id is stored here
+ * @param aNewId IN Error id
+ */
+ void SetErrorResource( TInt& aStoreId, TInt aNewId );
+
+ /**
+ * Determines error "priority"
+ */
+ TInt ErrorPriority( TInt aErrorId );
+
+ /**
+ * Checks if phone is in offline mode or not
+ *
+ * @return ETrue if phone is in offline mode
+ * Otherwise EFalse.
+ */
+ TBool IsPhoneOfflineL() const;
+
+ /**
+ * Checks whether there's enough disk space
+ * to save the message.
+ *
+ * @return ETrue if there is enough disk space.
+ * Otherwise EFalse.
+ */
+ TBool CanSaveMessageL() const;
+
+ /**
+ * Launches help application
+ */
+ void LaunchHelpL();
+
+ /**
+ * Gets help context
+ */
+ CArrayFix<TCoeHelpContext>* HelpContextL() const;
+
+ /**
+ * User selects a new template and launches smil editor
+ */
+ void NewTemplateL();
+
+ /**
+ * Opens smil editor for template message opened from drafts folder
+ */
+ void OpenTemplateL();
+
+ /**
+ * Called when user wants to play created presentation
+ * Starts creating SMIL DOM
+ */
+ void PlayPresentationL();
+
+ /**
+ * When the SMIL DOM creation is ready, this function is called by the callback funtion
+ * to start the SMILPlayer dialog.
+ */
+ void DoCompletePlayPresentationL();
+
+ /**
+ * Removes template from message.
+ */
+ void RemoveTemplateL();
+
+ /**
+ * Handles user change order command.
+ */
+ void DoUserChangeOrderL( TUniLayout aLayout );
+
+ /**
+ * Begins active scheduler loop
+ */
+ void BeginActiveWait( CUniEditorOperation* aOperation );
+
+ /**
+ * Stops active scheduler loop
+ */
+ void EndActiveWait();
+
+ /**
+ * Returns available objects as a bit mask
+ */
+ TUint32 ObjectsAvailable();
+
+ /**
+ * Handles resource change events.
+ */
+ void HandleResourceChangeL(TInt aType);
+
+ /**
+ * ParseFileCompleteL
+ * Call back function used to inform client of Parser when SMIL dom is ready for preview
+ */
+ void ParseFileCompleteL();
+
+ /**
+ * Accessor
+ * Get pointer to image control
+ *
+ * @return Pointer to image control or
+ * NULL if image control does not exist
+ */
+ inline CMsgImageControl* ImageCtrl() const;
+
+ /**
+ * Accessor
+ * To check whether To field is ON CURRENT SLIDE.
+ * Address handling should take place through CUniEditorHeader
+ *
+ * @return Pointer to image control or
+ * NULL if image control does not exist
+ */
+ inline CMsgAddressControl* ToCtrl() const;
+
+ /**
+ * Accessor
+ * To check whether Subject field is on ON CURRENT SLIDE
+ * Subject handling should take place through CUniEditorHeader
+ *
+ * @return Pointer to image control or
+ * NULL if image control does not exist
+ */
+ inline CMsgExpandableControl* SubjectCtrl() const;
+
+ /**
+ * Accessor
+ * Get pointer to body control
+ *
+ * @return Pointer to body control or
+ * NULL if body control does not exist
+ */
+ inline CMsgBodyControl* BodyCtrl() const;
+
+ /**
+ * Accessor
+ * Get pointer to address control rich text editor
+ *
+ * @return Pointer to address control editor or
+ * NULL if address control does not exist
+ */
+ inline CEikRichTextEditor* RecipientCtrlEditor(CUniBaseHeader::THeaderFields aField) const;
+
+ /**
+ * Accessor
+ * Get pointer to subject control rich text editor
+ *
+ * @return Pointer to subject control editor or
+ * NULL if subject control does not exist
+ */
+ inline CEikRichTextEditor* SubjectCtrlEditor() const;
+
+ /**
+ * Accessor
+ * Get pointer to body control rich text editor
+ *
+ * @return Pointer to body control editor or
+ * NULL if body control does not exist
+ */
+ inline CEikRichTextEditor* BodyCtrlEditor() const;
+
+ /**
+ * Accessor
+ * Get pointer to document instance
+ *
+ * @return Pointer to UniEditorDocument
+ */
+ inline CUniEditorDocument* Document() const;
+
+ /**
+ * Check if message header is empty
+ *
+ * @return ETrue, to field is empty,
+ * EFalse, to field has text
+ */
+ inline TBool IsHeaderEmpty() const;
+
+ /**
+ * Check if message body is empty
+ *
+ * @return ETrue, message body empty,
+ * EFalse, message body not empty
+ */
+ inline TBool IsBodyEmpty() const;
+
+ /**
+ * Accessor
+ * Get reference to file session
+ *
+ * @return Reference to file session
+ */
+ inline RFs& FsSession() const;
+
+ /**
+ * Implements AddHeaders command
+ */
+ void DoUserAddHeadersL();
+
+ /**
+ * Collects statistics about additional headers after user
+ * has closed the multiselection list.
+ * @param aIndexesOut list of (un)selected items. Values are TBool
+ * @param aVariation flags of variation
+ * @param aNewSelectionFlags OUT contains headers, which user selected
+ * @param aRemoveFlags OUT contains headers to be removed from UI
+ * @param aRemovewarningFlags OUT contains headers to be removed from UI,
+ * which contains data
+ * @param aAddFlags OUT contains headers to be added to the UI
+ *
+ * Every flag is a combination of EMmsFeatureSubject, EMmsFeatureCc
+ * and EMmsFeatureBcc of enum TMmsFeatures
+ */
+ void AddHeadersCollectStatisticsL( CArrayFix<TInt>& aIndexesOut,
+ TInt aVariation,
+ TInt& aNewSelectionFlags,
+ TInt& aRemoveFlags,
+ TInt& aRemoveWarningFlags,
+ TInt& aAddFlags) const;
+
+
+ /**
+ * Returns count of headers, which have flag set
+ * @param aFlags combination of flags of EMmsFeatureSubject, EMmsFeatureCc
+ * and EMmsFeatureBcc of enum TMmsFeatures
+ * @return count of headers
+ */
+ TInt AddHeadersCount( TInt aFlags ) const;
+
+ /**
+ * Set scroll positions of editor controls to the end of
+ * of the text (address controls and body text if before image)
+ * or beginning of body text, if body text is after media object.
+ * This function is usually called after inserting media has been successful.
+ */
+ void SetCursorPositionsForInsertL();
+
+ /**
+ * Add icon of priority to navi pane
+ */
+ void PriorityToNaviPane();
+
+ /**
+ * Removes text from the current page
+ */
+ void RemoveCurrentTextObjectL();
+
+ /**
+ * Checks body message type.
+ */
+ void CheckBodyForMessageTypeL();
+
+ /**
+ * Checks header message type.
+ */
+ void CheckHeaderForMessageTypeL();
+
+ /**
+ * Checks if the body content is SMS conformant
+ */
+ TBool IsBodySmsCompatibleL( TBool aInAutoMode = ETrue );
+
+ /**
+ * Set iSmsSize and EUnicodeMode
+ */
+ void CheckSmsSizeAndUnicodeL();
+
+ /**
+ * Checks if there are too many recipients and shows a note
+ * @return ETrue - if recipients OK otherwise EFalse
+ */
+ TBool CheckMaxRecipientsAndShowNoteL( TBool aSendCheck = EFalse );
+
+ /**
+ * Returns SMS plugin
+ */
+ inline CUniEditorPlugin* SmsPlugin();
+
+ /**
+ * Returns MMS plugin
+ */
+ inline CUniEditorPlugin* MmsPlugin();
+
+ /**
+ * Returns whether editor is fully launched or not.
+ */
+ inline TBool IsLaunched() const;
+
+ /**
+ * Creates a string from integer
+ * If size is less than 10 kilobytes -> string with one decimal
+ * If size is 0 or 10k or more -> integer string
+ *
+ * @since 3.1
+ * @param aSizeInBytes IN size to be converted to string
+ * in bytes
+ * @param aSize IN/OUT the size string
+ * @param aInteger OUT the integer part of the string
+ * @param aFragment OUT the decimal part of the string
+ */
+ void CreateMmsNaviSizeStringL( const TInt aSizeInBytes,
+ TDes& aSize,
+ TInt& aInteger,
+ TInt& aFragment );
+
+ /**
+ * Handles insert other file command from toolbar.
+ */
+ void DoToolbarInsertOtherL();
+
+ /**
+ * Shows list query
+ */
+ TBool ShowListQueryL( TInt aResourceID, TInt& aSelectedIndex ) const;
+
+ /**
+ * Hides popup note
+ */
+ void HidePopupNote();
+
+ /**
+ * Shows popup note
+ */
+ void ShowPopupNoteL( TBool aMms );
+
+ /**
+ * Plays focused item
+ */
+ void PlayFocusedItemL();
+
+ /**
+ * Checks the size of the sms body and shows notes
+ * If aSendCheck is ETrue, checks only if the body exceeds the max size
+ */
+ void CheckMaxSmsSizeAndShowNoteL( TBool aSendCheck = EFalse );
+
+ /**
+ * Sets or removes edwin control's maximum size
+ */
+ void SetOrRemoveMaxSizeInEdwin();
+
+ /**
+ * Checks the focused item and updates the middle softkey accordingly
+ */
+ void UpdateMiddleSoftkeyL();
+
+ /**
+ * Sets input mode to address fields
+ */
+ void SetInputModeToAddressFields( TInt aInputMode );
+
+ /**
+ * Handles user priority change command.
+ */
+ void DoEditMmsPriorityL();
+
+ /**
+ * Creates radio button array
+ */
+ CAknIconArray* RadioButtonArrayL();
+
+ /**
+ * Confirms SMS message sending in multiple parts
+ */
+ TBool ConfirmSmsSendInMultiplePartsL();
+
+ /**
+ * Sets title icons sizes.
+ */
+ void SetTitleIconsSizeL();
+
+ /**
+ * Tells if email addresses are accepted by the message
+ * For example locked sms + EmailOverSms or not-locked sms
+ */
+ TBool AcceptEmailAddresses();
+
+ /**
+ * Tells if the message is locked in sms mode
+ * (either by restricted reply or temporarily in sending options)
+ */
+ TBool IsHardcodedSms();
+
+ /**
+ * Resolves control id of the focused control after the launch.
+ */
+ TMsgControlId ResolveLaunchFocusedControlL();
+
+ /**
+ * Sets correct message type locking to MTM
+ */
+ void SetMessageTypeLockingL();
+
+ /**
+ * Activates input blocker properly.
+ *
+ * @param aActiveObjectToCancel Pointer to an active object that is called when
+ * input blocker is cancelled. Can be NULL.
+ */
+ void ActivateInputBlockerL( CActive* aActiveObjectToCancel );
+
+ /**
+ * Deactivates input blocker properly.
+ */
+ void DeactivateInputBlocker();
+
+ /**
+ * Updates toolbar items status to correct one.
+ */
+ void UpdateToolbarL();
+
+ /**
+ * Check whether message is locked to SMS mode and if
+ * it includes an attachment (i.e. vCard or vCal). Performs
+ * actions related to changes from in and out of this state.
+ */
+ void CheckLockedSmsWithAttaL();
+
+ /**
+ * Sets fixed toolbar dimmed.
+ */
+ void SetFixedToolbarDimmed();
+
+ /**
+ * Cleanup item for setting toolbar enabled.
+ */
+ static void EnableFixedToolbar( TAny* aAny );
+
+ /**
+ * Cleanup item for Updating fixed toolbar Dimmed.
+ */
+ static void UpdateFixedToolbar( TAny* aAny );
+ /**
+ * Cleanup item for.Disabling SendKey
+ */
+ static void DisableSendKey( TAny* aAny );
+
+
+
+ /**
+ * Creates fixed toolbar.
+ *
+ * @param aDimmed ETrue if all toolbar items are wanted to be set dimmed.
+ * EFalse otherwise.
+ */
+ void CreateFixedToolbarL( TBool aSetDimmed );
+
+ /**
+ * Sets extension button to dimmed/undimmed.
+ *
+ * @param aExtension Toolbar extension
+ * @param aButtonId Toolbar button id
+ * @param aDimmed ETrue/EFalse Dimmed/Undimmed.
+ */
+ void SetExtensionButtonDimmed( CAknToolbarExtension* aExtension, TInt aButtonId, TBool aDimmed );
+
+ /**
+ * Enables toolbar.
+ */
+ void DoEnableFixedToolbar();
+ /**
+ * Update toolbar.
+ */
+ void DoUpdateFixedToolbar();
+
+ /**
+ * Handles enter key processing.
+ */
+ TBool DoEnterKeyL();
+
+ /**
+ * Verifys and if valid to show SMS Size, then sends it to the PenInput server
+ */
+ void SmsMsgLenToPenInputL();
+
+ /**
+ * Verifys whether Updated Message Length is required to send to Pen Input or not
+ */
+ TBool UpdateMsgLenToPenInput();
+
+ /**
+ * Notification from central repository
+ */
+ void HandleNotifyInt( TUint32 aId, TInt aNewValue );
+
+ /**
+ * Shows the Popup note in ITUT, when message size exceeds or deceeds
+ * a certain limit or it changes from sms to mms and vice versa
+ */
+ void ShowDiscreetPopUpL(const TDesC& aMessage);
+
+ /**
+ * Is Inserted objects path are valid.
+ * All the media objects are availble in their respective paths.
+ *
+ * @return ETrue, if all the media objects are available
+ * otherwise EFalse.
+ */
+ TBool IsObjectsPathValidL() const;
+
+ private: // Enumerations
+
+ enum TUniEditorFlags
+ {
+ EUseEstimatedSmilSize = 0x0001,
+ ELaunchSuccessful = 0x0002,
+ EShowGuidedConf = 0x0004,
+ EEditorExiting = 0x0008,
+ ERunAppShutterAtExit = 0x0010,
+ EEditorClosing = 0x0020,
+ EInsertAddsSlide = 0x0040,
+ EMaxRecipientShown = 0x0080, // max recipient note already shown
+ EShowInfoPopups = 0x0100, // show "message type changed" notes
+ EMaxSmsSizeNoteShown = 0x0200, // max size of sms note is shown
+ ESubjectOkInSms = 0x0400, // if defined subject is ok to show also in sms auto mode
+ EHideSizeCounter = 0x0800, // hide size counters in navipane
+ ESmsCounterShownLast = 0x1000, // last time a counter was updated it was sms counter
+ EShowSmsSentInManyParts = 0x2000, // ask the query "message will be sent in x parts"
+ EDoNotUpdateTitlePane = 0x4000, // set while Objects view is open so the title pane remains ok if layout is changed
+ EShowSmsSizeNoteNextTime = 0x8000, // when max sms size reached -> show this note after next letter
+ EToolbarHidden = 0x10000,
+ ELockedSmsWithAtta = 0x20000,
+ EMsgEditInProgress = 0x40000,
+ ESmsSizeWarningNoteShown = 0x80000, // Korean req: 415-5434
+ EHideMessageTypeOption = 0x100000
+ };
+
+ private: // Data
+
+ TInt iDisplaySize; // Current msg size in navipane. Kb/Mb
+
+ CAknLocalScreenClearer* iScreenClearer;
+ CPeriodic* iIdle;
+
+ CUniSmilModel* iSmilModel; // Fetch pointer from document at launch
+ CUniClientMtm* iMtm; // Fetch pointer from document at launch
+
+ CMDXMLParser* iParser; // SMIL Parser fore presentation preview
+ CMDXMLDocument* iDom; // Dom created by parser for smil player
+
+ CAknInputBlock* iInputBlocker; // AknInputBlocker
+
+ CAknWaitDialog* iWaitDialog;
+ TInt iWaitResId;
+
+ TInt iOriginalSlide;
+ TInt iNextSlide;
+ TMsgControlId iNextFocus;
+ CAknTitlePane* iTitlePane;
+ HBufC* iTitleSms;
+ HBufC* iTitleMms;
+ TInt iSmsBodyLength;
+ TInt iSmsSubjectLength;
+ TInt iPrevSmsLength;
+
+ HBufC* iSmsLengthFormatBuffer;
+ HBufC* iMmsLengthFormatBuffer;
+
+ CGulIcon* iIconSms;
+ CGulIcon* iIconMms;
+
+ CAknInfoPopupNoteController* iPopupNote;
+ HBufC* iPopupChangedMmsBuffer;
+ HBufC* iPopupChangedSmsBuffer;
+
+ CRepository* iMuiuSettRepository;
+
+ TUint32 iEditorFlags;
+ TInt iSupportedFeatures;
+
+ CUniSlideLoader* iSlideLoader;
+
+ CUniEditorHeader* iHeader;
+ CUniEditorChangeSlideOperation* iChangeSlideOperation;
+ CUniEditorInsertOperation* iInsertOperation;
+ CUniEditorLaunchOperation* iLaunchOperation;
+ CUniEditorSaveOperation* iSaveOperation;
+ CUniEditorSendOperation* iSendOperation;
+ CUniEditorOperation* iActiveOperation;
+ CUniEditorVCardOperation* iVCardOperation;
+
+ CMsgMediaInfo* iInsertingMedia;
+ TMsgMediaType iInsertingType;
+
+ CActiveSchedulerWait iWait;
+
+ CAknNavigationControlContainer* iNaviPane;
+
+ CDocumentHandler* iDocHandler;
+ TInt iMskResId;
+
+ // Used to connect pointer down and up events to correct control. Not owned.
+ CMsgBaseControl* iFocusedControl;
+ CMsgBaseControl* iStoredBodyControl;
+
+ CAknToolbar* iFixedToolbar;
+
+ RPeninputServer iPeninputServer;
+ CCenRepNotifyHandler* iNotifyHandler;
+ CRepository* iInputTxtLangRepository;
+ TBool iMsgLenToVKB;
+
+ //Turkish SMS-PREQ2265 specific...
+ TInt iNumOfPDUs;
+ TInt iCharsLeft;
+ TBool iNLTFeatureSupport;
+ HBufC* iPrevBuffer;
+ TBool iSettingsChanged;
+
+ //Korean Req: 415-5434
+ HBufC* iPopupSmsSizeAboveLimitBuffer;
+ HBufC* iPopupSmsSizeBelowLimitBuffer;
+ TBool iFinalizeLaunchL;
+ // Own: For long tap detecting
+ CAknLongTapDetector* iLongTapDetector;
+
+ // For long tap handling
+ TBool iTapConsumed;
+ /**
+ * Contact image selection stylus popup menu
+ * Own.
+ */
+ CAknStylusPopUpMenu* iEmbeddedObjectStylusPopup;
+ // sendui+jepg optimization changes
+ TBool iOptimizedFlow;
+ TBool iSingleJpegImageProcessing;
+ };
+
+#include "UniEditorAppUi.inl"
+
+#endif // _UniEditorAPPUI_H
+
+// End of File
+