diff -r f345bda72bc4 -r 43e37759235e Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_cal_example_8cpp-source.html --- a/Symbian3/Examples/guid-6013a680-57f9-415b-8851-c4fa63356636/_cal_example_8cpp-source.html Tue Mar 30 11:56:28 2010 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,525 +0,0 @@ - - -TB10.1 Example Applications: examples/AppEngine/CalInterimApi/CalExample.cpp Source File - - - - -

examples/AppEngine/CalInterimApi/CalExample.cpp

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 //
-00015 
-00016 #include "CalExample.h"
-00017 
-00018 #include <calinstance.h>
-00019 
-00020 CCalExample::CCalExample()
-00021         {
-00022         }
-00023 
-00024 CCalExample::~CCalExample()
-00025         {
-00026         _LIT(KExitMsg,"\n\nPress any key to exit the application ");
-00027         iConsole->Printf(KExitMsg); 
-00028         iConsole->Getch();
-00029         
-00030         delete iCalEntryView;
-00031         delete iCalSession;     
-00032         delete iConsole; 
-00033         }
-00034 
-00035 CCalExample* CCalExample::NewL()
-00036         {
-00037         CCalExample* self= new (ELeave) CCalExample();
-00038         CleanupStack::PushL(self);
-00039         self->ConstructL();
-00040         CleanupStack::Pop();    
-00041         return self;
-00042         }
-00043 
-00044 void CCalExample::ConstructL()
-00045         {
-00046         _LIT(KTitle, "calexample" );
-00047         iConsole = Console::NewL(KTitle,TSize(KConsFullScreen,KConsFullScreen));
-00048 
-00049         _LIT(KPressAKeyMsg, "\n\nPress any key to step through the example");
-00050         iConsole->Printf ( KPressAKeyMsg );
-00051         iConsole->Getch ();
-00052         
-00053         iCalSession = CCalSession::NewL();
-00054         // Create and open a calendar file
-00055         _LIT(KFileName,"calendarfile");
-00056         TRAPD(err, iCalSession->CreateCalFileL(KFileName));
-00057         // ignore KErrAlreadyExists leave code
-00058         if (err != KErrAlreadyExists)
-00059                 {
-00060                 User::LeaveIfError(err);
-00061                 }
-00062         // Open the calendar file
-00063         iCalSession->OpenL(KFileName);
-00064         
-00065         _LIT(KProgressMsg, "\nCalendar entry view creation is in progress...");
-00066         iConsole->Printf(KProgressMsg); 
-00067         // Create a calendar entry view to view the entries
-00068         iCalEntryView = CCalEntryView::NewL(*iCalSession,*this);
-00069         CActiveScheduler::Start();              
-00070         }
-00071 
-00072 // Called during calendar entry view creation
-00073 void CCalExample::Progress(TInt aProgress)
-00074         {
-00075         _LIT(KProgressVal,"\n%d%% complete");
-00076         iConsole->Printf(KProgressVal,aProgress);
-00077         }
-00078 
-00079 // Called on completion of calendar entry view creation
-00080 void CCalExample::Completed(TInt /*aError*/)
-00081         {
-00082         CActiveScheduler::Stop();
-00083         }
-00084 
-00085 // Returns whether or not progress notification is required
-00086 TBool CCalExample::NotifyProgress()
-00087         {
-00088         // Progress notification is required
-00089         return ETrue;
-00090         }
-00091                 
-00092 // Sets some entry details - start and end date/time, description, categories and attendees
-00093 void CCalExample::SetEntryDetailsL(CCalEntry* aEntry,const TDesC& aDescription, TDateTime& aStartTime,TDateTime& aEndTime)
-00094         {
-00095         TCalTime startTime;
-00096         TCalTime endTime;
-00097         
-00098         // Set the start and end times using time values local to the current system time zone
-00099         startTime.SetTimeLocalL(aStartTime);
-00100         endTime.SetTimeLocalL(aEndTime);
-00101         aEntry->SetStartAndEndTimeL(startTime, endTime);        
-00102 
-00103         // Set the description text
-00104         aEntry->SetDescriptionL(aDescription);  
-00105         
-00106         // Add a category
-00107         const RPointerArray<CCalCategory> categoryList = aEntry->CategoryListL();
-00108         if(categoryList.Count() == 0)
-00109                 {
-00110                 TBuf<32> buf;
-00111                 _LIT(KCategoryName, "Dummy Category");
-00112                 buf.Copy(KCategoryName);
-00113                 
-00114                 CCalCategory* category = CCalCategory::NewL(buf);
-00115                 CleanupStack::PushL(category);
-00116                 aEntry->AddCategoryL(category);
-00117                 CleanupStack::Pop(category);
-00118                 } 
-00119                 
-00120         // Add some attendees
-00121         const RPointerArray<CCalAttendee>attendeeList = aEntry->AttendeesL();
-00122         if(attendeeList.Count() == 0)
-00123                 {
-00124                 _LIT(KAttendeeOne, "nokiauk@nokia.com");
-00125                 _LIT(KAttendeeTwo, "nokiaindia@nokia.com");
-00126 
-00127                 CCalAttendee* attendeeOne = CCalAttendee::NewL(KAttendeeOne);
-00128                 CleanupStack::PushL(attendeeOne);       
-00129                 aEntry->AddAttendeeL(attendeeOne);      
-00130                 CleanupStack::Pop(attendeeOne);
-00131         
-00132                 CCalAttendee* attendeeTwo = CCalAttendee::NewL(KAttendeeTwo);
-00133                 CleanupStack::PushL(attendeeTwo);       
-00134                 aEntry->AddAttendeeL(attendeeTwo);
-00135                 CleanupStack::Pop(attendeeTwo);
-00136                 }
-00137         }
-00138         
-00139 // Add a non-repeating appointment to the calendar file
-00140 void CCalExample::AddEntryL()
-00141         { 
-00142         const TDesC8& guidDes = KGuid;
-00143         HBufC8* guid = guidDes.AllocL();
-00144         
-00145         CCalEntry* entry = CCalEntry::NewL(CCalEntry::EAppt, guid, CCalEntry::EMethodNone, 0);
-00146         CleanupStack::PushL(entry);
-00147                 
-00148         // For an appointment, the time as well as the date is relevant
-00149         TDateTime startTime(2006, EJanuary, 04, 10, 0, 0, 0);
-00150         TDateTime endTime(2006, EJanuary, 05, 16, 0, 0, 0);
-00151         
-00152         _LIT(KAddingMsg, "\n\nAdding an entry...");
-00153         iConsole->Printf ( KAddingMsg );
-00154                 
-00155         _LIT(KDescription,"Meeting is scheduled in 1st week of January");
-00156         SetEntryDetailsL(entry,KDescription, startTime, endTime);
-00157                 
-00158         RPointerArray<CCalEntry> array;
-00159         CleanupClosePushL(array);
-00160         array.AppendL(entry);
-00161 
-00162         TInt success(0);
-00163         // If StoreL() leaves, 'success' contains the number of entries that were
-00164         // stored before it failed
-00165         iCalEntryView->StoreL(array, success);
-00166 
-00167         CleanupStack::PopAndDestroy(&array);
-00168         CleanupStack::PopAndDestroy(entry);
-00169         }
-00170 
-00171 // Destroy the RPointerArray
-00172 void DestroyRPointerArray(TAny* aPtr)
-00173         {
-00174         RPointerArray<CCalEntry>* self = static_cast<RPointerArray<CCalEntry>*> (aPtr);
-00175         self->ResetAndDestroy();
-00176         }
-00177 
-00178 // Fetch the entry and update some of its details
-00179 void CCalExample::UpdateEntryL()
-00180         {
-00181         RPointerArray<CCalEntry> array;
-00182         CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &array));
-00183         iCalEntryView->FetchL(KGuid, array);
-00184 
-00185         //Fetch the first entry in the list
-00186         _LIT(KUpdatingMsg,"\n\nUpdating the entry...");
-00187         iConsole->Printf(KUpdatingMsg);
-00188         CCalEntry* entry = array[0];
-00189         
-00190         _LIT(KNewDescription,"Meeting rescheduled to 2nd week of January");
-00191         TDateTime startTime(2006, EJanuary, 11, 10, 0, 0, 0); 
-00192         TDateTime endTime(2006, EJanuary, 12, 16, 0, 0, 0);
-00193         SetEntryDetailsL(entry,KNewDescription, startTime, endTime);    
-00194                         
-00195         TInt numberOfEntries(0);
-00196         // If UpdateL() leaves, 'numberOfEntries' contains the number of entries that were
-00197         // updated before it failed
-00198         iCalEntryView->UpdateL(array,numberOfEntries);
-00199         CleanupStack::PopAndDestroy(&array);
-00200         }
-00201         
-00202 // Add a repeating appointment. This is called the originating entry.
-00203 void CCalExample::AddOriginatingEntryL()
-00204         {
-00205         _LIT(KAddingMsg, "\n\nAdding a repeating entry...");
-00206         iConsole->Printf ( KAddingMsg );
-00207         
-00208         TTime startTime(TDateTime(2006, EJanuary, 0, 14, 0, 0, 0)); // January 1st 2pm
-00209         TTime endTime(startTime + TTimeIntervalHours(1)); // January 1st 3pm    
-00210         
-00211         const TDesC8& guidDes = KGuid;
-00212         HBufC8* guid = guidDes.AllocL();
-00213         CCalEntry* originatingEntry = CCalEntry::NewL(CCalEntry::EAppt, guid, CCalEntry::EMethodNone, 0);
-00214         CleanupStack::PushL(originatingEntry);
-00215         
-00216         _LIT(KDescription,"An originating entry");
-00217         originatingEntry->SetDescriptionL(KDescription);
-00218         
-00219         TCalTime entryStartTime;
-00220         entryStartTime.SetTimeLocalL(startTime);
-00221         TCalTime entryEndTime;
-00222         entryEndTime.SetTimeLocalL(endTime);
-00223         originatingEntry->SetStartAndEndTimeL(entryStartTime, entryEndTime);
-00224         
-00225         // Set the repeat rule
-00226         // The entry repeats weekly with 3 instances being created
-00227         TCalRRule weeklyRptRule(TCalRRule::EWeekly);
-00228         weeklyRptRule.SetDtStart(entryStartTime);       
-00229         weeklyRptRule.SetCount(3); 
-00230         weeklyRptRule.SetInterval(1);
-00231         // Also need to set the day that the entry repeats on
-00232         RArray<TDay> days;
-00233         CleanupClosePushL(days);
-00234         days.AppendL(ESunday);
-00235         weeklyRptRule.SetByDay(days);
-00236         CleanupStack::PopAndDestroy(&days);
-00237         originatingEntry->SetRRuleL(weeklyRptRule);
-00238 
-00239         // Now write the entry to the view
-00240         RPointerArray<CCalEntry> array;
-00241         CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &array));
-00242         array.AppendL(originatingEntry);
-00243         TInt success(0);
-00244         // If StoreL() leaves, 'success' contains the number of entries that were
-00245         // stored before it failed
-00246         iCalEntryView->StoreL(array, success);
-00247         
-00248         // clean up     
-00249         array.Close();
-00250         CleanupStack::PopAndDestroy(&array);
-00251         CleanupStack::PopAndDestroy(originatingEntry);  
-00252         }
-00253         
-00254 // Adds a modifying, or "child" entry.
-00255 // A modifying entry modifies one or more instances of the "originating" repeating entry. 
-00256 // It has the same UID, and is deleted when the originating entry is deleted.
-00257 void CCalExample::AddmodifyingEntryL()
-00258         {
-00259         RPointerArray<CCalEntry> modifyingArray;
-00260         CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &modifyingArray));
-00261         
-00262         _LIT(KAddingMsg, "\n\nAdding a modifying entry...");
-00263         iConsole->Printf ( KAddingMsg );
-00264         // Create repeating modifying entry
-00265         // Has the same recurrence Id as the second instance of the originating and
-00266         // this and all future instances are modified.
-00267         TTime recurrenceId(TDateTime(2006, EJanuary, 7, 14, 0, 0, 0)); // January 8th 2pm
-00268         TCalTime recurrenceIdCal;
-00269         recurrenceIdCal.SetTimeLocalL(recurrenceId);
-00270         
-00271         const TDesC8& guidDes = KGuid;
-00272         HBufC8* guid = guidDes.AllocL();
-00273 
-00274         // Entry type is appointment, group scheduling method none and modifying this and all future instances 
-00275         CCalEntry* modifyingEntry = CCalEntry::NewL(CCalEntry::EAppt, guid, CCalEntry::EMethodNone, 1, recurrenceIdCal, CalCommon::EThisAndFuture);
-00276         CleanupStack::PushL(modifyingEntry);
-00277 
-00278         // The modifying entry has a different description to the originating entry
-00279         _LIT(KChildDescription,"A modifying entry");
-00280         modifyingEntry->SetDescriptionL(KChildDescription);
-00281         // The modifying entry modifies the originating entry's date by one day
-00282         TTime childStartTime(TDateTime(2006, EJanuary, 8, 14, 0, 0, 0)); // January 9th 2pm
-00283         TTime childEndTime(childStartTime + TTimeIntervalHours(1)); // January 9th 3pm
-00284         
-00285         TCalTime childEntryStartTime;
-00286         childEntryStartTime.SetTimeLocalL(childStartTime);
-00287         TCalTime childEntryEndTime;
-00288         childEntryEndTime.SetTimeLocalL(childEndTime);
-00289         modifyingEntry->SetStartAndEndTimeL(childEntryStartTime, childEntryEndTime);
-00290         // Target instance for recurrence range in the modifying entry is second instance
-00291         TCalRRule childRptRule(TCalRRule::EWeekly);
-00292         childRptRule.SetDtStart(childEntryStartTime);
-00293         childRptRule.SetCount(2); 
-00294         childRptRule.SetInterval(1);
-00295         
-00296         // The modifying entry modifies the originating entry by occurring on Mondays
-00297         RArray<TDay> days;
-00298         CleanupClosePushL(days);
-00299         days.AppendL(EMonday);
-00300         childRptRule.SetByDay(days);
-00301         CleanupStack::PopAndDestroy(&days);
-00302         modifyingEntry->SetRRuleL(childRptRule);
-00303 
-00304         // add the modifying entry to the entry view.
-00305         modifyingArray.AppendL(modifyingEntry);
-00306 
-00307         TInt success(0);
-00308         // If StoreL() leaves, 'success' contains the number of entries that were
-00309         // stored before it failed
-00310         iCalEntryView->StoreL(modifyingArray, success); 
-00311 
-00312         // clean up     
-00313         CleanupStack::PopAndDestroy(modifyingEntry);
-00314         modifyingArray.Reset();
-00315         CleanupStack::PopAndDestroy(&modifyingArray);   
-00316         }
-00317         
-00318 // Searches for all instances in January, then prints out their details.
-00319 // Creates an instance view to display the instances. 
-00320 void CCalExample::FindInstanceL()
-00321         { 
-00322         _LIT(KPressAKeyMsg, "\n\nPress any key to view the instances");
-00323         iConsole->Printf(KPressAKeyMsg);
-00324         iConsole->Getch ();
-00325         _LIT(KProgressMsg, "\nCalendar instance view creation is in progress...");
-00326         iConsole->Printf(KProgressMsg);         
-00327         CCalInstanceView* instanceView = CCalInstanceView::NewL(*iCalSession, *this);
-00328         CleanupStack::PushL(instanceView);
-00329         CActiveScheduler::Start();
-00330         
-00331         RPointerArray<CCalInstance> instanceList;
-00332         CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &instanceList));
-00333         CalCommon::TCalViewFilter filter = CalCommon::EIncludeAll;
-00334         TCalTime startDateForInstanceSearch;
-00335         TCalTime endDateForInstanceSearch;
-00336         
-00337         // Set date and time range for searching for instances
-00338         startDateForInstanceSearch.SetTimeLocalL(TDateTime( 2006, EJanuary, 0, 12, 0, 0, 0));  // 1st January 12 pm
-00339         endDateForInstanceSearch.SetTimeLocalL(TDateTime( 2006, EJanuary, 30, 10, 0, 0, 0)); //  31st January 10 am
-00340         CalCommon::TCalTimeRange searchTimeRange(startDateForInstanceSearch, endDateForInstanceSearch);
-00341         
-00342         // Searches for instances within the specified date range
-00343         instanceView->FindInstanceL(instanceList, filter, searchTimeRange);
-00344         
-00345         _LIT(KInstancesFound,"\n\nFound %d instances:");
-00346         iConsole->Printf(KInstancesFound,instanceList.Count());
-00347                 
-00348         TDateTime date; 
-00349         for(TInt i = 0; i<instanceList.Count(); i++) 
-00350                 {
-00351                 TPtrC des = instanceList[i]->Entry().DescriptionL();
-00352                 _LIT(KEntryDesc,"\nDescription: %S");
-00353                 iConsole->Printf(KEntryDesc,&des); 
-00354 
-00355                 TTime time = instanceList[i]->StartTimeL().TimeLocalL();
-00356                 TBuf<40> datetimeStr;           
-00357                 _LIT(KFormat,"%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S");
-00358                 time.FormatL(datetimeStr,KFormat);
-00359                 
-00360                 // Print out the start date/time
-00361                 _LIT(KStartDate,"\nLocal instance start date/time: %S ");
-00362                 iConsole->Printf(KStartDate,&datetimeStr);
-00363                 }
-00364                 
-00365         CleanupStack::PopAndDestroy(&instanceList);     
-00366         CleanupStack::PopAndDestroy(instanceView);      
-00367         }       
-00368 
-00369 // Fetch and print the entry details
-00370 void CCalExample::PrintEntryDetailsL()
-00371         {
-00372         _LIT(KPressAKeyMsg, "\nPress any key to view entry details");
-00373         iConsole->Printf ( KPressAKeyMsg );
-00374         iConsole->Getch ();
-00375 
-00376         RPointerArray<CCalEntry> array;
-00377         CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &array));
-00378         iCalEntryView->FetchL(KGuid, array);
-00379         for(TInt i=0; i<array.Count(); i++)
-00380                 {
-00381                 CCalEntry* entry = array[i];
-00382                 CleanupStack::PushL(entry);
-00383                 
-00384                 TPtrC des = entry->DescriptionL();
-00385                 _LIT(KEntryDesc," \n\nDescription: %S");
-00386                 iConsole->Printf(KEntryDesc,&des); 
-00387 
-00388                 TCalTime startTime = entry->StartTimeL();
-00389                 TCalTime endTime = entry->EndTimeL();
-00390                 TTime time = startTime.TimeLocalL();
-00391                 
-00392                 TBuf<40> datetimeStr;           
-00393                 _LIT(KFormat,"%D%M%Y%/0%1%/1%2%/2%3%/3 %:0%H%:1%T%:2%S");
-00394                 time.FormatL(datetimeStr,KFormat);
-00395                 
-00396                 // Print out the start date/time
-00397                 _LIT(KStartDate,"\nStart date/time: %S ");
-00398                 iConsole->Printf(KStartDate,&datetimeStr);
-00399                 
-00400                 // Now, print out the end date/time
-00401                 time = endTime.TimeLocalL();
-00402                 time.FormatL(datetimeStr,KFormat);
-00403                 _LIT(KEndDate,"\nEnd date/time: %S");
-00404                 iConsole->Printf(KEndDate,&datetimeStr);
-00405                 CleanupStack::Pop(entry);
-00406                 
-00407                 // Fetch category
-00408                 RPointerArray<CCalCategory> categoryList = entry->CategoryListL();
-00409                 for( int j=0; j<categoryList.Count(); j++)
-00410                         {
-00411                         const TDesC& category = categoryList[j]->ExtendedCategoryName();
-00412                         HBufC* catbuf = category.AllocL();
-00413                         _LIT(KCatType,"\nCategory type: %S");
-00414                         iConsole->Printf(KCatType,catbuf);
-00415                         delete catbuf;
-00416                         } 
-00417                                 
-00418                 // Fetch attendee
-00419                 RPointerArray<CCalAttendee> attendeeList;
-00420                 attendeeList = entry->AttendeesL();
-00421                 for( int k=0; k<attendeeList.Count(); k++)
-00422                         {
-00423                         const TDesC16& address = attendeeList[k]->Address();
-00424                         HBufC16* addr = address.AllocL();
-00425                         _LIT(KAttendee,"\nAttendee %d: %S");
-00426                         iConsole->Printf(KAttendee,k+1, addr);
-00427                         delete addr;            
-00428                         }
-00429                 }
-00430         CleanupStack::PopAndDestroy(&array);
-00431         }
-00432 
-00433 // Delete the originating entry 
-00434 void CCalExample::DeleteEntryL()
-00435         {
-00436         _LIT(KPressAKeyMsg, "\n\nPress any key to delete the originating entry, (also deletes the modifying entry)");
-00437         iConsole->Printf ( KPressAKeyMsg );
-00438         iConsole->Getch ();
-00439         
-00440         RPointerArray<CCalEntry> entryArray;
-00441         CleanupStack::PushL(TCleanupItem(DestroyRPointerArray, &entryArray));
-00442         
-00443         // Fetch the entry to be deleted
-00444         iCalEntryView->FetchL(KGuid, entryArray);
-00445         CCalEntry* entry = entryArray[0];
-00446 
-00447         // Delete originating entry, thereby also deleting the modifying entry
-00448         iCalEntryView->DeleteL(*entry);
-00449         CleanupStack::PopAndDestroy(&entryArray);                       
-00450         }
-00451 
-00452 LOCAL_C void MainL()
-00453         {
-00454         CCalExample* app = CCalExample::NewL();
-00455         CleanupStack::PushL(app);
-00456         
-00457         // Add an entry and display the entry details
-00458         app->AddEntryL();
-00459         app->PrintEntryDetailsL();      
-00460 
-00461         // Update an entry and display the updated entry details
-00462         app->UpdateEntryL();
-00463         app->PrintEntryDetailsL();
-00464         
-00465         // Create a repeating entry and display the entry details
-00466         app->AddOriginatingEntryL();
-00467         app->PrintEntryDetailsL(); 
-00468         
-00469         // Display the repeat instances
-00470         app->FindInstanceL();           
-00471         
-00472         // Create a modifying entry and display the entry details
-00473         app->AddmodifyingEntryL();
-00474         app->PrintEntryDetailsL(); 
-00475         
-00476         // Display the repeat instances
-00477         app->FindInstanceL();
-00478         
-00479         // Delete the originating thereby deleting the modifying entry and all repeat instances
-00480         app->DeleteEntryL();             
-00481         
-00482         CleanupStack::PopAndDestroy(app);
-00483         }
-00484 
-00485 GLDEF_C TInt E32Main()
-00486         {
-00487         __UHEAP_MARK;
-00488         // Active scheduler required as this is a console app
-00489         CActiveScheduler* scheduler=new CActiveScheduler;
-00490         
-00491         // If active scheduler has been created, install it.
-00492         if (scheduler)
-00493                 {
-00494                 CActiveScheduler::Install(scheduler); 
-00495                 
-00496                 // Cleanup stack needed
-00497                 CTrapCleanup* cleanup = CTrapCleanup::New();
-00498                 if(cleanup)
-00499                         {
-00500                         TRAPD(err, MainL());
-00501                         if(err != KErrNone)
-00502                                 {
-00503                                 _LIT(KUserPanic,"Failed to complete");  
-00504                                 User::Panic(KUserPanic, err);
-00505                                 }
-00506                         delete cleanup;
-00507                         }
-00508                 }
-00509         delete scheduler;
-00510 
-00511         __UHEAP_MARKEND;
-00512         return KErrNone;
-00513         }
-

Generated on Thu Jan 21 10:32:54 2010 for TB10.1 Example Applications by  - -doxygen 1.5.3
- -