pushmtm/MtmUiSrc/PushMtmUiData.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
equal deleted inserted replaced
37:481242ead638 51:48e827313edd
     1 /*
       
     2 * Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of the License "Eclipse Public License v1.0"
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  Push Ui Data Mtm class definition
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 
       
    20 // INCLUDE FILES
       
    21 
       
    22 #include "PushMtmUiData.h"
       
    23 #include "PushMtmCommands.hrh"
       
    24 #include "PushMtmUiDef.h"
       
    25 #include "PushMtmUiPanic.h"
       
    26 #include "PushMtmUtil.h"
       
    27 #include <PushMtmUi.rsg>
       
    28 #include <PushEntry.h>
       
    29 #include <msvuids.h>
       
    30 #include <MTMExtendedCapabilities.hrh>
       
    31 #include <PushMtm.mbg>
       
    32 #include <data_caging_path_literals.hrh>
       
    33 #include <f32file.h>
       
    34 #include <AknsUtils.h>
       
    35 
       
    36 // CONSTANTS
       
    37 
       
    38 // Number of zoom states.
       
    39 LOCAL_C const TInt KPushIconArrayGranularity = 2;
       
    40 
       
    41 // ================= MEMBER FUNCTIONS =======================
       
    42 
       
    43 // ---------------------------------------------------------
       
    44 // CPushMtmUiData::NewL
       
    45 // ---------------------------------------------------------
       
    46 //
       
    47 EXPORT_C CPushMtmUiData* CPushMtmUiData::NewL
       
    48 ( CRegisteredMtmDll& aRegisteredDll )
       
    49     {
       
    50     CPushMtmUiData* uiData = new (ELeave) CPushMtmUiData( aRegisteredDll );
       
    51     CleanupStack::PushL( uiData );
       
    52     uiData->ConstructL();
       
    53     CleanupStack::Pop();    // uiData
       
    54     return uiData;
       
    55     }
       
    56 
       
    57 // ---------------------------------------------------------
       
    58 // CPushMtmUiData::~CPushMtmUiData
       
    59 // ---------------------------------------------------------
       
    60 //
       
    61 CPushMtmUiData::~CPushMtmUiData()
       
    62     {
       
    63     }
       
    64 
       
    65 // ---------------------------------------------------------
       
    66 // CPushMtmUiData::CPushMtmUiData
       
    67 // ---------------------------------------------------------
       
    68 //
       
    69 CPushMtmUiData::CPushMtmUiData( CRegisteredMtmDll& aRegisteredDll )
       
    70 : CBaseMtmUiData( aRegisteredDll )
       
    71     {
       
    72     }
       
    73 
       
    74 // ---------------------------------------------------------
       
    75 // CPushMtmUiData::ContextIcon
       
    76 // ---------------------------------------------------------
       
    77 //
       
    78 const CBaseMtmUiData::CBitmapArray& CPushMtmUiData::ContextIcon
       
    79 ( const TMsvEntry& aContext, TInt /*aStateFlags*/ ) const
       
    80     {
       
    81 	__ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
    82     __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue, 
       
    83         UiPanic( EPushMtmUiPanFoldersNotSupported ) );	
       
    84 
       
    85 	return *iIconArrays->At( aContext.Unread() ? 0 : 1 );
       
    86     }
       
    87 
       
    88 // ---------------------------------------------------------
       
    89 // CPushMtmUiData::CanCreateEntryL
       
    90 // ---------------------------------------------------------
       
    91 //
       
    92 #ifdef _DEBUG
       
    93 TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/,
       
    94         TMsvEntry& aNewEntry, TInt& aReasonResourceId ) const
       
    95 #else // _DEBUG
       
    96 TBool CPushMtmUiData::CanCreateEntryL( const TMsvEntry& /*aParent*/,
       
    97         TMsvEntry& /*aNewEntry*/, TInt& aReasonResourceId ) const
       
    98 #endif // _DEBUG
       
    99     {
       
   100     __ASSERT_DEBUG( aNewEntry.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   101     aReasonResourceId = KErrNotSupported;
       
   102     return EFalse;
       
   103     }
       
   104 
       
   105 // ---------------------------------------------------------
       
   106 // CPushMtmUiData::CanDeleteFromEntryL
       
   107 // ---------------------------------------------------------
       
   108 //
       
   109 #ifdef _DEBUG
       
   110 TBool CPushMtmUiData::CanDeleteFromEntryL
       
   111 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   112 #else // _DEBUG
       
   113 TBool CPushMtmUiData::CanDeleteFromEntryL
       
   114 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
       
   115 #endif // _DEBUG
       
   116     {
       
   117     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   118     aReasonResourceId = KErrNotSupported;
       
   119     return ETrue;
       
   120     }
       
   121 
       
   122 // ---------------------------------------------------------
       
   123 // CPushMtmUiData::CanDeleteServiceL
       
   124 // ---------------------------------------------------------
       
   125 //
       
   126 #ifdef _DEBUG
       
   127 TBool CPushMtmUiData::CanDeleteServiceL
       
   128 ( const TMsvEntry& aService, TInt& aReasonResourceId ) const
       
   129 #else // _DEBUG
       
   130 TBool CPushMtmUiData::CanDeleteServiceL
       
   131 ( const TMsvEntry& /*aService*/, TInt& aReasonResourceId ) const
       
   132 #endif // _DEBUG
       
   133     {
       
   134     __ASSERT_DEBUG( aService.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   135     aReasonResourceId = KErrNotSupported;
       
   136     return EFalse;
       
   137     }
       
   138 
       
   139 // ---------------------------------------------------------
       
   140 // CPushMtmUiData::CanReplyToEntryL
       
   141 // ---------------------------------------------------------
       
   142 //
       
   143 #ifdef _DEBUG
       
   144 TBool CPushMtmUiData::CanReplyToEntryL
       
   145 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   146 #else // _DEBUG
       
   147 TBool CPushMtmUiData::CanReplyToEntryL
       
   148 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
       
   149 #endif // _DEBUG
       
   150     {
       
   151     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   152     aReasonResourceId = KErrNotSupported;
       
   153     return EFalse;
       
   154     }
       
   155 
       
   156 // ---------------------------------------------------------
       
   157 // CPushMtmUiData::CanForwardEntryL
       
   158 // ---------------------------------------------------------
       
   159 //
       
   160 #ifdef _DEBUG
       
   161 TBool CPushMtmUiData::CanForwardEntryL
       
   162 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   163 #else // _DEBUG
       
   164 TBool CPushMtmUiData::CanForwardEntryL
       
   165 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
       
   166 #endif // _DEBUG
       
   167     {
       
   168     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   169     aReasonResourceId = KErrNotSupported;
       
   170     return EFalse;
       
   171     }
       
   172 
       
   173 // ---------------------------------------------------------
       
   174 // CPushMtmUiData::CanEditEntryL
       
   175 // ---------------------------------------------------------
       
   176 //
       
   177 TBool CPushMtmUiData::CanEditEntryL
       
   178 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   179     {
       
   180     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   181 
       
   182     aReasonResourceId = KErrNotSupported;
       
   183 
       
   184 	if ( aContext.iType == KUidMsvServiceEntry )
       
   185 		{
       
   186 		// Only the service entry can be changed.
       
   187 		return ETrue;
       
   188 		}
       
   189     return EFalse;
       
   190     }
       
   191 
       
   192 // ---------------------------------------------------------
       
   193 // CPushMtmUiData::CanViewEntryL
       
   194 // ---------------------------------------------------------
       
   195 //
       
   196 TBool CPushMtmUiData::CanViewEntryL
       
   197 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   198     {
       
   199     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   200     
       
   201 	aReasonResourceId = KErrNotSupported;
       
   202 
       
   203     if ( aContext.iType != KUidMsvMessageEntry )
       
   204         {
       
   205         // Only the messages can be viewed(this function
       
   206         // should not be available on a service entry)
       
   207         return EFalse;
       
   208         }
       
   209     return ETrue;
       
   210     }
       
   211 
       
   212 // ---------------------------------------------------------
       
   213 // CPushMtmUiData::CanOpenEntryL
       
   214 // ---------------------------------------------------------
       
   215 //
       
   216 TBool CPushMtmUiData::CanOpenEntryL
       
   217 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   218     {
       
   219     return CanViewEntryL( aContext, aReasonResourceId );
       
   220     }
       
   221 
       
   222 // ---------------------------------------------------------
       
   223 // CPushMtmUiData::CanCloseEntryL
       
   224 // ---------------------------------------------------------
       
   225 //
       
   226 TBool CPushMtmUiData::CanCloseEntryL
       
   227 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   228     {
       
   229     return CanOpenEntryL( aContext, aReasonResourceId );
       
   230     }
       
   231 
       
   232 // ---------------------------------------------------------
       
   233 // CPushMtmUiData::CanCopyMoveToEntryL
       
   234 // ---------------------------------------------------------
       
   235 //
       
   236 TBool CPushMtmUiData::CanCopyMoveToEntryL
       
   237 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   238     {
       
   239     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   240 
       
   241 	aReasonResourceId = KErrNotSupported;
       
   242 
       
   243     if ( aContext.iType != KUidMsvMessageEntry )
       
   244         {
       
   245         // Only the messages can be moved(this function
       
   246         // should not be available on a service entry)
       
   247         return EFalse;
       
   248         }
       
   249     return ETrue;
       
   250     }
       
   251 
       
   252 // ---------------------------------------------------------
       
   253 // CPushMtmUiData::CanCopyMoveFromEntryL
       
   254 // ---------------------------------------------------------
       
   255 //
       
   256 #ifdef _DEBUG
       
   257 TBool CPushMtmUiData::CanCopyMoveFromEntryL
       
   258 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   259 #else // _DEBUG
       
   260 TBool CPushMtmUiData::CanCopyMoveFromEntryL
       
   261 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
       
   262 #endif // _DEBUG
       
   263     {
       
   264     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   265 
       
   266 	aReasonResourceId = KErrNotSupported;
       
   267 
       
   268     return EFalse;
       
   269     }
       
   270 
       
   271 // ---------------------------------------------------------
       
   272 // CPushMtmUiData::CanCancelL
       
   273 // ---------------------------------------------------------
       
   274 //
       
   275 #ifdef _DEBUG
       
   276 TBool CPushMtmUiData::CanCancelL
       
   277 ( const TMsvEntry& aContext, TInt& aReasonResourceId ) const
       
   278 #else // _DEBUG
       
   279 TBool CPushMtmUiData::CanCancelL
       
   280 ( const TMsvEntry& /*aContext*/, TInt& aReasonResourceId ) const
       
   281 #endif // _DEBUG
       
   282     {
       
   283     __ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   284 
       
   285 	aReasonResourceId = KErrNotSupported;
       
   286 
       
   287     return EFalse;
       
   288     }
       
   289 
       
   290 // ---------------------------------------------------------
       
   291 // CPushMtmUiData::OperationSupportedL
       
   292 // ---------------------------------------------------------
       
   293 //
       
   294 TInt CPushMtmUiData::OperationSupportedL
       
   295 ( TInt aOperationId, const TMsvEntry& aContext ) const
       
   296     {
       
   297 	__ASSERT_DEBUG( aContext.iMtm == Type(), UiPanic( EPushMtmUiPanBadType ) );
       
   298     __ASSERT_DEBUG( aContext.iType.iUid != KUidMsvFolderEntryValue, 
       
   299         UiPanic( EPushMtmUiPanFoldersNotSupported ) );	
       
   300 
       
   301     TInt ret( KErrCancel );
       
   302 
       
   303     switch ( aOperationId )
       
   304         {
       
   305 
       
   306 	    case KMtmUiFunctionMessageInfo:
       
   307 			{
       
   308 			// The message info operation is always supported.
       
   309 			ret = ( aContext.iType.iUid == KUidMsvMessageEntryValue ) ? 
       
   310                     KErrNone : KErrCancel;
       
   311             break;
       
   312 			}
       
   313 
       
   314         case EPushMtmCmdLoadService:
       
   315             {
       
   316             // This function is available only if the message has URL in it.
       
   317             if ( aContext.iType.iUid != KUidMsvMessageEntryValue )
       
   318                 {
       
   319                 // LoadService is not supported.
       
   320                 ret = KErrCancel;
       
   321                 }
       
   322             else
       
   323                 {
       
   324                 if ( aContext.iBioType == KUidWapPushMsgSI.iUid && 
       
   325                      CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref )
       
   326                     {
       
   327                     // SI with not empty URL: LoadService is supported.
       
   328                     ret = KErrNone;
       
   329                     }
       
   330                 else if ( aContext.iBioType == KUidWapPushMsgSL.iUid && 
       
   331                      CPushMtmUtil::Attrs( aContext ) & EPushMtmAttrHasHref )
       
   332                     {
       
   333                     // SL with not empty URL: LoadService is supported.
       
   334                     ret = KErrNone;
       
   335                     }
       
   336                 else
       
   337                     {
       
   338                     // LoadService is not supported.
       
   339                     ret = KErrCancel;
       
   340                     }
       
   341                 }
       
   342             break;
       
   343             }
       
   344 
       
   345         default:
       
   346             {
       
   347             // No other operations are supported.
       
   348             ret = KErrCancel;
       
   349             break;
       
   350             }
       
   351         }
       
   352 
       
   353     return ret;
       
   354     }
       
   355 
       
   356 // ---------------------------------------------------------
       
   357 // CPushMtmUiData::QueryCapability
       
   358 // ---------------------------------------------------------
       
   359 //
       
   360 TInt CPushMtmUiData::QueryCapability( TUid aCapability, TInt& aResponse ) const
       
   361     {
       
   362     TInt ret( KErrNotSupported );
       
   363 
       
   364     if ( aCapability.iUid == KUidMsvMtmQueryMessageInfo )
       
   365 		{
       
   366 		aResponse = ETrue;
       
   367         ret = KErrNone;
       
   368 		}
       
   369 
       
   370     return ret;
       
   371     }
       
   372 
       
   373 // ---------------------------------------------------------
       
   374 // CPushMtmUiData::StatusTextL
       
   375 // ---------------------------------------------------------
       
   376 //
       
   377 HBufC* CPushMtmUiData::StatusTextL( const TMsvEntry& /*aContext*/ ) const
       
   378     {
       
   379     return NULL;
       
   380     }
       
   381 
       
   382 // ---------------------------------------------------------
       
   383 // CPushMtmUiData::PopulateArraysL
       
   384 // ---------------------------------------------------------
       
   385 //
       
   386 void CPushMtmUiData::PopulateArraysL()
       
   387     {
       
   388     ReadFunctionsFromResourceFileL( R_PUSH_MTM_UI_DATA_FUNCTION_ARRAY );
       
   389     CreateSkinnedBitmapsL();
       
   390     }
       
   391 
       
   392 // ---------------------------------------------------------
       
   393 // CPushMtmUiData::GetResourceFileName
       
   394 // ---------------------------------------------------------
       
   395 //
       
   396 void CPushMtmUiData::GetResourceFileName( TFileName& aFileName ) const
       
   397     {
       
   398     // Extract the file name and extension from the constant
       
   399     TParsePtrC fileParser( KPushMtmUiDataResourceFileAndDrive );
       
   400     aFileName = fileParser.NameAndExt();
       
   401     }
       
   402 
       
   403 // ---------------------------------------------------------
       
   404 // CPushMtmUiData::CreateSkinnedBitmapsL
       
   405 // ---------------------------------------------------------
       
   406 //
       
   407 void CPushMtmUiData::CreateSkinnedBitmapsL()
       
   408     {
       
   409     TParse fileParser;
       
   410     fileParser.Set( KPushMtmUiDataBitmapFileAndDrive, &KDC_APP_BITMAP_DIR, NULL );
       
   411 
       
   412     MAknsSkinInstance* skins = AknsUtils::SkinInstance();
       
   413     TAknsItemID id;
       
   414     CFbsBitmap* bitmap;
       
   415     CFbsBitmap* bitmapMask;
       
   416     TBool found = ETrue;
       
   417 
       
   418     for( TInt i = EMbmPushmtmQgn_prop_mce_push_unread; 
       
   419               i < EMbmPushmtmQgn_prop_mce_push_read_mask + 1; 
       
   420               i++ )
       
   421         {
       
   422         found = ETrue;
       
   423         switch( i )
       
   424             {
       
   425             // Add to iIconArrays in this order
       
   426             case EMbmPushmtmQgn_prop_mce_push_unread:
       
   427                 id.Set( KAknsIIDQgnPropMcePushUnread );
       
   428                 break;
       
   429             case EMbmPushmtmQgn_prop_mce_push_read:
       
   430                 id.Set( KAknsIIDQgnPropMcePushRead );
       
   431                 break;
       
   432             default:
       
   433                 found = EFalse;
       
   434                 break;
       
   435             }
       
   436         if( found )
       
   437             {
       
   438             CArrayPtrFlat<CFbsBitmap>* array = 
       
   439                 new (ELeave) CArrayPtrFlat<CFbsBitmap>( KPushIconArrayGranularity );
       
   440             CleanupStack::PushL( array );
       
   441 
       
   442             array->SetReserveL( KPushIconArrayGranularity ); // AppendLs will not LEAVE
       
   443             AknsUtils::CreateIconL( skins, id, bitmap, bitmapMask, 
       
   444                                     fileParser.FullName(), i, i + 1 );
       
   445             // bitmap & bitmapMask is not on the Cleanup Stack, but it is not 
       
   446             // necessary, because AppendLs will not LEAVE.
       
   447             array->AppendL( bitmap );
       
   448             bitmap = 0;
       
   449             array->AppendL( bitmapMask );
       
   450             bitmapMask = 0;
       
   451             iIconArrays->AppendL( array );
       
   452             CleanupStack::Pop( array ); // array
       
   453             }
       
   454         }
       
   455     }
       
   456 
       
   457 // End of file.