email/imum/Mtms/Src/Imap4MtmUiData.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Mtms/Src/Imap4MtmUiData.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,769 @@
+/*
+* 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: 
+*       CImap4MtmUiData - IMAP4 MTM Ui data layer base API
+*
+*/
+
+
+#include <coemain.h>
+#include <mtmuidef.hrh>
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <mtmdef.hrh>
+#else
+#include <mtmdef.hrh>
+#include <mtmuidsdef.hrh>
+#endif
+#include <mtclbase.h>
+#include <miutset.h>
+#include "impicmds.h"
+#include <imapcmds.h>
+#include <impcmtm.h>
+#include <miuthdr.h>
+#include <eikon.rsg>
+#include "ImumPanic.h"
+#include <imum.rsg>
+#include <muiu.mbg>
+#include "Imap4MtmUiData.h"
+#include <mtud.hrh>
+#include <MtmExtendedCapabilities.hrh>
+#include "EmailEditorViewerUids.h"
+#include <data_caging_path_literals.hrh>
+#include <AknsUtils.h>
+#include <AknsConstants.h>//skinned icon ids
+#include "ImumMtmLogging.h"
+
+// Constants
+const TInt KIMAP4MtmUdNumberOfZoomStates=2; // second one is mask!
+const TInt KImumImap4FirstBitmapIndex = EMbmMuiuQgn_prop_mce_remote_sub;
+const TInt KImumImap4LastBitmapIndex = EMbmMuiuQgn_prop_folder_sub_unsubs_new_mask;
+
+const TInt KIsSupported=0;
+_LIT(KIMAP4MtmUdResourceFile, "IMUM.RSC");
+// Correct path is added to literal when it is used.
+_LIT(KIMAP4MtmUdBitmapFile, "z:muiu.MBM");
+
+// ----------------------------------------------------------------------------
+// NewIMPIMtmUiDataLayerL
+// ----------------------------------------------------------------------------
+EXPORT_C CBaseMtmUiData* NewIMPIMtmUiDataLayerL(CRegisteredMtmDll& aRegisteredDll)
+    {
+    return CImap4MtmUiData::NewL(aRegisteredDll);
+    }
+
+// ----------------------------------------------------------------------------
+// NewL
+// ----------------------------------------------------------------------------
+CImap4MtmUiData* CImap4MtmUiData::NewL(CRegisteredMtmDll& aRegisteredDll)
+    {
+    IMUM_STATIC_CONTEXT( CImap4MtmUiData::NewL, 0, mtm, KImumMtmLog );
+    IMUM_IN();
+    
+    CImap4MtmUiData* self=new(ELeave) CImap4MtmUiData(aRegisteredDll);
+    CleanupStack::PushL(self);
+    self->ConstructL();
+    CleanupStack::Pop(); //self
+    IMUM_OUT();
+    return self;
+    }
+
+// ----------------------------------------------------------------------------
+// CImap4MtmUiData
+// ----------------------------------------------------------------------------
+CImap4MtmUiData::CImap4MtmUiData(CRegisteredMtmDll& aRegisteredDll)
+    :   CBaseMtmUiData(aRegisteredDll)
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CImap4MtmUiData, 0, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    __DECLARE_NAME(_S("CImap4MtmUiData"));
+    }
+
+// ----------------------------------------------------------------------------
+// ConstructL
+// ----------------------------------------------------------------------------
+void CImap4MtmUiData::ConstructL()
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::ConstructL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    CBaseMtmUiData::ConstructL();
+
+    iLastResortIcon = new(ELeave) CArrayPtrFlat<CFbsBitmap>(1);
+    CWsBitmap* bitmap = new(ELeave) CWsBitmap(iCoeEnv->WsSession());
+    CleanupStack::PushL(bitmap);
+    User::LeaveIfError( bitmap->Create(TSize(1, 1), iCoeEnv->ScreenDevice()->DisplayMode()) );
+    iLastResortIcon->AppendL(bitmap);
+    CleanupStack::Pop(); // bitmap
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// ~CImap4MtmUiData
+// ----------------------------------------------------------------------------
+CImap4MtmUiData::~CImap4MtmUiData()
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::~CImap4MtmUiData, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    if(iLastResortIcon)
+        {
+        iLastResortIcon->ResetAndDestroy();
+        delete iLastResortIcon;
+        }
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// OperationSupportedL
+// ----------------------------------------------------------------------------
+TInt CImap4MtmUiData::OperationSupportedL(TInt aOperationId, const TMsvEntry& aContext) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::OperationSupportedL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    if (!CheckEntry(aContext))
+        return R_EIK_TBUF_NOT_AVAILABLE;
+
+    TInt returnValue=R_EIK_TBUF_NOT_AVAILABLE;
+
+    switch (aOperationId)
+        {
+    case KMtmUiFunctionMessageInfo:
+        if(aContext.iType==KUidMsvMessageEntry)
+            returnValue=KIsSupported;
+        break;
+    case KIMAP4MTMConnect:
+    case KIMAP4MTMConnectAndSynchronise:
+    case KImpiMTMConnect:
+    case KImpiMTMConnectAndSyncCompleteAfterConnection:
+    case KImpiMTMConnectAndSyncCompleteAfterFolderSync:
+    case KImpiMTMConnectAndSyncCompleteAfterDisconnection:
+    case KImpiMTMRefreshFolderList:
+        if(!aContext.Connected() && aContext.iType==KUidMsvServiceEntry)
+            returnValue=KIsSupported;
+        break;
+    case KIMAP4MTMDisconnect:
+        if(aContext.Connected())
+            {
+            if(aContext.iType==KUidMsvServiceEntry)
+                returnValue=KIsSupported;
+            }
+        else
+            {
+            returnValue=R_EIK_TBUF_NOT_AVAILABLE;
+            }
+        break;
+    case KImpiMTMPurgeAttachment:
+        if(aContext.iType==KUidMsvAttachmentEntry)
+            returnValue=KIsSupported;
+        break;
+    case KImpiMTMSubscribedFolders:
+        {
+        returnValue=KIsSupported;
+        }
+        break;
+    case KImpiMTMFetchAttachments:
+    case KIMAP4MTMCancelBackgroundSynchronise:
+    case KIMAP4MTMStartBatch:
+    case KIMAP4MTMEndBatch:
+    case KIMAP4MTMBusy:
+    case KIMAP4MTMSelect:
+    case KIMAP4MTMSynchronise:
+    case KIMAP4MTMSyncTree:
+    case KIMAP4MTMSyncSubscription:
+    case KIMAP4MTMFullSync:
+    case KIMAP4MTMLocalSubscribe:
+    case KIMAP4MTMLocalUnsubscribe:
+
+    case KMtmUiFunctionFetchAll:
+    case KMtmUiFunctionFetchNew:
+    case KMtmUiFunctionFetchSelected:
+    case KMtmUiFunctionGetNew:
+        returnValue=KIsSupported;
+        break;
+    default:
+        __ASSERT_DEBUG( 0, User::Panic(KImumMtmUiPanic, EIMAP4MtmUdUnknownOperationId) );
+        break;
+        };
+    IMUM_OUT();
+    return returnValue;
+    }
+
+
+// ----------------------------------------------------------------------------
+// QueryCapability
+// ----------------------------------------------------------------------------
+TInt CImap4MtmUiData::QueryCapability(TUid aCapability, TInt& aResponse) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::QueryCapability, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    switch (aCapability.iUid)
+        {
+    // --- Supported valued capabilities ---
+    case KUidMtmQueryMaxBodySizeValue:
+    case KUidMtmQueryMaxTotalMsgSizeValue:
+        aResponse=KMaxTInt;
+        break;
+    case KUidMsvMtmQueryEditorUidValue:
+        aResponse=KUidMsgInternetMailEditorAppValue;
+        break;
+    case KUidMsvMtmQueryViewerUidValue:
+        aResponse=KUidMsgInternetMailViewerAppValue;
+        break;
+
+    // --- Supported non-valued capabilities ---
+    case KUidMtmQuerySupportedBodyValue:
+    case KUidMtmQueryCanReceiveMsgValue:
+    case KUidMtmQuerySupportAttachmentsValue:
+    case KUidMsvMtmUiQueryConnectionOrientedServices:
+    case KUidMtmQuerySupportsFolderValue:
+    case KUidMsvMtmUiQueryExtendedOpenProgress:
+    case KUidMsvMtmUiQueryExtendedGetMailProgress:
+    case KUidMsvMtmUiQueryCanGetNew:
+    case KMtmUiFunctionMessageInfo:
+        aResponse=0;
+        break;
+    // --- Non-supported capabilities ---
+    default:
+        IMUM_OUT();
+        return KErrNotSupported;
+        };
+    IMUM_OUT();
+    return KErrNone;
+    }
+
+// ----------------------------------------------------------------------------
+// ContextIcon
+// ----------------------------------------------------------------------------
+const CBaseMtmUiData::CBitmapArray& CImap4MtmUiData::ContextIcon(const TMsvEntry& aContext, TInt aStateFlags) const
+    {
+    IMUM_CONTEXT( CBaseMtmUiData::CBitmapArray, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    // Deferred loading of bitmaps.
+    if(!iIconArrays->Count())
+        {
+        //workaround const with const_cast
+        TRAPD( err, const_cast<CImap4MtmUiData*>(this)->CreateSkinnedBitmapsL( KIMAP4MtmUdNumberOfZoomStates ) );
+        if(err != KErrNone)
+            {
+            // Failed to load
+            IMUM_OUT();
+            return *iLastResortIcon;
+            }
+
+        /*
+        // --- Populate bitmap array ---
+        TRAPD(err, CONST_CAST(CImap4MtmUiData*,this)->CreateBitmapsL(
+            KIMAP4MtmUdNumberOfZoomStates,
+            KIMAP4MtmUdBitmapFile,
+            KImumImap4FirstBitmapIndex,
+            KImumImap4LastBitmapIndex));
+        if(err != KErrNone)
+            {
+            // Failed to load
+            return *iLastResortIcon;
+            }
+            */
+        }
+
+    TInt retIndex=0;
+
+    TMsvEmailEntry mailEntry = aContext;
+
+    // Service; can include unread messages or not
+    if (aContext.iType.iUid == KUidMsvServiceEntryValue)
+        {
+        retIndex = (aStateFlags & EMtudEntryStateOpen) ?
+            EImumPropMceRemoteNewSub :
+            EImumPropMceRemoteSub;
+
+        }
+    // Messages; normal, deleted, incomplete
+    else if ( aContext.iType.iUid==KUidMsvMessageEntryValue )
+        {
+        if(EDisconnectedDeleteOperation == mailEntry.DisconnectedOperation())
+            {
+            retIndex = EImumPropMceMailFetReaDel;
+            }
+        else
+            {
+            if(!mailEntry.BodyTextComplete())
+                {
+                retIndex = aContext.Unread() ?
+                    EImumPropMceMailUnfetUnread :
+                    EImumPropMceMailUnfetRead;
+                }
+            else
+                {
+                retIndex = aContext.Unread() ?
+                    EImumPropMceMailFetUnread :
+                    EImumPropMceMailFetRead;
+                }
+            }
+        }
+    // Folders
+    else
+        {
+        TBool hasNew = aStateFlags & EMtudEntryStateOpen;
+        TBool hasSub = aStateFlags & EMtudEntryStateSubFolder;
+
+        TMsvEmailEntry eEntry( aContext );
+        TBool isSubbed = eEntry.LocalSubscription();
+
+        if( hasSub )
+            {
+            if( hasNew )
+                {
+                if( isSubbed )
+                    {
+                    retIndex = EImumPropFolderSubSubsNew;
+                    }//if
+                else
+                    {
+                    retIndex = EImumPropFolderSubUnsubsNew;
+                    }//else
+                }//if
+            else
+                {
+                if( isSubbed )
+                    {
+                    retIndex = EImumPropFolderSubSubs;
+                    }//if
+                else
+                    {
+                    retIndex = EImumPropFolderSubSmall;
+                    }//else
+                }//else
+            }//if
+        else
+            {
+            if( hasNew )
+                {
+                if( isSubbed )
+                    {
+                    retIndex = EImumPropFolderSubsNew;
+                    }//if
+                else
+                    {
+                    retIndex = EImumPropFolderUnsubsNew;
+                    }//else
+                }//if
+            else
+                {
+                if( isSubbed )
+                    {
+                    retIndex = EImumPropFolderSubs;
+                    }//if
+                else
+                    {
+                    retIndex = EImumPropFolderSmall;
+                    }
+                }//else
+            }//else
+
+        }//else
+    IMUM_OUT();
+
+    return *iIconArrays->At( retIndex / KIMAP4MtmUdNumberOfZoomStates );
+    }
+
+// ----------------------------------------------------------------------------
+// PopulateArraysL
+// ----------------------------------------------------------------------------
+void CImap4MtmUiData::PopulateArraysL()
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::PopulateArraysL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    // --- Read commands list from resource ---
+    ReadFunctionsFromResourceFileL(R_IMAP4UD_FUNCTION_ARRAY);
+    IMUM_OUT();
+
+    // Defer bitmap loading until requested.
+    }
+
+// ----------------------------------------------------------------------------
+// GetResourceFileName
+// ----------------------------------------------------------------------------
+void CImap4MtmUiData::GetResourceFileName(TFileName& aFileName) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::GetResourceFileName, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aFileName=KIMAP4MtmUdResourceFile;
+    IMUM_OUT();
+    }
+
+// ----------------------------------------------------------------------------
+// CanCreateEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanCreateEntryL(const TMsvEntry& aParent, TMsvEntry& aNewEntry, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanCreateEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    if (!CheckEntry(aNewEntry))
+        {
+        IMUM_OUT();
+        return EFalse;
+        }
+
+    // --- Can create IMAP4 service
+    if ((aNewEntry.iType.iUid==KUidMsvServiceEntryValue) && (aParent.Id()==KMsvRootIndexEntryId))
+        {
+        aReasonResourceId=0;
+        IMUM_OUT();
+        return ETrue;
+        }
+
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanOpenEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanOpenEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanOpenEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCloseEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanCloseEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanCloseEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanViewEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanViewEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanViewEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanEditEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanEditEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanEditEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanDeleteFromEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanDeleteFromEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanDeleteFromEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    if (!CheckEntry(aContext))
+        {
+        IMUM_OUT();
+        return EFalse;
+        }
+
+    const TMsvEmailEntry& context=aContext;
+
+    if(context.iType.iUid==KUidMsvMessageEntryValue &&
+       context.DisconnectedOperation()==ENoDisconnectedOperations)
+        {
+        aReasonResourceId=0;
+        IMUM_OUT();
+        return ETrue;
+        }
+    IMUM_OUT();
+
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanUnDeleteFromEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanUnDeleteFromEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanUnDeleteFromEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    // N.B. Current Message Centre implementation specifies that aContext is actually the entry
+    // to be undeleted, not the parent.
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    if (!CheckEntry(aContext))
+        {
+        IMUM_OUT();
+        return EFalse;
+        }
+
+    const TMsvEmailEntry& context=aContext;
+
+    if(context.iType.iUid==KUidMsvMessageEntryValue && context.DisconnectedOperation()==EDisconnectedDeleteOperation)
+        {
+        aReasonResourceId=0;
+        IMUM_OUT();
+        return ETrue;
+        }
+    IMUM_OUT();
+
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCopyMoveFromEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanCopyMoveFromEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanCopyMoveFromEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCopyMoveToEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanCopyMoveToEntryL(const TMsvEntry& /*aContext*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanCopyMoveToEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanReplyToEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanReplyToEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanReplyToEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    __ASSERT_DEBUG( aContext.iMtm == KUidMsgTypeIMAP4, User::Panic(KImumMtmUiPanic,  EIMAP4MtmUdWrongMtm ));
+    if ( aContext.iMtm == KUidMsgTypeIMAP4
+        && aContext.iType == KUidMsvMessageEntry )
+        {
+        IMUM_OUT();
+        return ETrue;
+        }
+    else
+        {
+        aReasonResourceId = R_EIK_TBUF_NOT_AVAILABLE;
+        IMUM_OUT();
+        return EFalse;
+        }
+
+    }
+
+// ----------------------------------------------------------------------------
+// CanForwardEntryL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanForwardEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanForwardEntryL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    __ASSERT_DEBUG( aContext.iMtm == KUidMsgTypeIMAP4, User::Panic(KImumMtmUiPanic,  EIMAP4MtmUdWrongMtm ));
+    if ( aContext.iMtm == KUidMsgTypeIMAP4
+        && aContext.iType == KUidMsvMessageEntry )
+        {
+        IMUM_OUT();
+        return ETrue;
+        }
+    else
+        {
+        aReasonResourceId = R_EIK_TBUF_NOT_AVAILABLE;
+        IMUM_OUT();
+        return EFalse;
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CanDeleteServiceL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanDeleteServiceL(const TMsvEntry& /*aService*/, TInt& aReasonResourceId) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanDeleteServiceL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE;
+    IMUM_OUT();
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// CanCancelL
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CanCancelL(const TMsvEntry& /*aContext*/, TInt& /*aReasonResourceId*/) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CanCancelL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    IMUM_OUT();
+    // IMAP messages can never be sent, consequently can never be cancelled.
+    return EFalse;
+    }
+
+// ----------------------------------------------------------------------------
+// StatusTextL
+// ----------------------------------------------------------------------------
+HBufC* CImap4MtmUiData::StatusTextL(const TMsvEntry& /*aContext*/) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::StatusTextL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    IMUM_OUT();
+    // IMAP messages never have a status in the outbox.
+    return HBufC::NewL(1);
+    }
+
+// ----------------------------------------------------------------------------
+// CheckEntry
+// ----------------------------------------------------------------------------
+TBool CImap4MtmUiData::CheckEntry(const TMsvEntry& aContext) const
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CheckEntry, 0, KImumMtmLog );
+    IMUM_IN();
+    IMUM_OUT();
+    
+    return  (aContext.iMtm==KUidMsgTypeIMAP4) ;
+    }
+
+// ----------------------------------------------------------------------------
+// CreateSkinnedBitmapsL
+// ----------------------------------------------------------------------------
+void CImap4MtmUiData::CreateSkinnedBitmapsL( TInt aNumZoomStates )
+    {
+    IMUM_CONTEXT( CImap4MtmUiData::CreateSkinnedBitmapsL, 0, KImumMtmLog );
+    IMUM_IN();
+    
+    MAknsSkinInstance* skins = AknsUtils::SkinInstance();
+    TAknsItemID id;
+    CFbsBitmap* bitmap;
+    CFbsBitmap* bitmapMask;
+    TBool found = ETrue;
+
+    CBitmapArray* array = NULL;
+
+
+    for( TInt i=KImumImap4FirstBitmapIndex; i<KImumImap4LastBitmapIndex+1; i++ )
+        {
+        found = ETrue;
+        switch( i )
+            {
+            case EMbmMuiuQgn_prop_mce_remote_sub:
+                id.Set( KAknsIIDQgnPropMceRemoteSub );
+                break;
+            case EMbmMuiuQgn_prop_mce_remote_new_sub:
+                id.Set( KAknsIIDQgnPropMceRemoteNewSub );
+                break;
+            case EMbmMuiuQgn_prop_mce_mail_fet_rea_del:
+                id.Set( KAknsIIDQgnPropMceMailFetReaDel );
+                break;
+            case EMbmMuiuQgn_prop_mce_mail_fet_read:
+                id.Set( KAknsIIDQgnPropMceMailFetRead );
+                break;
+            case EMbmMuiuQgn_prop_mce_mail_fet_unread:
+                id.Set( KAknsIIDQgnPropMceMailFetUnread );
+                break;
+            case EMbmMuiuQgn_prop_mce_mail_unfet_read:
+                id.Set( KAknsIIDQgnPropMceMailUnfetRead );
+                break;
+            case EMbmMuiuQgn_prop_mce_mail_unfet_unread:
+                id.Set( KAknsIIDQgnPropMceMailUnfetUnread );
+                break;
+            case EMbmMuiuQgn_prop_folder_small:
+                id.Set( KAknsIIDQgnPropFolderSmall );
+                break;
+            case EMbmMuiuQgn_prop_folder_subs:
+                id.Set( KAknsIIDQgnPropFolderSubs );
+                break;
+            case EMbmMuiuQgn_prop_folder_subs_new:
+                id.Set( KAknsIIDQgnPropFolderSubsNew );
+                break;
+            case EMbmMuiuQgn_prop_folder_sub_small:
+                id.Set( KAknsIIDQgnPropFolderSubSmall );
+                break;
+            case EMbmMuiuQgn_prop_folder_sub_subs:
+                id.Set( KAknsIIDQgnPropFolderSubSubs );
+                break;
+            case EMbmMuiuQgn_prop_folder_sub_subs_new:
+                id.Set( KAknsIIDQgnPropFolderSubSubsNew );
+                break;
+            case EMbmMuiuQgn_prop_folder_unsubs_new:
+                id.Set( KAknsIIDQgnPropFolderUnsubsNew );
+                break;
+            case EMbmMuiuQgn_prop_folder_sub_unsubs_new:
+                id.Set( KAknsIIDQgnPropFolderSubUnsubsNew );
+                break;
+            default:
+                found = EFalse;
+                break;
+            }
+
+        if( found )
+            {
+            array = new(ELeave) CArrayPtrFlat< CFbsBitmap >( aNumZoomStates );
+            CleanupStack::PushL( array );
+
+            TParse tp;
+            tp.Set( KIMAP4MtmUdBitmapFile, &KDC_APP_BITMAP_DIR, NULL );
+
+            AknsUtils::CreateIconL( skins, id, bitmap,
+                bitmapMask, tp.FullName(), i, i + 1 );
+
+            array->AppendL( bitmap );
+            array->AppendL( bitmapMask );
+            iIconArrays->AppendL( array );
+
+            CleanupStack::Pop();//array
+            }
+        }
+    IMUM_OUT();
+    }
+
+// End of File
+