mobilemessaging/postcard/postcardsrc/PostcardDocument.cpp
changeset 0 72b543305e3a
--- /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