--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/messagingappbase/smartmessaging/vcalbc/src/VCalBcDataFiller.cpp Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,417 @@
+/*
+* 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 "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:
+* A helper class for filling the viewer component with data from a
+* calendar item.
+*
+*/
+
+
+
+
+// INCLUDE FILES
+#include "VCalBcDataFiller.h" // CVCalBcDataFiller
+#include "VCalBcPanics.h" // panic codes
+
+#include <calentry.h>
+#include <calalarm.h>
+#include <StringLoader.h> // StringLoader
+#include <vcalbc.rsg> // resouce identifiers
+#include <avkon.rsg> // resouce identifiers
+#include <CRichBio.h> // CRichBio
+
+// CONSTANTS
+
+const TInt KMaxDateTimeTextLength = 100;
+const TInt KRepeatIntervalBiWeekly = 2;
+
+// MEMBER FUNCTIONS
+
+CVCalBcDataFiller::~CVCalBcDataFiller()
+ {
+ delete iDateFormat;
+ delete iTimeFormat;
+ delete iSummaryDescr;
+ }
+
+void CVCalBcDataFiller::FillViewerWithDataL(
+ CRichBio& aViewer,
+ CCalEntry& aEntry,
+ CCoeEnv& aCoeEnv)
+ {
+ // An instance is used because otherwise we would have to pass around many
+ // arguments.
+ CVCalBcDataFiller* filler = CVCalBcDataFiller::NewLC(aEntry, aCoeEnv);
+ filler->FillViewerWithDataL(aViewer);
+ CleanupStack::PopAndDestroy(filler);
+ }
+
+void CVCalBcDataFiller::FillViewerWithDataL(CRichBio& aViewer)
+ {
+ __ASSERT_DEBUG(&aViewer != NULL, Panic(ENullViewer));
+
+ TTime startTime(Time::NullTTime());
+ //we want to trap KErrArgument if time is not set
+ TRAP_IGNORE((startTime = iEntry.StartTimeL().TimeLocalL()));
+
+ TTime endTime(Time::NullTTime());
+ TRAP_IGNORE((endTime = iEntry.EndTimeL().TimeLocalL()));
+
+ CCalEntry::TType type( iEntry.EntryTypeL() );
+ if (type == CCalEntry::EAnniv)
+ {
+ AddAnniversarySpecificInfoL(aViewer, startTime);
+ }
+ else if (type == CCalEntry::EAppt)
+ {
+ AddMeetingSpecificInfoL(aViewer, startTime, endTime);
+ }
+ else if (type == CCalEntry::EEvent)
+ {
+ AddDaynoteSpecificInfoL(aViewer, startTime, endTime);
+ }
+ else if (type ==CCalEntry::ETodo)
+ {
+ AddVTodoSpecificInfoL(aViewer);
+ }
+ else
+ {
+ // The class CCalenImporter is responsible for checking the Series 60
+ // compatibility of the entry. It is used before coming here.
+ __ASSERT_ALWAYS(EFalse, Panic(EUnsupportedEntryType));
+ return;
+ }
+
+ if (type != CCalEntry::ETodo)
+ {
+ AddConfidentialityInfoL(aViewer);
+ }
+
+ //the description field is supported by all entry types
+ AddDescriptionInfoL( aViewer );
+ }
+
+void CVCalBcDataFiller::AddAnniversarySpecificInfoL(
+ CRichBio& aViewer,
+ const TTime& aStartTime)
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_TYPELABEL, R_QTN_SM_CAL_TYPE_ANNIV);
+ AddItemL(aViewer, R_QTN_SM_CAL_ANNIVERS_SUBJECT, *iSummaryDescr);
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_ANNIVERS_DATE, aStartTime);
+ AddAlarmInfoL(aViewer);
+ }
+
+void CVCalBcDataFiller::AddMeetingSpecificInfoL(
+ CRichBio& aViewer,
+ const TTime& aStartTime,
+ const TTime& aEndTime)
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_TYPELABEL, R_QTN_SM_CAL_TYPE_MEETING);
+ AddItemL(aViewer, R_QTN_SM_CAL_MEETING_SUBJECT, *iSummaryDescr);
+ if (iEntry.LocationL().Length() > 0)
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_MEETING_LOCATION, iEntry.LocationL());
+ }
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_STARTDATE, aStartTime);
+ AddItemAsTimeL(aViewer, R_QTN_SM_CAL_MEETING_START_TIME, aStartTime);
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_ENDDATE, aEndTime);
+ AddItemAsTimeL(aViewer, R_QTN_SM_CAL_MEETING_END_TIME, aEndTime);
+ AddAlarmInfoL(aViewer);
+ AddRepeatInfoL(aViewer);
+ }
+
+void CVCalBcDataFiller::AddDaynoteSpecificInfoL(
+ CRichBio& aViewer,
+ const TTime& aStartTime,
+ const TTime& aEndTime)
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_TYPELABEL, R_QTN_SM_CAL_TYPE_DAYNOTE);
+ AddItemL(aViewer, R_QTN_SM_CAL_DAY_NOTE_SUBJECT, *iSummaryDescr);
+
+ TInt duration = aEndTime.DaysFrom(aStartTime).Int();
+
+ if(duration > 0)
+ duration--;
+ TTimeIntervalDays offset(duration);
+
+ TTime endTime(aStartTime);
+ endTime += offset;
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_STARTDATE, aStartTime);
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_ENDDATE, endTime);
+ AddRepeatInfoL(aViewer);
+ }
+
+void CVCalBcDataFiller::AddVTodoSpecificInfoL(CRichBio& aViewer)
+ {
+ AddVTodoTypeInfoL(aViewer);
+ AddVTodoSubjectInfoL(aViewer);
+ AddVTodoDueDateInfoL(aViewer);
+ AddVTodoAlarmInfoL(aViewer);
+ AddVTodoPriorityInfoL(aViewer);
+ }
+
+void CVCalBcDataFiller::AddAlarmInfoL(
+ CRichBio& aViewer)
+ {
+ CCalAlarm* alarm = iEntry.AlarmL();
+ if ( alarm )
+ {
+ CleanupStack::PushL( alarm );
+ TTime alarmTime(iEntry.StartTimeL().TimeLocalL());
+
+ alarmTime -= alarm->TimeOffset();
+ AddItemAsTimeL(aViewer, R_QTN_SM_CAL_EVENT_ALARM_TIME, alarmTime );
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_EVENT_ALARM_DATE, alarmTime );
+ CleanupStack::PopAndDestroy( alarm );
+ }
+ }
+
+
+void CVCalBcDataFiller::AddRepeatInfoL(CRichBio& aViewer)
+ {
+ TCalRRule repeatRule;//( TCalRRule::EInvalid );
+ if( !iEntry.GetRRuleL (repeatRule) )
+ {
+ return;
+ }
+ TInt valueRes = RepeatIndexValueTextRes( repeatRule );
+ if( valueRes )
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_MEETING_REPEAT, valueRes);
+ TTime endtime = repeatRule.Until().TimeLocalL();
+ AddItemAsDateL( aViewer, R_QTN_SM_CAL_MEETING_REPEAT_UNTIL, endtime );
+ }
+ }
+
+
+TInt CVCalBcDataFiller::RepeatIndexValueTextRes(TCalRRule aRepeatRule ) const
+ {
+ TInt res = 0;
+
+ switch( aRepeatRule.Type() )
+ {
+ case TCalRRule::EInvalid:
+ {
+ // No repeat value
+ break;
+ }
+ case TCalRRule::EDaily:
+ {
+ res = R_QTN_SM_CAL_MEETING_RPT_DAILY;
+ break;
+ }
+ case TCalRRule::EWeekly:
+ {
+ if( aRepeatRule.Interval() == KRepeatIntervalBiWeekly )
+ {
+ res = R_QTN_SM_CAL_MEETING_RPT_BIWEEKLY;
+ }
+ else
+ {
+ res = R_QTN_SM_CAL_MEETING_RPT_WEEKLY;
+ }
+ break;
+ }
+ case TCalRRule::EMonthly:
+ {
+ res = R_QTN_SM_CAL_MEETING_RPT_MONTHLY;
+ break;
+ }
+ case TCalRRule::EYearly:
+ {
+ res = R_QTN_SM_CAL_MEETING_RPT_YEARLY;
+ break;
+ }
+ default:
+ {
+ // Unexpected repeat index value
+ __ASSERT_DEBUG(res, Panic(EVCalBCPanicUndefinedRepeatIndex));
+ res = R_QTN_SM_CAL_RPT_OTHER;
+ break;
+ }
+ }
+ return res;
+ }
+
+
+void CVCalBcDataFiller::AddConfidentialityInfoL(CRichBio& aViewer)
+ {
+ CCalEntry::TReplicationStatus status = iEntry.ReplicationStatusL();
+// TAgnReplicationData::TStatus status = replicationData.Status();
+ TInt valueRes = 0;
+ if (status == CCalEntry::EOpen)
+ {
+ valueRes = R_QTN_SM_CAL_SYNC_PUBLIC;
+ }
+ else if (status == CCalEntry::EPrivate)
+ {
+ valueRes = R_QTN_SM_CAL_SYNC_PRIVATE;
+ }
+ else if (status == CCalEntry::ERestricted)
+ {
+ valueRes = R_QTN_SM_CAL_SYNC_NO_SYNC;
+ }
+ __ASSERT_DEBUG(valueRes, Panic(EInvalidConfid));
+ AddItemL(aViewer, R_QTN_SM_CAL_SYNCHRONISATION, valueRes);
+ }
+
+
+void CVCalBcDataFiller::AddDescriptionInfoL(CRichBio& aViewer)
+ {
+ const TDesC& descData = iEntry.DescriptionL();
+ if ( descData.Length() != 0 )
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_MEETING_DESCRIPTION, descData);
+ }
+ }
+
+
+HBufC* CVCalBcDataFiller::TextContentsFromEntryL(CCalEntry& aEntry)
+ {
+ HBufC* text = aEntry.SummaryL().AllocL();
+ /*TPtr textPtr(text->Des());
+ // Copy the text from richtext to descriptor:
+ aEntry.RichTextL()->Extract(textPtr, 0,
+ aEntry.RichTextL()->DocumentLength());
+ CleanupStack::Pop(text);*/
+ return text;
+ }
+
+void CVCalBcDataFiller::AddItemL(CRichBio& aViewer, TInt aLabelRes,
+ const TDesC& aValue)
+ {
+ // Empty fields are not shown.
+ if (aValue.Length())
+ {
+ aViewer.AddItemL(*StringLoader::LoadLC(aLabelRes, &iCoeEnv), aValue);
+ CleanupStack::PopAndDestroy(); // (label text)
+ }
+ }
+
+void CVCalBcDataFiller::AddItemL(CRichBio& aViewer, TInt aLabelRes,
+ TInt aValueRes)
+ {
+ aViewer.AddItemL(
+ *StringLoader::LoadLC(aLabelRes, &iCoeEnv),
+ *StringLoader::LoadLC(aValueRes, &iCoeEnv));
+ CleanupStack::PopAndDestroy(2); // (label and value text)
+ }
+
+void CVCalBcDataFiller::AddItemAsDateL(CRichBio& aViewer,
+ TInt aLabelRes,
+ const TTime& aTime)
+ {
+ if(aTime != Time::NullTTime())
+ {
+ TBuf<KMaxDateTimeTextLength> tmpString;
+ aTime.FormatL(tmpString, *iDateFormat);
+ AddItemL(aViewer, aLabelRes, tmpString);
+ }
+ }
+
+void CVCalBcDataFiller::AddItemAsTimeL(CRichBio& aViewer,
+ TInt aLabelRes,
+ const TTime& aTime)
+ {
+ if(aTime != Time::NullTTime())
+ {
+ TBuf<KMaxDateTimeTextLength> tmpString;
+ aTime.FormatL(tmpString, *iTimeFormat);
+ AddItemL(aViewer, aLabelRes, tmpString);
+ }
+ }
+
+CVCalBcDataFiller* CVCalBcDataFiller::NewLC(CCalEntry& aEntry, CCoeEnv& aCoeEnv)
+ {
+ __ASSERT_DEBUG(&aEntry != NULL, Panic(ENullEntryGivenToFiller));
+ CVCalBcDataFiller* self = new (ELeave)CVCalBcDataFiller(aEntry, aCoeEnv);
+ CleanupStack::PushL(self);
+ self->ConstructL();
+ return self;
+ }
+
+CVCalBcDataFiller::CVCalBcDataFiller(CCalEntry& aEntry, CCoeEnv& aCoeEnv)
+ : iCoeEnv(aCoeEnv), iEntry(aEntry)
+ {
+ }
+
+void CVCalBcDataFiller::ConstructL()
+ {
+ iDateFormat = StringLoader::LoadL(R_QTN_DATE_USUAL_WITH_ZERO, &iCoeEnv);
+ iTimeFormat = StringLoader::LoadL(R_QTN_TIME_USUAL, &iCoeEnv);
+ //Get the text field contents. It is needed for all four types of entry.
+ iSummaryDescr = TextContentsFromEntryL(iEntry);
+ }
+
+void CVCalBcDataFiller::AddVTodoTypeInfoL(CRichBio& aViewer)
+ {
+ AddItemL(aViewer, R_QTN_SM_CAL_TYPELABEL, R_QTN_SM_CAL_TYPE_TODO);
+ }
+
+void CVCalBcDataFiller::AddVTodoSubjectInfoL(CRichBio& aViewer)
+ {
+ AddItemL(aViewer, R_QTN_SM_TODO_SUBJECT, *iSummaryDescr);
+ }
+
+void CVCalBcDataFiller::AddVTodoDueDateInfoL(CRichBio& aViewer)
+ {
+ TTime dueDate(Time::NullTTime());
+ TRAP_IGNORE((dueDate = iEntry.EndTimeL().TimeLocalL()));
+ AddItemAsDateL(aViewer, R_QTN_SM_TODO_DUE_DATE, dueDate);
+ }
+
+void CVCalBcDataFiller::AddVTodoAlarmInfoL(CRichBio& aViewer)
+ {
+ CCalAlarm* alarm = iEntry.AlarmL();
+
+ if( alarm )
+ {
+ CleanupStack::PushL(alarm);
+ TTime alarmTime(iEntry.EndTimeL().TimeLocalL());
+
+ alarmTime -= alarm->TimeOffset();
+ AddItemAsTimeL(aViewer, R_QTN_SM_CAL_EVENT_ALARM_TIME, alarmTime );
+ AddItemAsDateL(aViewer, R_QTN_SM_CAL_EVENT_ALARM_DATE, alarmTime );
+ CleanupStack::PopAndDestroy(alarm);
+ }
+
+
+ }
+
+void CVCalBcDataFiller::AddVTodoPriorityInfoL(CRichBio& aViewer)
+ {
+ TUint todoPriority = iEntry.PriorityL();
+
+ TInt priorityString( 0 );
+
+ if (todoPriority == 1 )
+ {
+ priorityString = R_QTN_SM_TODO_PRIORITY_HIGH;
+ }
+ else if (todoPriority == 2)
+ {
+ priorityString = R_QTN_SM_TODO_PRIORITY_NORMAL;
+ }
+ else if (todoPriority == 3)
+ {
+ priorityString = R_QTN_SM_TODO_PRIORITY_LOW;
+ }
+
+ if( todoPriority >= 1 && todoPriority <= 3 )
+ AddItemL(aViewer, R_QTN_SM_TODO_PRIORITY, priorityString);
+
+ }
+
+// end of file
+