email/imum/Mtms/Src/SmtpMtmUiData.cpp
branchRCL_3
changeset 60 7fdbb852d323
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/SmtpMtmUiData.cpp	Wed Sep 01 12:31:54 2010 +0100
@@ -0,0 +1,413 @@
+/*
+* Copyright (c) 2006 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: 
+*       SMTP MTM Ui data layer base API
+*
+*/
+
+// INCLUDE FILES
+#include <coemain.h>    // ccoeenv
+#include <eikon.rsg>
+
+// Messaging includes
+#include <mtclbase.h>
+#include <mtmuidef.hrh>
+#include <smtcmtm.h>// ksmtcmaxtextmessagesize, kuidmsgtypesmtp
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mtmdef.hrh> 
+#else
+#include <mtmdef.hrh>
+#include <mtmuidsdef.hrh>
+#endif
+#include <MtmExtendedCapabilities.hrh>
+
+// Specific includes
+#include "SmtpMtmUiData.h"
+#include "ImumPanic.h"
+#include <muiu.mbg>
+#include <imum.rsg>
+#include "EmailEditorViewerUids.h"
+
+#include <AknsUtils.h>
+#include <AknsConstants.h>//skinned icon ids
+#include <data_caging_path_literals.hrh>
+#include <featmgr.h>
+
+// CONSTANTS
+const TInt KImumSmtpBitmapIndex = 0; // only one bitmap for create email
+const TInt KSmtpMtmUdNumberOfZoomStates =       2; // second one is mask!
+_LIT(KSmtpMtmUdResourceFile, "IMUM");
+// Correct path is added to literal when it is used.
+_LIT(KSmtpMtmUdBitmapFile, "z:MUIU.MBM");
+
+
+// ==================== LOCAL FUNCTIONS ====================
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ----------------------------------------------------------------------------
+//NewSMTIMtmUiDataLayerL
+// ----------------------------------------------------------------------------
+EXPORT_C CBaseMtmUiData* NewSMTIMtmUiDataLayerL(CRegisteredMtmDll& aRegisteredDll)
+    {
+    return CSmtpMtmUiData::NewL(aRegisteredDll);
+    }
+
+
+// ----------------------------------------------------------------------------
+//NewL
+// ----------------------------------------------------------------------------
+CSmtpMtmUiData* CSmtpMtmUiData::NewL(CRegisteredMtmDll& aRegisteredDll)
+    {
+    CSmtpMtmUiData* self=new(ELeave) CSmtpMtmUiData(aRegisteredDll);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// ~CSmtpMtmUiData
+// ----------------------------------------------------------------------------
+CSmtpMtmUiData::~CSmtpMtmUiData()
+    {
+    }
+
+// ----------------------------------------------------------------------------
+// OperationSupportedL
+// ----------------------------------------------------------------------------
+TInt CSmtpMtmUiData::OperationSupportedL(TInt aOperationId, const TMsvEntry& aContext) const
+    {
+    TInt rid=R_EIK_TBUF_NOT_AVAILABLE;
+    if (CheckEntry(aContext))
+        {
+        if (aContext.iType.iUid==KUidMsvMessageEntryValue)
+            {
+            switch (aOperationId)
+                {
+            case KMtmUiFunctionSendAs:
+            case KMtmUiFunctionMessageInfo:
+                rid=0; // Operation is supported
+                break;
+            default:
+                break;
+                }
+            }
+        }
+    return rid;
+    }
+
+// ----------------------------------------------------------------------------
+// QueryCapability
+// ----------------------------------------------------------------------------
+TInt CSmtpMtmUiData::QueryCapability(TUid aCapability, TInt& aResponse) const
+    {
+    switch (aCapability.iUid)
+        {
+        // --- Supported valued capabilities ---
+        case KUidMtmQueryMaxBodySizeValue:
+            aResponse=KMaxTInt;
+            break;
+        case KUidMtmQueryMaxTotalMsgSizeValue:
+            aResponse=KMaxTInt;
+            break;
+        case KUidMsvMtmQueryEditorUidValue:
+            aResponse=KUidMsgInternetMailEditorAppValue;
+            break;
+        case KUidMsvMtmQueryViewerUidValue:
+            aResponse=KUidMsgInternetMailViewerAppValue;
+            break;
+        case KUidMtmQuerySupportedBodyValue:
+            aResponse = KMtm7BitBody | KMtm8BitBody | KMtm16BitBody;
+            break;
+    
+        //
+        // --- Support depends on variation ---
+        case KUidMsvMtmQuerySupportEditor:
+            aResponse = ETrue;
+            break;
+        // --- Supported non-valued capabilities ---
+		case KUidMtmQueryCanCreateNewMsgValue:
+        case KUidMtmQuerySupportAttachmentsValue:
+        case KUidMtmQueryCanSendMsgValue:
+        case KUidMsvMtmQueryMessageInfo:
+                break;
+        default:
+            return KErrNotSupported;
+        };
+    return KErrNone;
+    }
+
+
+#ifdef _DEBUG
+const CBaseMtmUiData::CBitmapArray& CSmtpMtmUiData::ContextIcon(const TMsvEntry& aContext,TInt /*aStateFlags*/) const
+#else
+const CBaseMtmUiData::CBitmapArray& CSmtpMtmUiData::ContextIcon(const TMsvEntry& /*aContext*/,TInt /*aStateFlags*/) const
+#endif
+    {
+    __ASSERT_DEBUG(CheckEntry(aContext), User::Panic(KImumMtmUiPanic, ESmtpMtmUdNoIconAvailable));
+    __ASSERT_DEBUG(aContext.iType!=KUidMsvAttachmentEntry, User::Panic(KImumMtmUiPanic, ESmtpMtmUdNoIconForAttachment));
+
+    return *iIconArrays->At( KImumSmtpBitmapIndex ); // smtp has only one icon
+    }
+
+// ----------------------------------------------------------------------------
+// CSmtpMtmUiData
+// ----------------------------------------------------------------------------
+CSmtpMtmUiData::CSmtpMtmUiData(CRegisteredMtmDll& aRegisteredDll)
+    :       CBaseMtmUiData(aRegisteredDll)
+    {
+    __ASSERT_DEBUG(aRegisteredDll.MtmTypeUid()==KUidMsgTypeSMTP, User::Panic(KImumMtmUiPanic, ESmtpMtmUdWrongMtmType));
+    }
+
+// ----------------------------------------------------------------------------
+// PopulateArraysL
+// ----------------------------------------------------------------------------
+void CSmtpMtmUiData::PopulateArraysL()
+    {
+    FeatureManager::InitializeLibL();
+    iFFEmailVariation = 
+        FeatureManager::FeatureSupported( KFeatureIdFfEmailFramework );
+    FeatureManager::UnInitializeLib();
+
+    // --- Populate function array ---
+    ReadFunctionsFromResourceFileL( iFFEmailVariation ?
+        R_SMTPUD_FUNCTION_ARRAY_FFEMAIL : R_SMTPUD_FUNCTION_ARRAY );
+
+    //
+    // --- Populate bitmap array ---
+    CreateSkinnedBitmapsL( KSmtpMtmUdNumberOfZoomStates );
+    }
+
+// ----------------------------------------------------------------------------
+// GetResourceFileName
+// ----------------------------------------------------------------------------
+void CSmtpMtmUiData::GetResourceFileName(TFileName& aFileName) const
+    {
+    aFileName=KSmtpMtmUdResourceFile;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCreateEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanCreateEntryL(const TMsvEntry& aParent, TMsvEntry& aNewEntry, TInt& aReasonResourceId) const
+    {
+    if (CheckEntry(aNewEntry))
+        {
+        aReasonResourceId=0;
+        //
+        // --- Can create services if they are off root ---
+        if (aNewEntry.iType.iUid == KUidMsvServiceEntryValue)
+            return (aParent.Id() == KMsvRootIndexEntryIdValue);
+        //
+        // --- Can create messages in local folders ---
+        if (aNewEntry.iType.iUid == KUidMsvMessageEntryValue)
+            return (aParent.iMtm.iUid == KMsvLocalServiceIndexEntryIdValue);
+        }
+    //
+    // --- Can't create other types ---
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanOpenEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanOpenEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    // not used, just return EFalse
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCloseEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanCloseEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanViewEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanViewEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanEditEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanEditEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanDeleteServiceL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanDeleteServiceL(const TMsvEntry& /*aService*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanDeleteFromEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanDeleteFromEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCopyMoveToEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanCopyMoveToEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCopyMoveFromEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanCopyMoveFromEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanReplyToEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanReplyToEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanForwardEntryL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanForwardEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCancelL
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CanCancelL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    aReasonResourceId = R_EIK_TBUF_NOT_AVAILABLE;
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// StatusTextL
+// ----------------------------------------------------------------------------
+HBufC* CSmtpMtmUiData::StatusTextL(const TMsvEntry& aContext) const
+    {
+    TInt res = 0;
+    switch(aContext.SendingState())
+        {
+        case KMsvSendStateFailed:
+            res = R_SMTP_OUTBOX_STATUS_FAILED;
+            break;
+        // Functionally identical states. (Don't send on next connection)
+        case KMsvSendStateUponRequest:
+        case KMsvSendStateSuspended:
+            res = R_SMTP_OUTBOX_STATUS_SUSPENDED;
+            break;
+
+        // Functionally identical states. (Send on next connection)
+        case KMsvSendStateWaiting:
+        case KMsvSendStateResend:
+        case KMsvSendStateScheduled:
+            res = R_SMTP_OUTBOX_STATUS_QUEUED;
+            break;
+
+        // Sending in progress.
+        case KMsvSendStateSending:
+            res = R_SMTP_OUTBOX_STATUS_SENDING;
+            break;
+
+        case KMsvSendStateSent:
+            // how these should be handled?
+            break;
+
+        // Unknown (!)
+        case KMsvSendStateUnknown:
+        default:
+#ifdef _DEBUG
+            User::Panic(KImumMtmUiPanic, ESmtpMtmUdUnknownMsgStatus);
+#endif
+            break;
+            }
+        if(!res)
+            return HBufC::NewL(0);
+        else
+            return iCoeEnv->AllocReadResourceL(res);
+    }
+
+// ----------------------------------------------------------------------------
+// CheckEntry
+// ----------------------------------------------------------------------------
+TBool CSmtpMtmUiData::CheckEntry(const TMsvEntry& aContext) const
+    {
+    return ( (aContext.iMtm==KUidMsgTypeSMTP) && (aContext.iType.iUid!=KUidMsvFolderEntryValue) );
+    }
+
+// ----------------------------------------------------------------------------
+// CSmtpMtmUiData::CreateSkinnedBitmapsL
+//
+// ----------------------------------------------------------------------------
+void CSmtpMtmUiData::CreateSkinnedBitmapsL( TInt aNumZoomStates )
+    {
+    MAknsSkinInstance* skins = AknsUtils::SkinInstance();
+    TAknsItemID id;
+    CFbsBitmap* bitmap;
+    CFbsBitmap* bitmapMask;
+
+    CBitmapArray* array = NULL;
+
+    id.Set( KAknsIIDQgnPropMceMailFetRead );
+
+    array = new(ELeave) CArrayPtrFlat<CFbsBitmap>( aNumZoomStates );
+    CleanupStack::PushL( array );
+
+    TParse tp;
+    tp.Set( KSmtpMtmUdBitmapFile, &KDC_APP_BITMAP_DIR, NULL );
+
+    AknsUtils::CreateIconL( skins, id, bitmap,
+        bitmapMask, tp.FullName(), EMbmMuiuQgn_prop_mce_mail_fet_read,
+        EMbmMuiuQgn_prop_mce_mail_fet_read_mask );
+
+
+    array->AppendL( bitmap );
+    array->AppendL( bitmapMask );
+    iIconArrays->AppendL( array );
+
+    CleanupStack::Pop();//array
+    }
+
+// End of File
+