--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/mobilemessaging/postcard/postcardsrc/PostcardDocument.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,354 @@
+/*
+* 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:
+* Provides CPostcardDocument class methods.
+*
+*/
+
+
+
+
+// ========== INCLUDE FILES ================================
+
+#include <eikenv.h>
+#include <eikdoc.h>
+
+#include <msvstd.h> // TMsvEntry
+#include <msvapi.h>
+#include <msvuids.h> // Msgs Uids
+#include <mtclbase.h> // CBaseMtm
+
+#include <bautils.h>
+
+#include <mmsclient.h> // Client Mtm API
+#include <MuiuMsvUiServiceUtilities.h> //Disk space check
+#include <MsgAttachmentInfo.h>
+#include <mmsmsventry.h>
+
+ #include <centralrepository.h> // link against centralrepository.lib
+ #include <MmsEngineInternalCRKeys.h> // for Central Repository keys
+
+#include <mtmuibas.h>
+
+// Features
+#include <featmgr.h>
+#include <bldvariant.hrh>
+#include <messagingvariant.hrh>
+
+#include <MsgMediaResolver.h>
+#include <msgtextutils.h>
+#include <MsgMimeTypes.h>
+
+#include <MuiuMsgEditorLauncher.h>
+
+#include "PostcardDocument.h"
+#include "PostcardAppUi.h"
+
+const TInt KPostcardIndexEntryExtra = 2000; // space reserved for the index entry
+const TInt KMaxPostcardWidth = 1600;
+const TInt KMaxPostcardHeight = 1200;
+
+// ---------------------------------------------------------
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// ---------------------------------------------------------
+//
+CPostcardDocument::CPostcardDocument( CEikApplication& aApp ) :
+ CMsgEditorDocument( aApp ),
+ iMsgChanged( 0 ),
+ iMsgType( EPostcardSent ),
+ iMaxMessageSize( 300 )
+ {
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::CreateAppUiL
+// ---------------------------------------------------------
+//
+CEikAppUi* CPostcardDocument::CreateAppUiL()
+ {
+ CEikAppUi* appui = new ( ELeave ) CPostcardAppUi();
+ return appui;
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::ConstructL
+// ---------------------------------------------------------
+//
+void CPostcardDocument::ConstructL()
+ {
+ CMsgEditorDocument::ConstructL();
+
+ CRepository* repository = CRepository::NewL( KCRUidMmsEngine );
+ TInt maxSendSize = 0;
+ // value is returned as bytes now
+ TInt err = repository->Get( KMmsEngineMaximumSendSize, maxSendSize );
+ if ( !err )
+ {
+ iMaxMessageSize = maxSendSize;
+ }
+ delete repository;
+
+ PrepareMtmL( KUidMsgTypeMultimedia );
+ }
+
+// ----------------------------------------------------
+// CPostcardDocument::NewL
+// ----------------------------------------------------
+CPostcardDocument* CPostcardDocument::NewL(CEikApplication& aApp)
+ {
+ CPostcardDocument* self = new ( ELeave ) CPostcardDocument( aApp );
+ CleanupStack::PushL( self );
+ self->ConstructL();
+ CleanupStack::Pop( self );
+ return self;
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::~CPostcardDocument
+// ---------------------------------------------------------
+CPostcardDocument::~CPostcardDocument()
+ {
+ delete iMediaResolver;
+ delete iTextUtils;
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::DefaultMsgFolder
+// ---------------------------------------------------------
+TMsvId CPostcardDocument::DefaultMsgFolder() const
+ {
+ return KMsvDraftEntryIdValue;
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::DefaultMsgService
+// ---------------------------------------------------------
+TMsvId CPostcardDocument::DefaultMsgService() const
+ {
+ return KMsvLocalServiceIndexEntryId;
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::CreateNewL
+// ---------------------------------------------------------
+TMsvId CPostcardDocument::CreateNewL( TMsvId /* aServiceId */, TMsvId aDestFolder )
+ {
+ // Can only create to draft
+ if ( aDestFolder != KMsvDraftEntryIdValue )
+ {
+ User::Leave( KErrNotSupported );
+ }
+
+ // Don't allow creation if will go under CL
+ if ( MsvUiServiceUtilities::DiskSpaceBelowCriticalLevelL(
+ Session(),
+ KPostcardIndexEntryExtra ) )
+ {
+ User::Leave( KErrDiskFull );
+ }
+
+ CMmsClientMtm& clientMtm = Mtm();
+
+ // CREATE TO aDestFolder (DRAFT)
+ CMsvOperation* createOperation = NULL;
+ CMsvOperationWait* wait = CMsvOperationWait::NewLC();
+ wait->Start();
+ createOperation = clientMtm.CreateNewEntryL( aDestFolder, wait->iStatus );
+ CleanupStack::PushL( createOperation );
+ CActiveScheduler::Start();
+
+ if ( wait->iStatus.Int() != KErrNone )
+ {
+ User::Leave( wait->iStatus.Int() );
+ }
+
+ // Get the message id
+ TPckgBuf<TMsvId> pkg;
+ pkg.Copy( createOperation->ProgressL() );
+ TMsvId progress = 0;
+ progress = pkg();
+ CleanupStack::PopAndDestroy( 2, wait ); // wait, createOperation
+
+ return progress;
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::Mtm
+// ---------------------------------------------------------
+CMmsClientMtm& CPostcardDocument::Mtm()
+ {
+ return static_cast <CMmsClientMtm&> ( CMsgEditorDocument::Mtm() );
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::MtmUi
+// ---------------------------------------------------------
+CBaseMtmUi& CPostcardDocument::MtmUi()
+ {
+ return CMsgEditorDocument::MtmUi();
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::EntryChangedL
+// Intentionally empty implementation.
+// ---------------------------------------------------------
+void CPostcardDocument::EntryChangedL()
+ {
+ }
+
+// ---------------------------------------------------------
+// CPostcardDocument::InitializeL
+// ---------------------------------------------------------
+void CPostcardDocument::InitializeL( RFs& aFs )
+ {
+ iFs = aFs;
+
+ iMediaResolver = CMsgMediaResolver::NewL();
+ iMediaResolver->SetCharacterSetRecognition( iMsgType == EPostcardSendAs );
+
+ iTextUtils = CMsgTextUtils::NewL( iFs );
+ }
+
+// ----------------------------------------------------
+// CMmsEditorDocument::SetMessageType
+// ----------------------------------------------------
+void CPostcardDocument::SetMessageType()
+ {
+ const TInt flags = LaunchFlags();
+ TMmsMsvEntry tEntry = static_cast<TMmsMsvEntry>( Entry() );
+
+ if ( tEntry.Parent( ) == KMsvSentEntryId )
+ {
+ iMsgType = EPostcardSent;
+ return;
+ }
+
+ if ( flags & EMsgCreateNewMessage )
+ {
+ iMsgType = EPostcardNew;
+ return;
+ }
+ else if ( flags & EMsgForwardMessage )
+ {
+ iMsgType = EPostcardForward;
+ return;
+ }
+ else if ( flags & EMsgCreateDuplicate )
+ {
+ iMsgType = EPostcardEdit;
+ return;
+ }
+ else if ( flags & EMsgEditNewMessage )
+ {
+ iMsgType = EPostcardSendAs;
+ return;
+ }
+
+ // Either sent or sendas or open from draft
+ if ( tEntry.ReadOnly( ) )
+ {
+ iMsgType = EPostcardSent;
+ }
+ else
+ {
+ if( tEntry.EditorOriented( ) )
+ {
+ iMsgType = EPostcardDraft;
+ }
+ else
+ {
+ iMsgType = EPostcardSendAs;
+ }
+ }
+ }
+
+// ----------------------------------------------------
+// SetChanged
+// ----------------------------------------------------
+void CPostcardDocument::SetChanged( TPostcardPart aPart )
+ {
+ iMsgChanged |= aPart;
+ }
+
+// ----------------------------------------------------
+// Changed
+// ----------------------------------------------------
+TBool CPostcardDocument::Changed( TPostcardPart aPart ) const
+ {
+ return iMsgChanged & aPart;
+ }
+
+// ----------------------------------------------------
+// Modified
+// ----------------------------------------------------
+TBool CPostcardDocument::Modified( ) const
+ {
+ return iMsgChanged;
+ }
+
+// ----------------------------------------------------
+// MaxMessageSize
+// ----------------------------------------------------
+TInt CPostcardDocument::MaxMessageSize( ) const
+ {
+ return iMaxMessageSize;
+ }
+
+// ----------------------------------------------------
+// MaxImageSize
+// ----------------------------------------------------
+TInt CPostcardDocument::MaxImageSize( ) const
+ {
+ return iMaxMessageSize - KPostcardAddressGreetingOverhead;
+ }
+
+// ---------------------------------------------------------
+// AppFullName
+// ---------------------------------------------------------
+TFileName CPostcardDocument::AppFullName( )
+ {
+ return Application( )->AppFullName( );
+ }
+
+// ---------------------------------------------------------
+// IsImage
+// ---------------------------------------------------------
+TBool CPostcardDocument::IsImage( const TDataType& aMimeType )
+ {
+ if ( aMimeType.Des8( ).CompareF( KMsgMimeImageJpeg ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( aMimeType.Des8( ).CompareF( KMsgMimeImageGif ) == 0 )
+ {
+ return ETrue;
+ }
+ else if ( aMimeType.Des8( ).CompareF( KMsgMimeImagePng ) == 0 )
+ {
+ return ETrue;
+ }
+ return EFalse;
+ }
+
+// ---------------------------------------------------------
+// MaxImageDimensions
+// ---------------------------------------------------------
+TSize CPostcardDocument::MaxImageDimensions( )
+ {
+ return TSize( KMaxPostcardWidth, KMaxPostcardHeight );
+ }
+
+
+// End of File