pushmtm/MtmUiSrc/PushMtmUiData.cpp
branchRCL_3
changeset 48 8e6fa1719340
parent 0 84ad3b177aa3
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUiData.cpp	Wed Sep 01 12:31:04 2010 +0100
@@ -0,0 +1,457 @@
+/*
+* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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:  Push Ui Data Mtm class definition
+*
+*/
+
+
+
+// INCLUDE FILES
+
+#include "PushMtmUiData.h"
+#include "PushMtmCommands.hrh"
+#include "PushMtmUiDef.h"
+#include "PushMtmUiPanic.h"
+#include "PushMtmUtil.h"
+#include <PushMtmUi.rsg>
+#include <PushEntry.h>
+#include <msvuids.h>
+#include <MTMExtendedCapabilities.hrh>
+#include <PushMtm.mbg>
+#include <data_caging_path_literals.hrh>
+#include <f32file.h>
+#include <AknsUtils.h>
+
+// CONSTANTS
+
+// Number of zoom states.
+LOCAL_C const TInt KPushIconArrayGranularity = 2;
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CPushMtmUiData::NewL
+// ---------------------------------------------------------
+//
+EXPORT_C CPushMtmUiData* CPushMtmUiData::NewL
+( CRegisteredMtmDll& aRegisteredDll )
+    {
+    CPushMtmUiData* uiData = new (ELeave) CPushMtmUiData( aRegisteredDll );
+    CleanupStack::PushL( uiData );
+    uiData->ConstructL();
+    CleanupStack::Pop();    // uiData
+    return uiData;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::~CPushMtmUiData
+// ---------------------------------------------------------
+//
+CPushMtmUiData::~CPushMtmUiData()
+    {
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CPushMtmUiData
+// ---------------------------------------------------------
+//
+CPushMtmUiData::CPushMtmUiData( CRegisteredMtmDll& aRegisteredDll )
+: CBaseMtmUiData( aRegisteredDll )
+    {
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::ContextIcon
+// ---------------------------------------------------------
+//
+const CBaseMtmUiData::CBitmapArray& CPushMtmUiData::ContextIcon
+( const TMsvEntry& aContext, TInt /*aStateFlags*/ ) const
+    {
+	__ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue, 
+        UiPanic( EPushMtmUiPanFoldersNotSupported ) );	
+
+	return *iIconArrays->At( aContext.Unread() ? 0 : 1 );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCreateEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/,
+        TMsvEntry& aNewEntry, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/,
+        TMsvEntry& /*aNewEntry*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aNewEntry.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    aReasonResourceId = KErrNotSupported;
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanDeleteFromEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanDeleteFromEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanDeleteFromEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    aReasonResourceId = KErrNotSupported;
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanDeleteServiceL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanDeleteServiceL
+( const TMsvEntry& aService, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanDeleteServiceL
+( const TMsvEntry& /*aService*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aService.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    aReasonResourceId = KErrNotSupported;
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanReplyToEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanReplyToEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanReplyToEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    aReasonResourceId = KErrNotSupported;
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanForwardEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanForwardEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanForwardEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    aReasonResourceId = KErrNotSupported;
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanEditEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanEditEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+    aReasonResourceId = KErrNotSupported;
+
+	if ( aContext.iType == KUidMsvServiceEntry )
+		{
+		// Only the service entry can be changed.
+		return ETrue;
+		}
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanViewEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanViewEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    
+	aReasonResourceId = KErrNotSupported;
+
+    if ( aContext.iType != KUidMsvMessageEntry )
+        {
+        // Only the messages can be viewed(this function
+        // should not be available on a service entry)
+        return EFalse;
+        }
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanOpenEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanOpenEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+    {
+    return CanViewEntryL( aContext, aReasonResourceId );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCloseEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanCloseEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+    {
+    return CanOpenEntryL( aContext, aReasonResourceId );
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCopyMoveToEntryL
+// ---------------------------------------------------------
+//
+TBool CPushMtmUiData::CanCopyMoveToEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+	aReasonResourceId = KErrNotSupported;
+
+    if ( aContext.iType != KUidMsvMessageEntry )
+        {
+        // Only the messages can be moved(this function
+        // should not be available on a service entry)
+        return EFalse;
+        }
+    return ETrue;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCopyMoveFromEntryL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanCopyMoveFromEntryL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanCopyMoveFromEntryL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+	aReasonResourceId = KErrNotSupported;
+
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CanCancelL
+// ---------------------------------------------------------
+//
+#ifdef _DEBUG
+TBool CPushMtmUiData::CanCancelL
+( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
+#else // _DEBUG
+TBool CPushMtmUiData::CanCancelL
+( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
+#endif // _DEBUG
+    {
+    __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+
+	aReasonResourceId = KErrNotSupported;
+
+    return EFalse;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::OperationSupportedL
+// ---------------------------------------------------------
+//
+TInt CPushMtmUiData::OperationSupportedL
+( TInt aOperationId, const TMsvEntry& aContext ) const
+    {
+	__ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
+    __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue, 
+        UiPanic( EPushMtmUiPanFoldersNotSupported ) );	
+
+    TInt ret( KErrCancel );
+
+    switch ( aOperationId )
+        {
+
+	    case KMtmUiFunctionMessageInfo:
+			{
+			// The message info operation is always supported.
+			ret = ( aContext.iType.iUid == KUidMsvMessageEntryValue ) ? 
+                    KErrNone : KErrCancel;
+            break;
+			}
+
+        case EPushMtmCmdLoadService:
+            {
+            // This function is available only if the message has URL in it.
+            if ( aContext.iType.iUid != KUidMsvMessageEntryValue )
+                {
+                // LoadService is not supported.
+                ret = KErrCancel;
+                }
+            else
+                {
+                if ( aContext.iBioType == KUidWapPushMsgSI.iUid && 
+                     CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref )
+                    {
+                    // SI with not empty URL: LoadService is supported.
+                    ret = KErrNone;
+                    }
+                else if ( aContext.iBioType == KUidWapPushMsgSL.iUid && 
+                     CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref )
+                    {
+                    // SL with not empty URL: LoadService is supported.
+                    ret = KErrNone;
+                    }
+                else
+                    {
+                    // LoadService is not supported.
+                    ret = KErrCancel;
+                    }
+                }
+            break;
+            }
+
+        default:
+            {
+            // No other operations are supported.
+            ret = KErrCancel;
+            break;
+            }
+        }
+
+    return ret;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::QueryCapability
+// ---------------------------------------------------------
+//
+TInt CPushMtmUiData::QueryCapability( TUid aCapability, TInt& aResponse ) const
+    {
+    TInt ret( KErrNotSupported );
+
+    if ( aCapability.iUid == KUidMsvMtmQueryMessageInfo )
+		{
+		aResponse = ETrue;
+        ret = KErrNone;
+		}
+
+    return ret;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::StatusTextL
+// ---------------------------------------------------------
+//
+HBufC* CPushMtmUiData::StatusTextL( const TMsvEntry& /*aContext*/ ) const
+    {
+    return NULL;
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::PopulateArraysL
+// ---------------------------------------------------------
+//
+void CPushMtmUiData::PopulateArraysL()
+    {
+    ReadFunctionsFromResourceFileL( R_PUSH_MTM_UI_DATA_FUNCTION_ARRAY );
+    CreateSkinnedBitmapsL();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::GetResourceFileName
+// ---------------------------------------------------------
+//
+void CPushMtmUiData::GetResourceFileName( TFileName& aFileName ) const
+    {
+    // Extract the file name and extension from the constant
+    TParsePtrC fileParser( KPushMtmUiDataResourceFileAndDrive );
+    aFileName = fileParser.NameAndExt();
+    }
+
+// ---------------------------------------------------------
+// CPushMtmUiData::CreateSkinnedBitmapsL
+// ---------------------------------------------------------
+//
+void CPushMtmUiData::CreateSkinnedBitmapsL()
+    {
+    TParse fileParser;
+    fileParser.Set( KPushMtmUiDataBitmapFileAndDrive, &KDC_APP_BITMAP_DIR, NULL );
+
+    MAknsSkinInstance* skins = AknsUtils::SkinInstance();
+    TAknsItemID id;
+    CFbsBitmap* bitmap;
+    CFbsBitmap* bitmapMask;
+    TBool found = ETrue;
+
+    for( TInt i = EMbmPushmtmQgn_prop_mce_push_unread; 
+              i < EMbmPushmtmQgn_prop_mce_push_read_mask + 1; 
+              i++ )
+        {
+        found = ETrue;
+        switch( i )
+            {
+            // Add to iIconArrays in this order
+            case EMbmPushmtmQgn_prop_mce_push_unread:
+                id.Set( KAknsIIDQgnPropMcePushUnread );
+                break;
+            case EMbmPushmtmQgn_prop_mce_push_read:
+                id.Set( KAknsIIDQgnPropMcePushRead );
+                break;
+            default:
+                found = EFalse;
+                break;
+            }
+        if( found )
+            {
+            CArrayPtrFlat<CFbsBitmap>* array = 
+                new (ELeave) CArrayPtrFlat<CFbsBitmap>( KPushIconArrayGranularity );
+            CleanupStack::PushL( array );
+
+            array->SetReserveL( KPushIconArrayGranularity ); // AppendLs will not LEAVE
+            AknsUtils::CreateIconL( skins, id, bitmap, bitmapMask, 
+                                    fileParser.FullName(), i, i + 1 );
+            // bitmap & bitmapMask is not on the Cleanup Stack, but it is not 
+            // necessary, because AppendLs will not LEAVE.
+            array->AppendL( bitmap );
+            bitmap = 0;
+            array->AppendL( bitmapMask );
+            bitmapMask = 0;
+            iIconArrays->AppendL( array );
+            CleanupStack::Pop( array ); // array
+            }
+        }
+    }
+
+// End of file.