--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pushmtm/MtmUiSrc/PushMtmUiData.cpp Mon Mar 30 12:49:49 2009 +0300
@@ -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.