diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txti_8cpp_source.html --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/txti_8cpp_source.html Tue Mar 30 16:16:55 2010 +0100 @@ -0,0 +1,466 @@ + + +
+ +00001 // TXTI.CPP +00002 // +00003 // © 2005 Nokia Corporation. All rights reserved. +00004 // +00005 +00006 +00007 +00008 // class include +00009 #include "txti.h" +00010 +00011 // Standard includes +00012 #include <bautils.h> +00013 #include <coemain.h> // CCoeEnv +00014 +00015 // Messaging includes +00016 #include <msvstd.hrh> +00017 #include <mtclbase.h> +00018 #include <mtmdef.hrh> +00019 #include <msvids.h> +00020 #include <msvuids.h> +00021 #include <mtmuidef.hrh> +00022 #include <stringloader.h> // StringLoader +00023 #include <AknsSkinInstance.h> +00024 #include <AknsUtils.h> +00025 #include <aknsconstants.h>//skinned icon ids +00026 +00027 #include <txti.rsg> +00028 #include <txti.mbg> +00029 +00030 // +00031 #include <akniconutils.h> +00032 // user includes +00033 #include "txclient.h" +00034 #include "txtipan.h" +00035 +00036 // user includes +00037 #include "txut.h" +00038 #include "txtucmds.hrh" +00039 #include "../../Client/inc/txclient.h" +00040 #include "txtipan.h" +00041 +00042 // eikcore.rsg +00043 #include <eikcore.rsg> +00044 +00045 #ifdef __WINS__ +00046 #pragma message("If you use an IDE, build from the command line first to create the bitmaps file and .mbg header") +00047 #endif +00048 +00049 // Constants +00050 const TInt KTxtiMtmUdNumberOfIconSets = 3; +00051 const TInt KTxtMtmArrayGranularity = 18; +00052 +00053 _LIT(KTxtiMtmUdResourceFile,"TXTI.RSC"); +00054 _LIT(KTxtiMtmUdBitmapFile,"TXTI.MIF"); +00055 #ifdef __WINS__ +00056 // on wins, assume built to z: +00057 _LIT(KTxtiMtmUdPath,"\\resource\\messaging\\"); +00058 #else +00059 _LIT(KTxtiMtmUdPath,"c:\\resource\\messaging\\"); +00060 #endif //WINS +00061 +00062 +00063 // This constant is required so that the series 60 messaging application knows that the TextMTM +00064 // can be used to create a message +00065 #define KUidMtmQueryCanCreateNewMsgValue 0x10008b24 +00066 +00067 // +00068 // CTxtiMtmUiData: UI Data MTM +00069 // +00070 +00071 // +00072 // Construction, initialisation, and destruction +00073 // +00074 +00075 +00076 enum TIcons +00077 { +00078 EMailRead, +00079 EMailUnread, +00080 EService +00081 }; +00082 +00083 EXPORT_C CTxtiMtmUiData* CTxtiMtmUiData::NewL(CRegisteredMtmDll& aRegisteredDll) +00084 { +00085 CTxtiMtmUiData* base=new(ELeave) CTxtiMtmUiData(aRegisteredDll); +00086 CleanupStack::PushL(base); +00087 base->TxtConstructL(); +00088 CleanupStack::Pop(base); +00089 return base; +00090 } +00091 +00092 void CTxtiMtmUiData::TxtConstructL() +00093 { +00094 +00095 iIconArrays = new (ELeave) CArrayPtrSeg<CBitmapArray>(KTxtMtmArrayGranularity); +00096 iMtmSpecificFunctions = new (ELeave) CArrayFixFlat<TMtmUiFunction>(KTxtMtmArrayGranularity); +00097 +00098 // Get resource file +00099 TFileName resourceFileName; +00100 +00101 TxtUtils::FindFileL(KTxtiMtmUdResourceFile, KTxtiMtmUdPath, resourceFileName); +00102 iResourceFileName = resourceFileName.AllocL(); +00103 +00104 // Now try to find a resource file that matches the particular locale, if one +00105 // exists and the locale has been set +00106 BaflUtils::NearestLanguageFile(iCoeEnv->FsSession(), resourceFileName); +00107 +00108 // Add the resource file to the CCoeEnv +00109 iNewResourceFileOffset=iCoeEnv->AddResourceFileL(resourceFileName); +00110 +00111 // finally, populate the arrays +00112 PopulateArraysL(); +00113 } +00114 +00115 +00116 +00117 void CTxtiMtmUiData::TxtCreateBitmapsL(const TDesC& aBitmapFile) +00118 { +00119 CFbsBitmap* bitmap; +00120 CFbsBitmap* bitmapMask; +00121 +00122 TBool found = ETrue; +00123 +00124 for( TInt i = EMbmTxtiRead; +00125 i < EMbmTxtiLastElement; +00126 i++ ) +00127 { +00128 found = ETrue; +00129 switch( i ) +00130 { +00131 // Add to iIconArrays in this order +00132 case EMbmTxtiRead: +00133 break; +00134 case EMbmTxtiUnread: +00135 break; +00136 case EMbmTxtiMailbox: +00137 break; +00138 default: +00139 found = EFalse; +00140 break; +00141 } +00142 if( found ) +00143 { +00144 CArrayPtrFlat<CFbsBitmap>* array = +00145 new (ELeave) CArrayPtrFlat<CFbsBitmap>( KTxtMtmArrayGranularity ); +00146 CleanupStack::PushL( array ); +00147 +00148 array->SetReserveL( KTxtMtmArrayGranularity ); // AppendLs will not LEAVE +00149 TInt err=0; +00150 TRAP(err, AknIconUtils::CreateIconL(bitmap, bitmapMask, +00151 aBitmapFile, i, i + 1 )); +00152 array->AppendL( bitmap ); +00153 bitmap = 0; +00154 array->AppendL( bitmapMask ); +00155 bitmapMask = 0; +00156 iIconArrays->AppendL( array ); +00157 CleanupStack::Pop( array ); // array +00158 } +00159 } +00160 return; +00161 } +00162 +00163 +00164 +00165 CTxtiMtmUiData::~CTxtiMtmUiData() +00166 { +00167 // remove the resource file we added to the CCoeEnv +00168 if (iNewResourceFileOffset != 0) +00169 iCoeEnv->DeleteResourceFile(iNewResourceFileOffset); +00170 delete iResourceFileName; +00171 +00172 +00173 +00174 +00175 } +00176 +00177 +00178 +00179 // Initialise bitmaps and function information +00180 void CTxtiMtmUiData::PopulateArraysL() +00181 { +00182 // Read MTM-specific operation information +00183 ReadFunctionsFromResourceFileL(R_TEXTUD_FUNCTION_ARRAY); +00184 +00185 // Populate bitmap array +00186 TFileName bitmapFileName; +00187 TxtUtils::FindFileL(KTxtiMtmUdBitmapFile, KTxtiMtmUdPath, bitmapFileName); +00188 +00189 TxtCreateBitmapsL(bitmapFileName); +00190 } +00191 +00192 +00193 +00194 +00195 CTxtiMtmUiData::CTxtiMtmUiData(CRegisteredMtmDll& aRegisteredDll) +00196 : CBaseMtmUiData(aRegisteredDll) +00197 { +00198 } +00199 +00200 +00201 void CTxtiMtmUiData::GetResourceFileName(TFileName& aFileName) const +00202 // Resource file loading +00203 { +00204 aFileName=*iResourceFileName; +00205 } +00206 +00207 +00208 // +00209 // MTM-specific functionality +00210 // +00211 +00212 +00213 // Context-sensitive operation query +00214 TInt CTxtiMtmUiData::OperationSupportedL(TInt aOperationId, const TMsvEntry& aContext) const +00215 { +00216 TInt aReasonResourceId=0; // 0 means "operation is available" +00217 +00218 if (aContext.iMtm!=KUidMsgTypeText) +00219 return R_TEXTUD_NOT_SUPPORTED; +00220 +00221 const TBool isMessage = (aContext.iType==KUidMsvMessageEntry); +00222 const TBool isService = (aContext.iType==KUidMsvServiceEntry); +00223 +00224 if (aOperationId==ETxtuCommandRefreshMBox) +00225 { +00226 // Only allow refresh on services +00227 if (!isService) +00228 aReasonResourceId=R_TEXTUD_ONLY_REFRESH_SERVICES; +00229 } +00230 else if (aOperationId==ETxtuCommandMessage) +00231 { +00232 // Only allow this command on local messages +00233 if ( (!isMessage) || (aContext.iServiceId != KMsvLocalServiceIndexEntryId) ) +00234 aReasonResourceId=R_TEXTUD_ONLY_MESSAGES; +00235 } +00236 return aReasonResourceId; +00237 } +00238 +00239 +00240 TInt CTxtiMtmUiData::QueryCapability(TUid aCapability, TInt& aResponse) const +00241 // Query for capability +00242 { +00243 switch (aCapability.iUid) +00244 { +00245 // Supported valued capabilities +00246 case KUidMtmQueryMaxBodySizeValue: +00247 aResponse=KMaxTextMessageSize; +00248 break; +00249 case KUidMtmQueryMaxTotalMsgSizeValue: +00250 aResponse=KMaxTextMessageSize; +00251 break; +00252 +00253 // Supported non-valued capabilities +00254 +00255 case KUidMtmQuerySupportedBodyValue: +00256 case KUidMtmQueryOffLineAllowedValue: +00257 case KUidMtmQueryCanReceiveMsgValue: +00258 case KUidMtmQueryCanSendMsgValue: +00259 case KUidMtmQueryCanCreateNewMsgValue: +00260 aResponse=0; +00261 break; +00262 +00263 default: +00264 return KErrNotSupported; +00265 }; +00266 return KErrNone; +00267 } +00268 +00269 +00270 const CBaseMtmUiData::CBitmapArray& CTxtiMtmUiData::ContextIcon(const TMsvEntry& aContext, TInt /*aStateFlags*/) const +00271 { +00272 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00273 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdNoIconForAttachment)); +00274 +00275 TInt retIndex=EService; +00276 // If it is a folder or a service use the same icon +00277 if (aContext.iType == KUidMsvServiceEntry ||aContext.iType == KUidMsvFolderEntry ) +00278 { +00279 retIndex=EService; +00280 } +00281 else +00282 { +00283 // if it is a message, check whether the message is read or unread +00284 // and select the right icon +00285 if (aContext.iType == KUidMsvMessageEntry) +00286 retIndex=aContext.Unread() ? EMailUnread : EMailRead; +00287 } +00288 +00289 return *(iIconArrays->At(retIndex)); +00290 } +00291 +00292 // +00293 // Context-specific information +00294 // +00295 +00296 TBool CTxtiMtmUiData::CanOpenEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00297 { +00298 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00299 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00300 +00301 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; +00302 if ( aContext.iType != KUidMsvMessageEntry ) +00303 { +00304 aReasonResourceId=R_TEXTUD_ONLY_MESSAGES; +00305 return EFalse; +00306 } +00307 else +00308 return ETrue; +00309 } +00310 +00311 +00312 TBool CTxtiMtmUiData::CanCloseEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00313 { +00314 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00315 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00316 +00317 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; +00318 if ( aContext.iType != KUidMsvMessageEntry ) +00319 { +00320 aReasonResourceId=R_TEXTUD_ONLY_MESSAGES; +00321 return EFalse; +00322 } +00323 else +00324 return ETrue; +00325 } +00326 +00327 +00328 TBool CTxtiMtmUiData::CanViewEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00329 { +00330 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00331 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00332 +00333 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; +00334 if ( aContext.iType != KUidMsvMessageEntry ) +00335 { +00336 aReasonResourceId=R_TEXTUD_ONLY_MESSAGES; +00337 return EFalse; +00338 } +00339 else +00340 return ETrue; +00341 } +00342 +00343 +00344 TBool CTxtiMtmUiData::CanEditEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00345 { +00346 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00347 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00348 +00349 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; +00350 if ( aContext.iType == KUidMsvFolderEntry ) +00351 { +00352 aReasonResourceId=R_TEXTUD_CAN_NOT_EDIT_FOLDERS; +00353 return EFalse; +00354 } +00355 else +00356 return ETrue; +00357 } +00358 +00359 +00360 TBool CTxtiMtmUiData::CanDeleteFromEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00361 { +00362 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00363 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00364 +00365 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; // There is no resource string for this operation +00366 return EFalse; +00367 } +00368 +00369 +00370 TBool CTxtiMtmUiData::CanCopyMoveToEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00371 { +00372 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00373 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00374 +00375 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; // There is no resource string for this operation +00376 return EFalse; +00377 } +00378 +00379 +00380 TBool CTxtiMtmUiData::CanCopyMoveFromEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00381 { +00382 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00383 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00384 +00385 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; // There is no resource string for this operation +00386 return EFalse; +00387 } +00388 +00389 +00390 TBool CTxtiMtmUiData::CanReplyToEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00391 // +00392 // MTM UI does not support replying. +00393 // +00394 { +00395 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00396 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00397 +00398 aReasonResourceId=R_TEXTUD_NOT_SUPPORTED; +00399 return EFalse; +00400 } +00401 +00402 +00403 TBool CTxtiMtmUiData::CanForwardEntryL(const TMsvEntry& aContext, TInt& aReasonResourceId) const +00404 // +00405 // MTM UI does not supports forwarding. +00406 // +00407 { +00408 __ASSERT_ALWAYS(aContext.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00409 __ASSERT_ALWAYS(aContext.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00410 +00411 aReasonResourceId=R_TEXTUD_NOT_SUPPORTED; +00412 return EFalse; +00413 } +00414 +00415 +00416 TBool CTxtiMtmUiData::CanCreateEntryL(const TMsvEntry& aParent, TMsvEntry& aNewEntry, +00417 TInt& aReasonResourceId) const +00418 { +00419 __ASSERT_ALWAYS(aNewEntry.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00420 __ASSERT_ALWAYS(aNewEntry.iType!=KUidMsvAttachmentEntry, Panic(ETxtiMtmUdAttachmentsNotSupported)); +00421 +00422 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; // There is no resource string for this operation +00423 // --- Can create services if they are off root --- +00424 if (aNewEntry.iType == KUidMsvServiceEntry) +00425 return (aParent.Id() == KMsvRootIndexEntryIdValue); +00426 +00427 // --- Can create messages in local folders --- +00428 if (aNewEntry.iType == KUidMsvMessageEntry) +00429 return (aParent.iMtm.iUid == KMsvLocalServiceIndexEntryIdValue); +00430 +00431 return EFalse; +00432 } +00433 +00434 TBool CTxtiMtmUiData::CanDeleteServiceL(const TMsvEntry& aService, TInt& aReasonResourceId)const +00435 { +00436 __ASSERT_ALWAYS(aService.iMtm==KUidMsgTypeText, Panic(ETxtiMtmUdWrongMtm)); +00437 +00438 aReasonResourceId=R_EIK_TBUF_NOT_AVAILABLE; // There is no resource string for this operation +00439 return EFalse; +00440 } +00441 +00442 TBool CTxtiMtmUiData::CanCancelL(const TMsvEntry& /*aContext*/, TInt& /*aReasonResourceId*/) const +00443 { +00444 return EFalse; +00445 } +00446 +00447 HBufC* CTxtiMtmUiData::StatusTextL(const TMsvEntry& /*aContext*/) const +00448 { +00449 return StringLoader::LoadL(R_TEXTUD_STATUS_TEXT, iCoeEnv ); +00450 } +