--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/unieditor/application/inc/UniEditorDocument.h Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,614 @@
+/*
+* 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: CUniDocument class definition.
+*
+*/
+
+
+
+#ifndef __UNIEDITORDOCUMENT_H
+#define __UNIEDITORDOCUMENT_H
+
+// INCLUDES
+#include <msvapi.h> // CMsvEntry
+#include <MsgEditorDocument.h> // CMsgEditorDocument
+#include <mmsvattachmentmanager.h>
+#include <mmsvattachmentmanagersync.h>
+#include <gsmuelem.h>
+#include <eikenv.h>
+
+#include "UniEditorConsts.h"
+#include "UniMtmUi.h" // IsUpload()
+#include "UniClientMtm.h"
+#include "unidatamodel.h"
+
+// CONSTANTS
+
+// MACROS
+
+// DATA TYPES
+
+enum TUniMessageType
+ {
+ EUniReadOnly = 0,
+ EUniNewMessage,
+ EUniOpenFromDraft,
+ EUniReply,
+ EUniForward,
+ EUniSendUi
+ };
+
+// Current state where the message is.
+enum TUniState
+ {
+ EUniSms = 1,
+ EUniMms = 2
+ };
+
+//The order of the save types is significant!
+//Don't mess!
+enum TUniSaveType
+ {
+ ERegularSave = 0, // Page change
+ EClosingSave, // User save to draft
+ ESendingSave // Before send ie. text conversion is made (paragraph sep -> linefeed)
+ };
+
+// FUNCTION PROTOTYPES
+
+// FORWARD DECLARATIONS
+
+class CUniClientMtm;
+class CUniMtmUi;
+class CUniEditorPlugin;
+class CUniDataModel;
+class CMsvMimeHeaders;
+class CMsvAttachment;
+class CCnvCharacterSetConverter;
+class CUniEditorObjectsModelObserver;
+
+// CLASS DECLARATION
+
+/**
+* CUniEditorDocument. The document is part of the Symbian OS application framework.
+*
+* @since 3.2
+*/
+class CUniEditorDocument : public CMsgEditorDocument
+ {
+ public: // Constructors and destructor
+
+ /**
+ * C++ constructor
+ *
+ * @param aApp Reference to application instance
+ */
+ CUniEditorDocument( CEikApplication& aApp, CCoeEnv& aCoeEnv );
+
+ /**
+ * Factory function to create this object
+ *
+ * @param aApp Reference to application instance
+ */
+ static CUniEditorDocument* NewL( CEikApplication& aApp,
+ CCoeEnv& aCoeEnv );
+
+ /**
+ * Destructor.
+ */
+ virtual ~CUniEditorDocument();
+
+ public:
+
+ /**
+ * MessageSize
+ * Calculates message size according to TS 23.140 v5.5.0.
+ * @param aSmilEstimate if ETrue, uses estimated SMIL size (from CUniSmilModel)
+ * if EFalse, uses SMIL file size
+ * @return size in bytes
+ */
+ TInt MessageSize( TBool aSmilEstimate = EFalse );
+
+ /**
+ * Safely deletes atta from given message (from store & smilmodel)
+ * This should be called only from Uni Objects view.
+ *
+ * @param aSlideNum
+ * @param aObject
+ * @param aAttachmentObject
+ */
+ void DeleteAttachmentL( TInt aSlideNum,
+ CUniObject* aObject,
+ TBool aAttachmentObject );
+
+ /**
+ * Set whether message is SendAs, Forward, Reply or Open from Draft.
+ * Function determines it from launchflags & entry flags.
+ */
+ void SetMessageType();
+
+ /**
+ * Launches plugings if they are not launched yet
+ */
+ void LaunchPlugings();
+
+ /**
+ * Returns the overall state of the message
+ */
+ TUniState UniState() const;
+
+ /**
+ * Creates correct character converter.
+ */
+ void CreateCharConverterL( TUniMessageCharSetSupport aMode );
+
+ /**
+ * Count of the SD objects in the message
+ */
+ TInt SuperDistributableObjectCount() const;
+
+ /**
+ * From CMsgEditorDocument
+ * Returns default folder for new messages.
+ * @return ID of the Drafts folder.
+ */
+ TMsvId DefaultMsgFolder() const;
+
+ /**
+ * From CMsgEditorDocument
+ * Returns default message service used by application
+ * @return TMsvId KMsvLocalServiceIndexEntryId.
+ */
+ TMsvId DefaultMsgService() const;
+
+ /**
+ * From CMsgEditorDocument
+ * Creates new message.
+ * A new message of type KUniMtmType is created
+ * in a destination folder.
+ * Calls CreateNewL(TMsvId aServiceType, TMsvId aDestination,
+ * TInt aTypeList).
+ * @param aService service used for sending message
+ * @param aDestFolder folder in which message will be saved eg.
+ * KMsvDraftEntryIdValue
+ * @return New message operation.
+ */
+ TMsvId CreateNewL(TMsvId aService, TMsvId aDestFolder);
+
+ /**
+ * From CMsgEditorDocument
+ * Called after entry is changed by BaseEditor SetEntry Function.
+ * From MsgEditorDocument
+ */
+ void EntryChangedL();
+
+ /**
+ * From CMsgEditorDocument
+ * Checks the mtm type of the message.
+ * If the mtm type is not UniMtm, does the specific msg type to uni mode conversion
+ */
+ TMsvId PrepareContextL( TMsvId aContext );
+
+ /**
+ * From CMsgEditorDocument
+ * In case of a reply or forward, calls DoReplyForwardL to create entry
+ */
+ TMsvId ChangeContextL( const TEditorParameters& aParameters );
+
+ /**
+ * From CMsgEditorDocument
+ * Called by ChangeContextL to create the plugin and do the conversion
+ */
+ TMsvId DoReplyForwardL( TBool aReply,
+ TMsvId aSrc,
+ TMsvId aDest,
+ TMsvPartList aParts );
+
+ /*
+ * From CMsgEditorDocument
+ * Accessor (Overrides baseeditor)
+ * Returns CUniClientMtm reference correctly casted from CBaseMtm
+ * @param None
+ * @return Reference to documents CUniClientMtm
+ */
+ CUniClientMtm& Mtm();
+
+ /*
+ * From CMsgEditorDocument
+ * Accessor (Overrides baseeditor)
+ * Returns CUniMtmUi reference correctly casted from CBaseMtmUi
+ * @param None
+ * @return Reference to documents CUniMtmUi
+ */
+ CUniMtmUi& MtmUiL();
+
+ /**
+ * From MMsgAttachmentModelObserver
+ */
+ RFile GetAttachmentFileL( TMsvAttachmentId aId );
+
+ /**
+ * Returns number of non conformant attachments at this moment.
+ * The result may differ compared to the load time, if images
+ * are processed and inserted images conforms now.
+ * @return count of non-conformant objects
+ */
+ TInt UpdatedNonConformantCount() const;
+
+ /**
+ * @return the max size of the image
+ */
+ TSize MaxImageSize() const;
+
+ /**
+ * @return the alternate encoding type based on input language id.
+ * Turkish SMS-PREQ2265 specific
+ */
+ TSmsEncoding GetLanguageSpecificAltEncodingType(TInt aLangId);
+
+ public: // inlines
+
+ /**
+ * Current slide of the model where document is indexing.
+ * @return Index of the current slide.
+ */
+ inline TInt CurrentSlide();
+
+ /**
+ * Sets current slide of the message.
+ * @param aSlideNum - Index of the slide.
+ */
+ inline void SetCurrentSlide( TInt aSlideNum );
+
+ /**
+ * Saved
+ * Accessor
+ * Queries whether message is saved.
+ * @param None
+ * @return ETrue, User has already saved message (in this or some previous session)
+ * ie InPreparation flag is not set
+ * EFalse, Message has not been saved by user yet.
+ */
+ inline TBool Saved() const;
+
+ /**
+ * Messagetype accessor
+ *
+ * @return Message type
+ */
+ inline TUniMessageType MessageType() const;
+
+ /*
+ * Mutator
+ * Set the body modified flag.
+ *
+ * @param aModified
+ */
+ inline void SetBodyModified( TBool aModified );
+
+ /*
+ * Accessor
+ * Get the body modified flag.
+ *
+ * @return iBodyModified flag
+ */
+ inline TBool BodyModified() const;
+
+ /*
+ * Mutator
+ * Set the header modified flag.
+ * @param aModified
+ */
+ inline void SetHeaderModified( TBool aModified );
+
+ /*
+ * Accessor
+ * Get the header modified flag.
+ *
+ * @return iHeaderModified flag
+ */
+ inline TBool HeaderModified() const;
+
+ /*
+ * Accessor
+ *
+ * @return ETrue if either iBodyModified or iHeaderModified
+ * flag is ETrue.
+ */
+ inline TBool Modified() const;
+
+ /*
+ * Accessor
+ *
+ * @return creation mode
+ */
+ inline TInt CreationMode() const;
+
+ /*
+ * Mutator. Use this to override the current
+ * creation mode in MMS Settings.
+ *
+ * Notice: This does not automatically update the
+ * creation mode of "MsgMediaResolver". It
+ * should be done explicitly.
+ *
+ * @param creation mode
+ */
+ inline void SetCreationMode( TInt aCreationMode );
+
+ /*
+ * Accessor
+ *
+ * @return ETrue if creation mode is user changeable
+ */
+ inline TBool CreationModeUserChangeable() const;
+
+ /*
+ * Accessor
+ *
+ * @return size of "addresses"
+ */
+ inline TInt AddressSize() const;
+
+ /*
+ * Mutator.
+ *
+ * @param size of "addresses"
+ */
+ inline void SetAddressSize( TInt aAddressSize );
+
+ /*
+ * Accessor
+ *
+ * @return size of "subject"
+ */
+ inline TInt SubjectSize() const;
+
+ /*
+ * Mutator.
+ *
+ * @param size of "subject"
+ */
+ inline void SetSubjectSize( TInt aSubjectSize );
+
+ /*
+ * Accessor
+ *
+ * @return maximum message size in bytes
+ */
+ inline TUint MaxMessageSize() const;
+
+ /**
+ */
+ inline TInt NonConformantCount() const;
+
+ /**
+ * Returns previous save type
+ */
+ inline TUniSaveType PrevSaveType() const;
+
+ /**
+ * Sets previous save type
+ */
+ inline void SetPrevSaveType( TUniSaveType aPrevSaveType );
+
+ /**
+ * Returns/sets the state of the message body (body + subject)
+ */
+ inline TUniState UniBodyState() const;
+ inline void SetBodyUniState( TUniState aState );
+
+ /**
+ * Returns/sets the state of the header part (recipient fields)
+ */
+ inline TUniState UniHeaderState() const;
+ inline void SetHeaderUniState( TUniState aState );
+
+ /**
+ * Returns pointer to message plugins
+ */
+ inline CUniEditorPlugin* SmsPlugin();
+ inline CUniEditorPlugin* MmsPlugin();
+
+ /**
+ * Pointer to datamodel
+ */
+ inline CUniDataModel* DataModel();
+
+ /**
+ * Max number of MMS recipients
+ */
+ inline TInt MaxMmsRecipients() const;
+
+ /**
+ * Max number of SMS recipients
+ */
+ inline TInt MaxSmsRecipients() const;
+
+ /**
+ * Max number of SMS sub messages
+ * After this number the message will be changed to MMS
+ */
+ inline TInt MaxSmsParts() const;
+
+ /**
+ * Abs. max number of SMS sub messages even in hardcoded mode
+ */
+ inline TInt AbsoluteMaxSmsParts() const;
+
+ /**
+ * Is Email Over Sms feature supported
+ */
+ inline TBool EmailOverSmsSupported() const;
+
+ /**
+ * Character converter functions
+ */
+ inline CCnvCharacterSetConverter* CharConverter();
+
+ /**
+ * Character set support.
+ */
+ inline TUniMessageCharSetSupport CharSetSupport();
+
+ /**
+ * Returns the CSP bits of the SIM card
+ */
+ inline TInt CSPBits() const;
+
+ /**
+ * Returns Eikon environment pointer.
+ */
+ inline CEikonEnv* EikonEnv();
+
+ /**
+ * Abs. max number of characters in SMS message.
+ * If set will overdrive maximum number of SMS sub messages.
+ *
+ * @return -1 if not specified. Otherwise maximum character limit.
+ */
+ inline TInt AbsoluteMaxSmsCharacters() const;
+
+ /**
+ * Set unicode character mode enabled or disabled.
+ *
+ * @param aEnabled Enabled if ETrue. Otherwise disabled.
+ */
+ inline void SetUnicodeCharacterMode( TBool aEnabled );
+
+ /**
+ * Return whether unicode character mode is enabled or not.
+ *
+ * @return ETrue if enabled. Otherwise EFalse.
+ */
+ inline TBool UnicodeCharacterMode() const;
+
+ /**
+ * Returns the currently applicable character limits for
+ * single SMS part and for concatenated SMS parts.
+ *
+ * @param aSinglePartLength On return contains the character limit
+ * for single SMS part
+ * @param aConcatenatedPartLength On return contains the character limit of
+ * single part on multiparted SMS message.
+ */
+ void SmsCharacterLimits( TInt& aSinglePartLength, TInt& aConcatenatedPartLength ) const;
+
+ /**
+ * Returns current alternate encoding type
+ * Turkish SMS-PREQ2265 specific
+ */
+ inline TSmsEncoding AlternativeEncodingType();
+
+ /**
+ * Sets the current alternate encoding type to input value
+ * Turkish SMS-PREQ2265 specific
+ */
+ inline void SetAlternativeEncodingType(TSmsEncoding aAlternateEncoding);
+
+ /**
+ * Returns number of bytes to show warning notification when SMS size sweeps the boundary value
+ * Korean operator req : 415-5434
+ */
+ inline TInt SmsSizeWarningBytes();
+
+ /* Set the Attachemnt flag ELaunchFromCvAttachment */
+ inline void SetLaunchFromCvAttachment(TBool);
+
+ /* Verify is the flag ELaunchFromCvAttachment is set */
+ inline TBool IsLaunchFromCvAttachment() ;
+ private:
+
+ /**
+ * ConstructL
+ * 2nd phase constructor.
+ */
+ void ConstructL();
+
+ /**
+ * Creates a new UniAppUi
+ *
+ * @return a pointer to CUniAppUi
+ */
+ CEikAppUi* CreateAppUiL();
+
+ /**
+ * From MsgEditorDocument. See MsgEditorDocument.h
+ */
+ CMsgAttachmentModel* CreateNewAttachmentModelL( TBool aReadOnly );
+
+ private: // data
+
+ enum TUniDocumentFlags
+ {
+ EUniDocumentHeaderModified = 0x1,
+ EUniDocumentBodyModified = 0x2,
+ EUniDocumentCreationModeUserChangeable = 0x4,
+ EUniDocumentEMailOverSms = 0x8,
+ EUniDocumentRestrictedReplySms = 0x10,
+ EUniDocumentRestrictedReplyMms = 0x20,
+ EUniDocumentCSPBitsSupported = 0x40,
+ EUniDocumentUnicodeCharacterMode = 0x80,
+ ELaunchFromCvAttachment = 0x100
+ };
+
+ CEikonEnv* iEnvironment;
+ RFs& iFs;
+ TUniMessageType iMessageType;
+
+ CUniDataModel* iDataModel;
+ CCnvCharacterSetConverter* iCharConverter;
+
+ TInt iCurrentSlide;
+ TUint32 iMaxMessageSize;
+ TInt iAddressSize;
+ TInt iSubjectSize;
+ TInt iMaxMmsRecipients;
+ TInt iMaxSmsRecipients;
+ TInt iMaxConcatenatedSms;
+ TInt iAbsMaxConcatenatedSms;
+ TInt iCreationMode;
+ TInt iNonConfCount;
+ TInt iMaxImageWidth;
+ TInt iMaxImageHeight;
+
+ TInt iSupportedFeatures;
+ TUniSaveType iPrevSaveType;
+ TUniState iBodyState;
+ TUniState iHeaderState;
+ TInt iFlags;
+ TInt iCSPBits;
+ TUniMessageCharSetSupport iCharSetSupport;
+
+ CUniEditorObjectsModelObserver* iObjectObserver;
+
+ CUniEditorPlugin* iSmsPlugin;
+ CUniEditorPlugin* iMmsPlugin;
+
+ /** Maximum amount of unicode characters that can be send with SMS. */
+ TInt iAbsMaxSmsCharacters;
+ TInt iCharSetMode;
+
+ /** Turkish SMS-PREQ2265 specific */
+ TSmsEncoding iAlternativeEncodingType;
+
+ /** Sms size limit to show warning notifications: Korean req:415-5434 */
+ TInt iSmsSizeWarningBytes;
+};
+
+#include "UniEditorDocument.inl"
+
+#endif // __UNIDOCUMENT_H
+
+// End of file