diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/centrepexample_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/centrepexample_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,453 +0,0 @@ - -
-00001 // Copyright (c) 2006-2009 Nokia Corporation and/or its subsidiary(-ies). -00002 // All rights reserved. -00003 // This component and the accompanying materials are made available -00004 // under the terms of "Eclipse Public License v1.0" -00005 // which accompanies this distribution, and is available -00006 // at the URL "http://www.eclipse.org/legal/epl-v10.html". -00007 // -00008 // Initial Contributors: -00009 // Nokia Corporation - initial contribution. -00010 // -00011 // Contributors: -00012 // -00013 // Description: -00014 // This example program demonstrates the use of the Central Repository. -00015 // The code demonstrates how to open this repository, read its settings, -00016 // change them, perform read-write operations in a transaction, -00017 // find settings, restore default settings, request change notifications -00018 // and delete settings. -00019 // The program requires that before it is run a data file representing -00020 // a repository is present in the private\10202be9 directory on the -00021 // emulator. -00022 // The example defines an example repository in the E80000AD.txt file. -00023 // This text file can be installed directly, but it is recommended -00024 // that repository files are first converted to binary format using the -00025 // CentRepConv tool. -00026 // To do this: -00027 // - Copy E80000AD.txt file to the epoc32\winscw\c location on your kit. -00028 // - Start a command line prompt, cd to epoc32\RELEASE\WINSCW\UDEB, and run the -00029 // command CentRepConv C:\E80000AD.txt -00030 // - This then displays that the file has been converted to the new binary file -00031 // E80000AD.cre. -00032 // - Copy this file to the epoc32\RELEASE\WINSCW\UDEB\Z\private\10202be9 -00033 // directory on your kit. -00034 // -00035 -00036 -00037 -00041 #include "centrepexample.h" -00042 #include <e32cons.h> -00043 #include "asyncwaiter.h" -00044 -00045 _LIT(KTitle, "Central repository example"); -00046 _LIT(KTextPressAKey, "\n\nPress any key to step through the example"); -00047 _LIT(KExit,"\nPress any key to exit the application "); -00048 _LIT(KPressAKey,"\nPress any key to continue \n"); -00049 _LIT(KErr,"\nThe repository file has not been set up. Please see the instructions in centrepexample.cpp for how to do this"); -00050 -00051 _LIT(KOpen,"\n\nOpening the repository and displaying some initial settings"); -00052 _LIT(KChangeSet,"\nChanging some settings in the repository"); -00053 _LIT(KReadSet,"\nReading the changed settings"); -00054 _LIT(KTransact,"\n\nPerforming read and write transactions"); -00055 _LIT(KDelete,"\n\nCreating integer and real number settings and deleting them"); -00056 _LIT(KMove,"\n\nMoving the key to target position"); -00057 _LIT(KReset,"\nResetting settings to default values, and getting notifications that the changes have occurred"); -00058 _LIT(KFind,"\nFinding settings for simple and structured data"); -00059 _LIT(KNonExisting,"\n\nValue of new setting is %d"); -00060 _LIT(KInt,"\nValue of setting with key x01 is %d"); -00061 _LIT(KReal,"\nValue of setting with key x02 is %f"); -00062 _LIT(KInteg,"\nValue of setting with key x06 is %d \n"); -00063 _LIT(KIntBefore,"\nValue of setting with key x01 before reset is %d"); -00064 _LIT(KIntAfter,"\nValue of setting with key x01 after reset is %d"); -00065 _LIT(KIdsFound,"\nFound %d settings"); -00066 _LIT(KStringName,"Another string"); -00067 _LIT(KString1_UpdatedValue, "Value of setting with key x05 is %s"); -00068 -00069 static const TUid KUidRepository = { 0xE80000AD }; -00070 const TUint32 KNonExistentSetting = 0x10; -00071 const TUint32 KInt1 = 0x01; -00072 const TUint32 KInt3 = 0x06; -00073 const TUint32 KReal1 = 0x02; -00074 const TUint32 KString1 = 0x05; -00075 const TInt KInt1_InitialValue = 1; -00076 const TInt KInt1_UpdatedValue = 73; -00077 const TReal KReal1_InitialValue = 14.91; -00078 const TReal KReal1_UpdatedValue = 72.8; -00079 const TUint32 KMoveTarget = 0x30; -00080 -00086 CCentRepExample* CCentRepExample::NewLC() -00087 { -00088 CCentRepExample* rep = new(ELeave) CCentRepExample(); -00089 CleanupStack::PushL(rep); -00090 rep->ConstructL(); -00091 return rep; -00092 } -00093 -00097 CCentRepExample::CCentRepExample() -00098 { -00099 } -00100 -00101 void CCentRepExample::ConstructL() -00102 { -00103 -00104 iConsole = Console::NewL(KTitle,TSize(KConsFullScreen,KConsFullScreen)); -00105 iConsole->Printf ( KTextPressAKey ); -00106 iConsole->Getch (); -00107 } -00108 -00112 CCentRepExample::~CCentRepExample() -00113 { -00114 iConsole->Printf(KExit); -00115 iConsole->Getch(); -00116 -00117 delete iConsole; -00118 delete iRepository; -00119 } -00120 -00121 -00128 void CCentRepExample::ResetL() -00129 { -00130 CRepository* repository = NULL; -00131 TRAPD(err, repository = CRepository::NewL(KUidRepository);); -00132 CleanupStack::PushL(repository); -00133 // test if an error has occurred because the repository -00134 // has not been set up: see instructions at the top -00135 // of this file if this occurs. -00136 if (err == KErrNotFound) -00137 { -00138 iConsole->Printf(KErr); -00139 } -00140 User::LeaveIfError(err); -00141 User::LeaveIfError(err = repository->Reset()); -00142 CleanupStack::PopAndDestroy(repository); -00143 } -00144 -00151 void CCentRepExample::OpenRepositoryL() -00152 { -00153 TInt i, k; -00154 TReal j; -00155 TBuf<50> tooShort; -00156 iConsole->Printf(KOpen); -00157 iRepository = CRepository::NewL(KUidRepository); -00158 -00159 User::LeaveIfError(iRepository->Get(KInt1, i)); -00160 iConsole->Printf(KInt,i); -00161 -00162 User::LeaveIfError(iRepository->Get(KReal1, j)); -00163 iConsole->Printf(KReal,j); -00164 -00165 User::LeaveIfError(iRepository->Get(KInt3, k)); -00166 iConsole->Printf(KInteg,k); -00167 -00168 User::LeaveIfError(iRepository->Get(KString1, tooShort)); -00169 iConsole->Printf(KString1_UpdatedValue,tooShort.PtrZ()); -00170 -00171 iConsole->Printf(KPressAKey); -00172 iConsole->Getch(); -00173 -00174 } -00175 -00181 void CCentRepExample::ChangeSettingsL() -00182 { -00183 iConsole->Printf(KChangeSet); -00184 User::LeaveIfError(iRepository->Set(KNonExistentSetting, 10)); -00185 -00186 User::LeaveIfError(iRepository->Set(KInt1, KInt1_UpdatedValue)); -00187 -00188 User::LeaveIfError(iRepository->Set(KReal1, KReal1_InitialValue)); -00189 -00190 User::LeaveIfError(iRepository->Set(KInt3, KInt1_InitialValue)); -00191 -00192 User::LeaveIfError(iRepository->Set(KString1, KStringName)); -00193 -00194 } -00195 -00201 void CCentRepExample::ReadSettingsL() -00202 { -00203 TInt m, i, k; -00204 TReal j; -00205 TBuf<50> tooShort; -00206 iConsole->Printf(KReadSet); -00207 -00208 User::LeaveIfError(iRepository->Get(KNonExistentSetting, m)); -00209 -00210 iConsole->Printf(KNonExisting,m); -00211 -00212 User::LeaveIfError(iRepository->Get(KInt1, i)); -00213 -00214 iConsole->Printf(KInt,i); -00215 -00216 User::LeaveIfError(iRepository->Get(KReal1, j)); -00217 -00218 iConsole->Printf(KReal,j); -00219 -00220 User::LeaveIfError(iRepository->Get(KInt3, k)); -00221 -00222 iConsole->Printf(KInteg,k); -00223 -00224 User::LeaveIfError(iRepository->Get(KString1, tooShort)); -00225 -00226 iConsole->Printf(KString1_UpdatedValue,tooShort.PtrZ()); -00227 -00228 iConsole->Printf(KPressAKey); -00229 iConsole->Getch(); -00230 -00231 } -00232 -00240 void CCentRepExample::FindSettingsL() -00241 { -00242 RArray<TUint32> foundIds; -00243 -00244 // Finds all the settings that exist and match the specification -00245 //given by partialKey and mask. -00246 iConsole->Printf(KFind); -00247 -00248 // These values will instruct Find to return the all settings keys which -00249 //match the pattern 000001XXh where X indicates a ‘don’t care’ state. -00250 -00251 User::LeaveIfError(iRepository->FindL(0x100 /*partialKey*/, 0xF00/*mask*/, foundIds)); -00252 -00253 iConsole->Printf(KIdsFound,foundIds.Count()); -00254 foundIds.Reset(); -00255 -00256 // Finds all the settings that contain a given integer and -00257 //match the specification given by partialKey and mask. -00258 -00259 User::LeaveIfError(iRepository->FindEqL(0x00/*partialKey*/, 0x00/*mask*/,KInt1_InitialValue /*integer value*/, foundIds)); -00260 -00261 iConsole->Printf(KIdsFound,foundIds.Count()); -00262 foundIds.Reset(); -00263 -00264 // Finds all the settings that contain the given floating point value -00265 //and match the specification given by partialKey and mask. -00266 User::LeaveIfError(iRepository->FindEqL(0x00, 0x00,KReal1_InitialValue/*Real value*/, foundIds)); -00267 -00268 iConsole->Printf(KIdsFound,foundIds.Count()); -00269 foundIds.Reset(); -00270 -00271 // Finds all the settings that contain a given string value -00272 //and match the specification given by partialKey and mask. -00273 -00274 User::LeaveIfError(iRepository->FindEqL(0x00, 0x00, KStringName/*string*/, foundIds)); -00275 -00276 iConsole->Printf(KIdsFound,foundIds.Count()); -00277 foundIds.Reset(); -00278 -00279 // Finds all the settings that match the specification given -00280 // by partialKey and mask, but are either not integer values or -00281 //do not have the given value. -00282 -00283 User::LeaveIfError(iRepository->FindNeqL(0x00/*partial key*/, 0x00/*mask*/, KInt1_UpdatedValue, foundIds)); -00284 -00285 iConsole->Printf(KIdsFound,foundIds.Count()); -00286 foundIds.Reset(); -00287 -00288 // Finds all the settings that match the specification given by -00289 //partialKey and mask, but are either not floating point values -00290 //or do not have the given value. -00291 -00292 User::LeaveIfError(iRepository->FindNeqL(0x100, 0x0F0, KReal1_UpdatedValue, foundIds)); -00293 -00294 iConsole->Printf(KIdsFound,foundIds.Count()); -00295 foundIds.Reset(); -00296 -00297 } -00303 void CCentRepExample::ResetAndNotifyL() -00304 { -00305 TInt x; -00306 -00307 // Ensure KInt1 is set to a different value to its initial value -00308 // First change to setting should cause notification -00309 iConsole->Printf(KReset); -00310 -00311 User::LeaveIfError(iRepository->Set(KInt1, KInt1_InitialValue+10)); -00312 -00313 -00314 User::LeaveIfError(iRepository->Get(KInt1, x)); -00315 -00316 iConsole->Printf(KIntBefore, x); -00317 -00318 CAsyncWaiter* waiter = CAsyncWaiter::NewL(); -00319 CleanupStack::PushL(waiter); -00320 -00321 User::LeaveIfError(iRepository->NotifyRequest(KInt1, waiter->iStatus)); -00322 -00323 // Get a notification on a reset as well -00324 -00325 User::LeaveIfError(iRepository->Reset(KInt1)); -00326 -00327 // Check we got a notification -00328 waiter->StartAndWait(); -00329 User::LeaveIfError(waiter->Result()); -00330 -00331 // Check KInt1 now has the right value -00332 User::LeaveIfError(iRepository->Get(KInt1, x)); -00333 iConsole->Printf(KIntAfter, x); -00334 -00335 CleanupStack::PopAndDestroy(waiter); -00336 } -00337 -00342 void CCentRepExample::MoveSettingsL() -00343 { -00344 TUint32 keyInfo; -00345 -00346 iConsole->Printf(KMove); -00347 iConsole->Printf(KPressAKey); -00348 iConsole->Getch(); -00349 // Move the key to the target position -00350 User::LeaveIfError(iRepository->Move(KInt3, KMoveTarget, 0xFFFFFFFF, -00351 keyInfo)); -00352 } -00353 -00358 void CCentRepExample::TransactionFuncL() -00359 { -00360 TUint32 keyId; -00361 TInt intVal; -00362 -00363 iConsole->Printf(KTransact); -00364 -00365 // Attempts to start a read write transaction. -00366 User::LeaveIfError(iRepository->StartTransaction(CRepository::EReadWriteTransaction)); -00367 -00368 // Calls FailTransaction if activated by a Leave or PopAndDestroy. -00369 iRepository->CleanupCancelTransactionPushL(); -00370 -00371 // Creating the variable KNewInt at 0x16 -00372 const TUint32 KNewInt = 0x16; -00373 const TInt KIntValue = 1201; -00374 intVal = KIntValue +33; -00375 -00376 // Perform some write operations. -00377 // Creating KNewInt with the value KIntValue. -00378 User::LeaveIfError(iRepository->Create(KNewInt, KIntValue)); -00379 // Setting KNewInt to the new value -00380 User::LeaveIfError(iRepository->Set(KNewInt,intVal)); -00381 -00382 // Persistence of all values read and written during the transaction -00383 // is only guaranteed after a successful return from CommitTransaction. -00384 User::LeaveIfError(iRepository->CommitTransaction(keyId)); -00385 -00386 // Read the data written. -00387 User::LeaveIfError(iRepository->Get(KNewInt, intVal)); -00388 -00389 // Deleting the data after reading it. -00390 User::LeaveIfError(iRepository->Delete(KNewInt)); -00391 CleanupStack::Pop(); -00392 -00393 CRepository* repository1; -00394 User::LeaveIfNull(repository1 = CRepository::NewLC(KUidRepository)); -00395 -00396 // Begin read transaction for repository1 -00397 User::LeaveIfError(repository1->StartTransaction(CRepository::EReadTransaction)); -00398 -00399 CRepository* repository2; -00400 User::LeaveIfNull(repository2 = CRepository::NewLC(KUidRepository)); -00401 -00402 // Should be able to start another read transaction (Multiple read transactions) -00403 User::LeaveIfError(repository2->StartTransaction(CRepository::EReadTransaction)); -00404 -00405 // Perform some gets using the open transactions and repositories -00406 // Read operation -00407 User::LeaveIfError(repository1->Get(KInt1, intVal)); -00408 // Ensure transaction cancelled if following code Leaves: -00409 repository1->CleanupCancelTransactionPushL(); -00410 -00411 // Commit the transaction -00412 User::LeaveIfError(repository1->CommitTransaction(keyId)); -00413 CleanupStack::Pop(); -00414 -00415 // Calls FailTransaction if activated by a Leave or PopAndDestroy. -00416 repository2->CleanupCancelTransactionPushL(); -00417 User::LeaveIfError(repository2->Get(KInt1, intVal)); -00418 User::LeaveIfError(repository2->CommitTransaction(keyId)); -00419 -00420 // Pop the transaction -00421 CleanupStack::Pop(); -00422 CleanupStack::PopAndDestroy(2,repository1); -00423 -00424 -00425 } -00426 -00431 void CCentRepExample::DeleteL() -00432 { -00433 TInt x; -00434 TReal y; -00435 -00436 iConsole->Printf(KDelete); -00437 -00438 User::LeaveIfError(iRepository->Get(KInt1_InitialValue, x)); -00439 User::LeaveIfError(iRepository->Get(KReal1, y)); -00440 User::LeaveIfError(iRepository->Delete(KInt1_InitialValue)); -00441 User::LeaveIfError(iRepository->Delete(KMoveTarget)); -00442 User::LeaveIfError(iRepository->Delete(KReal1)); -00443 } -00444 -00445 LOCAL_C void MainL() -00446 { -00447 // Create an Active Scheduler to handle asychronous calls -00448 CActiveScheduler* scheduler = new (ELeave) CActiveScheduler; -00449 CleanupStack::PushL(scheduler); -00450 CActiveScheduler::Install( scheduler ); -00451 CCentRepExample * app = CCentRepExample ::NewLC(); -00452 -00453 // Reset the repository -00454 app->ResetL(); -00455 -00456 // Open the repository -00457 app->OpenRepositoryL(); -00458 -00459 // Change the existing settings -00460 app->ChangeSettingsL(); -00461 -00462 // Read the changed settings -00463 app->ReadSettingsL(); -00464 -00465 // Find the settings using FindL, FindEqL and FindNeqL -00466 app->FindSettingsL(); -00467 -00468 // Move settings -00469 app->MoveSettingsL(); -00470 -00471 // Reset settings to default values and get notification -00472 app->ResetAndNotifyL(); -00473 -00474 // Perform multiple operations in a transaction -00475 app->TransactionFuncL(); -00476 -00477 // Delete settings -00478 app->DeleteL(); -00479 -00480 CleanupStack::PopAndDestroy(2); //app, scheduler -00481 -00482 } -00483 -00484 GLDEF_C TInt E32Main() -00485 { -00486 __UHEAP_MARK; -00487 CTrapCleanup* cleanup = CTrapCleanup::New(); -00488 if(cleanup == NULL) -00489 { -00490 return KErrNoMemory; -00491 } -00492 TRAPD(err, MainL()); -00493 if(err != KErrNone) -00494 { -00495 User::Panic(_L("Failed to complete"),err); -00496 } -00497 -00498 delete cleanup; -00499 __UHEAP_MARKEND; -00500 return KErrNone; -00501 } -