--- a/agendainterface/agendautil/agendautil.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/agendautil.pro Thu Jul 22 16:32:51 2010 +0100
@@ -23,7 +23,6 @@
INCLUDEPATH += . \
./inc \
../inc
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
DEFINES += XQCALENDAR_LIBRARY
@@ -31,11 +30,13 @@
LIBS += -lcalinterimapi \
-lcalenImp \
-lestor \
- -lefsrv
+ -lefsrv \
+ -lcaleninterimutils2
TARGET.UID3 = 0x20029F7F
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
}
HEADERS += ../inc/agendautil.h \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/agendautil/bwins/agendainterfaceu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,184 @@
+EXPORTS
+ ?minTime@AgendaUtil@@SA?AVQDateTime@@XZ @ 1 NONAME ; class QDateTime AgendaUtil::minTime(void)
+ ??4AgendaCategory@@QAEAAV0@ABV0@@Z @ 2 NONAME ; class AgendaCategory & AgendaCategory::operator=(class AgendaCategory const &)
+ ?addEntry@AgendaUtil@@QAEKABVAgendaEntry@@@Z @ 3 NONAME ; unsigned long AgendaUtil::addEntry(class AgendaEntry const &)
+ ??_EAgendaEntry@@UAE@I@Z @ 4 NONAME ; AgendaEntry::~AgendaEntry(unsigned int)
+ ??8AgendaEntry@@QBE_NABV0@@Z @ 5 NONAME ; bool AgendaEntry::operator==(class AgendaEntry const &) const
+ ??1AgendaAlarm@@QAE@XZ @ 6 NONAME ; AgendaAlarm::~AgendaAlarm(void)
+ ?setAlarm@AgendaEntry@@QAEXABVAgendaAlarm@@@Z @ 7 NONAME ; void AgendaEntry::setAlarm(class AgendaAlarm const &)
+ ?isNull@AgendaEntry@@QBE_NXZ @ 8 NONAME ; bool AgendaEntry::isNull(void) const
+ ?isNull@AgendaCategory@@QBE_NXZ @ 9 NONAME ; bool AgendaCategory::isNull(void) const
+ ??8AgendaRepeatRule@@QBE_NABV0@@Z @ 10 NONAME ; bool AgendaRepeatRule::operator==(class AgendaRepeatRule const &) const
+ ?entryUpdated@AgendaUtil@@IAEXK@Z @ 11 NONAME ; void AgendaUtil::entryUpdated(unsigned long)
+ ?alarmSoundName@AgendaAlarm@@QBE?AVQString@@XZ @ 12 NONAME ; class QString AgendaAlarm::alarmSoundName(void) const
+ ?alarm@AgendaEntry@@QBE?AVAgendaAlarm@@XZ @ 13 NONAME ; class AgendaAlarm AgendaEntry::alarm(void) const
+ ?responseRequested@AgendaAttendee@@QBE_NXZ @ 14 NONAME ; bool AgendaAttendee::responseRequested(void) const
+ ?startTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 15 NONAME ; class QDateTime AgendaEntry::startTime(void) const
+ ?geoValue@AgendaEntry@@QBE?AVAgendaGeoValue@@XZ @ 16 NONAME ; class AgendaGeoValue AgendaEntry::geoValue(void) const
+ ?getNextInstanceTimes@AgendaUtil@@QAEXAAVAgendaEntry@@AAVQDateTime@@1@Z @ 17 NONAME ; void AgendaUtil::getNextInstanceTimes(class AgendaEntry &, class QDateTime &, class QDateTime &)
+ ?exportAsvCalendar@AgendaUtil@@QAE_NABVQString@@J@Z @ 18 NONAME ; bool AgendaUtil::exportAsvCalendar(class QString const &, long)
+ ??_EAgendaAttendee@@UAE@I@Z @ 19 NONAME ; AgendaAttendee::~AgendaAttendee(unsigned int)
+ ??9AgendaAlarm@@QBE_NABV0@@Z @ 20 NONAME ; bool AgendaAlarm::operator!=(class AgendaAlarm const &) const
+ ?isNull@AgendaAlarm@@QBE_NXZ @ 21 NONAME ; bool AgendaAlarm::isNull(void) const
+ ?extendedCategoryName@AgendaCategory@@QBE?AVQString@@XZ @ 22 NONAME ; class QString AgendaCategory::extendedCategoryName(void) const
+ ?entryIds@AgendaUtil@@QAE?AV?$QList@K@@W4FilterFlags@1@@Z @ 23 NONAME ; class QList<unsigned long> AgendaUtil::entryIds(enum AgendaUtil::FilterFlags)
+ ?isRepeating@AgendaEntry@@QAE_NXZ @ 24 NONAME ; bool AgendaEntry::isRepeating(void)
+ ?clearRepeatingProperties@AgendaUtil@@QAEXAAVAgendaEntry@@@Z @ 25 NONAME ; void AgendaUtil::clearRepeatingProperties(class AgendaEntry &)
+ ?deleteRepeatedEntry@AgendaUtil@@QAEXAAVAgendaEntry@@W4RecurrenceRange@1@@Z @ 26 NONAME ; void AgendaUtil::deleteRepeatedEntry(class AgendaEntry &, enum AgendaUtil::RecurrenceRange)
+ ?tr@AgendaUtil@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString AgendaUtil::tr(char const *, char const *, int)
+ ?description@AgendaEntry@@QBE?AVQString@@XZ @ 28 NONAME ; class QString AgendaEntry::description(void) const
+ ??0AgendaUtil@@QAE@PAVQObject@@@Z @ 29 NONAME ; AgendaUtil::AgendaUtil(class QObject *)
+ ?categories@AgendaEntry@@QAEAAV?$QList@VAgendaCategory@@@@XZ @ 30 NONAME ; class QList<class AgendaCategory> & AgendaEntry::categories(void)
+ ?entriesChanged@AgendaUtil@@IAEXV?$QList@K@@@Z @ 31 NONAME ; void AgendaUtil::entriesChanged(class QList<unsigned long>)
+ ??0AgendaGeoValue@@QAE@XZ @ 32 NONAME ; AgendaGeoValue::AgendaGeoValue(void)
+ ?status@AgendaAttendee@@QBE?AW4StatusType@1@XZ @ 33 NONAME ; enum AgendaAttendee::StatusType AgendaAttendee::status(void) const
+ ?markDatesWithEvents@AgendaUtil@@QAEXVQDateTime@@0W4FilterFlags@1@AAV?$QList@VQDate@@@@@Z @ 34 NONAME ; void AgendaUtil::markDatesWithEvents(class QDateTime, class QDateTime, enum AgendaUtil::FilterFlags, class QList<class QDate> &)
+ ??9AgendaGeoValue@@QBE_NABV0@@Z @ 35 NONAME ; bool AgendaGeoValue::operator!=(class AgendaGeoValue const &) const
+ ??0AgendaAlarm@@QAE@XZ @ 36 NONAME ; AgendaAlarm::AgendaAlarm(void)
+ ?byMonth@AgendaRepeatRule@@QBE?AV?$QList@W4Month@AgendaRepeatRule@@@@XZ @ 37 NONAME ; class QList<enum AgendaRepeatRule::Month> AgendaRepeatRule::byMonth(void) const
+ ?isNull@AgendaAttendee@@QBE_NXZ @ 38 NONAME ; bool AgendaAttendee::isNull(void) const
+ ?areNoEntriesInCalendar@AgendaUtil@@QAE_NXZ @ 39 NONAME ; bool AgendaUtil::areNoEntriesInCalendar(void)
+ ?clearGeoValue@AgendaEntry@@QBEXXZ @ 40 NONAME ; void AgendaEntry::clearGeoValue(void) const
+ ?setAddress@AgendaAttendee@@QAEXABVQString@@@Z @ 41 NONAME ; void AgendaAttendee::setAddress(class QString const &)
+ ?setRepeatRuleStart@AgendaRepeatRule@@QAEXABVQDateTime@@@Z @ 42 NONAME ; void AgendaRepeatRule::setRepeatRuleStart(class QDateTime const &)
+ ?trUtf8@AgendaUtil@@SA?AVQString@@PBD0H@Z @ 43 NONAME ; class QString AgendaUtil::trUtf8(char const *, char const *, int)
+ ?setLastModifiedDateTime@AgendaEntry@@QAEXABVQDateTime@@@Z @ 44 NONAME ; void AgendaEntry::setLastModifiedDateTime(class QDateTime const &)
+ ??0AgendaAlarm@@QAE@ABV0@@Z @ 45 NONAME ; AgendaAlarm::AgendaAlarm(class AgendaAlarm const &)
+ ?setSummary@AgendaEntry@@QAEXABVQString@@@Z @ 46 NONAME ; void AgendaEntry::setSummary(class QString const &)
+ ?setByMonthDay@AgendaRepeatRule@@QAEXABV?$QList@H@@@Z @ 47 NONAME ; void AgendaRepeatRule::setByMonthDay(class QList<int> const &)
+ ??1AgendaEntry@@UAE@XZ @ 48 NONAME ; AgendaEntry::~AgendaEntry(void)
+ ?setResponseRequested@AgendaAttendee@@QAEX_N@Z @ 49 NONAME ; void AgendaAttendee::setResponseRequested(bool)
+ ??1AgendaRepeatRule@@QAE@XZ @ 50 NONAME ; AgendaRepeatRule::~AgendaRepeatRule(void)
+ ?byMonthDay@AgendaRepeatRule@@QBE?AV?$QList@H@@XZ @ 51 NONAME ; class QList<int> AgendaRepeatRule::byMonthDay(void) const
+ ?detach@AgendaGeoValue@@AAEXXZ @ 52 NONAME ; void AgendaGeoValue::detach(void)
+ ?detach@AgendaEntry@@AAEXXZ @ 53 NONAME ; void AgendaEntry::detach(void)
+ ??9AgendaAttendee@@QBE_NABV0@@Z @ 54 NONAME ; bool AgendaAttendee::operator!=(class AgendaAttendee const &) const
+ ??9AgendaRepeatRule@@QBE_NABV0@@Z @ 55 NONAME ; bool AgendaRepeatRule::operator!=(class AgendaRepeatRule const &) const
+ ?weekStart@AgendaRepeatRule@@QBE?AW4Day@1@XZ @ 56 NONAME ; enum AgendaRepeatRule::Day AgendaRepeatRule::weekStart(void) const
+ ??4AgendaAlarm@@QAEAAV0@ABV0@@Z @ 57 NONAME ; class AgendaAlarm & AgendaAlarm::operator=(class AgendaAlarm const &)
+ ?lastModifiedDateTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 58 NONAME ; class QDateTime AgendaEntry::lastModifiedDateTime(void) const
+ ?attendees@AgendaEntry@@QBEABV?$QList@VAgendaAttendee@@@@XZ @ 59 NONAME ; class QList<class AgendaAttendee> const & AgendaEntry::attendees(void) const
+ ?setInterval@AgendaRepeatRule@@QAEXH@Z @ 60 NONAME ; void AgendaRepeatRule::setInterval(int)
+ ?updateEntry@AgendaUtil@@QAE_NABVAgendaEntry@@_N@Z @ 61 NONAME ; bool AgendaUtil::updateEntry(class AgendaEntry const &, bool)
+ ??8AgendaGeoValue@@QBE_NABV0@@Z @ 62 NONAME ; bool AgendaGeoValue::operator==(class AgendaGeoValue const &) const
+ ?id@AgendaEntry@@QBEKXZ @ 63 NONAME ; unsigned long AgendaEntry::id(void) const
+ ?setByDay@AgendaRepeatRule@@QAEXABV?$QList@W4Day@AgendaRepeatRule@@@@@Z @ 64 NONAME ; void AgendaRepeatRule::setByDay(class QList<enum AgendaRepeatRule::Day> const &)
+ ?setUntil@AgendaRepeatRule@@QAEXABVQDateTime@@@Z @ 65 NONAME ; void AgendaRepeatRule::setUntil(class QDateTime const &)
+ ?setType@AgendaRepeatRule@@QAEXW4RuleType@1@@Z @ 66 NONAME ; void AgendaRepeatRule::setType(enum AgendaRepeatRule::RuleType)
+ ?interval@AgendaRepeatRule@@QBEHXZ @ 67 NONAME ; int AgendaRepeatRule::interval(void) const
+ ?rDates@AgendaEntry@@QBE?AV?$QList@VQDate@@@@XZ @ 68 NONAME ; class QList<class QDate> AgendaEntry::rDates(void) const
+ ?repeatRuleStart@AgendaRepeatRule@@QBE?AVQDateTime@@XZ @ 69 NONAME ; class QDateTime AgendaRepeatRule::repeatRuleStart(void) const
+ ??8AgendaAlarm@@QBE_NABV0@@Z @ 70 NONAME ; bool AgendaAlarm::operator==(class AgendaAlarm const &) const
+ ?storeRepeatingEntry@AgendaUtil@@QAE_NABVAgendaEntry@@_N@Z @ 71 NONAME ; bool AgendaUtil::storeRepeatingEntry(class AgendaEntry const &, bool)
+ ??0AgendaRepeatRule@@QAE@ABV0@@Z @ 72 NONAME ; AgendaRepeatRule::AgendaRepeatRule(class AgendaRepeatRule const &)
+ ?setStatus@AgendaAttendee@@QAEXW4StatusType@1@@Z @ 73 NONAME ; void AgendaAttendee::setStatus(enum AgendaAttendee::StatusType)
+ ?setStatus@AgendaEntry@@QAEXW4Status@1@@Z @ 74 NONAME ; void AgendaEntry::setStatus(enum AgendaEntry::Status)
+ ?setExtendedCategoryName@AgendaCategory@@QAEXABVQString@@@Z @ 75 NONAME ; void AgendaCategory::setExtendedCategoryName(class QString const &)
+ ?setDescription@AgendaEntry@@QAEXABVQString@@@Z @ 76 NONAME ; void AgendaEntry::setDescription(class QString const &)
+ ?recurrenceId@AgendaEntry@@QAE?AVQDateTime@@XZ @ 77 NONAME ; class QDateTime AgendaEntry::recurrenceId(void)
+ ?until@AgendaRepeatRule@@QBE?AVQDateTime@@XZ @ 78 NONAME ; class QDateTime AgendaRepeatRule::until(void) const
+ ?setByMonth@AgendaRepeatRule@@QAEXABV?$QList@W4Month@AgendaRepeatRule@@@@@Z @ 79 NONAME ; void AgendaRepeatRule::setByMonth(class QList<enum AgendaRepeatRule::Month> const &)
+ ?qt_metacall@AgendaUtil@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 80 NONAME ; int AgendaUtil::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacast@AgendaUtil@@UAEPAXPBD@Z @ 81 NONAME ; void * AgendaUtil::qt_metacast(char const *)
+ ?isNull@AgendaRepeatRule@@QBE_NXZ @ 82 NONAME ; bool AgendaRepeatRule::isNull(void) const
+ ?getStaticMetaObject@AgendaUtil@@SAABUQMetaObject@@XZ @ 83 NONAME ; struct QMetaObject const & AgendaUtil::getStaticMetaObject(void)
+ ??8AgendaAttendee@@QBE_NABV0@@Z @ 84 NONAME ; bool AgendaAttendee::operator==(class AgendaAttendee const &) const
+ ?addCategory@AgendaEntry@@QAEXABVAgendaCategory@@@Z @ 85 NONAME ; void AgendaEntry::addCategory(class AgendaCategory const &)
+ ?setLocation@AgendaEntry@@QAEXABVQString@@@Z @ 86 NONAME ; void AgendaEntry::setLocation(class QString const &)
+ ?isTimedEntry@AgendaEntry@@QAE_NXZ @ 87 NONAME ; bool AgendaEntry::isTimedEntry(void)
+ ?favourite@AgendaEntry@@QBEIXZ @ 88 NONAME ; unsigned int AgendaEntry::favourite(void) const
+ ?entryViewCreationCompleted@AgendaUtil@@IAEXH@Z @ 89 NONAME ; void AgendaUtil::entryViewCreationCompleted(int)
+ ?durationInSecs@AgendaEntry@@QBEHXZ @ 90 NONAME ; int AgendaEntry::durationInSecs(void) const
+ ??1AgendaUtil@@UAE@XZ @ 91 NONAME ; AgendaUtil::~AgendaUtil(void)
+ ?category@AgendaCategory@@QBE?AW4CategoryType@1@XZ @ 92 NONAME ; enum AgendaCategory::CategoryType AgendaCategory::category(void) const
+ ?entryAdded@AgendaUtil@@IAEXK@Z @ 93 NONAME ; void AgendaUtil::entryAdded(unsigned long)
+ ?role@AgendaAttendee@@QBE?AW4ParticipantRole@1@XZ @ 94 NONAME ; enum AgendaAttendee::ParticipantRole AgendaAttendee::role(void) const
+ ?type@AgendaEntry@@QBE?AW4Type@1@XZ @ 95 NONAME ; enum AgendaEntry::Type AgendaEntry::type(void) const
+ ??0AgendaEntry@@QAE@W4Type@0@@Z @ 96 NONAME ; AgendaEntry::AgendaEntry(enum AgendaEntry::Type)
+ ?detach@AgendaRepeatRule@@AAEXXZ @ 97 NONAME ; void AgendaRepeatRule::detach(void)
+ ?error@AgendaUtil@@QBE?AW4Error@1@XZ @ 98 NONAME ; enum AgendaUtil::Error AgendaUtil::error(void) const
+ ?trUtf8@AgendaUtil@@SA?AVQString@@PBD0@Z @ 99 NONAME ; class QString AgendaUtil::trUtf8(char const *, char const *)
+ ?status@AgendaEntry@@QBE?AW4Status@1@XZ @ 100 NONAME ; enum AgendaEntry::Status AgendaEntry::status(void) const
+ ??0AgendaEntry@@QAE@ABV0@@Z @ 101 NONAME ; AgendaEntry::AgendaEntry(class AgendaEntry const &)
+ ??4AgendaAttendee@@QAEAAV0@ABV0@@Z @ 102 NONAME ; class AgendaAttendee & AgendaAttendee::operator=(class AgendaAttendee const &)
+ ?address@AgendaAttendee@@QBE?AVQString@@XZ @ 103 NONAME ; class QString AgendaAttendee::address(void) const
+ ?entryDeleted@AgendaUtil@@IAEXK@Z @ 104 NONAME ; void AgendaUtil::entryDeleted(unsigned long)
+ ?summary@AgendaEntry@@QBE?AVQString@@XZ @ 105 NONAME ; class QString AgendaEntry::summary(void) const
+ ?priority@AgendaEntry@@QBEHXZ @ 106 NONAME ; int AgendaEntry::priority(void) const
+ ?fetchById@AgendaUtil@@QAE?AVAgendaEntry@@K@Z @ 107 NONAME ; class AgendaEntry AgendaUtil::fetchById(unsigned long)
+ ?setCommonName@AgendaAttendee@@QAEXABVQString@@@Z @ 108 NONAME ; void AgendaAttendee::setCommonName(class QString const &)
+ ?setMethod@AgendaEntry@@QAEXW4Method@1@@Z @ 109 NONAME ; void AgendaEntry::setMethod(enum AgendaEntry::Method)
+ ?setRDates@AgendaEntry@@QAEXABV?$QList@VQDate@@@@@Z @ 110 NONAME ; void AgendaEntry::setRDates(class QList<class QDate> const &)
+ ?parentEntry@AgendaUtil@@QAE?AVAgendaEntry@@AAV2@@Z @ 111 NONAME ; class AgendaEntry AgendaUtil::parentEntry(class AgendaEntry &)
+ ?addAttendee@AgendaEntry@@QAEXABVAgendaAttendee@@@Z @ 112 NONAME ; void AgendaEntry::addAttendee(class AgendaAttendee const &)
+ ?setCompleted@AgendaUtil@@QAEXAAVAgendaEntry@@_NAAVQDateTime@@@Z @ 113 NONAME ; void AgendaUtil::setCompleted(class AgendaEntry &, bool, class QDateTime &)
+ ??0AgendaCategory@@QAE@XZ @ 114 NONAME ; AgendaCategory::AgendaCategory(void)
+ ?timeOffset@AgendaAlarm@@QBEHXZ @ 115 NONAME ; int AgendaAlarm::timeOffset(void) const
+ ??0AgendaAttendee@@QAE@XZ @ 116 NONAME ; AgendaAttendee::AgendaAttendee(void)
+ ?setAlarmSoundName@AgendaAlarm@@QAEXABVQString@@@Z @ 117 NONAME ; void AgendaAlarm::setAlarmSoundName(class QString const &)
+ ?fetchEntriesInRange@AgendaUtil@@QAE?AV?$QList@VAgendaEntry@@@@VQDateTime@@0W4FilterFlags@1@@Z @ 118 NONAME ; class QList<class AgendaEntry> AgendaUtil::fetchEntriesInRange(class QDateTime, class QDateTime, enum AgendaUtil::FilterFlags)
+ ?detach@AgendaAlarm@@AAEXXZ @ 119 NONAME ; void AgendaAlarm::detach(void)
+ ?setWeekStart@AgendaRepeatRule@@QAEXW4Day@1@@Z @ 120 NONAME ; void AgendaRepeatRule::setWeekStart(enum AgendaRepeatRule::Day)
+ ?setFavourite@AgendaEntry@@QAEXI@Z @ 121 NONAME ; void AgendaEntry::setFavourite(unsigned int)
+ ?setDTStamp@AgendaEntry@@QAEXABVQDateTime@@@Z @ 122 NONAME ; void AgendaEntry::setDTStamp(class QDateTime const &)
+ ?cloneEntry@AgendaUtil@@QAEKABVAgendaEntry@@W4Type@2@@Z @ 123 NONAME ; unsigned long AgendaUtil::cloneEntry(class AgendaEntry const &, enum AgendaEntry::Type)
+ ?setRepeatRule@AgendaEntry@@QAEXABVAgendaRepeatRule@@@Z @ 124 NONAME ; void AgendaEntry::setRepeatRule(class AgendaRepeatRule const &)
+ ?categories@AgendaEntry@@QBEABV?$QList@VAgendaCategory@@@@XZ @ 125 NONAME ; class QList<class AgendaCategory> const & AgendaEntry::categories(void) const
+ ?tr@AgendaUtil@@SA?AVQString@@PBD0@Z @ 126 NONAME ; class QString AgendaUtil::tr(char const *, char const *)
+ ??4AgendaRepeatRule@@QAEAAV0@ABV0@@Z @ 127 NONAME ; class AgendaRepeatRule & AgendaRepeatRule::operator=(class AgendaRepeatRule const &)
+ ?setCompletedDateTime@AgendaEntry@@QAEXABVQDateTime@@@Z @ 128 NONAME ; void AgendaEntry::setCompletedDateTime(class QDateTime const &)
+ ??0AgendaRepeatRule@@QAE@XZ @ 129 NONAME ; AgendaRepeatRule::AgendaRepeatRule(void)
+ ?dtStamp@AgendaEntry@@QBE?AVQDateTime@@XZ @ 130 NONAME ; class QDateTime AgendaEntry::dtStamp(void) const
+ ?method@AgendaEntry@@QBE?AW4Method@1@XZ @ 131 NONAME ; enum AgendaEntry::Method AgendaEntry::method(void) const
+ ?type@AgendaRepeatRule@@QBE?AW4RuleType@1@XZ @ 132 NONAME ; enum AgendaRepeatRule::RuleType AgendaRepeatRule::type(void) const
+ ??4AgendaGeoValue@@QAEAAV0@ABV0@@Z @ 133 NONAME ; class AgendaGeoValue & AgendaGeoValue::operator=(class AgendaGeoValue const &)
+ ??0AgendaCategory@@QAE@W4CategoryType@0@@Z @ 134 NONAME ; AgendaCategory::AgendaCategory(enum AgendaCategory::CategoryType)
+ ?commonName@AgendaAttendee@@QBE?AVQString@@XZ @ 135 NONAME ; class QString AgendaAttendee::commonName(void) const
+ ?detach@AgendaCategory@@AAEXXZ @ 136 NONAME ; void AgendaCategory::detach(void)
+ ??0AgendaGeoValue@@QAE@ABV0@@Z @ 137 NONAME ; AgendaGeoValue::AgendaGeoValue(class AgendaGeoValue const &)
+ ?isWorkdaysRepeatingEntry@AgendaUtil@@SA_NABVAgendaRepeatRule@@@Z @ 138 NONAME ; bool AgendaUtil::isWorkdaysRepeatingEntry(class AgendaRepeatRule const &)
+ ?setRole@AgendaAttendee@@QAEXW4ParticipantRole@1@@Z @ 139 NONAME ; void AgendaAttendee::setRole(enum AgendaAttendee::ParticipantRole)
+ ?detach@AgendaAttendee@@AAEXXZ @ 140 NONAME ; void AgendaAttendee::detach(void)
+ ?getLatLong@AgendaGeoValue@@QBEXAAN0@Z @ 141 NONAME ; void AgendaGeoValue::getLatLong(double &, double &) const
+ ?maxTime@AgendaUtil@@SA?AVQDateTime@@XZ @ 142 NONAME ; class QDateTime AgendaUtil::maxTime(void)
+ ?setCategory@AgendaCategory@@QAEXW4CategoryType@1@@Z @ 143 NONAME ; void AgendaCategory::setCategory(enum AgendaCategory::CategoryType)
+ ?endTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 144 NONAME ; class QDateTime AgendaEntry::endTime(void) const
+ ??9AgendaEntry@@QBE_NABV0@@Z @ 145 NONAME ; bool AgendaEntry::operator!=(class AgendaEntry const &) const
+ ??0AgendaRepeatRule@@QAE@W4RuleType@0@@Z @ 146 NONAME ; AgendaRepeatRule::AgendaRepeatRule(enum AgendaRepeatRule::RuleType)
+ ??9AgendaCategory@@QBE_NABV0@@Z @ 147 NONAME ; bool AgendaCategory::operator!=(class AgendaCategory const &) const
+ ??0AgendaAttendee@@QAE@ABV0@@Z @ 148 NONAME ; AgendaAttendee::AgendaAttendee(class AgendaAttendee const &)
+ ??0AgendaAttendee@@QAE@ABVQString@@@Z @ 149 NONAME ; AgendaAttendee::AgendaAttendee(class QString const &)
+ ?importvCalendar@AgendaUtil@@QAEHABVQString@@AAVAgendaEntry@@@Z @ 150 NONAME ; int AgendaUtil::importvCalendar(class QString const &, class AgendaEntry &)
+ ?instanceViewCreationCompleted@AgendaUtil@@IAEXH@Z @ 151 NONAME ; void AgendaUtil::instanceViewCreationCompleted(int)
+ ??_EAgendaUtil@@UAE@I@Z @ 152 NONAME ; AgendaUtil::~AgendaUtil(unsigned int)
+ ?setGeoValue@AgendaEntry@@QAEXABVAgendaGeoValue@@@Z @ 153 NONAME ; void AgendaEntry::setGeoValue(class AgendaGeoValue const &)
+ ?getPreviousInstanceTimes@AgendaUtil@@QAEXAAVAgendaEntry@@AAVQDateTime@@1@Z @ 154 NONAME ; void AgendaUtil::getPreviousInstanceTimes(class AgendaEntry &, class QDateTime &, class QDateTime &)
+ ?attendees@AgendaEntry@@QAEAAV?$QList@VAgendaAttendee@@@@XZ @ 155 NONAME ; class QList<class AgendaAttendee> & AgendaEntry::attendees(void)
+ ?staticMetaObject@AgendaUtil@@2UQMetaObject@@B @ 156 NONAME ; struct QMetaObject const AgendaUtil::staticMetaObject
+ ?entriesDeleted@AgendaUtil@@IAEXH@Z @ 157 NONAME ; void AgendaUtil::entriesDeleted(int)
+ ?fetchAllEntries@AgendaUtil@@QAE?AV?$QList@VAgendaEntry@@@@W4FilterFlags@1@@Z @ 158 NONAME ; class QList<class AgendaEntry> AgendaUtil::fetchAllEntries(enum AgendaUtil::FilterFlags)
+ ?setTimeOffset@AgendaAlarm@@QAEXH@Z @ 159 NONAME ; void AgendaAlarm::setTimeOffset(int)
+ ??0AgendaEntry@@QAE@XZ @ 160 NONAME ; AgendaEntry::AgendaEntry(void)
+ ?setPriority@AgendaEntry@@QAEXH@Z @ 161 NONAME ; void AgendaEntry::setPriority(int)
+ ?setType@AgendaEntry@@QAEXW4Type@1@@Z @ 162 NONAME ; void AgendaEntry::setType(enum AgendaEntry::Type)
+ ?setStartAndEndTime@AgendaEntry@@QAE_NABVQDateTime@@0@Z @ 163 NONAME ; bool AgendaEntry::setStartAndEndTime(class QDateTime const &, class QDateTime const &)
+ ?deleteEntries@AgendaUtil@@QAEXAAVQDateTime@@0W4FilterFlags@1@@Z @ 164 NONAME ; void AgendaUtil::deleteEntries(class QDateTime &, class QDateTime &, enum AgendaUtil::FilterFlags)
+ ?metaObject@AgendaUtil@@UBEPBUQMetaObject@@XZ @ 165 NONAME ; struct QMetaObject const * AgendaUtil::metaObject(void) const
+ ?location@AgendaEntry@@QBE?AVQString@@XZ @ 166 NONAME ; class QString AgendaEntry::location(void) const
+ ??8AgendaCategory@@QBE_NABV0@@Z @ 167 NONAME ; bool AgendaCategory::operator==(class AgendaCategory const &) const
+ ??0AgendaCategory@@QAE@ABV0@@Z @ 168 NONAME ; AgendaCategory::AgendaCategory(class AgendaCategory const &)
+ ??1AgendaGeoValue@@QAE@XZ @ 169 NONAME ; AgendaGeoValue::~AgendaGeoValue(void)
+ ??4AgendaEntry@@QAEAAV0@ABV0@@Z @ 170 NONAME ; class AgendaEntry & AgendaEntry::operator=(class AgendaEntry const &)
+ ??_EAgendaCategory@@UAE@I@Z @ 171 NONAME ; AgendaCategory::~AgendaCategory(unsigned int)
+ ?createEntryIdListForDay@AgendaUtil@@QAE?AV?$QList@VAgendaEntry@@@@VQDateTime@@W4FilterFlags@1@@Z @ 172 NONAME ; class QList<class AgendaEntry> AgendaUtil::createEntryIdListForDay(class QDateTime, enum AgendaUtil::FilterFlags)
+ ?createException@AgendaUtil@@QAE_NABVAgendaEntry@@VQDateTime@@@Z @ 173 NONAME ; bool AgendaUtil::createException(class AgendaEntry const &, class QDateTime)
+ ?repeatRule@AgendaEntry@@QBE?AVAgendaRepeatRule@@XZ @ 174 NONAME ; class AgendaRepeatRule AgendaEntry::repeatRule(void) const
+ ??1AgendaCategory@@UAE@XZ @ 175 NONAME ; AgendaCategory::~AgendaCategory(void)
+ ?deleteEntry@AgendaUtil@@QAE_NK@Z @ 176 NONAME ; bool AgendaUtil::deleteEntry(unsigned long)
+ ??1AgendaAttendee@@UAE@XZ @ 177 NONAME ; AgendaAttendee::~AgendaAttendee(void)
+ ?byDay@AgendaRepeatRule@@QBE?AV?$QList@W4Day@AgendaRepeatRule@@@@XZ @ 178 NONAME ; class QList<enum AgendaRepeatRule::Day> AgendaRepeatRule::byDay(void) const
+ ?setLatLong@AgendaGeoValue@@QAEXNN@Z @ 179 NONAME ; void AgendaGeoValue::setLatLong(double, double)
+ ?completedDateTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 180 NONAME ; class QDateTime AgendaEntry::completedDateTime(void) const
+ ?setRecurrenceId@AgendaEntry@@QAEXAAVQDateTime@@@Z @ 181 NONAME ; void AgendaEntry::setRecurrenceId(class QDateTime &)
+ ?isNull@AgendaGeoValue@@QBE_NXZ @ 182 NONAME ; bool AgendaGeoValue::isNull(void) const
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/agendautil/eabi/agendainterfaceu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,212 @@
+EXPORTS
+ _ZN10AgendaUtil10cloneEntryERK11AgendaEntryNS0_4TypeE @ 1 NONAME
+ _ZN10AgendaUtil10entryAddedEm @ 2 NONAME
+ _ZN10AgendaUtil11deleteEntryEm @ 3 NONAME
+ _ZN10AgendaUtil11parentEntryER11AgendaEntry @ 4 NONAME
+ _ZN10AgendaUtil11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
+ _ZN10AgendaUtil11qt_metacastEPKc @ 6 NONAME
+ _ZN10AgendaUtil11updateEntryERK11AgendaEntryb @ 7 NONAME
+ _ZN10AgendaUtil12entryDeletedEm @ 8 NONAME
+ _ZN10AgendaUtil12entryUpdatedEm @ 9 NONAME
+ _ZN10AgendaUtil12setCompletedER11AgendaEntrybR9QDateTime @ 10 NONAME
+ _ZN10AgendaUtil13deleteEntriesER9QDateTimeS1_NS_11FilterFlagsE @ 11 NONAME
+ _ZN10AgendaUtil14entriesChangedE5QListImE @ 12 NONAME
+ _ZN10AgendaUtil14entriesDeletedEi @ 13 NONAME
+ _ZN10AgendaUtil15createExceptionERK11AgendaEntry9QDateTime @ 14 NONAME
+ _ZN10AgendaUtil15fetchAllEntriesENS_11FilterFlagsE @ 15 NONAME
+ _ZN10AgendaUtil15importvCalendarERK7QStringR11AgendaEntry @ 16 NONAME
+ _ZN10AgendaUtil16staticMetaObjectE @ 17 NONAME DATA 16
+ _ZN10AgendaUtil17exportAsvCalendarERK7QStringl @ 18 NONAME
+ _ZN10AgendaUtil19deleteRepeatedEntryER11AgendaEntryNS_15RecurrenceRangeE @ 19 NONAME
+ _ZN10AgendaUtil19fetchEntriesInRangeE9QDateTimeS0_NS_11FilterFlagsE @ 20 NONAME
+ _ZN10AgendaUtil19getStaticMetaObjectEv @ 21 NONAME
+ _ZN10AgendaUtil19markDatesWithEventsE9QDateTimeS0_NS_11FilterFlagsER5QListI5QDateE @ 22 NONAME
+ _ZN10AgendaUtil19storeRepeatingEntryERK11AgendaEntryb @ 23 NONAME
+ _ZN10AgendaUtil20getNextInstanceTimesER11AgendaEntryR9QDateTimeS3_ @ 24 NONAME
+ _ZN10AgendaUtil22areNoEntriesInCalendarEv @ 25 NONAME
+ _ZN10AgendaUtil23createEntryIdListForDayE9QDateTimeNS_11FilterFlagsE @ 26 NONAME
+ _ZN10AgendaUtil24clearRepeatingPropertiesER11AgendaEntry @ 27 NONAME
+ _ZN10AgendaUtil24getPreviousInstanceTimesER11AgendaEntryR9QDateTimeS3_ @ 28 NONAME
+ _ZN10AgendaUtil24isWorkdaysRepeatingEntryERK16AgendaRepeatRule @ 29 NONAME
+ _ZN10AgendaUtil26entryViewCreationCompletedEi @ 30 NONAME
+ _ZN10AgendaUtil29instanceViewCreationCompletedEi @ 31 NONAME
+ _ZN10AgendaUtil7maxTimeEv @ 32 NONAME
+ _ZN10AgendaUtil7minTimeEv @ 33 NONAME
+ _ZN10AgendaUtil8addEntryERK11AgendaEntry @ 34 NONAME
+ _ZN10AgendaUtil8entryIdsENS_11FilterFlagsE @ 35 NONAME
+ _ZN10AgendaUtil9fetchByIdEm @ 36 NONAME
+ _ZN10AgendaUtilC1EP7QObject @ 37 NONAME
+ _ZN10AgendaUtilC2EP7QObject @ 38 NONAME
+ _ZN10AgendaUtilD0Ev @ 39 NONAME
+ _ZN10AgendaUtilD1Ev @ 40 NONAME
+ _ZN10AgendaUtilD2Ev @ 41 NONAME
+ _ZN11AgendaAlarm13setTimeOffsetEi @ 42 NONAME
+ _ZN11AgendaAlarm17setAlarmSoundNameERK7QString @ 43 NONAME
+ _ZN11AgendaAlarm6detachEv @ 44 NONAME
+ _ZN11AgendaAlarmC1ERKS_ @ 45 NONAME
+ _ZN11AgendaAlarmC1Ev @ 46 NONAME
+ _ZN11AgendaAlarmC2ERKS_ @ 47 NONAME
+ _ZN11AgendaAlarmC2Ev @ 48 NONAME
+ _ZN11AgendaAlarmD1Ev @ 49 NONAME
+ _ZN11AgendaAlarmD2Ev @ 50 NONAME
+ _ZN11AgendaAlarmaSERKS_ @ 51 NONAME
+ _ZN11AgendaEntry10categoriesEv @ 52 NONAME
+ _ZN11AgendaEntry10setDTStampERK9QDateTime @ 53 NONAME
+ _ZN11AgendaEntry10setSummaryERK7QString @ 54 NONAME
+ _ZN11AgendaEntry11addAttendeeERK14AgendaAttendee @ 55 NONAME
+ _ZN11AgendaEntry11addCategoryERK14AgendaCategory @ 56 NONAME
+ _ZN11AgendaEntry11isRepeatingEv @ 57 NONAME
+ _ZN11AgendaEntry11setGeoValueERK14AgendaGeoValue @ 58 NONAME
+ _ZN11AgendaEntry11setLocationERK7QString @ 59 NONAME
+ _ZN11AgendaEntry11setPriorityEi @ 60 NONAME
+ _ZN11AgendaEntry12isTimedEntryEv @ 61 NONAME
+ _ZN11AgendaEntry12recurrenceIdEv @ 62 NONAME
+ _ZN11AgendaEntry12setFavouriteEj @ 63 NONAME
+ _ZN11AgendaEntry13setRepeatRuleERK16AgendaRepeatRule @ 64 NONAME
+ _ZN11AgendaEntry14setDescriptionERK7QString @ 65 NONAME
+ _ZN11AgendaEntry15setRecurrenceIdER9QDateTime @ 66 NONAME
+ _ZN11AgendaEntry18setStartAndEndTimeERK9QDateTimeS2_ @ 67 NONAME
+ _ZN11AgendaEntry20setCompletedDateTimeERK9QDateTime @ 68 NONAME
+ _ZN11AgendaEntry23setLastModifiedDateTimeERK9QDateTime @ 69 NONAME
+ _ZN11AgendaEntry6detachEv @ 70 NONAME
+ _ZN11AgendaEntry7setTypeENS_4TypeE @ 71 NONAME
+ _ZN11AgendaEntry8setAlarmERK11AgendaAlarm @ 72 NONAME
+ _ZN11AgendaEntry9attendeesEv @ 73 NONAME
+ _ZN11AgendaEntry9setMethodENS_6MethodE @ 74 NONAME
+ _ZN11AgendaEntry9setRDatesERK5QListI5QDateE @ 75 NONAME
+ _ZN11AgendaEntry9setStatusENS_6StatusE @ 76 NONAME
+ _ZN11AgendaEntryC1ENS_4TypeE @ 77 NONAME
+ _ZN11AgendaEntryC1ERKS_ @ 78 NONAME
+ _ZN11AgendaEntryC1Ev @ 79 NONAME
+ _ZN11AgendaEntryC2ENS_4TypeE @ 80 NONAME
+ _ZN11AgendaEntryC2ERKS_ @ 81 NONAME
+ _ZN11AgendaEntryC2Ev @ 82 NONAME
+ _ZN11AgendaEntryD0Ev @ 83 NONAME
+ _ZN11AgendaEntryD1Ev @ 84 NONAME
+ _ZN11AgendaEntryD2Ev @ 85 NONAME
+ _ZN11AgendaEntryaSERKS_ @ 86 NONAME
+ _ZN14AgendaAttendee10setAddressERK7QString @ 87 NONAME
+ _ZN14AgendaAttendee13setCommonNameERK7QString @ 88 NONAME
+ _ZN14AgendaAttendee20setResponseRequestedEb @ 89 NONAME
+ _ZN14AgendaAttendee6detachEv @ 90 NONAME
+ _ZN14AgendaAttendee7setRoleENS_15ParticipantRoleE @ 91 NONAME
+ _ZN14AgendaAttendee9setStatusENS_10StatusTypeE @ 92 NONAME
+ _ZN14AgendaAttendeeC1ERK7QString @ 93 NONAME
+ _ZN14AgendaAttendeeC1ERKS_ @ 94 NONAME
+ _ZN14AgendaAttendeeC1Ev @ 95 NONAME
+ _ZN14AgendaAttendeeC2ERK7QString @ 96 NONAME
+ _ZN14AgendaAttendeeC2ERKS_ @ 97 NONAME
+ _ZN14AgendaAttendeeC2Ev @ 98 NONAME
+ _ZN14AgendaAttendeeD0Ev @ 99 NONAME
+ _ZN14AgendaAttendeeD1Ev @ 100 NONAME
+ _ZN14AgendaAttendeeD2Ev @ 101 NONAME
+ _ZN14AgendaAttendeeaSERKS_ @ 102 NONAME
+ _ZN14AgendaCategory11setCategoryENS_12CategoryTypeE @ 103 NONAME
+ _ZN14AgendaCategory23setExtendedCategoryNameERK7QString @ 104 NONAME
+ _ZN14AgendaCategory6detachEv @ 105 NONAME
+ _ZN14AgendaCategoryC1ENS_12CategoryTypeE @ 106 NONAME
+ _ZN14AgendaCategoryC1ERKS_ @ 107 NONAME
+ _ZN14AgendaCategoryC1Ev @ 108 NONAME
+ _ZN14AgendaCategoryC2ENS_12CategoryTypeE @ 109 NONAME
+ _ZN14AgendaCategoryC2ERKS_ @ 110 NONAME
+ _ZN14AgendaCategoryC2Ev @ 111 NONAME
+ _ZN14AgendaCategoryD0Ev @ 112 NONAME
+ _ZN14AgendaCategoryD1Ev @ 113 NONAME
+ _ZN14AgendaCategoryD2Ev @ 114 NONAME
+ _ZN14AgendaCategoryaSERKS_ @ 115 NONAME
+ _ZN14AgendaGeoValue10setLatLongEdd @ 116 NONAME
+ _ZN14AgendaGeoValue6detachEv @ 117 NONAME
+ _ZN14AgendaGeoValueC1ERKS_ @ 118 NONAME
+ _ZN14AgendaGeoValueC1Ev @ 119 NONAME
+ _ZN14AgendaGeoValueC2ERKS_ @ 120 NONAME
+ _ZN14AgendaGeoValueC2Ev @ 121 NONAME
+ _ZN14AgendaGeoValueD1Ev @ 122 NONAME
+ _ZN14AgendaGeoValueD2Ev @ 123 NONAME
+ _ZN14AgendaGeoValueaSERKS_ @ 124 NONAME
+ _ZN16AgendaRepeatRule10setByMonthERK5QListINS_5MonthEE @ 125 NONAME
+ _ZN16AgendaRepeatRule11setIntervalEi @ 126 NONAME
+ _ZN16AgendaRepeatRule12setWeekStartENS_3DayE @ 127 NONAME
+ _ZN16AgendaRepeatRule13setByMonthDayERK5QListIiE @ 128 NONAME
+ _ZN16AgendaRepeatRule18setRepeatRuleStartERK9QDateTime @ 129 NONAME
+ _ZN16AgendaRepeatRule6detachEv @ 130 NONAME
+ _ZN16AgendaRepeatRule7setTypeENS_8RuleTypeE @ 131 NONAME
+ _ZN16AgendaRepeatRule8setByDayERK5QListINS_3DayEE @ 132 NONAME
+ _ZN16AgendaRepeatRule8setUntilERK9QDateTime @ 133 NONAME
+ _ZN16AgendaRepeatRuleC1ENS_8RuleTypeE @ 134 NONAME
+ _ZN16AgendaRepeatRuleC1ERKS_ @ 135 NONAME
+ _ZN16AgendaRepeatRuleC1Ev @ 136 NONAME
+ _ZN16AgendaRepeatRuleC2ENS_8RuleTypeE @ 137 NONAME
+ _ZN16AgendaRepeatRuleC2ERKS_ @ 138 NONAME
+ _ZN16AgendaRepeatRuleC2Ev @ 139 NONAME
+ _ZN16AgendaRepeatRuleD1Ev @ 140 NONAME
+ _ZN16AgendaRepeatRuleD2Ev @ 141 NONAME
+ _ZN16AgendaRepeatRuleaSERKS_ @ 142 NONAME
+ _ZNK10AgendaUtil10metaObjectEv @ 143 NONAME
+ _ZNK10AgendaUtil5errorEv @ 144 NONAME
+ _ZNK11AgendaAlarm10timeOffsetEv @ 145 NONAME
+ _ZNK11AgendaAlarm14alarmSoundNameEv @ 146 NONAME
+ _ZNK11AgendaAlarm6isNullEv @ 147 NONAME
+ _ZNK11AgendaAlarmeqERKS_ @ 148 NONAME
+ _ZNK11AgendaAlarmneERKS_ @ 149 NONAME
+ _ZNK11AgendaEntry10categoriesEv @ 150 NONAME
+ _ZNK11AgendaEntry10repeatRuleEv @ 151 NONAME
+ _ZNK11AgendaEntry11descriptionEv @ 152 NONAME
+ _ZNK11AgendaEntry14durationInSecsEv @ 153 NONAME
+ _ZNK11AgendaEntry17completedDateTimeEv @ 154 NONAME
+ _ZNK11AgendaEntry20lastModifiedDateTimeEv @ 155 NONAME
+ _ZNK11AgendaEntry2idEv @ 156 NONAME
+ _ZNK11AgendaEntry4typeEv @ 157 NONAME
+ _ZNK11AgendaEntry5alarmEv @ 158 NONAME
+ _ZNK11AgendaEntry6isNullEv @ 159 NONAME
+ _ZNK11AgendaEntry6methodEv @ 160 NONAME
+ _ZNK11AgendaEntry6rDatesEv @ 161 NONAME
+ _ZNK11AgendaEntry6statusEv @ 162 NONAME
+ _ZNK11AgendaEntry7dtStampEv @ 163 NONAME
+ _ZNK11AgendaEntry7endTimeEv @ 164 NONAME
+ _ZNK11AgendaEntry7summaryEv @ 165 NONAME
+ _ZNK11AgendaEntry8geoValueEv @ 166 NONAME
+ _ZNK11AgendaEntry8locationEv @ 167 NONAME
+ _ZNK11AgendaEntry8priorityEv @ 168 NONAME
+ _ZNK11AgendaEntry9attendeesEv @ 169 NONAME
+ _ZNK11AgendaEntry9favouriteEv @ 170 NONAME
+ _ZNK11AgendaEntry9startTimeEv @ 171 NONAME
+ _ZNK11AgendaEntryeqERKS_ @ 172 NONAME
+ _ZNK11AgendaEntryneERKS_ @ 173 NONAME
+ _ZNK14AgendaAttendee10commonNameEv @ 174 NONAME
+ _ZNK14AgendaAttendee17responseRequestedEv @ 175 NONAME
+ _ZNK14AgendaAttendee4roleEv @ 176 NONAME
+ _ZNK14AgendaAttendee6isNullEv @ 177 NONAME
+ _ZNK14AgendaAttendee6statusEv @ 178 NONAME
+ _ZNK14AgendaAttendee7addressEv @ 179 NONAME
+ _ZNK14AgendaAttendeeeqERKS_ @ 180 NONAME
+ _ZNK14AgendaAttendeeneERKS_ @ 181 NONAME
+ _ZNK14AgendaCategory20extendedCategoryNameEv @ 182 NONAME
+ _ZNK14AgendaCategory6isNullEv @ 183 NONAME
+ _ZNK14AgendaCategory8categoryEv @ 184 NONAME
+ _ZNK14AgendaCategoryeqERKS_ @ 185 NONAME
+ _ZNK14AgendaCategoryneERKS_ @ 186 NONAME
+ _ZNK14AgendaGeoValue10getLatLongERdS0_ @ 187 NONAME
+ _ZNK14AgendaGeoValue6isNullEv @ 188 NONAME
+ _ZNK14AgendaGeoValueeqERKS_ @ 189 NONAME
+ _ZNK14AgendaGeoValueneERKS_ @ 190 NONAME
+ _ZNK16AgendaRepeatRule10byMonthDayEv @ 191 NONAME
+ _ZNK16AgendaRepeatRule15repeatRuleStartEv @ 192 NONAME
+ _ZNK16AgendaRepeatRule4typeEv @ 193 NONAME
+ _ZNK16AgendaRepeatRule5byDayEv @ 194 NONAME
+ _ZNK16AgendaRepeatRule5untilEv @ 195 NONAME
+ _ZNK16AgendaRepeatRule6isNullEv @ 196 NONAME
+ _ZNK16AgendaRepeatRule7byMonthEv @ 197 NONAME
+ _ZNK16AgendaRepeatRule8intervalEv @ 198 NONAME
+ _ZNK16AgendaRepeatRule9weekStartEv @ 199 NONAME
+ _ZNK16AgendaRepeatRuleeqERKS_ @ 200 NONAME
+ _ZNK16AgendaRepeatRuleneERKS_ @ 201 NONAME
+ _ZTI10AgendaUtil @ 202 NONAME
+ _ZTI11AgendaEntry @ 203 NONAME
+ _ZTI14AgendaAttendee @ 204 NONAME
+ _ZTI14AgendaCategory @ 205 NONAME
+ _ZTV10AgendaUtil @ 206 NONAME
+ _ZTV11AgendaEntry @ 207 NONAME
+ _ZTV14AgendaAttendee @ 208 NONAME
+ _ZTV14AgendaCategory @ 209 NONAME
+ _ZNK11AgendaEntry13clearGeoValueEv @ 210 NONAME
+
--- a/agendainterface/agendautil/inc/agendaentry.h Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/inc/agendaentry.h Thu Jul 22 16:32:51 2010 +0100
@@ -380,6 +380,7 @@
void setGeoValue(const AgendaGeoValue& geoValue);
AgendaGeoValue geoValue() const;
+ void clearGeoValue() const;
int durationInSecs() const;
AgendaEntry& operator=(const AgendaEntry& other);
--- a/agendainterface/agendautil/inc/agendautil.h Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/inc/agendautil.h Thu Jul 22 16:32:51 2010 +0100
@@ -79,7 +79,7 @@
AgendaEntry& entry, AgendaUtil::RecurrenceRange range);
bool updateEntry(const AgendaEntry& entry, bool isChild = false);
bool storeRepeatingEntry(const AgendaEntry& entry, bool copyToChildren);
- bool createException(const AgendaEntry& entry);
+ bool createException(const AgendaEntry& entry,QDateTime instanceOriginalDateTime);
QList<ulong> entryIds(
AgendaUtil::FilterFlags filter = AgendaUtil::IncludeAll);
QList<AgendaEntry> fetchAllEntries(
--- a/agendainterface/agendautil/inc/agendautil_p.h Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/inc/agendautil_p.h Thu Jul 22 16:32:51 2010 +0100
@@ -65,7 +65,7 @@
ulong cloneEntry(const AgendaEntry& entry, AgendaEntry::Type type);
bool updateEntry(const AgendaEntry& entry, bool isChild = false);
bool storeRepeatingEntry(const AgendaEntry& entry, bool copyToChildren);
- bool createException(const AgendaEntry& entry);
+ bool createException(const AgendaEntry& entry, QDateTime instanceOriginalDateTime);
bool deleteEntry(ulong id);
void deleteRepeatedEntry(
--- a/agendainterface/agendautil/src/agendaentry.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/src/agendaentry.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -1984,7 +1984,17 @@
{
return d->m_geoValue;
}
-
+
+/*!
+ Clears the geo value if it has any
+ */
+void AgendaEntry::clearGeoValue() const
+{
+ if (d) {
+ d->m_geoValue = AgendaGeoValue();
+ }
+}
+
/*!
Returns
duration of the meeting in seconds
--- a/agendainterface/agendautil/src/agendautil.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/src/agendautil.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -194,9 +194,9 @@
AgendaUtil::Error that indicates which error occurred
\sa addEntry(), deleteEntry()
*/
-bool AgendaUtil::createException(const AgendaEntry& entry)
+bool AgendaUtil::createException(const AgendaEntry& entry,QDateTime instanceOriginalDateTime)
{
- return d->createException(entry);
+ return d->createException(entry, instanceOriginalDateTime);
}
/*!
Fetches the entry which of id is equal to given \a id.
--- a/agendainterface/agendautil/src/agendautil_p.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/agendainterface/agendautil/src/agendautil_p.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -20,6 +20,7 @@
#include <calsession.h>
#include <calinstance.h>
#include <CalenImporter>
+#include <CalenInterimUtils2>
#include <calentry.h>
#include <calrrule.h>
#include <e32math.h>
@@ -34,6 +35,7 @@
#include "agendautil_p.h"
#include "agendaentry.h"
#include "agendaentry_p.h"
+#include "CleanupResetAndDestroy.h"
// Constants
//recognition string for ical
@@ -41,7 +43,6 @@
//recognition string for vcal
_LIT8(KVersionVCal, "VERSION:1.0");
const TInt KReadDataAmount = 256;
-const TInt KGuidLength = 30;
const TInt KNoOfDaysInWeek = 7;
static const int startDateArray[2] = { 1900, 1};
static const int endDateArray[2] = { 2100, 1};
@@ -134,6 +135,8 @@
void AgendaUtilPrivate::Completed(TInt aError)
{
iError = aError;
+ static bool isInstanceViewDeleted = false;
+ static bool isEntryViewDeleted = false;
if (mIsDeleting) {
// If deletion was in progress, then it is completed now
@@ -144,11 +147,13 @@
if (KErrNone != iError) {
// Something has gone wrong, return
- if (iCalEntryView) {
+ if (iCalEntryView && !isEntryViewDeleted) {
+ isEntryViewDeleted = true;
delete iCalEntryView;
iCalEntryView = NULL;
}
- if (iCalInstanceView) {
+ if (iCalInstanceView && !isInstanceViewDeleted) {
+ isInstanceViewDeleted = true;
delete iCalInstanceView;
iCalInstanceView = NULL;
}
@@ -201,20 +206,16 @@
return localUid;
}
+ // Get the global uid.
+ CCalenInterimUtils2* calenInterimUtils2 = CCalenInterimUtils2::NewL();
+ HBufC8* globalUid = calenInterimUtils2->GlobalUidL();
if (AgendaEntry::TypeNote == entry.type()) {
TRAP(
iError,
RPointerArray<CCalEntry> entryArray;
- CleanupClosePushL(entryArray);
-
- // Get the global uid.
- TTime homeTime;
- homeTime.HomeTime();
- TInt64 seed = homeTime.Int64();
- TInt randumNumber = Math::Rand(seed);
- HBufC8* globalUid = HBufC8::NewLC(KGuidLength);
- globalUid->Des().Num(randumNumber);
+ CleanupResetAndDestroyPushL(entryArray);
+ CleanupStack::PushL(globalUid);
// Construct a CCalEntry object and start filling the details.
CCalEntry* newEntry = 0;
@@ -225,7 +226,6 @@
0);
CleanupStack::Pop(globalUid);
- CleanupStack::PushL(newEntry);
// Add description.
TPtrC description(reinterpret_cast<const TUint16*>(
@@ -265,7 +265,6 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
} else {
@@ -273,16 +272,8 @@
iError,
RPointerArray<CCalEntry> entryArray;
- CleanupClosePushL(entryArray);
-
- // Get the global uid.
- TTime homeTime;
- homeTime.HomeTime();
- TInt64 seed = homeTime.Int64();
- TInt randumNumber = Math::Rand(seed);
- HBufC8* globalUid = HBufC8::NewLC(KGuidLength);
- globalUid->Des().Num(randumNumber);
-
+ CleanupResetAndDestroyPushL(entryArray);
+ CleanupStack::PushL(globalUid);
// Construct a CCalEntry object and start filling the details.
CCalEntry* newEntry = 0;
newEntry = CCalEntry::NewL(
@@ -292,7 +283,6 @@
0);
CleanupStack::Pop(globalUid);
- CleanupStack::PushL(newEntry);
// Add the summary.
if (!entry.summary().isNull()) {
@@ -391,10 +381,12 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
}
+
+ delete calenInterimUtils2;
+
// Emit signal upon successful creation of entry.
if (0 < localUid && 1 == success) {
emit q->entryAdded(localUid);
@@ -445,9 +437,7 @@
// Now save the GUID of the saved entry.
TRAP(
iError,
-
- globalUid = HBufC8::NewL(KGuidLength);
- *globalUid = originalEntry->UidL();
+ globalUid = originalEntry->UidL().AllocL();
)
delete originalEntry;
@@ -467,7 +457,6 @@
globalUid,
static_cast<CCalEntry::TMethod>(entry.method()),
0);
- CleanupStack::PushL(newEntry);
// Add description.
TPtrC description(reinterpret_cast<const TUint16*>(
@@ -483,7 +472,6 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
} else {
@@ -500,7 +488,6 @@
globalUid,
static_cast<CCalEntry::TMethod>(entry.method()),
0);
- CleanupStack::PushL(newEntry);
// Add the summary.
if (!entry.summary().isNull()) {
@@ -599,7 +586,6 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
}
@@ -654,7 +640,6 @@
AgendaEntry& entry,
AgendaUtil::RecurrenceRange range)
{
- qDebug("AgendaUtilPrivate::deleteRepeatedEntry");
// First prepare the session with agenda server.
if (!mInstanceViewCreated) {
@@ -684,18 +669,12 @@
// the exceptional entries share the global uid with the parent
// entry.
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
iCalEntryView->FetchL(calEntry->UidL(), entries);
if (entries.Count()) {
iCalEntryView->DeleteL(*entries[0]);
}
- // Cleanup.
- int count = entries.Count();
- for (int i = count - 1; i >= 0; --i) {
- CCalEntry *entry = entries[i];
- delete entry;
- }
CleanupStack::PopAndDestroy(&entries);
CleanupStack::PopAndDestroy();
}
@@ -733,7 +712,6 @@
// Get the entry corresponding to the id.
AgendaEntry storedEntry = fetchById(entry.id());
CCalEntry* calEntry = iCalEntryView->FetchL(entry.id());
- CleanupStack::PushL(calEntry);
// Update the description.
if (storedEntry.description() != entry.description()
@@ -787,12 +765,12 @@
// Update the entry using the CCalEntryView.
RPointerArray<CCalEntry> entryArray;
- CleanupClosePushL(entryArray);
+ CleanupResetAndDestroyPushL(entryArray);
entryArray.AppendL(calEntry);
iCalEntryView->UpdateL(entryArray, success);
// Cleanup.
- CleanupStack::PopAndDestroy(2, calEntry);
+ CleanupStack::PopAndDestroy( &entryArray );
)
} else {
TRAP(
@@ -801,22 +779,18 @@
// Get the entry corresponding to the id.
AgendaEntry storedEntry = fetchById(entry.id());
CCalEntry* calEntry = iCalEntryView->FetchL(entry.id());
- CleanupStack::PushL(calEntry);
// Update the attendees.
if (!entry.isNull()
&& (entry.d->m_attendees != storedEntry.attendees())) {
- RPointerArray<CCalAttendee> attendeesArray =
+ RPointerArray<CCalAttendee>& attendeesArray =
calEntry->AttendeesL();
- CleanupClosePushL(attendeesArray);
int iterator = 0;
while (attendeesArray.Count() > iterator) {
calEntry->DeleteAttendeeL(iterator);
iterator++;
}
- // Cleanup.
- CleanupStack::PopAndDestroy(&attendeesArray);
addAttendeesToEntry(entry.d->m_attendees, *calEntry);
}
@@ -826,14 +800,11 @@
RPointerArray<CCalCategory> categories =
calEntry->CategoryListL();
- CleanupClosePushL(categories);
int iterator = 0;
while (categories.Count() > iterator) {
calEntry->DeleteCategoryL(iterator);
iterator++;
}
- // Cleanup.
- CleanupStack::PopAndDestroy(&categories);
addCategoriesToEntry(entry.d->m_categories, *calEntry);
}
@@ -942,7 +913,7 @@
// Save the geo value if any
AgendaGeoValue entryGeoValue = entry.geoValue();
- if (!entryGeoValue.isNull()) {
+ if (!entryGeoValue.isNull() && (entryGeoValue != storedEntry.geoValue())) {
CCalGeoValue* geoValue = CCalGeoValue::NewL();
double latitude;
double longitude;
@@ -954,11 +925,14 @@
// set it to CCalentry
calEntry->SetGeoValueL(*geoValue);
delete geoValue;
+ } else if (entryGeoValue.isNull()) {
+ // Clear the geo values if any
+ calEntry->ClearGeoValueL();
}
// Update the entry using the calen entry view.
RPointerArray<CCalEntry> entryArray;
- CleanupClosePushL(entryArray);
+ CleanupResetAndDestroyPushL(entryArray);
entryArray.AppendL(calEntry);
if (!isChild) {
iCalEntryView->UpdateL(entryArray, success);
@@ -966,7 +940,7 @@
iCalEntryView->StoreL(entryArray, success);
}
// Cleanup.
- CleanupStack::PopAndDestroy(2, calEntry);
+ CleanupStack::PopAndDestroy( &entryArray );
)
}
@@ -1002,9 +976,10 @@
if (instance) {
// Get all the entries with same global Uid.
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
iCalEntryView->FetchL(instance->UidL(), entries);
calEntry = entries[0];
+ entries.Remove(0);
CleanupStack::PopAndDestroy(&entries);
} else {
CleanupStack::PopAndDestroy(instance);
@@ -1040,7 +1015,7 @@
// Entry is not a child, but does it have any children?
// Fetch array of entries associated with this UID.
RPointerArray<CCalEntry> oldEntries;
- CleanupClosePushL(oldEntries);
+ CleanupResetAndDestroyPushL(oldEntries);
iCalEntryView->FetchL(calEntry->UidL(), oldEntries);
bool hasChildren = oldEntries.Count() > 0;
@@ -1070,6 +1045,9 @@
// set it to CCalentry
calEntry->SetGeoValueL(*geoValue);
delete geoValue;
+ } else {
+ // Clear the geo values
+ calEntry->ClearGeoValueL();
}
// set the description
@@ -1147,9 +1125,9 @@
return success;
}
-bool AgendaUtilPrivate::createException(const AgendaEntry& entry)
-{
-
+bool AgendaUtilPrivate::createException(const AgendaEntry& entry,
+ QDateTime instanceOriginalDateTime)
+{
// First prepare the session with agenda server.
if (!mInstanceViewCreated) {
// Something went wrong.
@@ -1174,18 +1152,12 @@
HBufC8* guid = calEntry->UidL().AllocLC();
// create new (child) entry
// Use original instance time for recurrenceID as this entry hasn't got one.
- TCalTime originalCalTime = calEntry->StartTimeL();
- TDateTime origDateTime = originalCalTime.TimeLocalL().DateTime();
- // set the instance date to this
- QDate date = entry.startTime().date();
- QTime time =entry.startTime().time();
- origDateTime.Set(date.year(),
- static_cast<TMonth> (date.month() - 1),
- date.day() - 1,
- time.hour(),
- time.minute(),time.second(), 0);
- TTime originalTime(origDateTime);
- originalCalTime.SetTimeLocalL(originalTime);
+ TCalTime originalCalTime;
+ TDateTime originalDateTime(instanceOriginalDateTime.date().year(),
+ TMonth(instanceOriginalDateTime.date().month() - 1),
+ instanceOriginalDateTime.date().day() -1, 0, 0, 0, 0);
+ TTime originalDateTimeTTime(originalDateTime);
+ originalCalTime.SetTimeLocalL(originalDateTimeTTime);
// create the new child now
CCalEntry* newEntry = CCalEntry::NewL( calEntry->EntryTypeL(),
guid,
@@ -1196,7 +1168,6 @@
CleanupStack::Pop(guid);
CleanupStack::PopAndDestroy(calEntry);
- CleanupStack::PushL(newEntry);
// Update the description.
if (!entry.description().isNull()) {
@@ -1233,13 +1204,13 @@
// Update the entry using the CCalEntryView.
RPointerArray<CCalEntry> entryArray;
- CleanupClosePushL(entryArray);
+ CleanupResetAndDestroyPushL(entryArray);
entryArray.AppendL(newEntry);
iCalEntryView->StoreL(entryArray, success);
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(2, newEntry);
+ CleanupStack::PopAndDestroy(&entryArray);
)
} else {
TRAP(
@@ -1251,20 +1222,12 @@
HBufC8* guid = calEntry->UidL().AllocLC();
// create new (child) entry
// Use original instance time for recurrenceID as this entry hasn't got one.
- TCalTime originalCalTime = calEntry->StartTimeL();
- TDateTime origDateTime = originalCalTime.TimeLocalL().DateTime();
- // set only the instance date but not the time to this
- QDate date = entry.startTime().date();
- QTime time =entry.startTime().time();
- origDateTime.Set(date.year(),
- static_cast<TMonth> (date.month() - 1),
- date.day() - 1,
- origDateTime.Hour(),
- origDateTime.Minute(),
- origDateTime.Second(),
- origDateTime.MicroSecond());
- TTime originalTime(origDateTime);
- originalCalTime.SetTimeLocalL(originalTime);
+ TCalTime originalCalTime;
+ TDateTime originalDateTime(instanceOriginalDateTime.date().year(),
+ TMonth(instanceOriginalDateTime.date().month() - 1),
+ instanceOriginalDateTime.date().day() -1, 0, 0, 0, 0);
+ TTime originalDateTimeTTime(originalDateTime);
+ originalCalTime.SetTimeLocalL(originalDateTimeTTime);
// create the new child now
CCalEntry* newEntry = CCalEntry::NewL( calEntry->EntryTypeL(),
guid,
@@ -1275,7 +1238,6 @@
CleanupStack::Pop(guid);
CleanupStack::PopAndDestroy(calEntry);
- CleanupStack::PushL(newEntry);
// Store the attendees.
if (!entry.isNull()) {
addAttendeesToEntry(entry.d->m_attendees, *newEntry);
@@ -1383,14 +1345,13 @@
newEntry->ClearRepeatingPropertiesL();
// Update the entry using the calen entry view.
RPointerArray<CCalEntry> entryArray;
- CleanupClosePushL(entryArray);
+ CleanupResetAndDestroyPushL(entryArray);
entryArray.AppendL(newEntry);
iCalEntryView->StoreL(entryArray, success);
localUid = newEntry->LocalUidL();
// Cleanup.
CleanupStack::PopAndDestroy(&entryArray);
- CleanupStack::PopAndDestroy(newEntry);
)
}
@@ -1457,7 +1418,7 @@
iError,
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1484,14 +1445,8 @@
listOfIds.append(instanceList[iter]->Entry().LocalUidL());
}
- int count = instanceList.Count();
- for (int iter = count - 1; iter >= 0; --iter) {
- CCalInstance *instance = instanceList[iter];
- delete instance;
- }
-
// Cleanup.
- CleanupStack::PopAndDestroy();
+ CleanupStack::PopAndDestroy(&instanceList);
)
return listOfIds;
@@ -1518,7 +1473,7 @@
iError,
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1549,14 +1504,8 @@
instanceList[iter]));
}
- int count = instanceList.Count();
- for (int iter = count - 1; iter >= 0; --iter) {
- CCalInstance *instance = instanceList[iter];
- delete instance;
- }
-
// Cleanup.
- CleanupStack::PopAndDestroy();
+ CleanupStack::PopAndDestroy(&instanceList);
)
return entryList;
@@ -1576,7 +1525,7 @@
TRAP(iError,
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1609,12 +1558,7 @@
{
entryList.append(createAgendaEntryFromCalEntry(instanceList[i]->Entry(), instanceList[i]));
}
- int count = instanceList.Count();
- for (int i = count - 1; i >= 0; --i) {
- CCalInstance *instance = instanceList[i];
- delete instance;
- }
- CleanupStack::PopAndDestroy();
+ CleanupStack::PopAndDestroy(&instanceList);
)
return entryList;
@@ -1630,7 +1574,7 @@
return;
}
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1658,7 +1602,7 @@
endDateForInstanceSearch);
iCalInstanceView->FindInstanceL(instanceList, filters, searchTimeRange);
-
+
// Parse thru the list and mark the dates which have events
for (int i = 0; i < instanceList.Count(); i++) {
CCalEntry::TType type = instanceList[i]->Entry().EntryTypeL();
@@ -1666,45 +1610,99 @@
TCalTime startCalTime = instanceList[i]->StartTimeL();
TCalTime endCalTime = instanceList[i]->EndTimeL();
TDateTime startDateTime = startCalTime.TimeLocalL().DateTime();
+ TDateTime endDateTime = endCalTime.TimeLocalL().DateTime();
QDate startDate(startDateTime.Year(), startDateTime.Month()+1,
startDateTime.Day() + 1);
+ QDate endDate(endDateTime.Year(), endDateTime.Month()+1,
+ endDateTime.Day() + 1);
if (type == CCalEntry::EEvent || type == CCalEntry::EAppt ||
type == CCalEntry::EReminder) {
if(endsAtStartOfDay(instanceList[i], endCalTime.TimeLocalL())) {
- // instance ends at start of endtime day, month view doesnt
- // want to show event on this day
TDateTime endDateTime = endCalTime.TimeLocalL().DateTime();
+ // prevent problems with items ending tomorrow at 00:00
endDateTime.SetMinute(endDateTime.Minute() - 1);
TTime time(endDateTime);
+ // If it is ending before the start of the grid
if (time <= startDateForInstanceSearch.TimeLocalL()) {
continue;
}
}
-
- // Mark the required dates frm start date to end date
- TTimeIntervalDays days = endCalTime.TimeLocalL().DaysFrom(startCalTime.TimeLocalL());
- for (int j = -1; j < days.Int(); j++) {
- QDate date = startDate.addDays(j+1);
- if (date <= rangeEnd.date()) {
- dates.append(date);
- } else {
- break;
- }
- }
- } else if (type == CCalEntry::EAnniv) {
- if (startDate <= rangeEnd.date()) {
- dates.append(startDate);
- }
- } else if (type == CCalEntry::ETodo) {
- // if start time is less that today, then mark it for today
- if (startDate < QDate::currentDate()) {
- dates.append(QDate::currentDate());
- } else {
- dates.append(startDate);
- }
- }
- }
- CleanupStack::PopAndDestroy();
+ // Mark the required dates frm start date to end date
+ TTimeIntervalDays days ;
+ int numOfDays = 0;
+ //check if the start date of the entry is before the start day of the grid
+ if(startDate < rangeStart.date()){
+ if(endDate<=rangeEnd.date()){
+ //if the end date of entry is lying in the grid ,
+ //then mark the entry from start day of the grid to the end date of the entry
+ days = endCalTime.TimeLocalL().DaysFrom(startDateForInstanceSearch.TimeLocalL());
+ numOfDays = days.Int();
+ }
+ else{
+ //if end date of the entry is greater then the last date of grid,
+ //then mark all the date of the grid with the entry
+ days = endDateForInstanceSearch.TimeLocalL().DaysFrom(startDateForInstanceSearch.TimeLocalL()) ;
+ numOfDays = days.Int();
+ }
+ // Check if the event is all-day
+ if (instanceList[i]->Entry().EntryTypeL() == CCalEntry::EEvent) {
+ // no need to consider the date on which it ends
+ // reduce days count by 1
+ numOfDays--;
+ }
+ //start the entries from the first day of the grid
+ for (int j = 0; j <= numOfDays; j++) {
+ QDate date = rangeStart.date().addDays(j);
+ if (date <= rangeEnd.date()) {
+ dates.append(date);
+ } else {
+ break;
+ }
+ }
+ }
+ //if the start date of the entry is lying inside the grid
+ else{
+ if(endDate<=rangeEnd.date()){
+ //if the end date of entry is lying in the grid ,
+ //then mark the entry from start date of the entry to the end date of the entry
+ days = endCalTime.TimeLocalL().DaysFrom(startCalTime.TimeLocalL()) ;
+ numOfDays = days.Int();
+ }
+ else{
+ //if end date of the entry is greater then the last date of grid,
+ //then mark all the date from start date of the entry to the end date of the grid
+ days = endDateForInstanceSearch.TimeLocalL().DaysFrom(startCalTime.TimeLocalL()) ;
+ numOfDays = days.Int();
+ }
+ // Check if the event is all-day
+ if (instanceList[i]->Entry().EntryTypeL() == CCalEntry::EEvent) {
+ // no need to consider the date on which it ends
+ // reduce days count by 1
+ numOfDays--;
+ }
+ for (int j = 0; j <= numOfDays; j++) {
+ QDate date = startDate.addDays(j);
+ if (date <= rangeEnd.date()) {
+ dates.append(date);
+ } else {
+ break;
+ }
+ }
+ }
+ } else if (type == CCalEntry::EAnniv) {
+ if (startDate <= rangeEnd.date()) {
+ dates.append(startDate);
+ }
+ } else if (type == CCalEntry::ETodo) {
+ // if start time is less that today, then mark it for today
+ if (startDate < QDate::currentDate()) {
+ dates.append(QDate::currentDate());
+ } else {
+ dates.append(startDate);
+ }
+ }
+ }
+ CleanupStack::PopAndDestroy(&instanceList);
}
QList<AgendaEntry> AgendaUtilPrivate::createEntryIdListForDay( QDateTime day,
@@ -1720,7 +1718,7 @@
TRAP(iError,
getDayRange(day, day, dayRange);
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
// Check if the filter has todos also to be included
if(filter & CalCommon::EIncludeIncompletedTodos)
@@ -1763,6 +1761,26 @@
{
iCalInstanceView->FindInstanceL(instanceList, filters, dayRange);
}
+
+ // In this list, check if any all day events are there
+ // As all day events end at 12.00AM of next day, we should not show it again on next day
+ TCalTime calTime;
+ TDateTime dateTime(
+ day.date().year(),
+ static_cast<TMonth>(day.date().month() - 1),
+ day.date().day() - 1, day.time().hour(),
+ day.time().minute(), 0, 0);
+ TTime time(dateTime);
+ for (int i(0); i < instanceList.Count(); i++) {
+ if ((endsAtStartOfDay(instanceList[i], time)) &&
+ instanceList[i]->Entry().EntryTypeL() == CCalEntry::EEvent) {
+ // Previous day all-day event has been found, we are not supposed to
+ // show it on current day, hence remove it from the instance list
+ instanceList.Remove(i);
+ i--;
+ }
+ }
+
// Sort the list
sortInstanceList(instanceList);
for(TInt i = 0; i<instanceList.Count(); i++)
@@ -1770,12 +1788,7 @@
entryList.append(createAgendaEntryFromCalEntry(
instanceList[i]->Entry(), instanceList[i]));
}
- int count = instanceList.Count();
- for (int i = count - 1; i >= 0; --i) {
- CCalInstance *instance = instanceList[i];
- delete instance;
- }
- CleanupStack::PopAndDestroy();
+ CleanupStack::PopAndDestroy( &instanceList );
)
return entryList;
@@ -1907,18 +1920,16 @@
// Fetch the calentry
CCalEntry* calEntry = iCalEntryView->FetchL(entry.id());
- CleanupStack::PushL(calEntry);
calEntry->SetCompletedL(complete, calTime);
// Update the entry in the Database
RPointerArray<CCalEntry> array;
- CleanupClosePushL(array);
+ CleanupResetAndDestroyPushL(array);
array.AppendL(calEntry);
iCalEntryView->UpdateL(array, success);
// Cleanup.
- CleanupStack::PopAndDestroy(&array);
- CleanupStack::PopAndDestroy(calEntry);
+ CleanupStack::PopAndDestroy( &array );
)
if (0 < success) {
@@ -1990,7 +2001,7 @@
if (calEntry) {
// Get all the entries with same global Uid.
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
iCalEntryView->FetchL(calEntry->UidL(), entries);
parentEntry = createAgendaEntryFromCalEntry(*entries[0]);
CleanupStack::PopAndDestroy(&entries);
@@ -2018,7 +2029,7 @@
if (calEntry) {
// Get all the entries with same global Uid.
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
iCalEntryView->FetchL(calEntry->UidL(), entries);
entries[0]->ClearRepeatingPropertiesL();
CleanupStack::PopAndDestroy(&entries);
@@ -2037,7 +2048,7 @@
QDateTime& endTime)
{
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
TCalTime previousStartTime;
TCalTime previousEndTime;
TTime zero(TInt64(0));
@@ -2154,6 +2165,16 @@
// Is currentInstanceDate before parent dt start?
if (currentInstanceDate.TimeLocalL() <
entries[0]->StartTimeL().TimeLocalL()) {
+ TBool exceptionEntryBeforeParentStartPresent = EFalse;
+ for (TInt i=0; i<exdates.Count(); ++i) {
+ if( exdates[i].TimeLocalL() < currentInstanceDate.TimeLocalL() ) {
+ exceptionEntryBeforeParentStartPresent = ETrue;
+ }
+ }
+ if (!exceptionEntryBeforeParentStartPresent) {
+ currentInstanceDate.SetTimeLocalL(Time::NullTTime());
+ previousStartTime = currentInstanceDate;
+ }
// There are no instances before the exception
keepLooking = EFalse;
} else {
@@ -2196,22 +2217,23 @@
}
CleanupStack::PopAndDestroy(&exdates);
}
- // Convert TCalTimes to QDateTimes
- TDateTime prevStart = previousStartTime.TimeLocalL().DateTime();
- TDateTime prevEnd = previousEndTime.TimeLocalL().DateTime();
- startTime.setDate(QDate(prevStart.Year(), prevStart.Month()+1,
- prevStart.Day() + 1));
- startTime.setTime(QTime(prevStart.Hour(), prevStart.Minute(), 0, 0));
- endTime.setDate(QDate(prevEnd.Year(), prevEnd.Month()+1,
- prevEnd.Day() + 1));
- endTime.setTime(QTime(prevEnd.Hour(), prevEnd.Minute(), 0, 0));
+ if(previousStartTime.TimeUtcL() != Time::NullTTime()) {
+ // Convert TCalTimes to QDateTimes
+ TDateTime prevStart = previousStartTime.TimeLocalL().DateTime();
+ TDateTime prevEnd = previousEndTime.TimeLocalL().DateTime();
+ startTime.setDate(QDate(prevStart.Year(), prevStart.Month()+1,
+ prevStart.Day() + 1));
+ startTime.setTime(QTime(prevStart.Hour(), prevStart.Minute(), 0, 0));
+ endTime.setDate(QDate(prevEnd.Year(), prevEnd.Month()+1,
+ prevEnd.Day() + 1));
+ endTime.setTime(QTime(prevEnd.Hour(), prevEnd.Minute(), 0, 0));
+ } else {
+ QDateTime nullDateTime;
+ startTime = nullDateTime;
+ endTime = nullDateTime;
+ }
delete calEntry;
- int count = entries.Count();
- for (int i = count - 1; i >= 0; --i) {
- CCalEntry *instance = entries[i];
- delete instance;
- }
CleanupStack::PopAndDestroy(&entries);
}
@@ -2227,7 +2249,7 @@
QDateTime& endTime)
{
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
TCalTime nextStartTime;
TCalTime nextEndTime;
TTime zero(TInt64(0));
@@ -2341,9 +2363,19 @@
keepLooking = EFalse;
break;
}
- // Is currentInstanceDate before parent dt start?
- if (currentInstanceDate.TimeLocalL() <
- entries[0]->StartTimeL().TimeLocalL()) {
+ // Is currentInstanceDate after repeat until date?
+ if (currentInstanceDate.TimeLocalL() >
+ rrule.Until().TimeLocalL()) {
+ TBool exceptionEntryAfterRepeatUntilPresent = EFalse;
+ for (TInt i=0; i<exdates.Count(); ++i) {
+ if(exdates[i].TimeLocalL() > rrule.Until().TimeLocalL()) {
+ exceptionEntryAfterRepeatUntilPresent = ETrue;
+ }
+ }
+ if (!exceptionEntryAfterRepeatUntilPresent) {
+ currentInstanceDate.SetTimeLocalL(Time::NullTTime());
+ nextStartTime = currentInstanceDate;
+ }
// There are no instances before the exception
keepLooking = EFalse;
} else {
@@ -2386,22 +2418,24 @@
CleanupStack::PopAndDestroy( &exdates );
}
}
- // Convert TCalTimes to QDateTimes
- TDateTime nextStart = nextStartTime.TimeLocalL().DateTime();
- TDateTime nextEnd = nextEndTime.TimeLocalL().DateTime();
- startTime.setDate(QDate(nextStart.Year(), nextStart.Month()+1,
- nextStart.Day() + 1));
- startTime.setTime(QTime(nextStart.Hour(), nextStart.Minute(), 0, 0));
- endTime.setDate(QDate(nextEnd.Year(), nextEnd.Month()+1,
- nextEnd.Day() + 1));
- endTime.setTime(QTime(nextEnd.Hour(), nextEnd.Minute(), 0, 0));
+ if (nextStartTime.TimeUtcL() != Time::NullTTime()) {
+ // Convert TCalTimes to QDateTimes
+ TDateTime nextStart = nextStartTime.TimeLocalL().DateTime();
+ TDateTime nextEnd = nextEndTime.TimeLocalL().DateTime();
+ startTime.setDate(QDate(nextStart.Year(), nextStart.Month()+1,
+ nextStart.Day() + 1));
+ startTime.setTime(QTime(nextStart.Hour(), nextStart.Minute(), 0, 0));
+ endTime.setDate(QDate(nextEnd.Year(), nextEnd.Month()+1,
+ nextEnd.Day() + 1));
+ endTime.setTime(QTime(nextEnd.Hour(), nextEnd.Minute(), 0, 0));
+ } else {
+ QDateTime nullDateTime;
+ startTime = nullDateTime;
+ endTime = nullDateTime;
+ }
delete calEntry;
- int count = entries.Count();
- for (int i = count - 1; i >= 0; --i) {
- CCalEntry *instance = entries[i];
- delete instance;
- }
+
CleanupStack::PopAndDestroy(&entries);
}
@@ -2420,7 +2454,7 @@
bool isEmpty;
// Query for the entries for entire range
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
// Create the filter
CalCommon::TCalViewFilter filters = AgendaUtil::IncludeAnniversaries
@@ -2457,7 +2491,9 @@
} else {
isEmpty = true;
}
- CleanupStack::PopAndDestroy();
+
+ // Cleanup
+ CleanupStack::PopAndDestroy( &instanceList );
return isEmpty;
}
@@ -2621,8 +2657,7 @@
entry.setStartAndEndTime(startDateTime, endDateTime);
// Attendees.
- RPointerArray<CCalAttendee> calAttendees = calEntry.AttendeesL();
- CleanupClosePushL(calAttendees);
+ RPointerArray<CCalAttendee>& calAttendees = calEntry.AttendeesL();
for (int i = 0; i < calAttendees.Count(); i++) {
AgendaAttendee attendee;
@@ -2649,11 +2684,9 @@
calAttendees[i]->StatusL()));
entry.addAttendee(attendee);
}
- CleanupStack::Pop(&calAttendees);
// Categories.
- RPointerArray<CCalCategory> calCategories = calEntry.CategoryListL();
- CleanupClosePushL(calCategories);
+ const RPointerArray<CCalCategory>& calCategories = calEntry.CategoryListL();
for (int i = 0; i < calCategories.Count(); i++) {
AgendaCategory category;
@@ -2669,7 +2702,6 @@
static_cast<AgendaCategory::CategoryType>(categoryType));
entry.addCategory(category);
}
- CleanupStack::PopAndDestroy(&calCategories);
// Id.
entry.d->m_id = calEntry.LocalUidL();
@@ -2951,7 +2983,7 @@
CalCommon::TCalTimeRange dayRange(dummy, dummy);
getDayRange(entry.startTime(), entry.startTime(), dayRange);
RPointerArray<CCalInstance> instances;
- CleanupClosePushL(instances);
+ CleanupResetAndDestroyPushL(instances);
iCalInstanceView->FindInstanceL(instances, CalCommon::EIncludeAll, dayRange);
TTime entryStartTime(dayRange.StartTime().TimeLocalL());
@@ -3371,7 +3403,7 @@
const CalCommon::TCalTimeRange& timeRange)
{
RPointerArray<CCalInstance> allInstances;
- CleanupClosePushL( allInstances );
+ CleanupResetAndDestroyPushL(allInstances);
TInt filter;
// Get the entry type to be filtered
@@ -3420,7 +3452,7 @@
const CalCommon::TCalTimeRange& timeRange)
{
RPointerArray<CCalInstance> allInstances;
- CleanupClosePushL( allInstances );
+ CleanupResetAndDestroyPushL(allInstances);
TInt filter;
// Get the entry type to be filtered
@@ -3661,16 +3693,14 @@
oldEntries[i]->SequenceNumberL(),
recId,
oldEntries[i]->RecurrenceRangeL() );
- CleanupStack::PushL(exception);
exception->CopyFromL(*oldEntries[i]);
exception->SetLastModifiedDateL();
TInt successCount=0;
RPointerArray<CCalEntry> entries;
- CleanupClosePushL( entries );
+ CleanupResetAndDestroyPushL(entries);
entries.Append( exception );
iCalEntryView->StoreL( entries, successCount );
CleanupStack::PopAndDestroy( &entries );
- CleanupStack::PopAndDestroy(exception);
}
else
{
@@ -3683,10 +3713,10 @@
oldEntries[i]->SetLastModifiedDateL();
TInt successCount=0;
RPointerArray<CCalEntry> entries;
- CleanupClosePushL( entries );
+ CleanupClosePushL(entries);
entries.Append( oldEntries[i] );
iCalEntryView->StoreL( entries, successCount );
- CleanupStack::PopAndDestroy( &entries );
+ CleanupStack::Pop( &entries );
}
}
}
--- a/agendainterface/bwins/agendainterfaceu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,183 +0,0 @@
-EXPORTS
- ?minTime@AgendaUtil@@SA?AVQDateTime@@XZ @ 1 NONAME ; class QDateTime AgendaUtil::minTime(void)
- ??4AgendaCategory@@QAEAAV0@ABV0@@Z @ 2 NONAME ; class AgendaCategory & AgendaCategory::operator=(class AgendaCategory const &)
- ?addEntry@AgendaUtil@@QAEKABVAgendaEntry@@@Z @ 3 NONAME ; unsigned long AgendaUtil::addEntry(class AgendaEntry const &)
- ??_EAgendaEntry@@UAE@I@Z @ 4 NONAME ; AgendaEntry::~AgendaEntry(unsigned int)
- ??8AgendaEntry@@QBE_NABV0@@Z @ 5 NONAME ; bool AgendaEntry::operator==(class AgendaEntry const &) const
- ??1AgendaAlarm@@QAE@XZ @ 6 NONAME ; AgendaAlarm::~AgendaAlarm(void)
- ?setAlarm@AgendaEntry@@QAEXABVAgendaAlarm@@@Z @ 7 NONAME ; void AgendaEntry::setAlarm(class AgendaAlarm const &)
- ?isNull@AgendaEntry@@QBE_NXZ @ 8 NONAME ; bool AgendaEntry::isNull(void) const
- ?isNull@AgendaCategory@@QBE_NXZ @ 9 NONAME ; bool AgendaCategory::isNull(void) const
- ??8AgendaRepeatRule@@QBE_NABV0@@Z @ 10 NONAME ; bool AgendaRepeatRule::operator==(class AgendaRepeatRule const &) const
- ?entryUpdated@AgendaUtil@@IAEXK@Z @ 11 NONAME ; void AgendaUtil::entryUpdated(unsigned long)
- ?alarmSoundName@AgendaAlarm@@QBE?AVQString@@XZ @ 12 NONAME ; class QString AgendaAlarm::alarmSoundName(void) const
- ?alarm@AgendaEntry@@QBE?AVAgendaAlarm@@XZ @ 13 NONAME ; class AgendaAlarm AgendaEntry::alarm(void) const
- ?responseRequested@AgendaAttendee@@QBE_NXZ @ 14 NONAME ; bool AgendaAttendee::responseRequested(void) const
- ?startTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 15 NONAME ; class QDateTime AgendaEntry::startTime(void) const
- ?geoValue@AgendaEntry@@QBE?AVAgendaGeoValue@@XZ @ 16 NONAME ; class AgendaGeoValue AgendaEntry::geoValue(void) const
- ?getNextInstanceTimes@AgendaUtil@@QAEXAAVAgendaEntry@@AAVQDateTime@@1@Z @ 17 NONAME ; void AgendaUtil::getNextInstanceTimes(class AgendaEntry &, class QDateTime &, class QDateTime &)
- ?exportAsvCalendar@AgendaUtil@@QAE_NABVQString@@J@Z @ 18 NONAME ; bool AgendaUtil::exportAsvCalendar(class QString const &, long)
- ??_EAgendaAttendee@@UAE@I@Z @ 19 NONAME ; AgendaAttendee::~AgendaAttendee(unsigned int)
- ??9AgendaAlarm@@QBE_NABV0@@Z @ 20 NONAME ; bool AgendaAlarm::operator!=(class AgendaAlarm const &) const
- ?isNull@AgendaAlarm@@QBE_NXZ @ 21 NONAME ; bool AgendaAlarm::isNull(void) const
- ?extendedCategoryName@AgendaCategory@@QBE?AVQString@@XZ @ 22 NONAME ; class QString AgendaCategory::extendedCategoryName(void) const
- ?entryIds@AgendaUtil@@QAE?AV?$QList@K@@W4FilterFlags@1@@Z @ 23 NONAME ; class QList<unsigned long> AgendaUtil::entryIds(enum AgendaUtil::FilterFlags)
- ?isRepeating@AgendaEntry@@QAE_NXZ @ 24 NONAME ; bool AgendaEntry::isRepeating(void)
- ?clearRepeatingProperties@AgendaUtil@@QAEXAAVAgendaEntry@@@Z @ 25 NONAME ; void AgendaUtil::clearRepeatingProperties(class AgendaEntry &)
- ?deleteRepeatedEntry@AgendaUtil@@QAEXAAVAgendaEntry@@W4RecurrenceRange@1@@Z @ 26 NONAME ; void AgendaUtil::deleteRepeatedEntry(class AgendaEntry &, enum AgendaUtil::RecurrenceRange)
- ?tr@AgendaUtil@@SA?AVQString@@PBD0H@Z @ 27 NONAME ; class QString AgendaUtil::tr(char const *, char const *, int)
- ?description@AgendaEntry@@QBE?AVQString@@XZ @ 28 NONAME ; class QString AgendaEntry::description(void) const
- ??0AgendaUtil@@QAE@PAVQObject@@@Z @ 29 NONAME ; AgendaUtil::AgendaUtil(class QObject *)
- ?categories@AgendaEntry@@QAEAAV?$QList@VAgendaCategory@@@@XZ @ 30 NONAME ; class QList<class AgendaCategory> & AgendaEntry::categories(void)
- ?createException@AgendaUtil@@QAE_NABVAgendaEntry@@@Z @ 31 NONAME ; bool AgendaUtil::createException(class AgendaEntry const &)
- ?entriesChanged@AgendaUtil@@IAEXV?$QList@K@@@Z @ 32 NONAME ; void AgendaUtil::entriesChanged(class QList<unsigned long>)
- ??0AgendaGeoValue@@QAE@XZ @ 33 NONAME ; AgendaGeoValue::AgendaGeoValue(void)
- ?status@AgendaAttendee@@QBE?AW4StatusType@1@XZ @ 34 NONAME ; enum AgendaAttendee::StatusType AgendaAttendee::status(void) const
- ?markDatesWithEvents@AgendaUtil@@QAEXVQDateTime@@0W4FilterFlags@1@AAV?$QList@VQDate@@@@@Z @ 35 NONAME ; void AgendaUtil::markDatesWithEvents(class QDateTime, class QDateTime, enum AgendaUtil::FilterFlags, class QList<class QDate> &)
- ??9AgendaGeoValue@@QBE_NABV0@@Z @ 36 NONAME ; bool AgendaGeoValue::operator!=(class AgendaGeoValue const &) const
- ??0AgendaAlarm@@QAE@XZ @ 37 NONAME ; AgendaAlarm::AgendaAlarm(void)
- ?byMonth@AgendaRepeatRule@@QBE?AV?$QList@W4Month@AgendaRepeatRule@@@@XZ @ 38 NONAME ; class QList<enum AgendaRepeatRule::Month> AgendaRepeatRule::byMonth(void) const
- ?isNull@AgendaAttendee@@QBE_NXZ @ 39 NONAME ; bool AgendaAttendee::isNull(void) const
- ?setAddress@AgendaAttendee@@QAEXABVQString@@@Z @ 40 NONAME ; void AgendaAttendee::setAddress(class QString const &)
- ?setRepeatRuleStart@AgendaRepeatRule@@QAEXABVQDateTime@@@Z @ 41 NONAME ; void AgendaRepeatRule::setRepeatRuleStart(class QDateTime const &)
- ?trUtf8@AgendaUtil@@SA?AVQString@@PBD0H@Z @ 42 NONAME ; class QString AgendaUtil::trUtf8(char const *, char const *, int)
- ?setLastModifiedDateTime@AgendaEntry@@QAEXABVQDateTime@@@Z @ 43 NONAME ; void AgendaEntry::setLastModifiedDateTime(class QDateTime const &)
- ??0AgendaAlarm@@QAE@ABV0@@Z @ 44 NONAME ; AgendaAlarm::AgendaAlarm(class AgendaAlarm const &)
- ?setSummary@AgendaEntry@@QAEXABVQString@@@Z @ 45 NONAME ; void AgendaEntry::setSummary(class QString const &)
- ?setByMonthDay@AgendaRepeatRule@@QAEXABV?$QList@H@@@Z @ 46 NONAME ; void AgendaRepeatRule::setByMonthDay(class QList<int> const &)
- ??1AgendaEntry@@UAE@XZ @ 47 NONAME ; AgendaEntry::~AgendaEntry(void)
- ?setResponseRequested@AgendaAttendee@@QAEX_N@Z @ 48 NONAME ; void AgendaAttendee::setResponseRequested(bool)
- ??1AgendaRepeatRule@@QAE@XZ @ 49 NONAME ; AgendaRepeatRule::~AgendaRepeatRule(void)
- ?byMonthDay@AgendaRepeatRule@@QBE?AV?$QList@H@@XZ @ 50 NONAME ; class QList<int> AgendaRepeatRule::byMonthDay(void) const
- ?detach@AgendaGeoValue@@AAEXXZ @ 51 NONAME ; void AgendaGeoValue::detach(void)
- ?detach@AgendaEntry@@AAEXXZ @ 52 NONAME ; void AgendaEntry::detach(void)
- ??9AgendaAttendee@@QBE_NABV0@@Z @ 53 NONAME ; bool AgendaAttendee::operator!=(class AgendaAttendee const &) const
- ??9AgendaRepeatRule@@QBE_NABV0@@Z @ 54 NONAME ; bool AgendaRepeatRule::operator!=(class AgendaRepeatRule const &) const
- ?weekStart@AgendaRepeatRule@@QBE?AW4Day@1@XZ @ 55 NONAME ; enum AgendaRepeatRule::Day AgendaRepeatRule::weekStart(void) const
- ??4AgendaAlarm@@QAEAAV0@ABV0@@Z @ 56 NONAME ; class AgendaAlarm & AgendaAlarm::operator=(class AgendaAlarm const &)
- ?lastModifiedDateTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 57 NONAME ; class QDateTime AgendaEntry::lastModifiedDateTime(void) const
- ?attendees@AgendaEntry@@QBEABV?$QList@VAgendaAttendee@@@@XZ @ 58 NONAME ; class QList<class AgendaAttendee> const & AgendaEntry::attendees(void) const
- ?setInterval@AgendaRepeatRule@@QAEXH@Z @ 59 NONAME ; void AgendaRepeatRule::setInterval(int)
- ?updateEntry@AgendaUtil@@QAE_NABVAgendaEntry@@_N@Z @ 60 NONAME ; bool AgendaUtil::updateEntry(class AgendaEntry const &, bool)
- ??8AgendaGeoValue@@QBE_NABV0@@Z @ 61 NONAME ; bool AgendaGeoValue::operator==(class AgendaGeoValue const &) const
- ?id@AgendaEntry@@QBEKXZ @ 62 NONAME ; unsigned long AgendaEntry::id(void) const
- ?setByDay@AgendaRepeatRule@@QAEXABV?$QList@W4Day@AgendaRepeatRule@@@@@Z @ 63 NONAME ; void AgendaRepeatRule::setByDay(class QList<enum AgendaRepeatRule::Day> const &)
- ?setUntil@AgendaRepeatRule@@QAEXABVQDateTime@@@Z @ 64 NONAME ; void AgendaRepeatRule::setUntil(class QDateTime const &)
- ?setType@AgendaRepeatRule@@QAEXW4RuleType@1@@Z @ 65 NONAME ; void AgendaRepeatRule::setType(enum AgendaRepeatRule::RuleType)
- ?interval@AgendaRepeatRule@@QBEHXZ @ 66 NONAME ; int AgendaRepeatRule::interval(void) const
- ?rDates@AgendaEntry@@QBE?AV?$QList@VQDate@@@@XZ @ 67 NONAME ; class QList<class QDate> AgendaEntry::rDates(void) const
- ?repeatRuleStart@AgendaRepeatRule@@QBE?AVQDateTime@@XZ @ 68 NONAME ; class QDateTime AgendaRepeatRule::repeatRuleStart(void) const
- ??8AgendaAlarm@@QBE_NABV0@@Z @ 69 NONAME ; bool AgendaAlarm::operator==(class AgendaAlarm const &) const
- ?storeRepeatingEntry@AgendaUtil@@QAE_NABVAgendaEntry@@_N@Z @ 70 NONAME ; bool AgendaUtil::storeRepeatingEntry(class AgendaEntry const &, bool)
- ??0AgendaRepeatRule@@QAE@ABV0@@Z @ 71 NONAME ; AgendaRepeatRule::AgendaRepeatRule(class AgendaRepeatRule const &)
- ?setStatus@AgendaAttendee@@QAEXW4StatusType@1@@Z @ 72 NONAME ; void AgendaAttendee::setStatus(enum AgendaAttendee::StatusType)
- ?setStatus@AgendaEntry@@QAEXW4Status@1@@Z @ 73 NONAME ; void AgendaEntry::setStatus(enum AgendaEntry::Status)
- ?setExtendedCategoryName@AgendaCategory@@QAEXABVQString@@@Z @ 74 NONAME ; void AgendaCategory::setExtendedCategoryName(class QString const &)
- ?setDescription@AgendaEntry@@QAEXABVQString@@@Z @ 75 NONAME ; void AgendaEntry::setDescription(class QString const &)
- ?recurrenceId@AgendaEntry@@QAE?AVQDateTime@@XZ @ 76 NONAME ; class QDateTime AgendaEntry::recurrenceId(void)
- ?until@AgendaRepeatRule@@QBE?AVQDateTime@@XZ @ 77 NONAME ; class QDateTime AgendaRepeatRule::until(void) const
- ?setByMonth@AgendaRepeatRule@@QAEXABV?$QList@W4Month@AgendaRepeatRule@@@@@Z @ 78 NONAME ; void AgendaRepeatRule::setByMonth(class QList<enum AgendaRepeatRule::Month> const &)
- ?qt_metacall@AgendaUtil@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 79 NONAME ; int AgendaUtil::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?qt_metacast@AgendaUtil@@UAEPAXPBD@Z @ 80 NONAME ; void * AgendaUtil::qt_metacast(char const *)
- ?isNull@AgendaRepeatRule@@QBE_NXZ @ 81 NONAME ; bool AgendaRepeatRule::isNull(void) const
- ?getStaticMetaObject@AgendaUtil@@SAABUQMetaObject@@XZ @ 82 NONAME ; struct QMetaObject const & AgendaUtil::getStaticMetaObject(void)
- ??8AgendaAttendee@@QBE_NABV0@@Z @ 83 NONAME ; bool AgendaAttendee::operator==(class AgendaAttendee const &) const
- ?addCategory@AgendaEntry@@QAEXABVAgendaCategory@@@Z @ 84 NONAME ; void AgendaEntry::addCategory(class AgendaCategory const &)
- ?setLocation@AgendaEntry@@QAEXABVQString@@@Z @ 85 NONAME ; void AgendaEntry::setLocation(class QString const &)
- ?isTimedEntry@AgendaEntry@@QAE_NXZ @ 86 NONAME ; bool AgendaEntry::isTimedEntry(void)
- ?favourite@AgendaEntry@@QBEIXZ @ 87 NONAME ; unsigned int AgendaEntry::favourite(void) const
- ?durationInSecs@AgendaEntry@@QBEHXZ @ 88 NONAME ; int AgendaEntry::durationInSecs(void) const
- ??1AgendaUtil@@UAE@XZ @ 89 NONAME ; AgendaUtil::~AgendaUtil(void)
- ?category@AgendaCategory@@QBE?AW4CategoryType@1@XZ @ 90 NONAME ; enum AgendaCategory::CategoryType AgendaCategory::category(void) const
- ?entryAdded@AgendaUtil@@IAEXK@Z @ 91 NONAME ; void AgendaUtil::entryAdded(unsigned long)
- ?role@AgendaAttendee@@QBE?AW4ParticipantRole@1@XZ @ 92 NONAME ; enum AgendaAttendee::ParticipantRole AgendaAttendee::role(void) const
- ?type@AgendaEntry@@QBE?AW4Type@1@XZ @ 93 NONAME ; enum AgendaEntry::Type AgendaEntry::type(void) const
- ??0AgendaEntry@@QAE@W4Type@0@@Z @ 94 NONAME ; AgendaEntry::AgendaEntry(enum AgendaEntry::Type)
- ?detach@AgendaRepeatRule@@AAEXXZ @ 95 NONAME ; void AgendaRepeatRule::detach(void)
- ?error@AgendaUtil@@QBE?AW4Error@1@XZ @ 96 NONAME ; enum AgendaUtil::Error AgendaUtil::error(void) const
- ?trUtf8@AgendaUtil@@SA?AVQString@@PBD0@Z @ 97 NONAME ; class QString AgendaUtil::trUtf8(char const *, char const *)
- ?status@AgendaEntry@@QBE?AW4Status@1@XZ @ 98 NONAME ; enum AgendaEntry::Status AgendaEntry::status(void) const
- ??0AgendaEntry@@QAE@ABV0@@Z @ 99 NONAME ; AgendaEntry::AgendaEntry(class AgendaEntry const &)
- ??4AgendaAttendee@@QAEAAV0@ABV0@@Z @ 100 NONAME ; class AgendaAttendee & AgendaAttendee::operator=(class AgendaAttendee const &)
- ?address@AgendaAttendee@@QBE?AVQString@@XZ @ 101 NONAME ; class QString AgendaAttendee::address(void) const
- ?entryDeleted@AgendaUtil@@IAEXK@Z @ 102 NONAME ; void AgendaUtil::entryDeleted(unsigned long)
- ?summary@AgendaEntry@@QBE?AVQString@@XZ @ 103 NONAME ; class QString AgendaEntry::summary(void) const
- ?priority@AgendaEntry@@QBEHXZ @ 104 NONAME ; int AgendaEntry::priority(void) const
- ?fetchById@AgendaUtil@@QAE?AVAgendaEntry@@K@Z @ 105 NONAME ; class AgendaEntry AgendaUtil::fetchById(unsigned long)
- ?setCommonName@AgendaAttendee@@QAEXABVQString@@@Z @ 106 NONAME ; void AgendaAttendee::setCommonName(class QString const &)
- ?setMethod@AgendaEntry@@QAEXW4Method@1@@Z @ 107 NONAME ; void AgendaEntry::setMethod(enum AgendaEntry::Method)
- ?setRDates@AgendaEntry@@QAEXABV?$QList@VQDate@@@@@Z @ 108 NONAME ; void AgendaEntry::setRDates(class QList<class QDate> const &)
- ?parentEntry@AgendaUtil@@QAE?AVAgendaEntry@@AAV2@@Z @ 109 NONAME ; class AgendaEntry AgendaUtil::parentEntry(class AgendaEntry &)
- ?addAttendee@AgendaEntry@@QAEXABVAgendaAttendee@@@Z @ 110 NONAME ; void AgendaEntry::addAttendee(class AgendaAttendee const &)
- ?setCompleted@AgendaUtil@@QAEXAAVAgendaEntry@@_NAAVQDateTime@@@Z @ 111 NONAME ; void AgendaUtil::setCompleted(class AgendaEntry &, bool, class QDateTime &)
- ??0AgendaCategory@@QAE@XZ @ 112 NONAME ; AgendaCategory::AgendaCategory(void)
- ?timeOffset@AgendaAlarm@@QBEHXZ @ 113 NONAME ; int AgendaAlarm::timeOffset(void) const
- ??0AgendaAttendee@@QAE@XZ @ 114 NONAME ; AgendaAttendee::AgendaAttendee(void)
- ?setAlarmSoundName@AgendaAlarm@@QAEXABVQString@@@Z @ 115 NONAME ; void AgendaAlarm::setAlarmSoundName(class QString const &)
- ?fetchEntriesInRange@AgendaUtil@@QAE?AV?$QList@VAgendaEntry@@@@VQDateTime@@0W4FilterFlags@1@@Z @ 116 NONAME ; class QList<class AgendaEntry> AgendaUtil::fetchEntriesInRange(class QDateTime, class QDateTime, enum AgendaUtil::FilterFlags)
- ?detach@AgendaAlarm@@AAEXXZ @ 117 NONAME ; void AgendaAlarm::detach(void)
- ?setWeekStart@AgendaRepeatRule@@QAEXW4Day@1@@Z @ 118 NONAME ; void AgendaRepeatRule::setWeekStart(enum AgendaRepeatRule::Day)
- ?setFavourite@AgendaEntry@@QAEXI@Z @ 119 NONAME ; void AgendaEntry::setFavourite(unsigned int)
- ?setDTStamp@AgendaEntry@@QAEXABVQDateTime@@@Z @ 120 NONAME ; void AgendaEntry::setDTStamp(class QDateTime const &)
- ?cloneEntry@AgendaUtil@@QAEKABVAgendaEntry@@W4Type@2@@Z @ 121 NONAME ; unsigned long AgendaUtil::cloneEntry(class AgendaEntry const &, enum AgendaEntry::Type)
- ?setRepeatRule@AgendaEntry@@QAEXABVAgendaRepeatRule@@@Z @ 122 NONAME ; void AgendaEntry::setRepeatRule(class AgendaRepeatRule const &)
- ?categories@AgendaEntry@@QBEABV?$QList@VAgendaCategory@@@@XZ @ 123 NONAME ; class QList<class AgendaCategory> const & AgendaEntry::categories(void) const
- ?tr@AgendaUtil@@SA?AVQString@@PBD0@Z @ 124 NONAME ; class QString AgendaUtil::tr(char const *, char const *)
- ??4AgendaRepeatRule@@QAEAAV0@ABV0@@Z @ 125 NONAME ; class AgendaRepeatRule & AgendaRepeatRule::operator=(class AgendaRepeatRule const &)
- ?setCompletedDateTime@AgendaEntry@@QAEXABVQDateTime@@@Z @ 126 NONAME ; void AgendaEntry::setCompletedDateTime(class QDateTime const &)
- ??0AgendaRepeatRule@@QAE@XZ @ 127 NONAME ; AgendaRepeatRule::AgendaRepeatRule(void)
- ?dtStamp@AgendaEntry@@QBE?AVQDateTime@@XZ @ 128 NONAME ; class QDateTime AgendaEntry::dtStamp(void) const
- ?method@AgendaEntry@@QBE?AW4Method@1@XZ @ 129 NONAME ; enum AgendaEntry::Method AgendaEntry::method(void) const
- ?type@AgendaRepeatRule@@QBE?AW4RuleType@1@XZ @ 130 NONAME ; enum AgendaRepeatRule::RuleType AgendaRepeatRule::type(void) const
- ??4AgendaGeoValue@@QAEAAV0@ABV0@@Z @ 131 NONAME ; class AgendaGeoValue & AgendaGeoValue::operator=(class AgendaGeoValue const &)
- ??0AgendaCategory@@QAE@W4CategoryType@0@@Z @ 132 NONAME ; AgendaCategory::AgendaCategory(enum AgendaCategory::CategoryType)
- ?commonName@AgendaAttendee@@QBE?AVQString@@XZ @ 133 NONAME ; class QString AgendaAttendee::commonName(void) const
- ?detach@AgendaCategory@@AAEXXZ @ 134 NONAME ; void AgendaCategory::detach(void)
- ??0AgendaGeoValue@@QAE@ABV0@@Z @ 135 NONAME ; AgendaGeoValue::AgendaGeoValue(class AgendaGeoValue const &)
- ?isWorkdaysRepeatingEntry@AgendaUtil@@SA_NABVAgendaRepeatRule@@@Z @ 136 NONAME ; bool AgendaUtil::isWorkdaysRepeatingEntry(class AgendaRepeatRule const &)
- ?setRole@AgendaAttendee@@QAEXW4ParticipantRole@1@@Z @ 137 NONAME ; void AgendaAttendee::setRole(enum AgendaAttendee::ParticipantRole)
- ?detach@AgendaAttendee@@AAEXXZ @ 138 NONAME ; void AgendaAttendee::detach(void)
- ?getLatLong@AgendaGeoValue@@QBEXAAN0@Z @ 139 NONAME ; void AgendaGeoValue::getLatLong(double &, double &) const
- ?maxTime@AgendaUtil@@SA?AVQDateTime@@XZ @ 140 NONAME ; class QDateTime AgendaUtil::maxTime(void)
- ?setCategory@AgendaCategory@@QAEXW4CategoryType@1@@Z @ 141 NONAME ; void AgendaCategory::setCategory(enum AgendaCategory::CategoryType)
- ?endTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 142 NONAME ; class QDateTime AgendaEntry::endTime(void) const
- ??9AgendaEntry@@QBE_NABV0@@Z @ 143 NONAME ; bool AgendaEntry::operator!=(class AgendaEntry const &) const
- ??0AgendaRepeatRule@@QAE@W4RuleType@0@@Z @ 144 NONAME ; AgendaRepeatRule::AgendaRepeatRule(enum AgendaRepeatRule::RuleType)
- ??9AgendaCategory@@QBE_NABV0@@Z @ 145 NONAME ; bool AgendaCategory::operator!=(class AgendaCategory const &) const
- ??0AgendaAttendee@@QAE@ABV0@@Z @ 146 NONAME ; AgendaAttendee::AgendaAttendee(class AgendaAttendee const &)
- ??0AgendaAttendee@@QAE@ABVQString@@@Z @ 147 NONAME ; AgendaAttendee::AgendaAttendee(class QString const &)
- ?importvCalendar@AgendaUtil@@QAEHABVQString@@AAVAgendaEntry@@@Z @ 148 NONAME ; int AgendaUtil::importvCalendar(class QString const &, class AgendaEntry &)
- ??_EAgendaUtil@@UAE@I@Z @ 149 NONAME ; AgendaUtil::~AgendaUtil(unsigned int)
- ?setGeoValue@AgendaEntry@@QAEXABVAgendaGeoValue@@@Z @ 150 NONAME ; void AgendaEntry::setGeoValue(class AgendaGeoValue const &)
- ?getPreviousInstanceTimes@AgendaUtil@@QAEXAAVAgendaEntry@@AAVQDateTime@@1@Z @ 151 NONAME ; void AgendaUtil::getPreviousInstanceTimes(class AgendaEntry &, class QDateTime &, class QDateTime &)
- ?attendees@AgendaEntry@@QAEAAV?$QList@VAgendaAttendee@@@@XZ @ 152 NONAME ; class QList<class AgendaAttendee> & AgendaEntry::attendees(void)
- ?staticMetaObject@AgendaUtil@@2UQMetaObject@@B @ 153 NONAME ; struct QMetaObject const AgendaUtil::staticMetaObject
- ?entriesDeleted@AgendaUtil@@IAEXH@Z @ 154 NONAME ; void AgendaUtil::entriesDeleted(int)
- ?fetchAllEntries@AgendaUtil@@QAE?AV?$QList@VAgendaEntry@@@@W4FilterFlags@1@@Z @ 155 NONAME ; class QList<class AgendaEntry> AgendaUtil::fetchAllEntries(enum AgendaUtil::FilterFlags)
- ?setTimeOffset@AgendaAlarm@@QAEXH@Z @ 156 NONAME ; void AgendaAlarm::setTimeOffset(int)
- ??0AgendaEntry@@QAE@XZ @ 157 NONAME ; AgendaEntry::AgendaEntry(void)
- ?setPriority@AgendaEntry@@QAEXH@Z @ 158 NONAME ; void AgendaEntry::setPriority(int)
- ?setType@AgendaEntry@@QAEXW4Type@1@@Z @ 159 NONAME ; void AgendaEntry::setType(enum AgendaEntry::Type)
- ?setStartAndEndTime@AgendaEntry@@QAE_NABVQDateTime@@0@Z @ 160 NONAME ; bool AgendaEntry::setStartAndEndTime(class QDateTime const &, class QDateTime const &)
- ?deleteEntries@AgendaUtil@@QAEXAAVQDateTime@@0W4FilterFlags@1@@Z @ 161 NONAME ; void AgendaUtil::deleteEntries(class QDateTime &, class QDateTime &, enum AgendaUtil::FilterFlags)
- ?metaObject@AgendaUtil@@UBEPBUQMetaObject@@XZ @ 162 NONAME ; struct QMetaObject const * AgendaUtil::metaObject(void) const
- ?location@AgendaEntry@@QBE?AVQString@@XZ @ 163 NONAME ; class QString AgendaEntry::location(void) const
- ??8AgendaCategory@@QBE_NABV0@@Z @ 164 NONAME ; bool AgendaCategory::operator==(class AgendaCategory const &) const
- ??0AgendaCategory@@QAE@ABV0@@Z @ 165 NONAME ; AgendaCategory::AgendaCategory(class AgendaCategory const &)
- ??1AgendaGeoValue@@QAE@XZ @ 166 NONAME ; AgendaGeoValue::~AgendaGeoValue(void)
- ??4AgendaEntry@@QAEAAV0@ABV0@@Z @ 167 NONAME ; class AgendaEntry & AgendaEntry::operator=(class AgendaEntry const &)
- ??_EAgendaCategory@@UAE@I@Z @ 168 NONAME ; AgendaCategory::~AgendaCategory(unsigned int)
- ?createEntryIdListForDay@AgendaUtil@@QAE?AV?$QList@VAgendaEntry@@@@VQDateTime@@W4FilterFlags@1@@Z @ 169 NONAME ; class QList<class AgendaEntry> AgendaUtil::createEntryIdListForDay(class QDateTime, enum AgendaUtil::FilterFlags)
- ?repeatRule@AgendaEntry@@QBE?AVAgendaRepeatRule@@XZ @ 170 NONAME ; class AgendaRepeatRule AgendaEntry::repeatRule(void) const
- ??1AgendaCategory@@UAE@XZ @ 171 NONAME ; AgendaCategory::~AgendaCategory(void)
- ?deleteEntry@AgendaUtil@@QAE_NK@Z @ 172 NONAME ; bool AgendaUtil::deleteEntry(unsigned long)
- ??1AgendaAttendee@@UAE@XZ @ 173 NONAME ; AgendaAttendee::~AgendaAttendee(void)
- ?byDay@AgendaRepeatRule@@QBE?AV?$QList@W4Day@AgendaRepeatRule@@@@XZ @ 174 NONAME ; class QList<enum AgendaRepeatRule::Day> AgendaRepeatRule::byDay(void) const
- ?setLatLong@AgendaGeoValue@@QAEXNN@Z @ 175 NONAME ; void AgendaGeoValue::setLatLong(double, double)
- ?completedDateTime@AgendaEntry@@QBE?AVQDateTime@@XZ @ 176 NONAME ; class QDateTime AgendaEntry::completedDateTime(void) const
- ?setRecurrenceId@AgendaEntry@@QAEXAAVQDateTime@@@Z @ 177 NONAME ; void AgendaEntry::setRecurrenceId(class QDateTime &)
- ?isNull@AgendaGeoValue@@QBE_NXZ @ 178 NONAME ; bool AgendaGeoValue::isNull(void) const
- ?areNoEntriesInCalendar@AgendaUtil@@QAE_NXZ @ 179 NONAME ; bool AgendaUtil::areNoEntriesInCalendar(void)
- ?entryViewCreationCompleted@AgendaUtil@@IAEXH@Z @ 180 NONAME ; void AgendaUtil::entryViewCreationCompleted(int)
- ?instanceViewCreationCompleted@AgendaUtil@@IAEXH@Z @ 181 NONAME ; void AgendaUtil::instanceViewCreationCompleted(int)
-
--- a/agendainterface/eabi/agendainterfaceu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,211 +0,0 @@
-EXPORTS
- _ZN10AgendaUtil10cloneEntryERK11AgendaEntryNS0_4TypeE @ 1 NONAME
- _ZN10AgendaUtil10entryAddedEm @ 2 NONAME
- _ZN10AgendaUtil11deleteEntryEm @ 3 NONAME
- _ZN10AgendaUtil11parentEntryER11AgendaEntry @ 4 NONAME
- _ZN10AgendaUtil11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
- _ZN10AgendaUtil11qt_metacastEPKc @ 6 NONAME
- _ZN10AgendaUtil11updateEntryERK11AgendaEntryb @ 7 NONAME
- _ZN10AgendaUtil12entryDeletedEm @ 8 NONAME
- _ZN10AgendaUtil12entryUpdatedEm @ 9 NONAME
- _ZN10AgendaUtil12setCompletedER11AgendaEntrybR9QDateTime @ 10 NONAME
- _ZN10AgendaUtil13deleteEntriesER9QDateTimeS1_NS_11FilterFlagsE @ 11 NONAME
- _ZN10AgendaUtil14entriesChangedE5QListImE @ 12 NONAME
- _ZN10AgendaUtil14entriesDeletedEi @ 13 NONAME
- _ZN10AgendaUtil15createExceptionERK11AgendaEntry @ 14 NONAME
- _ZN10AgendaUtil15fetchAllEntriesENS_11FilterFlagsE @ 15 NONAME
- _ZN10AgendaUtil15importvCalendarERK7QStringR11AgendaEntry @ 16 NONAME
- _ZN10AgendaUtil16staticMetaObjectE @ 17 NONAME DATA 16
- _ZN10AgendaUtil17exportAsvCalendarERK7QStringl @ 18 NONAME
- _ZN10AgendaUtil19deleteRepeatedEntryER11AgendaEntryNS_15RecurrenceRangeE @ 19 NONAME
- _ZN10AgendaUtil19fetchEntriesInRangeE9QDateTimeS0_NS_11FilterFlagsE @ 20 NONAME
- _ZN10AgendaUtil19getStaticMetaObjectEv @ 21 NONAME
- _ZN10AgendaUtil19markDatesWithEventsE9QDateTimeS0_NS_11FilterFlagsER5QListI5QDateE @ 22 NONAME
- _ZN10AgendaUtil19storeRepeatingEntryERK11AgendaEntryb @ 23 NONAME
- _ZN10AgendaUtil20getNextInstanceTimesER11AgendaEntryR9QDateTimeS3_ @ 24 NONAME
- _ZN10AgendaUtil23createEntryIdListForDayE9QDateTimeNS_11FilterFlagsE @ 25 NONAME
- _ZN10AgendaUtil24clearRepeatingPropertiesER11AgendaEntry @ 26 NONAME
- _ZN10AgendaUtil24getPreviousInstanceTimesER11AgendaEntryR9QDateTimeS3_ @ 27 NONAME
- _ZN10AgendaUtil24isWorkdaysRepeatingEntryERK16AgendaRepeatRule @ 28 NONAME
- _ZN10AgendaUtil7maxTimeEv @ 29 NONAME
- _ZN10AgendaUtil7minTimeEv @ 30 NONAME
- _ZN10AgendaUtil8addEntryERK11AgendaEntry @ 31 NONAME
- _ZN10AgendaUtil8entryIdsENS_11FilterFlagsE @ 32 NONAME
- _ZN10AgendaUtil9fetchByIdEm @ 33 NONAME
- _ZN10AgendaUtilC1EP7QObject @ 34 NONAME
- _ZN10AgendaUtilC2EP7QObject @ 35 NONAME
- _ZN10AgendaUtilD0Ev @ 36 NONAME
- _ZN10AgendaUtilD1Ev @ 37 NONAME
- _ZN10AgendaUtilD2Ev @ 38 NONAME
- _ZN11AgendaAlarm13setTimeOffsetEi @ 39 NONAME
- _ZN11AgendaAlarm17setAlarmSoundNameERK7QString @ 40 NONAME
- _ZN11AgendaAlarm6detachEv @ 41 NONAME
- _ZN11AgendaAlarmC1ERKS_ @ 42 NONAME
- _ZN11AgendaAlarmC1Ev @ 43 NONAME
- _ZN11AgendaAlarmC2ERKS_ @ 44 NONAME
- _ZN11AgendaAlarmC2Ev @ 45 NONAME
- _ZN11AgendaAlarmD1Ev @ 46 NONAME
- _ZN11AgendaAlarmD2Ev @ 47 NONAME
- _ZN11AgendaAlarmaSERKS_ @ 48 NONAME
- _ZN11AgendaEntry10categoriesEv @ 49 NONAME
- _ZN11AgendaEntry10setDTStampERK9QDateTime @ 50 NONAME
- _ZN11AgendaEntry10setSummaryERK7QString @ 51 NONAME
- _ZN11AgendaEntry11addAttendeeERK14AgendaAttendee @ 52 NONAME
- _ZN11AgendaEntry11addCategoryERK14AgendaCategory @ 53 NONAME
- _ZN11AgendaEntry11isRepeatingEv @ 54 NONAME
- _ZN11AgendaEntry11setGeoValueERK14AgendaGeoValue @ 55 NONAME
- _ZN11AgendaEntry11setLocationERK7QString @ 56 NONAME
- _ZN11AgendaEntry11setPriorityEi @ 57 NONAME
- _ZN11AgendaEntry12isTimedEntryEv @ 58 NONAME
- _ZN11AgendaEntry12recurrenceIdEv @ 59 NONAME
- _ZN11AgendaEntry12setFavouriteEj @ 60 NONAME
- _ZN11AgendaEntry13setRepeatRuleERK16AgendaRepeatRule @ 61 NONAME
- _ZN11AgendaEntry14setDescriptionERK7QString @ 62 NONAME
- _ZN11AgendaEntry15setRecurrenceIdER9QDateTime @ 63 NONAME
- _ZN11AgendaEntry18setStartAndEndTimeERK9QDateTimeS2_ @ 64 NONAME
- _ZN11AgendaEntry20setCompletedDateTimeERK9QDateTime @ 65 NONAME
- _ZN11AgendaEntry23setLastModifiedDateTimeERK9QDateTime @ 66 NONAME
- _ZN11AgendaEntry6detachEv @ 67 NONAME
- _ZN11AgendaEntry7setTypeENS_4TypeE @ 68 NONAME
- _ZN11AgendaEntry8setAlarmERK11AgendaAlarm @ 69 NONAME
- _ZN11AgendaEntry9attendeesEv @ 70 NONAME
- _ZN11AgendaEntry9setMethodENS_6MethodE @ 71 NONAME
- _ZN11AgendaEntry9setRDatesERK5QListI5QDateE @ 72 NONAME
- _ZN11AgendaEntry9setStatusENS_6StatusE @ 73 NONAME
- _ZN11AgendaEntryC1ENS_4TypeE @ 74 NONAME
- _ZN11AgendaEntryC1ERKS_ @ 75 NONAME
- _ZN11AgendaEntryC1Ev @ 76 NONAME
- _ZN11AgendaEntryC2ENS_4TypeE @ 77 NONAME
- _ZN11AgendaEntryC2ERKS_ @ 78 NONAME
- _ZN11AgendaEntryC2Ev @ 79 NONAME
- _ZN11AgendaEntryD0Ev @ 80 NONAME
- _ZN11AgendaEntryD1Ev @ 81 NONAME
- _ZN11AgendaEntryD2Ev @ 82 NONAME
- _ZN11AgendaEntryaSERKS_ @ 83 NONAME
- _ZN14AgendaAttendee10setAddressERK7QString @ 84 NONAME
- _ZN14AgendaAttendee13setCommonNameERK7QString @ 85 NONAME
- _ZN14AgendaAttendee20setResponseRequestedEb @ 86 NONAME
- _ZN14AgendaAttendee6detachEv @ 87 NONAME
- _ZN14AgendaAttendee7setRoleENS_15ParticipantRoleE @ 88 NONAME
- _ZN14AgendaAttendee9setStatusENS_10StatusTypeE @ 89 NONAME
- _ZN14AgendaAttendeeC1ERK7QString @ 90 NONAME
- _ZN14AgendaAttendeeC1ERKS_ @ 91 NONAME
- _ZN14AgendaAttendeeC1Ev @ 92 NONAME
- _ZN14AgendaAttendeeC2ERK7QString @ 93 NONAME
- _ZN14AgendaAttendeeC2ERKS_ @ 94 NONAME
- _ZN14AgendaAttendeeC2Ev @ 95 NONAME
- _ZN14AgendaAttendeeD0Ev @ 96 NONAME
- _ZN14AgendaAttendeeD1Ev @ 97 NONAME
- _ZN14AgendaAttendeeD2Ev @ 98 NONAME
- _ZN14AgendaAttendeeaSERKS_ @ 99 NONAME
- _ZN14AgendaCategory11setCategoryENS_12CategoryTypeE @ 100 NONAME
- _ZN14AgendaCategory23setExtendedCategoryNameERK7QString @ 101 NONAME
- _ZN14AgendaCategory6detachEv @ 102 NONAME
- _ZN14AgendaCategoryC1ENS_12CategoryTypeE @ 103 NONAME
- _ZN14AgendaCategoryC1ERKS_ @ 104 NONAME
- _ZN14AgendaCategoryC1Ev @ 105 NONAME
- _ZN14AgendaCategoryC2ENS_12CategoryTypeE @ 106 NONAME
- _ZN14AgendaCategoryC2ERKS_ @ 107 NONAME
- _ZN14AgendaCategoryC2Ev @ 108 NONAME
- _ZN14AgendaCategoryD0Ev @ 109 NONAME
- _ZN14AgendaCategoryD1Ev @ 110 NONAME
- _ZN14AgendaCategoryD2Ev @ 111 NONAME
- _ZN14AgendaCategoryaSERKS_ @ 112 NONAME
- _ZN14AgendaGeoValue10setLatLongEdd @ 113 NONAME
- _ZN14AgendaGeoValue6detachEv @ 114 NONAME
- _ZN14AgendaGeoValueC1ERKS_ @ 115 NONAME
- _ZN14AgendaGeoValueC1Ev @ 116 NONAME
- _ZN14AgendaGeoValueC2ERKS_ @ 117 NONAME
- _ZN14AgendaGeoValueC2Ev @ 118 NONAME
- _ZN14AgendaGeoValueD1Ev @ 119 NONAME
- _ZN14AgendaGeoValueD2Ev @ 120 NONAME
- _ZN14AgendaGeoValueaSERKS_ @ 121 NONAME
- _ZN16AgendaRepeatRule10setByMonthERK5QListINS_5MonthEE @ 122 NONAME
- _ZN16AgendaRepeatRule11setIntervalEi @ 123 NONAME
- _ZN16AgendaRepeatRule12setWeekStartENS_3DayE @ 124 NONAME
- _ZN16AgendaRepeatRule13setByMonthDayERK5QListIiE @ 125 NONAME
- _ZN16AgendaRepeatRule18setRepeatRuleStartERK9QDateTime @ 126 NONAME
- _ZN16AgendaRepeatRule6detachEv @ 127 NONAME
- _ZN16AgendaRepeatRule7setTypeENS_8RuleTypeE @ 128 NONAME
- _ZN16AgendaRepeatRule8setByDayERK5QListINS_3DayEE @ 129 NONAME
- _ZN16AgendaRepeatRule8setUntilERK9QDateTime @ 130 NONAME
- _ZN16AgendaRepeatRuleC1ENS_8RuleTypeE @ 131 NONAME
- _ZN16AgendaRepeatRuleC1ERKS_ @ 132 NONAME
- _ZN16AgendaRepeatRuleC1Ev @ 133 NONAME
- _ZN16AgendaRepeatRuleC2ENS_8RuleTypeE @ 134 NONAME
- _ZN16AgendaRepeatRuleC2ERKS_ @ 135 NONAME
- _ZN16AgendaRepeatRuleC2Ev @ 136 NONAME
- _ZN16AgendaRepeatRuleD1Ev @ 137 NONAME
- _ZN16AgendaRepeatRuleD2Ev @ 138 NONAME
- _ZN16AgendaRepeatRuleaSERKS_ @ 139 NONAME
- _ZNK10AgendaUtil10metaObjectEv @ 140 NONAME
- _ZNK10AgendaUtil5errorEv @ 141 NONAME
- _ZNK11AgendaAlarm10timeOffsetEv @ 142 NONAME
- _ZNK11AgendaAlarm14alarmSoundNameEv @ 143 NONAME
- _ZNK11AgendaAlarm6isNullEv @ 144 NONAME
- _ZNK11AgendaAlarmeqERKS_ @ 145 NONAME
- _ZNK11AgendaAlarmneERKS_ @ 146 NONAME
- _ZNK11AgendaEntry10categoriesEv @ 147 NONAME
- _ZNK11AgendaEntry10repeatRuleEv @ 148 NONAME
- _ZNK11AgendaEntry11descriptionEv @ 149 NONAME
- _ZNK11AgendaEntry14durationInSecsEv @ 150 NONAME
- _ZNK11AgendaEntry17completedDateTimeEv @ 151 NONAME
- _ZNK11AgendaEntry20lastModifiedDateTimeEv @ 152 NONAME
- _ZNK11AgendaEntry2idEv @ 153 NONAME
- _ZNK11AgendaEntry4typeEv @ 154 NONAME
- _ZNK11AgendaEntry5alarmEv @ 155 NONAME
- _ZNK11AgendaEntry6isNullEv @ 156 NONAME
- _ZNK11AgendaEntry6methodEv @ 157 NONAME
- _ZNK11AgendaEntry6rDatesEv @ 158 NONAME
- _ZNK11AgendaEntry6statusEv @ 159 NONAME
- _ZNK11AgendaEntry7dtStampEv @ 160 NONAME
- _ZNK11AgendaEntry7endTimeEv @ 161 NONAME
- _ZNK11AgendaEntry7summaryEv @ 162 NONAME
- _ZNK11AgendaEntry8geoValueEv @ 163 NONAME
- _ZNK11AgendaEntry8locationEv @ 164 NONAME
- _ZNK11AgendaEntry8priorityEv @ 165 NONAME
- _ZNK11AgendaEntry9attendeesEv @ 166 NONAME
- _ZNK11AgendaEntry9favouriteEv @ 167 NONAME
- _ZNK11AgendaEntry9startTimeEv @ 168 NONAME
- _ZNK11AgendaEntryeqERKS_ @ 169 NONAME
- _ZNK11AgendaEntryneERKS_ @ 170 NONAME
- _ZNK14AgendaAttendee10commonNameEv @ 171 NONAME
- _ZNK14AgendaAttendee17responseRequestedEv @ 172 NONAME
- _ZNK14AgendaAttendee4roleEv @ 173 NONAME
- _ZNK14AgendaAttendee6isNullEv @ 174 NONAME
- _ZNK14AgendaAttendee6statusEv @ 175 NONAME
- _ZNK14AgendaAttendee7addressEv @ 176 NONAME
- _ZNK14AgendaAttendeeeqERKS_ @ 177 NONAME
- _ZNK14AgendaAttendeeneERKS_ @ 178 NONAME
- _ZNK14AgendaCategory20extendedCategoryNameEv @ 179 NONAME
- _ZNK14AgendaCategory6isNullEv @ 180 NONAME
- _ZNK14AgendaCategory8categoryEv @ 181 NONAME
- _ZNK14AgendaCategoryeqERKS_ @ 182 NONAME
- _ZNK14AgendaCategoryneERKS_ @ 183 NONAME
- _ZNK14AgendaGeoValue10getLatLongERdS0_ @ 184 NONAME
- _ZNK14AgendaGeoValue6isNullEv @ 185 NONAME
- _ZNK14AgendaGeoValueeqERKS_ @ 186 NONAME
- _ZNK14AgendaGeoValueneERKS_ @ 187 NONAME
- _ZNK16AgendaRepeatRule10byMonthDayEv @ 188 NONAME
- _ZNK16AgendaRepeatRule15repeatRuleStartEv @ 189 NONAME
- _ZNK16AgendaRepeatRule4typeEv @ 190 NONAME
- _ZNK16AgendaRepeatRule5byDayEv @ 191 NONAME
- _ZNK16AgendaRepeatRule5untilEv @ 192 NONAME
- _ZNK16AgendaRepeatRule6isNullEv @ 193 NONAME
- _ZNK16AgendaRepeatRule7byMonthEv @ 194 NONAME
- _ZNK16AgendaRepeatRule8intervalEv @ 195 NONAME
- _ZNK16AgendaRepeatRule9weekStartEv @ 196 NONAME
- _ZNK16AgendaRepeatRuleeqERKS_ @ 197 NONAME
- _ZNK16AgendaRepeatRuleneERKS_ @ 198 NONAME
- _ZTI10AgendaUtil @ 199 NONAME
- _ZTI11AgendaEntry @ 200 NONAME
- _ZTI14AgendaAttendee @ 201 NONAME
- _ZTI14AgendaCategory @ 202 NONAME
- _ZTV10AgendaUtil @ 203 NONAME
- _ZTV11AgendaEntry @ 204 NONAME
- _ZTV14AgendaAttendee @ 205 NONAME
- _ZTV14AgendaCategory @ 206 NONAME
- _ZN10AgendaUtil22areNoEntriesInCalendarEv @ 207 NONAME
- _ZN10AgendaUtil26entryViewCreationCompletedEi @ 208 NONAME
- _ZN10AgendaUtil29instanceViewCreationCompletedEi @ 209 NONAME
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/inc/CleanupResetAndDestroy.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,82 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Provides cleanup item to push ResetAndDestroy calls to
+ * cleanup stack. It is heavily used for RPointerArrays,
+ * which are used all over Symbian's CalenInterimAPI.
+ * Implementation is more or less copy-paste of
+ * cleanup item of Close method and CleanupClosePushL
+ *
+*/
+
+
+
+#ifndef __CLEANUPRESETANDDESTROY_H__
+#define __CLEANUPRESETANDDESTROY_H__
+
+/**
+ * A utility class used by the templated function CleanupResetAndDestroyPushL()
+ * to create a TCleanupItem item that will perform a close type operation on
+ * the class T type object.
+ **/
+template <class T>
+class CleanupResetAndDestroy
+{
+ public:
+ inline static void PushL(T& aRef);
+
+ private:
+ static void ResetAndDestroy(TAny *aPtr);
+
+};
+
+/**
+ * Constructs and pushes a TCleanupItem object onto the cleanup stack.
+ *
+ * The TCleanupItem encapsulates:
+ *
+ * 1. a reference aRef to the object of type class T which is to be cleaned up
+ * 2. an associated cleanup operation.
+ *
+ * The cleanup operation is the private static function ResetAndDestroy() of
+ * the templated class CleanupResetAndDestroy and is invoked as a result of
+ * a subsequent call to CleanupStack::PopAndDestroy().
+ *
+ * CleanupResetAndDestroy::ResetAndDestroy() is passed a pointer to the
+ * class T object to be cleaned up, and the function implements cleanup by
+ * calling ResetAndDestroy() on the passed object.
+ * The class T object must, therefore, define and implement (or inherit) a
+ * ResetAndDestroy() member function.
+ *
+ * RPointerArray<HBufC> buffers;
+ * CleanupResetAndDestroyPushL( buffers );
+ * buffers.Append( HBufC::NewL(100) );
+ * ...
+ * CleanupStack::PopAndDestroy(); // <--- results in ResetAndDestroy() being called on "buffers".
+ * ...
+ * @endcode
+ *
+ * @param aRef A reference to a class T type object for which the cleanup item is being created.
+ * @see TCleanupItem
+ * @see CleanupResetAndDestroy
+ * @see CleanupStack::PopAndDestroy()
+ **/
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef);
+
+#include "CleanupResetAndDestroy.inl"
+
+
+#endif //__CLEANUPRESETANDDESTROY_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/inc/CleanupResetAndDestroy.inl Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,60 @@
+/*
+* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description: Provides cleanup item to push ResetAndDestroy calls to
+* cleanup stack. It is heavily used for RPointerArrays,
+* which are used all over Symbian's CalenInterimAPI.
+* Implementation is more or less copy-paste of
+* cleanup item of Close method and CleanupClosePushL
+*
+*/
+
+
+
+#include "CleanupResetAndDestroy.h"
+
+
+/**
+ * Creates a TCleanupItem for the specified object.
+ * The cleanup operation is the private static function ResetAndDestroy() of this class.
+ * @param aRef The object for which a TCleanupItem is to be constructed.
+ **/
+template <class T>
+inline void CleanupResetAndDestroy<T>::PushL(T& aRef)
+{
+ CleanupStack::PushL( TCleanupItem( &ResetAndDestroy, &aRef ) );
+}
+
+/**
+ * The cleanup operation to be performed.
+ * @param aPtr A pointer to the object for which clean up is to be performed.
+ * The implementation calls ResetAndDestroy() on this object.
+ **/
+template <class T>
+void CleanupResetAndDestroy<T>::ResetAndDestroy(TAny *aPtr)
+{
+ static_cast<T*>( aPtr )->ResetAndDestroy();
+}
+
+/**
+ * See header file CleanupResetAndDestroy.h for in-source comment.
+ *
+ **/
+template <class T>
+inline void CleanupResetAndDestroyPushL(T& aRef)
+{
+ CleanupResetAndDestroy<T>::PushL( aRef );
+}
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for agendaInterface test code
+#
+
+# include test components here
+
+# End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/alarmalertwidget/alarmalertinterface/bwins/alarmalertwidgetu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ ?updateAlarmAlert@AlarmAlert@@QAE_NPAUSAlarmInfo@@@Z @ 1 NONAME ; bool AlarmAlert::updateAlarmAlert(struct SAlarmInfo *)
+ ?dismissAlarmAlert@AlarmAlert@@QAEXXZ @ 2 NONAME ; void AlarmAlert::dismissAlarmAlert(void)
+ ??0AlarmAlert@@QAE@PAVAlarmAlertObserver@@@Z @ 3 NONAME ; AlarmAlert::AlarmAlert(class AlarmAlertObserver *)
+ ?showAlarmAlert@AlarmAlert@@QAE_NPAUSAlarmInfo@@@Z @ 4 NONAME ; bool AlarmAlert::showAlarmAlert(struct SAlarmInfo *)
+ ??1AlarmAlert@@QAE@XZ @ 5 NONAME ; AlarmAlert::~AlarmAlert(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/alarmalertwidget/alarmalertinterface/eabi/alarmalertwidgetu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,9 @@
+EXPORTS
+ _ZN10AlarmAlert14showAlarmAlertEP10SAlarmInfo @ 1 NONAME
+ _ZN10AlarmAlert16updateAlarmAlertEP10SAlarmInfo @ 2 NONAME
+ _ZN10AlarmAlert17dismissAlarmAlertEv @ 3 NONAME
+ _ZN10AlarmAlertC1EP18AlarmAlertObserver @ 4 NONAME
+ _ZN10AlarmAlertC2EP18AlarmAlertObserver @ 5 NONAME
+ _ZN10AlarmAlertD1Ev @ 6 NONAME
+ _ZN10AlarmAlertD2Ev @ 7 NONAME
+
--- a/alarmui/alarmalertwidget/alarmalertinterface/inc/alarmalertwidget.h Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertinterface/inc/alarmalertwidget.h Thu Jul 22 16:32:51 2010 +0100
@@ -11,7 +11,7 @@
*
* Contributors:
*
-* Description:
+* Description:
*
*/
// alarmalertwidget.h
@@ -21,15 +21,16 @@
// System includes
#include <QObject>
-#include <QVariantMap>
-#include <QDateTime>
+#include <hbdevicedialogsymbian.h>
// User includes
#include "alarmcommon.h"
// Forward declarations
-class HbDeviceDialog;
+class CHbDeviceDialogSymbian;
class AlarmAlertObserver;
+class CHbSymbianVariantMap;
+class CHbSymbianVariant;
// Class declaration
/**
@@ -37,10 +38,8 @@
* @brief This is the client side of the device dialog plugin.
* Contains API's to show, update and dismiss alarm dialogs
*/
-class AlarmAlertWidget : public QObject
+class AlarmAlertWidget : public MHbDeviceDialogObserver
{
-Q_OBJECT
-
public:
/**
@@ -48,93 +47,118 @@
* @param observer This is the observer of all user events
*/
AlarmAlertWidget(AlarmAlertObserver *observer);
-
+
/**
* @brief Destructor
*/
~AlarmAlertWidget();
-
+
/**
* @brief Shows the alarm dialog
* @param The alarm information to display
* @return true on success, false otherwise
*/
bool showAlarmDialog(SAlarmInfo *alarmInfo);
-
+
/**
* @brief Dismisses any alarm dialog that is being shown
* @return true on success, false otherwise
*/
- bool dismissAlarmDialog();
-
+ void dismissAlarmDialog();
+
/**
* @brief Updates the alarm dialog with new information
* @param The alarm information to update
* @return true on success, false otherwise
*/
bool updateAlarmDialog(SAlarmInfo *alarmInfo);
+
+public:
-private slots:
+ /**
+ * @brief Inform the client about user interaction on dialog.
+ * @param List of aruguemnts the dialog has sent.
+ */
+ void DataReceived(CHbSymbianVariantMap& aData);
+
+ /**
+ * @brief Updates the alarm dialog with new information
+ * @param The alarm information to update
+ */
+ void DeviceDialogClosed(TInt aCompletionCode);
+
+private:
+ /**
+ * @brief Handle the events sent by dialog.
+ * @param params List of arguments the dialog has sent
+ */
+ void triggerAction(const CHbSymbianVariant* source);
+
+private:
/**
- * @brief Slot to handle user interactions
- * @param params List of arguments the dialog has sent
+ * @var mVariantMap
+ * @brief Contain the parameters.
*/
- void triggerAction(QVariantMap params);
-
-private:
-
+ CHbSymbianVariantMap* mVariantMap;
+
/**
* @var mSubject
* @brief Holds the alarm subject
*/
- QString mSubject;
-
+ CHbSymbianVariant* mAlarmSubject;
+
/**
* @var mLocation
* @brief Holds the alarm location (for calendar alerts only)
*/
- QString mLocation;
-
+ CHbSymbianVariant* mLocation;
+
/**
* @var mAlarmTime
* @brief Holds the alarm expiry time
*/
- QDateTime mAlarmTime;
+ CHbSymbianVariant* mAlarmTime;
/**
+ * @var mAlarmDate
+ * @brief Holds the alarm expiry date
+ */
+ CHbSymbianVariant* mAlarmDate;
+
+ /**
* @var mDeviceDialog
* @brief The interface to the device dialog server
*/
- HbDeviceDialog *mDeviceDialog;
-
+ CHbDeviceDialogSymbian *mDeviceDialog;
+
/**
* @var mAlarmAlertType
* @brief Tells if the type of alert being displayed
* is a clock /calendar/to-do alert
*/
- int mAlarmAlertType;
-
+ CHbSymbianVariant* mAlarmAlertType;
+
/**
* @var mCanSnooze
* @brief Tells whether the current alert can be snoozed.
* true->alarm can be snoozed
* false->alarm cannot be snoozed
*/
- bool mCanSnooze;
-
+ CHbSymbianVariant* mCanSnooze;
+
/**
* @var mIsSilent
* @brief Indicates if the alarm is silent or not
*/
- bool mIsSilent;
-
+ CHbSymbianVariant* mIsSilent;
+
/**
* @var mIsTimedAlarm
* @brief Indicates if the alarm has time info or not
*/
- bool mIsTimedAlarm;
-
+ CHbSymbianVariant* mIsTimedAlarm;
+
/**
* @var mObserver
* @brief The observer for user responses
--- a/alarmui/alarmalertwidget/alarmalertinterface/inc/alarmalertwrapper.h Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertinterface/inc/alarmalertwrapper.h Thu Jul 22 16:32:51 2010 +0100
@@ -74,10 +74,9 @@
* AlarmAlertObserver::alertCancelled is called once the
* alert is cancelled successfully
*
- * @return true on success, false otherwise
*/
- IMPORT_C bool dismissAlarmAlert();
-
+ IMPORT_C void dismissAlarmAlert();
+
/**
* @brief Updates the alarm alert with the information
* provided
--- a/alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwidget.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -11,21 +11,22 @@
*
* Contributors:
*
-* Description:
+* Description:
*
*/
// alarmalertwidget.cpp
// System includes
-#include <QDateTime>
-#include <hbdevicedialog.h>
-#include <QDebug>
+#include <hbsymbianvariant.h>
// User includes
#include "alarmalertwidget.h"
#include "alarmalert.h"
#include "alarmalertobserver.h"
+// Constants.
+const TInt KMaxlength=30;
+
// ---------------------------------------------------------
// AlarmAlertWidget::AlarmAlertWidget
// rest of the details are commented in the header
@@ -34,11 +35,6 @@
AlarmAlertWidget::AlarmAlertWidget(AlarmAlertObserver *observer) :
mObserver(observer)
{
- // Create a session with the device dialog server
- mDeviceDialog = new HbDeviceDialog(HbDeviceDialog::NoFlags, this);
-
- // Connect to signals to receive events sent by the dialog
- connect(mDeviceDialog, SIGNAL(dataReceived(QVariantMap)), this, SLOT(triggerAction(QVariantMap)));
}
// ---------------------------------------------------------
@@ -48,10 +44,47 @@
//
AlarmAlertWidget::~AlarmAlertWidget()
{
- // Cleanup
- if (mDeviceDialog) {
- delete mDeviceDialog;
- }
+ // Cleanup
+
+ if (mAlarmSubject) {
+ delete mAlarmSubject;
+ }
+
+ if (mLocation) {
+ delete mLocation;
+ }
+
+ if (mAlarmTime) {
+ delete mAlarmTime;
+ }
+
+ if (mAlarmDate) {
+ delete mAlarmDate;
+ }
+
+ if (mAlarmAlertType) {
+ delete mAlarmAlertType;
+ }
+
+ if (mCanSnooze) {
+ delete mCanSnooze;
+ }
+
+ if (mIsSilent) {
+ delete mIsSilent;
+ }
+
+ if (mIsTimedAlarm) {
+ delete mIsTimedAlarm;
+ }
+
+ if (mVariantMap) {
+ delete mVariantMap;
+ }
+
+ if (mDeviceDialog) {
+ delete mDeviceDialog;
+ }
}
// ---------------------------------------------------------
@@ -61,40 +94,77 @@
//
bool AlarmAlertWidget::showAlarmDialog(SAlarmInfo *alarmInfo)
{
- // Get the subject of the alarm (description for clock alarms
- // and subject for calendar alarms)
- mSubject = QString::fromUtf16(alarmInfo->iSubject->Ptr(),
- alarmInfo->iSubject->Length());
+ // Get the alarm date and time
+ TBuf<KMaxlength> timeString;
+ TBuf<KMaxlength> dateString;
+
+ TBuf<KMaxlength> timeFormat(_L("%-B%:0%J%:1%T%:3%+B"));
+ TBuf<KMaxlength> dateFormat;
+ TLocale locale;
+ switch (locale.DateFormat()) {
+ case EDateEuropean:
+ dateFormat.Copy(_L("%F%/0%D%/1%M%/2%Y%/3"));
+ break;
+ case EDateAmerican:
+ dateFormat.Copy(_L("%F%/0%M%/1%D%/2%Y%/3"));
+ break;
+ case EDateJapanese:
+ dateFormat.Copy(_L("%F%/0%Y%/1%M%/2%D%/3"));
+ break;
+ default:
+ // Nothing yet.
+ break;
+ }
+
- // Get the location (for calendar alarms)
- mLocation = QString::fromUtf16(alarmInfo->iLocation->Ptr(),
- alarmInfo->iLocation->Length());
+ alarmInfo->iTime.FormatL(timeString, timeFormat);
+ alarmInfo->iTime.FormatL(dateString, dateFormat);
+
+ // Create a session with the device dialog server
+ mDeviceDialog = CHbDeviceDialogSymbian::NewL();
- // Get the alarm date and time
- // TODO: Check QDateTime to TTime compatibility
- mAlarmTime.setTime(QTime(alarmInfo->iTime.DateTime().Hour(),
- alarmInfo->iTime.DateTime().Minute(),
- alarmInfo->iTime.DateTime().Second()));
- mAlarmTime.setDate(QDate(alarmInfo->iDate.DateTime().Year(),
- alarmInfo->iDate.DateTime().Month(),
- alarmInfo->iDate.DateTime().Day()));
+
+ // Package the different parameters to send
+ mVariantMap = CHbSymbianVariantMap::NewL();
+
+ // Get the subject of the alarm (description for clock alarms
+ // and subject for calendar alarms)
+ mAlarmSubject = CHbSymbianVariant::NewL(
+ alarmInfo->iSubject, CHbSymbianVariant::EDes );
+ mVariantMap->Add(alarmSubjectSymbian, mAlarmSubject);
+
+ // Get the location (for calendar alarms)
+ mLocation = CHbSymbianVariant::NewL(
+ alarmInfo->iLocation, CHbSymbianVariant::EDes);
+ mVariantMap->Add(alarmLocationSymbian, mLocation);
+
+ mAlarmTime = CHbSymbianVariant::NewL(
+ &timeString, CHbSymbianVariant::EDes);
+ mVariantMap->Add(alarmTimeSymbian, mAlarmTime);
- mCanSnooze = alarmInfo->iCanSnooze;
- mIsSilent = alarmInfo->iIsSilent;
- mAlarmAlertType = alarmInfo->iAlarmAlertType;
- mIsTimedAlarm = alarmInfo->iIsTimed;
+ mAlarmDate = CHbSymbianVariant::NewL(
+ &dateString, CHbSymbianVariant::EDes);
+ mVariantMap->Add(alarmDateSymbian, mAlarmDate);
+
+ mIsSilent = CHbSymbianVariant::NewL(
+ &alarmInfo->iIsSilent, CHbSymbianVariant::EBool);
+ mVariantMap->Add(alarmRingingTypeSymbian, mIsSilent);
+
+ mCanSnooze = CHbSymbianVariant::NewL(
+ &alarmInfo->iCanSnooze, CHbSymbianVariant::EBool);
+ mVariantMap->Add(alarmCanSnoozeSymbain, mCanSnooze);
+
+ mAlarmAlertType = CHbSymbianVariant::NewL(
+ &alarmInfo->iAlarmAlertType, CHbSymbianVariant::EInt);
+ mVariantMap->Add(alarmTypeSymbian, mAlarmAlertType);
+
+ mIsTimedAlarm = CHbSymbianVariant::NewL(
+ &alarmInfo->iIsTimed, CHbSymbianVariant::EBool);
+ mVariantMap->Add(alarmIsTimedSymbian, mIsTimedAlarm);
+
+ // Package the different parameters to send
+ return mDeviceDialog->Show(ALARM_ALERT_PLUGIN_SYMBIAN, *mVariantMap, this);
- // Package the different parameters to send
- QVariantMap params;
- params.insert(alarmSubject, mSubject);
- params.insert(alarmLocation, mLocation);
- params.insert(alarmDateTime, mAlarmTime);
- params.insert(alarmRingingType, mIsSilent);
- params.insert(alarmCanSnooze, mCanSnooze);
- params.insert(alarmType, mAlarmAlertType);
- params.insert(alarmIsTimed, mIsTimedAlarm);
-
- return mDeviceDialog->show(ALARM_ALERT_PLUGIN, params);
}
// ---------------------------------------------------------
@@ -102,10 +172,10 @@
// rest of the details are commented in the header
// ---------------------------------------------------------
//
-bool AlarmAlertWidget::dismissAlarmDialog()
+void AlarmAlertWidget::dismissAlarmDialog()
{
// Dismiss the dialog
- return mDeviceDialog->cancel();
+ mDeviceDialog->Cancel();
}
// ---------------------------------------------------------
@@ -113,13 +183,37 @@
// rest of the details are commented in the header
// ---------------------------------------------------------
//
-bool AlarmAlertWidget::updateAlarmDialog(SAlarmInfo* alarmInfo)
+bool AlarmAlertWidget::updateAlarmDialog(SAlarmInfo* /*alarmInfo*/)
{
- Q_UNUSED(alarmInfo);
// Update the dialog with any new information
// TODO: Pass the updated information sent by the observer
- QVariantMap params;
- return mDeviceDialog->update(params);
+ /*CHbSymbianVariantMap params;
+ mDeviceDialog->Update(params);*/
+ return false;
+}
+
+// ---------------------------------------------------------
+// AlarmAlertWidget::DataReceived
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void AlarmAlertWidget::DataReceived(CHbSymbianVariantMap& aData)
+{
+ if (!aData.Keys().MdcaCount()) {
+ return;
+ }
+
+ triggerAction(aData.Get(alarmCommandSymbian));
+}
+
+// ---------------------------------------------------------
+// AlarmAlertWidget::DeviceDialogClosed
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void AlarmAlertWidget::DeviceDialogClosed(TInt /*aCompletionCode*/)
+{
+
}
// ---------------------------------------------------------
@@ -127,33 +221,28 @@
// rest of the details are commented in the header
// ---------------------------------------------------------
//
-void AlarmAlertWidget::triggerAction(QVariantMap params)
+void AlarmAlertWidget::triggerAction(const CHbSymbianVariant* source)
{
- // Check what is the command being sent by the dialog
- // Based on that, update the command to be sent
- QVariantMap::const_iterator iter = params.find(alarmCommand);
- if (iter != params.constEnd()) {
- AlarmCommand command(AlarmCmdLast);
- if (iter.value().toInt() == Stop) {
- command = AlarmStop;
- }
- else if (iter.value().toInt() == Snooze) {
- command = AlarmSnooze;
- }
- else if (iter.value().toInt() == Silence) {
- command = AlarmSilence;
- } else if (iter.value().toInt() == Shown) {
- command = AlarmShown;
- mObserver->alertDisplayed(command);
- return;
- } else {
- command = AlarmCmdLast;
- }
- if (command != AlarmCmdLast) {
- // Notify the observer with the command
- mObserver->alertCompleted(command);
- }
-
- }
+ AlarmCommand command(AlarmCmdLast);
+
+ if (*source->Value<TInt>() == Stop) {
+ command = AlarmStop;
+ } else if (*source->Value<TInt>() == Snooze) {
+ command = AlarmSnooze;
+ } else if (*source->Value<TInt>() == Silence) {
+ command = AlarmSilence;
+ } else if (*source->Value<TInt>() == Shown) {
+ command = AlarmShown;
+ mObserver->alertDisplayed(command);
+ return;
+ } else {
+ command = AlarmCmdLast;
+ }
+
+ if (command != AlarmCmdLast) {
+ // Notify the observer with the command
+ mObserver->alertCompleted(command);
+ }
}
+
// End of file --Don't remove this.
--- a/alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwrapper.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwrapper.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -60,10 +60,10 @@
// rest of the details are commented in the header
// ---------------------------------------------------------
//
-EXPORT_C bool AlarmAlert::dismissAlarmAlert()
+EXPORT_C void AlarmAlert::dismissAlarmAlert()
{
// Forward the call to the client
- return mAlarmWidget->dismissAlarmDialog();
+ mAlarmWidget->dismissAlarmDialog();
}
// ---------------------------------------------------------
--- a/alarmui/alarmalertwidget/alarmalertplugin/alarmalertplugin.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertplugin/alarmalertplugin.pro Thu Jul 22 16:32:51 2010 +0100
@@ -31,3 +31,7 @@
alarmalertdocloader.cpp
RESOURCES += alarmalert.qrc
+
+TRANSLATIONS += alarmui.ts
+
+# End of file --Don't remove this.
--- a/alarmui/alarmalertwidget/alarmalertplugin/data/alarmalert.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertplugin/data/alarmalert.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -7,7 +7,4 @@
<file alias="alarmalert_clock_unlocked.docml">xml/alarmalert_clock_unlocked.docml</file>
<file alias="alarmalert_todo_unlocked.docml">xml/alarmalert_todo_unlocked.docml</file>
</qresource>
- <qresource prefix="/translations">
- <file alias="alarmui_en_GB">alarmui_en_GB.qm</file>
- </qresource>
</RCC>
\ No newline at end of file
Binary file alarmui/alarmalertwidget/alarmalertplugin/data/alarmui_en_GB.qm has changed
--- a/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalert.h Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalert.h Thu Jul 22 16:32:51 2010 +0100
@@ -11,7 +11,7 @@
*
* Contributors:
*
-* Description:
+* Description:
*
*/
// alarmalert.h
@@ -21,30 +21,45 @@
// The plugin name. Do not remove the "com.nokia.hb" part.
const QString ALARM_ALERT_PLUGIN("com.nokia.hb.alarmalertdialog");
+_LIT(ALARM_ALERT_PLUGIN_SYMBIAN, "com.nokia.hb.alarmalertdialog");
// The string identifier for command
const QString alarmCommand("command");
+_LIT(alarmCommandSymbian, "command");
// The string identifier for alarm subject
const QString alarmSubject("subject");
+_LIT(alarmSubjectSymbian, "subject");
// The string identifier for alarm location
const QString alarmLocation("location");
+_LIT(alarmLocationSymbian, "location");
-// The string identifier for alarm date and time
-const QString alarmDateTime("dateTime");
+// The string identifier for alarm time
+const QString alarmTime("time");
+_LIT(alarmTimeSymbian, "time");
+
+// The string identifier for alarm date.
+const QString alarmDate("date");
+_LIT(alarmDateSymbian, "date");
+
+// The string identifier for alarm time
// The string identifier for alarm type
const QString alarmType("type");
+_LIT(alarmTypeSymbian, "type");
// The string identifier for alarm ringing type
const QString alarmRingingType("ringingType");
+_LIT(alarmRingingTypeSymbian, "ringingType");
// The string identifier for alarm snoozability
const QString alarmCanSnooze("canSnooze");
+_LIT(alarmCanSnoozeSymbain, "canSnooze");
// The string identifier for checking the nontimed alarms
const QString alarmIsTimed("isTimed");
+_LIT(alarmIsTimedSymbian, "isTimed");
/**
@@ -62,7 +77,7 @@
/**
* @enum AlarmType
- * @brief Alarm types to be sent
+ * @brief Alarm types to be sent
* to the alarm dialog
*/
enum AlarmType {
--- a/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalertwidget_p.h Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalertwidget_p.h Thu Jul 22 16:32:51 2010 +0100
@@ -28,7 +28,7 @@
// Forward declarations
class QGraphicsWidget;
class QEvent;
-class QTranslator;
+class HbTranslator;
class HbMainWindow;
class HbDocumentLoader;
class HbLabel;
@@ -140,6 +140,11 @@
*/
void silenced();
+ /**
+ * @brief Called when the alarmui is about to display.
+ */
+ void aboutToDisplay();
+
private:
/**
* @brief Extracts the parameters sent by the client
@@ -192,13 +197,19 @@
* @var mAlarmTime
* @brief Holds the alarm expiry time
*/
- QDateTime mAlarmTime;
+ QString mAlarmTime;
+
+ /**
+ * @var mAlarmDate
+ * @brief Holds the alarm expiry time
+ */
+ QString mAlarmDate;
/**
* @var mTranslator
* @brief translator for the localisation of strings
*/
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
/**
* @var mAlarmDescription
--- a/alarmui/alarmalertwidget/alarmalertplugin/src/alarmalertplugin.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertplugin/src/alarmalertplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -19,7 +19,6 @@
// System includes
#include <QString>
#include <QVariantMap>
-#include <QDebug>
#include <hbdevicedialog.h>
// User includes
@@ -80,7 +79,7 @@
Q_UNUSED(deviceDialogType);
Q_UNUSED(parameters);
- info->group = GenericDeviceDialogGroup;
+ info->group = CriticalGroup;
info->priority = DefaultPriority;
info->flags = NoDeviceDialogFlags;
return true;
--- a/alarmui/alarmalertwidget/alarmalertplugin/src/alarmalertwidget_p.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/alarmalertwidget/alarmalertplugin/src/alarmalertwidget_p.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -20,17 +20,16 @@
#include <QApplication>
#include <QGesture>
#include <QGestureEvent>
-#include <QDebug>
#include <QGraphicsSceneMouseEvent>
-#include <QTranslator>
+
#include <hbdocumentloader.h>
#include <hbpushbutton.h>
#include <hblabel.h>
#include <hbinstance.h>
#include <hbextendedlocale.h>
#include <hbi18ndef.h>
-#include <hbapplication.h>
#include <hbaction.h>
+#include <hbtranslator.h>
// User includes
#include "alarmalertwidget_p.h"
@@ -43,6 +42,7 @@
// ---------------------------------------------------------
//
AlarmAlertDialogPrivate::AlarmAlertDialogPrivate(const QVariantMap ¶meters):
+ mTranslator(new HbTranslator("alarmui")),
mClosedByClient(false),
mIsSilenceKey(false)
{
@@ -52,19 +52,13 @@
// Set the dismiss policy and timeout property
setDismissPolicy(HbPopup::NoDismiss);
setTimeout(HbPopup::NoTimeout);
+
+ // Listen the signal when alarmui is about to display so that we can start playing the alarm tone.
+ connect(this, SIGNAL(aboutToShow()), this, SLOT(aboutToDisplay()) );
// Initialize the user response
mUserResponse = Other;
- // Load the translation file and install the editor specific translator
- mTranslator = new QTranslator;
- QString lang = QLocale::system().name();
- QString path = "Z:/resource/qt/translations/";
- bool loaded = mTranslator->load("alarmui_en_GB",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("alarmui_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
-
// TODO: Gestures not working. Integrate once support is available from Qt
grabGesture(Qt::SwipeGesture);
}
@@ -88,7 +82,6 @@
HbEffect::remove(mSlider);
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -151,7 +144,7 @@
HbDialog::showEvent(event);
QVariantMap param;
param.insert(alarmCommand, mUserResponse);
- //emit deviceDialogData(param);
+ emit deviceDialogData(param);
}
// ---------------------------------------------------------
@@ -161,9 +154,7 @@
//
void AlarmAlertDialogPrivate::closeEvent(QCloseEvent *event)
{
- // Forward the call to the base class
- HbDialog::closeEvent(event);
-
+
// Do not notify the client back if the close was initiated by client itself
if(!mClosedByClient) {
// Package the user response and send it
@@ -173,6 +164,9 @@
}
// This signal has to be emitted so that the dialog can be cleaned up later
emit deviceDialogClosed();
+
+ // Forward the call to the base class
+ HbDialog::closeEvent(event);
}
// ---------------------------------------------------------
@@ -215,7 +209,20 @@
close();
}
}
-
+
+// ---------------------------------------------------------
+// AlarmAlertDialogPrivate::aboutToDisplay
+// rest of the details are commented in the header
+// ---------------------------------------------------------
+//
+void AlarmAlertDialogPrivate::aboutToDisplay()
+ {
+ mUserResponse = Shown;
+ QVariantMap param;
+ param.insert(alarmCommand, mUserResponse);
+ emit deviceDialogData(param);
+ }
+
// ---------------------------------------------------------
// AlarmAlertDialogPrivate::dismissed
// rest of the details are commented in the header
@@ -243,8 +250,10 @@
mSubject = iter.value().toString();
} else if (alarmLocation == key) {
mLocation = iter.value().toString();
- } else if (alarmDateTime == key) {
- mAlarmTime = iter.value().toDateTime();
+ } else if (alarmTime == key) {
+ mAlarmTime = iter.value().toString();
+ } else if (alarmDate == key) {
+ mAlarmDate = iter.value().toString();
} else if (alarmType == key) {
mAlarmAlertType = static_cast <AlarmType> (iter.value().toInt());
} else if (alarmCanSnooze == key) {
@@ -302,8 +311,7 @@
}
HbExtendedLocale locale = HbExtendedLocale::system();
mAlarmDateTime->setPlainText(
- hbTrId("txt_calendar_info_alarm_start_time").arg(
- locale.format(mAlarmTime.time(), r_qtn_time_usual)));
+ hbTrId("txt_calendar_info_alarm_start_time").arg(mAlarmTime));
mAlarmDescription = qobject_cast<HbLabel*> (
mAlertDocLoader->findWidget("alarmDescription"));
@@ -367,16 +375,14 @@
qFatal("Unable to find the alarmTime label");
}
mAlarmDateTime->setPlainText(
- hbTrId("txt_calendar_info_alarm_start_time").arg(
- locale.format(mAlarmTime.time(), r_qtn_time_usual)));
+ hbTrId("txt_calendar_info_alarm_start_time").arg(mAlarmTime));
HbLabel *alarmDate = qobject_cast<HbLabel*> (
mAlertDocLoader->findWidget("alarmDate"));
if (!alarmDate) {
qFatal("Unable to find the alarmDate label");
}
alarmDate->setPlainText(
- hbTrId("txt_calendar_info_alarm_start_date").arg(
- locale.format(mAlarmTime.date(), r_qtn_date_usual_with_zero)));
+ hbTrId("txt_calendar_info_alarm_start_date").arg(mAlarmDate));
HbLabel *alarmDateNonTimed = qobject_cast<HbLabel*> (
mAlertDocLoader->findWidget("nonTimedAlarmDate"));
if (!alarmDateNonTimed) {
@@ -407,8 +413,7 @@
qFatal("Unable to find the alarmDateNonTimed label");
}
alarmDateNonTimed->setPlainText(
- hbTrId("txt_calendar_info_alarm_start_date").arg(
- locale.format(mAlarmTime.date(), r_qtn_date_usual_with_zero)));
+ hbTrId("txt_calendar_info_alarm_start_date").arg(mAlarmDate));
}
QGraphicsWidget *headingWidget = mAlertDocLoader->findWidget("heading");
@@ -482,8 +487,7 @@
qFatal("Unable to load the alarmDate label");
}
alarmDate->setPlainText(
- hbTrId("txt_calendar_info_alarm_start_date").arg(
- locale.format(mAlarmTime.date(), r_qtn_date_usual_with_zero)));
+ hbTrId("txt_calendar_info_alarm_start_date").arg(mAlarmDate));
mAlarmDescription = qobject_cast<HbLabel*> (
mAlertDocLoader->findWidget("alarmDescription"));
--- a/alarmui/alarmalertwidget/bwins/alarmalertwidgetu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-EXPORTS
- ?updateAlarmAlert@AlarmAlert@@QAE_NPAUSAlarmInfo@@@Z @ 1 NONAME ; bool AlarmAlert::updateAlarmAlert(struct SAlarmInfo *)
- ??0AlarmAlert@@QAE@PAVAlarmAlertObserver@@@Z @ 2 NONAME ; AlarmAlert::AlarmAlert(class AlarmAlertObserver *)
- ?dismissAlarmAlert@AlarmAlert@@QAE_NXZ @ 3 NONAME ; bool AlarmAlert::dismissAlarmAlert(void)
- ?showAlarmAlert@AlarmAlert@@QAE_NPAUSAlarmInfo@@@Z @ 4 NONAME ; bool AlarmAlert::showAlarmAlert(struct SAlarmInfo *)
- ??1AlarmAlert@@QAE@XZ @ 5 NONAME ; AlarmAlert::~AlarmAlert(void)
-
--- a/alarmui/alarmalertwidget/eabi/alarmalertwidgetu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-EXPORTS
- _ZN10AlarmAlert14showAlarmAlertEP10SAlarmInfo @ 1 NONAME
- _ZN10AlarmAlert16updateAlarmAlertEP10SAlarmInfo @ 2 NONAME
- _ZN10AlarmAlert17dismissAlarmAlertEv @ 3 NONAME
- _ZN10AlarmAlertC1EP18AlarmAlertObserver @ 4 NONAME
- _ZN10AlarmAlertC2EP18AlarmAlertObserver @ 5 NONAME
- _ZN10AlarmAlertD1Ev @ 6 NONAME
- _ZN10AlarmAlertD2Ev @ 7 NONAME
-
--- a/alarmui/src/AlmAlarmControl.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/src/AlmAlarmControl.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -177,7 +177,7 @@
iAlarmUtils->StartKeyBlocker();
// reset the key guard
- iAlarmUtils->SetKeyGuard( ETrue );
+ //iAlarmUtils->SetKeyGuard( ETrue );
}
break;
@@ -227,26 +227,9 @@
// Allow auto-snooze only while waiting user input
if( IsState( EStateWaitingInput ) )
{
- SetState( EStateAfterInput );
- if( iAlarmUtils->IsCalendarAlarm() )
- {
- if( iAlarmUtils->IsCalendarAlarmViewer() )
- {
- iAlarmUtils->SetCalendarAlarmViewer(EFalse);
- }
- else
- {
- TRAP_IGNORE( StoreMissedAlarmDataL() );
- }
- iAlarmUtils->DoStopAlarm();
- DoCancelDialog();
-
- }
- else
- {
- iAlarmUtils->TryToSnoozeActiveAlarm();
- DoCancelDialog();
- }
+ SetState( EStateAfterInput );
+ iAlarmUtils->TryToSnoozeActiveAlarm();
+ DoCancelDialog();
}
TRACE_EXIT_POINT;
}
@@ -529,9 +512,9 @@
delete text; // only delete if GetAlarmLabelL call was successfull
ASSERT( !err ); */
iAlarmUtils->NotifierDialogController()->showAlarmAlert(alarmInfo);
- iAlarmUtils->StartAutoSnoozeTimer();
- iAlarmUtils->PlayAlarmSound();
- SetState( EStateWaitingInput );
+ //iAlarmUtils->StartAutoSnoozeTimer();
+ //iAlarmUtils->PlayAlarmSound();
+ //SetState( EStateWaitingInput );
if( err ) // failed to fetch alarm data or show the notification
{
@@ -962,7 +945,7 @@
{
iAlarmUtils->StartAutoSnoozeTimer();
iAlarmUtils->PlayAlarmSound();
- iAlarmUtils->SetKeyGuard( EFalse );
+ //iAlarmUtils->SetKeyGuard( EFalse );
SetState( EStateWaitingInput );
iAlarmUtils->StartKeyBlocker(); // block all input for 0.5 seconds
}
@@ -1385,7 +1368,7 @@
{
iAlarmUtils->StartAutoSnoozeTimer();
iAlarmUtils->PlayAlarmSound();
- iAlarmUtils->SetKeyGuard( EFalse );
+ //iAlarmUtils->SetKeyGuard( EFalse );
SetState( EStateWaitingInput );
iAlarmUtils->StartKeyBlocker(); // block all input for 0.5 seconds
}
--- a/alarmui/src/alarmutils.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/alarmui/src/alarmutils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -56,6 +56,8 @@
#endif // SYMBIAN_CALENDAR_V2
#include <calsession.h>
#include <calentryview.h>
+#include <clockdomaincrkeys.h>
+#include <calendardomaincrkeys.h>
// #include <calenlauncher.h> // for launching calendar entry view
@@ -76,14 +78,8 @@
const TInt KMaxProfileVolume( 10 );
const TInt KVolumeRampPeriod( 3000000 ); // 3 seconds
_LIT( KRngMimeType, "application/vnd.nokia.ringing-tone" );
-const TUid KCRUidCalendar = {0x101F874B};
//const TUint32 KCalendarSoundFile = 0x00000004;
-const TUint32 KCalendarDefaultSoundFile = 0x00000005;
-const TUint32 KCalendarSnoozeTime = 0x00000007;
-const TUid KCRUidClockApp = {0x101F874D};
//const TUint32 KClockAppSoundFile = 0x00000000;
-const TUint32 KClockAppDefaultSoundFile = 0x00000001;
-const TUint32 KClockAppSnoozeTime = 0x00000002;
const TUid KAlarmClockOne = { 0x101F793A };
const TUid KCRUidProfileEngine = {0x101F8798};
@@ -440,7 +436,7 @@
if( IsClockAlarm() )
{
- PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidClockApp ); )
+ PIM_TRAPD_ASSERT( repository = CRepository::NewL( TUid::Uid(KCRUidClockApp) ); )
PIM_TRAPD_ASSERT( profileRepository = CRepository::NewL(
KCRUidProfileEngine ); )
@@ -459,8 +455,10 @@
}
else
{
- PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidCalendar ); )
- PIM_TRAPD_ASSERT( profileRepository = CRepository::NewL( KCRUidProfileEngine ); )
+ PIM_TRAPD_ASSERT( repository =
+ CRepository::NewL( TUid::Uid(KCRUidCalendar) ); )
+ PIM_TRAPD_ASSERT( profileRepository =
+ CRepository::NewL( KCRUidProfileEngine ); )
if( repository )
{
@@ -660,7 +658,7 @@
case EAlarmTypeClock:
{
CRepository* repository = NULL;
- PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidClockApp ); )
+ PIM_TRAPD_ASSERT( repository = CRepository::NewL( TUid::Uid(KCRUidClockApp) ); )
if( repository )
{
@@ -673,7 +671,8 @@
case EAlarmTypeCalendar:
{
CRepository* repository = NULL;
- PIM_TRAPD_ASSERT( repository = CRepository::NewL( KCRUidCalendar ); )
+ PIM_TRAPD_ASSERT( repository =
+ CRepository::NewL( TUid::Uid(KCRUidCalendar) ); )
if( repository )
{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for alarmui test code
+#
+
+# include test components here
+
+# End of file --Don't remove this
--- a/calendarui/agendaeventviewer/agendaeventviewer.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/agendaeventviewer.pro Thu Jul 22 16:32:51 2010 +0100
@@ -36,7 +36,7 @@
symbian: {
-BLD_INF_RULES.prj_exports += \
+ BLD_INF_RULES.prj_exports += \
"./inc/agendaeventviewer.h |../inc/agendaeventviewer.h" \
"./inc/agendaeventviewer.h |../../inc/agendaeventviewer.h"
@@ -46,12 +46,10 @@
LIBS += -lagendainterface \
- -lnoteseditor \
-lcaleneditor \
-lcalencommonutils \
-lmaptileservice
-
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
}
SOURCES += \
@@ -69,7 +67,8 @@
agendaeventviewerdocloader.h \
agendaeventvieweritem.h
-RESOURCES += \
- agendaeventviewer.qrc
+RESOURCES += agendaeventviewer.qrc
+
+TRANSLATIONS += caleneventviewer.ts
# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/agendaeventviewer/bwins/agendaeventvieweru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,8 @@
+EXPORTS
+ ?view@AgendaEventViewer@@QAEXVAgendaEntry@@W4Actions@1@@Z @ 1 NONAME ; void AgendaEventViewer::view(class AgendaEntry, enum AgendaEventViewer::Actions)
+ ?view@AgendaEventViewer@@QAEXABVQFile@@W4Actions@1@@Z @ 2 NONAME ; void AgendaEventViewer::view(class QFile const &, enum AgendaEventViewer::Actions)
+ ??1AgendaEventViewer@@UAE@XZ @ 3 NONAME ; AgendaEventViewer::~AgendaEventViewer(void)
+ ??0AgendaEventViewer@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 4 NONAME ; AgendaEventViewer::AgendaEventViewer(class AgendaUtil *, class QObject *)
+ ?view@AgendaEventViewer@@QAEXKW4Actions@1@@Z @ 5 NONAME ; void AgendaEventViewer::view(unsigned long, enum AgendaEventViewer::Actions)
+ ??0AgendaEventViewer@@QAE@PAVQObject@@@Z @ 6 NONAME ; AgendaEventViewer::AgendaEventViewer(class QObject *)
+
--- a/calendarui/agendaeventviewer/data/agendaeventviewer.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/data/agendaeventviewer.docml Thu Jul 22 16:32:51 2010 +0100
@@ -5,7 +5,7 @@
<widget name="groupBox" type="HbGroupBox">
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
- <string locid="txt_calendar_subhead_event" name="titleText" value="Event"/>
+ <string locid="txt_calendar_subhead_event" name="heading" value="Event"/>
</widget>
<widget name="scrollArea" type="HbScrollArea">
<widget name="scrollAreaContents" role="HbScrollArea:contents" type="HbWidget">
@@ -15,7 +15,9 @@
<widget name="reminderWidget" type="HbWidget"/>
<widget name="repeatWidget" type="HbWidget"/>
<widget name="descriptionWidget" type="HbWidget"/>
- <widget name="maptileWidget" type="HbLabel" />
+ <widget name="maptileWidget" type="HbLabel">
+ <contentsmargins bottom="var(hb-param-margin-gene-bottom)" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0un"/>
+ </widget>
<layout orientation="Vertical" type="linear">
<contentsmargins bottom="0un" left="0un" top="0un"/>
<linearitem itemname="subjectWidget"/>
--- a/calendarui/agendaeventviewer/data/agendaeventviewer.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/data/agendaeventviewer.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -2,11 +2,9 @@
<qresource prefix="/docml">
<file alias="agendaeventviewer.docml">agendaeventviewer.docml</file>
</qresource>
- <qresource prefix="/translations">
- <file alias="caleneventviewer_en_GB">caleneventviewer_en_GB.qm</file>
- </qresource>
<qresource>
<file alias="agendaeventvieweritem.css">agendaeventvieweritem.css</file>
+ <file alias="agendaeventvieweritem_color.css">agendaeventvieweritem_color.css</file>
<file alias="agendaeventvieweritem.widgetml">agendaeventvieweritem.widgetml</file>
</qresource>
</RCC>
\ No newline at end of file
--- a/calendarui/agendaeventviewer/data/agendaeventvieweritem.css Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/data/agendaeventvieweritem.css Thu Jul 22 16:32:51 2010 +0100
@@ -26,7 +26,8 @@
fixed-height:var(hb-param-graphic-size-primary-small);
top: -var(hb-param-margin-gene-top);
left: -var(hb-param-margin-gene-left);
- right: var(hb-param-margin-gene-middle-horizontal);
+
+
}
AgendaEventViewerItem::primaryRightIconItem {
@@ -40,23 +41,40 @@
fixed-width:var(hb-param-graphic-size-primary-small);
fixed-height:var(hb-param-graphic-size-primary-small);
left: -var(hb-param-margin-gene-left);
- right: var(hb-param-margin-gene-middle-horizontal);
+
}
-AgendaEventViewerItem::primaryTextItem {
+AgendaEventViewerItem::primaryTextItem[leftPrimaryIconItem="true"] {
text-height: var(hb-param-text-height-primary);
font-variant: primary;
text-align: left;
top: -var(hb-param-margin-gene-top);
right: var(hb-param-margin-gene-middle-horizontal);
+ left: -var(hb-param-margin-gene-middle-horizontal);
}
-
-AgendaEventViewerItem::secondaryTextItem {
+AgendaEventViewerItem::primaryTextItem[leftPrimaryIconItem="false"] {
+ text-height: var(hb-param-text-height-primary);
+ font-variant: primary;
+ text-align: left;
+ top: -var(hb-param-margin-gene-top);
+ right: var(hb-param-margin-gene-middle-horizontal);
+
+
+}
+AgendaEventViewerItem::secondaryTextItem[leftPrimaryIconItem="true"]{
text-height: var(hb-param-text-height-secondary);
font-variant: secondary;
text-align: left;
top: -var(hb-param-margin-gene-middle-vertical);
right: var(hb-param-margin-gene-right);
bottom: var(hb-param-margin-gene-bottom);
-
}
+AgendaEventViewerItem::secondaryTextItem[leftPrimaryIconItem="false"] {
+ text-height: var(hb-param-text-height-secondary);
+ font-variant: secondary;
+ text-align: left;
+ top: -var(hb-param-margin-gene-middle-vertical);
+ right: var(hb-param-margin-gene-right);
+ bottom: var(hb-param-margin-gene-bottom);
+ left: -var(hb-param-margin-gene-middle-horizontal);
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/agendaeventviewer/data/agendaeventvieweritem_color.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+AgendaEventViewerItem::primaryTextItem{
+ color: var(qtc_list_item_content_normal);
+}
+
+AgendaEventViewerItem::primaryTextItem[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+AgendaEventViewerItem::primaryTextItem[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+AgendaEventViewerItem::secondaryTextItem{
+ color: var(qtc_list_item_content_normal);
+}
+
+AgendaEventViewerItem::secondaryTextItem[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+AgendaEventViewerItem::secondaryTextItem[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+AgendaEventViewerItem::primaryRightIconItem{
+ color: var(qtc_list_item_content_normal);
+}
\ No newline at end of file
Binary file calendarui/agendaeventviewer/data/caleneventviewer_en_GB.qm has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/agendaeventviewer/eabi/agendaeventvieweru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,12 @@
+EXPORTS
+ _ZN17AgendaEventViewer4viewE11AgendaEntryNS_7ActionsE @ 1 NONAME
+ _ZN17AgendaEventViewer4viewERK5QFileNS_7ActionsE @ 2 NONAME
+ _ZN17AgendaEventViewer4viewEmNS_7ActionsE @ 3 NONAME
+ _ZN17AgendaEventViewerC1EP10AgendaUtilP7QObject @ 4 NONAME
+ _ZN17AgendaEventViewerC1EP7QObject @ 5 NONAME
+ _ZN17AgendaEventViewerC2EP10AgendaUtilP7QObject @ 6 NONAME
+ _ZN17AgendaEventViewerC2EP7QObject @ 7 NONAME
+ _ZN17AgendaEventViewerD0Ev @ 8 NONAME
+ _ZN17AgendaEventViewerD1Ev @ 9 NONAME
+ _ZN17AgendaEventViewerD2Ev @ 10 NONAME
+
--- a/calendarui/agendaeventviewer/inc/agendaeventview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/inc/agendaeventview.h Thu Jul 22 16:32:51 2010 +0100
@@ -29,15 +29,17 @@
// Forward declarations
class QGraphicsLinearLayout;
-class QTranslator;
+class QTimer;
+class QPluginLoader;
class HbView;
class HbAction;
class HbLabel;
class HbMainWindow;
+class HbTranslator;
+class MapTileService;
class AgendaEventViewerItem;
class AgendaEventViewerPrivate;
class AgendaEventViewerDocLoader;
-class NotesEditor;
class CalenEditor;
class AgendaEventView: public QObject
@@ -73,7 +75,7 @@
void showDeleteOccurencePopup();
void showDeleteConfirmationQuery();
void getSubjectIcon(AgendaEntry::Type type, QString &subjectIcon);
-
+ void getProgressIndicatorstatus(QString &progressIcon);
private slots:
void markTodoStatus();
void edit();
@@ -86,8 +88,12 @@
void handleCalendarEditorClosed();
void handleDeleteOccurence(int index);
void handleDeleteAction();
+ void updateProgressIndicator();
+ void receiveMapTileStatus(int entryid,int addressType, int status);
+ void changedOrientation(Qt::Orientation orientation);
+
private:
-
+ HbMainWindow* mMainWindow;
HbView *mViewer;
QPointer<AgendaEventViewerItem> mSubjectWidget;
QPointer<AgendaEventViewerItem> mDateTimeWidget;
@@ -103,16 +109,22 @@
AgendaEventViewerDocLoader *mDocLoader;
AgendaEntry mOriginalAgendaEntry;
AgendaEntry mAgendaEntry;
- NotesEditor *mNoteEditor;
+ QPointer<QPluginLoader> mNotesEditorPluginLoader;
CalenEditor *mCalenEditor;
QGraphicsLinearLayout *mLinearLayout;
-
- QTranslator *mTranslator;
+
+ HbTranslator *mTranslator;
bool mReminderWidgetAdded;
HbAction *mBackAction;
- HbMainWindow* mMainWindow;
+
bool mLocationFeatureEnabled;
- QString mMaptilePath;
+ QString mMaptilePath;
+ MapTileService *mMaptileService;
+ QTimer *mProgressTimer;
+ int mProgressIconCount;
+ bool mMaptileStatusReceived;
+ int mMaptileStatus;
+ bool mNotesPluginLoaded;
private:
friend class AgendaEventViewerPrivate;
--- a/calendarui/agendaeventviewer/inc/agendaeventviewer_p.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/inc/agendaeventviewer_p.h Thu Jul 22 16:32:51 2010 +0100
@@ -50,6 +50,7 @@
void editingCompleted();
void deletingStarted();
void deletingCompleted();
+ void viewCreationCompleted(int error);
private:
AgendaEventViewer *q_ptr;
@@ -60,6 +61,11 @@
private:
friend class AgendaEventView;
+ ulong mId;
+ AgendaEventViewer::Actions mAction;
+ bool mShowEventViewById;
+ bool mShowEventViewByFileHandle;
+ QString mFileName;
};
#endif // AGENDAEVENTVIEWERPRIVATE_H
--- a/calendarui/agendaeventviewer/src/agendaeventview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/src/agendaeventview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -17,12 +17,14 @@
// System includes
#include <QObject>
-#include <QDebug>
#include <QDateTime>
-#include <qtranslator.h>
#include <QGraphicsLinearLayout>
+#include <QFile>
+#include <QString>
+#include <QTimer>
+#include <QPluginLoader>
+#include <QDir>
#include <HbInstance>
-#include <hbapplication.h>
#include <HbMainWindow>
#include <HbView>
#include <HbMenu>
@@ -37,14 +39,12 @@
#include <HbMessageBox>
#include <HbDialog>
#include <HbLabel>
-#include <QFile>
-#include <QString>
-#include <QIcon>
-#include <QPainter>
-#include <QPixmap>
+#include <HbTranslator>
+
// User includes
+#include <maptileservice.h>//maptile service
#include <agendautil.h>
-#include <noteseditor.h>
+#include <NotesEditorInterface>
#include <caleneditor.h>
#include "agendaeventview.h"
#include "agendaeventviewerdocloader.h"
@@ -52,19 +52,11 @@
#include "agendaeventviewer_p.h"
#include "agendaeventvieweritem.h"
#include "calendateutils.h"
-
-//maptile service
-#include <maptileservice.h>
// Constants
#define CHARACTER_HYPHEN "-"
#define CHARACTER_SPACE " "
#define CHARACTER_NEW_LINE "\n"
-// This is used to set the maptile image height and width ,
-//because HbLabel by default not displaying the actual size of image
-const int height = 128;
-const int width = 330;
-
//This Property is use for setting a primary left icon
static const char *primaryLeftIconItem("leftPrimaryIconItem");
@@ -85,21 +77,18 @@
AgendaEventView::AgendaEventView(
AgendaEventViewerPrivate *owner, QObject *parent):
QObject(parent),
+ mMainWindow(NULL),
mOwner(owner),
+ mTranslator(new HbTranslator("caleneventviewer")),
mReminderWidgetAdded(true),
- mMainWindow(NULL),
- mMaptilePath(NULL)
+ mMaptilePath(NULL),
+ mMaptileService(NULL),
+ mProgressTimer(NULL),
+ mProgressIconCount(0),
+ mMaptileStatusReceived(false),
+ mMaptileStatus(-1),
+ mNotesPluginLoaded(false)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::AgendaEventView -->";
-
- // Load the translator based on locale
- mTranslator = new QTranslator;
- QString lang = QLocale::system().name();
- QString path = "Z:/resource/qt/translations/";
- mTranslator->load("caleneventviewer_en_GB",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneventviewer_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
mDocLoader = new AgendaEventViewerDocLoader;
@@ -146,12 +135,18 @@
mLinearLayout =
static_cast<QGraphicsLinearLayout *> (scrollAreaWidget->layout());
- MapTileService::AppType appType;
- appType = MapTileService::AppTypeCalendar;
- mLocationFeatureEnabled = MapTileService::isLocationFeatureEnabled(appType);
-
+
+ //maptile service object , to retrive maptile path from database.
+ mMaptileService= new MapTileService();
+ mLocationFeatureEnabled = mMaptileService->isLocationFeatureEnabled(
+ MapTileService::AppTypeCalendar);
+ if (mLocationFeatureEnabled) {
+ //timer to run progress indicator icon.
+ mProgressTimer = new QTimer(this);
+ mProgressTimer->setSingleShot(true);
+ connect(mProgressTimer, SIGNAL(timeout()), this, SLOT(updateProgressIndicator()));
+ }
- qDebug() << "AgendaEventViewer: AgendaEventView::AgendaEventView <--";
}
@@ -160,10 +155,8 @@
*/
AgendaEventView::~AgendaEventView()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::~AgendaEventView -->";
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -171,14 +164,30 @@
mDocLoader->reset();
delete mDocLoader;
-
+
+ // Unload notes editor if loaded.
+ if (mNotesEditorPluginLoader) {
+ mNotesEditorPluginLoader->unload();
+ delete mNotesEditorPluginLoader;
+ mNotesEditorPluginLoader = 0;
+ }
+
// Delete the mainwindow if we have created any
if (mMainWindow) {
delete mMainWindow;
mMainWindow = NULL;
}
- qDebug() << "AgendaEventViewer: AgendaEventView::~AgendaEventView <--";
+ if (mMaptileService) {
+ delete mMaptileService;
+ mMaptileService = NULL;
+ }
+
+ if (mProgressTimer) {
+ delete mProgressTimer;
+ mProgressTimer = NULL;
+ }
+
}
/*!
@@ -189,7 +198,6 @@
void AgendaEventView::execute(AgendaEntry entry,
AgendaEventViewer::Actions action)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::execute -->";
mOriginalAgendaEntry = entry;
mAgendaEntry = entry;
@@ -205,9 +213,6 @@
// Add the toolbar items to event viewer
addToolBarItem(action);
-
- // Add the title to event viewer.
- addGroupBoxData();
// Connect for the entry updation and addtion signal to refresh the view
// when the same is edited in editor.
@@ -229,9 +234,11 @@
mMainWindow = new HbMainWindow();
mMainWindow->addView(mViewer);
mMainWindow->setCurrentView(mViewer);
+ connect(mMainWindow,SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(changedOrientation(Qt::Orientation)));
} else {
window->addView(mViewer);
window->setCurrentView(mViewer);
+ connect(window,SIGNAL(orientationChanged(Qt::Orientation)),this,SLOT(changedOrientation(Qt::Orientation)));
}
// Add softkey after adding view on window
@@ -240,7 +247,6 @@
connect(mBackAction, SIGNAL(triggered()), this, SLOT(close()));
- qDebug() << "AgendaEventViewer: AgendaEventView::execute <--";
}
/*!
@@ -248,7 +254,9 @@
*/
void AgendaEventView::addViewerData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addViewerData -->";
+
+ // Add the title to event viewer.
+ addGroupBoxData();
// Set the summary & priority to viewer.
addSubjectAndPriorityData();
@@ -281,7 +289,6 @@
// Set the description.
addDescriptionData();
- qDebug() << "AgendaEventViewer: AgendaEventView::addViewerData <--";
}
/*!
@@ -289,7 +296,6 @@
*/
void AgendaEventView::addMenuItem()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addMenuItem -->";
if (mAgendaEntry.type() == AgendaEntry::TypeTodo) {
@@ -307,7 +313,6 @@
SLOT(markTodoStatus()));
menu->addAction(mMarkTodoAction);
}
- qDebug() << "AgendaEventViewer: AgendaEventView::addMenuItem <--";
}
/*!
@@ -315,7 +320,6 @@
*/
void AgendaEventView::addToolBarItem(AgendaEventViewer::Actions action)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addToolBarItem -->";
HbToolBar *toolBar = qobject_cast<HbToolBar *> (
mDocLoader->findWidget(AGENDA_EVENT_VIEWER_TOOLBAR));
@@ -346,7 +350,6 @@
toolBar->addAction(saveAction);
}
- qDebug() << "AgendaEventViewer: AgendaEventView::addToolBarItem <--";
}
/*!
@@ -354,21 +357,20 @@
*/
void AgendaEventView::addGroupBoxData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addGroupBoxData -->";
HbGroupBox *groupBox = qobject_cast<HbGroupBox *> (
mDocLoader->findWidget(AGENDA_EVENT_VIEWER_GROUPBOX));
- if (mAgendaEntry.type() == AgendaEntry::TypeTodo) {
+ AgendaEntry::Type entryType = mAgendaEntry.type();
+ if (entryType == AgendaEntry::TypeTodo) {
groupBox->setHeading(hbTrId("txt_calendar_subhead_to_do"));
- } else if (mAgendaEntry.type() == AgendaEntry::TypeNote) {
- groupBox->setHeading(tr("Note"));
- } else {
- // TODO: Add the text id based on the entry type Anniversary or meeting
- groupBox->setHeading(hbTrId("txt_calendar_subhead_event"));
+ } else if (entryType == AgendaEntry::TypeAppoinment) {
+ groupBox->setHeading(hbTrId("txt_calendar_subhead_meeting"));
+ }else if (entryType == AgendaEntry::TypeEvent) {
+ //TODO: Add text id once available
+ groupBox->setHeading(hbTrId("All day event"));
}
-
- qDebug() << "AgendaEventViewer: AgendaEventView::addGroupBoxData <--";
+
}
/*!
@@ -376,8 +378,6 @@
*/
void AgendaEventView::addSubjectAndPriorityData()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addSubjectAndPriorityData -->";
QStringList itemList;
itemList.append(hbTrId("txt_calendar_dblist_subject"));
@@ -401,8 +401,6 @@
mSubjectWidget->setEventViewerItemData(itemList, Qt::DecorationRole);
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addSubjectAndPriorityData <--";
}
/*!
@@ -410,9 +408,6 @@
*/
void AgendaEventView::addDateTimeData()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addDateTimeData -->";
-
QStringList itemData;
HbExtendedLocale systemLocale = HbExtendedLocale::system();
@@ -475,14 +470,13 @@
dateTimeText.append(systemLocale.format(startDateTime.date(),
r_qtn_date_usual_with_zero));
-
- if (CalenDateUtils::onSameDay(startDateTime, endDateTime)) {
+ if (CalenDateUtils::onSameDay(startDateTime, endDateTime.addSecs(-60))) {
data.append(hbTrId("txt_calendar_dblist_meeting_date").arg(
dateTimeText));
} else {
QString endDate;
endDate.append(
- systemLocale.format(endDateTime.date(),
+ systemLocale.format(endDateTime.addSecs(-60).date(),
r_qtn_date_usual_with_zero));
data.append(hbTrId("txt_calendar_dblist_start_end_time").arg(
dateTimeText).arg(endDate));
@@ -494,8 +488,6 @@
itemData.append(data);
mDateTimeWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addDateTimeData <--";
}
/*!
@@ -503,18 +495,28 @@
*/
void AgendaEventView::addLocationData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addLocationData -->";
QStringList itemData;
- itemData.append(QString::null);
- itemData.append(QString::null);
- itemData.append("qtg_small_location");
- mLocationWidget->setProperty(primaryLeftIconItem, false);
+ QString progressIcon(QString::null);
+ if ( mLocationFeatureEnabled ) {
+ getProgressIndicatorstatus(progressIcon);
+ }
+ if( progressIcon.isNull() ) {
+ itemData.append(QString::null);
+ itemData.append(QString::null);
+ itemData.append("qtg_small_location");
+ mLocationWidget->setProperty(primaryLeftIconItem, false);
+ }
+ else {
+ itemData.append("qtg_small_location");
+ itemData.append( progressIcon );
+ itemData.append(QString::null);
+ mLocationWidget->setProperty(primaryLeftIconItem, true);
+ }
mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
itemData.clear();
itemData.append(QString::null);
itemData.append(mAgendaEntry.location());
mLocationWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addLocationData <--";
}
/*!
@@ -522,47 +524,18 @@
*/
void AgendaEventView::addMapTileImage()
{
+ if (mLocationFeatureEnabled && !mAgendaEntry.location().isEmpty() && !mMaptilePath.isEmpty()) {
- qDebug() << "AgendaEventViewer: AgendaEventView::addMapTileImage -->";
-
- if (!mAgendaEntry.location().isEmpty() && mLocationFeatureEnabled){
- MapTileService::AddressType addressType;
- addressType = MapTileService::AddressPlain;
- int eventId = mAgendaEntry.id();
- mMaptilePath = MapTileService::getMapTileImage(eventId, addressType);
- if (!mMaptilePath.isNull())
- {
- QIcon mapTileIcon(mMaptilePath);
- QPainter painter;
- QPixmap baloon(HbIcon("qtg_small_location").pixmap());
- QPixmap map (mapTileIcon.pixmap(width,height));
- //Display pin image in the center of maptile image
- painter.begin( &map );
- painter.drawPixmap( (width/2)-(baloon.width()/2),
- (height/2)-baloon.height(), baloon );
- painter.end();
- mapTileIcon.addPixmap( map );
-
- HbIcon maptile(mapTileIcon);
- mMaptileLabel->setIcon(maptile);
-
- mMaptileLabel->setPreferredSize(QSizeF(width, height));
- mMaptileLabel->setMinimumSize(QSizeF(width, height));
- mMaptileLabel->setMaximumSize(QSizeF(width, height));
- mMaptileLabel->setSizePolicy(QSizePolicy(QSizePolicy::Fixed,
- QSizePolicy::Fixed));
-
- }
+ HbIcon maptile(mMaptilePath);
+ mMaptileLabel->setIcon(maptile);
+ mMaptileLabel->setPreferredSize(QSizeF(maptile.width(), maptile.height()));
}
-
- qDebug() << "AgendaEventViewer: AgendaEventView::addMapTileImage <--";
}
/*!
Add reminder data to Event viewer
*/
void AgendaEventView::addReminderData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addReminderData -->";
QStringList itemData;
itemData.append(QString::null);
itemData.append(QString::null);
@@ -573,7 +546,6 @@
itemData.append(QString::null);
itemData.append(alarmTimeText());
mReminderWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addReminderData <--";
}
/*!
@@ -581,7 +553,6 @@
*/
void AgendaEventView::addCompletedTodoData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addCompletedTodoData -->";
QStringList itemData;
QString completedText;
HbExtendedLocale systemLocale = HbExtendedLocale::system();;
@@ -596,7 +567,6 @@
itemData.append(hbTrId("txt_calendar_dblist_completed_date"));
itemData.append(completedText);
mReminderWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addCompletedTodoData <--";
}
/*!
@@ -604,18 +574,16 @@
*/
void AgendaEventView::addRepeatData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addRepeatData -->";
QStringList itemData;
itemData.append(QString::null);
itemData.append(QString::null);
- itemData.append("qtg_mono_repeat.svg");
+ itemData.append("qtg_small_repeat");
mRepeatWidget->setProperty(primaryLeftIconItem, false);
mRepeatWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
itemData.clear();
itemData.append(QString::null);
itemData.append(repeatRule());
mRepeatWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addRepeatData <--";
}
/*!
@@ -623,7 +591,6 @@
*/
void AgendaEventView::addDescriptionData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addDiscriptionData -->";
QStringList itemData;
itemData.append(QString::null);
itemData.append(QString::null);
@@ -634,7 +601,6 @@
itemData.append(hbTrId("txt_calendar_dblist_description"));
itemData.append(mAgendaEntry.description());
mDescriptionWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addDiscriptionData <--";
}
/*!
@@ -642,7 +608,6 @@
*/
void AgendaEventView::getPriorityIcon(int priority, QString &priorityIcon)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::getPriorityIcon -->";
switch(priority) {
case 1:priorityIcon.append("qtg_small_priority_high");
@@ -653,7 +618,6 @@
break;
}
- qDebug() << "AgendaEventViewer: AgendaEventView::getPriorityIcon <--";
}
/*!
@@ -661,7 +625,6 @@
*/
QString AgendaEventView::repeatRule() const
{
- qDebug() << "AgendaEventViewer: AgendaEventView::repeatRule -->";
QString repeatRule;
AgendaRepeatRule agendaRepeatRule = mAgendaEntry.repeatRule();
@@ -673,8 +636,7 @@
break;
case AgendaRepeatRule::WeeklyRule:
if (AgendaUtil::isWorkdaysRepeatingEntry(agendaRepeatRule)) {
- //TODO: Add text id for workdays
- repeatRule.append(hbTrId("Workdays"));
+ repeatRule.append(hbTrId("txt_calendar_dblist_repeats_workdays"));
} else {
if (agendaRepeatRule.interval() == 2) {
repeatRule.append(
@@ -705,7 +667,6 @@
hbTrId("txt_calendar_dblist_repeats_daily_val_until_1").
arg(untilDateString));
}
- qDebug() << "AgendaEventViewer: AgendaEventView::repeatRule <--";
return repeatRule;
}
@@ -717,7 +678,6 @@
*/
QString AgendaEventView::alarmTimeText() const
{
- qDebug() << "AgendaEventViewer: AgendaEventView::alarmTimeText -->";
QString alarmDateTimeText;
QDateTime startTime;
@@ -742,7 +702,6 @@
r_qtn_date_usual_with_zero)));
}
- qDebug() << "AgendaEventViewer: AgendaEventView::alarmTimeText <--";
return alarmDateTimeText;
}
@@ -751,7 +710,6 @@
*/
void AgendaEventView::removeWidget()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::removeWidget -->";
if (mAgendaEntry.location().isEmpty()) {
mLocationWidget->hide();
@@ -765,10 +723,11 @@
mMaptileLabel->hide();
mLinearLayout->removeItem(mMaptileLabel);
}
+ file.close();
if (mAgendaEntry.alarm().isNull()) {
if (mAgendaEntry.type() == AgendaEntry::TypeTodo ) {
- if (AgendaEntry::TodoNeedsAction == mAgendaEntry.status()) {
+ if (AgendaEntry::TodoCompleted != mAgendaEntry.status()) {
mReminderWidget->hide();
mLinearLayout->removeItem(mReminderWidget);
mReminderWidgetAdded = false;
@@ -793,7 +752,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug() << "AgendaEventViewer: AgendaEventView::removeWidget <--";
}
/*!
@@ -801,8 +759,6 @@
*/
void AgendaEventView::updateCompletedReminderData()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::updateCompletedReminderData -->";
if (AgendaEntry::TodoCompleted == mAgendaEntry.status()) {
addCompletedTodoData();
@@ -832,8 +788,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug()
- << "AgendaEventViewer: AgendaEventView::updateCompletedReminderData <--";
}
/*!
@@ -841,7 +795,6 @@
*/
void AgendaEventView::removeAllWidgets()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::removeAllWidgets -->";
for (int i = 2; i < mLinearLayout->count(); i++) {
mLinearLayout->removeAt(i);
@@ -849,7 +802,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug() << "AgendaEventViewer: AgendaEventView::removeAllWidgets <--";
}
/*!
@@ -857,7 +809,6 @@
*/
void AgendaEventView::addAllWidgets()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addAllWidgets -->";
mLinearLayout->addItem(mLocationWidget);
mLocationWidget->show();
@@ -873,7 +824,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug() << "AgendaEventViewer: AgendaEventView::addAllWidgets <--";
}
/*!
@@ -881,8 +831,6 @@
*/
void AgendaEventView::showDeleteOccurencePopup()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteOccurencePopup -->";
HbDialog *popUp = new HbDialog();
popUp->setDismissPolicy(HbDialog::NoDismiss);
popUp->setTimeout(HbDialog::NoTimeout);
@@ -916,8 +864,6 @@
// Show the popup
popUp->open();
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteOccurencePopup <--";
}
/*!
@@ -925,8 +871,6 @@
*/
void AgendaEventView::showDeleteConfirmationQuery()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteConfirmationQuery -->";
HbMessageBox *popup = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
popup->setDismissPolicy(HbDialog::NoDismiss);
@@ -968,8 +912,6 @@
SLOT(handleDeleteAction()));
popup->addAction(new HbAction(hbTrId("txt_calendar_button_cancel"), popup));
popup->open();
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteConfirmationQuery <--";
}
/*!
@@ -991,36 +933,26 @@
*/
void AgendaEventView::markTodoStatus()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::markTodoStatus -->";
QDateTime currentDateTime = QDateTime::currentDateTime();
// Set the to-do status using the agenda util.
- if (AgendaEntry::TodoNeedsAction == mAgendaEntry.status()) {
-
+ if (AgendaEntry::TodoCompleted != mAgendaEntry.status()) {
// Update the menu text to mark to-do as undone.
mMarkTodoAction->setText(hbTrId("txt_calendar_menu_mark_as_not_done"));
-
mAgendaEntry.setStatus(AgendaEntry::TodoCompleted);
mAgendaEntry.setCompletedDateTime(currentDateTime);
mOwner->mAgendaUtil->setCompleted(mAgendaEntry, true, currentDateTime);
-
-
-
- } else if (AgendaEntry::TodoCompleted == mAgendaEntry.status()) {
+ } else {
// Update the menu text to mark to-do as done.
mMarkTodoAction->setText(hbTrId("txt_calendar_menu_mark_as_done"));
-
mAgendaEntry.setStatus(AgendaEntry::TodoNeedsAction);
mOwner->mAgendaUtil->setCompleted(mAgendaEntry, false, currentDateTime);
-
-
}
updateCompletedReminderData();
- qDebug() << "AgendaEventViewer: AgendaEventView::markTodoStatus <--";
}
/*!
@@ -1028,18 +960,32 @@
*/
void AgendaEventView::edit()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::edit -->";
mOwner->editingStarted();
if (AgendaEntry::TypeTodo == mAgendaEntry.type()) {
- // Launch the to-do editor using notes editor api
- // Construct Note editor for launching the to-do editor
- mNoteEditor = new NotesEditor(mOwner->mAgendaUtil, this);
- mNoteEditor->edit(mAgendaEntry);
+ // Load notes editor plugin if not loaded.
+ if(!mNotesPluginLoaded) {
+ // Launch the to-do editor using notes editor plugin api
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create NotesEditor plugin loader object.
+ mNotesEditorPluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin
+ mNotesPluginLoaded = mNotesEditorPluginLoader->load();
+ }
+ QObject *plugin = qobject_cast<QObject*> (
+ mNotesEditorPluginLoader->instance());
+
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ interface->edit(mAgendaEntry, mOwner->mAgendaUtil);
connect(
- mNoteEditor, SIGNAL(editingCompleted(bool)),
+ interface, SIGNAL(editingCompleted(bool)),
this, SLOT(handleNoteEditorClosed(bool)));
@@ -1052,7 +998,6 @@
}
- qDebug() << "AgendaEventViewer: AgendaEventView::edit <--";
}
/*!
@@ -1060,7 +1005,6 @@
*/
void AgendaEventView::deleteAgendaEntry()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::deleteAgendaEntry -->";
// Before we do anything, check in the entry is repeating
// OR its a child item
@@ -1075,7 +1019,6 @@
showDeleteConfirmationQuery();
}
- qDebug() << "AgendaEventViewer: AgendaEventView::deleteAgendaEntry <--";
}
/*!
@@ -1083,21 +1026,18 @@
*/
void AgendaEventView::saveAgendaEntry()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::saveAgendaEntry -->";
// Save entry to calendar.
mOwner->mAgendaUtil->addEntry(mAgendaEntry);
// Close the agenda entry viewer
close();
- qDebug() << "AgendaEventViewer: AgendaEventView::saveAgendaEntry <--";
}
/*!
Closes the event viewer
*/
void AgendaEventView::close()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::close -->";
// Remove the view from main window.
HbMainWindow *window = hbInstance->allMainWindows().first();
@@ -1110,7 +1050,6 @@
window->removeView(mViewer);
mOwner->viewingCompleted(mAgendaEntry.startTime().date());
- qDebug() << "AgendaEventViewer: AgendaEventView::close <--";
}
/*!
@@ -1118,7 +1057,6 @@
*/
void AgendaEventView::handleEntryUpdation(ulong id)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::handleEntryUpdation -->";
AgendaEntry updatedEntry = mOwner->mAgendaUtil->fetchById(id);
@@ -1164,7 +1102,6 @@
close();
}
- qDebug() << "AgendaEventViewer: AgendaEventView::handleEntryUpdation <--";
}
/*!
@@ -1172,7 +1109,6 @@
*/
void AgendaEventView::handleEntryDeletion(ulong id)
{
- qDebug() <<"AgendaEventViewer: AgendaEventView::handleEntryDeletion -->";
if (id == mAgendaEntry.id()) {
// Close the agenda entry viewer
@@ -1180,7 +1116,6 @@
mOwner->deletingCompleted();
}
- qDebug() <<"AgendaEventViewer: AgendaEventView::handleEntryDeletion <--";
}
/*!
@@ -1189,13 +1124,12 @@
void AgendaEventView::handleNoteEditorClosed(bool status)
{
Q_UNUSED(status);
- qDebug() <<"AgendaEventViewer: AgendaEventView::handleNoteEditorClosed -->";
- // Cleanup.
- mNoteEditor->deleteLater();
+ // To avoid loading the plugin again for editing,
+ // Unload the plug-in while destruction.
+
mOwner->editingCompleted();
- qDebug() <<"AgendaEventViewer: AgendaEventView::handleNoteEditorClosed <--";
}
/*!
@@ -1203,15 +1137,11 @@
*/
void AgendaEventView::handleCalendarEditorClosed()
{
- qDebug()
- <<"AgendaEventViewer: AgendaEventView::handleCalendarEditorClosed -->";
// Cleanup.
mCalenEditor->deleteLater();
mOwner->editingCompleted();
- qDebug()
- <<"AgendaEventViewer: AgendaEventView::handleCalendarEditorClosed <--";
}
/*!
@@ -1219,7 +1149,6 @@
*/
void AgendaEventView::handleDeleteOccurence(int index)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::handleDeleteOccurence -->";
// To notify client that deleting Started
// Calendar Application changing state from viewing to deleting.
@@ -1239,7 +1168,6 @@
break;
}
- qDebug() << "AgendaEventViewer: AgendaEventView::handleDeleteOccurence <--";
}
/*!
@@ -1247,11 +1175,10 @@
*/
void AgendaEventView::getSubjectIcon(AgendaEntry::Type type, QString &subjectIcon)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::getSubjectIcon -->";
switch(type) {
case AgendaEntry::TypeAppoinment:
{
- subjectIcon.append("qtg_small_favorite");//@to do add proper icon
+ subjectIcon.append("qtg_small_meeting");
}
break;
case AgendaEntry::TypeTodo:
@@ -1261,7 +1188,7 @@
break;
case AgendaEntry::TypeEvent:
{
- subjectIcon.append("qtg_small_allday");//@ TODO add proper icon
+ subjectIcon.append("qtg_small_day");
}
break;
case AgendaEntry::TypeAnniversary:
@@ -1273,7 +1200,122 @@
break;
}
- qDebug() << "AgendaEventViewer: AgendaEventView::getSubjectIcon <--";
}
+/*!
+ According to maptile fetching status , update the viewer screen.
+ */
+void AgendaEventView::updateProgressIndicator()
+{
+ if (!mMaptileStatusReceived) {
+ QString iconName("qtg_anim_small_loading_");
+ mProgressIconCount = mProgressIconCount % 10 + 1;
+ iconName.append(QVariant(mProgressIconCount).toString());
+ QStringList itemData;
+ itemData.append("qtg_small_location");
+ itemData.append(iconName);
+ itemData.append(QString::null);
+ mLocationWidget->setProperty(primaryLeftIconItem, true);
+ mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
+ mProgressTimer->start(100);
+ }
+ else {
+ if (mProgressTimer->isActive()) {
+ mProgressTimer->stop();
+ }
+ if (mMaptileStatus == MapTileService::MapTileFetchingCompleted) {
+ QStringList itemData;
+ itemData.append(QString::null);
+ itemData.append(QString::null);
+ itemData.append("qtg_small_location");
+ mLocationWidget->setProperty(primaryLeftIconItem, false);
+ mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
+ Qt::Orientations orientation=hbInstance->allMainWindows().first()->orientation();
+ mMaptilePath.clear();
+ mMaptileStatus = mMaptileService->getMapTileImage(mAgendaEntry.id(), MapTileService::AddressPlain, mMaptilePath ,orientation);
+ addMapTileImage();
+ QFile file(mMaptilePath);
+ if (file.exists()) {
+ //add to linear layout
+ int indexMaptileLabel = 3;// index of maptile widget position
+ mLinearLayout->insertItem(indexMaptileLabel, mMaptileLabel);
+ mMaptileLabel->show();
+ }
+ file.close();
+
+ }
+ else {
+ QStringList itemData;
+ itemData.append("qtg_small_location");
+ QString stopIcon;
+ stopIcon.append(QString("qtg_mono_search_stop"));
+ itemData.append(stopIcon);
+ itemData.append(QString::null);
+ mLocationWidget->setProperty(primaryLeftIconItem, true);
+ mLocationWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
+
+ }
+ }
+}
+
+/*!
+ Maptile status received from maptile service
+ */
+void AgendaEventView::receiveMapTileStatus(int entryid,int addressType, int status)
+{
+ if (mAgendaEntry.id() == entryid && addressType == MapTileService::AddressPlain) {
+ mMaptileStatusReceived = true;
+ mMaptileStatus = status;
+ updateProgressIndicator();
+ }
+}
+
+/*!
+ Returns progress indication icon as per status of entry in database.
+ */
+void AgendaEventView::getProgressIndicatorstatus(QString &progressIcon)
+{
+ MapTileService::AddressType addressType;
+ addressType = MapTileService::AddressPlain;
+ int eventId = mAgendaEntry.id();
+ mMaptilePath.clear();
+ mMaptileStatus = -1;
+ connect(mMaptileService, SIGNAL(maptileFetchingStatusUpdate(int,
+ int ,int)), this, SLOT(receiveMapTileStatus(int,int,int)));
+ Qt::Orientations orientation=hbInstance->allMainWindows().first()->orientation();
+ mMaptileStatus = mMaptileService->getMapTileImage(eventId, addressType, mMaptilePath ,orientation);
+ if (mMaptileStatus == MapTileService::MapTileFetchingNetworkError || mMaptileStatus
+ == MapTileService::MapTileFetchingInProgress) {
+ mMaptilePath.clear();
+ mMaptileStatusReceived = false; //reseting receiving status value
+ progressIcon.append(QString("qtg_anim_small_loading_1"));
+ mProgressTimer->start(100);
+ }
+ else if (mMaptileStatus == MapTileService::MapTileFetchingInvalidAddress || mMaptileStatus
+ == MapTileService::MapTileFetchingUnknownError) {
+ mMaptilePath.clear();
+ //no further need of this coonnection
+ disconnect(mMaptileService, SIGNAL(maptileFetchingStatusUpdate(int,
+ int ,int)), this, SLOT(receiveMapTileStatus(int,int,int)));
+ progressIcon.append(QString("qtg_mono_search_stop"));
+ }
+ else {
+ //no further need of this coonnection
+ disconnect(mMaptileService, SIGNAL(maptileFetchingStatusUpdate(int,
+ int ,int)), this, SLOT(receiveMapTileStatus(int,int,int)));
+ progressIcon.append(QString::null);
+ }
+}
+/*!
+ Reload the maptile image on system orientation change.
+ */
+void AgendaEventView::changedOrientation(Qt::Orientation orientation)
+{
+ if (mMaptileStatus == MapTileService::MapTileFetchingCompleted) {
+ mMaptilePath.clear();
+ mMaptileService->getMapTileImage(mAgendaEntry.id(), MapTileService::AddressPlain, mMaptilePath,orientation);
+ addMapTileImage();
+ }
+}
+
// End of file
--- a/calendarui/agendaeventviewer/src/agendaeventviewer_p.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/agendaeventviewer/src/agendaeventviewer_p.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -16,7 +16,6 @@
*/
// System includes.
-#include <QDebug>
#include <QFile>
#include <QDir>
@@ -43,9 +42,8 @@
*/
AgendaEventViewerPrivate::AgendaEventViewerPrivate(
AgendaUtil *agendaUtil, QObject *parent)
-: QObject(parent)
+: QObject(parent),mShowEventViewById(false),mShowEventViewByFileHandle(false),mFileName(NULL),mAction(AgendaEventViewer::ActionNothing)
{
- qDebug() <<"AgendaEventViewerPrivate::AgendaEventViewerPrivate -->";
// Get the q-pointer.from parent
q_ptr = static_cast<AgendaEventViewer *> (parent);
@@ -65,8 +63,12 @@
connect(
mAgendaUtil, SIGNAL(entriesChanged(QList<ulong> )),
this, SLOT(handleEntriesChanged(QList<ulong> )));
+
+ // Register for the calenInstance view creation sucessfully
+ connect(
+ mAgendaUtil, SIGNAL(entryViewCreationCompleted(int)),
+ this, SLOT(viewCreationCompleted(int)));
- qDebug() <<"AgendaEventViewerPrivate::AgendaEventViewerPrivate <--";
}
/*!
@@ -74,14 +76,12 @@
*/
AgendaEventViewerPrivate::~AgendaEventViewerPrivate()
{
- qDebug() <<"AgendaEventViewerPrivate::~AgendaEventViewerPrivate -->";
if (mViewerOwnsAgendaUtil) {
delete mAgendaUtil;
mAgendaUtil = 0;
}
- qDebug() <<"AgendaEventViewerPrivate::~AgendaEventViewerPrivate <--";
}
/*!
@@ -93,18 +93,22 @@
void AgendaEventViewerPrivate::view(const ulong id,
AgendaEventViewer::Actions action)
{
- qDebug() <<"AgendaEventViewerPrivate::view(id) -->";
AgendaEntry entry = mAgendaUtil->fetchById(id);
if (entry.isNull()) {
+ // save the entries , to show the entry once instances are created
+ // if entry is null exit ,later call back comes in viewCreationCompleted
+ mAction = action;
+ mId =id;
+ //to avoid view creation multiple times
+ mShowEventViewById = true;
return;
}
// Construct the agenda event view
mAgendaEventView = new AgendaEventView(this);
mAgendaEventView->execute(entry, action);
- qDebug() <<"AgendaEventViewerPrivate::view(id) <--";
}
/*!
@@ -116,7 +120,6 @@
void AgendaEventViewerPrivate::view(const QFile &fileHandle,
AgendaEventViewer::Actions action)
{
- qDebug() <<"AgendaEventViewerPrivate::view(fileHandle) -->";
// Using calendar importer read the filehandle and generate agenda entry
QString filePath = fileHandle.fileName();
@@ -126,8 +129,13 @@
if (!entry.isNull()) {
mAgendaEventView = new AgendaEventView(this);
mAgendaEventView->execute(entry, action);
+ } else {
+ //store the file name
+ mFileName = filePath ;
+ mAction = action ;
+ mShowEventViewByFileHandle = true;
+ q_ptr->viewingCompleted(QDateTime::currentDateTime().date());
}
- qDebug() <<"AgendaEventViewerPrivate::view(fileHandle) <--";
}
/*!
@@ -137,7 +145,6 @@
void AgendaEventViewerPrivate::view(AgendaEntry entry,
AgendaEventViewer::Actions action)
{
- qDebug() <<"AgendaEventViewerPrivate::view(entry) -->";
if (entry.isNull()) {
return;
@@ -146,7 +153,6 @@
mAgendaEventView = new AgendaEventView(this);
mAgendaEventView->execute(entry, action);
- qDebug() <<"AgendaEventViewerPrivate::view(entry) <--";
}
/*!
@@ -156,7 +162,6 @@
*/
void AgendaEventViewerPrivate::viewingCompleted(const QDate date)
{
- qDebug() <<"AgendaEventViewerPrivate::viewingCompleted -->";
emit q_ptr->viewingCompleted(date);
@@ -165,7 +170,6 @@
mAgendaEventView->deleteLater();
}
- qDebug() <<"AgendaEventViewerPrivate::viewingCompleted -->";
}
/*!
@@ -173,11 +177,9 @@
*/
void AgendaEventViewerPrivate::editingStarted()
{
- qDebug() <<"AgendaEventViewerPrivate::editingStarted -->";
emit q_ptr->editingStarted();
- qDebug() <<"AgendaEventViewerPrivate::editingStarted -->";
}
/*!
@@ -185,11 +187,9 @@
*/
void AgendaEventViewerPrivate::editingCompleted()
{
- qDebug() <<"AgendaEventViewerPrivate::editingCompleted -->";
emit q_ptr->editingCompleted();
- qDebug() <<"AgendaEventViewerPrivate::editingCompleted -->";
}
/*!
@@ -197,11 +197,9 @@
*/
void AgendaEventViewerPrivate::deletingStarted()
{
- qDebug() <<"AgendaEventViewerPrivate::deletingStarted -->";
emit q_ptr->deletingStarted();
- qDebug() <<"AgendaEventViewerPrivate::deletingStarted -->";
}
/*!
@@ -209,11 +207,43 @@
*/
void AgendaEventViewerPrivate::deletingCompleted()
{
- qDebug() <<"AgendaEventViewerPrivate::deletingCompleted -->";
emit q_ptr->deletingCompleted();
- qDebug() <<"AgendaEventViewerPrivate::deletingCompleted -->";
}
+
+/*!
+ calls when instances of calenInstanceview and
+ entryInstanceview is created successfully
+ */
+void AgendaEventViewerPrivate::viewCreationCompleted(int error)
+ {
+
+ if((KErrNone == error))
+ {
+ AgendaEntry entry;
+ if (mShowEventViewById)
+ {
+ entry = mAgendaUtil->fetchById(mId);
+ }
+ else if(mShowEventViewByFileHandle)
+ {
+ QString nativeFilePath = QDir::toNativeSeparators(mFileName);
+ mAgendaUtil->importvCalendar(nativeFilePath, entry);
+ }
+ //if entry is there , then show the view
+ if (!entry.isNull())
+ {
+ mAgendaEventView = new AgendaEventView(this);
+ mAgendaEventView->execute(entry, mAction);
+ }
+ }
+ //reset the variables
+ mId = 0;
+ mFileName.clear();
+ mShowEventViewById = false;
+ mShowEventViewByFileHandle = false;
+ mAction = AgendaEventViewer::ActionNothing;
+ }
// End of file
--- a/calendarui/application/application.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/application/application.pro Thu Jul 22 16:32:51 2010 +0100
@@ -25,7 +25,6 @@
CONFIG += hb
-
symbian: {
BLD_INF_RULES.prj_exports += \
@@ -33,9 +32,13 @@
"../rom/calendarresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(calendarresources.iby)" \
"../rom/calenregionalutil.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(calenregionalutil.iby)" \
"../rom/calenlunarchinese_variant.iby CUSTOMER_APP_LAYER_IBY_EXPORT_PATH(calenlunarchinese_variant.iby)" \
+ "../rom/calenviewerservice.iby CORE_APP_LAYER_IBY_EXPORT_PATH(calenviewerservice.iby)" \
# Generic configuration interface for component cenrep settings
"../conf/calendarUI.confml APP_LAYER_CONFML(calendarUI.confml)" \
- "../conf/calendarUI_101F874B.crml APP_LAYER_CRML(calendarUI_101F874B.crml)"
+ "../conf/calendarUI_101F874B.crml APP_LAYER_CRML(calendarUI_101F874B.crml)" \
+ # stubsis is added to provide IAD
+ "../stubsis/calendar_stub.sis /epoc32/data/z/system/install/calendar_stub.sis"
+
LIBS += -lcalencontroller \
-lxqservice \
@@ -53,10 +56,8 @@
CONFIG += service
SERVICE.FILE = calendar_conf.xml
-
- RESOURCES += calendar.qrc
-
- TRANSLATIONS += calendar.ts
+
+ SKINICON = qtg_large_calendar
}
@@ -66,4 +67,8 @@
SOURCES += main.cpp \
calenserviceprovider.cpp
+RESOURCES += calendar.qrc
+
+TRANSLATIONS += calendar.ts
+
# End of file --Don't remove this.
\ No newline at end of file
--- a/calendarui/application/inc/calenserviceprovider.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/application/inc/calenserviceprovider.h Thu Jul 22 16:32:51 2010 +0100
@@ -27,7 +27,7 @@
public:
enum CalenView{
MonthView = 0,
- DayView
+ AgendaView
};
//Q_DECLARE_USER_METATYPE_ENUM(enum);
CalenServiceProvider(CCalenController *controller, QObject* parent = 0);
--- a/calendarui/application/src/calenserviceprovider.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/application/src/calenserviceprovider.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -15,9 +15,10 @@
*
*/
//#include <qdatetime.h>
-#include <qdebug.h>
#include <hbmainwindow.h>
+#include <CalenLauncher>
+
#include "calencontroller.h"
#include "caleneditor.h"
#include "calenserviceprovider.h"
@@ -36,17 +37,16 @@
void CalenServiceProvider::launchCalendarApp(const QDateTime& date, int viewId)
{
- qDebug() << "launchCalendarApp slot getting called -->";
// Check the view ID and launch the corresponding view
switch(viewId) {
- case 0:
+ case CalenLauncher::MonthView:
// Launch the month view
mController->handleServiceManagerSlot(ECalenMonthView, date);
break;
- case 1:
- // Launch the month view
- mController->handleServiceManagerSlot(ECalenDayView, date);
+ case CalenLauncher::AgendaView:
+ // Launch the agenda view
+ mController->handleServiceManagerSlot(ECalenAgendaView, date);
break;
default:
// Keep Quiet
--- a/calendarui/application/src/main.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/application/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -17,10 +17,10 @@
#include <QtGui>
-#include <QTranslator>
#include <xqserviceutil.h>
-#include <hbapplication.h>
-#include <hbmainwindow.h>
+#include <hbapplication.h>
+#include <hbmainwindow.h>
+#include <hbtranslator.h>
#include "calencontroller.h"
#include "calenserviceprovider.h"
@@ -33,28 +33,25 @@
HbMainWindow window;
//For translation, loading and installing translator
- QTranslator translator;
- QString lang = QLocale::system().name();
- QString path = "Z:/resource/qt/translations/";
- // TODO: Load the appropriate .qm file based on locale
- bool loaded = translator.load("calendar_en_GB",":/translations");
- app.installTranslator(&translator);
-
- //Backup and restore code need to write here.
+ HbTranslator translator("calendar");
+ translator.loadCommon();
+
+ // Backup and restore code need to write here.
- // Check if calendar is launched thru XQService framework
- bool isFromServiceFrmwrk = XQServiceUtil::isService();
- CCalenController *controller = new CCalenController(isFromServiceFrmwrk);
-
- // Create the Calendar service provider
- CalenServiceProvider service(controller);
+ CCalenController *controller = new CCalenController();
+
+ int retValue = 0;
+ if (controller) {
+ controller->constructController();
+ // Create the Calendar service provider
+ CalenServiceProvider service(controller);
- int retValue = app.exec();
+ retValue = app.exec();
- // delete the controller
- controller->ReleaseCustomisations();
- controller->Release();
-
+ // delete the controller
+ controller->ReleaseCustomisations();
+ controller->Release();
+ }
return retValue;
}
--- a/calendarui/bwins/agendaeventvieweru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- ?view@AgendaEventViewer@@QAEXVAgendaEntry@@W4Actions@1@@Z @ 1 NONAME ; void AgendaEventViewer::view(class AgendaEntry, enum AgendaEventViewer::Actions)
- ?view@AgendaEventViewer@@QAEXABVQFile@@W4Actions@1@@Z @ 2 NONAME ; void AgendaEventViewer::view(class QFile const &, enum AgendaEventViewer::Actions)
- ??1AgendaEventViewer@@UAE@XZ @ 3 NONAME ; AgendaEventViewer::~AgendaEventViewer(void)
- ??0AgendaEventViewer@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 4 NONAME ; AgendaEventViewer::AgendaEventViewer(class AgendaUtil *, class QObject *)
- ?view@AgendaEventViewer@@QAEXKW4Actions@1@@Z @ 5 NONAME ; void AgendaEventViewer::view(unsigned long, enum AgendaEventViewer::Actions)
- ??0AgendaEventViewer@@QAE@PAVQObject@@@Z @ 6 NONAME ; AgendaEventViewer::AgendaEventViewer(class QObject *)
-
--- a/calendarui/bwins/calencommonutilsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-EXPORTS
- ?isNullTime@CalenDateUtils@@SA_NAAVQDateTime@@@Z @ 1 NONAME ; bool CalenDateUtils::isNullTime(class QDateTime &)
- ?roundToPreviousHour@CalenDateUtils@@SAHABH@Z @ 2 NONAME ; int CalenDateUtils::roundToPreviousHour(int const &)
- ?onSameMonth@CalenDateUtils@@SA_NABVQDateTime@@0@Z @ 3 NONAME ; bool CalenDateUtils::onSameMonth(class QDateTime const &, class QDateTime const &)
- ?timeOfDay@CalenDateUtils@@SAHABVQDateTime@@@Z @ 4 NONAME ; int CalenDateUtils::timeOfDay(class QDateTime const &)
- ?minTime@CalenDateUtils@@SA?AVQDateTime@@XZ @ 5 NONAME ; class QDateTime CalenDateUtils::minTime(void)
- ?isOnToday@CalenDateUtils@@SA_NABVQDateTime@@@Z @ 6 NONAME ; bool CalenDateUtils::isOnToday(class QDateTime const &)
- ?displayTimeOnDay@CalenDateUtils@@SA?AVQDateTime@@ABV2@0@Z @ 7 NONAME ; class QDateTime CalenDateUtils::displayTimeOnDay(class QDateTime const &, class QDateTime const &)
- ?endsAtStartOfDayL@CalenAgendaUtils@@SA_NAAVAgendaEntry@@ABVQDateTime@@@Z @ 8 NONAME ; bool CalenAgendaUtils::endsAtStartOfDayL(class AgendaEntry &, class QDateTime const &)
- ?removeEntriesEndingAtMidnightL@CalenAgendaUtils@@SAXAAV?$QList@VAgendaEntry@@@@ABVQDateTime@@@Z @ 9 NONAME ; void CalenAgendaUtils::removeEntriesEndingAtMidnightL(class QList<class AgendaEntry> &, class QDateTime const &)
- ?roundToPreviousHour@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 10 NONAME ; class QDateTime CalenDateUtils::roundToPreviousHour(class QDateTime const &)
- ?pastOf@CalenDateUtils@@SA?AVQDateTime@@ABV2@H@Z @ 11 NONAME ; class QDateTime CalenDateUtils::pastOf(class QDateTime const &, int)
- ?maxTime@CalenDateUtils@@SA?AVQDateTime@@XZ @ 12 NONAME ; class QDateTime CalenDateUtils::maxTime(void)
- ?timeRangesIntersect@CalenDateUtils@@SA_NABVQDateTime@@000@Z @ 13 NONAME ; bool CalenDateUtils::timeRangesIntersect(class QDateTime const &, class QDateTime const &, class QDateTime const &, class QDateTime const &)
- ?limitToValidTime@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 14 NONAME ; class QDateTime CalenDateUtils::limitToValidTime(class QDateTime const &)
- ?today@CalenDateUtils@@SA?AVQDateTime@@XZ @ 15 NONAME ; class QDateTime CalenDateUtils::today(void)
- ?isValidDay@CalenDateUtils@@SA_NABVQDateTime@@@Z @ 16 NONAME ; bool CalenDateUtils::isValidDay(class QDateTime const &)
- ?beginningOfDay@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 17 NONAME ; class QDateTime CalenDateUtils::beginningOfDay(class QDateTime const &)
- ?onSameDay@CalenDateUtils@@SA_NABVQDateTime@@0@Z @ 18 NONAME ; bool CalenDateUtils::onSameDay(class QDateTime const &, class QDateTime const &)
- ?defaultTime@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 19 NONAME ; class QDateTime CalenDateUtils::defaultTime(class QDateTime const &)
- ?futureOf@CalenDateUtils@@SA?AVQDateTime@@ABV2@H@Z @ 20 NONAME ; class QDateTime CalenDateUtils::futureOf(class QDateTime const &, int)
- ?now@CalenDateUtils@@SA?AVQDateTime@@XZ @ 21 NONAME ; class QDateTime CalenDateUtils::now(void)
-
--- a/calendarui/bwins/calencontrolleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-EXPORTS
- ?checkMultipleCreation@CCalenController@@AAEXXZ @ 1 NONAME ; void CCalenController::checkMultipleCreation(void)
- ?SetDefaultContext@CCalenController@@AAEXXZ @ 2 NONAME ; void CCalenController::SetDefaultContext(void)
- ?getFirstView@CCalenController@@QAEHXZ @ 3 NONAME ; int CCalenController::getFirstView(void)
- ?handleServiceManagerSlot@CCalenController@@QAEXHABVQDateTime@@@Z @ 4 NONAME ; void CCalenController::handleServiceManagerSlot(int, class QDateTime const &)
- ?context@CCalenController@@QAEAAVMCalenContext@@XZ @ 5 NONAME ; class MCalenContext & CCalenController::context(void)
- ?ViewManager@CCalenController@@QAEAAVCalenViewManager@@XZ @ 6 NONAME ; class CalenViewManager & CCalenController::ViewManager(void)
- ?Infobar@CCalenController@@QAEPAVHbWidget@@XZ @ 7 NONAME ; class HbWidget * CCalenController::Infobar(void)
- ?agendaInterface@CCalenController@@QAEPAVAgendaUtil@@XZ @ 8 NONAME ; class AgendaUtil * CCalenController::agendaInterface(void)
- ?BroadcastNotification@CCalenController@@QAEXW4TCalenNotification@@@Z @ 9 NONAME ; void CCalenController::BroadcastNotification(enum TCalenNotification)
- ?MainWindow@CCalenController@@QAEAAVHbMainWindow@@XZ @ 10 NONAME ; class HbMainWindow & CCalenController::MainWindow(void)
- ?CancelNotifications@CCalenController@@QAEXPAVMCalenNotificationHandler@@@Z @ 11 NONAME ; void CCalenController::CancelNotifications(class MCalenNotificationHandler *)
- ?Notifier@CCalenController@@QAEAAVCalenNotifier@@XZ @ 12 NONAME ; class CalenNotifier & CCalenController::Notifier(void)
- ?InstanceL@CCalenController@@SAPAV1@XZ @ 13 NONAME ; class CCalenController * CCalenController::InstanceL(void)
- ?CustomisationManager@CCalenController@@QAEAAVCCalenCustomisationManager@@XZ @ 14 NONAME ; class CCalenCustomisationManager & CCalenController::CustomisationManager(void)
- ?IssueCommandL@CCalenController@@QAEHH@Z @ 15 NONAME ; int CCalenController::IssueCommandL(int)
- ?Services@CCalenController@@QAEAAVMCalenServices@@XZ @ 16 NONAME ; class MCalenServices & CCalenController::Services(void)
- ?InfobarTextL@CCalenController@@QAEPAVQString@@XZ @ 17 NONAME ; class QString * CCalenController::InfobarTextL(void)
- ?Release@CCalenController@@QAEXXZ @ 18 NONAME ; void CCalenController::Release(void)
- ?RegisterForNotificationsL@CCalenController@@QAEXPAVMCalenNotificationHandler@@W4TCalenNotification@@@Z @ 19 NONAME ; void CCalenController::RegisterForNotificationsL(class MCalenNotificationHandler *, enum TCalenNotification)
- ??0CCalenController@@QAE@_N@Z @ 20 NONAME ; CCalenController::CCalenController(bool)
- ?GetCommandHandlerL@CCalenController@@QAEPAVMCalenCommandHandler@@H@Z @ 21 NONAME ; class MCalenCommandHandler * CCalenController::GetCommandHandlerL(int)
- ??1CCalenController@@QAE@XZ @ 22 NONAME ; CCalenController::~CCalenController(void)
- ?OfferMenu@CCalenController@@QAEXPAVHbMenu@@@Z @ 23 NONAME ; void CCalenController::OfferMenu(class HbMenu *)
- ?RegisterForNotificationsL@CCalenController@@QAEXPAVMCalenNotificationHandler@@AAV?$RArray@W4TCalenNotification@@@@@Z @ 24 NONAME ; void CCalenController::RegisterForNotificationsL(class MCalenNotificationHandler *, class RArray<enum TCalenNotification> &)
- ?NewServicesL@CCalenController@@UAEPAVMCalenServices@@XZ @ 25 NONAME ; class MCalenServices * CCalenController::NewServicesL(void)
- ?ReleaseCustomisations@CCalenController@@QAEXXZ @ 26 NONAME ; void CCalenController::ReleaseCustomisations(void)
-
--- a/calendarui/bwins/calencustomisationmanageru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-EXPORTS
- ?SetPluginAvailabilityL@CCalenCustomisationManager@@QAEXVTUid@@H@Z @ 1 NONAME ; void CCalenCustomisationManager::SetPluginAvailabilityL(class TUid, int)
- ?HandleNotificationL@CCalenCustomisationManager@@AAEXW4TCalenNotification@@@Z @ 2 NONAME ; void CCalenCustomisationManager::HandleNotificationL(enum TCalenNotification)
- ?HandleNotification@CCalenCustomisationManager@@UAEXW4TCalenNotification@@@Z @ 3 NONAME ; void CCalenCustomisationManager::HandleNotification(enum TCalenNotification)
- ?CreateActivePluginListL@CCalenCustomisationManager@@AAEXXZ @ 4 NONAME ; void CCalenCustomisationManager::CreateActivePluginListL(void)
- ?AddPluginL@CCalenCustomisationManager@@AAEXPAVCCalenCustomisation@@VTUid@@@Z @ 5 NONAME ; void CCalenCustomisationManager::AddPluginL(class CCalenCustomisation *, class TUid)
- ?OfferMenu@CCalenCustomisationManager@@QAEXPAVHbMenu@@@Z @ 6 NONAME ; void CCalenCustomisationManager::OfferMenu(class HbMenu *)
- ?PluginInfoArray@CCalenCustomisationManager@@QBEABV?$RPointerArray@VCImplementationInformation@@@@XZ @ 7 NONAME ; class RPointerArray<class CImplementationInformation> const & CCalenCustomisationManager::PluginInfoArray(void) const
- ?DisablePluginL@CCalenCustomisationManager@@AAEXVTUid@@@Z @ 8 NONAME ; void CCalenCustomisationManager::DisablePluginL(class TUid)
- ??_ECCalenCustomisationManager@@UAE@I@Z @ 9 NONAME ; CCalenCustomisationManager::~CCalenCustomisationManager(unsigned int)
- ?InfobarTextL@CCalenCustomisationManager@@QAEPAVQString@@XZ @ 10 NONAME ; class QString * CCalenCustomisationManager::InfobarTextL(void)
- ?NewL@CCalenCustomisationManager@@SAPAV1@AAVMCalenServicesFactory@@AAVMCalenServices@@@Z @ 11 NONAME ; class CCalenCustomisationManager * CCalenCustomisationManager::NewL(class MCalenServicesFactory &, class MCalenServices &)
- ?ActivePlugins@CCalenCustomisationManager@@QBEABV?$RArray@VTUid@@@@XZ @ 12 NONAME ; class RArray<class TUid> const & CCalenCustomisationManager::ActivePlugins(void) const
- ?PluginAvailabilityFinder@CCalenCustomisationManager@@CAHPBVTUid@@ABUTCalenPluginAvailability@1@@Z @ 13 NONAME ; int CCalenCustomisationManager::PluginAvailabilityFinder(class TUid const *, struct CCalenCustomisationManager::TCalenPluginAvailability const &)
- ?UnloadPluginsL@CCalenCustomisationManager@@QAEXABV?$RArray@VTUid@@@@@Z @ 14 NONAME ; void CCalenCustomisationManager::UnloadPluginsL(class RArray<class TUid> const &)
- ??1CCalenCustomisationManager@@UAE@XZ @ 15 NONAME ; CCalenCustomisationManager::~CCalenCustomisationManager(void)
- ?LoadPluginL@CCalenCustomisationManager@@AAEXVTUid@@@Z @ 16 NONAME ; void CCalenCustomisationManager::LoadPluginL(class TUid)
- ?GetCommandHandlerL@CCalenCustomisationManager@@QAEPAVMCalenCommandHandler@@H@Z @ 17 NONAME ; class MCalenCommandHandler * CCalenCustomisationManager::GetCommandHandlerL(int)
- ??0CCalenCustomisationManager@@AAE@AAVMCalenServicesFactory@@AAVMCalenServices@@@Z @ 18 NONAME ; CCalenCustomisationManager::CCalenCustomisationManager(class MCalenServicesFactory &, class MCalenServices &)
- ?DoImmediatePluginLoadingL@CCalenCustomisationManager@@AAEXXZ @ 19 NONAME ; void CCalenCustomisationManager::DoImmediatePluginLoadingL(void)
- ?FindPluginL@CCalenCustomisationManager@@AAEPAVCCalenCustomisation@@VTUid@@@Z @ 20 NONAME ; class CCalenCustomisation * CCalenCustomisationManager::FindPluginL(class TUid)
- ?ConstructL@CCalenCustomisationManager@@AAEXXZ @ 21 NONAME ; void CCalenCustomisationManager::ConstructL(void)
- ?EnablePluginL@CCalenCustomisationManager@@AAEXVTUid@@@Z @ 22 NONAME ; void CCalenCustomisationManager::EnablePluginL(class TUid)
- ?Infobar@CCalenCustomisationManager@@QAEPAVHbWidget@@XZ @ 23 NONAME ; class HbWidget * CCalenCustomisationManager::Infobar(void)
-
--- a/calendarui/bwins/caleneditoru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-EXPORTS
- ?metaObject@CalenEditor@@UBEPBUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const * CalenEditor::metaObject(void) const
- ?edit@CalenEditor@@QAEXVAgendaEntry@@_N@Z @ 2 NONAME ; void CalenEditor::edit(class AgendaEntry, bool)
- ?edit@CalenEditor@@QAEXABVQFile@@_N@Z @ 3 NONAME ; void CalenEditor::edit(class QFile const &, bool)
- ??_ECalenEditor@@UAE@I@Z @ 4 NONAME ; CalenEditor::~CalenEditor(unsigned int)
- ?tr@CalenEditor@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString CalenEditor::tr(char const *, char const *)
- ?getStaticMetaObject@CalenEditor@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & CalenEditor::getStaticMetaObject(void)
- ?trUtf8@CalenEditor@@SA?AVQString@@PBD0@Z @ 7 NONAME ; class QString CalenEditor::trUtf8(char const *, char const *)
- ?tr@CalenEditor@@SA?AVQString@@PBD0H@Z @ 8 NONAME ; class QString CalenEditor::tr(char const *, char const *, int)
- ?entrySaved@CalenEditor@@IAEXXZ @ 9 NONAME ; void CalenEditor::entrySaved(void)
- ?qt_metacast@CalenEditor@@UAEPAXPBD@Z @ 10 NONAME ; void * CalenEditor::qt_metacast(char const *)
- ?create@CalenEditor@@QAEXVQDateTime@@_NW4CreateType@1@@Z @ 11 NONAME ; void CalenEditor::create(class QDateTime, bool, enum CalenEditor::CreateType)
- ??0CalenEditor@@QAE@PAVQObject@@@Z @ 12 NONAME ; CalenEditor::CalenEditor(class QObject *)
- ?d_func@CalenEditor@@ABEPBVCalenEditorPrivate@@XZ @ 13 NONAME ; class CalenEditorPrivate const * CalenEditor::d_func(void) const
- ?trUtf8@CalenEditor@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString CalenEditor::trUtf8(char const *, char const *, int)
- ??0CalenEditor@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 15 NONAME ; CalenEditor::CalenEditor(class AgendaUtil *, class QObject *)
- ?qt_metacall@CalenEditor@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 16 NONAME ; int CalenEditor::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??1CalenEditor@@UAE@XZ @ 17 NONAME ; CalenEditor::~CalenEditor(void)
- ?staticMetaObject@CalenEditor@@2UQMetaObject@@B @ 18 NONAME ; struct QMetaObject const CalenEditor::staticMetaObject
- ?edit@CalenEditor@@QAEXK_N@Z @ 19 NONAME ; void CalenEditor::edit(unsigned long, bool)
- ?dialogClosed@CalenEditor@@IAEXXZ @ 20 NONAME ; void CalenEditor::dialogClosed(void)
- ?d_func@CalenEditor@@AAEPAVCalenEditorPrivate@@XZ @ 21 NONAME ; class CalenEditorPrivate * CalenEditor::d_func(void)
- ?calendarLaunchFailed@CalenEditor@@IAEXH@Z @ 22 NONAME ; void CalenEditor::calendarLaunchFailed(int)
- ?create@CalenEditor@@QAEXVAgendaEntry@@_NW4CreateType@1@@Z @ 23 NONAME ; void CalenEditor::create(class AgendaEntry, bool, enum CalenEditor::CreateType)
-
--- a/calendarui/bwins/calenglobaldatau.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ??0CalenContextImpl@@QAE@XZ @ 1 NONAME ; CalenContextImpl::CalenContextImpl(void)
- ??0CalenContextImpl@@QAE@PAVMCalenContextChangeObserver@@@Z @ 2 NONAME ; CalenContextImpl::CalenContextImpl(class MCalenContextChangeObserver *)
- ??0CalenContextImpl@@QAE@ABV0@@Z @ 3 NONAME ; CalenContextImpl::CalenContextImpl(class CalenContextImpl const &)
-
--- a/calendarui/bwins/calenlauncheru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-EXPORTS
- ?staticMetaObject@CalenLauncher@@2UQMetaObject@@B @ 1 NONAME ; struct QMetaObject const CalenLauncher::staticMetaObject
- ?launchCalendarApp@CalenLauncher@@QAEXW4CalenView@1@AAVQDateTime@@_N@Z @ 2 NONAME ; void CalenLauncher::launchCalendarApp(enum CalenLauncher::CalenView, class QDateTime &, bool)
- ?calendarLaunchFailed@CalenLauncher@@IAEXH@Z @ 3 NONAME ; void CalenLauncher::calendarLaunchFailed(int)
- ??1CalenLauncher@@UAE@XZ @ 4 NONAME ; CalenLauncher::~CalenLauncher(void)
- ??_ECalenLauncher@@UAE@I@Z @ 5 NONAME ; CalenLauncher::~CalenLauncher(unsigned int)
- ?tr@CalenLauncher@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString CalenLauncher::tr(char const *, char const *, int)
- ?trUtf8@CalenLauncher@@SA?AVQString@@PBD0@Z @ 7 NONAME ; class QString CalenLauncher::trUtf8(char const *, char const *)
- ?tr@CalenLauncher@@SA?AVQString@@PBD0@Z @ 8 NONAME ; class QString CalenLauncher::tr(char const *, char const *)
- ?qt_metacast@CalenLauncher@@UAEPAXPBD@Z @ 9 NONAME ; void * CalenLauncher::qt_metacast(char const *)
- ?getStaticMetaObject@CalenLauncher@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & CalenLauncher::getStaticMetaObject(void)
- ?handleError@CalenLauncher@@QAEXH@Z @ 11 NONAME ; void CalenLauncher::handleError(int)
- ?trUtf8@CalenLauncher@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString CalenLauncher::trUtf8(char const *, char const *, int)
- ??0CalenLauncher@@QAE@PAVQObject@@@Z @ 13 NONAME ; CalenLauncher::CalenLauncher(class QObject *)
- ?metaObject@CalenLauncher@@UBEPBUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const * CalenLauncher::metaObject(void) const
- ?qt_metacall@CalenLauncher@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int CalenLauncher::qt_metacall(enum QMetaObject::Call, int, void * *)
-
--- a/calendarui/bwins/calensettingsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-EXPORTS
- ?tr@CalenSettings@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString CalenSettings::tr(char const *, char const *)
- ?createModel@CalenSettings@@QAEXXZ @ 2 NONAME ; void CalenSettings::createModel(void)
- ?trUtf8@CalenSettings@@SA?AVQString@@PBD0H@Z @ 3 NONAME ; class QString CalenSettings::trUtf8(char const *, char const *, int)
- ?handleAlarmSnoozeTimeChange@CalenSettings@@QAEXH@Z @ 4 NONAME ; void CalenSettings::handleAlarmSnoozeTimeChange(int)
- ?getStaticMetaObject@CalenSettings@@SAABUQMetaObject@@XZ @ 5 NONAME ; struct QMetaObject const & CalenSettings::getStaticMetaObject(void)
- ?metaObject@CalenSettings@@UBEPBUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const * CalenSettings::metaObject(void) const
- ??_ECalenSettings@@UAE@I@Z @ 7 NONAME ; CalenSettings::~CalenSettings(unsigned int)
- ??1CalenSettings@@UAE@XZ @ 8 NONAME ; CalenSettings::~CalenSettings(void)
- ?qt_metacall@CalenSettings@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 9 NONAME ; int CalenSettings::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?handleRegionalInfoChange@CalenSettings@@QAEXXZ @ 10 NONAME ; void CalenSettings::handleRegionalInfoChange(void)
- ?qt_metacast@CalenSettings@@UAEPAXPBD@Z @ 11 NONAME ; void * CalenSettings::qt_metacast(char const *)
- ?staticMetaObject@CalenSettings@@2UQMetaObject@@B @ 12 NONAME ; struct QMetaObject const CalenSettings::staticMetaObject
- ?handleWeekNumberChange@CalenSettings@@QAEXXZ @ 13 NONAME ; void CalenSettings::handleWeekNumberChange(void)
- ?tr@CalenSettings@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString CalenSettings::tr(char const *, char const *, int)
- ?populateSettingList@CalenSettings@@QAEXXZ @ 15 NONAME ; void CalenSettings::populateSettingList(void)
- ?trUtf8@CalenSettings@@SA?AVQString@@PBD0@Z @ 16 NONAME ; class QString CalenSettings::trUtf8(char const *, char const *)
- ??0CalenSettings@@QAE@PAVHbDataForm@@PAVQObject@@@Z @ 17 NONAME ; CalenSettings::CalenSettings(class HbDataForm *, class QObject *)
-
--- a/calendarui/bwins/calenviewsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,154 +0,0 @@
-EXPORTS
- ?scrollingFinished@CalenPreviewPane@@QAEXXZ @ 1 NONAME ; void CalenPreviewPane::scrollingFinished(void)
- ?fetchEntriesAndUpdateModel@CalenMonthView@@QAEXXZ @ 2 NONAME ; void CalenMonthView::fetchEntriesAndUpdateModel(void)
- ?setDate@CalenMonthView@@AAEXXZ @ 3 NONAME ; void CalenMonthView::setDate(void)
- ?showHideRegionalInformation@CalenMonthView@@AAEXXZ @ 4 NONAME ; void CalenMonthView::showHideRegionalInformation(void)
- ?updateMonthGridWithEventIndicators@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@@Z @ 5 NONAME ; void CalenMonthGrid::updateMonthGridWithEventIndicators(class QList<class CalenMonthData> &)
- ?handleGridItemActivated@CalenMonthView@@QAEXXZ @ 6 NONAME ; void CalenMonthView::handleGridItemActivated(void)
- ?setFocusToProperDay@CalenMonthGrid@@AAEXXZ @ 7 NONAME ; void CalenMonthGrid::setFocusToProperDay(void)
- ??1CalenPreviewPane@@UAE@XZ @ 8 NONAME ; CalenPreviewPane::~CalenPreviewPane(void)
- ?mousePressEvent@CalenMonthGrid@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 9 NONAME ; void CalenMonthGrid::mousePressEvent(class QGraphicsSceneMouseEvent *)
- ?completePopulation@CalenMonthView@@AAEXXZ @ 10 NONAME ; void CalenMonthView::completePopulation(void)
- ?handleAppendingRows@CalenMonthGrid@@AAEXAAV?$QList@VCalenMonthData@@@@@Z @ 11 NONAME ; void CalenMonthGrid::handleAppendingRows(class QList<class CalenMonthData> &)
- ?handleChangeOrientation@CalenMonthView@@AAEXXZ @ 12 NONAME ; void CalenMonthView::handleChangeOrientation(void)
- ?staticMetaObject@CalenSettingsView@@2UQMetaObject@@B @ 13 NONAME ; struct QMetaObject const CalenSettingsView::staticMetaObject
- ?upGesture@CalenMonthGrid@@MAEXH@Z @ 14 NONAME ; void CalenMonthGrid::upGesture(int)
- ?getStaticMetaObject@CalenSettingsView@@SAABUQMetaObject@@XZ @ 15 NONAME ; struct QMetaObject const & CalenSettingsView::getStaticMetaObject(void)
- ?updateMonthDataArrayWithActiveDates@CalenMonthView@@AAEXXZ @ 16 NONAME ; void CalenMonthView::updateMonthDataArrayWithActiveDates(void)
- ?scrollingFinished@CalenMonthGrid@@QAEXXZ @ 17 NONAME ; void CalenMonthGrid::scrollingFinished(void)
- ?setCurrentIdex@CalenMonthGrid@@QAEXH@Z @ 18 NONAME ; void CalenMonthGrid::setCurrentIdex(int)
- ??_ECalenMonthGrid@@UAE@I@Z @ 19 NONAME ; CalenMonthGrid::~CalenMonthGrid(unsigned int)
- ?trUtf8@CalenPreviewPane@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString CalenPreviewPane::trUtf8(char const *, char const *)
- ?trUtf8@CalenMonthGrid@@SA?AVQString@@PBD0@Z @ 21 NONAME ; class QString CalenMonthGrid::trUtf8(char const *, char const *)
- ?populatePrevMonth@CalenMonthView@@QAEXXZ @ 22 NONAME ; void CalenMonthView::populatePrevMonth(void)
- ?qt_metacall@CalenSettingsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 23 NONAME ; int CalenSettingsView::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?handleLeftEffectCompleted@CalenMonthView@@AAEXABUEffectStatus@HbEffect@@@Z @ 24 NONAME ; void CalenMonthView::handleLeftEffectCompleted(struct HbEffect::EffectStatus const &)
- ?getStaticMetaObject@CalenMonthGrid@@SAABUQMetaObject@@XZ @ 25 NONAME ; struct QMetaObject const & CalenMonthGrid::getStaticMetaObject(void)
- ?trUtf8@CalenSettingsView@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString CalenSettingsView::trUtf8(char const *, char const *, int)
- ?qt_metacast@CalenMonthView@@UAEPAXPBD@Z @ 27 NONAME ; void * CalenMonthView::qt_metacast(char const *)
- ?staticMetaObject@CalenMonthView@@2UQMetaObject@@B @ 28 NONAME ; struct QMetaObject const CalenMonthView::staticMetaObject
- ?setupView@CalenMonthView@@QAEXPAVCalenDocLoader@@@Z @ 29 NONAME ; void CalenMonthView::setupView(class CalenDocLoader *)
- ?metaObject@CalenMonthGrid@@UBEPBUQMetaObject@@XZ @ 30 NONAME ; struct QMetaObject const * CalenMonthGrid::metaObject(void) const
- ?startAutoScroll@CalenPreviewPane@@QAEXXZ @ 31 NONAME ; void CalenPreviewPane::startAutoScroll(void)
- ?doLazyLoading@CalenMonthView@@QAEXXZ @ 32 NONAME ; void CalenMonthView::doLazyLoading(void)
- ?setView@CalenMonthGrid@@QAEXPAVCalenMonthView@@@Z @ 33 NONAME ; void CalenMonthGrid::setView(class CalenMonthView *)
- ?HandleNotification@CalenDayView@@UAEXW4TCalenNotification@@@Z @ 34 NONAME ; void CalenDayView::HandleNotification(enum TCalenNotification)
- ?panGesture@CalenMonthGrid@@MAEXABVQPointF@@@Z @ 35 NONAME ; void CalenMonthGrid::panGesture(class QPointF const &)
- ?mousePressEvent@CalenPreviewPane@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 36 NONAME ; void CalenPreviewPane::mousePressEvent(class QGraphicsSceneMouseEvent *)
- ??1CalenSettingsView@@UAE@XZ @ 37 NONAME ; CalenSettingsView::~CalenSettingsView(void)
- ?Date@CalenPreviewPane@@QAE?AVQDateTime@@XZ @ 38 NONAME ; class QDateTime CalenPreviewPane::Date(void)
- ?tr@CalenPreviewPane@@SA?AVQString@@PBD0H@Z @ 39 NONAME ; class QString CalenPreviewPane::tr(char const *, char const *, int)
- ?metaObject@CalenMonthView@@UBEPBUQMetaObject@@XZ @ 40 NONAME ; struct QMetaObject const * CalenMonthView::metaObject(void) const
- ??0CalenPreviewPane@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 41 NONAME ; CalenPreviewPane::CalenPreviewPane(class MCalenServices &, class QGraphicsItem *)
- ?mouseReleaseEvent@CalenPreviewPane@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 42 NONAME ; void CalenPreviewPane::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
- ?rowsInPrevMonth@CalenMonthView@@QAEHXZ @ 43 NONAME ; int CalenMonthView::rowsInPrevMonth(void)
- ?handlePrependingRows@CalenMonthGrid@@AAEXAAV?$QList@VCalenMonthData@@@@@Z @ 44 NONAME ; void CalenMonthGrid::handlePrependingRows(class QList<class CalenMonthData> &)
- ?mouseMoveEvent@CalenPreviewPane@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 45 NONAME ; void CalenPreviewPane::mouseMoveEvent(class QGraphicsSceneMouseEvent *)
- ?metaObject@CalenPreviewPane@@UBEPBUQMetaObject@@XZ @ 46 NONAME ; struct QMetaObject const * CalenPreviewPane::metaObject(void) const
- ??0CalenDayView@@QAE@AAVMCalenServices@@@Z @ 47 NONAME ; CalenDayView::CalenDayView(class MCalenServices &)
- ?populateNextMonth@CalenMonthView@@QAEXXZ @ 48 NONAME ; void CalenMonthView::populateNextMonth(void)
- ?handleRightEffectCompleted@CalenMonthView@@AAEXABUEffectStatus@HbEffect@@@Z @ 49 NONAME ; void CalenMonthView::handleRightEffectCompleted(struct HbEffect::EffectStatus const &)
- ?qt_metacast@CalenMonthGrid@@UAEPAXPBD@Z @ 50 NONAME ; void * CalenMonthGrid::qt_metacast(char const *)
- ?firstDayOfGrid@CalenMonthView@@QAE?AVQDateTime@@XZ @ 51 NONAME ; class QDateTime CalenMonthView::firstDayOfGrid(void)
- ?rowsInFutMonth@CalenMonthView@@QAEHXZ @ 52 NONAME ; int CalenMonthView::rowsInFutMonth(void)
- ?getCurrGridIndex@CalenMonthView@@QAEHXZ @ 53 NONAME ; int CalenMonthView::getCurrGridIndex(void)
- ?launchDayView@CalenMonthView@@QAEXXZ @ 54 NONAME ; void CalenMonthView::launchDayView(void)
- ??1CalenDayViewWidget@@UAE@XZ @ 55 NONAME ; CalenDayViewWidget::~CalenDayViewWidget(void)
- ??0CalenDayViewWidget@@QAE@AAVMCalenServices@@PAVCalenDocLoader@@@Z @ 56 NONAME ; CalenDayViewWidget::CalenDayViewWidget(class MCalenServices &, class CalenDocLoader *)
- ?prependRows@CalenMonthGrid@@QAEXXZ @ 57 NONAME ; void CalenMonthGrid::prependRows(void)
- ?orientationChanged@CalenMonthGrid@@MAEXW4Orientation@Qt@@@Z @ 58 NONAME ; void CalenMonthGrid::orientationChanged(enum Qt::Orientation)
- ?qt_metacall@CalenPreviewPane@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 59 NONAME ; int CalenPreviewPane::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?trUtf8@CalenPreviewPane@@SA?AVQString@@PBD0H@Z @ 60 NONAME ; class QString CalenPreviewPane::trUtf8(char const *, char const *, int)
- ??1CalenThickLinesDrawer@@UAE@XZ @ 61 NONAME ; CalenThickLinesDrawer::~CalenThickLinesDrawer(void)
- ?setView@CalenPreviewPane@@QAEXPAVCalenMonthView@@@Z @ 62 NONAME ; void CalenPreviewPane::setView(class CalenMonthView *)
- ??_ECalenMonthView@@UAE@I@Z @ 63 NONAME ; CalenMonthView::~CalenMonthView(unsigned int)
- ?changeOrientation@CalenMonthView@@UAEXW4Orientation@Qt@@@Z @ 64 NONAME ; void CalenMonthView::changeOrientation(enum Qt::Orientation)
- ?populatePreviewPane@CalenMonthView@@QAEXAAVQDateTime@@@Z @ 65 NONAME ; void CalenMonthView::populatePreviewPane(class QDateTime &)
- ??0CalenSettingsView@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 66 NONAME ; CalenSettingsView::CalenSettingsView(class MCalenServices &, class QGraphicsItem *)
- ?updateModelWithPrevMonth@CalenMonthView@@QAEXXZ @ 67 NONAME ; void CalenMonthView::updateModelWithPrevMonth(void)
- ?stopScrolling@CalenPreviewPane@@QAEXXZ @ 68 NONAME ; void CalenPreviewPane::stopScrolling(void)
- ?addBackgroundFrame@CalenMonthView@@AAEXXZ @ 69 NONAME ; void CalenMonthView::addBackgroundFrame(void)
- ?createGrid@CalenMonthView@@AAEXXZ @ 70 NONAME ; void CalenMonthView::createGrid(void)
- ?tr@CalenPreviewPane@@SA?AVQString@@PBD0@Z @ 71 NONAME ; class QString CalenPreviewPane::tr(char const *, char const *)
- ?getStaticMetaObject@CalenPreviewPane@@SAABUQMetaObject@@XZ @ 72 NONAME ; struct QMetaObject const & CalenPreviewPane::getStaticMetaObject(void)
- ?launchPreviousView@CalenSettingsView@@AAEXXZ @ 73 NONAME ; void CalenSettingsView::launchPreviousView(void)
- ?setCurrGridIndex@CalenMonthView@@QAEXH@Z @ 74 NONAME ; void CalenMonthView::setCurrGridIndex(int)
- ?setDateToLabel@CalenMonthView@@AAEXXZ @ 75 NONAME ; void CalenMonthView::setDateToLabel(void)
- ?addWeekNumbers@CalenMonthView@@AAEXXZ @ 76 NONAME ; void CalenMonthView::addWeekNumbers(void)
- ?qt_metacall@CalenThickLinesDrawer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 77 NONAME ; int CalenThickLinesDrawer::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?setupView@CalenDayView@@QAEXPAVCalenDocLoader@@@Z @ 78 NONAME ; void CalenDayView::setupView(class CalenDocLoader *)
- ??1CalenMonthView@@UAE@XZ @ 79 NONAME ; CalenMonthView::~CalenMonthView(void)
- ?dateFromContext@CalenMonthView@@AAE?AVQDateTime@@ABVMCalenContext@@@Z @ 80 NONAME ; class QDateTime CalenMonthView::dateFromContext(class MCalenContext const &)
- ?staticMetaObject@CalenMonthGrid@@2UQMetaObject@@B @ 81 NONAME ; struct QMetaObject const CalenMonthGrid::staticMetaObject
- ?trUtf8@CalenMonthGrid@@SA?AVQString@@PBD0H@Z @ 82 NONAME ; class QString CalenMonthGrid::trUtf8(char const *, char const *, int)
- ?paint@CalenThickLinesDrawer@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 83 NONAME ; void CalenThickLinesDrawer::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
- ?initializeForm@CalenSettingsView@@QAEXXZ @ 84 NONAME ; void CalenSettingsView::initializeForm(void)
- ?handlePanGestureFinished@CalenMonthGrid@@AAEXXZ @ 85 NONAME ; void CalenMonthGrid::handlePanGestureFinished(void)
- ?tr@CalenMonthGrid@@SA?AVQString@@PBD0H@Z @ 86 NONAME ; class QString CalenMonthGrid::tr(char const *, char const *, int)
- ?goToToday@CalenMonthView@@AAEXXZ @ 87 NONAME ; void CalenMonthView::goToToday(void)
- ?trUtf8@CalenThickLinesDrawer@@SA?AVQString@@PBD0H@Z @ 88 NONAME ; class QString CalenThickLinesDrawer::trUtf8(char const *, char const *, int)
- ?onContextChanged@CalenMonthView@@EAEXXZ @ 89 NONAME ; void CalenMonthView::onContextChanged(void)
- ?qt_metacast@CalenPreviewPane@@UAEPAXPBD@Z @ 90 NONAME ; void * CalenPreviewPane::qt_metacast(char const *)
- ?docLoader@CalenDayView@@QAEPAVCalenDocLoader@@XZ @ 91 NONAME ; class CalenDocLoader * CalenDayView::docLoader(void)
- ?getCurrentIndex@CalenMonthGrid@@QAEHXZ @ 92 NONAME ; int CalenMonthGrid::getCurrentIndex(void)
- ?tr@CalenSettingsView@@SA?AVQString@@PBD0H@Z @ 93 NONAME ; class QString CalenSettingsView::tr(char const *, char const *, int)
- ?removeWeekNumbers@CalenMonthView@@AAEXXZ @ 94 NONAME ; void CalenMonthView::removeWeekNumbers(void)
- ?trUtf8@CalenMonthView@@SA?AVQString@@PBD0H@Z @ 95 NONAME ; class QString CalenMonthView::trUtf8(char const *, char const *, int)
- ??0CalenMonthView@@QAE@AAVMCalenServices@@@Z @ 96 NONAME ; CalenMonthView::CalenMonthView(class MCalenServices &)
- ?getStaticMetaObject@CalenThickLinesDrawer@@SAABUQMetaObject@@XZ @ 97 NONAME ; struct QMetaObject const & CalenThickLinesDrawer::getStaticMetaObject(void)
- ?setNoEntriesLabel@CalenPreviewPane@@QAEXPAVHbLabel@@@Z @ 98 NONAME ; void CalenPreviewPane::setNoEntriesLabel(class HbLabel *)
- ?clearListModel@CalenDayView@@QAEXXZ @ 99 NONAME ; void CalenDayView::clearListModel(void)
- ??0CalenThickLinesDrawer@@QAE@W4WidgetType@CalendarNamespace@@PAVQGraphicsItem@@@Z @ 100 NONAME ; CalenThickLinesDrawer::CalenThickLinesDrawer(enum CalendarNamespace::WidgetType, class QGraphicsItem *)
- ?onLocaleChanged@CalenMonthView@@UAEXH@Z @ 101 NONAME ; void CalenMonthView::onLocaleChanged(int)
- ?doPopulation@CalenMonthView@@UAEXXZ @ 102 NONAME ; void CalenMonthView::doPopulation(void)
- ?tr@CalenMonthView@@SA?AVQString@@PBD0H@Z @ 103 NONAME ; class QString CalenMonthView::tr(char const *, char const *, int)
- ?GetInstanceListL@CalenPreviewPane@@AAEXXZ @ 104 NONAME ; void CalenPreviewPane::GetInstanceListL(void)
- ?getInstanceList@CalenMonthView@@AAEXAAV?$QList@VQDate@@@@VQDateTime@@1@Z @ 105 NONAME ; void CalenMonthView::getInstanceList(class QList<class QDate> &, class QDateTime, class QDateTime)
- ?tr@CalenMonthView@@SA?AVQString@@PBD0@Z @ 106 NONAME ; class QString CalenMonthView::tr(char const *, char const *)
- ??0CalenMonthGrid@@QAE@PAVQGraphicsItem@@@Z @ 107 NONAME ; CalenMonthGrid::CalenMonthGrid(class QGraphicsItem *)
- ?refreshViewOnGoToDate@CalenMonthView@@EAEXXZ @ 108 NONAME ; void CalenMonthView::refreshViewOnGoToDate(void)
- ?appendRows@CalenMonthGrid@@QAEXXZ @ 109 NONAME ; void CalenMonthGrid::appendRows(void)
- ?tr@CalenThickLinesDrawer@@SA?AVQString@@PBD0H@Z @ 110 NONAME ; class QString CalenThickLinesDrawer::tr(char const *, char const *, int)
- ?mouseReleaseEvent@CalenMonthGrid@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 111 NONAME ; void CalenMonthGrid::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
- ?updateMonthGridWithInActiveMonths@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@@Z @ 112 NONAME ; void CalenMonthGrid::updateMonthGridWithInActiveMonths(class QList<class CalenMonthData> &)
- ?getCurrentDay@CalenMonthView@@QAE?AVQDateTime@@XZ @ 113 NONAME ; class QDateTime CalenMonthView::getCurrentDay(void)
- ?staticMetaObject@CalenPreviewPane@@2UQMetaObject@@B @ 114 NONAME ; struct QMetaObject const CalenPreviewPane::staticMetaObject
- ?tr@CalenSettingsView@@SA?AVQString@@PBD0@Z @ 115 NONAME ; class QString CalenSettingsView::tr(char const *, char const *)
- ?onTwoSecondsTimeout@CalenPreviewPane@@QAEXXZ @ 116 NONAME ; void CalenPreviewPane::onTwoSecondsTimeout(void)
- ?tr@CalenThickLinesDrawer@@SA?AVQString@@PBD0@Z @ 117 NONAME ; class QString CalenThickLinesDrawer::tr(char const *, char const *)
- ?staticMetaObject@CalenThickLinesDrawer@@2UQMetaObject@@B @ 118 NONAME ; struct QMetaObject const CalenThickLinesDrawer::staticMetaObject
- ?populateWithInstanceView@CalenMonthView@@AAEXXZ @ 119 NONAME ; void CalenMonthView::populateWithInstanceView(void)
- ?trUtf8@CalenThickLinesDrawer@@SA?AVQString@@PBD0@Z @ 120 NONAME ; class QString CalenThickLinesDrawer::trUtf8(char const *, char const *)
- ?downGesture@CalenMonthGrid@@MAEXH@Z @ 121 NONAME ; void CalenMonthGrid::downGesture(int)
- ?populateLabel@CalenPreviewPane@@QAEXVQDateTime@@@Z @ 122 NONAME ; void CalenPreviewPane::populateLabel(class QDateTime)
- ?doPopulation@CalenDayView@@UAEXXZ @ 123 NONAME ; void CalenDayView::doPopulation(void)
- ??1CalenDayView@@UAE@XZ @ 124 NONAME ; CalenDayView::~CalenDayView(void)
- ?updateModelWithFutureMonth@CalenMonthView@@QAEXXZ @ 125 NONAME ; void CalenMonthView::updateModelWithFutureMonth(void)
- ?monthDataList@CalenMonthView@@QAE?AV?$QList@VCalenMonthData@@@@XZ @ 126 NONAME ; class QList<class CalenMonthData> CalenMonthView::monthDataList(void)
- ?updateMonthGridModel@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@H_N@Z @ 127 NONAME ; void CalenMonthGrid::updateMonthGridModel(class QList<class CalenMonthData> &, int, bool)
- ??1CalenMonthGrid@@UAE@XZ @ 128 NONAME ; CalenMonthGrid::~CalenMonthGrid(void)
- ?metaObject@CalenThickLinesDrawer@@UBEPBUQMetaObject@@XZ @ 129 NONAME ; struct QMetaObject const * CalenThickLinesDrawer::metaObject(void) const
- ?updateWeekNumGridModel@CalenMonthView@@AAEXXZ @ 130 NONAME ; void CalenMonthView::updateWeekNumGridModel(void)
- ?qt_metacast@CalenThickLinesDrawer@@UAEPAXPBD@Z @ 131 NONAME ; void * CalenThickLinesDrawer::qt_metacast(char const *)
- ?prepareForPopulation@CalenMonthView@@AAEXXZ @ 132 NONAME ; void CalenMonthView::prepareForPopulation(void)
- ?handlePreviewPaneGesture@CalenMonthView@@QAEX_N@Z @ 133 NONAME ; void CalenMonthView::handlePreviewPaneGesture(bool)
- ?setActiveDates@CalenMonthGrid@@AAEXVQDate@@@Z @ 134 NONAME ; void CalenMonthGrid::setActiveDates(class QDate)
- ?trUtf8@CalenMonthView@@SA?AVQString@@PBD0@Z @ 135 NONAME ; class QString CalenMonthView::trUtf8(char const *, char const *)
- ?setContextForActiveDay@CalenMonthView@@QAEXH@Z @ 136 NONAME ; void CalenMonthView::setContextForActiveDay(int)
- ?trUtf8@CalenSettingsView@@SA?AVQString@@PBD0@Z @ 137 NONAME ; class QString CalenSettingsView::trUtf8(char const *, char const *)
- ??_ECalenSettingsView@@UAE@I@Z @ 138 NONAME ; CalenSettingsView::~CalenSettingsView(unsigned int)
- ??_ECalenThickLinesDrawer@@UAE@I@Z @ 139 NONAME ; CalenThickLinesDrawer::~CalenThickLinesDrawer(unsigned int)
- ?metaObject@CalenSettingsView@@UBEPBUQMetaObject@@XZ @ 140 NONAME ; struct QMetaObject const * CalenSettingsView::metaObject(void) const
- ?getStaticMetaObject@CalenMonthView@@SAABUQMetaObject@@XZ @ 141 NONAME ; struct QMetaObject const & CalenMonthView::getStaticMetaObject(void)
- ?paint@CalenMonthGrid@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 142 NONAME ; void CalenMonthGrid::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
- ?qt_metacast@CalenSettingsView@@UAEPAXPBD@Z @ 143 NONAME ; void * CalenSettingsView::qt_metacast(char const *)
- ?tr@CalenMonthGrid@@SA?AVQString@@PBD0@Z @ 144 NONAME ; class QString CalenMonthGrid::tr(char const *, char const *)
- ?qt_metacall@CalenMonthView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 145 NONAME ; int CalenMonthView::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?setActiveDay@CalenMonthView@@AAEXVQDateTime@@@Z @ 146 NONAME ; void CalenMonthView::setActiveDay(class QDateTime)
- ?itemActivated@CalenMonthGrid@@QAEXABVQModelIndex@@@Z @ 147 NONAME ; void CalenMonthGrid::itemActivated(class QModelIndex const &)
- ?qt_metacall@CalenMonthGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 148 NONAME ; int CalenMonthGrid::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??_ECalenPreviewPane@@UAE@I@Z @ 149 NONAME ; CalenPreviewPane::~CalenPreviewPane(unsigned int)
- ?createEditor@CalenMonthView@@AAEXXZ @ 150 NONAME ; void CalenMonthView::createEditor(void)
- ?getActiveDay@CalenMonthView@@QAE?AVQDateTime@@XZ @ 151 NONAME ; class QDateTime CalenMonthView::getActiveDay(void)
- ?addRemoveActionsInMenu@CalenMonthView@@AAEXXZ @ 152 NONAME ; void CalenMonthView::addRemoveActionsInMenu(void)
-
--- a/calendarui/calendarui.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/calendarui.pro Thu Jul 22 16:32:51 2010 +0100
@@ -17,8 +17,19 @@
TEMPLATE = subdirs
CONFIG += ordered
-SUBDIRS += agendaeventviewer globaldata settings calenplugins customisationmanager \
- views controller application regionalplugins
+SUBDIRS += commonutils \
+ calenlauncher \
+ caleneditor \
+ agendaeventviewer \
+ globaldata \
+ settings \
+ calenplugins \
+ customisationmanager \
+ views \
+ controller \
+ application \
+ regionalplugins \
+ calenviewerservice
# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/caleneditor/bwins/caleneditoru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,25 @@
+EXPORTS
+ ?metaObject@CalenEditor@@UBEPBUQMetaObject@@XZ @ 1 NONAME ; struct QMetaObject const * CalenEditor::metaObject(void) const
+ ?edit@CalenEditor@@QAEXVAgendaEntry@@_N@Z @ 2 NONAME ; void CalenEditor::edit(class AgendaEntry, bool)
+ ?edit@CalenEditor@@QAEXABVQFile@@_N@Z @ 3 NONAME ; void CalenEditor::edit(class QFile const &, bool)
+ ??_ECalenEditor@@UAE@I@Z @ 4 NONAME ; CalenEditor::~CalenEditor(unsigned int)
+ ?calendarLaunchFailed@CalenEditor@@IAEXH@Z @ 5 NONAME ; void CalenEditor::calendarLaunchFailed(int)
+ ?tr@CalenEditor@@SA?AVQString@@PBD0@Z @ 6 NONAME ; class QString CalenEditor::tr(char const *, char const *)
+ ?getStaticMetaObject@CalenEditor@@SAABUQMetaObject@@XZ @ 7 NONAME ; struct QMetaObject const & CalenEditor::getStaticMetaObject(void)
+ ?trUtf8@CalenEditor@@SA?AVQString@@PBD0@Z @ 8 NONAME ; class QString CalenEditor::trUtf8(char const *, char const *)
+ ?tr@CalenEditor@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString CalenEditor::tr(char const *, char const *, int)
+ ?entrySaved@CalenEditor@@IAEXXZ @ 10 NONAME ; void CalenEditor::entrySaved(void)
+ ?qt_metacast@CalenEditor@@UAEPAXPBD@Z @ 11 NONAME ; void * CalenEditor::qt_metacast(char const *)
+ ?create@CalenEditor@@QAEXVQDateTime@@_NW4CreateType@1@@Z @ 12 NONAME ; void CalenEditor::create(class QDateTime, bool, enum CalenEditor::CreateType)
+ ??0CalenEditor@@QAE@PAVQObject@@@Z @ 13 NONAME ; CalenEditor::CalenEditor(class QObject *)
+ ?d_func@CalenEditor@@ABEPBVCalenEditorPrivate@@XZ @ 14 NONAME ; class CalenEditorPrivate const * CalenEditor::d_func(void) const
+ ?trUtf8@CalenEditor@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString CalenEditor::trUtf8(char const *, char const *, int)
+ ?qt_metacall@CalenEditor@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 16 NONAME ; int CalenEditor::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??0CalenEditor@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 17 NONAME ; CalenEditor::CalenEditor(class AgendaUtil *, class QObject *)
+ ??1CalenEditor@@UAE@XZ @ 18 NONAME ; CalenEditor::~CalenEditor(void)
+ ?staticMetaObject@CalenEditor@@2UQMetaObject@@B @ 19 NONAME ; struct QMetaObject const CalenEditor::staticMetaObject
+ ?edit@CalenEditor@@QAEXK_N@Z @ 20 NONAME ; void CalenEditor::edit(unsigned long, bool)
+ ?dialogClosed@CalenEditor@@IAEXXZ @ 21 NONAME ; void CalenEditor::dialogClosed(void)
+ ?d_func@CalenEditor@@AAEPAVCalenEditorPrivate@@XZ @ 22 NONAME ; class CalenEditorPrivate * CalenEditor::d_func(void)
+ ?create@CalenEditor@@QAEXVAgendaEntry@@_NW4CreateType@1@@Z @ 23 NONAME ; void CalenEditor::create(class AgendaEntry, bool, enum CalenEditor::CreateType)
+
--- a/calendarui/caleneditor/caleneditor.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/caleneditor.pro Thu Jul 22 16:32:51 2010 +0100
@@ -44,22 +44,24 @@
}
SOURCES += caleneditor.cpp \
- caleneditorcustomitem.cpp \
- caleneditor_p.cpp \
+ caleneditorcustomitem.cpp \
+ caleneditor_p.cpp \
caleneditordocloader.cpp \
caleneditorreminderfield.cpp \
caleneditorrepeatfield.cpp \
caleneditordatahandler.cpp
-
+
HEADERS += caleneditor.h \
- caleneditorcustomitem.h \
- caleneditorcommon.h \
- caleneditordocloader.h \
- caleneditor_p.h \
- caleneditorreminderfield.h \
- caleneditorrepeatfield.h \
- caleneditordatahandler.h
-
-RESOURCES += caleneditor.qrc
-
+ caleneditorcustomitem.h \
+ caleneditorcommon.h \
+ caleneditordocloader.h \
+ caleneditor_p.h \
+ caleneditorreminderfield.h \
+ caleneditorrepeatfield.h \
+ caleneditordatahandler.h
+
+RESOURCES += caleneditor.qrc
+
+TRANSLATIONS += caleneditor.ts
+
# End of file --Don't remove this.
--- a/calendarui/caleneditor/data/caleneditor.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/data/caleneditor.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -3,7 +3,4 @@
<file alias="caleneditorview.docml">caleneditorview.docml</file>
<file alias="caleneditorlocationitem.docml">caleneditorlocationitem.docml</file>
</qresource>
- <qresource prefix="/translations">
- <file alias="caleneditor_en_GB">caleneditor_en_GB.qm</file>
- </qresource>
</RCC>
Binary file calendarui/caleneditor/data/caleneditor_en_GB.qm has changed
--- a/calendarui/caleneditor/data/caleneditorview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/data/caleneditorview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -4,12 +4,12 @@
<string locid="txt_calendar_opt_add_description" name="text" value="Add description"/>
</object>
<object name="deleteEventAction" type="HbAction">
- <string locid="txt_calendar_opt_delete_event" name="text" value="Delete event"/>
+ <string locid="txt_common_menu_delete" name="text" value="Delete"/>
</object>
<widget name="calenEditorview" type="HbView">
<widget name="calenEditorcontent" role="HbView:widget" type="HbWidget">
<widget name="calenEditorHeadingWidget" type="HbGroupBox">
- <string locid="txt_calendar_subhead_new_event" name="titleText" value="New event"/>
+ <string locid="txt_calendar_subhead_new_event" name="heading" value="New event"/>
<bool name="collapsable" value="FALSE"/>
</widget>
<widget name="calenEditorDataFormWidget" type="HbDataForm">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/caleneditor/eabi/caleneditoru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+ _ZN11CalenEditor10entrySavedEv @ 1 NONAME
+ _ZN11CalenEditor11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN11CalenEditor11qt_metacastEPKc @ 3 NONAME
+ _ZN11CalenEditor12dialogClosedEv @ 4 NONAME
+ _ZN11CalenEditor16staticMetaObjectE @ 5 NONAME DATA 16
+ _ZN11CalenEditor19getStaticMetaObjectEv @ 6 NONAME
+ _ZN11CalenEditor20calendarLaunchFailedEi @ 7 NONAME
+ _ZN11CalenEditor4editE11AgendaEntryb @ 8 NONAME
+ _ZN11CalenEditor4editERK5QFileb @ 9 NONAME
+ _ZN11CalenEditor4editEmb @ 10 NONAME
+ _ZN11CalenEditor6createE11AgendaEntrybNS_10CreateTypeE @ 11 NONAME
+ _ZN11CalenEditor6createE9QDateTimebNS_10CreateTypeE @ 12 NONAME
+ _ZN11CalenEditorC1EP10AgendaUtilP7QObject @ 13 NONAME
+ _ZN11CalenEditorC1EP7QObject @ 14 NONAME
+ _ZN11CalenEditorC2EP10AgendaUtilP7QObject @ 15 NONAME
+ _ZN11CalenEditorC2EP7QObject @ 16 NONAME
+ _ZN11CalenEditorD0Ev @ 17 NONAME
+ _ZN11CalenEditorD1Ev @ 18 NONAME
+ _ZN11CalenEditorD2Ev @ 19 NONAME
+ _ZNK11CalenEditor10metaObjectEv @ 20 NONAME
+ _ZTI11CalenEditor @ 21 NONAME
+ _ZTV11CalenEditor @ 22 NONAME
+
--- a/calendarui/caleneditor/inc/caleneditor.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/inc/caleneditor.h Thu Jul 22 16:32:51 2010 +0100
@@ -45,6 +45,7 @@
public:
enum CreateType{
TypeAppointment = 0,
+ // TODO: Need to add more types
TypeUnKnown = -1
};
--- a/calendarui/caleneditor/inc/caleneditor_p.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/inc/caleneditor_p.h Thu Jul 22 16:32:51 2010 +0100
@@ -20,6 +20,7 @@
// System includes
#include <QObject>
+#include <QPointer>
#include <hbmainwindow.h>
#include <QHash>
#include <QDateTime>
@@ -31,7 +32,6 @@
#include "caleneditorcommon.h"
//forward declarations
-class QTranslator;
class QFile;
class HbDataForm;
class HbDataFormModel;
@@ -42,6 +42,7 @@
class HbCheckBox;
class HbComboBox;
class HbView;
+class HbTranslator;
class MCalenServices;
class AgendaEntry;
class AgendaUtil;
@@ -159,6 +160,8 @@
void saveFromDateTime(QDateTime& fromDateTime);
void saveToDateTime(QDateTime& toDateTime);
void handleLocationChange(const QString location);
+ void handleLocationChange(const QString location,
+ const double geoLatitude, const double geoLongitude);
void handleDescriptionChange(const QString description);
void saveAndCloseEditor();
void showDeleteConfirmationQuery(bool closeEditor = false);
@@ -170,6 +173,8 @@
void handleCancel();
void handleCalendarLaunchError(int error);
void closeEditor();
+ void handleLocationEditingFinished();
+ void selectEditingFinishedAction(HbAction* action);
private:
enum EditRange {
@@ -179,7 +184,7 @@
};
CalenEditor *q_ptr;
- AgendaUtil *mAgendaUtil;
+ QPointer<AgendaUtil> mAgendaUtil;
CalenEditorDocLoader *mEditorDocLoader;
HbView *mEditorView;
@@ -208,7 +213,7 @@
HbAction *mSoftKeyAction;
HbAction *mDescriptionAction;
HbMainWindow *mMainWindow;
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
bool mNewEntry;
bool mDescriptionItemAdded;
--- a/calendarui/caleneditor/inc/caleneditorcustomitem.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/inc/caleneditorcustomitem.h Thu Jul 22 16:32:51 2010 +0100
@@ -48,6 +48,7 @@
void enableDateButton(bool value);
bool canSetModelIndex(const QModelIndex &index) const;
void restore();
+ QDateTime getDateTime();
protected:
virtual HbWidget* createCustomWidget();
@@ -62,11 +63,13 @@
void saveDate();
void handleLocationTextChange(QString location);
void launchLocationPicker();
+ void handleEditingFinished();
Q_SIGNALS:
void dateTimeUpdated(QDateTime& fromDateTime);
void locationTextChanged(QString location);
-
+ void locationTextChanged(QString location, double latitude, double longitude);
+ void locationEditingFinished();
private:
AgendaEntry *mEditedEntry;
QDate mDate;
--- a/calendarui/caleneditor/src/caleneditor.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/src/caleneditor.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -81,6 +81,9 @@
*/
void CalenEditor::edit(AgendaEntry entry, bool launchCalendar)
{
+ if(entry.isNull()) {
+ return;
+ }
d_ptr->edit(entry, launchCalendar);
}
@@ -118,6 +121,9 @@
void CalenEditor::create(AgendaEntry entry, bool launchCalendar,
CalenEditor::CreateType type)
{
+ if(entry.isNull()) {
+ return;
+ }
d_ptr->create(type, entry, launchCalendar);
}
--- a/calendarui/caleneditor/src/caleneditor_p.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/src/caleneditor_p.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -19,8 +19,8 @@
#include <QObject>
#include <QTimer>
#include <QGraphicsLinearLayout>
-#include <qtranslator.h>
-#include <qapplication.h>
+#include <QApplication>
+
#include <hbdataform.h>
#include <hbmainwindow.h>
#include <hbinstance.h>
@@ -42,9 +42,9 @@
#include <hbi18ndef.h>
#include <qdatetime.h>
#include <hbgroupbox.h>
-#include <hbapplication.h>
#include <hbradiobuttonlist.h>
#include <hbnotificationdialog.h>
+#include <hbtranslator.h>
// User includes
#include <CalenLauncher>
@@ -209,6 +209,7 @@
mEditRange(ThisAndAll),
mOriginalEntry(NULL),
mEditedEntry(NULL),
+ mTranslator(new HbTranslator("caleneditor")),
mNewEntry(true),
mDescriptionItemAdded(false),
mIsChild(false),
@@ -219,6 +220,7 @@
// First get the q-pointer.
q_ptr = static_cast<CalenEditor *> (parent);
mMainWindow = NULL;
+ mTranslator->loadCommon();
if (!agendaUtil) {
mAgendaUtil = new AgendaUtil(this);
@@ -227,15 +229,6 @@
mAgendaUtil = agendaUtil;
mOwnsAgendaUtil = false;
}
-
- // Load the translation file and install the editor specific translator
- mTranslator = new QTranslator;
- QString lang = QLocale::system().name();
- QString path = "Z:/resource/qt/translations/";
- mTranslator->load("caleneditor_en_GB", ":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneditor_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
}
/*!
@@ -243,6 +236,10 @@
*/
CalenEditorPrivate::~CalenEditorPrivate()
{
+ if(mOwnsAgendaUtil) {
+ delete mAgendaUtil;
+ mAgendaUtil = NULL;
+ }
if (mOriginalEntry) {
delete mOriginalEntry;
mOriginalEntry = NULL;
@@ -251,12 +248,27 @@
delete mEditedEntry;
mEditedEntry = NULL;
}
+ if(mEditorDocLoader) {
+ delete mEditorDocLoader;
+ mEditorDocLoader = NULL;
+ }
+ if(mReminderField) {
+ delete mReminderField;
+ mReminderField = NULL;
+ }
+ if(mRepeatField) {
+ delete mRepeatField;
+ mRepeatField = NULL;
+ }
+ if(mDataHandler) {
+ delete mDataHandler;
+ mDataHandler = NULL;
+ }
if (mCalenEditorModel) {
delete mCalenEditorModel;
mCalenEditorModel = NULL;
}
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -300,6 +312,9 @@
{
mNewEntry = false;
AgendaEntry entry = mAgendaUtil->fetchById(id);
+ if(entry.isNull()) {
+ return;
+ }
edit(entry, launchCalendar);
}
@@ -320,8 +335,10 @@
entry.setType(AgendaEntry::TypeAppoinment);
}
break;
- case CalenEditor::TypeUnKnown:
default:
+ // What ever be the type of entry, currently editor supports only to
+ // open the entries of TypeAppoinment
+ entry.setType(AgendaEntry::TypeAppoinment);
break;
}
mLaunchCalendar = launchCalendar;
@@ -343,8 +360,10 @@
entry.setType(AgendaEntry::TypeAppoinment);
}
break;
- case CalenEditor::TypeUnKnown:
default:
+ // What ever be the type of entry, currently editor supports only to
+ // open the entries of TypeAppoinment
+ entry.setType(AgendaEntry::TypeAppoinment);
break;
}
mNewEntryDateTime = entry.startTime();
@@ -383,9 +402,9 @@
HbAction *cancelAction =
new HbAction(hbTrId("txt_calendar_button_softkey1_cancel"));
popUp->addAction(cancelAction);
+ connect(editButtonList, SIGNAL(itemSelected(int)), popUp, SLOT(close()));
connect(editButtonList, SIGNAL(itemSelected(int)), this,
SLOT(handleEditOccurence(int)));
- connect(editButtonList, SIGNAL(itemSelected(int)), popUp, SLOT(close()));
connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleCancel()));
// Show the popup
@@ -519,12 +538,21 @@
HbAction *deleteEventAction = qobject_cast<HbAction *> (
mEditorDocLoader->findObject(
CALEN_EDITOR_DELETE_EVENT_ACTION));
+ deleteEventAction->setText(hbTrId("txt_common_menu_delete"));
connect(deleteEventAction, SIGNAL(triggered()), this,
SLOT(showDeleteConfirmationQuery()));
if (!mNewEntry) {
- //TODO: Add the text id based on the entry type Anniversary or meeting
- headingWidget->setHeading(hbTrId("txt_calendar_subhead_event"));
+ AgendaEntry::Type entryType = mEditedEntry->type();
+ if( entryType == AgendaEntry::TypeAppoinment) {
+ headingWidget->setHeading(hbTrId("txt_calendar_subhead_meeting"));
+ }else if(entryType == AgendaEntry::TypeEvent) {
+ //TODO: Add the text id once available
+ headingWidget->setHeading(hbTrId("All-day event"));
+ }else if (entryType == AgendaEntry::TypeTodo) {
+ headingWidget->setHeading(hbTrId("txt_calendar_subhead_to_do"));
+ }
+
}
initModel();
@@ -854,6 +882,18 @@
mAgendaUtil->getNextInstanceTimes(*mEditedEntry,
nextInstanceStartTime,
nextInstanceEndTime);
+
+ // If no instances earlier then set it to 01/01/1900.
+ if (prevInstanceStartTime.isNull()) {
+ prevInstanceStartTime.setDate(QDate(1900, 01, 01));
+ prevInstanceStartTime.setTime(QTime(0, 0, 0));
+ }
+
+ // If no instances later then set it to 30/01/2100.
+ if (nextInstanceEndTime.isNull()) {
+ nextInstanceEndTime.setDate(QDate(2100, 12, 30));
+ nextInstanceEndTime.setTime(QTime(0, 0, 0));
+ }
mViewFromItem->setDateRange(
prevInstanceStartTime.addDays(1).date(),
nextInstanceStartTime.addDays(-1).date());
@@ -862,7 +902,10 @@
// If repeating daily then disable the date fields as
// date cannot be changed
- if (mEditedEntry->repeatRule().type() == AgendaRepeatRule::DailyRule) {
+ if ((prevInstanceEndTime.date().daysTo(
+ mEditedEntry->startTime().date()) == 1) &&
+ (mEditedEntry->endTime().date().daysTo(
+ nextInstanceStartTime.date()) == 1)) {
mViewFromItem->disableFromToDateField();
}
}
@@ -880,10 +923,16 @@
if ((mAllDayCheckBoxItem &&
(mAllDayCheckBoxItem->contentWidgetData("checkState") == Qt::Checked))
|| (!mNewEntry && mEditedEntry->type() == AgendaEntry::TypeEvent)) {
+
+ // For all-day, we need to substratc 1 minute to get the actual end time
+ // as we store all-day as 12.00AM to 12.00 AM next day
+ QDateTime actualEndTime = mEditedEntry->endTime().addSecs(-60);
+ mViewToItem->populateDateTime(actualEndTime, false);
+
// If the all day option is checked, we need to
// disable the time fields
enableFromTotimeFileds(false, mEditedEntry->startTime(),
- mEditedEntry->endTime());
+ actualEndTime);
}
}
/*!
@@ -908,8 +957,15 @@
connect(mViewLocationItem, SIGNAL(locationTextChanged(const QString)),
this, SLOT(handleLocationChange(const QString)));
+
+ connect(mViewLocationItem, SIGNAL(locationTextChanged(const QString, const double, const double)),
+ this, SLOT(handleLocationChange(const QString, const double, const double)));
- mViewLocationItem->populateLocation(mEditedEntry->location());
+ mViewLocationItem->populateLocation(mEditedEntry->location());
+
+ connect(mViewLocationItem, SIGNAL(locationEditingFinished()),
+ this, SLOT(handleLocationEditingFinished()));
+
}
/*!
Save the changed start time of the event.
@@ -1133,7 +1189,9 @@
void CalenEditorPrivate::handleSubjectChange(const QString subject)
{
mEditedEntry->setSummary(subject);
- addDiscardAction();
+ if(!mNewEntry ){
+ addDiscardAction();
+ }
}
/*!
@@ -1180,6 +1238,12 @@
// Update Start/End Times with Edited entry values
enableFromTotimeFileds(true, mEditedEntry->startTime(),
mEditedEntry->endTime());
+ // If original entry was an All-day, then we need to save the date that
+ // is shown on the "To" date push button
+ if (mOriginalEntry->type() == AgendaEntry::TypeEvent) {
+ mEditedEntry->setStartAndEndTime(mViewFromItem->getDateTime(),
+ mViewToItem->getDateTime());
+ }
int index;
if (mIsAllDayItemAdded) {
index = ReminderTimeForAllDayItem;
@@ -1190,7 +1254,10 @@
mReminderField->setReminderChoices();
updateReminderChoices();
}
- addDiscardAction();
+
+ if(!mNewEntry){
+ addDiscardAction();
+ }
}
/*!
@@ -1200,9 +1267,75 @@
void CalenEditorPrivate::handleLocationChange(const QString location)
{
mEditedEntry->setLocation(location);
+ if(!mNewEntry){
+ addDiscardAction();
+ }
+}
+
+
+/*!
+ Triggered when the location editor is being edited.
+ \param subject Contains the string displayed in the subject item.
+ */
+void CalenEditorPrivate::handleLocationChange(const QString location,
+ const double /*geoLatitude*/, const double /*geoLongitude*/)
+{
+ mEditedEntry->setLocation(location);
+ mEditedEntry->clearGeoValue();
addDiscardAction();
}
+/*!
+ * Handles the completion of location editing
+ */
+void CalenEditorPrivate::handleLocationEditingFinished()
+{
+ if ( !mOriginalEntry->location().isEmpty() )
+ {
+ AgendaGeoValue entryGeoValue =mAgendaUtil->fetchById(mEditedEntry->id()).geoValue();
+ if ( !entryGeoValue.isNull() && (mEditedEntry->location()!=mOriginalEntry->location()) )
+ {
+
+ mEditedEntry->setGeoValue(entryGeoValue);
+ HbMessageBox* confirmationQuery = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+
+ confirmationQuery->setDismissPolicy(HbDialog::NoDismiss);
+ confirmationQuery->setTimeout(HbDialog::NoTimeout);
+ confirmationQuery->setIconVisible(true);
+
+ QString displayText;
+ displayText = displayText.append("Location changed. Keep existing location on Map?");
+
+ confirmationQuery->setText(displayText);
+
+ // Remove the default actions.
+ QList<QAction *> defaultActions = confirmationQuery->actions();
+ for (int index=0;index<defaultActions.count();index++)
+ {
+ confirmationQuery->removeAction(defaultActions[index]);
+ }
+
+ defaultActions.clear();
+
+ confirmationQuery->addAction(new HbAction("Yes"));
+ confirmationQuery->addAction(new HbAction("No"));
+ confirmationQuery->open(this, SLOT(selectEditingFinishedAction(HbAction*)));
+ }
+ }
+}
+
+/*!
+ * Handles the editing finished action.
+ */
+void CalenEditorPrivate::selectEditingFinishedAction(HbAction* action)
+{
+ HbMessageBox* dlg = static_cast<HbMessageBox*>(sender());
+
+ if (action == dlg->actions().at(1))
+ {
+ mEditedEntry->clearGeoValue();
+ }
+}
/*!
Triggered when the description editor is being edited.
@@ -1211,7 +1344,9 @@
void CalenEditorPrivate::handleDescriptionChange(const QString description)
{
mEditedEntry->setDescription(description);
- addDiscardAction();
+ if(!mNewEntry){
+ addDiscardAction();
+ }
}
/*!
@@ -1230,7 +1365,7 @@
if (mLaunchCalendar) {
CalenLauncher* launcher = new CalenLauncher(this);
QDateTime startTime = mEditedEntry->startTime();
- launcher->launchCalendarApp(CalenLauncher::DayView, startTime);
+ launcher->launchCalendarApp(CalenLauncher::AgendaView, startTime);
// connect to the error signal
connect(launcher, SIGNAL(calendarLaunchFailed(int)), this,
@@ -1385,8 +1520,12 @@
if (mIsChild && (mEditRange == ThisOnly)) {
// Add the entry
mAgendaUtil->updateEntry(*mEditedEntry, true);
- // TODO: Add the text id based on meeting or anniversary
- HbNotificationDialog::launchDialog(hbTrId("Event updated"));
+ // TODO: Add the text id once available
+ if(mEditedEntry->type() == AgendaEntry::TypeAppoinment) {
+ HbNotificationDialog::launchDialog(hbTrId("Meeting updated"));
+ }else if(mEditedEntry->type() == AgendaEntry::TypeEvent) {
+ HbNotificationDialog::launchDialog(hbTrId("All day event updated"));
+ }
emit q_ptr->entrySaved();
return true;
} else if ((mEditRange == ThisOnly)) {
@@ -1401,22 +1540,31 @@
if (!handleAllDayToSave()) {
if (mNewEntry) {
mAgendaUtil->addEntry(*mEditedEntry);
- } else if (mEditRange == ThisAndAll) {
+ } else if (mEditRange == ThisAndAll && mOriginalEntry->isRepeating()) {
mAgendaUtil->storeRepeatingEntry(*mEditedEntry, true);
} else if (!mIsChild && (mEditRange == ThisOnly)) {
// Create the new exception
- mAgendaUtil->createException(*mEditedEntry);
+ mAgendaUtil->createException(*mEditedEntry,
+ mOriginalEntry->startTime());
} else {
// Normal entry updation
mAgendaUtil->updateEntry(*mEditedEntry, false);
}
}
if (mNewEntry) {
- // TODO: Add the text id based on meeting or anniversary
- HbNotificationDialog::launchDialog(hbTrId("New Event saved"));
+ // TODO: Add the text id once available
+ if(mEditedEntry->type() == AgendaEntry::TypeAppoinment) {
+ HbNotificationDialog::launchDialog(hbTrId("New meeting saved"));
+ } else if(mEditedEntry->type() == AgendaEntry::TypeEvent) {
+ HbNotificationDialog::launchDialog(hbTrId("New all-day saved"));
+ }
} else {
- // TODO: Add the text id based on meeting or anniversary
- HbNotificationDialog::launchDialog(hbTrId("Event updated"));
+ // TODO: Add the text id once available
+ if(mEditedEntry->type() == AgendaEntry::TypeAppoinment) {
+ HbNotificationDialog::launchDialog(hbTrId("Meeting updated"));
+ } else if(mEditedEntry->type() == AgendaEntry::TypeEvent) {
+ HbNotificationDialog::launchDialog(hbTrId("All day event updated"));
+ }
}
emit q_ptr->entrySaved();
} else if (error) {
@@ -1470,10 +1618,10 @@
QDateTime tempSartTime =
CalenDateUtils::beginningOfDay(mEditedEntry->startTime());
- // Set EndTime of AllDay event to 23:59:59
- QDateTime tempEndTime = mEditedEntry->endTime();
+ // Set EndTime of AllDay event to 00:00:00 of next day
+ QDateTime tempEndTime = mEditedEntry->endTime().addDays(1);
QTime tempEndQTime = tempEndTime.time();
- tempEndQTime.setHMS(23, 59, 59);
+ tempEndQTime.setHMS(0, 0, 0);
tempEndTime.setTime(tempEndQTime);
if (mNewEntry && (mAllDayCheckBoxItem->contentWidgetData("checkState")
@@ -1491,19 +1639,43 @@
// Clone the entry to AllDayEntry, Delete old entry from Database
mAgendaUtil->cloneEntry(*mEditedEntry, AgendaEntry::TypeEvent);
- mAgendaUtil->deleteEntry(mEditedEntry->id());
-
+ // For later reference for the notification popup
+ mEditedEntry->setType(AgendaEntry::TypeEvent);
return true;
- } else if ((mAllDayCheckBoxItem->contentWidgetData("checkState")
- != Qt::Checked) && (mEditedEntry->type()
- != AgendaEntry::TypeAppoinment)) {
- // Editing exissting AllDayentry, and Alldat Box is Not-Checked
- // Clone the entry to MeetingEntry, Delete old entry from Database
- mAgendaUtil->cloneEntry(*mEditedEntry, AgendaEntry::TypeAppoinment);
- mAgendaUtil->deleteEntry(mEditedEntry->id());
-
- return true;
- }
+ } else if (mAllDayCheckBoxItem->contentWidgetData("checkState")
+ != Qt::Checked) {
+ if (mEditedEntry->type() != AgendaEntry::TypeAppoinment) {
+ // Editing existing AllDayentry, and Alldat Box is Not-Checked
+ // Clone the entry to MeetingEntry, Delete old entry from Database
+ mAgendaUtil->cloneEntry(*mEditedEntry, AgendaEntry::TypeAppoinment);
+ // For later reference for the notification popup
+ mEditedEntry->setType(AgendaEntry::TypeAppoinment);
+ return true;
+ }
+ // Check if the duration of the meeting is matching the all-day criteria
+ // if yes, then we need to store it as all-day instead of normal meeting
+ else if (mEditedEntry->startTime() == CalenDateUtils::beginningOfDay(mEditedEntry->startTime())) {
+ // Get the end time and see if it is at the beginning of the end date day
+ if (mEditedEntry->endTime() == CalenDateUtils::beginningOfDay(mEditedEntry->endTime())) {
+ // Store it as all-day
+ mEditedEntry->setType(AgendaEntry::TypeEvent);
+ // Check if this was an all-day earlier and now user has changed it like that
+ // or it is a new entry
+ if (mOriginalEntry->type() == AgendaEntry::TypeEvent ||
+ mNewEntry) {
+ return false;
+ } else {
+ // It was a meeting
+ // Clone the entry to AllDayEntry, Delete old entry from Database
+ mEditedEntry->setStartAndEndTime(tempSartTime, tempEndTime);
+ mAgendaUtil->cloneEntry(*mEditedEntry, AgendaEntry::TypeEvent);
+ // For later reference for the notification popup
+ mEditedEntry->setType(AgendaEntry::TypeEvent);
+ return true;
+ }
+ }
+ }
+ }
return false;
}
--- a/calendarui/caleneditor/src/caleneditorcustomitem.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/src/caleneditorcustomitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -55,7 +55,13 @@
\param parent The parent object.
*/
CalenEditorCustomItem::CalenEditorCustomItem(QGraphicsItem *parent)
-:HbDataFormViewItem(parent)
+:HbDataFormViewItem(parent),
+ mPushButtonTime(NULL),
+ mPushButtonDate(NULL),
+ mRepeatUntilWidget(NULL),
+ mReminderTimeWidget(NULL),
+ mDatePicker(NULL),
+ mTimePicker(NULL)
{
mMinDate = CalenDateUtils::minTime().date();
mMaxDate = CalenDateUtils::maxTime().date();
@@ -155,6 +161,10 @@
SLOT(launchLocationPicker()));
connect(mLocationLineEdit, SIGNAL(textChanged(const QString)),
this, SLOT(handleLocationTextChange(const QString)));
+
+ connect(mLocationLineEdit, SIGNAL(editingFinished()),
+ this, SLOT(handleEditingFinished()));
+
return widgetLocation;
}
@@ -213,7 +223,7 @@
locationString.append(',');
}
locationString.append(selectedLocation.mCountry);
- emit locationTextChanged(locationString);
+ emit locationTextChanged(locationString, selectedLocation.mLatitude, selectedLocation.mLongitude);
mLocationLineEdit->setText(locationString );
}
}
@@ -284,6 +294,14 @@
}
/*!
+ Handles the location editing finished
+ */
+void CalenEditorCustomItem::handleEditingFinished()
+{
+ emit locationEditingFinished();
+}
+
+/*!
Launches the date picker
*/
void CalenEditorCustomItem::handleDate()
@@ -309,12 +327,12 @@
mDatePicker = new HbDateTimePicker(mDate, popUp);
mDatePicker->setMinimumDate(mMinDate);
mDatePicker->setMaximumDate(mMaxDate);
-
+ mDatePicker->setDate(mDate);
popUp->setContentWidget(mDatePicker);
- HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"), popUp);
popUp->addAction(okAction);
connect(okAction, SIGNAL(triggered()), this, SLOT(saveDate()));
- popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel")));
+ popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"), popUp));
popUp->open();
}
@@ -351,7 +369,7 @@
mTimePicker->setTime(mTime);
popUp->setContentWidget(mTimePicker);
- HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"), popUp);
popUp->addAction(okAction);
connect(okAction, SIGNAL(triggered()), this, SLOT(saveTime()));
popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"), popUp));
@@ -397,6 +415,9 @@
// Set FromTime in Editor
mPushButtonTime->setText(mLocale.format(fromDateTime.time(),r_qtn_time_usual_with_zero));
+
+ // Store the time
+ mTime = fromDateTime.time();
}
/*!
@@ -419,6 +440,9 @@
// Set ToTime in Editor
mPushButtonTime->setText(mLocale.format(
toDateTime.time(),r_qtn_time_usual_with_zero));
+
+ // Store the time
+ mTime = toDateTime.time();
}
/*!
@@ -463,6 +487,11 @@
}
}
+QDateTime CalenEditorCustomItem::getDateTime()
+{
+ return QDateTime(mDate, mTime);
+}
+
Q_IMPLEMENT_USER_METATYPE(QLocationPickerItem)
// End of file --Don't remove this.
--- a/calendarui/caleneditor/src/caleneditorreminderfield.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/src/caleneditorreminderfield.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -58,7 +58,7 @@
mReminderItem = new HbDataFormModelItem();
mReminderItem->setType(HbDataFormModelItem::ComboBoxItem);
mReminderItem->setData(HbDataFormModelItem::LabelRole,
- hbTrId("txt_calendar_setlabel_alarm"));
+ hbTrId("txt_calendar_setlabel_reminder"));
// Add it to the model
mCalenEditorModel->appendDataFormItem(mReminderItem,
mCalenEditorModel->invisibleRootItem());
@@ -69,7 +69,9 @@
*/
CalenEditorReminderField::~CalenEditorReminderField()
{
- // Nothing Yet
+ if(mReminderHash.count()) {
+ mReminderHash.clear();
+ }
}
/*!
@@ -79,25 +81,20 @@
{
// Create the reminder choices
QStringList reminderChoices;
- reminderChoices << hbTrId("txt_calendar_setlabel_alarm_val_off")
- << hbTrId("txt_calendar_setlabel_alarm_val_before_ln_minutes", 5)
- << hbTrId("txt_calendar_setlabel_alarm_val_before_ln_minutes", 10)
- << hbTrId("txt_calendar_setlabel_alarm_val_before_ln_minutes", 15)
- << hbTrId("txt_calendar_setlabel_alarm_val_before_ln_minutes", 30)
- << hbTrId("txt_calendar_setlabel_alarm_val_before_ln_hours", 1)
- << hbTrId("txt_calendar_setlabel_alarm_val_before_ln_hours", 2);
+ reminderChoices << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_at_the_start")
+ << hbTrId("txt_calendar_setlabel_reminder_val_15_minutes_befo")
+ << hbTrId("txt_calendar_setlabel_reminder_val_30_minutes_befo")
+ << hbTrId("txt_calendar_setlabel_reminder_val_1_hour_before");
mReminderItem->setContentWidgetData(QString("items"), reminderChoices);
// Build the hash map for the reminder.
- mReminderHash[0] = 0; // OFF.
- mReminderHash[1] = 5;
- mReminderHash[2] = 10;
- mReminderHash[3] = 15;
- mReminderHash[4] = 30;
- mReminderHash[5] = 60;
- mReminderHash[6] = 120;
-
+ mReminderHash[0] = -1; // OFF.
+ mReminderHash[1] = 0;
+ mReminderHash[2] = 15;
+ mReminderHash[3] = 30;
+ mReminderHash[4] = 60;
mReminderItem->setEnabled(true);
}
@@ -153,9 +150,9 @@
// Set the default reminder value to 15 minutes
if (newEntry) {
if (!pastEvent) {
- mReminderItem->setContentWidgetData("currentIndex", 3);
+ mReminderItem->setContentWidgetData("currentIndex", 2);
// Save the reminder alarm for the entry
- reminder.setTimeOffset(mReminderHash.value(3));
+ reminder.setTimeOffset(mReminderHash.value(2));
reminder.setAlarmSoundName(QString(" "));
// Set the reminder to the entry as well as original entry.
mCalenEditor->editedEntry()->setAlarm(reminder);
@@ -192,10 +189,10 @@
}
}
QStringList reminderChoicesForAllDay;
- reminderChoicesForAllDay << hbTrId("off")
- << hbTrId("On event day")
- << hbTrId("1 day before")
- << hbTrId("2 days before");
+ reminderChoicesForAllDay << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day")
+ << hbTrId("txt_calendar_setlabel_reminder_val_1_day_before")
+ << hbTrId("txt_calendar_setlabel_reminder_val_2_days_before");
mReminderItem->setContentWidgetData(QString("items"),
reminderChoicesForAllDay);
QTime referenceTime(0, 0, 0);
@@ -240,10 +237,10 @@
}
// Check whether all day event or not and store appropriately.
if (!mCalenEditor->isAllDayEvent()) {
- // If value for the index in hash table is 0 i.e reminder is "OFF",
+ // If value for the index in hash table is -1 i.e reminder is "OFF",
// then set the default constructed reminder to
// the entry which is Null.
- if (!mReminderHash.value(index)) {
+ if (mReminderHash.value(index) < 0) {
// Construct the default alarm which is NULL
reminder = AgendaAlarm();
} else {
@@ -293,7 +290,9 @@
}
// Set the reminder to the entry.
mCalenEditor->editedEntry()->setAlarm(reminder);
- mCalenEditor->addDiscardAction();
+ if(!mCalenEditor->isNewEntry()) {
+ mCalenEditor->addDiscardAction();
+ }
}
/*!
@@ -312,7 +311,7 @@
{
// Create the remindar choices
QStringList reminderChoices;
- reminderChoices << hbTrId("txt_calendar_setlabel_alarm_val_off");
+ reminderChoices << hbTrId("txt_calendar_setlabel_reminder_val_off");
mReminderItem->setContentWidgetData(QString("items"), reminderChoices);
mReminderItem->setEnabled(false);
}
@@ -361,23 +360,25 @@
if (referenceDate < QDate::currentDate() ||
referenceDate == QDate::currentDate()) {
// Set reminder off for past event.
- reminderChoicesForAllDay << hbTrId("off");
+ reminderChoicesForAllDay << hbTrId("txt_calendar_setlabel_reminder_val_off");
mReminderItem->setContentWidgetData(QString("items"),
reminderChoicesForAllDay);
mReminderItem->setEnabled(false);
removeReminderTimeField();
} else if (theDayAfterTomorrow < referenceDate ||
theDayAfterTomorrow == referenceDate) {
- reminderChoicesForAllDay << hbTrId("off")
- << hbTrId("On event day")
- << hbTrId("1 day before")
- << hbTrId("2 days before");
+ reminderChoicesForAllDay
+ << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day")
+ << hbTrId("txt_calendar_setlabel_reminder_val_1_day_before")
+ << hbTrId("txt_calendar_setlabel_reminder_val_2_days_before");
mReminderItem->setEnabled(true);
mCustomReminderTimeItem->setEnabled(true);
} else {
- reminderChoicesForAllDay << hbTrId("off")
- << hbTrId("On event day")
- << hbTrId("1 day before");
+ reminderChoicesForAllDay
+ << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day")
+ << hbTrId("txt_calendar_setlabel_reminder_val_1_day_before");
mReminderItem->setEnabled(true);
mCustomReminderTimeItem->setEnabled(true);
}
@@ -403,7 +404,7 @@
mCustomReminderTimeItem = mCalenEditorModel->insertDataFormItem(
index,
itemType,
- QString(hbTrId("Reminder Time")),
+ QString(hbTrId("txt_calendar_setlabel_reminder_time")),
mCalenEditorModel->invisibleRootItem());
if (currentReminderIndex() != 1){
mReminderTimeForAllDay.setHMS(18,0,0,0);
@@ -436,13 +437,13 @@
{
mReminderTimeAdded = false;
if (mCustomReminderTimeItem) {
- QModelIndex reminderIndex =
- mCalenEditorModel->indexFromItem(mCustomReminderTimeItem);
- mCalenEditorModel->removeItem(
- mCalenEditorModel->index(
- reminderIndex.row(), 0));
- mCustomReminderTimeItem = NULL;
- }
+ QModelIndex reminderIndex =
+ mCalenEditorModel->indexFromItem(mCustomReminderTimeItem);
+ mCalenEditorModel->removeItem(
+ mCalenEditorModel->index(
+ reminderIndex.row(), 0));
+ mCustomReminderTimeItem = NULL;
+ }
}
/*!
--- a/calendarui/caleneditor/src/caleneditorrepeatfield.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/caleneditor/src/caleneditorrepeatfield.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -33,6 +33,9 @@
#include "caleneditorrepeatfield.h"
#include "caleneditorcustomitem.h"
+// Constants
+const int userRole = Qt::UserRole + 100;
+
/*!
\class CalenEditorRepeatField
*/
@@ -71,8 +74,7 @@
QStringList repeatChoices;
repeatChoices << hbTrId("txt_calendar_setlabel_repeat_val_only_once")
<< hbTrId("txt_calendar_setlabel_repeat_val_daily")
- // TODO : add text ID for workdays
- << hbTrId("Workdays")
+ << hbTrId("txt_calendar_setlabel_repeat_val_workdays")
<< hbTrId("txt_calendar_setlabel_repeat_val_weekly")
<< hbTrId("txt_calendar_setlabel_repeat_val_fortnightly")
<< hbTrId("txt_calendar_setlabel_repeat_val_monthly")
@@ -126,16 +128,16 @@
// Set the user roles for the combobox items so that we depend on these
// roles to identify the correct repeat type when repeat choices are
// dynamically removed or added
- mRepeatComboBox->setItemData(RepeatOnce, RepeatOnce, Qt::UserRole+100);
- mRepeatComboBox->setItemData(RepeatDaily, RepeatDaily, Qt::UserRole+100);
+ mRepeatComboBox->setItemData(RepeatOnce, RepeatOnce, userRole);
+ mRepeatComboBox->setItemData(RepeatDaily, RepeatDaily, userRole);
mRepeatComboBox->setItemData(RepeatWorkdays,
- RepeatWorkdays, Qt::UserRole+100);
- mRepeatComboBox->setItemData(RepeatWeekly, RepeatWeekly, Qt::UserRole+100);
+ RepeatWorkdays, userRole);
+ mRepeatComboBox->setItemData(RepeatWeekly, RepeatWeekly, userRole);
mRepeatComboBox->setItemData(RepeatBiWeekly,
- RepeatBiWeekly, Qt::UserRole+100);
+ RepeatBiWeekly, userRole);
mRepeatComboBox->setItemData(RepeatMonthly,
- RepeatMonthly, Qt::UserRole+100);
- mRepeatComboBox->setItemData(RepeatYearly, RepeatYearly, Qt::UserRole+100);
+ RepeatMonthly, userRole);
+ mRepeatComboBox->setItemData(RepeatYearly, RepeatYearly, userRole);
if (mCalenEditor->editedEntry()->isRepeating()) {
switch (mCalenEditor->editedEntry()->repeatRule().type()) {
@@ -197,9 +199,9 @@
mIsWorkdays = false;
HbExtendedLocale locale = HbExtendedLocale::system();
- // Get the user role w ehave set for this index
- QVariant userRole = mRepeatComboBox->itemData(index, Qt::UserRole + 100);
- int value = userRole.toInt();
+ // Get the user role we have set for this index
+ QVariant role = mRepeatComboBox->itemData(index, userRole);
+ int value = role.toInt();
switch (value) {
case 1: {
if (!mRepeatUntilItemAdded) {
@@ -296,7 +298,9 @@
}
break;
}
- mCalenEditor->addDiscardAction();
+ if(!mCalenEditor->isNewEntry()) {
+ mCalenEditor->addDiscardAction();
+ }
mCalenEditor->updateReminderChoices();
}
@@ -433,6 +437,9 @@
*/
void CalenEditorRepeatField::updateRepeatChoices()
{
+ if (!mRepeatComboBox) {
+ return;
+ }
// Clear all the choices and add it again. If we dont do it
// as user would have changed the end times many times and we would have
// deleted repeat options depending upon that
@@ -443,8 +450,7 @@
QStringList repeatChoices;
repeatChoices << hbTrId("txt_calendar_setlabel_repeat_val_only_once")
<< hbTrId("txt_calendar_setlabel_repeat_val_daily")
- // TODO : add text ID for workdays
- << hbTrId("Workdays")
+ << hbTrId("txt_calendar_setlabel_repeat_val_workdays")
<< hbTrId("txt_calendar_setlabel_repeat_val_weekly")
<< hbTrId("txt_calendar_setlabel_repeat_val_fortnightly")
<< hbTrId("txt_calendar_setlabel_repeat_val_monthly")
@@ -453,19 +459,19 @@
// Set the user roles for the combobox items so that we depend on these
// roles to identify the correct repeat type when repeat choices are
// dynamically removed or added
- mRepeatComboBox->setItemData(RepeatOnce, RepeatOnce, Qt::UserRole + 100);
+ mRepeatComboBox->setItemData(RepeatOnce, RepeatOnce, userRole);
mRepeatComboBox->setItemData(RepeatDaily, RepeatDaily,
- Qt::UserRole + 100);
+ userRole);
mRepeatComboBox->setItemData(RepeatWorkdays,
- RepeatWorkdays, Qt::UserRole+100);
+ RepeatWorkdays, userRole);
mRepeatComboBox->setItemData(RepeatWeekly, RepeatWeekly,
- Qt::UserRole + 100);
+ userRole);
mRepeatComboBox->setItemData(RepeatBiWeekly, RepeatBiWeekly,
- Qt::UserRole + 100);
+ userRole);
mRepeatComboBox->setItemData(RepeatMonthly, RepeatMonthly,
- Qt::UserRole + 100);
+ userRole);
mRepeatComboBox->setItemData(RepeatYearly, RepeatYearly,
- Qt::UserRole + 100);
+ userRole);
int totalCount = mRepeatComboBox->count();
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenlauncher/bwins/calenlauncheru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,17 @@
+EXPORTS
+ ?staticMetaObject@CalenLauncher@@2UQMetaObject@@B @ 1 NONAME ; struct QMetaObject const CalenLauncher::staticMetaObject
+ ?launchCalendarApp@CalenLauncher@@QAEXW4CalenView@1@AAVQDateTime@@_N@Z @ 2 NONAME ; void CalenLauncher::launchCalendarApp(enum CalenLauncher::CalenView, class QDateTime &, bool)
+ ?calendarLaunchFailed@CalenLauncher@@IAEXH@Z @ 3 NONAME ; void CalenLauncher::calendarLaunchFailed(int)
+ ??1CalenLauncher@@UAE@XZ @ 4 NONAME ; CalenLauncher::~CalenLauncher(void)
+ ??_ECalenLauncher@@UAE@I@Z @ 5 NONAME ; CalenLauncher::~CalenLauncher(unsigned int)
+ ?tr@CalenLauncher@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString CalenLauncher::tr(char const *, char const *, int)
+ ?trUtf8@CalenLauncher@@SA?AVQString@@PBD0@Z @ 7 NONAME ; class QString CalenLauncher::trUtf8(char const *, char const *)
+ ?tr@CalenLauncher@@SA?AVQString@@PBD0@Z @ 8 NONAME ; class QString CalenLauncher::tr(char const *, char const *)
+ ?qt_metacast@CalenLauncher@@UAEPAXPBD@Z @ 9 NONAME ; void * CalenLauncher::qt_metacast(char const *)
+ ?getStaticMetaObject@CalenLauncher@@SAABUQMetaObject@@XZ @ 10 NONAME ; struct QMetaObject const & CalenLauncher::getStaticMetaObject(void)
+ ?handleError@CalenLauncher@@QAEXH@Z @ 11 NONAME ; void CalenLauncher::handleError(int)
+ ?trUtf8@CalenLauncher@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString CalenLauncher::trUtf8(char const *, char const *, int)
+ ??0CalenLauncher@@QAE@PAVQObject@@@Z @ 13 NONAME ; CalenLauncher::CalenLauncher(class QObject *)
+ ?metaObject@CalenLauncher@@UBEPBUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const * CalenLauncher::metaObject(void) const
+ ?qt_metacall@CalenLauncher@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int CalenLauncher::qt_metacall(enum QMetaObject::Call, int, void * *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenlauncher/eabi/calenlauncheru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,17 @@
+EXPORTS
+ _ZN13CalenLauncher11handleErrorEi @ 1 NONAME
+ _ZN13CalenLauncher11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN13CalenLauncher11qt_metacastEPKc @ 3 NONAME
+ _ZN13CalenLauncher16staticMetaObjectE @ 4 NONAME DATA 16
+ _ZN13CalenLauncher17launchCalendarAppENS_9CalenViewER9QDateTimeb @ 5 NONAME
+ _ZN13CalenLauncher19getStaticMetaObjectEv @ 6 NONAME
+ _ZN13CalenLauncher20calendarLaunchFailedEi @ 7 NONAME
+ _ZN13CalenLauncherC1EP7QObject @ 8 NONAME
+ _ZN13CalenLauncherC2EP7QObject @ 9 NONAME
+ _ZN13CalenLauncherD0Ev @ 10 NONAME
+ _ZN13CalenLauncherD1Ev @ 11 NONAME
+ _ZN13CalenLauncherD2Ev @ 12 NONAME
+ _ZNK13CalenLauncher10metaObjectEv @ 13 NONAME
+ _ZTI13CalenLauncher @ 14 NONAME
+ _ZTV13CalenLauncher @ 15 NONAME
+
--- a/calendarui/calenlauncher/inc/calenlauncher.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/calenlauncher/inc/calenlauncher.h Thu Jul 22 16:32:51 2010 +0100
@@ -29,7 +29,7 @@
public:
enum CalenView{
MonthView = 0,
- DayView
+ AgendaView
};
CalenLauncher(QObject* parent = 0);
~CalenLauncher();
--- a/calendarui/calenplugins/agendaeventviewerplugin/agendaeventviewerplugin.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/calenplugins/agendaeventviewerplugin/agendaeventviewerplugin.pro Thu Jul 22 16:32:51 2010 +0100
@@ -39,12 +39,11 @@
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
TARGET.UID3 = 0x2002E6A0
-
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
LIBS += -lagendainterface \
-lagendaeventviewer
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
load(data_caging_paths)
# plugin stub deployment
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/calenviewerservice.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,68 @@
+#
+# Copyright (c) 2008 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: This is the project specification file for the calenviewerservice exe.
+#
+
+TEMPLATE = app
+TARGET = calenviewerservice
+
+DEPENDPATH += . \
+ ./inc \
+ ./src \
+ ../inc
+
+INCLUDEPATH += . \
+ ./inc \
+ ../inc \
+ ./traces
+
+CONFIG += hb
+
+symbian: {
+ LIBS += -lagendaeventviewer \
+ -lxqservice \
+ -lxqserviceutil \
+ -lagendainterface \
+ -lagendaeventviewer
+
+ TARGET.CAPABILITY = All -TCB
+ TARGET.UID3 = 0x20031594
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+}
+
+# Input
+HEADERS += calenviewerservice.h
+
+SOURCES += calenviewerservice.cpp \
+ main.cpp
+
+CONFIG += service
+SERVICE.FILE = data/calenviewerservice_conf.xml
+SERVICE.OPTIONS += embeddable
+SERVICE.OPTIONS += hidden
+
+RSS_RULES += \
+ "datatype_list = " \
+ " {" \
+ " DATATYPE" \
+ " {" \
+ " priority = EDataTypePriorityHigh;" \
+ " type = \"text/x-vCalendar\";" \
+ " }," \
+ " DATATYPE" \
+ " {" \
+ " priority = EDataTypePriorityHigh;" \
+ " type = \"text/calendar\";" \
+ " }" \
+ " };" \
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/data/calenviewerservice_conf.xml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8" ?>
+<service>
+ <name>calenviewerservice</name>
+ <filepath>No path</filepath>
+ <description>vCal/ICal viewer</description>
+ <interface>
+ <name>com.nokia.symbian.IFileView</name>
+ <version>1.0</version>
+ <description>Interface for showing Files</description>
+ </interface>
+</service>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/inc/calenviewerservice.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,57 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+#ifndef __CALEN_VIEWER_SERVICE_H__
+#define __CALEN_VIEWER_SERVICE_H__
+
+// System includes
+#include <xqserviceprovider.h>
+#include <xqsharablefile.h>
+
+// Forward declarations
+class AgendaUtil;
+class AgendaEventViewer;
+
+class CalenViewerService : public XQServiceProvider
+{
+ Q_OBJECT
+public:
+ CalenViewerService(QObject *parent = 0);
+ ~CalenViewerService();
+
+public slots:
+ bool view(QString file);
+ bool view(XQSharableFile file);
+
+private slots:
+ void entryViewReady(int error);
+ void handleClientDisconnected();
+
+private:
+ void viewEntry();
+ void complete(bool ok);
+
+private:
+ QString mFileName;
+ AgendaUtil *mAgendaUtil;
+ AgendaEventViewer *mViewer;
+ bool mEntryViewReady;
+ bool mWaitingForEntryViewReady;
+ int mAsyncReqIndex;
+};
+
+#endif // __CALEN_VIEWER_SERVICE_H__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/src/calenviewerservice.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,223 @@
+/*
+* Copyright (c) 2010 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:
+*
+*/
+
+// System includes
+#include <QFile>
+#include <QCoreApplication>
+#include <agendautil.h>
+
+// User includes
+#include "calenviewerservice.h"
+#include "agendaeventviewer.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "calenviewerserviceTraces.h"
+#endif
+
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::CalenViewerService
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+CalenViewerService::CalenViewerService(QObject* parent) :
+ XQServiceProvider(QLatin1String("calenviewerservice.com.nokia.symbian.IFileView"), parent),
+ mFileName(0),
+ mViewer(NULL),
+ mEntryViewReady(false),
+ mWaitingForEntryViewReady(false),
+ mAsyncReqIndex(0)
+{
+ OstTraceFunctionEntry0( CALENVIEWERSERVICE_CALENVIEWERSERVICE_ENTRY );
+
+ // Construct the agenda util object
+ mAgendaUtil = new AgendaUtil();
+ connect(mAgendaUtil, SIGNAL(entryViewCreationCompleted(int)), this, SLOT(entryViewReady(int)));
+ connect(this, SIGNAL(clientDisconnected()), this, SLOT(handleClientDisconnected()));
+
+ publishAll();
+
+ OstTraceFunctionExit0( CALENVIEWERSERVICE_CALENVIEWERSERVICE_EXIT );
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::~CalenViewerService
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+CalenViewerService::~CalenViewerService()
+{
+ OstTraceFunctionEntry0( DUP1_CALENVIEWERSERVICE_CALENVIEWERSERVICE_ENTRY );
+
+ // Cleanup
+ if (mAgendaUtil) {
+ delete mAgendaUtil;
+ mAgendaUtil = NULL;
+ }
+ if (mViewer) {
+ mViewer->deleteLater();
+ mViewer = NULL;
+ }
+
+ OstTraceFunctionExit0( DUP1_CALENVIEWERSERVICE_CALENVIEWERSERVICE_EXIT );
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::view
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+bool CalenViewerService::view(QString file)
+{
+ OstTraceFunctionEntry0( CALENVIEWERSERVICE_VIEW_ENTRY );
+
+ // Set the request as asynchronous
+ mAsyncReqIndex = setCurrentRequestAsync();
+
+ // Store the file name
+ mFileName = file;
+
+ if (mEntryViewReady) {
+ // View the entry only after the entry view
+ // is completely instantiated
+ viewEntry();
+ } else {
+ OstTrace0( TRACE_NORMAL, DUP1_CALENVIEWERSERVICE_VIEW, "Entry view not ready" );
+ // Mark the flag to indicate that after the
+ // entry view is ready, the file must be opened
+ mWaitingForEntryViewReady = true;
+ }
+
+ OstTraceFunctionExit0( CALENVIEWERSERVICE_VIEW_EXIT );
+
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::view
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+bool CalenViewerService::view(XQSharableFile sf)
+{
+ OstTraceFunctionEntry0( DUP1_CALENVIEWERSERVICE_VIEW_ENTRY );
+
+ Q_UNUSED(sf);
+
+ OstTrace0( TRACE_NORMAL, DUP2_CALENVIEWERSERVICE_VIEW, "Functionality not yet present" );
+
+ // Set the request as asynchronous
+ mAsyncReqIndex = setCurrentRequestAsync();
+
+ // TODO: Convert RFile to QFile handle and view
+ // Support for this has to come from Qt
+ complete(false);
+
+ OstTraceFunctionExit0( DUP1_CALENVIEWERSERVICE_VIEW_EXIT );
+
+ return true;
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::entryViewReady
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenViewerService::entryViewReady(int error)
+{
+ OstTraceFunctionEntry0( CALENVIEWERSERVICE_ENTRYVIEWREADY_ENTRY );
+
+ Q_UNUSED(error);
+
+ mEntryViewReady = true;
+
+ // Now open the file for viewing
+ if (mWaitingForEntryViewReady) {
+ // If control comes here, it means that
+ // the request to view the file has come before
+ // the entry view is ready. So view the entry now
+ viewEntry();
+ }
+
+ OstTraceFunctionExit0( CALENVIEWERSERVICE_ENTRYVIEWREADY_EXIT );
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::handleClientDisconnected
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenViewerService::handleClientDisconnected()
+{
+ OstTraceFunctionEntry0( CALENVIEWERSERVICE_HANDLECLIENTDISCONNECTED_ENTRY );
+
+ // Just exit the application
+ qApp->quit();
+
+ OstTraceFunctionExit0( CALENVIEWERSERVICE_HANDLECLIENTDISCONNECTED_EXIT );
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::viewEntry
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenViewerService::viewEntry()
+{
+ OstTraceFunctionEntry0( CALENVIEWERSERVICE_VIEWENTRY_ENTRY );
+
+ if (mFileName.isEmpty()) {
+ // Invalid file name or viewer is already being viewed
+ OstTrace0( TRACE_NORMAL, CALENVIEWERSERVICE_VIEWENTRY, "Filename is empty" );
+
+ // Just exit the application
+ qApp->quit();
+
+ return;
+ }
+ QFile fileHandle(mFileName);
+
+ if (!mViewer) {
+ mViewer = new AgendaEventViewer(mAgendaUtil, this);
+ connect(mViewer, SIGNAL(viewingCompleted()), qApp, SLOT(quit()));
+ }
+
+ // TODO : No indication if the parsing of vcal/ical is successful
+ mViewer->view(fileHandle, AgendaEventViewer::ActionSave);
+ complete(true);
+
+ OstTraceFunctionExit0( DUP1_CALENVIEWERSERVICE_VIEWENTRY_EXIT );
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewerService::complete
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenViewerService::complete(bool ok)
+{
+ OstTraceFunctionEntry0( CALENVIEWERSERVICE_COMPLETE_ENTRY );
+
+ // TODO : Pass return value based on whether parsing
+ // of vcal or ical is successful or not
+ completeRequest(mAsyncReqIndex, ok);
+
+ OstTraceFunctionExit0( CALENVIEWERSERVICE_COMPLETE_EXIT );
+}
+
+// End of file --Don't remove this.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,47 @@
+/*
+* Copyright (c) 2009 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: main implementation.
+*
+*/
+
+// System includes
+#include <hbapplication.h>
+#include <hbmainwindow.h>
+
+// User includes
+#include "calenviewerservice.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "mainTraces.h"
+#endif
+
+
+int main (int argc, char *argv[])
+{
+ OstTraceFunctionEntry0( _MAIN_ENTRY );
+
+ HbApplication app(argc, argv);
+ HbMainWindow mainWindow;
+
+ // Create the service provider
+ CalenViewerService service;
+
+ mainWindow.show();
+
+ int retVal = app.exec();
+
+ OstTraceFunctionExit0( _MAIN_EXIT );
+
+ return retVal;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/traces/OstTraceDefinitions.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,7 @@
+#ifndef __OSTTRACEDEFINITIONS_H__
+#define __OSTTRACEDEFINITIONS_H__
+// OST_TRACE_COMPILER_IN_USE flag has been added by Trace Compiler
+// REMOVE BEFORE CHECK-IN TO VERSION CONTROL
+#define OST_TRACE_COMPILER_IN_USE
+#include <opensystemtrace.h>
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/traces/calenviewerserviceTraces.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,35 @@
+// Created by TraceCompiler 2.2.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __CALENVIEWERSERVICETRACES_H__
+#define __CALENVIEWERSERVICETRACES_H__
+
+#define KOstTraceComponentID 0x20031594
+
+#define CALENVIEWERSERVICE_CALENVIEWERSERVICE_ENTRY 0x8a0001
+#define CALENVIEWERSERVICE_CALENVIEWERSERVICE_EXIT 0x8a0002
+#define DUP1_CALENVIEWERSERVICE_CALENVIEWERSERVICE_ENTRY 0x8a0005
+#define DUP1_CALENVIEWERSERVICE_CALENVIEWERSERVICE_EXIT 0x8a0006
+#define CALENVIEWERSERVICE_VIEW_ENTRY 0x8a0007
+#define CALENVIEWERSERVICE_VIEW_EXIT 0x8a0008
+#define DUP1_CALENVIEWERSERVICE_VIEW_ENTRY 0x8a0009
+#define DUP1_CALENVIEWERSERVICE_VIEW_EXIT 0x8a000a
+#define CALENVIEWERSERVICE_INSTANCEVIEWREADY_ENTRY 0x8a000b
+#define CALENVIEWERSERVICE_INSTANCEVIEWREADY_EXIT 0x8a000c
+#define CALENVIEWERSERVICE_ENTRYVIEWREADY_ENTRY 0x8a000d
+#define CALENVIEWERSERVICE_ENTRYVIEWREADY_EXIT 0x8a000e
+#define CALENVIEWERSERVICE_HANDLECLIENTDISCONNECTED_ENTRY 0x8a000f
+#define CALENVIEWERSERVICE_HANDLECLIENTDISCONNECTED_EXIT 0x8a0010
+#define CALENVIEWERSERVICE_VIEWENTRY_ENTRY 0x8a0011
+#define DUP1_CALENVIEWERSERVICE_VIEWENTRY_EXIT 0x8a0012
+#define CALENVIEWERSERVICE_COMPLETE_ENTRY 0x8a0013
+#define CALENVIEWERSERVICE_COMPLETE_EXIT 0x8a0014
+#define CALENVIEWERSERVICE_VIEWENTRY 0x860002
+#define DUP1_CALENVIEWERSERVICE_VIEW 0x860003
+#define DUP2_CALENVIEWERSERVICE_VIEW 0x860004
+
+
+#endif
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/traces/fixed_id.definitions Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,26 @@
+#Fixed group and trace id definitions. If this file is removed, the identifiers are rebuilt.
+[GROUP]TRACE_FLOW=0x8a
+[GROUP]TRACE_NORMAL=0x86
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_CALENVIEWERSERVICE_ENTRY=0x1
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_CALENVIEWERSERVICE_EXIT=0x2
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_COMPLETE_ENTRY=0x13
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_COMPLETE_EXIT=0x14
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_ENTRYVIEWREADY_ENTRY=0xd
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_ENTRYVIEWREADY_EXIT=0xe
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_HANDLECLIENTDISCONNECTED_ENTRY=0xf
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_HANDLECLIENTDISCONNECTED_EXIT=0x10
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_INSTANCEVIEWREADY_ENTRY=0xb
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_INSTANCEVIEWREADY_EXIT=0xc
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_VIEWENTRY_ENTRY=0x11
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_VIEW_ENTRY=0x7
+[TRACE]TRACE_FLOW[0x8A]_CALENVIEWERSERVICE_VIEW_EXIT=0x8
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CALENVIEWERSERVICE_CALENVIEWERSERVICE_ENTRY=0x5
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CALENVIEWERSERVICE_CALENVIEWERSERVICE_EXIT=0x6
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CALENVIEWERSERVICE_VIEWENTRY_EXIT=0x12
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CALENVIEWERSERVICE_VIEW_ENTRY=0x9
+[TRACE]TRACE_FLOW[0x8A]_DUP1_CALENVIEWERSERVICE_VIEW_EXIT=0xa
+[TRACE]TRACE_FLOW[0x8A]__MAIN_ENTRY=0x3
+[TRACE]TRACE_FLOW[0x8A]__MAIN_EXIT=0x4
+[TRACE]TRACE_NORMAL[0x86]_CALENVIEWERSERVICE_VIEWENTRY=0x2
+[TRACE]TRACE_NORMAL[0x86]_DUP1_CALENVIEWERSERVICE_VIEW=0x3
+[TRACE]TRACE_NORMAL[0x86]_DUP2_CALENVIEWERSERVICE_VIEW=0x4
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/traces/mainTraces.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,16 @@
+// Created by TraceCompiler 2.2.2
+// DO NOT EDIT, CHANGES WILL BE LOST
+
+#ifndef __MAINTRACES_H__
+#define __MAINTRACES_H__
+
+#define KOstTraceComponentID 0x20031594
+
+#define _MAIN_ENTRY 0x8a0003
+#define _MAIN_EXIT 0x8a0004
+
+
+#endif
+
+// End of file
+
Binary file calendarui/cenrep/101F874B.cre has changed
Binary file calendarui/cenrep/101F874B.txt has changed
--- a/calendarui/cenrep/CalendarDomainCRKeys.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
-* Copyright (c) 2009 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: Calendar Domain Cenrep Keys.
-*
-*/
-
-#ifndef CALENDARDOMAINCRKEYS_H
-#define CALENDARDOMAINCRKEYS_H
-
-//#include <CalendarSDKCRKeys.h>
-
-/** Calendar UI Settings API */
-/** Provides access to the Calendar application's settings */
-
-const TUid KCRUidCalendar = {0x101F874B};
-
-/**
-* Calendar alarm sound file, string.
-* Default value : "z:\data\sounds\digital\alarm.aac"
-**/
-const TUint32 KCalendarSoundFile = 0x00000004;
-
-/**
-* Default Calendar alarm sound file.
-* Default value : "z:\data\sounds\digital\alarm.aac"
-**/
-const TUint32 KCalendarDefaultSoundFile = 0x00000005;
-
-#endif
\ No newline at end of file
--- a/calendarui/cenrep/CalendarInternalCRKeys.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: Calendar Internal Cenrep Keys.
-*
-*/
-
-
-
-#ifndef CALENDARINTERNALCRKEYS_H
-#define CALENDARINTERNALCRKEYS_H
-
-//#include <CalendarSDKCRKeys.h>
-
-/** Calendar UI Settings API */
-/** Provides access to the Calendar application's settings */
-
-const TUint32 KCRUidCalendar = {0x101F874B};
-
-
-/**
-* Default alarm time in minutes before event starting time.
-* Value is an integer between 0 and 60. Default: 15.
-**/
-const TUint32 KCalendarDefaultAlarmTime = 0x00000000;
-
-/**
-* Default starting view for Calendar. Value is an integer between 0 and 2.
-* 0 = Month view (default)
-* 1 = Week view
-* 2 = Day view
-**/
-const TUint32 KCalendarDefaultStartView = 0x00000001;
-
-/**
-* Week view title in Calendar application.
-* Value is eihter integer 0 or 1
-* 0 = Week number (default)
-* 1 = Week dates
-**/
-const TUint32 KCalendarWeekViewTitle = 0x00000002;
-
-/**
-* Is Chinese Lunar calendar information shown in Calendar
-* (only available if feature is included in ROM image).
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-* This key value is deprecated and has been replaced by the KCRUidCalenLunarPlugin key.
-**/
-const TUint32 KCalendarLunarCalendar = 0x00000003;
-
-/**
-* Calendar alarm sound file, string.
-* Default value : "z:\data\sounds\digital\alarm.aac"
-**/
-const TUint32 KCalendarSoundFile = 0x00000004;
-
-/**
-* Default Calendar alarm sound file.
-* Default value : "z:\data\sounds\digital\alarm.aac"
-**/
-const TUint32 KCalendarDefaultSoundFile = 0x00000005;
-
-/**
-* A flag that is set when a Calendar alarm was lost due to time change.
-* Default value: 0
-*/
-const TUint32 KCalendarLostAlarm = 0x00000006;
-
-/**
-* Calendar alarm snooze time interval in minutes.
-* Default value: 5
-*/
-const TUint32 KCalendarSnoozeTime = 0x00000007;
-
-//Added as an addition to the Symbian fix
-/**
-* Calendar Persistent Time to store the last time the System Time updated.
-* Default Value : 0
-*/
-const TReal KCalendarPersistentTime = 0x00000009;
-
-/**
-* Text string containing UIDs and enabled/disabled flag (separated
-* by commas) for Calendar plugins.
-* Default value: Empty
-*/
-const TUint32 KCalendarPluginAvailability = 0x0000000A;
-
-/**
-* Defines whether regional information must be shown in the Calendar or not
-* Default value: 1
-*/
-const TUint32 KShowRegionalInformation = 0x0000000B;
-
-#endif // CALENDARINTERNALCRKEYS_H
--- a/calendarui/cenrep/CalendarPrivateCRKeys.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: Calendar Private Cenrep Keys.
-*
-*/
-
-
-
-#ifndef CALENDARPRIVATECRKEYS_H
-#define CALENDARPRIVATECRKEYS_H
-
-#include <CalendarInternalCRKeys.h>
-
-/** Calendar UI Local Variation API */
-/** Provides access to the Calendar application's local variation setting */
-
-const TUid KCRUidCalendarLV = {0x101F874C};
-
-
-/**
-* Local variation bitmask for Caledar configuration.
-* For values refer to CalendarVariant.hrh.
-*
-**/
-const TUint32 KCalenLVFlags = 0x00000007;
-
-
-/** Calendar Thai Plugin Settings API */
-/** Provides access to the Calendar Thai Plugin's settings */
-const TUid KCRUidCalenThaiPlugin = {0x102823D2};
-
-/**
-* User modifiable setting
-* Is Thai regional Calendar information shown in Calendar
-* (only available if feature is included in phone,
-* currnet display language is Thai)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenThaiPluginEnabled = 0x00000000;
-
-
-/** Calendar Lunar Calendar Plugin Settings API */
-/** Provides access to the Calendar Lunar Plugin's settings */
-const TUid KCRUidCalenLunarPlugin = { 0x102823D1 };
-
-/**
-* User modifiable setting
-* Is Chinese Lunar Calendar information shown in Calendar
-* (only available if feature is included in phone,
-* currnet display language is some of Chinese languages)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenChineseLunarEnabled = 0x00000000;
-
-
-/**
-* User modifiable setting
-* Is Vietnamese Lunar Calendar information shown in Calendar
-* (only available if feature is included in phone,
-* currnet display language is Vietnamese languages)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenVietnameseLunarEnabled = 0x00000001;
-
-
-/** Calendar UI Extensions Settings API */
-/** Provides access to user settings that enable Calendar UI extensions and customizations */
-const TUid KCRUidCalenUIExtensions = { 0x10282ED7 };
-
-/**
-* User modifiable setting to enable the AIW External Calendar.
-* (only available if an AIW provider is included in phone)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenExternalCalendarEnabled = 0x00000000;
-
-
-#endif // CALENDARPRIVATECRKEYS_H
--- a/calendarui/cenrep/README.txt Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-Put 101F874B.cre in epoc32/winscw/c/private/10202be9/persists.
-
-This is a temporary solution until the calendar central repository data gets updated in the platform to include the new plugin setting item.
-
-Once the platform change has been made, 101F874B.cre and 101F874B.txt can be deleted from this directory.
\ No newline at end of file
Binary file calendarui/cenrep/keys_calendarUI.xls has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/commonutils/bwins/calencommonutilsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+EXPORTS
+ ?roundToPreviousHour@CalenDateUtils@@SAHABH@Z @ 1 NONAME ; int CalenDateUtils::roundToPreviousHour(int const &)
+ ?onSameMonth@CalenDateUtils@@SA_NABVQDateTime@@0@Z @ 2 NONAME ; bool CalenDateUtils::onSameMonth(class QDateTime const &, class QDateTime const &)
+ ?timeOfDay@CalenDateUtils@@SAHABVQDateTime@@@Z @ 3 NONAME ; int CalenDateUtils::timeOfDay(class QDateTime const &)
+ ?minTime@CalenDateUtils@@SA?AVQDateTime@@XZ @ 4 NONAME ; class QDateTime CalenDateUtils::minTime(void)
+ ?isOnToday@CalenDateUtils@@SA_NABVQDateTime@@@Z @ 5 NONAME ; bool CalenDateUtils::isOnToday(class QDateTime const &)
+ ?displayTimeOnDay@CalenDateUtils@@SA?AVQDateTime@@ABV2@0@Z @ 6 NONAME ; class QDateTime CalenDateUtils::displayTimeOnDay(class QDateTime const &, class QDateTime const &)
+ ?endsAtStartOfDay@CalenAgendaUtils@@SA_NAAVAgendaEntry@@ABVQDateTime@@@Z @ 7 NONAME ; bool CalenAgendaUtils::endsAtStartOfDay(class AgendaEntry &, class QDateTime const &)
+ ?roundToPreviousHour@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 8 NONAME ; class QDateTime CalenDateUtils::roundToPreviousHour(class QDateTime const &)
+ ?maxTime@CalenDateUtils@@SA?AVQDateTime@@XZ @ 9 NONAME ; class QDateTime CalenDateUtils::maxTime(void)
+ ?timeRangesIntersect@CalenDateUtils@@SA_NABVQDateTime@@000@Z @ 10 NONAME ; bool CalenDateUtils::timeRangesIntersect(class QDateTime const &, class QDateTime const &, class QDateTime const &, class QDateTime const &)
+ ?limitToValidTime@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 11 NONAME ; class QDateTime CalenDateUtils::limitToValidTime(class QDateTime const &)
+ ?today@CalenDateUtils@@SA?AVQDateTime@@XZ @ 12 NONAME ; class QDateTime CalenDateUtils::today(void)
+ ?isValidDay@CalenDateUtils@@SA_NABVQDateTime@@@Z @ 13 NONAME ; bool CalenDateUtils::isValidDay(class QDateTime const &)
+ ?beginningOfDay@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 14 NONAME ; class QDateTime CalenDateUtils::beginningOfDay(class QDateTime const &)
+ ?onSameDay@CalenDateUtils@@SA_NABVQDateTime@@0@Z @ 15 NONAME ; bool CalenDateUtils::onSameDay(class QDateTime const &, class QDateTime const &)
+ ?defaultTime@CalenDateUtils@@SA?AVQDateTime@@ABV2@@Z @ 16 NONAME ; class QDateTime CalenDateUtils::defaultTime(class QDateTime const &)
+ ?futureOf@CalenDateUtils@@SA?AVQDateTime@@ABV2@H@Z @ 17 NONAME ; class QDateTime CalenDateUtils::futureOf(class QDateTime const &, int)
+ ?now@CalenDateUtils@@SA?AVQDateTime@@XZ @ 18 NONAME ; class QDateTime CalenDateUtils::now(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/commonutils/eabi/calencommonutilsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+EXPORTS
+ _ZN14CalenDateUtils10isValidDayERK9QDateTime @ 1 NONAME
+ _ZN14CalenDateUtils11defaultTimeERK9QDateTime @ 2 NONAME
+ _ZN14CalenDateUtils11onSameMonthERK9QDateTimeS2_ @ 3 NONAME
+ _ZN14CalenDateUtils14beginningOfDayERK9QDateTime @ 4 NONAME
+ _ZN14CalenDateUtils16displayTimeOnDayERK9QDateTimeS2_ @ 5 NONAME
+ _ZN14CalenDateUtils16limitToValidTimeERK9QDateTime @ 6 NONAME
+ _ZN14CalenDateUtils19roundToPreviousHourERK9QDateTime @ 7 NONAME
+ _ZN14CalenDateUtils19roundToPreviousHourERKi @ 8 NONAME
+ _ZN14CalenDateUtils19timeRangesIntersectERK9QDateTimeS2_S2_S2_ @ 9 NONAME
+ _ZN14CalenDateUtils3nowEv @ 10 NONAME
+ _ZN14CalenDateUtils5todayEv @ 11 NONAME
+ _ZN14CalenDateUtils7maxTimeEv @ 12 NONAME
+ _ZN14CalenDateUtils7minTimeEv @ 13 NONAME
+ _ZN14CalenDateUtils8futureOfERK9QDateTimei @ 14 NONAME
+ _ZN14CalenDateUtils9isOnTodayERK9QDateTime @ 15 NONAME
+ _ZN14CalenDateUtils9onSameDayERK9QDateTimeS2_ @ 16 NONAME
+ _ZN14CalenDateUtils9timeOfDayERK9QDateTime @ 17 NONAME
+ _ZN16CalenAgendaUtils16endsAtStartOfDayER11AgendaEntryRK9QDateTime @ 18 NONAME
+
--- a/calendarui/commonutils/inc/calenagendautils.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/commonutils/inc/calenagendautils.h Thu Jul 22 16:32:51 2010 +0100
@@ -43,12 +43,6 @@
public:
/**
- * Removes entries ending aDay at midnight.
- **/
- static void removeEntriesEndingAtMidnightL( QList<AgendaEntry>& list,
- const QDateTime& day );
-
- /**
* Checks that if entry ends at starting midnight of the day,
* but has started earlier.
* Such entries are not shown in day that they end, because end time
@@ -56,7 +50,7 @@
* @returns ETrue, if entry ends at starting midnight of day, but starts before that
* EFalse, otherwise
**/
- static bool endsAtStartOfDayL( AgendaEntry& entry,
+ static bool endsAtStartOfDay( AgendaEntry& entry,
const QDateTime& day );
};
--- a/calendarui/commonutils/inc/calendateutils.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/commonutils/inc/calendateutils.h Thu Jul 22 16:32:51 2010 +0100
@@ -62,12 +62,6 @@
static bool isValidDay( const QDateTime& time );
/**
- * Return ETrue if aTime is NULL
- * @param aTime time to be compared against NULL time
- */
- static bool isNullTime( QDateTime& time );
-
- /**
* Return Min or Max time if aTime goes out of bounds.
* Valid range is [CalenDateUtils::MinTime(), CalenDateUtils::MaxTime]
* @param aTime time to be checked
@@ -125,8 +119,6 @@
*/
static QDateTime defaultTime( const QDateTime& date );
- static QDateTime pastOf(const QDateTime& dateTime, int numOfDays);
-
static QDateTime futureOf(const QDateTime& dateTime, int numOfDays);
--- a/calendarui/commonutils/src/calenagendautils.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/commonutils/src/calenagendautils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -30,43 +30,12 @@
// ============================ CalenAgendaUtils ==============================
// -----------------------------------------------------------------------------
-// CalenAgendaUtils::RemoveEntriesStartingAtMidnight
+// CalenAgendaUtils::EndsAtStartOfDay
// ?implementation_description
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
- void CalenAgendaUtils::removeEntriesEndingAtMidnightL( QList<AgendaEntry>& list,
- const QDateTime& day )
- {
- TRACE_ENTRY_POINT;
-
- // Remove events starting before aDay and ending at midnight
- TInt i( 0 );
-
- while( i < list.count() )
- {
- AgendaEntry& entry = list[i];
-
- if( endsAtStartOfDayL( entry, day ) )
- {
- list.removeAt( i );
- }
- else
- {
- ++i;
- }
- }
-
- TRACE_EXIT_POINT;
- }
-
-// -----------------------------------------------------------------------------
-// CalenAgendaUtils::EndsAtStartOfDayL
-// ?implementation_description
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
- bool CalenAgendaUtils::endsAtStartOfDayL( AgendaEntry& entry,
+ bool CalenAgendaUtils::endsAtStartOfDay( AgendaEntry& entry,
const QDateTime& day )
{
TRACE_ENTRY_POINT;
--- a/calendarui/commonutils/src/calendateutils.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/commonutils/src/calendateutils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -120,17 +120,6 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
- bool CalenDateUtils::isNullTime( QDateTime& time )
- {
- return( time.isNull() );
- }
-
-// -----------------------------------------------------------------------------
-// ?classname::?member_function
-// ?implementation_description
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
QDateTime CalenDateUtils::limitToValidTime( const QDateTime& time )
{
QDateTime valid = time;
@@ -169,7 +158,7 @@
//
int CalenDateUtils::timeOfDay( const QDateTime& dateTime )
{
- QDateTime midnight = CalenDateUtils::beginningOfDay( dateTime );
+ QDateTime midnight = beginningOfDay( dateTime );
int resultInSec = midnight.secsTo(dateTime);
return (resultInSec/60);
@@ -201,15 +190,7 @@
//
QDateTime CalenDateUtils::now()
{
- TTime currentTime;
- currentTime.HomeTime();
- TDateTime curDateTime = currentTime.DateTime();
- QDateTime ret;
- ret.setDate(QDate(curDateTime.Year(), curDateTime.Month() + 1, curDateTime.Day() + 1));
- ret.setTime(QTime(curDateTime.Hour(), curDateTime.Minute(), curDateTime.Second(), curDateTime.MicroSecond()));
- // TODO: need to use QDateTime::currentDateTime() from QT4.6 onwards
- //return QDateTime::currentDateTime();
- return ret;
+ return QDateTime::currentDateTime();
}
// -----------------------------------------------------------------------------
@@ -250,44 +231,6 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
- QDateTime CalenDateUtils::pastOf(const QDateTime& dateTime, int numOfDays)
- {
- QDateTime result;
- int dayNumber = dateTime.date().day();
- int numOfDaysInMonth = dayNumber;
- int month = dateTime.date().month();
- int year = dateTime.date().year();
- int buff = numOfDays;
- QDate date(year, month, dayNumber);
- while(buff > numOfDaysInMonth)
- {
- if(month == 1) {
- // If January,
- month = 12; // December
- year--;
- }
- else {
- month--;
- }
- // Create the qdate with these details
- date.setDate(year, month, 1);
- // check to see if it goes beyond the next month also
- buff = buff - numOfDaysInMonth;
- numOfDaysInMonth = date.daysInMonth();
- }
-
- // Substract buff days from end of the month
- int day = numOfDaysInMonth - buff;
- date.setYMD(date.year(), date.month(), day);
- result.setDate(date);
- result.setTime(dateTime.time());
- return result;
- }
-
- // -----------------------------------------------------------------------------
- // (other items were commented in a header).
- // -----------------------------------------------------------------------------
- //
QDateTime CalenDateUtils::futureOf(const QDateTime& dateTime, int numOfDays)
{
QDateTime result;
Binary file calendarui/conf/calendarUI.confml has changed
Binary file calendarui/conf/calendarUI_101F874B.crml has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/bwins/calencontrolleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,40 @@
+EXPORTS
+ ?trUtf8@CCalenController@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString CCalenController::trUtf8(char const *, char const *, int)
+ ?checkMultipleCreation@CCalenController@@AAEXXZ @ 2 NONAME ; void CCalenController::checkMultipleCreation(void)
+ ??0CCalenController@@QAE@XZ @ 3 NONAME ; CCalenController::CCalenController(void)
+ ?handleServiceManagerSlot@CCalenController@@QAEXHABVQDateTime@@@Z @ 4 NONAME ; void CCalenController::handleServiceManagerSlot(int, class QDateTime const &)
+ ?staticMetaObject@CCalenController@@2UQMetaObject@@B @ 5 NONAME ; struct QMetaObject const CCalenController::staticMetaObject
+ ?qt_metacall@CCalenController@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 6 NONAME ; int CCalenController::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?qt_metacast@CCalenController@@UAEPAXPBD@Z @ 7 NONAME ; void * CCalenController::qt_metacast(char const *)
+ ?BroadcastNotification@CCalenController@@QAEXW4TCalenNotification@@@Z @ 8 NONAME ; void CCalenController::BroadcastNotification(enum TCalenNotification)
+ ?CancelNotifications@CCalenController@@QAEXPAVMCalenNotificationHandler@@@Z @ 9 NONAME ; void CCalenController::CancelNotifications(class MCalenNotificationHandler *)
+ ?eventFilter@CCalenController@@UAE_NPAVQObject@@PAVQEvent@@@Z @ 10 NONAME ; bool CCalenController::eventFilter(class QObject *, class QEvent *)
+ ?tr@CCalenController@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString CCalenController::tr(char const *, char const *)
+ ?getStaticMetaObject@CCalenController@@SAABUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const & CCalenController::getStaticMetaObject(void)
+ ?CustomisationManager@CCalenController@@QAEAAVCCalenCustomisationManager@@XZ @ 13 NONAME ; class CCalenCustomisationManager & CCalenController::CustomisationManager(void)
+ ?IssueCommandL@CCalenController@@QAEHH@Z @ 14 NONAME ; int CCalenController::IssueCommandL(int)
+ ?tr@CCalenController@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString CCalenController::tr(char const *, char const *, int)
+ ?Services@CCalenController@@QAEAAVMCalenServices@@XZ @ 16 NONAME ; class MCalenServices & CCalenController::Services(void)
+ ?OfferMenu@CCalenController@@QAEXPAVHbMenu@@@Z @ 17 NONAME ; void CCalenController::OfferMenu(class HbMenu *)
+ ?ReleaseCustomisations@CCalenController@@QAEXXZ @ 18 NONAME ; void CCalenController::ReleaseCustomisations(void)
+ ?SetDefaultContext@CCalenController@@AAEXXZ @ 19 NONAME ; void CCalenController::SetDefaultContext(void)
+ ??_ECCalenController@@UAE@I@Z @ 20 NONAME ; CCalenController::~CCalenController(unsigned int)
+ ?getFirstView@CCalenController@@QAEHXZ @ 21 NONAME ; int CCalenController::getFirstView(void)
+ ?metaObject@CCalenController@@UBEPBUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const * CCalenController::metaObject(void) const
+ ?Infobar@CCalenController@@QAEPAVHbWidget@@XZ @ 23 NONAME ; class HbWidget * CCalenController::Infobar(void)
+ ?ViewManager@CCalenController@@QAEAAVCalenViewManager@@XZ @ 24 NONAME ; class CalenViewManager & CCalenController::ViewManager(void)
+ ?context@CCalenController@@QAEAAVMCalenContext@@XZ @ 25 NONAME ; class MCalenContext & CCalenController::context(void)
+ ?agendaInterface@CCalenController@@QAEPAVAgendaUtil@@XZ @ 26 NONAME ; class AgendaUtil * CCalenController::agendaInterface(void)
+ ?constructController@CCalenController@@QAEXXZ @ 27 NONAME ; void CCalenController::constructController(void)
+ ?MainWindow@CCalenController@@QAEAAVHbMainWindow@@XZ @ 28 NONAME ; class HbMainWindow & CCalenController::MainWindow(void)
+ ?Notifier@CCalenController@@QAEAAVCalenNotifier@@XZ @ 29 NONAME ; class CalenNotifier & CCalenController::Notifier(void)
+ ?InstanceL@CCalenController@@SAPAV1@XZ @ 30 NONAME ; class CCalenController * CCalenController::InstanceL(void)
+ ??1CCalenController@@UAE@XZ @ 31 NONAME ; CCalenController::~CCalenController(void)
+ ?InfobarTextL@CCalenController@@QAEPAVQString@@XZ @ 32 NONAME ; class QString * CCalenController::InfobarTextL(void)
+ ?Release@CCalenController@@QAEXXZ @ 33 NONAME ; void CCalenController::Release(void)
+ ?trUtf8@CCalenController@@SA?AVQString@@PBD0@Z @ 34 NONAME ; class QString CCalenController::trUtf8(char const *, char const *)
+ ?RegisterForNotificationsL@CCalenController@@QAEXPAVMCalenNotificationHandler@@W4TCalenNotification@@@Z @ 35 NONAME ; void CCalenController::RegisterForNotificationsL(class MCalenNotificationHandler *, enum TCalenNotification)
+ ?GetCommandHandlerL@CCalenController@@QAEPAVMCalenCommandHandler@@H@Z @ 36 NONAME ; class MCalenCommandHandler * CCalenController::GetCommandHandlerL(int)
+ ?RegisterForNotificationsL@CCalenController@@QAEXPAVMCalenNotificationHandler@@AAV?$RArray@W4TCalenNotification@@@@@Z @ 37 NONAME ; void CCalenController::RegisterForNotificationsL(class MCalenNotificationHandler *, class RArray<enum TCalenNotification> &)
+ ?NewServicesL@CCalenController@@UAEPAVMCalenServices@@XZ @ 38 NONAME ; class MCalenServices * CCalenController::NewServicesL(void)
+
--- a/calendarui/controller/controller.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/controller.pro Thu Jul 22 16:32:51 2010 +0100
@@ -23,6 +23,7 @@
INCLUDEPATH += ./inc \
../inc \
../views/inc \
+ ../views/dayview/inc \
../globaldata/inc
CONFIG += hb
@@ -43,7 +44,8 @@
-lcaleneditor \
-lbafl \
-lagendainterface \
- -lagendaeventviewer
+ -lagendaeventviewer \
+ -lxqserviceutil
TARGET.UID3 = 0x10282F25
TARGET.CAPABILITY = CAP_GENERAL_DLL
--- a/calendarui/controller/data/calendar.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/data/calendar.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -1,9 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/xml">
- <file alias="calendayview.docml">xml/calendayview.docml</file>
+ <file alias="calenagendaview.docml">xml/calenagendaview.docml</file>
<file alias="calenmonthview.docml">xml/calenmonthview.docml</file>
</qresource>
- <qresource prefix="/translations" >
- <file alias="calendar_en_GB">calendar_en_GB.qm</file>
- </qresource>
</RCC>
Binary file calendarui/controller/data/calendar_en_GB.qm has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/data/xml/calenagendaview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,104 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <object name="newEventAction" type="HbAction">
+ <string locid="txt_calendar_opt_new_event" name="text"/>
+ </object>
+ <object name="todayAction" type="HbAction">
+ <string locid="txt_calendar_opt_go_to_today" name="text"/>
+ </object>
+ <object name="goToDateAction" type="HbAction">
+ <string locid="txt_calendar_opt_go_to_date" name="text"/>
+ </object>
+ <object name="switchToDayViewAction" type="HbAction">
+ <string locid="txt_calendar_opt_switch_to_day_view" name="text"/>
+ </object>
+ <object name="settingsAction" type="HbAction">
+ <string locid="txt_calendar_opt_settings" name="text"/>
+ </object>
+ <widget name="agendaView" type="HbView">
+ <widget name="agendaViewWidget" role="HbView:widget" type="HbWidget">
+ <widget name="headingRegionalPluginWidget" type="HbWidget">
+ <widget name="headingWidget" type="HbGroupBox">
+ <string name="heading" value=""/>
+ <real name="z" value="1"/>
+ <sizehint type="PREFERRED" width="53.43284un"/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="headingWidget"/>
+ </layout>
+ </widget>
+ <widget name="noEventsLabel" type="HbLabel">
+ <real name="z" value="2"/>
+ <string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <fontspec name="fontSpec" role="Undefined" textheight="var(hb-param-text-height-primary)"/>
+ </widget>
+ <widget name="eventsList" type="HbListView">
+ <widget name="listItemPrototype" role="HbListView:prototype" type="HbListViewItem"/>
+ <real name="z" value="2"/>
+ <sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ </layout>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="newEventAction" role="HbMenu:addAction"/>
+ <ref object="todayAction" role="HbMenu:addAction"/>
+ <ref object="goToDateAction" role="HbMenu:addAction"/>
+ <ref object="switchToDayViewAction" role="HbMenu:addAction"/>
+ <ref object="settingsAction" role="HbMenu:addAction"/>
+ </widget>
+ <string locid="txt_calendar_title_calendar" name="title"/>
+ </widget>
+ <section name="emptyList">
+ <widget name="agendaViewWidget" role="HbView:widget" type="HbWidget">
+ <layout type="anchor">
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="noEventsLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="noEventsLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-left)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="noEventsLabel" dstEdge="TOP" spacing="38un" src="" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ </section>
+ <section name="nonEmptyList">
+ <widget name="agendaViewWidget" role="HbView:widget" type="HbWidget">
+ <layout type="anchor">
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="eventsList" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="eventsList" dstEdge="TOP" spacing="0un" src="headingRegionalPluginWidget" srcEdge="BOTTOM"/>
+ <anchoritem dst="eventsList" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="eventsList" dstEdge="BOTTOM" spacing="-0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ </section>
+ <section name="emptyLandscape">
+ <widget name="agendaViewWidget" role="HbView:widget" type="HbWidget">
+ <layout type="anchor">
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="noEventsLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="noEventsLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-left)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="noEventsLabel" dstEdge="TOP" spacing="21.8806un" src="" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ </section>
+ <metadata activeUIState="emptyListState" display="QHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="emptyListState" sections="#common emptyList"/>
+ <uistate name="nonEmptyListState" sections="#common nonEmptyList"/>
+ <uistate name="emptyListLandscapeState" sections="#common emptyList emptyLandscape"/>
+ <dummydata objectName="eventsList" section="nonEmptyList" value="0"/>
+ </metadata>
+</hbdocument>
--- a/calendarui/controller/data/xml/calendayview.docml Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
- <object name="newEventAction" type="HbAction">
- <string locid="txt_calendar_opt_new_event" name="text"/>
- </object>
- <object name="goToDateAction" type="HbAction">
- <string locid="txt_calendar_opt_go_to_date" name="text"/>
- </object>
- <object name="settingsAction" type="HbAction">
- <string locid="txt_calendar_opt_settings" name="text"/>
- </object>
- <object name="todayAction" type="HbAction">
- <string locid="txt_calendar_opt_go_to_today" name="text"/>
- </object>
- <widget name="dayView" type="HbView">
- <widget name="dayViewWidget" role="HbView:widget" type="HbWidget">
- <widget name="headingRegionalPluginWidget" type="HbWidget">
- <widget name="headingWidget" type="HbGroupBox">
- <string name="titleText" value=""/>
- <real name="z" value="1"/>
- <sizehint type="PREFERRED" width="53.43284un"/>
- <bool name="collapsable" value="FALSE"/>
- </widget>
- <layout orientation="Vertical" spacing="0un" type="linear">
- <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
- <linearitem itemname="headingWidget"/>
- </layout>
- </widget>
- <widget name="noEventsLabel" type="HbLabel">
- <real name="z" value="2"/>
- <string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
- <enums name="textWrapping" value="TextWordWrap"/>
- <fontspec name="fontSpec" role="Undefined" textheight="var(hb-param-text-height-primary)"/>
- </widget>
- <widget name="eventsList" type="HbListView">
- <widget name="listItemPrototype" role="HbListView:prototype" type="HbListViewItem"/>
- <real name="z" value="2"/>
- <sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
- </widget>
- <layout type="anchor">
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
- </layout>
- </widget>
- <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
- <widget name="viewMenu" role="HbView:menu" type="HbMenu">
- <ref object="newEventAction" role="HbMenu:addAction"/>
- <ref object="todayAction" role="HbMenu:addAction"/>
- <ref object="goToDateAction" role="HbMenu:addAction"/>
- <ref object="settingsAction" role="HbMenu:addAction"/>
- </widget>
- <string locid="txt_calendar_title_calendar" name="title"/>
- </widget>
- <section name="emptyList">
- <widget name="dayViewWidget" role="HbView:widget" type="HbWidget">
- <layout type="anchor">
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="noEventsLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="noEventsLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-left)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="noEventsLabel" dstEdge="TOP" spacing="38un" src="" srcEdge="TOP"/>
- </layout>
- </widget>
- </section>
- <section name="nonEmptyList">
- <widget name="dayViewWidget" role="HbView:widget" type="HbWidget">
- <layout type="anchor">
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="eventsList" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="eventsList" dstEdge="TOP" spacing="0un" src="headingRegionalPluginWidget" srcEdge="BOTTOM"/>
- <anchoritem dst="eventsList" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="eventsList" dstEdge="BOTTOM" spacing="-0un" src="" srcEdge="BOTTOM"/>
- </layout>
- </widget>
- </section>
- <section name="emptyLandscape">
- <widget name="dayViewWidget" role="HbView:widget" type="HbWidget">
- <layout type="anchor">
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="headingRegionalPluginWidget" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="noEventsLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="noEventsLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-left)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="noEventsLabel" dstEdge="TOP" spacing="21.8806un" src="" srcEdge="TOP"/>
- </layout>
- </widget>
- </section>
- <metadata activeUIState="emptyListState" display="QHD portrait" unit="un">
- <uistate name="Common ui state" sections="#common"/>
- <uistate name="emptyListState" sections="#common emptyList"/>
- <uistate name="nonEmptyListState" sections="#common nonEmptyList"/>
- <uistate name="emptyListLandscapeState" sections="#common emptyList emptyLandscape"/>
- <dummydata objectName="eventsList" section="nonEmptyList" value="0"/>
- </metadata>
-</hbdocument>
--- a/calendarui/controller/data/xml/calenmonthview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/data/xml/calenmonthview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -23,15 +23,12 @@
<widget name="monthViewExceptPreviewPane" type="HbWidget">
<widget name="monthTitle" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
<real name="z" value="6"/>
- <sizehint height="3.5un" type="PREFERRED" width="52un"/>
- <sizehint height="3.5un" type="MINIMUM" width="52un"/>
- <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
- <sizehint height="3.5un" type="MAXIMUM" width="52un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <sizehint height="expr(var(hb-param-text-height-secondary) + 0.75un + 0.75un)" type="PREFERRED" width="52un"/>
+ <sizehint height="expr(var(hb-param-text-height-secondary) + 0.75un + 0.75un)" type="MINIMUM" width="52un"/>
+ <contentsmargins bottom="0.75un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0.75un"/>
+ <sizehint height="expr(var(hb-param-text-height-secondary) + 0.75un + 0.75un)" type="MAXIMUM" width="52un"/>
</widget>
<widget name="dayNamesWidget" type="HbWidget">
<widget name="firstDayLabel" type="HbLabel">
@@ -40,10 +37,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="secondDayLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
@@ -51,10 +45,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="thirdDayLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
@@ -62,10 +53,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="fourthDayLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
@@ -73,10 +61,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="fifthDayLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
@@ -84,10 +69,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="sixthDayLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
@@ -95,10 +77,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="seventhDayLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
@@ -106,10 +85,7 @@
<sizehint height="3un" type="PREFERRED" width="3.41604un"/>
<sizehint height="3un" type="MINIMUM" width="3.41604un"/>
<sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<real name="z" value="6"/>
<sizehint height="3un" type="PREFERRED" width="52un"/>
@@ -132,60 +108,42 @@
<sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
<sizehint height="0un" type="MINIMUM" width="6.41604un"/>
<sizehint height="42.77612un" type="MAXIMUM" width="6.41604un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="secondWeekLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
<sizehint height="0un" type="MINIMUM" width="6.41604un"/>
<sizehint height="42.77612un" type="MAXIMUM" width="6.41604un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="thirdWeekLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
<sizehint height="0un" type="MINIMUM" width="6.41604un"/>
<sizehint height="42.77612un" type="MAXIMUM" width="6.41604un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="fourthWeekLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
<sizehint height="0un" type="MINIMUM" width="6.41604un"/>
<sizehint height="42.77612un" type="MAXIMUM" width="6.41604un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="fifthWeekLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
<sizehint height="0un" type="MINIMUM" width="6.41604un"/>
<sizehint height="42.77612un" type="MAXIMUM" width="6.41604un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<widget name="sixthWeekLabel" type="HbLabel">
<enums name="alignment" value="AlignVCenter|AlignHCenter"/>
<sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
<sizehint height="0un" type="MINIMUM" width="6.41604un"/>
<sizehint height="42.77612un" type="MAXIMUM" width="6.41604un"/>
- <enums name="elideMode" value="ElideNone"/>
- <enums name="textFormat" value="PlainText"/>
- <string name="plainText" value=""/>
- <enums name="logicalFont" value="FontSecondary"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
</widget>
<real name="z" value="3"/>
<sizehint height="43.77612un" type="PREFERRED" width="6.41604un"/>
@@ -221,6 +179,12 @@
</layout>
</widget>
<widget name="prevPaneWidget" type="HbWidget">
+ <widget name="prevRegionalInfo" type="HbLabel">
+ <enums name="alignment" value="AlignCenter"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
+ <string name="textColor" value="qtc_cal_day_preview_heading"/>
+ <contentsmargins bottom="0.75un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0.75un"/>
+ </widget>
<widget name="prevPaneLayout" type="HbWidget">
<widget name="prevPaneContainer" type="HbWidget">
<widget name="prevPreviewPane" type="HbScrollArea">
@@ -235,7 +199,7 @@
<enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
<enums name="clampingStyle" value="StrictClamping"/>
<enums name="scrollingStyle" value="PanOrFlick"/>
- <bool name="frictionEnabled" value="FALSE"/>
+ <bool name="frictionEnabled" value="TRUE"/>
</widget>
<widget name="NoEntriesLabelPrev" type="HbLabel">
<string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
@@ -270,6 +234,12 @@
</layout>
</widget>
<widget name="currPaneWidget" type="HbWidget">
+ <widget name="currRegionalInfo" type="HbLabel">
+ <enums name="alignment" value="AlignCenter"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
+ <string name="textColor" value="qtc_cal_day_preview_heading"/>
+ <contentsmargins bottom="0.75un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0.75un"/>
+ </widget>
<widget name="currPaneLayout" type="HbWidget">
<widget name="currPaneContainer" type="HbWidget">
<widget name="currPreviewPane" type="HbScrollArea">
@@ -284,7 +254,7 @@
<enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
<enums name="clampingStyle" value="StrictClamping"/>
<enums name="scrollingStyle" value="PanOrFlick"/>
- <bool name="frictionEnabled" value="FALSE"/>
+ <bool name="frictionEnabled" value="TRUE"/>
</widget>
<widget name="NoEntriesLabelCurr" type="HbLabel">
<string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
@@ -319,6 +289,12 @@
</layout>
</widget>
<widget name="nextPaneWidget" type="HbWidget">
+ <widget name="nextRegionalInfo" type="HbLabel">
+ <enums name="alignment" value="AlignCenter"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-secondary)"/>
+ <string name="textColor" value="qtc_cal_day_preview_heading"/>
+ <contentsmargins bottom="0.75un" left="var(hb-param-margin-gene-left)" right="var(hb-param-margin-gene-right)" top="0.75un"/>
+ </widget>
<widget name="nextPaneLayout" type="HbWidget">
<widget name="nextPaneContainer" type="HbWidget">
<widget name="nextPreviewPane" type="HbScrollArea">
@@ -333,7 +309,7 @@
<enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
<enums name="clampingStyle" value="StrictClamping"/>
<enums name="scrollingStyle" value="PanOrFlick"/>
- <bool name="frictionEnabled" value="FALSE"/>
+ <bool name="frictionEnabled" value="TRUE"/>
</widget>
<widget name="NoEntriesLabelNext" type="HbLabel">
<string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
@@ -464,41 +440,59 @@
</widget>
</section>
<section name="landscape">
+ <widget name="prevPaneLayout" type="HbWidget">
+ <sizehint height="42.8806un" type="PREFERRED" width="11.9403un"/>
+ </widget>
+ <widget name="prevPaneContainer" type="HbWidget">
+ <sizehint height="42.8806un" type="PREFERRED" width="23.8806un"/>
+ </widget>
<widget name="prevPaneWidget" type="HbWidget">
<sizehint height="42.8806un" type="FIXED" width="40.8un"/>
</widget>
+ <widget name="currPaneContainer" type="HbWidget">
+ <sizehint height="42.8806un" type="PREFERRED" width="23.8806un"/>
+ </widget>
+ <widget name="currPaneLayout" type="HbWidget">
+ <sizehint height="42.8806un" type="PREFERRED" width="11.9403un"/>
+ </widget>
<widget name="currPaneWidget" type="HbWidget">
<sizehint height="42.8806un" type="FIXED" width="40.8un"/>
</widget>
+ <widget name="nextPaneLayout" type="HbWidget">
+ <sizehint height="42.8806un" type="PREFERRED" width="11.9403un"/>
+ </widget>
+ <widget name="nextPaneContainer" type="HbWidget">
+ <sizehint height="42.8806un" type="PREFERRED" width="11.9403un"/>
+ </widget>
<widget name="nextPaneWidget" type="HbWidget">
<sizehint height="42.8806un" type="FIXED" width="40.8un"/>
</widget>
<widget name="prevPreviewPaneContents" type="HbWidget">
- <sizehint type="MINIMUM" width="40.8un"/>
+ <sizehint type="MINIMUM" width="40.8un"/>
<sizehint type="MAXIMUM" width="40.8un"/>
</widget>
<widget name="currPreviewPaneContents" type="HbWidget">
- <sizehint type="MINIMUM" width="40.8un"/>
+ <sizehint type="MINIMUM" width="40.8un"/>
<sizehint type="MAXIMUM" width="40.8un"/>
</widget>
<widget name="nextPreviewPaneContents" type="HbWidget">
- <sizehint type="MINIMUM" width="40.8un"/>
+ <sizehint type="MINIMUM" width="40.8un"/>
<sizehint type="MAXIMUM" width="40.8un"/>
</widget>
<widget name="monthGridWeekNumWidget" type="HbWidget">
- <sizehint height="34.77612un" type="MAXIMUM" width="52un"/>
- <sizehint height="34.77612un" type="MAXIMUM" width="52un"/>
- <sizehint height="34.77612un" type="MINIMUM" width="52un"/>
+ <sizehint height="33.1un" type="PREFERRED" width="52un"/>
+ <sizehint height="33.1un" type="MAXIMUM" width="52un"/>
+ <sizehint height="33.1un" type="MINIMUM" width="52un"/>
</widget>
<widget name="monthGrid" type="HbGridView">
- <sizehint height="34.77612un" type="PREFERRED" width="52un"/>
- <sizehint height="34.77612un" type="MAXIMUM" width="52un"/>
- <sizehint height="34.77612un" type="MINIMUM" width="0un"/>
+ <sizehint height="33.1un" type="PREFERRED" width="52un"/>
+ <sizehint height="33.1un" type="MAXIMUM" width="52un"/>
+ <sizehint height="33.1un" type="MINIMUM" width="0un"/>
</widget>
<widget name="weekNumbersWidget" type="HbWidget">
- <sizehint height="34.77612un" type="PREFERRED" width="6.41604un"/>
- <sizehint height="34.77612un" type="MINIMUM" width="6.41604un"/>
- <sizehint height="34.77612un" type="MAXIMUM" width="6.41604un"/>
+ <sizehint height="33.1un" type="PREFERRED" width="6.41604un"/>
+ <sizehint height="33.1un" type="MAXIMUM" width="6.41604un"/>
+ <sizehint height="33.1un" type="MINIMUM" width="6.41604un"/>
</widget>
<widget name="content" role="HbView:widget" type="HbWidget">
<layout orientation="Horizontal" spacing="0.75un" type="linear">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/eabi/calencontrolleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,41 @@
+EXPORTS
+ _ZN16CCalenController10MainWindowEv @ 1 NONAME
+ _ZN16CCalenController11ViewManagerEv @ 2 NONAME
+ _ZN16CCalenController11eventFilterEP7QObjectP6QEvent @ 3 NONAME
+ _ZN16CCalenController11qt_metacallEN11QMetaObject4CallEiPPv @ 4 NONAME
+ _ZN16CCalenController11qt_metacastEPKc @ 5 NONAME
+ _ZN16CCalenController12InfobarTextLEv @ 6 NONAME
+ _ZN16CCalenController12NewServicesLEv @ 7 NONAME
+ _ZN16CCalenController12getFirstViewEv @ 8 NONAME
+ _ZN16CCalenController13IssueCommandLEi @ 9 NONAME
+ _ZN16CCalenController15agendaInterfaceEv @ 10 NONAME
+ _ZN16CCalenController16staticMetaObjectE @ 11 NONAME DATA 16
+ _ZN16CCalenController17SetDefaultContextEv @ 12 NONAME
+ _ZN16CCalenController18GetCommandHandlerLEi @ 13 NONAME
+ _ZN16CCalenController19CancelNotificationsEP25MCalenNotificationHandler @ 14 NONAME
+ _ZN16CCalenController19constructControllerEv @ 15 NONAME
+ _ZN16CCalenController19getStaticMetaObjectEv @ 16 NONAME
+ _ZN16CCalenController20CustomisationManagerEv @ 17 NONAME
+ _ZN16CCalenController21BroadcastNotificationE18TCalenNotification @ 18 NONAME
+ _ZN16CCalenController21ReleaseCustomisationsEv @ 19 NONAME
+ _ZN16CCalenController21checkMultipleCreationEv @ 20 NONAME
+ _ZN16CCalenController24handleServiceManagerSlotEiRK9QDateTime @ 21 NONAME
+ _ZN16CCalenController25RegisterForNotificationsLEP25MCalenNotificationHandler18TCalenNotification @ 22 NONAME
+ _ZN16CCalenController25RegisterForNotificationsLEP25MCalenNotificationHandlerR6RArrayI18TCalenNotificationE @ 23 NONAME
+ _ZN16CCalenController7InfobarEv @ 24 NONAME
+ _ZN16CCalenController7ReleaseEv @ 25 NONAME
+ _ZN16CCalenController7contextEv @ 26 NONAME
+ _ZN16CCalenController8NotifierEv @ 27 NONAME
+ _ZN16CCalenController8ServicesEv @ 28 NONAME
+ _ZN16CCalenController9InstanceLEv @ 29 NONAME
+ _ZN16CCalenController9OfferMenuEP6HbMenu @ 30 NONAME
+ _ZN16CCalenControllerC1Ev @ 31 NONAME
+ _ZN16CCalenControllerC2Ev @ 32 NONAME
+ _ZN16CCalenControllerD0Ev @ 33 NONAME
+ _ZN16CCalenControllerD1Ev @ 34 NONAME
+ _ZN16CCalenControllerD2Ev @ 35 NONAME
+ _ZNK16CCalenController10metaObjectEv @ 36 NONAME
+ _ZTI16CCalenController @ 37 NONAME
+ _ZTV16CCalenController @ 38 NONAME
+ _ZThn8_N16CCalenController12NewServicesLEv @ 39 NONAME
+
--- a/calendarui/controller/inc/calencontroller.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/inc/calencontroller.h Thu Jul 22 16:32:51 2010 +0100
@@ -25,6 +25,7 @@
#include <apadef.h> // TApaCommand
#include <qglobal.h> // Q_DECL_EXPORT macro
#include <agendautil.h>
+#include <qobject>
#include "hb_calencommands.hrh" // Calendar commands
#include "calennotificationhandler.h" // TCalenNotification
#include "calenservices.h"
@@ -58,16 +59,22 @@
* The controller handles events from the rest of Calendar and delegates
* them to the appropriate place (i.e. the action ui classes).
*/
-class CALENCONTROLLER_EXPORT CCalenController : public MCalenServicesFactory
+class CALENCONTROLLER_EXPORT CCalenController : public QObject, public MCalenServicesFactory
{
-
+ Q_OBJECT
+
public: // Construction and destruction
/**
* C++ constructor
*/
- CCalenController(bool isFromServiceFrmwrk);
+ CCalenController();
/**
+ * Second phase contruction for controller
+ */
+ void constructController();
+
+ /**
* Constructs CCalenController with existing CAknViewAppUi. If the
* controller has been previously initialized with the same CAknViewAppUi,
* the existing instance will be returned.
@@ -212,6 +219,12 @@
*/
CCalenCustomisationManager& CustomisationManager();
+ /**
+ * Filters the events eg. Locale/language change events
+ * @param event
+ */
+ bool eventFilter(QObject *object, QEvent *event);
+
private: // Construction and destruction
/**
@@ -229,7 +242,6 @@
CalenContextImpl* mContext;
AgendaUtil *mAgendaUtil; // Agenda interface provider
CalenServicesImpl* iServices; // Services.
- HbMainWindow* iMainWindow;
CalenNotifier* iNotifier; // Broadcasts calendar events
CCalenStateMachine* iStateMachine;
CCalenActionUi* iActionUi; // Default internal command handling
--- a/calendarui/controller/inc/calendeleteui.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/inc/calendeleteui.h Thu Jul 22 16:32:51 2010 +0100
@@ -181,11 +181,6 @@
void showDeleteQuery(const TDeleteConfirmationType type,
const int count = 0);
- /**
- * Deletes the entries before the selected date
- */
- void getSelectedDateAndDelete();
-
private: // own methods
/**
* C++ constructor
@@ -239,6 +234,8 @@
QDateTime iStartTime;
QDateTime iEndTime;
HbDateTimePicker *mDatePicker;
+ HbAction *mDeleteAction;
+ HbAction *mCancelAction;
// Confirmation note id is stored here. Note is shown when asynchronous
// delete completes.
int iConfirmationNoteId;
--- a/calendarui/controller/inc/calennotificationhandler.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/inc/calennotificationhandler.h Thu Jul 22 16:32:51 2010 +0100
@@ -32,6 +32,7 @@
ECalenNotifyInstanceDeleted,
ECalenNotifySystemTimeChanged,
ECalenNotifySystemLocaleChanged,
+ ECalenNotifySystemLanguageChanged,
ECalenNotifyLostAlarms,
ECalenNotifyCmdLineLaunch,
ECalenNotifyAvkonViewSwitchLaunch,
--- a/calendarui/controller/inc/calenstatetable.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/inc/calenstatetable.h Thu Jul 22 16:32:51 2010 +0100
@@ -113,10 +113,10 @@
/* ECalenMonthView */
{ EIdle , EIdle, KCalenNoNotification },
- /* ECalenWeekView */
+ /* ECalenDayView */
{ EIdle , EIdle, KCalenNoNotification },
- /* ECalenDayView */
+ /* ECalenAgendaView */
{ EIdle , EIdle, KCalenNoNotification },
/* ECalenForwardsToDayView */
--- a/calendarui/controller/inc/calenviewmanager.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/inc/calenviewmanager.h Thu Jul 22 16:32:51 2010 +0100
@@ -28,10 +28,10 @@
#include "hb_calencommands.hrh"
#include "calencommandhandler.h"
-
+class CalenNativeView;
class CCalenController;
class CalenMonthView;
-class CalenDayView;
+class CalenAgendaView;
class AgendaEventViewer;
class CalenLandscapeDayView;
class CalenSettingsView;
@@ -52,8 +52,12 @@
/**
* Constructor
*/
- CalenViewManager ( CCalenController& aController,
- bool isFromServiceFrmwrk);
+ CalenViewManager ( CCalenController& aController);
+
+ /**
+ * Second Phase Constructor
+ */
+ void SecondPhaseConstruction();
/**
* Destructor
@@ -93,10 +97,13 @@
void showPrevDay();
- void removeDayViews();
+ void removePreviousView();
void constructOtherViews();
+ void launchSettingsView();
+
+
public: // from MCalenNotificationHandler
/**
@@ -112,7 +119,7 @@
/**
* Loads day view frm the docml
*/
- void loadDayView();
+ void loadAgendaView();
/**
* Activates the default view, as retrieved from settings.
*/
@@ -133,7 +140,7 @@
* to provide illusion of swiping to next or prev
* day
*/
- void loadAlternateDayView();
+ void loadAlternateAgendaView();
private slots:
void handleMainViewReady();
@@ -144,22 +151,24 @@
void handleDeletingCompleted();
void handleInstanceViewCreation(int status);
void handleEntryViewCreation(int status);
+ void handleDayViewReady();
private: // Data
CCalenController &mController;
CalenMonthView *mCalenMonthView;
- CalenDayView *mCalenDayView;
+ CalenAgendaView *mCalenAgendaView;
AgendaEventViewer *mCalenEventViewer;
CalenLandscapeDayView *mCalenLandscapeDayView;
CalenSettingsView *mSettingsView;
- CalenDocLoader *mDayViewDocLoader;
+ CalenDocLoader *mAgendaViewDocLoader;
CalenDocLoader *mMonthViewDocLoader;
- CalenDayView *mCalenDayViewAlt;
- CalenDocLoader *mDayViewAltDocLoader;
+ CalenAgendaView *mCalenAgendaViewAlt;
+ CalenDocLoader *mAgendaViewAltDocLoader;
+ CalenNativeView *mCalenDayView;
int mCurrentViewId;
- int mPreviousViewId;
+ int mPreviousViewsId;
int mFirstView;
};
--- a/calendarui/controller/src/calenactionui.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calenactionui.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -142,23 +142,11 @@
if(aCommand.Command()==ECalenShowSettings)
{
- launchSettingsView();
+ iController.ViewManager().launchSettingsView();
}
TRACE_EXIT_POINT;
- return continueCommand; }
-
-// ----------------------------------------------------------------------------
-// CCalenActionUi::launchSettingsView
-// Launches settings view
-// (other items were commented in a header).
-// ----------------------------------------------------------------------------
-//
-void CCalenActionUi::launchSettingsView()
- {
- CalenSettingsView* settingsView = iController.ViewManager().settingsView();
- settingsView->initializeForm();
- iController.Services().MainWindow().setCurrentView(settingsView);
+ return continueCommand;
}
// End of file
--- a/calendarui/controller/src/calenbackgroundstate.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calenbackgroundstate.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -100,6 +100,7 @@
switch( cmd )
{
+ case ECalenAgendaView:
case ECalenDayView:
SetCurrentState(aStateMachine,CCalenStateMachine::ECalenIdleState);
cmdUsed = ETrue;
--- a/calendarui/controller/src/calencontroller.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calencontroller.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -20,6 +20,8 @@
#include <hbmainwindow.h>
#include <hbwidget.h>
#include <hbinstance.h>
+#include <hbapplication.h> //Activity Manager
+#include <xqserviceutil.h> // service utils
// User includes
#include "calencontroller.h" // CCalenController
@@ -46,74 +48,100 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-CCalenController::CCalenController(bool isFromServiceFrmwrk)
+CCalenController::CCalenController()
{
TRACE_ENTRY_POINT;
- iIsFromServiceFrmWrk = isFromServiceFrmwrk;
+ // Check the Application Startup reason, set iIsFromServiceFrmWrk if application
+ // is started by service framework, false otherwise
+ /*Hb::ActivationReasonService == qobject_cast<HbApplication*>(qApp)->activateReason() ?
+ iIsFromServiceFrmWrk = true:
+ iIsFromServiceFrmWrk = false; */
+
+ // Check if calendar is launched thru XQService framework
+ iIsFromServiceFrmWrk = XQServiceUtil::isService(); // Since activateReason
+ //of hbapplication is not returning right value if the activity is started
+ //as services so using the above line temporarily untill a fix is available in
+ // hbappliacation. Need to remove this line after the fix is available for hbapplcation
+
iNextServicesCommandBase = KCustomCommandRangeStart;
iRefCount = 0;
-
- // Store the pointer in tls, also avoid multiple creations
- checkMultipleCreation();
-
- // Get an instance of AgendaUtil interface class
- // This will take care of
- mAgendaUtil = new AgendaUtil();
-
- iStateMachine = CCalenStateMachine::NewL( *this );
-
- // Create the notifier.
- iNotifier = new( ELeave )CalenNotifier( *iStateMachine );
-
- // Construct the context
- mContext = new CalenContextImpl(iNotifier);
-
- // Set the default context.Once will start use of calencmdlinelauncher,
- // Then need to remove this function
- SetDefaultContext();
-
- RArray<TCalenNotification> notificationArray;
- // Complete construction of the notifier and register the
- // global data for notifications
- iNotifier->ConstructL();
+ mAgendaUtil = 0;
- // Create the services
- iServices = CalenServicesImpl::NewL();
- // Create the customisation manager, and register for
- // notifications
- iCustomisationManager = CCalenCustomisationManager::NewL( *this,
- *iServices );
- // Create the view manager, and register for notifications
- iViewManager = new CalenViewManager(*this, isFromServiceFrmwrk );
-
+ TRACE_EXIT_POINT;
+}
+
+// ----------------------------------------------------------------------------
+// CCalenController::constuctController
+// Construct the controller completely
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenController::constructController()
+{
+ // Store the pointer in tls, also avoid multiple creations
+ checkMultipleCreation();
+
+ // Get an instance of AgendaUtil interface class
+ // This will take care of
+ mAgendaUtil = new AgendaUtil();
+
+ iStateMachine = CCalenStateMachine::NewL( *this );
+
+ // Create the notifier.
+ iNotifier = new( ELeave )CalenNotifier( *iStateMachine );
+
+ // Construct the context
+ mContext = new CalenContextImpl(iNotifier);
+
+ // Set the default context.Once will start use of calencmdlinelauncher,
+ // Then need to remove this function
+ SetDefaultContext();
+
+ RArray<TCalenNotification> notificationArray;
+ // Complete construction of the notifier and register the
+ // global data for notifications
+ iNotifier->ConstructL();
+
+ // Create the services
+ iServices = CalenServicesImpl::NewL();
+ // Create the customisation manager, and register for
+ // notifications
+ iCustomisationManager = CCalenCustomisationManager::NewL( *this,
+ *iServices );
+ // Create the view manager, and register for notifications
+ iViewManager = new CalenViewManager(*this);
+
+ iViewManager->SecondPhaseConstruction();
+
hbInstance->allMainWindows().first()->show();
-
- // Create the action uis.
- iActionUi = CCalenActionUi::NewL( *this );
-
- notificationArray.Append(ECalenNotifySettingsChanged);
- notificationArray.Append(ECalenNotifyCheckPluginUnloading);
- notificationArray.Append(ECalenNotifyEComRegistryChanged);
-
- RegisterForNotificationsL( iCustomisationManager,notificationArray);
- notificationArray.Reset();
-
- notificationArray.Append(ECalenNotifyViewPopulationComplete);
- notificationArray.Append(ECalenNotifyExternalDatabaseChanged);
- notificationArray.Append(ECalenNotifyMultipleEntriesDeleted);
- notificationArray.Append(ECalenNotifyDialogClosed);
- notificationArray.Append(ECalenNotifyEntrySaved);
- notificationArray.Append(ECalenNotifyEntryDeleted);
- notificationArray.Append(ECalenNotifyInstanceDeleted);
- notificationArray.Append(ECalenNotifySystemLocaleChanged);
- notificationArray.Append(ECalenNotifySystemTimeChanged);
- notificationArray.Append(ECalenNotifyEntryClosed);
- notificationArray.Append(ECalenNotifySettingsClosed);
-
- RegisterForNotificationsL( iViewManager, notificationArray );
- notificationArray.Reset();
- notificationArray.Close();
- TRACE_EXIT_POINT;
+
+ // Create the action uis.
+ iActionUi = CCalenActionUi::NewL( *this );
+
+ notificationArray.Append(ECalenNotifySettingsChanged);
+ notificationArray.Append(ECalenNotifyCheckPluginUnloading);
+ notificationArray.Append(ECalenNotifyEComRegistryChanged);
+ notificationArray.Append(ECalenNotifySystemLanguageChanged);
+
+ RegisterForNotificationsL( iCustomisationManager,notificationArray);
+ notificationArray.Reset();
+
+ notificationArray.Append(ECalenNotifyViewPopulationComplete);
+ notificationArray.Append(ECalenNotifyExternalDatabaseChanged);
+ notificationArray.Append(ECalenNotifyMultipleEntriesDeleted);
+ notificationArray.Append(ECalenNotifyDialogClosed);
+ notificationArray.Append(ECalenNotifyEntrySaved);
+ notificationArray.Append(ECalenNotifyEntryDeleted);
+ notificationArray.Append(ECalenNotifyInstanceDeleted);
+ notificationArray.Append(ECalenNotifySystemLocaleChanged);
+ notificationArray.Append(ECalenNotifySystemLanguageChanged);
+ notificationArray.Append(ECalenNotifySystemTimeChanged);
+ notificationArray.Append(ECalenNotifyEntryClosed);
+ notificationArray.Append(ECalenNotifySettingsClosed);
+
+ RegisterForNotificationsL( iViewManager, notificationArray );
+ notificationArray.Reset();
+ notificationArray.Close();
}
void CCalenController::checkMultipleCreation()
@@ -222,24 +250,36 @@
CCalenController::~CCalenController()
{
TRACE_ENTRY_POINT;
-
+
+ if(iStateMachine) {
+ delete iStateMachine;
+ iStateMachine = NULL;
+ }
+
if ( iServices )
{
iServices->Release();
}
+ if( mContext )
+ {
+ delete mContext;
+ mContext = NULL;
+ }
+ // iActionUi has to be deleted before iNotifier
+ // as the unregistering of the notifications has to be done
+ if( iActionUi )
+ {
+ delete iActionUi;
+ iActionUi = NULL;
+ }
+
if( iNotifier )
{
delete iNotifier;
iNotifier = NULL;
}
- if( iActionUi )
- {
- delete iActionUi;
- iActionUi = NULL;
- }
-
if( iViewManager )
{
delete iViewManager;
@@ -251,7 +291,11 @@
delete iCustomisationManager;
iCustomisationManager = NULL;
}
-
+
+ if (mAgendaUtil) {
+ delete mAgendaUtil;
+ mAgendaUtil = 0;
+ }
Dll::SetTls( NULL );
@@ -506,7 +550,7 @@
{
TRACE_ENTRY_POINT;
QDateTime focusTime = mContext->defaultCalTimeForViewsL();
- mContext->setFocusDateAndTimeL(focusTime,KCalenDayViewUidValue );
+ mContext->setFocusDateAndTime(focusTime);
TRACE_EXIT_POINT;
}
@@ -561,13 +605,10 @@
if (iIsFromServiceFrmWrk) {
// Set the context properly
- mContext->setFocusDateAndTimeL(dateTime,KCalenMonthViewUidValue);
+ mContext->setFocusDateAndTime(dateTime);
// launch the appropriate view
iViewManager->constructAndActivateView(view);
- // Construct other views
- iViewManager->constructOtherViews();
-
} else { // Calendar was in backgroung but now its being brought to foreground
// If current state is editing state or printing state
// or deleting state or sending state, then dont do anything as
@@ -580,7 +621,7 @@
// simply return - we dont have anything to do
} else {
// Set the context properly
- mContext->setFocusDateAndTimeL(dateTime,KCalenMonthViewUidValue);
+ mContext->setFocusDateAndTime(dateTime);
IssueCommandL(view);
}
}
@@ -601,4 +642,26 @@
}
+// ----------------------------------------------------------------------------
+// CCalenController::eventFilter
+// Filters and handles the changes in events
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+bool CCalenController::eventFilter(QObject *object, QEvent *event)
+{
+ switch (event->type())
+ {
+ case QEvent::LanguageChange:
+ //TODO: Unload the translator and install the locale specific translator
+ iNotifier->BroadcastNotification( ECalenNotifySystemLanguageChanged );
+ break;
+ case QEvent::LocaleChange:
+ // TODO: handle the locale changes
+ break;
+ default:
+ break;
+ }
+ return QObject::eventFilter(object, event);
+}
// End of file
--- a/calendarui/controller/src/calendeleteui.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calendeleteui.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -35,7 +35,6 @@
#include "CleanupResetAndDestroy.h"
#include "caleninstanceid.h"
#include "calenactionuiutils.h"
-#include "CalendarPrivateCRKeys.h" // includes CalendarInternalCRKeys.h
#include "calendateutils.h"
#include "calenagendautils.h"
@@ -299,29 +298,25 @@
// Fetch the entry
AgendaEntry entry = iController.Services().agendaInterface()->fetchById(
iController.context().instanceId().mEntryLocalUid);
-
- // Check if the entry is a To-Do
- if (AgendaEntry::TypeTodo == entry.type()) {
- if(!entry.isNull()) {
- showDeleteQuery(entry.type() == AgendaEntry::TypeTodo ?
- EDeleteToDo :
- EDeleteEntry );
+ // Check if the entry is a To-Do
+ if (AgendaEntry::TypeTodo == entry.type()) {
+ showDeleteQuery(EDeleteToDo);
+ } else {
+ // Show the repeat entry delete query for repeating entries except Anniversary
+ // Even though the anniversary is repeating
+ // all the instances will be deleted
+ if ((entry.isRepeating() || !entry.recurrenceId().isNull())
+ && (AgendaEntry::TypeAnniversary != entry.type())) {
+ // Show a confirmation note whether the user
+ // wants to delete the single instance or all of them
+ showRepeatingEntryDeleteQuery();
+ } else {
+ // If the entry is not a repeating entry,
+ // delete it directly
+ // Save the entry for later reference in the slot
+ showDeleteQuery(EDeleteEntry);
+ }
}
- }
- else {
- if (entry.isRepeating() || !entry.recurrenceId().isNull()) {
- // Show a confirmation note whether the user
- // wants to delete the single instance or all of them
- showRepeatingEntryDeleteQuery();
- } else {
- // If the entry is not a repeating entry,
- // delete it directly
- // Save the entry for later reference in the slot
- showDeleteQuery(entry.type() == AgendaEntry::TypeTodo ?
- EDeleteToDo :
- EDeleteEntry );
- }
- }
}
TRACE_EXIT_POINT;
}
@@ -334,7 +329,9 @@
//
void CalenDeleteUi::DeleteAllEntriesL()
{
- ASSERT( !iIsDeleting );
+ if(iIsDeleting) {
+ return;
+ }
showDeleteQuery(EDeleteAll );
}
@@ -348,8 +345,9 @@
void CalenDeleteUi::DeleteEntriesBeforeDateL()
{
TRACE_ENTRY_POINT;
- ASSERT( !iIsDeleting );
-
+ if(iIsDeleting) {
+ return;
+ }
// launch the datepicker
dateQuery();
TRACE_EXIT_POINT;
@@ -381,9 +379,11 @@
mDatePicker->setDate(currentDate);
popUp->setContentWidget(mDatePicker);
-
- popUp->addAction(new HbAction(hbTrId("txt_calendar_button_dialog_delete")));
- popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"),popUp));
+ mDeleteAction = new HbAction(
+ hbTrId("txt_calendar_button_dialog_delete"), popUp);
+ popUp->addAction(mDeleteAction);
+ mCancelAction = new HbAction(hbTrId("txt_common_button_cancel"),popUp);
+ popUp->addAction(mCancelAction);
// Show the popup
popUp->open(this, SLOT(handleDateQuery(HbAction*)));
}
@@ -396,11 +396,38 @@
//
void CalenDeleteUi::handleDateQuery(HbAction* action)
{
- if(action->text() == hbTrId("txt_calendar_button_dialog_delete")) {
- getSelectedDateAndDelete();
+ if(action == mDeleteAction) {
+ // User selected the date before which all the entries has to be deleted
+ QDate selectedDate(mDatePicker->date());
+ // Check if the date is within the range.
+ if(selectedDate.isValid()) {
+ QTime time(0,0,0,0);
+ QDateTime dateTime;
+ dateTime.setDate(selectedDate);
+ dateTime.setTime(time);
+ // Do delete only if inputted day is after beginning of range
+ if(dateTime > AgendaUtil::minTime()) {
+ // Two pass delete:
+ // 1. pass
+ // To prevent destroying entries starting and ending midnight
+ // subtract one second and do delete on that range.
+ dateTime = dateTime.addSecs(-1);
+ dateTime = ( dateTime > AgendaUtil::minTime()?
+ dateTime : AgendaUtil::minTime());
+
+ HandleDeleteMultipleEventsL( AgendaUtil::minTime(),
+ dateTime, 1);
+ }else {
+ iController.BroadcastNotification(ECalenNotifyDeleteFailed);
+ }
+ }
}else {
+ // User pressed cancel
handleDeleteCancel();
}
+ // Reset the member variables
+ mDeleteAction = NULL;
+ mCancelAction = NULL;
}
// ----------------------------------------------------------------------------
// CalenDeleteUi::showRepeatingEntryDeleteQuery
@@ -458,63 +485,33 @@
iController.BroadcastNotification(ECalenNotifyDeleteFailed);
}
-// ----------------------------------------------------------------------------
-// CalenDeleteUi::getSelectedDateAndDelete
-// Deletes the entries before the selected date
-// (other items were commented in a header).
-// ----------------------------------------------------------------------------
-//
-void CalenDeleteUi::getSelectedDateAndDelete()
+void CalenDeleteUi::handleRepeatedEntryDelete(int index)
{
- QDate selectedDate(mDatePicker->date());
+ // Fetch the entry
+ // Find all possible instances
+ AgendaEntry instance = CalenActionUiUtils::findPossibleInstanceL(
+ iController.context().instanceId(),
+ iController.Services().agendaInterface());
- // Check if the date is within the range.
- if(selectedDate.isValid()) {
- QTime time(0,0,0,0);
- QDateTime dateTime;
- dateTime.setDate(selectedDate);
- dateTime.setTime(time);
- // Do delete only if inputted day is after beginning of range
- if(dateTime > AgendaUtil::minTime()) {
- // Two pass delete:
- // 1. pass
- // To prevent destroying entries starting and ending midnight
- // subtract one second and do delete on that range.
- dateTime = dateTime.addSecs(-1);
- dateTime = ( dateTime > AgendaUtil::minTime()? dateTime : AgendaUtil::minTime());
-
- HandleDeleteMultipleEventsL( AgendaUtil::minTime(), dateTime,1 );
- iController.BroadcastNotification(ECalenNotifyEntryDeleted);
- }else {
- iController.BroadcastNotification(ECalenNotifyDeleteFailed);
+ if (!instance.isNull()) {
+ connect(iController.Services().agendaInterface(),
+ SIGNAL(entryDeleted(ulong)),
+ this, SLOT(entryDeleted(ulong)));
+ switch(index) {
+ case 0:
+ // User wants to delete only this occurence
+ iController.Services().agendaInterface()->deleteRepeatedEntry(
+ instance, AgendaUtil::ThisOnly);
+ break;
+ case 1:
+ // User wants to delete all the occurences
+ iController.Services().agendaInterface()->deleteRepeatedEntry(
+ instance, AgendaUtil::ThisAndAll);
+ break;
}
}
}
-void CalenDeleteUi::handleRepeatedEntryDelete(int index)
-{
- // Fetch the entry
- // Find all possible instances
- AgendaEntry instance = CalenActionUiUtils::findPossibleInstanceL(
- iController.context().instanceId(),
- iController.Services().agendaInterface());
-
- if (!instance.isNull()) {
- connect(iController.Services().agendaInterface(), SIGNAL(entryDeleted(ulong)),
- this, SLOT(entryDeleted(ulong)));
- switch(index) {
- case 0:
- // User wants to delete only this occurence
- iController.Services().agendaInterface()->deleteRepeatedEntry(instance, AgendaUtil::ThisOnly);
- break;
- case 1:
- // User wants to delete all the occurences
- iController.Services().agendaInterface()->deleteRepeatedEntry(instance, AgendaUtil::ThisAndAll);
- break;
- }
- }
-}
-
// ----------------------------------------------------------------------------
// CalenDeleteUi::showDeleteQuery
// Launches the popup for deleting the instance/instances
@@ -535,8 +532,7 @@
{
case EDeleteEntry:
{
- // TODO: Add the text id
- text.append("Delete entry?");
+ text.append(hbTrId("txt_calendar_info_delete_meeting"));
break;
}
case EDeleteToDo:
@@ -566,9 +562,11 @@
{
popup->removeAction(list[i]);
}
- popup->addAction(new HbAction(hbTrId("txt_calendar_button_delete"), popup));
- popup->addAction(new HbAction(
- hbTrId("txt_calendar_button_cancel"), popup));
+ mDeleteAction = new HbAction(
+ hbTrId("txt_calendar_button_dialog_delete"), popup);
+ popup->addAction(mDeleteAction);
+ mCancelAction = new HbAction(hbTrId("txt_calendar_button_cancel"), popup);
+ popup->addAction(mCancelAction);
popup->open(this, SLOT(handleDeletion(HbAction*)));
}
@@ -582,19 +580,19 @@
{
TCalenNotification notification = ECalenNotifyDeleteFailed;
- if(action->text() == hbTrId("txt_calendar_button_delete")) {
+ if(action == mDeleteAction) {
switch (mDeleteCommand) {
case ECalenDeleteCurrentEntry:
{
- // Get the entry
- AgendaEntry entry =
- iController.Services().agendaInterface()->fetchById(
- iController.context().instanceId().mEntryLocalUid);
+ // Get the entry id
+ ulong id = iController.context().instanceId().mEntryLocalUid;
+ connect(iController.Services().agendaInterface(),
+ SIGNAL(entryDeleted(ulong)),
+ this, SLOT(entryDeleted(ulong)));
// Delete the entry if the delete button is been pressed
- iController.Services().agendaInterface()->deleteEntry(entry.id());
- notification = ECalenNotifyEntryDeleted;
+ iController.Services().agendaInterface()->deleteEntry(id);
}
break;
@@ -605,15 +603,18 @@
CalenActionUiUtils::findPossibleInstanceL(
iController.context().instanceId(),
iController.Services().agendaInterface() );
- QDateTime recId = instance.recurrenceId().toUTC();
- const bool child = recId.isNull();
-
- if( !child || mRecurrenceRange == AgendaUtil::ThisOnly
- || mRecurrenceRange == AgendaUtil::ThisAndAll) {
- iController.Services().agendaInterface()->deleteRepeatedEntry(
- instance, mRecurrenceRange );
+ if(!instance.isNull()) {
+ QDateTime recId = instance.recurrenceId().toUTC();
+ const bool child = recId.isNull();
+ connect(iController.Services().agendaInterface(),
+ SIGNAL(entryDeleted(ulong)),
+ this, SLOT(entryDeleted(ulong)));
+ if( !child || mRecurrenceRange == AgendaUtil::ThisOnly
+ || mRecurrenceRange == AgendaUtil::ThisAndAll) {
+ iController.Services().agendaInterface()->deleteRepeatedEntry(
+ instance, mRecurrenceRange );
+ }
}
- notification = ECalenNotifyEntryDeleted;
}
break;
@@ -621,7 +622,6 @@
{
HandleDeleteMultipleEventsL( AgendaUtil::minTime(),
AgendaUtil::maxTime(),1 );
- notification = ECalenNotifyEntryDeleted;
}
break;
@@ -634,6 +634,10 @@
// ECalenNotifyDeleteFailed as default.
// Notify the status
iController.BroadcastNotification(notification);
+
+ // Reset the member variables
+ mDeleteAction = NULL;
+ mCancelAction = NULL;
}
void CalenDeleteUi::entryDeleted(ulong id)
@@ -656,9 +660,10 @@
int aConfNoteId )
{
TRACE_ENTRY_POINT;
-
- ASSERT( !iIsDeleting );
+ if(iIsDeleting) {
+ return;
+ }
iConfirmationNoteId = aConfNoteId;
DeleteDayRangeL( aFirstDay, aLastDay );
@@ -756,7 +761,7 @@
// for CCalEntry type.
// First check that if _instance_ ends at midnight, but starts earlier
- if( CalenAgendaUtils::endsAtStartOfDayL( entry, aMidnight ) )
+ if( CalenAgendaUtils::endsAtStartOfDay( entry, aMidnight ) )
{
// Second, check that _entry's_ endtime is exactly the midnight
// This prevents us from destroying repeating entries, that has one
@@ -833,8 +838,7 @@
if( !aHasRepeatType && ( child || repeating ) &&
( aInstance.type() != AgendaEntry::TypeAnniversary ) ) {
- //doDelete = CalenActionUiUtils::ShowRepeatTypeQueryL( aRepeatType,
- // CalenActionUiUtils::EDelete );
+ showRepeatingEntryDeleteQuery();
}
else
{
--- a/calendarui/controller/src/calendocloader.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calendocloader.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -18,14 +18,15 @@
// User includes
#include "calendocloader.h"
-#include "calendayview.h"
-#include "calendayviewwidget.h"
+#include "calenagendaview.h"
+#include "calenagendaviewwidget.h"
#include "calenmonthview.h"
#include "calenmonthgrid.h"
#include "calenpreviewpane.h"
#include "calencontroller.h"
#include "calenthicklinesdrawer.h"
#include "calencommon.h"
+#include "calenpluginlabel.h"
// ----------------------------------------------------------------------------
// CalenDocLoader::CalenDocLoader
@@ -62,14 +63,14 @@
const QString &name)
{
MCalenServices &services = mController.Services();
- if (name == QString(CALEN_DAYVIEW)) {
- QObject *calenDayView = new CalenDayView(services);
- calenDayView->setObjectName(name);
- return calenDayView;
- } else if (name == QString(CALEN_DAYVIEW_WIDGET)) {
- QObject *calenDayViewWidget = new CalenDayViewWidget(services, this);
- calenDayViewWidget->setObjectName(name);
- return calenDayViewWidget;
+ if (name == QString(CALEN_AGENDAVIEW)) {
+ QObject *calenAgendaView = new CalenAgendaView(services);
+ calenAgendaView->setObjectName(name);
+ return calenAgendaView;
+ } else if (name == QString(CALEN_AGENDAVIEW_WIDGET)) {
+ QObject *calenAgendaViewWidget = new CalenAgendaViewWidget(services, this);
+ calenAgendaViewWidget->setObjectName(name);
+ return calenAgendaViewWidget;
} else if (name == QString(CALEN_MONTHVIEW)) { // For Month View
QObject *calenMonthView = new CalenMonthView(services);
calenMonthView->setObjectName(name);
@@ -80,17 +81,17 @@
return calenMonthGrid;
} else if(name == QString(CALEN_PREVPREVIEWPANE)) {
QObject *prevPreviewPane =
- new CalenPreviewPane(mController.Services());
+ new CalenPreviewPane(services);
prevPreviewPane->setObjectName(name);
return prevPreviewPane;
} else if(name == QString(CALEN_CURRPREVIEWPANE)) {
QObject *currPreviewPane =
- new CalenPreviewPane(mController.Services());
+ new CalenPreviewPane(services);
currPreviewPane->setObjectName(name);
return currPreviewPane;
} else if(name == QString(CALEN_NEXTPREVIEWPANE)) {
QObject *nextPreviewPane =
- new CalenPreviewPane(mController.Services());
+ new CalenPreviewPane(services);
nextPreviewPane->setObjectName(name);
return nextPreviewPane;
} else if (name == QString(CALEN_DAYNAMES_WIDGET)) {
@@ -103,7 +104,19 @@
new CalenThickLinesDrawer(CalendarNamespace::CalenWeekNumWidget);
calenSWeekNumWidget->setObjectName(name);
return calenSWeekNumWidget;
- } else {
+ } else if (name == QString(CALEN_PREVREGIONALINFO)) {
+ QObject *calenPrevRegionalLabel = new CalenPluginLabel(services);
+ calenPrevRegionalLabel->setObjectName(name);
+ return calenPrevRegionalLabel;
+ } else if (name == QString(CALEN_CURRREGIONALINFO)) {
+ QObject *calencurrRegionalLabel = new CalenPluginLabel(services);
+ calencurrRegionalLabel->setObjectName(name);
+ return calencurrRegionalLabel;
+ } else if (name == QString(CALEN_NEXTREGIONALINFO)) {
+ QObject *calenNextRegionalLabel = new CalenPluginLabel(services);
+ calenNextRegionalLabel->setObjectName(name);
+ return calenNextRegionalLabel;
+ } else {
return HbDocumentLoader::createObject(type, name);
}
}
--- a/calendarui/controller/src/caleneditui.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/caleneditui.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -56,7 +56,7 @@
CCalenEditUi::~CCalenEditUi()
{
TRACE_ENTRY_POINT;
-
+ iController.CancelNotifications(this);
TRACE_EXIT_POINT;
}
@@ -102,7 +102,7 @@
TInt command = aCommand.Command();
MCalenContext& context = iController.Services().Context();
AgendaEntry editedEntry;
- QDateTime newEntryDateTime = iController.context().focusDateAndTimeL();
+ QDateTime newEntryDateTime = iController.context().focusDateAndTime();
// Check if it is not on same day and set the default time and date accordingly.
bool isSameDay = CalenDateUtils::isOnToday(newEntryDateTime);
@@ -122,15 +122,17 @@
context.instanceId().mEntryLocalUid );
// For repeating entry, we need to update proper start time here
// from the context
- if (editedEntry.isRepeating()) {
- // Get the instancde time frm the context
- QDateTime instanceTime = context.focusDateAndTimeL();
- editedEntry.setStartAndEndTime(instanceTime, editedEntry.endTime());
+ if(!editedEntry.isNull()) {
+ if (editedEntry.isRepeating()) {
+ // Get the instancde time frm the context
+ QDateTime instanceTime = context.focusDateAndTime();
+ editedEntry.setStartAndEndTime(instanceTime, editedEntry.endTime());
+ }
+ iEditor= new CalenEditor(iController.Services().agendaInterface());
+ iEditor->edit(editedEntry, false);
+ connect(iEditor, SIGNAL(entrySaved()), this, SLOT(handleEntrySaved()));
+ connect(iEditor, SIGNAL(dialogClosed()), this, SLOT(handleDialogClosed()));
}
- iEditor= new CalenEditor(iController.Services().agendaInterface());
- iEditor->edit(editedEntry, false);
- connect(iEditor, SIGNAL(entrySaved()), this, SLOT(handleEntrySaved()));
- connect(iEditor, SIGNAL(dialogClosed()), this, SLOT(handleDialogClosed()));
break;
default:
// Controller decided this class was the place to handle this
--- a/calendarui/controller/src/calenidlestate.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calenidlestate.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -96,8 +96,8 @@
switch( cmd )
{
case ECalenMonthView:
- case ECalenWeekView:
case ECalenDayView:
+ case ECalenAgendaView:
case ECalenStartActiveStep:
{
// set previous state to idle
--- a/calendarui/controller/src/calensettingsstate.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calensettingsstate.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -103,8 +103,8 @@
}
break;
case ECalenMonthView:
+ case ECalenAgendaView:
case ECalenDayView:
- case ECalenLandscapeDayView:
case ECalenStartActiveStep:
{
// set previous state to idle
@@ -151,6 +151,11 @@
ActivateCurrentStateL(aStateMachine);
}
break;
+ case ECalenNotifySystemLocaleChanged:
+ {
+ CCalenState::HandleNotificationL( aNotification, aStateMachine );
+ }
+ break;
default:
// default is defer all other notifications when we are in setting state
iOutstandingNotifications.InsertL(aNotification);
--- a/calendarui/controller/src/calenstatemachine.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calenstatemachine.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -156,12 +156,8 @@
{
TRACE_ENTRY_POINT;
- TRAPD(error,iStates[iCurrentState]->HandleNotificationL( aNotification, *this));
- if(error!=KErrNone)
- {
- // do avoid warning
- }
-
+ TRAP_IGNORE(iStates[iCurrentState]->HandleNotificationL( aNotification, *this));
+
TRACE_EXIT_POINT;
}
--- a/calendarui/controller/src/calenviewmanager.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/controller/src/calenviewmanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -17,8 +17,10 @@
//system includes
-#include <QDebug>
#include <hbmainwindow.h>
+#include <hbinstance.h>
+#include <hbapplication.h> // hbapplication
+#include <xqserviceutil.h> // service utils
//user includes
#include "calenviewmanager.h"
@@ -26,7 +28,7 @@
#include "hb_calencommands.hrh"
#include "calenservicesimpl.h"
#include "calenmonthview.h"
-#include "calendayview.h"
+#include "calenagendaview.h"
#include "calenmonthview.h"
#include "agendaeventviewer.h"
#include "calennotificationhandler.h"
@@ -36,6 +38,7 @@
#include "calendocloader.h"
#include "calendarui_debug.h"
#include "calencommon.h"
+#include "calendayview.h"
// ----------------------------------------------------------------------------
// CalenViewManager::CalenViewManager
@@ -43,19 +46,21 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-CalenViewManager::CalenViewManager( CCalenController& aController,
- bool isFromServiceFrmwrk)
+CalenViewManager::CalenViewManager( CCalenController& aController)
: mController(aController)
{
TRACE_ENTRY_POINT;
+ // Following block intializes member variables
mCalenEventViewer = NULL;
mMonthViewDocLoader = NULL;
- mDayViewDocLoader = NULL;
- mDayViewAltDocLoader = NULL;
+ mAgendaViewDocLoader = NULL;
+ mAgendaViewAltDocLoader = NULL;
+ mCalenAgendaView = NULL;
+ mCalenMonthView = NULL;
+ mCalenAgendaViewAlt = NULL;
+ mSettingsView = NULL;
mCalenDayView = NULL;
- mCalenMonthView = NULL;
- mCalenDayViewAlt = NULL;
// Connect to instance view and entry view creation signals from agenda
// interface
@@ -64,28 +69,85 @@
connect(mController.agendaInterface(), SIGNAL(entryViewCreationCompleted(int)),
this, SLOT(handleEntryViewCreation(int)));
- if (isFromServiceFrmwrk) {
- // Dont load any views until our remote slot gets called in
- // calenserviceprovider.cpp
- // Just have an empty mainwindow
- } else {
- // Do the normal startup
- // Load the month view and active it and add it to main window
- mFirstView = ECalenMonthView;
- loadMonthView();
- ActivateDefaultViewL(ECalenMonthView);
- // Connect to the view ready signal so that we construct other view
- // once this view is shown
- connect(&mController.MainWindow(), SIGNAL(viewReady()),
- this, SLOT(handleMainViewReady()));
-
- mController.MainWindow().addView(mCalenMonthView);
- mController.MainWindow().setCurrentView(mCalenMonthView);
- }
-
TRACE_EXIT_POINT;
}
+void CalenViewManager::SecondPhaseConstruction()
+{
+
+ TRACE_ENTRY_POINT;
+
+ // Check the Application Startup reason from Activity Manager
+ int activityReason = qobject_cast<HbApplication*>(qApp)->activateReason();
+
+ // Check if calendar is launched thru XQService framework
+ bool isFromServiceFrmWrk = XQServiceUtil::isService(); // Since activateReason
+ //of hbapplication is not returning right value if the activity is started
+ //as services so using the above line temporarily untill a fix is available in
+ // hbappliacation. Need to remove this line after the fix is available for hbapplcation
+
+
+ if (Hb::ActivationReasonActivity == activityReason) // Check if application is started
+ // as an activity
+ {
+ // Application is started from an activity
+ // Extract activity data
+ QVariant data = qobject_cast<HbApplication*>(qApp)->activateData();
+ // Restore state from activity data
+ QByteArray serializedModel = data.toByteArray();
+ QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+ int viewId; // int declared for debugging purpose
+ stream >> viewId; // read stream into an int
+
+ mFirstView = viewId;
+ if (ECalenMonthView == viewId) // Check if Activity was stored for month view
+ {
+ loadMonthView(); // Load month view
+ }
+ else if (ECalenAgendaView == viewId) // Check if Activity was stored for agenda view
+ {
+ loadAgendaView(); // Load agenda view
+ }
+
+ ActivateDefaultViewL(viewId);
+ // Connect to the view ready signal so that we can construct other views
+ // once this view is ready
+ connect(&mController.MainWindow(), SIGNAL(viewReady()),
+ this, SLOT(handleMainViewReady()));
+
+ if (ECalenMonthView == viewId) // Check if Activity was stored for month view
+ {
+ mController.MainWindow().addView(mCalenMonthView); // Add month view to main window
+ mController.MainWindow().setCurrentView(mCalenMonthView); // Set month view as current view
+ }
+ else if (ECalenAgendaView == viewId) // Check if Activity was stored for agenda view
+ {
+ mController.MainWindow().addView(mCalenAgendaView); // Add agenda view to main window
+ mController.MainWindow().setCurrentView(mCalenAgendaView); // Set agenda view as current view
+ }
+ } else if (isFromServiceFrmWrk/*Hb::ActivationReasonService == activityReason*/) {
+ // Dont load any views until our remote slot gets called in
+ // calenserviceprovider.cpp
+ // Just have an empty mainwindow
+ } else {
+ // Do the normal startup
+ // Load the month view and active it and add it to main window
+ mFirstView = ECalenMonthView;
+ loadMonthView();
+ ActivateDefaultViewL(ECalenMonthView);
+ // Connect to the view ready signal so that we construct other view
+ // once this view is shown
+ connect(&mController.MainWindow(), SIGNAL(viewReady()),
+ this, SLOT(handleMainViewReady()));
+
+ mController.MainWindow().addView(mCalenMonthView);
+ mController.MainWindow().setCurrentView(mCalenMonthView);
+ }
+
+ TRACE_EXIT_POINT;
+
+}
+
// ----------------------------------------------------------------------------
// CalenViewManager::~CalenViewManager
// Destructor.
@@ -96,12 +158,22 @@
{
TRACE_ENTRY_POINT;
- delete mCalenMonthView;
- delete mCalenDayView;
- delete mSettingsView;
- delete mDayViewDocLoader;
- delete mDayViewAltDocLoader;
- delete mMonthViewDocLoader;
+ if (mSettingsView) {
+ delete mSettingsView;
+ mSettingsView = 0;
+ }
+ if (mAgendaViewDocLoader) {
+ delete mAgendaViewDocLoader;
+ mAgendaViewDocLoader = 0;
+ }
+ if (mAgendaViewAltDocLoader) {
+ delete mAgendaViewAltDocLoader;
+ mAgendaViewAltDocLoader = 0;
+ }
+ if (mMonthViewDocLoader) {
+ delete mMonthViewDocLoader;
+ mMonthViewDocLoader = 0;
+ }
TRACE_EXIT_POINT;
}
@@ -129,13 +201,13 @@
// Add month view to mainwindow.
mController.MainWindow().addView(mCalenMonthView);
mController.MainWindow().setCurrentView(mCalenMonthView);
- } else if (view == ECalenDayView) {
- mFirstView = ECalenDayView;
- loadDayView();
- ActivateDefaultViewL(ECalenDayView);
- // Add day view to mainwindow.
- mController.MainWindow().addView(mCalenDayView);
- mController.MainWindow().setCurrentView(mCalenDayView);
+ } else if (view == ECalenAgendaView) {
+ mFirstView = ECalenAgendaView;
+ loadAgendaView();
+ ActivateDefaultViewL(ECalenAgendaView);
+ // Add agenda view to mainwindow.
+ mController.MainWindow().addView(mCalenAgendaView);
+ mController.MainWindow().setCurrentView(mCalenAgendaView);
}
TRACE_EXIT_POINT;
}
@@ -176,37 +248,38 @@
}
// ----------------------------------------------------------------------------
-// CalenViewManager::loadDayView
-// Loads the day view frm the docml
+// CalenViewManager::loadAgendaView
+// Loads the agenda view frm the docml
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-void CalenViewManager::loadDayView()
+void CalenViewManager::loadAgendaView()
{
bool loadSuccess = false;
- // Create the day view docloader object.
- mDayViewDocLoader = new CalenDocLoader(mController);
+ // Create the agenda view docloader object.
+ mAgendaViewDocLoader = new CalenDocLoader(mController);
// Load default section
- mDayViewDocLoader->load(CALEN_DAYVIEW_XML_FILE, &loadSuccess);
+ mAgendaViewDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, &loadSuccess);
if (!loadSuccess) {
qFatal("calenviewmanager.cpp : Unable to load XML");
}
- // Get the calenday view from the loader
- mCalenDayView = static_cast<CalenDayView *> (mDayViewDocLoader->findWidget(CALEN_DAYVIEW));
- if (!mCalenDayView) {
- qFatal("calenviewmanager.cpp : Unable to find day view");
+ // Get the calenagenda view from the loader
+ mCalenAgendaView = static_cast<CalenAgendaView *> (mAgendaViewDocLoader->findWidget(CALEN_AGENDAVIEW));
+ if (!mCalenAgendaView) {
+ qFatal("calenviewmanager.cpp : Unable to find agenda view");
}
- // Setup the day view
- mCalenDayView->setupView(mDayViewDocLoader);
+ // Setup the agenda view
+ mCalenAgendaView->setupView(mAgendaViewDocLoader);
// The following code is done to provide swipe support
- // in day view. Idea is to create two views and keep
+ // in agenda view. Idea is to create two views and keep
// switiching between these two using view switch effects
// to provide an illusion of flow to the user
- loadAlternateDayView();
+ loadAlternateAgendaView();
+
}
// ----------------------------------------------------------------------------
@@ -225,6 +298,10 @@
// Construct other views
constructOtherViews();
+ // Install the event filter for the controller once the view is ready
+ // so that system language/locale changes can be handled
+ //hbInstance->allMainWindows().first()->installEventFilter(&mController);
+
// disconnect the view ready signal as we dont need it anymore
disconnect(&mController.MainWindow(), SIGNAL(viewReady()),
this, SLOT(handleMainViewReady()));
@@ -241,18 +318,29 @@
// Load all other views except mFirstView
// NOTE: Right now, since Calendar has only two views, month view
- // and day view, when client launches day view, then there is no need
+ // and agenda view, when client launches agenda view, then there is no need
// to construct the month view as per UI REQ., but tomorrow if new views
- // come after day view, then we need to construct those views if they are
+ // come after agenda view, then we need to construct those views if they are
// native views. Right now, there is a event viewer but its not a native
- // view. Hence, if day view is launched, dont construct month view
- if (mFirstView == ECalenDayView) {
- // Construct other views as mentioned above
- return;
- } else {
+ // view. Hence, if agenda view is launched, dont construct month view
+ if (mFirstView != ECalenAgendaView) // check if agenda view is not already loaded
+ {
// Load all other views
- loadDayView();
+ loadAgendaView();
+
+ if (!mCalenDayView) {
+ mCalenDayView = new CalenDayView(mController.Services());
+ }
}
+ else //agenda view was launched as first view
+ {
+ // No implementation yet. UI specs not clear
+ // to be commented in with some more code once UI specs is frozen
+ // for agenda view launching as first view after it was saved as activity
+ // when it was launched from month view
+ // loadMonthView();
+ // mCalenMonthView->doLazyLoading();
+ }
// Setup the settings view
mSettingsView = new CalenSettingsView(mController.Services());
@@ -277,31 +365,35 @@
void CalenViewManager::showNextDay()
{
// Set the context for the next day
- QDateTime currentDay = mController.Services().Context().focusDateAndTimeL();
+ QDateTime currentDay = mController.Services().Context().focusDateAndTime();
currentDay = currentDay.addDays(1);
- mController.Services().Context().setFocusDateL(currentDay, ECalenDayView);
- mCurrentViewId = ECalenDayView;
+ mController.Services().Context().setFocusDate(currentDay);
+ mCurrentViewId = ECalenAgendaView;
// Check which is the currently activated view
- if (mController.MainWindow().currentView() == mCalenDayView) {
- HbEffect::add(mCalenDayView,
+ if (mController.MainWindow().currentView() == mCalenAgendaView) {
+ mCalenAgendaView->disconnectAboutToQuitEvent(); // disconnect mCalenAgendaView to get aboutToQuit Events
+ HbEffect::add(mCalenAgendaView,
":/fxml/view_hide",
"hide");
- HbEffect::add(mCalenDayViewAlt,
+ HbEffect::add(mCalenAgendaViewAlt,
":/fxml/view_show",
"show");
- // Set the other day view as the current view
+ // Set the other agenda view as the current view
// and animate to provide illusion of swipe
- mCalenDayViewAlt->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayViewAlt, true, Hb::ViewSwitchUseNormalAnim);
+ // It would also connect for aboutToQuit events
+ mCalenAgendaViewAlt->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaViewAlt, true, Hb::ViewSwitchUseNormalAnim);
} else {
- HbEffect::add(mCalenDayViewAlt,
+ mCalenAgendaViewAlt->disconnectAboutToQuitEvent(); // disconnect mCalenAgendaViewAlt to get aboutToQuit Events
+ HbEffect::add(mCalenAgendaViewAlt,
":/fxml/view_hide",
"hide");
- HbEffect::add(mCalenDayView,
+ HbEffect::add(mCalenAgendaView,
":/fxml/view_show",
"show");
- mCalenDayView->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayView, true, Hb::ViewSwitchUseNormalAnim);
+ // It would also connect for aboutToQuit events
+ mCalenAgendaView->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaView, true, Hb::ViewSwitchUseNormalAnim);
}
}
@@ -312,42 +404,55 @@
//
void CalenViewManager::showPrevDay()
{
- QDateTime currentDay = mController.Services().Context().focusDateAndTimeL();
+ QDateTime currentDay = mController.Services().Context().focusDateAndTime();
currentDay = currentDay.addDays(-1);
- mController.Services().Context().setFocusDateL(currentDay, ECalenDayView);
- mCurrentViewId = ECalenDayView;
- if (mController.MainWindow().currentView() == mCalenDayView) {
- HbEffect::add(mCalenDayView,
+ mController.Services().Context().setFocusDate(currentDay);
+ mCurrentViewId = ECalenAgendaView;
+ if (mController.MainWindow().currentView() == mCalenAgendaView) {
+ mCalenAgendaView->disconnectAboutToQuitEvent(); // disconnect mCalenAgendaView to get aboutToQuit Events
+ HbEffect::add(mCalenAgendaView,
":/fxml/view_hide_back",
"hide");
- HbEffect::add(mCalenDayViewAlt,
+ HbEffect::add(mCalenAgendaViewAlt,
":/fxml/view_show_back",
"show");
- mCalenDayViewAlt->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayViewAlt, true, Hb::ViewSwitchUseNormalAnim);
+ // It would also connect for aboutToQuit events
+ mCalenAgendaViewAlt->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaViewAlt, true, Hb::ViewSwitchUseNormalAnim);
} else {
- HbEffect::add(mCalenDayViewAlt,
+ mCalenAgendaViewAlt->disconnectAboutToQuitEvent(); // disconnect mCalenAgendaViewAlt to get aboutToQuit Events
+ HbEffect::add(mCalenAgendaViewAlt,
":/fxml/view_hide_back",
"hide");
- HbEffect::add(mCalenDayView,
+ HbEffect::add(mCalenAgendaView,
":/fxml/view_show_back",
"show");
- mCalenDayView->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayView, true, Hb::ViewSwitchUseNormalAnim);
+ // It would also connect for aboutToQuit events
+ mCalenAgendaView->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaView, true, Hb::ViewSwitchUseNormalAnim);
}
}
// ----------------------------------------------------------------------------
-// CalenViewManager::removeDayViews
-// other items were commented in a header
+// CalenViewManager::removePreviousView
+// Remove the previous view from main window
// ----------------------------------------------------------------------------
//
-void CalenViewManager::removeDayViews()
+void CalenViewManager::removePreviousView()
{
- mCalenDayView->clearListModel();
- mCalenDayViewAlt->clearListModel();
- mController.MainWindow().removeView(mCalenDayView);
- mController.MainWindow().removeView(mCalenDayViewAlt);
+ if (ECalenAgendaView == mCurrentViewId) {
+ mCalenAgendaView->clearListModel();
+ mCalenAgendaViewAlt->clearListModel();
+ mController.MainWindow().removeView(mCalenAgendaView);
+ mController.MainWindow().removeView(mCalenAgendaViewAlt);
+ } else if (ECalenDayView == mCurrentViewId) {
+ mController.MainWindow().removeView(mCalenDayView);
+ } else {
+ if (ECalenMonthView == mCurrentViewId) {
+ mController.MainWindow().removeView(mCalenMonthView);
+ }
+ }
+
}
// ----------------------------------------------------------------------------
@@ -362,8 +467,8 @@
mCurrentViewId = defaultView;
if (ECalenMonthView == defaultView) {
mCalenMonthView->doPopulation();
- } else if (ECalenDayView == defaultView) {
- mCalenDayView->doPopulation();
+ } else if (ECalenAgendaView == defaultView) {
+ mCalenAgendaView->doPopulation();
}
TRACE_EXIT_POINT;
}
@@ -391,36 +496,40 @@
mCalenMonthView->doPopulation();
mController.MainWindow().setCurrentView(mCalenMonthView);
break;
- case ECalenDayView:
- if (mController.MainWindow().currentView() == mCalenDayView) {
+ case ECalenAgendaView:
+ if (mController.MainWindow().currentView() == mCalenAgendaView) {
// This happens when settings view or event viewer is opened
// from the agenda view. Simply repopulate the view
- if (mCalenDayView) {
- mCalenDayView->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayView);
- }
- } else if (mController.MainWindow().currentView() == mCalenDayViewAlt){
+ if (mCalenAgendaView) {
+ mCalenAgendaView->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaView);
+ }
+ } else if (mController.MainWindow().currentView() == mCalenAgendaViewAlt){
// This happens when settings view or event viewer is opened
// from the agenda view. Simply repopulate the view
- if (mCalenDayViewAlt) {
- mCalenDayViewAlt->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayViewAlt);
+ if (mCalenAgendaViewAlt) {
+ mCalenAgendaViewAlt->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaViewAlt);
}
} else {
- // This is called whenever the day view is opened from the month
- // view. Since the day view is not added to the mainwindow,
- // add the day views to mainwindow and set any one of them as
+ // This is called whenever the agenda view is opened from the month
+ // view. Since the agenda view is not added to the mainwindow,
+ // add the agenda views to mainwindow and set any one of them as
// current view
- if (mCalenDayView) {
- mCalenDayView->doPopulation();
- mController.MainWindow().addView(mCalenDayView);
- mController.MainWindow().setCurrentView(mCalenDayView);
- mController.MainWindow().addView(mCalenDayViewAlt);
+ if (mCalenAgendaView) {
+ mCalenAgendaView->doPopulation();
+ mController.MainWindow().addView(mCalenAgendaView);
+ mController.MainWindow().setCurrentView(mCalenAgendaView);
+ mController.MainWindow().addView(mCalenAgendaViewAlt);
}
}
break;
- case ECalenLandscapeDayView:
- // For later implementation
+ case ECalenShowSettings:
+ mSettingsView->refreshView();
+ break;
+ case ECalenDayView:
+ mCalenDayView->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenDayView);
break;
}
TRACE_EXIT_POINT;
@@ -434,12 +543,19 @@
//
void CalenViewManager::launchEventView()
{
+ // capture cureent view in case app closed/quits from AgendaEventViewer
+ if (mCalenMonthView) {
+ mCalenMonthView->captureScreenshot(true);
+ }
+ else if (mCalenAgendaView) {
+ mCalenAgendaView->captureScreenshot(true);
+ }
MCalenContext& context = mController.Services().Context();
AgendaEntry viewEntry= mController.Services().agendaInterface()->fetchById(
context.instanceId().mEntryLocalUid );
if (viewEntry.isRepeating()
&& viewEntry.type() != AgendaEntry::TypeTodo) {
- QDateTime startDateTime = context.focusDateAndTimeL();
+ QDateTime startDateTime = context.focusDateAndTime();
viewEntry.setStartAndEndTime(startDateTime,
startDateTime.addSecs(viewEntry.durationInSecs()));
}
@@ -462,30 +578,30 @@
}
// ----------------------------------------------------------------------------
-// CalenViewManager::loadAlternateDayView
+// CalenViewManager::loadAlternateAgendaView
// other items were commented in a header
// ----------------------------------------------------------------------------
//
-void CalenViewManager::loadAlternateDayView()
+void CalenViewManager::loadAlternateAgendaView()
{
bool loadSuccess = false;
- // Create the day view docloader object.
- mDayViewAltDocLoader = new CalenDocLoader(mController);
+ // Create the agenda view docloader object.
+ mAgendaViewAltDocLoader = new CalenDocLoader(mController);
// Load default section
- mDayViewAltDocLoader->load(CALEN_DAYVIEW_XML_FILE, &loadSuccess);
+ mAgendaViewAltDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, &loadSuccess);
if (!loadSuccess) {
qFatal("calenviewmanager.cpp : Unable to load XML");
}
- // Get the calenday view from the loader
- mCalenDayViewAlt = static_cast<CalenDayView *> (mDayViewAltDocLoader->findWidget(CALEN_DAYVIEW));
- if (!mCalenDayViewAlt) {
- qFatal("calenviewmanager.cpp : Unable to find alternate day view");
+ // Get the calenagenda view from the loader
+ mCalenAgendaViewAlt = static_cast<CalenAgendaView *> (mAgendaViewAltDocLoader->findWidget(CALEN_AGENDAVIEW));
+ if (!mCalenAgendaViewAlt) {
+ qFatal("calenviewmanager.cpp : Unable to find alternate agenda view");
}
- // Setup the day view
- mCalenDayViewAlt->setupView(mDayViewAltDocLoader);
+ // Setup the agenda view
+ mCalenAgendaViewAlt->setupView(mAgendaViewAltDocLoader);
}
// ----------------------------------------------------------------------------
@@ -501,25 +617,33 @@
switch (command.Command()) {
case ECalenMonthView:
- removeDayViews();
+ // First remove the previous native view before
+ // we set the mCurrentViewId with the current view
+ removePreviousView();
// Add month view to mainwindow.
mController.MainWindow().addView(mCalenMonthView);
mCurrentViewId = ECalenMonthView;
activateCurrentView();
break;
+ case ECalenAgendaView:
+ // First remove the previous native view before
+ // we set the mCurrentViewId with the current view
+ removePreviousView();
+ mCurrentViewId = ECalenAgendaView;
+ activateCurrentView();
+ break;
case ECalenDayView:
- // Remove month view from mainwindow.
- mController.MainWindow().removeView(mCalenMonthView);
- mCurrentViewId = ECalenDayView;
- activateCurrentView();
+ {
+ // First add new view and use QueuedConnection to assure that
+ // view is ready before setting it as the current view
+ mController.MainWindow().addView(mCalenDayView);
+ QMetaObject::invokeMethod(this, "handleDayViewReady",
+ Qt::QueuedConnection);
+ }
break;
case ECalenEventView:
launchEventView();
break;
- case ECalenLandscapeDayView:
- mCurrentViewId = ECalenLandscapeDayView;
- activateCurrentView();
- break;
case ECalenStartActiveStep:
activateCurrentView();
break;
@@ -545,7 +669,6 @@
{
TRACE_ENTRY_POINT;
switch (notification) {
- case ECalenNotifySystemLocaleChanged:
case ECalenNotifyExternalDatabaseChanged:
case ECalenNotifyDialogClosed:
case ECalenNotifyMultipleEntriesDeleted:
@@ -553,8 +676,26 @@
case ECalenNotifyEntryDeleted:
case ECalenNotifyInstanceDeleted:
case ECalenNotifyEntryClosed:
+ case ECalenNotifySystemLocaleChanged:
+ case ECalenNotifySystemLanguageChanged:
+ {
+ activateCurrentView();
+ }
+ break;
case ECalenNotifySettingsClosed:
+ {
+ //when setting view closed , switch to the previous view
+ mCurrentViewId = mPreviousViewsId ;
mController.Services().IssueCommandL(ECalenStartActiveStep);
+
+ // invalidate captured screenshots as either agenda view is activated now
+ if (mCalenMonthView) {
+ mCalenMonthView->captureScreenshot();
+ } else if (mCalenAgendaView) {
+ mCalenAgendaView->captureScreenshot();
+ }
+
+ }
break;
default:
break;
@@ -581,17 +722,20 @@
//
void CalenViewManager::handleViewingCompleted(const QDate date)
{
- qDebug() <<"calendar: CalenViewManager::handleEditingCompleted -->";
// Cleanup.
mCalenEventViewer->deleteLater();
if (!date.isNull() && date.isValid()) {
- mController.Services().Context().setFocusDateL(QDateTime(date),
- ECalenDayView);
+ mController.Services().Context().setFocusDate(QDateTime(date));
}
mController.Services().IssueNotificationL(ECalenNotifyEntryClosed);
- qDebug() <<"calendar: CalenViewManager::handleEditingCompleted <--";
+ // invalidate captured screenshots as either agenda view is activated now
+ if (mCalenMonthView) {
+ mCalenMonthView->captureScreenshot();
+ } else if (mCalenAgendaView) {
+ mCalenAgendaView->captureScreenshot();
+ }
}
// ----------------------------------------------------------------------------
@@ -602,11 +746,9 @@
//
void CalenViewManager::handleEditingStarted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.IssueCommandL(ECalenEditEntryFromViewer);
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -617,11 +759,9 @@
//
void CalenViewManager::handleEditingCompleted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.Services().IssueNotificationL(ECalenNotifyEditorClosedFromViewer);
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -632,11 +772,9 @@
//
void CalenViewManager::handleDeletingStarted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.IssueCommandL(ECalenDeleteEntryFromViewer);
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -647,11 +785,17 @@
//
void CalenViewManager::handleDeletingCompleted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.Services().IssueNotificationL(ECalenNotifyEntryDeleted);
+
+ // invalidate captured screenshots as either month view or agenda view is activated now
+ if (mCalenMonthView) {
+ mCalenMonthView->captureScreenshot();
+ } else if (mCalenAgendaView) {
+ mCalenAgendaView->captureScreenshot();
+ }
+
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -663,7 +807,19 @@
void CalenViewManager::handleInstanceViewCreation(int status)
{
Q_UNUSED(status);
- mCalenMonthView->fetchEntriesAndUpdateModel();
+ // handleInstanceViewCreation function is called only once. Now that the instance
+ // view creation is successfull. Events need to be populated on screen
+ // Ideal colution should be to call a uniform function, e.g. PopulateEvents
+ // where PopulateEvents should be implemeted by all views. Since the current
+ // solution for the month view implements the construction in two phases so
+ // it needs to be refactored and a common solution needs to be put here. So
+ // that code doesn't break if another view is added tomorow
+ if (mCalenMonthView) {
+ mCalenMonthView->fetchEntriesAndUpdateModel();
+ }
+ else if (mCalenAgendaView) {
+ mCalenAgendaView->doPopulation();
+ }
}
// ----------------------------------------------------------------------------
@@ -677,4 +833,43 @@
// Nothing Yet
Q_UNUSED(status);
}
+
+// ----------------------------------------------------------------------------
+// CalenViewManager::handleDayViewReady
+// Launches day view when it is added to MainWindow and ready to be displayed
+// ----------------------------------------------------------------------------
+//
+void CalenViewManager::handleDayViewReady()
+{
+ // Removes current view
+ // Notice: removing view should be done after new view is set as current to
+ // avoid situation that there is no current view in application
+ removePreviousView();
+
+ // Sets and activates day view
+ mCurrentViewId = ECalenDayView;
+ activateCurrentView();
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewManager::launchSettingsView
+// Launches settings view
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenViewManager::launchSettingsView()
+{
+ mPreviousViewsId = mCurrentViewId ;
+ mCurrentViewId = ECalenShowSettings;
+ mSettingsView->initializeForm();
+ mController.Services().MainWindow().setCurrentView(mSettingsView);
+
+ // capture cureent view in case app closed/quits from settings view
+ if (mCalenMonthView){
+ mCalenMonthView->captureScreenshot(true);
+ } else if(mCalenAgendaView){
+ mCalenAgendaView->captureScreenshot(true);
+ }
+}
+
// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/customisationmanager/bwins/calencustomisationmanageru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+EXPORTS
+ ?SetPluginAvailabilityL@CCalenCustomisationManager@@QAEXVTUid@@H@Z @ 1 NONAME ; void CCalenCustomisationManager::SetPluginAvailabilityL(class TUid, int)
+ ?PluginInfoFinder@CCalenCustomisationManager@@SAHPBVTUid@@ABVCImplementationInformation@@@Z @ 2 NONAME ; int CCalenCustomisationManager::PluginInfoFinder(class TUid const *, class CImplementationInformation const &)
+ ?HandleNotificationL@CCalenCustomisationManager@@AAEXW4TCalenNotification@@@Z @ 3 NONAME ; void CCalenCustomisationManager::HandleNotificationL(enum TCalenNotification)
+ ?HandleNotification@CCalenCustomisationManager@@UAEXW4TCalenNotification@@@Z @ 4 NONAME ; void CCalenCustomisationManager::HandleNotification(enum TCalenNotification)
+ ?CreateActivePluginListL@CCalenCustomisationManager@@AAEXXZ @ 5 NONAME ; void CCalenCustomisationManager::CreateActivePluginListL(void)
+ ?LoadPluginsBasedOnVariantL@CCalenCustomisationManager@@AAEXXZ @ 6 NONAME ; void CCalenCustomisationManager::LoadPluginsBasedOnVariantL(void)
+ ?AddPluginL@CCalenCustomisationManager@@AAEXPAVCCalenCustomisation@@VTUid@@@Z @ 7 NONAME ; void CCalenCustomisationManager::AddPluginL(class CCalenCustomisation *, class TUid)
+ ?OfferMenu@CCalenCustomisationManager@@QAEXPAVHbMenu@@@Z @ 8 NONAME ; void CCalenCustomisationManager::OfferMenu(class HbMenu *)
+ ?PluginInfoArray@CCalenCustomisationManager@@QBEABV?$RPointerArray@VCImplementationInformation@@@@XZ @ 9 NONAME ; class RPointerArray<class CImplementationInformation> const & CCalenCustomisationManager::PluginInfoArray(void) const
+ ?DisablePluginL@CCalenCustomisationManager@@AAEXVTUid@@@Z @ 10 NONAME ; void CCalenCustomisationManager::DisablePluginL(class TUid)
+ ??_ECCalenCustomisationManager@@UAE@I@Z @ 11 NONAME ; CCalenCustomisationManager::~CCalenCustomisationManager(unsigned int)
+ ?InfobarTextL@CCalenCustomisationManager@@QAEPAVQString@@XZ @ 12 NONAME ; class QString * CCalenCustomisationManager::InfobarTextL(void)
+ ?NewL@CCalenCustomisationManager@@SAPAV1@AAVMCalenServicesFactory@@AAVMCalenServices@@@Z @ 13 NONAME ; class CCalenCustomisationManager * CCalenCustomisationManager::NewL(class MCalenServicesFactory &, class MCalenServices &)
+ ?ActivePlugins@CCalenCustomisationManager@@QBEABV?$RArray@VTUid@@@@XZ @ 14 NONAME ; class RArray<class TUid> const & CCalenCustomisationManager::ActivePlugins(void) const
+ ?PluginAvailabilityFinder@CCalenCustomisationManager@@CAHPBVTUid@@ABUTCalenPluginAvailability@1@@Z @ 15 NONAME ; int CCalenCustomisationManager::PluginAvailabilityFinder(class TUid const *, struct CCalenCustomisationManager::TCalenPluginAvailability const &)
+ ?UnloadPluginsL@CCalenCustomisationManager@@QAEXABV?$RArray@VTUid@@@@@Z @ 16 NONAME ; void CCalenCustomisationManager::UnloadPluginsL(class RArray<class TUid> const &)
+ ??1CCalenCustomisationManager@@UAE@XZ @ 17 NONAME ; CCalenCustomisationManager::~CCalenCustomisationManager(void)
+ ?LoadPluginL@CCalenCustomisationManager@@AAEXVTUid@@@Z @ 18 NONAME ; void CCalenCustomisationManager::LoadPluginL(class TUid)
+ ?GetCommandHandlerL@CCalenCustomisationManager@@QAEPAVMCalenCommandHandler@@H@Z @ 19 NONAME ; class MCalenCommandHandler * CCalenCustomisationManager::GetCommandHandlerL(int)
+ ??0CCalenCustomisationManager@@AAE@AAVMCalenServicesFactory@@AAVMCalenServices@@@Z @ 20 NONAME ; CCalenCustomisationManager::CCalenCustomisationManager(class MCalenServicesFactory &, class MCalenServices &)
+ ?DoImmediatePluginLoadingL@CCalenCustomisationManager@@AAEXXZ @ 21 NONAME ; void CCalenCustomisationManager::DoImmediatePluginLoadingL(void)
+ ?FindPluginL@CCalenCustomisationManager@@AAEPAVCCalenCustomisation@@VTUid@@@Z @ 22 NONAME ; class CCalenCustomisation * CCalenCustomisationManager::FindPluginL(class TUid)
+ ?ConstructL@CCalenCustomisationManager@@AAEXXZ @ 23 NONAME ; void CCalenCustomisationManager::ConstructL(void)
+ ?EnablePluginL@CCalenCustomisationManager@@AAEXVTUid@@@Z @ 24 NONAME ; void CCalenCustomisationManager::EnablePluginL(class TUid)
+ ?Infobar@CCalenCustomisationManager@@QAEPAVHbWidget@@XZ @ 25 NONAME ; class HbWidget * CCalenCustomisationManager::Infobar(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/customisationmanager/eabi/calencustomisationmanageru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,32 @@
+EXPORTS
+ _ZN26CCalenCustomisationManager10AddPluginLEP19CCalenCustomisation4TUid @ 1 NONAME
+ _ZN26CCalenCustomisationManager10ConstructLEv @ 2 NONAME
+ _ZN26CCalenCustomisationManager11FindPluginLE4TUid @ 3 NONAME
+ _ZN26CCalenCustomisationManager11LoadPluginLE4TUid @ 4 NONAME
+ _ZN26CCalenCustomisationManager12InfobarTextLEv @ 5 NONAME
+ _ZN26CCalenCustomisationManager13EnablePluginLE4TUid @ 6 NONAME
+ _ZN26CCalenCustomisationManager14DisablePluginLE4TUid @ 7 NONAME
+ _ZN26CCalenCustomisationManager14UnloadPluginsLERK6RArrayI4TUidE @ 8 NONAME
+ _ZN26CCalenCustomisationManager16PluginInfoFinderEPK4TUidRK26CImplementationInformation @ 9 NONAME
+ _ZN26CCalenCustomisationManager18GetCommandHandlerLEi @ 10 NONAME
+ _ZN26CCalenCustomisationManager18HandleNotificationE18TCalenNotification @ 11 NONAME
+ _ZN26CCalenCustomisationManager19HandleNotificationLE18TCalenNotification @ 12 NONAME
+ _ZN26CCalenCustomisationManager22SetPluginAvailabilityLE4TUidi @ 13 NONAME
+ _ZN26CCalenCustomisationManager23CreateActivePluginListLEv @ 14 NONAME
+ _ZN26CCalenCustomisationManager24PluginAvailabilityFinderEPK4TUidRKNS_24TCalenPluginAvailabilityE @ 15 NONAME
+ _ZN26CCalenCustomisationManager25DoImmediatePluginLoadingLEv @ 16 NONAME
+ _ZN26CCalenCustomisationManager26LoadPluginsBasedOnVariantLEv @ 17 NONAME
+ _ZN26CCalenCustomisationManager4NewLER21MCalenServicesFactoryR14MCalenServices @ 18 NONAME
+ _ZN26CCalenCustomisationManager7InfobarEv @ 19 NONAME
+ _ZN26CCalenCustomisationManager9OfferMenuEP6HbMenu @ 20 NONAME
+ _ZN26CCalenCustomisationManagerC1ER21MCalenServicesFactoryR14MCalenServices @ 21 NONAME
+ _ZN26CCalenCustomisationManagerC2ER21MCalenServicesFactoryR14MCalenServices @ 22 NONAME
+ _ZN26CCalenCustomisationManagerD0Ev @ 23 NONAME
+ _ZN26CCalenCustomisationManagerD1Ev @ 24 NONAME
+ _ZN26CCalenCustomisationManagerD2Ev @ 25 NONAME
+ _ZNK26CCalenCustomisationManager13ActivePluginsEv @ 26 NONAME
+ _ZNK26CCalenCustomisationManager15PluginInfoArrayEv @ 27 NONAME
+ _ZTI26CCalenCustomisationManager @ 28 NONAME
+ _ZTV26CCalenCustomisationManager @ 29 NONAME
+ _ZThn4_N26CCalenCustomisationManager18HandleNotificationE18TCalenNotification @ 30 NONAME
+
--- a/calendarui/customisationmanager/inc/calencustomisationmanager.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/customisationmanager/inc/calencustomisationmanager.h Thu Jul 22 16:32:51 2010 +0100
@@ -70,6 +70,9 @@
MCalenServicesFactory& aFactory,
MCalenServices& aServices );
+ static TBool PluginInfoFinder( const TUid* aUid ,
+ const CImplementationInformation& aArrayItem);
+
/**
* Destructor.
*/
@@ -145,6 +148,8 @@
void AddPluginL( CCalenCustomisation* aPlugin, TUid aUid );
void CreateActivePluginListL();
+
+ void LoadPluginsBasedOnVariantL();
void EnablePluginL( TUid aPluginUid );
--- a/calendarui/customisationmanager/src/calencustomisationmanager.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/customisationmanager/src/calencustomisationmanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -27,8 +27,10 @@
#include "calenservices.h"
#include "calencustomisation.h"
#include <ecom/ecom.h>
+#include <e32lang.h>
#include "calenservices.h"
#include "calenservicesfactory.h"
+#include "CalenUid.h"
@@ -183,40 +185,96 @@
iActivePlugins.Reset();
iRomBasedPlugins.Reset();
- //Added resolver for corolla release
- // Set resolver params
- TLanguage lang = User::Language();
- TBuf8<40> langStr;
- langStr.Format( _L8("language(%d)"), lang );
-
- TEComResolverParams resolverParams;
- resolverParams.SetDataType( langStr );
- resolverParams.SetGenericMatch( ETrue );
+ REComSession::ListImplementationsL( KCalenCustomisationInterfaceUid, iPluginInfo );
- // REComSession::ListImplementationsL( KCalenCustomisationInterfaceUid, resolverParams, iPluginInfo );
- REComSession::ListImplementationsL( KCalenCustomisationInterfaceUid, iPluginInfo );
+ LoadPluginsBasedOnVariantL();
+
TInt pluginCount = iPluginInfo.Count();
- for ( TInt pluginIndex(0); pluginIndex < pluginCount; ++pluginIndex )
- {
- TUid pluginUid = iPluginInfo[pluginIndex]->ImplementationUid();
-
- // If the plugin can not be found or if it is enabled
- // add it to the list of active plugins
- iActivePlugins.AppendL( pluginUid );
-
- // If the plugin is rom-based, store its uid
- if ( iPluginInfo[pluginIndex]->RomBased() )
- {
- iRomBasedPlugins.AppendL( pluginUid );
- }
-
- }
+ if(pluginCount)
+ {
+ for ( TInt pluginIndex(0); pluginIndex < pluginCount; ++pluginIndex )
+ {
+ TUid pluginUid = iPluginInfo[pluginIndex]->ImplementationUid();
+
+ // If the plugin can not be found or if it is enabled
+ // add it to the list of active plugins
+ iActivePlugins.AppendL( pluginUid );
+
+ // If the plugin is rom-based, store its uid
+ if ( iPluginInfo[pluginIndex]->RomBased() )
+ {
+ iRomBasedPlugins.AppendL( pluginUid );
+ }
+
+ }
+ }
TRACE_EXIT_POINT;
}
// ----------------------------------------------------------------------------
+// CCalenCustomisationManager::LoadPluginsBasedOnVariantL
+// Loads the plugin based on the language variant
+// ----------------------------------------------------------------------------
+//
+void CCalenCustomisationManager::LoadPluginsBasedOnVariantL()
+{
+ TLanguage languge = User::Language();
+ RArray<TUid> needsToBeRemoved;
+
+ switch(languge)
+ {
+ case ELangTaiwanChinese:
+ case ELangPrcChinese:
+ case ELangHongKongChinese:
+ // TODO: Remove the other regional plugins Thai, Vietnamese etc.
+ break;
+ case ELangThai:
+ case ELangEnglish_Thailand:
+ needsToBeRemoved.Append(KCalenChineseImplUid);
+ // TODO: Remove the other regional plugin Vietnamese.
+ break;
+ case ELangVietnamese:
+ needsToBeRemoved.Append(KCalenChineseImplUid);
+ // TODO: Remove the other regional plugin Thai.
+ break;
+
+ default:
+ needsToBeRemoved.Append(KCalenChineseImplUid);
+ // TODO: Remove the other regional plugins Thai, Vietnamese etc.
+ break;
+ }
+ TInt count = needsToBeRemoved.Count();
+ if(count)
+ {
+ for(TInt i=0; i< count; i++)
+ {
+ TInt index = iPluginInfo.Find(needsToBeRemoved[i],
+ CCalenCustomisationManager::PluginInfoFinder);
+ if( index != KErrNotFound )
+ {
+ CImplementationInformation* impl = iPluginInfo[index];
+ iPluginInfo.Remove(index);
+ delete impl;
+ }
+ }
+ }
+ needsToBeRemoved.Close();
+}
+
+// ----------------------------------------------------------------------------
+// CCalenCustomisationManager::PluginInfoFinder(
+// Matches an uid in pluginInfo.
+// ----------------------------------------------------------------------------
+//
+TBool CCalenCustomisationManager::PluginInfoFinder( const TUid* aUid,
+ const CImplementationInformation& aArrayItem )
+{
+ return (*aUid == aArrayItem.ImplementationUid() );
+}
+
+// ----------------------------------------------------------------------------
// CCalenCustomisationManager::SetPluginAvailabilityL
// Enables or disables the given plugin.
// ----------------------------------------------------------------------------
@@ -368,9 +426,17 @@
// ----------------------------------------------------------------------------
//
void CCalenCustomisationManager::HandleNotificationL(TCalenNotification aNotification)
- {
- TRACE_ENTRY_POINT;
- Q_UNUSED(aNotification);
+ {
+ TRACE_ENTRY_POINT;
+ switch( aNotification )
+ {
+ case ECalenNotifySystemLanguageChanged:
+ {
+ CreateActivePluginListL();
+ DoImmediatePluginLoadingL();
+ }
+ break;
+ }
TRACE_EXIT_POINT;
}
@@ -443,17 +509,19 @@
// Get a new services object from global data
MCalenServices* services = iServicesFactory.NewServicesL();
-
+ CleanupStack::PushL( services );
// Creates the plugin and transfers ownership of the services
// object to the plugin.
CCalenCustomisation* plugin =
CCalenCustomisation::CreateImplementationL( aPluginUid, services );
-
- CleanupStack::PushL( plugin );
+ CleanupStack::PushL( plugin );
// the plugin array takes ownership of the plugin
AddPluginL( plugin, aPluginUid );
+
+ // Cleanup
CleanupStack::Pop( plugin );
+ CleanupStack::Pop( services );
TRACE_EXIT_POINT;
--- a/calendarui/eabi/agendaeventvieweru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-EXPORTS
- _ZN17AgendaEventViewer4viewE11AgendaEntryNS_7ActionsE @ 1 NONAME
- _ZN17AgendaEventViewer4viewERK5QFileNS_7ActionsE @ 2 NONAME
- _ZN17AgendaEventViewer4viewEmNS_7ActionsE @ 3 NONAME
- _ZN17AgendaEventViewerC1EP10AgendaUtilP7QObject @ 4 NONAME
- _ZN17AgendaEventViewerC1EP7QObject @ 5 NONAME
- _ZN17AgendaEventViewerC2EP10AgendaUtilP7QObject @ 6 NONAME
- _ZN17AgendaEventViewerC2EP7QObject @ 7 NONAME
- _ZN17AgendaEventViewerD0Ev @ 8 NONAME
- _ZN17AgendaEventViewerD1Ev @ 9 NONAME
- _ZN17AgendaEventViewerD2Ev @ 10 NONAME
-
--- a/calendarui/eabi/calencommonutilsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-EXPORTS
- _ZN14CalenDateUtils10isNullTimeER9QDateTime @ 1 NONAME
- _ZN14CalenDateUtils10isValidDayERK9QDateTime @ 2 NONAME
- _ZN14CalenDateUtils11defaultTimeERK9QDateTime @ 3 NONAME
- _ZN14CalenDateUtils11onSameMonthERK9QDateTimeS2_ @ 4 NONAME
- _ZN14CalenDateUtils14beginningOfDayERK9QDateTime @ 5 NONAME
- _ZN14CalenDateUtils16displayTimeOnDayERK9QDateTimeS2_ @ 6 NONAME
- _ZN14CalenDateUtils16limitToValidTimeERK9QDateTime @ 7 NONAME
- _ZN14CalenDateUtils19roundToPreviousHourERK9QDateTime @ 8 NONAME
- _ZN14CalenDateUtils19roundToPreviousHourERKi @ 9 NONAME
- _ZN14CalenDateUtils19timeRangesIntersectERK9QDateTimeS2_S2_S2_ @ 10 NONAME
- _ZN14CalenDateUtils3nowEv @ 11 NONAME
- _ZN14CalenDateUtils5todayEv @ 12 NONAME
- _ZN14CalenDateUtils6pastOfERK9QDateTimei @ 13 NONAME
- _ZN14CalenDateUtils7maxTimeEv @ 14 NONAME
- _ZN14CalenDateUtils7minTimeEv @ 15 NONAME
- _ZN14CalenDateUtils8futureOfERK9QDateTimei @ 16 NONAME
- _ZN14CalenDateUtils9isOnTodayERK9QDateTime @ 17 NONAME
- _ZN14CalenDateUtils9onSameDayERK9QDateTimeS2_ @ 18 NONAME
- _ZN14CalenDateUtils9timeOfDayERK9QDateTime @ 19 NONAME
- _ZN16CalenAgendaUtils17endsAtStartOfDayLER11AgendaEntryRK9QDateTime @ 20 NONAME
- _ZN16CalenAgendaUtils30removeEntriesEndingAtMidnightLER5QListI11AgendaEntryERK9QDateTime @ 21 NONAME
-
--- a/calendarui/eabi/calencontrolleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-EXPORTS
- _ZN16CCalenController10MainWindowEv @ 1 NONAME
- _ZN16CCalenController11ViewManagerEv @ 2 NONAME
- _ZN16CCalenController12InfobarTextLEv @ 3 NONAME
- _ZN16CCalenController12NewServicesLEv @ 4 NONAME
- _ZN16CCalenController12getFirstViewEv @ 5 NONAME
- _ZN16CCalenController13IssueCommandLEi @ 6 NONAME
- _ZN16CCalenController15agendaInterfaceEv @ 7 NONAME
- _ZN16CCalenController17SetDefaultContextEv @ 8 NONAME
- _ZN16CCalenController18GetCommandHandlerLEi @ 9 NONAME
- _ZN16CCalenController19CancelNotificationsEP25MCalenNotificationHandler @ 10 NONAME
- _ZN16CCalenController20CustomisationManagerEv @ 11 NONAME
- _ZN16CCalenController21BroadcastNotificationE18TCalenNotification @ 12 NONAME
- _ZN16CCalenController21ReleaseCustomisationsEv @ 13 NONAME
- _ZN16CCalenController21checkMultipleCreationEv @ 14 NONAME
- _ZN16CCalenController24handleServiceManagerSlotEiRK9QDateTime @ 15 NONAME
- _ZN16CCalenController25RegisterForNotificationsLEP25MCalenNotificationHandler18TCalenNotification @ 16 NONAME
- _ZN16CCalenController25RegisterForNotificationsLEP25MCalenNotificationHandlerR6RArrayI18TCalenNotificationE @ 17 NONAME
- _ZN16CCalenController7InfobarEv @ 18 NONAME
- _ZN16CCalenController7ReleaseEv @ 19 NONAME
- _ZN16CCalenController7contextEv @ 20 NONAME
- _ZN16CCalenController8NotifierEv @ 21 NONAME
- _ZN16CCalenController8ServicesEv @ 22 NONAME
- _ZN16CCalenController9InstanceLEv @ 23 NONAME
- _ZN16CCalenController9OfferMenuEP6HbMenu @ 24 NONAME
- _ZN16CCalenControllerC1Eb @ 25 NONAME
- _ZN16CCalenControllerC2Eb @ 26 NONAME
- _ZN16CCalenControllerD1Ev @ 27 NONAME
- _ZN16CCalenControllerD2Ev @ 28 NONAME
- _ZTI16CCalenController @ 29 NONAME
- _ZTV16CCalenController @ 30 NONAME
-
--- a/calendarui/eabi/calencustomisationmanageru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +0,0 @@
-EXPORTS
- _ZN26CCalenCustomisationManager10AddPluginLEP19CCalenCustomisation4TUid @ 1 NONAME
- _ZN26CCalenCustomisationManager10ConstructLEv @ 2 NONAME
- _ZN26CCalenCustomisationManager11FindPluginLE4TUid @ 3 NONAME
- _ZN26CCalenCustomisationManager11LoadPluginLE4TUid @ 4 NONAME
- _ZN26CCalenCustomisationManager12InfobarTextLEv @ 5 NONAME
- _ZN26CCalenCustomisationManager13EnablePluginLE4TUid @ 6 NONAME
- _ZN26CCalenCustomisationManager14DisablePluginLE4TUid @ 7 NONAME
- _ZN26CCalenCustomisationManager14UnloadPluginsLERK6RArrayI4TUidE @ 8 NONAME
- _ZN26CCalenCustomisationManager18GetCommandHandlerLEi @ 9 NONAME
- _ZN26CCalenCustomisationManager18HandleNotificationE18TCalenNotification @ 10 NONAME
- _ZN26CCalenCustomisationManager19HandleNotificationLE18TCalenNotification @ 11 NONAME
- _ZN26CCalenCustomisationManager22SetPluginAvailabilityLE4TUidi @ 12 NONAME
- _ZN26CCalenCustomisationManager23CreateActivePluginListLEv @ 13 NONAME
- _ZN26CCalenCustomisationManager24PluginAvailabilityFinderEPK4TUidRKNS_24TCalenPluginAvailabilityE @ 14 NONAME
- _ZN26CCalenCustomisationManager25DoImmediatePluginLoadingLEv @ 15 NONAME
- _ZN26CCalenCustomisationManager4NewLER21MCalenServicesFactoryR14MCalenServices @ 16 NONAME
- _ZN26CCalenCustomisationManager7InfobarEv @ 17 NONAME
- _ZN26CCalenCustomisationManager9OfferMenuEP6HbMenu @ 18 NONAME
- _ZN26CCalenCustomisationManagerC1ER21MCalenServicesFactoryR14MCalenServices @ 19 NONAME
- _ZN26CCalenCustomisationManagerC2ER21MCalenServicesFactoryR14MCalenServices @ 20 NONAME
- _ZN26CCalenCustomisationManagerD0Ev @ 21 NONAME
- _ZN26CCalenCustomisationManagerD1Ev @ 22 NONAME
- _ZN26CCalenCustomisationManagerD2Ev @ 23 NONAME
- _ZNK26CCalenCustomisationManager13ActivePluginsEv @ 24 NONAME
- _ZNK26CCalenCustomisationManager15PluginInfoArrayEv @ 25 NONAME
- _ZTI26CCalenCustomisationManager @ 26 NONAME
- _ZTV26CCalenCustomisationManager @ 27 NONAME
- _ZThn4_N26CCalenCustomisationManager18HandleNotificationE18TCalenNotification @ 28 NONAME
-
--- a/calendarui/eabi/caleneditoru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-EXPORTS
- _ZN11CalenEditor10entrySavedEv @ 1 NONAME
- _ZN11CalenEditor11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
- _ZN11CalenEditor11qt_metacastEPKc @ 3 NONAME
- _ZN11CalenEditor12dialogClosedEv @ 4 NONAME
- _ZN11CalenEditor16staticMetaObjectE @ 5 NONAME DATA 16
- _ZN11CalenEditor19getStaticMetaObjectEv @ 6 NONAME
- _ZN11CalenEditor20calendarLaunchFailedEi @ 7 NONAME
- _ZN11CalenEditor4editE11AgendaEntryb @ 8 NONAME
- _ZN11CalenEditor4editERK5QFileb @ 9 NONAME
- _ZN11CalenEditor4editEmb @ 10 NONAME
- _ZN11CalenEditor6createE11AgendaEntrybNS_10CreateTypeE @ 11 NONAME
- _ZN11CalenEditor6createE9QDateTimebNS_10CreateTypeE @ 12 NONAME
- _ZN11CalenEditorC1EP10AgendaUtilP7QObject @ 13 NONAME
- _ZN11CalenEditorC1EP7QObject @ 14 NONAME
- _ZN11CalenEditorC2EP10AgendaUtilP7QObject @ 15 NONAME
- _ZN11CalenEditorC2EP7QObject @ 16 NONAME
- _ZN11CalenEditorD0Ev @ 17 NONAME
- _ZN11CalenEditorD1Ev @ 18 NONAME
- _ZN11CalenEditorD2Ev @ 19 NONAME
- _ZNK11CalenEditor10metaObjectEv @ 20 NONAME
- _ZTI11CalenEditor @ 21 NONAME
- _ZTV11CalenEditor @ 22 NONAME
-
--- a/calendarui/eabi/calenglobaldatau.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- _ZN16CalenContextImplC1EP27MCalenContextChangeObserver @ 1 NONAME
- _ZN16CalenContextImplC1ERKS_ @ 2 NONAME
- _ZN16CalenContextImplC1Ev @ 3 NONAME
- _ZN16CalenContextImplC2EP27MCalenContextChangeObserver @ 4 NONAME
- _ZN16CalenContextImplC2ERKS_ @ 5 NONAME
- _ZN16CalenContextImplC2Ev @ 6 NONAME
-
--- a/calendarui/eabi/calenlauncheru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-EXPORTS
- _ZN13CalenLauncher11handleErrorEi @ 1 NONAME
- _ZN13CalenLauncher11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
- _ZN13CalenLauncher11qt_metacastEPKc @ 3 NONAME
- _ZN13CalenLauncher16staticMetaObjectE @ 4 NONAME DATA 16
- _ZN13CalenLauncher17launchCalendarAppENS_9CalenViewER9QDateTimeb @ 5 NONAME
- _ZN13CalenLauncher19getStaticMetaObjectEv @ 6 NONAME
- _ZN13CalenLauncher20calendarLaunchFailedEi @ 7 NONAME
- _ZN13CalenLauncherC1EP7QObject @ 8 NONAME
- _ZN13CalenLauncherC2EP7QObject @ 9 NONAME
- _ZN13CalenLauncherD0Ev @ 10 NONAME
- _ZN13CalenLauncherD1Ev @ 11 NONAME
- _ZN13CalenLauncherD2Ev @ 12 NONAME
- _ZNK13CalenLauncher10metaObjectEv @ 13 NONAME
- _ZTI13CalenLauncher @ 14 NONAME
- _ZTV13CalenLauncher @ 15 NONAME
-
--- a/calendarui/eabi/calensettingsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,19 +0,0 @@
-EXPORTS
- _ZN13CalenSettings11createModelEv @ 1 NONAME
- _ZN13CalenSettings11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
- _ZN13CalenSettings11qt_metacastEPKc @ 3 NONAME
- _ZN13CalenSettings16staticMetaObjectE @ 4 NONAME DATA 16
- _ZN13CalenSettings19getStaticMetaObjectEv @ 5 NONAME
- _ZN13CalenSettings19populateSettingListEv @ 6 NONAME
- _ZN13CalenSettings22handleWeekNumberChangeEv @ 7 NONAME
- _ZN13CalenSettings24handleRegionalInfoChangeEv @ 8 NONAME
- _ZN13CalenSettings27handleAlarmSnoozeTimeChangeEi @ 9 NONAME
- _ZN13CalenSettingsC1EP10HbDataFormP7QObject @ 10 NONAME
- _ZN13CalenSettingsC2EP10HbDataFormP7QObject @ 11 NONAME
- _ZN13CalenSettingsD0Ev @ 12 NONAME
- _ZN13CalenSettingsD1Ev @ 13 NONAME
- _ZN13CalenSettingsD2Ev @ 14 NONAME
- _ZNK13CalenSettings10metaObjectEv @ 15 NONAME
- _ZTI13CalenSettings @ 16 NONAME
- _ZTV13CalenSettings @ 17 NONAME
-
--- a/calendarui/eabi/calenviewsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,196 +0,0 @@
-EXPORTS
- _ZN12CalenDayView12doPopulationEv @ 1 NONAME
- _ZN12CalenDayView14clearListModelEv @ 2 NONAME
- _ZN12CalenDayView18HandleNotificationE18TCalenNotification @ 3 NONAME
- _ZN12CalenDayView9docLoaderEv @ 4 NONAME
- _ZN12CalenDayView9setupViewEP14CalenDocLoader @ 5 NONAME
- _ZN12CalenDayViewC1ER14MCalenServices @ 6 NONAME
- _ZN12CalenDayViewC2ER14MCalenServices @ 7 NONAME
- _ZN12CalenDayViewD0Ev @ 8 NONAME
- _ZN12CalenDayViewD1Ev @ 9 NONAME
- _ZN12CalenDayViewD2Ev @ 10 NONAME
- _ZN14CalenMonthGrid10appendRowsEv @ 11 NONAME
- _ZN14CalenMonthGrid10panGestureERK7QPointF @ 12 NONAME
- _ZN14CalenMonthGrid11downGestureEi @ 13 NONAME
- _ZN14CalenMonthGrid11prependRowsEv @ 14 NONAME
- _ZN14CalenMonthGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 15 NONAME
- _ZN14CalenMonthGrid11qt_metacastEPKc @ 16 NONAME
- _ZN14CalenMonthGrid13itemActivatedERK11QModelIndex @ 17 NONAME
- _ZN14CalenMonthGrid14setActiveDatesE5QDate @ 18 NONAME
- _ZN14CalenMonthGrid14setCurrentIdexEi @ 19 NONAME
- _ZN14CalenMonthGrid15getCurrentIndexEv @ 20 NONAME
- _ZN14CalenMonthGrid15mousePressEventEP24QGraphicsSceneMouseEvent @ 21 NONAME
- _ZN14CalenMonthGrid16staticMetaObjectE @ 22 NONAME DATA 16
- _ZN14CalenMonthGrid17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 23 NONAME
- _ZN14CalenMonthGrid17scrollingFinishedEv @ 24 NONAME
- _ZN14CalenMonthGrid18orientationChangedEN2Qt11OrientationE @ 25 NONAME
- _ZN14CalenMonthGrid19getStaticMetaObjectEv @ 26 NONAME
- _ZN14CalenMonthGrid19handleAppendingRowsER5QListI14CalenMonthDataE @ 27 NONAME
- _ZN14CalenMonthGrid19setFocusToProperDayEv @ 28 NONAME
- _ZN14CalenMonthGrid20handlePrependingRowsER5QListI14CalenMonthDataE @ 29 NONAME
- _ZN14CalenMonthGrid20updateMonthGridModelER5QListI14CalenMonthDataEib @ 30 NONAME
- _ZN14CalenMonthGrid24handlePanGestureFinishedEv @ 31 NONAME
- _ZN14CalenMonthGrid33updateMonthGridWithInActiveMonthsER5QListI14CalenMonthDataE @ 32 NONAME
- _ZN14CalenMonthGrid34updateMonthGridWithEventIndicatorsER5QListI14CalenMonthDataE @ 33 NONAME
- _ZN14CalenMonthGrid5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 34 NONAME
- _ZN14CalenMonthGrid7setViewEP14CalenMonthView @ 35 NONAME
- _ZN14CalenMonthGrid9upGestureEi @ 36 NONAME
- _ZN14CalenMonthGridC1EP13QGraphicsItem @ 37 NONAME
- _ZN14CalenMonthGridC2EP13QGraphicsItem @ 38 NONAME
- _ZN14CalenMonthGridD0Ev @ 39 NONAME
- _ZN14CalenMonthGridD1Ev @ 40 NONAME
- _ZN14CalenMonthGridD2Ev @ 41 NONAME
- _ZN14CalenMonthView10createGridEv @ 42 NONAME
- _ZN14CalenMonthView11qt_metacallEN11QMetaObject4CallEiPPv @ 43 NONAME
- _ZN14CalenMonthView11qt_metacastEPKc @ 44 NONAME
- _ZN14CalenMonthView12createEditorEv @ 45 NONAME
- _ZN14CalenMonthView12doPopulationEv @ 46 NONAME
- _ZN14CalenMonthView12getActiveDayEv @ 47 NONAME
- _ZN14CalenMonthView12setActiveDayE9QDateTime @ 48 NONAME
- _ZN14CalenMonthView13doLazyLoadingEv @ 49 NONAME
- _ZN14CalenMonthView13getCurrentDayEv @ 50 NONAME
- _ZN14CalenMonthView13launchDayViewEv @ 51 NONAME
- _ZN14CalenMonthView13monthDataListEv @ 52 NONAME
- _ZN14CalenMonthView14addWeekNumbersEv @ 53 NONAME
- _ZN14CalenMonthView14firstDayOfGridEv @ 54 NONAME
- _ZN14CalenMonthView14rowsInFutMonthEv @ 55 NONAME
- _ZN14CalenMonthView14setDateToLabelEv @ 56 NONAME
- _ZN14CalenMonthView15dateFromContextERK13MCalenContext @ 57 NONAME
- _ZN14CalenMonthView15getInstanceListER5QListI5QDateE9QDateTimeS4_ @ 58 NONAME
- _ZN14CalenMonthView15onLocaleChangedEi @ 59 NONAME
- _ZN14CalenMonthView15rowsInPrevMonthEv @ 60 NONAME
- _ZN14CalenMonthView16getCurrGridIndexEv @ 61 NONAME
- _ZN14CalenMonthView16onContextChangedEv @ 62 NONAME
- _ZN14CalenMonthView16setCurrGridIndexEi @ 63 NONAME
- _ZN14CalenMonthView16staticMetaObjectE @ 64 NONAME DATA 16
- _ZN14CalenMonthView17changeOrientationEN2Qt11OrientationE @ 65 NONAME
- _ZN14CalenMonthView17populateNextMonthEv @ 66 NONAME
- _ZN14CalenMonthView17populatePrevMonthEv @ 67 NONAME
- _ZN14CalenMonthView17removeWeekNumbersEv @ 68 NONAME
- _ZN14CalenMonthView18addBackgroundFrameEv @ 69 NONAME
- _ZN14CalenMonthView18completePopulationEv @ 70 NONAME
- _ZN14CalenMonthView19getStaticMetaObjectEv @ 71 NONAME
- _ZN14CalenMonthView19populatePreviewPaneER9QDateTime @ 72 NONAME
- _ZN14CalenMonthView20prepareForPopulationEv @ 73 NONAME
- _ZN14CalenMonthView21refreshViewOnGoToDateEv @ 74 NONAME
- _ZN14CalenMonthView22addRemoveActionsInMenuEv @ 75 NONAME
- _ZN14CalenMonthView22setContextForActiveDayEi @ 76 NONAME
- _ZN14CalenMonthView22updateWeekNumGridModelEv @ 77 NONAME
- _ZN14CalenMonthView23handleChangeOrientationEv @ 78 NONAME
- _ZN14CalenMonthView23handleGridItemActivatedEv @ 79 NONAME
- _ZN14CalenMonthView24handlePreviewPaneGestureEb @ 80 NONAME
- _ZN14CalenMonthView24populateWithInstanceViewEv @ 81 NONAME
- _ZN14CalenMonthView24updateModelWithPrevMonthEv @ 82 NONAME
- _ZN14CalenMonthView25handleLeftEffectCompletedERKN8HbEffect12EffectStatusE @ 83 NONAME
- _ZN14CalenMonthView26fetchEntriesAndUpdateModelEv @ 84 NONAME
- _ZN14CalenMonthView26handleRightEffectCompletedERKN8HbEffect12EffectStatusE @ 85 NONAME
- _ZN14CalenMonthView26updateModelWithFutureMonthEv @ 86 NONAME
- _ZN14CalenMonthView27showHideRegionalInformationEv @ 87 NONAME
- _ZN14CalenMonthView35updateMonthDataArrayWithActiveDatesEv @ 88 NONAME
- _ZN14CalenMonthView7setDateEv @ 89 NONAME
- _ZN14CalenMonthView9goToTodayEv @ 90 NONAME
- _ZN14CalenMonthView9setupViewEP14CalenDocLoader @ 91 NONAME
- _ZN14CalenMonthViewC1ER14MCalenServices @ 92 NONAME
- _ZN14CalenMonthViewC2ER14MCalenServices @ 93 NONAME
- _ZN14CalenMonthViewD0Ev @ 94 NONAME
- _ZN14CalenMonthViewD1Ev @ 95 NONAME
- _ZN14CalenMonthViewD2Ev @ 96 NONAME
- _ZN16CalenPreviewPane11qt_metacallEN11QMetaObject4CallEiPPv @ 97 NONAME
- _ZN16CalenPreviewPane11qt_metacastEPKc @ 98 NONAME
- _ZN16CalenPreviewPane13populateLabelE9QDateTime @ 99 NONAME
- _ZN16CalenPreviewPane13stopScrollingEv @ 100 NONAME
- _ZN16CalenPreviewPane14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 101 NONAME
- _ZN16CalenPreviewPane15mousePressEventEP24QGraphicsSceneMouseEvent @ 102 NONAME
- _ZN16CalenPreviewPane15startAutoScrollEv @ 103 NONAME
- _ZN16CalenPreviewPane16GetInstanceListLEv @ 104 NONAME
- _ZN16CalenPreviewPane16staticMetaObjectE @ 105 NONAME DATA 16
- _ZN16CalenPreviewPane17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 106 NONAME
- _ZN16CalenPreviewPane17scrollingFinishedEv @ 107 NONAME
- _ZN16CalenPreviewPane17setNoEntriesLabelEP7HbLabel @ 108 NONAME
- _ZN16CalenPreviewPane19getStaticMetaObjectEv @ 109 NONAME
- _ZN16CalenPreviewPane19onTwoSecondsTimeoutEv @ 110 NONAME
- _ZN16CalenPreviewPane4DateEv @ 111 NONAME
- _ZN16CalenPreviewPane7setViewEP14CalenMonthView @ 112 NONAME
- _ZN16CalenPreviewPaneC1ER14MCalenServicesP13QGraphicsItem @ 113 NONAME
- _ZN16CalenPreviewPaneC2ER14MCalenServicesP13QGraphicsItem @ 114 NONAME
- _ZN16CalenPreviewPaneD0Ev @ 115 NONAME
- _ZN16CalenPreviewPaneD1Ev @ 116 NONAME
- _ZN16CalenPreviewPaneD2Ev @ 117 NONAME
- _ZN17CalenSettingsView11qt_metacallEN11QMetaObject4CallEiPPv @ 118 NONAME
- _ZN17CalenSettingsView11qt_metacastEPKc @ 119 NONAME
- _ZN17CalenSettingsView14initializeFormEv @ 120 NONAME
- _ZN17CalenSettingsView16staticMetaObjectE @ 121 NONAME DATA 16
- _ZN17CalenSettingsView18launchPreviousViewEv @ 122 NONAME
- _ZN17CalenSettingsView19getStaticMetaObjectEv @ 123 NONAME
- _ZN17CalenSettingsViewC1ER14MCalenServicesP13QGraphicsItem @ 124 NONAME
- _ZN17CalenSettingsViewC2ER14MCalenServicesP13QGraphicsItem @ 125 NONAME
- _ZN17CalenSettingsViewD0Ev @ 126 NONAME
- _ZN17CalenSettingsViewD1Ev @ 127 NONAME
- _ZN17CalenSettingsViewD2Ev @ 128 NONAME
- _ZN18CalenDayViewWidgetC1ER14MCalenServicesP14CalenDocLoader @ 129 NONAME
- _ZN18CalenDayViewWidgetC2ER14MCalenServicesP14CalenDocLoader @ 130 NONAME
- _ZN18CalenDayViewWidgetD0Ev @ 131 NONAME
- _ZN18CalenDayViewWidgetD1Ev @ 132 NONAME
- _ZN18CalenDayViewWidgetD2Ev @ 133 NONAME
- _ZN21CalenThickLinesDrawer11qt_metacallEN11QMetaObject4CallEiPPv @ 134 NONAME
- _ZN21CalenThickLinesDrawer11qt_metacastEPKc @ 135 NONAME
- _ZN21CalenThickLinesDrawer16staticMetaObjectE @ 136 NONAME DATA 16
- _ZN21CalenThickLinesDrawer19getStaticMetaObjectEv @ 137 NONAME
- _ZN21CalenThickLinesDrawer5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 138 NONAME
- _ZN21CalenThickLinesDrawerC1EN17CalendarNamespace10WidgetTypeEP13QGraphicsItem @ 139 NONAME
- _ZN21CalenThickLinesDrawerC2EN17CalendarNamespace10WidgetTypeEP13QGraphicsItem @ 140 NONAME
- _ZN21CalenThickLinesDrawerD0Ev @ 141 NONAME
- _ZN21CalenThickLinesDrawerD1Ev @ 142 NONAME
- _ZN21CalenThickLinesDrawerD2Ev @ 143 NONAME
- _ZNK14CalenMonthGrid10metaObjectEv @ 144 NONAME
- _ZNK14CalenMonthView10metaObjectEv @ 145 NONAME
- _ZNK16CalenPreviewPane10metaObjectEv @ 146 NONAME
- _ZNK17CalenSettingsView10metaObjectEv @ 147 NONAME
- _ZNK21CalenThickLinesDrawer10metaObjectEv @ 148 NONAME
- _ZTI14CalenMonthGrid @ 149 NONAME
- _ZTI14CalenMonthView @ 150 NONAME
- _ZTI16CalenPreviewPane @ 151 NONAME
- _ZTI17CalenSettingsView @ 152 NONAME
- _ZTI21CalenThickLinesDrawer @ 153 NONAME
- _ZTV14CalenMonthGrid @ 154 NONAME
- _ZTV14CalenMonthView @ 155 NONAME
- _ZTV16CalenPreviewPane @ 156 NONAME
- _ZTV17CalenSettingsView @ 157 NONAME
- _ZTV21CalenThickLinesDrawer @ 158 NONAME
- _ZThn16_N12CalenDayViewD0Ev @ 159 NONAME
- _ZThn16_N12CalenDayViewD1Ev @ 160 NONAME
- _ZThn16_N14CalenMonthGridD0Ev @ 161 NONAME
- _ZThn16_N14CalenMonthGridD1Ev @ 162 NONAME
- _ZThn16_N14CalenMonthViewD0Ev @ 163 NONAME
- _ZThn16_N14CalenMonthViewD1Ev @ 164 NONAME
- _ZThn16_N16CalenPreviewPaneD0Ev @ 165 NONAME
- _ZThn16_N16CalenPreviewPaneD1Ev @ 166 NONAME
- _ZThn16_N17CalenSettingsViewD0Ev @ 167 NONAME
- _ZThn16_N17CalenSettingsViewD1Ev @ 168 NONAME
- _ZThn16_N18CalenDayViewWidgetD0Ev @ 169 NONAME
- _ZThn16_N18CalenDayViewWidgetD1Ev @ 170 NONAME
- _ZThn16_N21CalenThickLinesDrawerD0Ev @ 171 NONAME
- _ZThn16_N21CalenThickLinesDrawerD1Ev @ 172 NONAME
- _ZThn28_N12CalenDayView18HandleNotificationE18TCalenNotification @ 173 NONAME
- _ZThn8_N12CalenDayViewD0Ev @ 174 NONAME
- _ZThn8_N12CalenDayViewD1Ev @ 175 NONAME
- _ZThn8_N14CalenMonthGrid15mousePressEventEP24QGraphicsSceneMouseEvent @ 176 NONAME
- _ZThn8_N14CalenMonthGrid17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 177 NONAME
- _ZThn8_N14CalenMonthGrid5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 178 NONAME
- _ZThn8_N14CalenMonthGridD0Ev @ 179 NONAME
- _ZThn8_N14CalenMonthGridD1Ev @ 180 NONAME
- _ZThn8_N14CalenMonthViewD0Ev @ 181 NONAME
- _ZThn8_N14CalenMonthViewD1Ev @ 182 NONAME
- _ZThn8_N16CalenPreviewPane14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 183 NONAME
- _ZThn8_N16CalenPreviewPane15mousePressEventEP24QGraphicsSceneMouseEvent @ 184 NONAME
- _ZThn8_N16CalenPreviewPane17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 185 NONAME
- _ZThn8_N16CalenPreviewPaneD0Ev @ 186 NONAME
- _ZThn8_N16CalenPreviewPaneD1Ev @ 187 NONAME
- _ZThn8_N17CalenSettingsViewD0Ev @ 188 NONAME
- _ZThn8_N17CalenSettingsViewD1Ev @ 189 NONAME
- _ZThn8_N18CalenDayViewWidgetD0Ev @ 190 NONAME
- _ZThn8_N18CalenDayViewWidgetD1Ev @ 191 NONAME
- _ZThn8_N21CalenThickLinesDrawer5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 192 NONAME
- _ZThn8_N21CalenThickLinesDrawerD0Ev @ 193 NONAME
- _ZThn8_N21CalenThickLinesDrawerD1Ev @ 194 NONAME
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/globaldata/bwins/calenglobaldatau.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,6 @@
+EXPORTS
+ ??0CalenContextImpl@@QAE@XZ @ 1 NONAME ; CalenContextImpl::CalenContextImpl(void)
+ ??1CalenContextImpl@@QAE@XZ @ 2 NONAME ; CalenContextImpl::~CalenContextImpl(void)
+ ??0CalenContextImpl@@QAE@PAVMCalenContextChangeObserver@@@Z @ 3 NONAME ; CalenContextImpl::CalenContextImpl(class MCalenContextChangeObserver *)
+ ??0CalenContextImpl@@QAE@ABV0@@Z @ 4 NONAME ; CalenContextImpl::CalenContextImpl(class CalenContextImpl const &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/globaldata/eabi/calenglobaldatau.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+ _ZN16CalenContextImplC1EP27MCalenContextChangeObserver @ 1 NONAME
+ _ZN16CalenContextImplC1ERKS_ @ 2 NONAME
+ _ZN16CalenContextImplC1Ev @ 3 NONAME
+ _ZN16CalenContextImplC2EP27MCalenContextChangeObserver @ 4 NONAME
+ _ZN16CalenContextImplC2ERKS_ @ 5 NONAME
+ _ZN16CalenContextImplC2Ev @ 6 NONAME
+ _ZN16CalenContextImplD1Ev @ 7 NONAME
+ _ZN16CalenContextImplD2Ev @ 8 NONAME
+
--- a/calendarui/globaldata/inc/calencontext.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/globaldata/inc/calencontext.h Thu Jul 22 16:32:51 2010 +0100
@@ -54,10 +54,8 @@
/**
* Sets the date and time currently focused.
* @param aFocusTime The new focus date and time.
- * @param aViewId The view id of the currently active view.
*/
- virtual void setFocusDateAndTimeL( const QDateTime& focusDateTime,
- const int& viewId ) = 0;
+ virtual void setFocusDateAndTime( const QDateTime& focusDateTime) = 0;
/**
* Sets the date currently focused. When retrieving the focus
@@ -65,29 +63,23 @@
* will be set to the default of view. When retrieving the focus
* time only, it will be set to -1.
* @param aFocusDate The new focus date and time.
- * @param aViewId The view id of the currently active view.
*/
- virtual void setFocusDateL( const QDateTime& focusDateTime,
- const int& viewId ) = 0;
+ virtual void setFocusDate( const QDateTime& focusDateTime) = 0;
/**
* Sets the id of the instance currently focused.
* @param aInstanceId the id of the focused instance.
- * @param aViewId The view id of the currently active view.
*/
- virtual void setInstanceIdL( const TCalenInstanceId& instanceId,
- const int& viewId ) = 0;
+ virtual void setInstanceId( const TCalenInstanceId& instanceId ) = 0;
/**
* Sets the time and instance currently focused.
* @param aFocusTime The new focus time. If no time is focused, set
* the Utc time of this object to be Time::NullTTime.
* @param aInstanceId the id of the focused instance.
- * @param aViewId The view id of the currently active view.
*/
- virtual void setFocusDateAndTimeAndInstanceL( const QDateTime& focusDateTime,
- const TCalenInstanceId& aInstanceId,
- const int& viewId ) = 0;
+ virtual void setFocusDateAndTimeAndInstance( const QDateTime& focusDateTime,
+ const TCalenInstanceId& aInstanceId ) = 0;
// Getters
/**
@@ -95,7 +87,8 @@
* @return The currently focused date and time. When no time is
* focused, the default time on the current date will be returned.
*/
- virtual QDateTime focusDateAndTimeL() const = 0;
+ virtual QDateTime focusDateAndTime() const = 0;
+
/**
* Gets the time currently focused.
@@ -111,13 +104,6 @@
*/
virtual TCalenInstanceId instanceId() const = 0;
- /**
- * Gets the id of the currently active view.
- * @return The view id of the currently active view.
- */
- virtual int viewId() const = 0;
-
-
public: // For Mutliple Context Support
/**
@@ -154,23 +140,6 @@
*/
virtual int mutlipleContextIdsCount() = 0;
- /**
- * Sets the user selected landmark
- * @param aLandMark Landmark object
- */
- //virtual void SetLandMark(CPosLandmark* aLandMark) = 0;
-
- /**
- * Returns the user selected landmark
- * @return Landmark object
- */
- //virtual CPosLandmark* GetLandMark() = 0;
-
- /**
- * Resets the landmark
- */
- //virtual void ResetLandMark() = 0;
-
};
#endif // CALENCONTEXT_H
--- a/calendarui/globaldata/inc/calencontextimpl.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/globaldata/inc/calencontextimpl.h Thu Jul 22 16:32:51 2010 +0100
@@ -50,7 +50,7 @@
CALENCONTEXTIMPL_EXPORT CalenContextImpl( MCalenContextChangeObserver* observer );
CALENCONTEXTIMPL_EXPORT CalenContextImpl();
CALENCONTEXTIMPL_EXPORT CalenContextImpl( const CalenContextImpl& context );
- ~CalenContextImpl();
+ CALENCONTEXTIMPL_EXPORT ~CalenContextImpl();
public: // from MCalenContext
// Utils
@@ -72,10 +72,8 @@
/**
* Sets the date and time currently focused.
* @param aFocusTime The new focus date and time.
- * @param aViewId The view id of the currently active view.
*/
- void setFocusDateAndTimeL( const QDateTime& focusDateTime,
- const int& viewId );
+ void setFocusDateAndTime( const QDateTime& focusDateTime);
/**
* Sets the date currently focused. When retrieving the focus
@@ -83,29 +81,23 @@
* will be set to the default of view. When retrieving the focus
* time only, it will be set to -1.
* @param aFocusDate The new focus date and time.
- * @param aViewId The view id of the currently active view.
*/
- void setFocusDateL( const QDateTime& focusDateTime,
- const int& viewId );
+ void setFocusDate( const QDateTime& focusDateTime );
/**
* Sets the id of the instance currently focused.
* @param aInstanceId the id of the focused instance.
- * @param aViewId The view id of the currently active view.
*/
- void setInstanceIdL( const TCalenInstanceId& instanceId,
- const int& viewId );
+ void setInstanceId( const TCalenInstanceId& instanceId );
/**
* Sets the time and instance currently focused.
* @param aFocusTime The new focus time. If no time is focused, set
* the Utc time of this object to be Time::NullTTime.
* @param aInstanceId the id of the focused instance.
- * @param aViewId The view id of the currently active view.
*/
- void setFocusDateAndTimeAndInstanceL( const QDateTime& focusDateTime,
- const TCalenInstanceId& aInstanceId,
- const int& viewId );
+ void setFocusDateAndTimeAndInstance( const QDateTime& focusDateTime,
+ const TCalenInstanceId& aInstanceId);
// Getters
/**
@@ -113,7 +105,7 @@
* @return The currently focused date and time. When no time is
* focused, the default time on the current date will be returned.
*/
- QDateTime focusDateAndTimeL() const;
+ QDateTime focusDateAndTime() const;
/**
* Gets the time currently focused.
@@ -129,12 +121,6 @@
*/
TCalenInstanceId instanceId() const;
- /**
- * Gets the id of the currently active view.
- * @return The view id of the currently active view.
- */
- int viewId() const;
-
public: // Multiple Context support
--- a/calendarui/globaldata/src/calencontextimpl.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/globaldata/src/calencontextimpl.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -71,9 +71,13 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-CalenContextImpl::~CalenContextImpl()
- {
- }
+EXPORT_C CalenContextImpl::~CalenContextImpl()
+ {
+ if(mMutlipleContextIds.count())
+ {
+ mMutlipleContextIds.clear();
+ }
+ }
// ----------------------------------------------------------------------------
// CalenContextImpl::DefaultTimeForViews
@@ -111,23 +115,21 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-void CalenContextImpl::setFocusDateAndTimeL( const QDateTime& focusDateTime,
- const int& viewId )
+void CalenContextImpl::setFocusDateAndTime( const QDateTime& focusDateTime)
{
+ mFocusDate = focusDateTime;
+ mFocusTime = focusDateTime.time().minute() + 1;
+
+ if( mFocusTime < 0 )
+ mFocusTime = 0;
+ mInstanceId = TCalenInstanceId::nullInstanceId();
+
// If this fails you're using a context that was constructed yourself.
// Use the accessor from the global data instead, or don't try to set
// anything on this context.
- ASSERT( mObserver );
-
- mFocusDate = focusDateTime;
- mFocusTime = focusDateTime.time().minute() + 1;
-
- ASSERT( mFocusTime >= 0 );
- mInstanceId = TCalenInstanceId::nullInstanceId();
- mViewId = viewId;
-
- mObserver->ContextChanged();
+ if(mObserver)
+ mObserver->ContextChanged();
}
// ----------------------------------------------------------------------------
@@ -136,20 +138,17 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-void CalenContextImpl::setFocusDateL( const QDateTime& focusDateTime,
- const int& viewId )
+void CalenContextImpl::setFocusDate( const QDateTime& focusDateTime)
{
+ mFocusDate = focusDateTime;
+ mFocusTime = -1;
+ mInstanceId = TCalenInstanceId::nullInstanceId();
+
// If this fails you're using a context that was constructed yourself.
// Use the accessor from the global data instead, or don't try to set
// anything on this context.
- ASSERT( mObserver );
-
- mFocusDate = focusDateTime;
- mFocusTime = -1;
- mInstanceId = TCalenInstanceId::nullInstanceId();
- mViewId = viewId;
-
- mObserver->ContextChanged();
+ if(mObserver)
+ mObserver->ContextChanged();
}
// ----------------------------------------------------------------------------
@@ -158,22 +157,19 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-void CalenContextImpl::setInstanceIdL( const TCalenInstanceId& aInstanceId,
- const int& viewId )
+void CalenContextImpl::setInstanceId( const TCalenInstanceId& aInstanceId )
{
+ // Set the null date and time
+ mFocusDate = QDateTime();
+ mFocusTime = -1;
+ mInstanceId = aInstanceId;
+
// If this fails you're using a context that was constructed yourself.
// Use the accessor from the global data instead, or don't try to set
// anything on this context.
- ASSERT( mObserver );
-
- // Set the null date and time
- mFocusDate = QDateTime();
- mFocusTime = -1;
- mInstanceId = aInstanceId;
- mViewId = viewId;
-
- mObserver->ContextChanged();
+ if(mObserver)
+ mObserver->ContextChanged();
}
// -----------------------------------------------------------------------------
@@ -182,23 +178,20 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
-void CalenContextImpl::setFocusDateAndTimeAndInstanceL( const QDateTime& focusDateTime,
- const TCalenInstanceId& instanceId,
- const int& viewId )
+void CalenContextImpl::setFocusDateAndTimeAndInstance( const QDateTime& focusDateTime,
+ const TCalenInstanceId& instanceId )
{
+ mFocusDate = focusDateTime;
+ mFocusTime = focusDateTime.time().minute() + 1;
+ if( mFocusTime < 0 )
+ mFocusTime = 0;
+ mInstanceId = instanceId;
// If this fails you're using a context that was constructed yourself.
// Use the accessor from the global data instead, or don't try to set
// anything on this context.
- ASSERT( mObserver );
-
- mFocusDate = focusDateTime;
- mFocusTime = focusDateTime.time().minute() + 1;
- ASSERT( mFocusTime >= 0 );
- mInstanceId = instanceId;
- mViewId = viewId;
-
- mObserver->ContextChanged();
+ if(mObserver)
+ mObserver->ContextChanged();
}
// -----------------------------------------------------------------------------
@@ -207,7 +200,7 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
-QDateTime CalenContextImpl::focusDateAndTimeL() const
+QDateTime CalenContextImpl::focusDateAndTime() const
{
QDateTime ret;
@@ -250,19 +243,6 @@
}
// -----------------------------------------------------------------------------
-// CalenContextImpl::ViewId
-// Returns the view id
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-int CalenContextImpl::viewId() const
- {
- TRACE_ENTRY_POINT;
- TRACE_EXIT_POINT;
- return mViewId;
- }
-
-// -----------------------------------------------------------------------------
// CalenContextImpl::SetMutlipleContextIds
// Set multiple context ids
// (other items were commented in a header).
--- a/calendarui/inc/CalenConstants.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/CalenConstants.h Thu Jul 22 16:32:51 2010 +0100
@@ -63,6 +63,9 @@
};
const TInt KWeekTitleSize(64);
+
+const QString activityName = "Calendar"; //Activity Name to be stored in Activity Manager DB
+
// FIXME: can be here now, but later on move to some other header.
enum TCalenWeekTitle
{
--- a/calendarui/inc/CalenUid.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/CalenUid.h Thu Jul 22 16:32:51 2010 +0100
@@ -24,7 +24,7 @@
// UIDS of the S60 Calendar native views
const TInt KCalenMonthViewUidValue = 0x00000000 ;
-const TInt KCalenDayViewUidValue = 0x00000002;
+const TInt KCalenAgendaViewUidValue = 0x00000002;
const TInt KCalenEventViewUidValue = 0x00000003;
const TInt KCalenLandscapeDayViewUidValue = 0x00000004;
const TInt KCalenTodoEditorViewUidValue = 0x00000005;
@@ -32,12 +32,13 @@
const TUid KUidCalenMonthView = { KCalenMonthViewUidValue };
-const TUid KUidCalenDayView = { KCalenDayViewUidValue };
+const TUid KUidCalenAgendaView = { KCalenAgendaViewUidValue };
const TUid KCalenTodoEditorView = { KCalenTodoEditorViewUidValue };
const TUid KUidCalenEventView = { KCalenEventViewUidValue };
const TUid KUidCalenLandscapeDayView = { KCalenLandscapeDayViewUidValue };
const TUid KUidCalenSettingsView = { KCalenSettingsViewUidValue };
+const TUid KCalenChineseImplUid = {0x2002EA3D};
#endif // CALENUID_H
--- a/calendarui/inc/CalendarInternalCRKeys.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,107 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: ?Description
-*
-*/
-
-
-#ifndef CALENDARINTERNALCRKEYS_H
-#define CALENDARINTERNALCRKEYS_H
-
-//#include <CalendarSDKCRKeys.h>
-
-/** Calendar UI Settings API */
-/** Provides access to the Calendar application's settings */
-
-const TUid KCRUidCalendar = {0x101F874B};
-
-
-/**
-* Default alarm time in minutes before event starting time.
-* Value is an integer between 0 and 60. Default: 15.
-**/
-const TUint32 KCalendarDefaultAlarmTime = 0x00000000;
-
-/**
-* Default starting view for Calendar. Value is an integer between 0 and 2.
-* 0 = Month view (default)
-* 1 = Week view
-* 2 = Day view
-**/
-const TUint32 KCalendarDefaultStartView = 0x00000001;
-
-/**
-* Week view title in Calendar application.
-* Value is eihter integer 0 or 1
-* 0 = Week number (default)
-* 1 = Week dates
-**/
-const TUint32 KCalendarWeekViewTitle = 0x00000002;
-
-/**
-* Is Chinese Lunar calendar information shown in Calendar
-* (only available if feature is included in ROM image).
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-* This key value is deprecated and has been replaced by the KCRUidCalenLunarPlugin key.
-**/
-const TUint32 KCalendarLunarCalendar = 0x00000003;
-
-/**
-* Calendar alarm sound file, string.
-* Default value : "z:\data\sounds\digital\alarm.aac"
-**/
-const TUint32 KCalendarSoundFile = 0x00000004;
-
-/**
-* Default Calendar alarm sound file.
-* Default value : "z:\data\sounds\digital\alarm.aac"
-**/
-const TUint32 KCalendarDefaultSoundFile = 0x00000005;
-
-/**
-* A flag that is set when a Calendar alarm was lost due to time change.
-* Default value: 0
-*/
-const TUint32 KCalendarLostAlarm = 0x00000006;
-
-/**
-* Calendar alarm snooze time interval in minutes.
-* Default value: 5
-*/
-const TUint32 KCalendarSnoozeTime = 0x00000007;
-
-//Added as an addition to the Symbian fix
-/**
-* Calendar Persistent Time to store the last time the System Time updated.
-* Default Value : 0
-*/
-const TReal KCalendarPersistentTime = 0x00000009;
-
-/**
-* Text string containing UIDs and enabled/disabled flag (separated
-* by commas) for Calendar plugins.
-* Default value: Empty
-*/
-const TUint32 KCalendarPluginAvailability = 0x0000000A;
-
-/**
-* Defines whether regional information must be shown in the Calendar or not
-* Default value: 1
-*/
-const TUint32 KShowRegionalInformation = 0x0000000B;
-
-
-#endif // CALENDARINTERNALCRKEYS_H
--- a/calendarui/inc/CalendarPrivateCRKeys.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/CalendarPrivateCRKeys.h Thu Jul 22 16:32:51 2010 +0100
@@ -1,5 +1,5 @@
/*
-* Copyright (c) 2002-2004 Nokia Corporation and/or its subsidiary(-ies).
+* Copyright (c) 2009 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"
@@ -11,86 +11,28 @@
*
* Contributors:
*
-* Description: ?Description
+* Description: The file contains the uid of keys used by application.
+*
*
*/
-
#ifndef CALENDARPRIVATECRKEYS_H
#define CALENDARPRIVATECRKEYS_H
-#include <CalendarInternalCRKeys.h>
-
-/** Calendar UI Local Variation API */
-/** Provides access to the Calendar application's local variation setting */
-
-const TUid KCRUidCalendarLV = {0x101F874C};
-
+#include <calendardomaincrkeys.h>
/**
-* Local variation bitmask for Caledar configuration.
-* For values refer to CalendarVariant.hrh.
-*
+* Defines whether week number must be shown in month view of the calendar.
+* Default value: 0
**/
-const TUint32 KCalenLVFlags = 0x00000007;
-
-
-/** Calendar Thai Plugin Settings API */
-/** Provides access to the Calendar Thai Plugin's settings */
-const TUid KCRUidCalenThaiPlugin = {0x102823D2};
-
-/**
-* User modifiable setting
-* Is Thai regional Calendar information shown in Calendar
-* (only available if feature is included in phone,
-* currnet display language is Thai)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenThaiPluginEnabled = 0x00000000;
-
-
-/** Calendar Lunar Calendar Plugin Settings API */
-/** Provides access to the Calendar Lunar Plugin's settings */
-const TUid KCRUidCalenLunarPlugin = { 0x102823D1 };
+const long int KCalendarShowWeekNum = 0x00000000;
/**
-* User modifiable setting
-* Is Chinese Lunar Calendar information shown in Calendar
-* (only available if feature is included in phone,
-* currnet display language is some of Chinese languages)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenChineseLunarEnabled = 0x00000000;
-
-
-/**
-* User modifiable setting
-* Is Vietnamese Lunar Calendar information shown in Calendar
-* (only available if feature is included in phone,
-* currnet display language is Vietnamese languages)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenVietnameseLunarEnabled = 0x00000001;
-
-
-/** Calendar UI Extensions Settings API */
-/** Provides access to user settings that enable Calendar UI extensions and customizations */
-const TUid KCRUidCalenUIExtensions = { 0x10282ED7 };
-
-/**
-* User modifiable setting to enable the AIW External Calendar.
-* (only available if an AIW provider is included in phone)
-* Value is either integer 0 or 1
-* 0 = Off
-* 1 = On (default)
-**/
-const TUint32 KCalenExternalCalendarEnabled = 0x00000000;
-
+* Defines whether regional information must be shown in the Calendar.
+* Default value: 1
+*/
+const long int KCalendarShowRegionalInfo = 0x00000002;
#endif // CALENDARPRIVATECRKEYS_H
+
+// End of file --Don't remove this.
--- a/calendarui/inc/calenagendautils.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/calenagendautils.h Thu Jul 22 16:32:51 2010 +0100
@@ -43,12 +43,6 @@
public:
/**
- * Removes entries ending aDay at midnight.
- **/
- static void removeEntriesEndingAtMidnightL( QList<AgendaEntry>& list,
- const QDateTime& day );
-
- /**
* Checks that if entry ends at starting midnight of the day,
* but has started earlier.
* Such entries are not shown in day that they end, because end time
@@ -56,7 +50,7 @@
* @returns ETrue, if entry ends at starting midnight of day, but starts before that
* EFalse, otherwise
**/
- static bool endsAtStartOfDayL( AgendaEntry& entry,
+ static bool endsAtStartOfDay( AgendaEntry& entry,
const QDateTime& day );
};
--- a/calendarui/inc/calencommandhandler.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/calencommandhandler.h Thu Jul 22 16:32:51 2010 +0100
@@ -39,7 +39,6 @@
int iCommand;
QDateTime iFocusDateAndTime;
TCalenInstanceId iInstanceId;
- int iViewId;
};
inline TCalenCommand::TCalenCommand()
@@ -50,9 +49,8 @@
MCalenContext& aContext)
{
iCommand = aCommand;
- iFocusDateAndTime = aContext.focusDateAndTimeL();
+ iFocusDateAndTime = aContext.focusDateAndTime();
iInstanceId = aContext.instanceId();
- iViewId = aContext.viewId();
}
inline TInt TCalenCommand::Command() const
@@ -62,9 +60,8 @@
inline void TCalenCommand::GetContextL( MCalenContext& aContext ) const
{
- aContext.setFocusDateAndTimeAndInstanceL( iFocusDateAndTime,
- iInstanceId,
- iViewId );
+ aContext.setFocusDateAndTimeAndInstance( iFocusDateAndTime,
+ iInstanceId );
}
--- a/calendarui/inc/calencommon.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/calencommon.h Thu Jul 22 16:32:51 2010 +0100
@@ -19,16 +19,17 @@
#ifndef CALENCOMMON_H
#define CALENCOMMON_H
-#define CALEN_DAYVIEW_XML_FILE ":/xml/calendayview.docml"
-#define CALEN_DAYVIEW "dayView"
-#define CALEN_DAYVIEW_WIDGET "dayViewWidget"
-#define CALEN_DAYVIEW_LISTWIDGET "eventsList"
-#define CALEN_DAYVIEW_HEADING "headingWidget"
-#define CALEN_DAYVIEW_HEADING_REGIONALPLUGIN_WIDGET "headingRegionalPluginWidget"
-#define CALEN_DAYVIEW_MENU_NEW_EVENT "newEventAction"
-#define CALEN_DAYVIEW_MENU_GO_TO_TODAY "todayAction"
-#define CALEN_DAYVIEW_MENU_GO_TO_DATE "goToDateAction"
-#define CALEN_DAYVIEW_MENU_SETTINGS "settingsAction"
+#define CALEN_AGENDAVIEW_XML_FILE ":/xml/calenagendaview.docml"
+#define CALEN_AGENDAVIEW "agendaView"
+#define CALEN_AGENDAVIEW_WIDGET "agendaViewWidget"
+#define CALEN_AGENDAVIEW_LISTWIDGET "eventsList"
+#define CALEN_AGENDAVIEW_HEADING "headingWidget"
+#define CALEN_AGENDAVIEW_HEADING_REGIONALPLUGIN_WIDGET "headingRegionalPluginWidget"
+#define CALEN_AGENDAVIEW_MENU_NEW_EVENT "newEventAction"
+#define CALEN_AGENDAVIEW_MENU_GO_TO_TODAY "todayAction"
+#define CALEN_AGENDAVIEW_MENU_GO_TO_DATE "goToDateAction"
+#define CALEN_AGENDAVIEW_MENU_SWITCH_TO_DAYVIEW "switchToDayViewAction"
+#define CALEN_AGENDAVIEW_MENU_SETTINGS "settingsAction"
#define CALEN_PORTRAIT "portrait"
#define CALEN_LANDSCAPE "landscape"
#define CALEN_MONTHVIEW_XML_FILE ":/xml/calenmonthview.docml"
@@ -41,6 +42,9 @@
#define CALEN_PREVPREVIEWPARENT "prevPaneWidget"
#define CALEN_CURRPREVIEWPARENT "currPaneWidget"
#define CALEN_NEXTPREVIEWPARENT "nextPaneWidget"
+#define CALEN_PREVREGIONALINFO "prevRegionalInfo"
+#define CALEN_CURRREGIONALINFO "currRegionalInfo"
+#define CALEN_NEXTREGIONALINFO "nextRegionalInfo"
#define CALEN_NEXTPANELAYOUT "nextPaneLayout"
#define CALEN_CURRPANELAYOUT "currPaneLayout"
#define CALEN_PREVPREVIEWPANE "prevPreviewPane"
--- a/calendarui/inc/calendateutils.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/calendateutils.h Thu Jul 22 16:32:51 2010 +0100
@@ -62,12 +62,6 @@
static bool isValidDay( const QDateTime& time );
/**
- * Return ETrue if aTime is NULL
- * @param aTime time to be compared against NULL time
- */
- static bool isNullTime( QDateTime& time );
-
- /**
* Return Min or Max time if aTime goes out of bounds.
* Valid range is [CalenDateUtils::MinTime(), CalenDateUtils::MaxTime]
* @param aTime time to be checked
@@ -125,8 +119,6 @@
*/
static QDateTime defaultTime( const QDateTime& date );
- static QDateTime pastOf(const QDateTime& dateTime, int numOfDays);
-
static QDateTime futureOf(const QDateTime& dateTime, int numOfDays);
--- a/calendarui/inc/hb_calencommands.hrh Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/inc/hb_calencommands.hrh Thu Jul 22 16:32:51 2010 +0100
@@ -38,8 +38,8 @@
{
ECalenMonthView = ECalenViewCommandBase,
ECalenWeekView,
+ ECalenAgendaView,
ECalenDayView,
- ECalenLandscapeDayView,
ECalenTodoEditor,
ECalenTodoEditorDone,
ECalenForwardsToDayView,
--- a/calendarui/loc/calendar.loc Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2037 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: This is a localisation file for Calendar
-* A _loc file is the one and only place where the logical
-* strings to be localised are defined
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-
-//d:Application title for listview
-//l:list_single_large_graphic_pane_t1
-//
-#define qtn_apps_calendar_list "Calendar"
-
-//d:Application title for general settings pane
-//l:list_single_large_graphic_pane_t1_cp2
-//
-#define qtn_cale_title_calendar "Calendar"
-
-//d:Application title for grid
-//l:cell_app_pane_t1
-//
-#define qtn_apps_calendar_grid "Calendar"
-
-//d:Opens New entry SubMenu
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_make_note "New entry"
-
-//d:Opens delete SubMenu in MonthView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_delete "Delete"
-
-//d:Deletes a note
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_delete "Delete"
-
-//d:Discard changes to a note
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_cancel_changes "Discard changes"
-
-//d:Confirmation text when discarding changes to a note
-//l:popup_note_window
-//
-#define qtn_cale_query_cancel_changes "Discard changes?"
-
-//d:Opens SettingView
-//l:list_single_pane_t1_cp2
-//
-#define text_calendar_settings "Settings"
-
-//d:Opens DayView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_open "Open"
-
-//d:Opens WeekView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_view_week "View by weeks"
-
-//d:Jumps to a specific date
-//l:list_single_pane_t1_cp2
-//
-#define text_calendar_goto_date "Go to date"
-
-//d:Opens Meeting note
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_meeting_note "Meeting"
-
-
-//d:Opens Meeting Request note
-//d:Option list item for this is "Make Note"
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_cale_meeting_request_note "Meeting Request"
-
-
-//d:Opens Anniversary Note
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_note_anniversary "Anniversary"
-
-//d:Opens Day Note
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_day_note "Day note"
-
-//d:Opens MonthView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_view_month "View month"
-
-//d:Deletes all notes
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_sub_all "All notes"
-
-//d:the date before the notes are to be deleted.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_sub_setdate "Before set date"
-
-//d:Settings is changed
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_change "Change"
-
-//d:Subject item text of Meeting
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_subject "subject"
-
-//d:Start date item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_date "start date"
-
-//d:End date item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_end "end date"
-
-//d:Start date and time item text of entry editor
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_start_time_date "start time and date"
-
-//d:End date and time item text of entry editor
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_end_time_date "end time and date"
-
-//d:Alarm date and time item text of entry editor
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_alarm_time_date "alarm time and date"
-
-//d:Start time item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_start "start time"
-
-//d:End time item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_end_meet_time "end time"
-
-//d:Alarm item text of Meeting, Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_alarm_activity "alarm"
-
-//d:Alarm time item text of Meeting, Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_alarm "alarm time"
-
-//d:Alarm date item text of Meeting, Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_alarmdate "alarm date"
-
-//d:Repeat item text of Meeting, Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_repeat "repeat"
-
-//d:Repeat until item text of Meeting, Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_until "repeat until"
-
-//d:Confidentiality item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_confident "synchronisation"
-
-//d:Subject item text of Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_anniversary_occasion "occasion"
-
-//d:Start date item text of Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_anniversary_start_date "date"
-
-//d:Subject item text of Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_day_description "description"
-
-//d:Start date item text of Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_day_start_date "start date"
-
-//d:End date item text of Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_day_end_date "end date"
-
-//d:Occasion item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_occasion "Occasion:"
-
-//d:Date item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_date "Date:"
-
-//d:Subject item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_subject "Subject:"
-
-//d:Location item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_location "Location:"
-
-//d:Synchronisation item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync "Synchronisation:"
-
-//d:Alarm item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_alarm "Alarm:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_daily "Repeats daily:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_weekly "Repeats weekly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_fortnightly "Repeats fortnightly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_monthly "Repeats monthly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_yearly "Repeats yearly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_other "Recurring entry:"
-
-//d:Repeat item text of note viewer when no end date (repeat from ...)
-//d:%0U is date entry repeats from
-//l:list_form_graphic_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_valid_forever "From %0U"
-
-//d:Navi pane decoration for event viewers
-//d:%0U is current instance date
-//d:%1U is index of current instance
-//d:%2U is total instance count for current day
-//l:navi_text_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_navi "%0U %1U/%2U"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat "Repeat:"
-
-//d:Time item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_time "Time:"
-
-//d:Due date item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_due_date "Due date:"
-
-//d:Since item text of note viewer (anniversaries only)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_since "Since:"
-
-//d:Priority item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio "Priority:"
-
-//d:Description item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_desc "Description:"
-
-//d:Private item text of note viewer (Sync)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync_private "Private"
-
-//d:Public item text of note viewer (Sync)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync_public "Public"
-
-//d:None item text of note viewer (Sync)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync_none "None"
-
-//d:High item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio_high "High"
-
-//d:Normal item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio_normal "Normal"
-
-//d:Low item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio_low "Low"
-
-//d:Completed item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_completed "Completed:"
-
-//d:Date and time when appointment starts and ends on the same day
-//d:The string is small enough to fit onto one line
-//d:%0U is start time
-//d:%1U is end time
-//d:%2U is start date
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_day "%0U - %1U %2U"
-
-//d:Date and time when appointment starts and ends on the same day
-//d:The string is too long to fit onto one line so must include a linebreak
-//d:%0U is start time
-//d:%1U is end time
-//d:%2U is start date
-//d:<\x2028> is line break
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_day_wrapped "%0U - %1U"<0x2028>"%2U"
-
-//d:Date and time when appointment starts and ends on different days
-//d:The string is small enough to fit onto one line
-//d:%0U is start time
-//d:%1U is start date
-//d:%2U is end time
-//d:%3U is end date
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_days "%0U %1U - %2U %3U"
-
-//d:Date and time when appointment starts and ends on different days
-//d:The string is too long to fit onto one line so must include a linebreak
-//d:%0U is start time
-//d:%1U is start date
-//d:%2U is end time
-//d:%3U is end date
-//d:<\x2028> is line break
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_days_wrapped "%0U %1U -"<0x2028>"%2U %3U"
-
-//d:Date and time of alarm (when alarm is on different day to event)
-//d:%0U is alarm time
-//d:%1U is alarm date
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_alarm_time "%0U %1U"
-
-//d:Start and end date of event, when event lasts for more than one day
-//d:%0U is start date
-//d:%1U is end date
-//l:msg_body_pane/opt
-//r:3.2
-//
-#define qtn_cale_viewer_valid_limited "%0U - %1U"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_daily "%N day meeting cannot repeat daily"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_weekly "%N day meeting cannot repeat weekly"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_fortnightly "%N day meeting cannot repeat fortnightly"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_monthly "%N day meeting cannot repeat monthly"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_yearly "%N day meeting cannot repeat yearly"
-
-//d:Error text when attempting to move a meeting out of sequence
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_child_out_of_sequence "Unable to move a meeting out of sequence"
-
-//d:Error note when attempting to move an instance of a meeting to a day when an instance already exists
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_child_same_day "Two occurrences of a meeting cannot occur on the same day"
-
-//d:Error note when attempting to move a meeting to overlap another instance of the meeting
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_child_overlap "Meeting cannot overlap another instance of itself"
-
-//d:Alarm active text of Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_alarm_active "Active"
-
-//d:Alarm off text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_alarm_off "Off"
-
-//d:Synchronisation type text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_confident_public "Public"
-
-//d:Synchronisation type text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_confident_private "Private"
-
-//d:Synchronisation type text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_confident_none "None"
-
-//d:Repeat type "Not repeated" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_not_repeated "Not repeated"
-
-//d:Repeat type "Every day" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_every_day "Every day"
-
-//d:Repeat type "Every week" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_every_week "Every week"
-
-//d:Repeat type "Every two weeks" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_bi_weekly "Every 2 weeks"
-
-//d:Repeat type "Monthly" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_repeat_monthly "Monthly"
-
-//d:Repeat type "Yearly" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_every_year "Every year"
-
-//d:Repeat type "Other" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_other "Other"
-
-//d:Title pane text of Meeting form
-//l:title_pane_t2/opt9
-//
-#define text_calendar_title_meeting "Meeting"
-
-//d:Title pane text of Anniversary form
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_anniversary_title "Anniversary"
-
-//d:Title pane text of Day form
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_title_daynote "Day note"
-
-//d:After confirming the saving,the confirmation note
-//d:Calendar note savedis shown
-//l:popup_note_window
-//
-#define text_calendar_note_saved "Note saved"
-
-//d:The List_Query with the prompt text Save Repeat Note?
-//l:heading_pane_t1
-//
-#define qtn_cale_lq_save_chang_repeated "Save changes?"
-
-//d:The List_Query with the prompt text "Edit:" (choices being Series or Occurrence)
-//l:heading_pane_t1
-//
-#define qtn_cale_lq_edit_recurring "Edit:"
-
-//d:All notes delete prompt
-//l:popup_note_window
-//
-#define qtn_cale_quest_delete_all_notes "Delete all notes"
-
-//d:A note delete prompt
-//l:popup_note_window
-//
-#define qtn_cale_quest_delete_event "Delete note?"
-
-//d:Data query for inputting the date before the notes are to be deleted.
-//l:popup_query_data_window
-//
-#define qtn_cale_prmpt_del_before_date "Delete before set date"
-
-//d:When deleting a repeated note,
-//d:the phone prompts the List_Query
-//l:heading_pane_t1
-//
-#define qtn_cale_lq_del_repeated_note "Delete repeated note"
-
-//d:After deleting of notes phone displays the information note
-//l:popup_note_window
-//
-#define qtn_cale_conf_past_note_deleted "Notes from past to set date deleted"
-
-//d:After deleting of notes phone displays the information note
-//l:popup_note_window
-//
-#define qtn_cale_conf_all_notes_deleted "All notes deleted from Calendar"
-
-//d:Erase or update note selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_all_occurences "All occurrences"
-
-//d:Erase or update selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_this_occurence "Only this occurrence"
-
-//d:Edit note selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_edit_series "All occurrences"
-
-//d:Edit note selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_edit_this "Only this occurrence"
-
-//d:Specified Out of range of date
-//l:popup_note_window
-//
-#define qtn_cale_info_year_limit "Year limit is from 1900 to 2100"
-
-//d:Error prompt for alarm date too past
-//l:popup_note_window
-//
-#define qtn_cale_date_alarm_past "Alarm date is too past"
-
-//d:Error prompt for alarm time earlier than note
-//l:popup_note_window
-//
-#define qtn_cale_later_date "Alarm later than note"
-
-//d:Error prompt for setting alarm time which is past.
-//l:popup_note_window
-//
-#define qtn_cale_not_expired "The time for the note alarm has already expired"
-
-//d:Error prompt for repeat until date earlier than start date.
-//l:popup_note_window
-//
-#define qtn_cale_info_repeat_invalid "Repeat until has to be later than the start date"
-
-//d:Confirmaiton prompt for updating start date on repeat note.
-//l:popup_note_window
-//
-#define qtn_cale_quest_change_start_day "Are you sure to change start date of selected recurring note?"
-
-//d:Error prompt "Note ends before than starts"
-//l:popup_note_window
-//
-#define qtn_cale_info_note_ends_before "Note ends before than starts"
-
-//d:Error prompt. Date limit could be set only to the past.
-//l:popup_note_window
-//
-#define qtn_cale_date_not_future "Date in the future not allowed"
-
-//d:Calendar Settings title pane
-//l:title_pane_t2/opt9
-//
-#define text_calendar_setting_title "Settings"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define qtn_cale_default_view "Default view"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define qtn_cale_week_format "Week format"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define text_calendar_week_title_format "Title of week view"
-
-//d: Calendar Settings "Default view" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_default_day_view "Day View"
-
-//d: Calendar Settings "Default view" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_default_week_view "Week View"
-
-//d: Calendar Settings "Default view" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_default_month_view "Month View"
-
-//d: Calendar Settings "Title of week view" item
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_week_title_numb "Week number"
-
-//d: Calendar Settings "Title of week view" item
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_week_title_dur "Duration of week"
-
-//d:Calendar Settings "Default Mailbox" item
-//l:heading_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_cale_lq_select_mailbox "Select Default Mailbox: "
-
-//d:Calendar "Default Mailbox" setting item name.
-//l:list_setting_pane_t1/opt1
-//w:
-//r:3.0
-//
-#define qtn_cale_default_mailbox "Default mailbox"
-
-//d:Calendar no default mailboxes defined prompt
-//l:popup_note_window
-//w:
-//r:3.0
-//
-#define qtn_cale_query_define_mailbox "No mailboxes defined, define now?"
-
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1
-//r:3.2
-//
-#define qtn_cale_sett_arabic_cale "Arabic calendar"
-
-//d:Opens external calendar application
-//l:list_single_pane_t1_cp2
-//r:3.2
-//
-#define qtn_cale_om_external_cale "External calendar"
-
-//d: Calendar date query prompt
-//l:popup_query_data_window
-//
-#define text_calendar_date_prompt "Date:"
-
-//d:Title pane text in WeekView main state
-//d:currently highlighted day's Week %N
-//d:%N was setted week number
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_week_view_title "Week %N"
-
-//d:Title pane text in WeekView main state
-//d:currently highlighted day's %0U - %1U
-//d:The date of dd/mm/yy form is set to %0U or %1U.
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_title_week_days "%0U -\n %1U"
-
-//d:Confirmation note.
-//d:Message is shown after system time change, but no alarms were missed.
-//l:popup_note_window
-//
-#define qtn_cale_note_system_time_changed "System time changed, Calendar events are updated accordingly"
-
-//d:Deleting wait note text
-//l:popup_note_wait_window
-//
-#define qtn_cale_wait_deleting_notes "Deleting notes..."
-
-//d:Location item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_location "location"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define qtn_chi_cale_sett_lunar_cale "Lunar calendar"
-
-//d: Calendar Settings "Lunar calendar" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_chi_cale_lunar_cale_on "On"
-
-//d: Calendar Settings "Lunar calendar" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_chi_cale_lunar_cale_off "Off"
-
-//d:Chinese Animal year - Rat
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_rat "Year of the Rat"
-
-//d:Chinese Animal year - Ox
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_ox "Year of the Ox"
-
-//d:Chinese Animal year - Tiger
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_tiger "Year of the Tiger"
-
-//d:Chinese Animal year - Rabbit
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_rabbit "Year of the Rabbit"
-
-//d:Chinese Animal - Rabbit
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_dragon "Year of the Dragon"
-
-//d:Chinese Animal - Snake
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_snake "Year of the Snake"
-
-//d:Chinese Animal - Horse
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_horse "Year of the Horse"
-
-//d:Chinese Animal - Sheep
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_sheep "Year of the Sheep"
-
-//d:Chinese Animal - Monkey
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_monkey "Year of the Monkey"
-
-//d:Chinese Animal - Rooster
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_rooster "Year of the Rooster"
-
-//d:Chinese Animal - Dog
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_dog "Year of the Dog"
-
-//d:Chinese Animal - Pig
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_pig "Year of the Pig"
-
-//d:Chinese Heavenly stem 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_1 "Jia"
-
-//d:Chinese Heavenly stem 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_2 "Yi"
-
-//d:Chinese Heavenly stem 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_3 "Bing"
-
-//d:Chinese Heavenly stem 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_4 "Ding"
-
-//d:Chinese Heavenly stem 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_5 "Wu"
-
-//d:Chinese Heavenly stem 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_6 "Ji"
-
-//d:Chinese Heavenly stem 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_7 "Geng"
-
-//d:Chinese Heavenly stem 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_8 "Xing"
-
-//d:Chinese Heavenly stem 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_9 "Reng"
-
-//d:Chinese Heavenly stem 10
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_10 "Gui"
-
-//d:Chinese Terrestrial branch 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_1 "Zi"
-
-//d:Chinese Terrestrial branch 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_2 "Chou"
-
-//d:Chinese Terrestrial branch 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_3 "Yin"
-
-//d:Chinese Terrestrial branch 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_4 "Mao"
-
-//d:Chinese Terrestrial branch 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_5 "Chen"
-
-//d:Chinese Terrestrial branch 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_6 "Si"
-
-//d:Chinese Terrestrial branch 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_7 "Wu"
-
-//d:Chinese Terrestrial branch 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_8 "Wei"
-
-//d:Chinese Terrestrial branch 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_9 "Shen"
-
-//d:Chinese Terrestrial branch 10
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_10 "You"
-
-//d:Chinese Terrestrial branch 11
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_11 "Xu"
-
-//d:Chinese Terrestrial branch 12
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_12 "Hai"
-
-//d:Chinese solar items 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_1 "Li Chun"
-
-//d:Chinese solar items 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_2 "Yu Shui"
-
-//d:Chinese solar items 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_3 "Jing Zhe"
-
-//d:Chinese solar items 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_4 "Chun Fen"
-
-//d:Chinese solar items 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_5 "Qing Ming"
-
-//d:Chinese solar items 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_6 "Gu Yu"
-
-//d:Chinese solar items 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_7 "Li Xia"
-
-//d:Chinese solar items 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_8 "Xiao Man"
-
-//d:Chinese solar items 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_9 "Mang Zhong"
-
-//d:Chinese solar items 10
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_10 "Xia Zhi"
-
-//d:Chinese solar items 11
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_11 "Xiao Shu"
-
-//d:Chinese solar items 12
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_12 "Da Shu"
-
-//d:Chinese solar items 13
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_13 "Li Qiu"
-
-//d:Chinese solar items 14
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_14 "Chu Shu"
-
-//d:Chinese solar items 15
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_15 "Bai Lu"
-
-//d:Chinese solar items 16
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_16 "Qiu Fen"
-
-//d:Chinese solar items 17
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_17 "Han Lu"
-
-//d:Chinese solar items 18
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_18 "Shuang Jiang"
-
-//d:Chinese solar items 19
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_19 "Li Dong"
-
-//d:Chinese solar items 20
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_20 "Xiao Xue"
-
-//d:Chinese solar items 21
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_21 "Da Xue"
-
-//d:Chinese solar items 22
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_22 "Dong Zhi"
-
-//d:Chinese solar items 23
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_23 "Xiao Han"
-
-//d:Chinese solar items 24
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_24 "Da Han"
-
-//d:Lunar festivals 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_1 "Spring festival"
-
-//d:Lunar festivals 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_2 "Lantern festival"
-
-//d:Lunar festivals 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_3 "Dragon boat festival"
-
-//d:Lunar festivals 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_4 "Seventh night festival"
-
-//d:Lunar festivals 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_5 "Ghost festival"
-
-//d:Lunar festivals 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_6 "Mid autumn festival"
-
-//d:Lunar festivals 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_7 "Double ninth festival"
-
-//d:Lunar festivals 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_8 "Eighth day of twelfth month festival"
-
-//d:Lunar festivals 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_9 "New year's eve"
-
-//d:Opens Lunar data dialog
-//l:list_single_pane_t1_cp2
-//
-#define qtn_chi_cale_lunar_data "Show lunar data"
-
-//d:Title pane sting in "Show lunar data" dialog
-//l:heading_pane_t1
-//
-#define qtn_chi_cale_lunar_calendar "Lunar calendar"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1
-//
-#define qtn_cale_alarm_tone "Calendar alarm tone"
-
-//d: Empty listbox
-//l: main_list_empty_pane
-//
-#define qtn_cale_no_events "(No Events)"
-
-//d: The subject text when the item subject is empty in DayView
-//l: list_single_heading_pane_t1
-//
-#define qtn_cale_no_subject "<Unnamed>"
-
-//d: Profile Settings Item Edit - setting selection data
-//l: list_set_graphic_pane_t1
-#define qtn_tc_off "Off"
-
-//d: File list dialog header
-//l: heading_pane_t1
-#define qtn_tc_popup_heading "Select tone: "
-
-//d:Default tone selection choice in alarm tone list for Calendar and Clock
-//l:list_set_graphic_pane_t1
-//
-#define qtn_mode_default_tone "Default tone"
-
-//d:Options menu item.
-//d:Opens Add Description submenu in note editor
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_add_descript "Add Description"
-
-//d:Submenu item for adding new description text to Calendar entry
-//d:Opens Notepad Editor.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_om_descript_new "New"
-
-//d:Submenu item for adding description text to Calendar entry
-//d:from existing Notepad memos. Launches Notepad memo fetch.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_om_descript_exist "Use existing"
-
-//d:Options menu item.
-//d:Shows Calendar entry description text in Notepad viewer.
-//d:Opens Notepad viewer.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_desc_show "Show Description"
-
-//d:Options menu item.
-//d:Removes description text from Calendar entry.
-//d:Launches confirmation query before removing.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_desc_remove "Remove Description"
-
-//d:Title text, when editing Calendar description in Notepad
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_note_title "Calendar Description"
-
-//d:Confirmation text, when deleting Calendar description data from
-//d:Notepad editor
-//l:popup_note_window
-//
-#define qtn_cale_q_del_notep_desc "Delete Calendar Description?"
-
-//d:Informatio note text shown, when Calendar description is deleted from
-//d:Notepad editor or viewer
-//l:popup_note_window
-//
-#define qtn_cale_inote_desc_del_memo "Calendar description deleted"
-
-//d:Confirmation text, when deleting Calendar description data from
-//d:Calendar meeting editor
-//l:popup_note_window
-//
-#define qtn_cale_query_remove_descr "Remove Description?"
-
-//d:Header text for Description form item.
-//d:One truncated line of description is visible below this.
-//l:data_form_wide_pane_t1
-//
-#define qtn_cale_meeting_description "Description"
-
-//d:Title text of title pane
-//d:Note View
-//l:title_pane_t2/opt9
-//
-#define qtn_todo_note_header "To-Do Note"
-
-//d:Command in options menu.
-//d:Delete the selected item.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_todo_om_delete "Delete"
-
-//d:Command in options sub-menu.
-//d:Set a priority high to selected item.
-//l:list_form_graphic_pane_t1
-//
-#define qtn_todo_attr_high "High"
-
-//d:Command in options sub-menu.
-//d:Set a priority normal to selected item.
-//l:list_form_graphic_pane_t1
-//
-#define qtn_todo_attr_normal "Normal"
-
-//d:Command in options sub-menu.
-//d:Set a priority low to selected item.
-//l:list_form_graphic_pane_t1
-//
-#define qtn_todo_attr_low "Low"
-
-//d:Command in options menu.
-//d:Marked the To-Do item done in List View
-//l:list_single_pane_t1_cp2
-//
-#define qtn_todo_cmd_task_completed "Task completed"
-
-//d:Command in options menu.
-//d:Unmarked the To-Do item done in List View
-//l:list_single_pane_t1_cp2
-//
-#define qtn_todo_cmd_restore_task "Restore task"
-
-//d:Confirmation query prompt.
-//d:Deleting the selected one note.
-//l:popup_note_window
-//
-#define qtn_todo_quest_delete_note "Delete note?"
-
-//d:Confirmation query prompt.
-//d:Deleting the marked one or more notes.
-//l:popup_note_window
-//
-#define qtn_todo_quest_delete_notes "Delete\n%N notes?"
-
-//d:Wait note text in deleting items.
-//l:popup_note_wait_window
-//
-#define qtn_todo_wait_deleting_notes "Deleting notes..."
-
-//d:Item texts of form
-//d:Priority field of To-Do Note form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_todo_note_view_priority "priority"
-
-//d:Item texts of form
-//d:Due date field of To-Do Note form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_todo_note_duedate "due date"
-
-//d:Item texts of form
-//d:Subject field of To-Do Note form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_todo_note_subject "subject"
-
-//d: Information note text shown in Calendar application start,
-//d: when alarms have been passed due system time change
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_cale_note_missed_alarms "1 or more alarms missed due to time change"
-
-//d: Setting item choice to select Todo view as Calendar default view
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_cale_default_todo_view "Todo view"
-
-
-//d: Options Submenu item to create new Todo note
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_cale_note_todo "Todo"
-
-//d: Confirmation note shown, when edited Todo note is saved
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_cale_note_todo_saved "Todo Note saved"
-
-//d: Options menu item to open Calendar day view from Todo view
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_cale_opt_view_day "Day view"
-
-//d: Options menu item to open Todo view from other Calendar views
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_cale_opt_view_todo "Todo view"
-
-//d: Title pane text for Calendar Todo view that shows all users Todo entries
-//l:title_pane_t2/opt9
-//w:
-//r:3.0
-#define qtn_cale_title_todos "All Todos"
-
-//d:Snooze time setting header.
-//l:list_setting_pane_t1/opt1
-//w:
-//r:3.1
-#define qtn_cale_set_snooze_time "Calendar Alarm Snooze Time"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_sanim_time_out_slider_ykcur "1 minute"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//d:%U in minutes, plural.
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.1
-#define qtn_cale_sanim_time_out_slider_cur "%U minutes"
-
-//d:Context-specific text for the minimum snooze time value in Calendar Settings.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_cale_sanim_time_out_slider_min "1 min."
-
-//d:Context-specific text for the maximum snooze time value in Calendar Settings.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_snooze_time_max "60 min."
-
-
-//d: Format string for lunar calendar information in Calendar day, week and month views
-//d: Format string is used dynamically to display as much information as possible.
-//d: If all information doesn't fit some information and separators are dropped.
-//d: Localization can affect order of information.
-//d: If data element is dropped, empty string is supplied for it.
-//d: and either for preceding (or following) separator (%0U)
-//d:
-//d: e.g. in Chinese, order should be somethinglike (201030405): "%2U%0U%1U%0U%3U%0U%4U%0U%5U"
-//d: e.g. in Vietnamese, (304050201): "%3U%0U%4U%0U%5U%0U%2U%0U%1U"
-//d: %0U separator between data elements, qtn_cale_lunar_separator
-//d: %1U animal year format, qtn_cale_animal_year_in_extra_row
-//d: %2U lunar year, qtn_cale_lunar_year
-//d: %3U lunar date, either qtn_cale_lunar_date or qtn_cale_lunar_leap_date
-//d: %4U festival, qtn_chi_cale_festival_name_X
-//d: %5U solar term, qtn_chi_cale_solar_item_X
-//l: None
-//w:
-//r:3.2
-//
-#define qtn_cale_extra_row_lunar "%1U%0U%2U%0U%3U%0U%4U%0U%5U"
-
-
-//d: Separator between data elements in Lunar Calendar extra row.
-//d: E.g. in Chinese, " "
-//d: E.g. in Vietnamese, ", "
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_separator ", "
-
-
-//d: Chinese lunar date with day, month and year.
-//d: %0U is lunar date. either qtn_cale_lunar_date or qtn_cale_lunar_leap_date
-//d: %1U lunar year. qtn_cale_lunar_year
-//d:
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_full_date "%0U %1U"
-
-
-//d: Chinese lunar date for dates. Used for non-leap month dates.
-//d: Localication can add language specific separator and extra symbols.
-//d: E.g. in Chinese, character for month should be used: "%0U·%1U"
-//d: E.g. in Vietnamese, order is different and separator is slash "%1U/%0U"
-//d: %0U is lunar month
-//d: %1U lunar day
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_date "%0U/%1U"
-
-
-//d: Chinese lunar date for dates that are on leap months.
-//d: This should be similar to qtn_cale_lunar_date,
-//d: but language specific leap month indicator should be added to correct place.
-//d: E.g. in Vietnamese: "%1U/%0U N"
-//d: %0U is lunar month
-//d: %1U lunar day
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_leap_date "%0UL/%1U"
-
-
-//d: Chinese lunar year, combination of heavenly stem and terrestial branch
-//d: %0U is heavenly stem (qtn_chi_cale_heav_stem_X)
-//d: %1U is terrestial branch (qtn_chi_cale_terr_branch_X)
-//d: Localization can add language specific separator between words
-//d: and if words are written together, space can be removed (e.g. in Chinese).
-//d: E.g. in Chinese "%0U%1U·"
-//d: E.g. in Vietnamese "Nam %0U %1U"
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_year "%0U %1U"
-
-
-//d: Heading text for chinese festival
-//d: in Lunar calendar information pop-up.
-//d: It's not shown for dates that do not have festival.
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_info_festival "Festival:"
-
-
-//d: Heading text for chinese solar term
-//d: in Lunar calendar information pop-up.
-//d: It's not shown for dates that do not have solar term.
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_info_solar "Solar term:"
-
-
-//d: Heading text for chinese lunar calendar date
-//d: in Lunar calendar information pop-up.
-//d: Data for this header is qtn_cale_lunar_full_date.
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_info_lunar_date "Lunar date:"
-
-
-//d: Heading text for animal year
-//d: in Lunar calendar information pop-up.
-//d: Data for this header is qtn_chi_cale_animal_X
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_info_animal_year "Animal year:"
-
-
-//d: Heading text for Gregorian (normal) date
-//d: in Lunar calendar information pop-up.
-//d: Data for this header is qtn_date_usual_with_zero
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_info_western_date "Gregorian date:"
-
-
-//d: Year of Cat.
-//d: In Vietnamese Lunar Calendar, year of rabbit of Chinese Lunar Calendar is instead a year of cat.
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_chi_cale_animal_cat "Year of the Cat"
-
-
-//d: Setting item header for Thai Buddhist year display.
-//d: Values are On and Off.
-//d: If setting is on, Buddhist year is shown on
-//d: separate area in month, week and day views
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_sett_thai_year "Show Buddhist year"
-
-//d: Database conflict note: entry was deleted by other application
-//l: popup_note_window
-//r: 3.2/5.0
-#define qtn_cale_note_db_conflict "Calendar database conflict. This entry has been deleted by another application."
-
-//d: Database conflict note: entry was modified by other application
-//l: popup_note_window
-//r: 3.2/5.0
-#define qtn_cale_note_db_modified "Calendar database conflict. This entry has been modified by another application."
-
-//d: Menu item for grouping views.
-//d: Values are month, week, day and todo.
-//l: list_single_pane_t1_cp2
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_view "Change view"
-
-//d: Menu item for changing to month view.
-//d: Value is month.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_month "Month"
-
-//d: Menu item for changing to week view.
-//d: Value is week.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_week "Week"
-
-//d: Menu item for changing to day view.
-//d: Value is day.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_day "Day"
-
-//d: Menu item for changing to todo view.
-//d: Value is todo.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_todo "To-Do"
-
-//d: Tooltip text for previous view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_prev_view "Previous view"
-
-//d: Tooltip text for month view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_month_view "Month view"
-
-//d: Tooltip text for week view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_week_view "Week view"
-
-//d: Tooltip text for day view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_day_view "Day view"
-
-//d: Tooltip text for todo view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_todo_view "ToDo view"
-
-//d: Tooltip text for next view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_next_view "Next view"
-
-//d: Tooltip text for new entry button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_new_entry "New entry"
-
-//d: New note query heading, which shows up when MSK is pressed, when day view or to do view is empty
-//d: Value is New Entry
-//l: heading_pane_t1
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_entry "New entry"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is meeting
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_meeting "Meeting"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is mr
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_mr "Meeting Request"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is memo
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_memo "Memo"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is anniv
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_anniversary "Anniversary"
-
-//d: List item in new note query, which shows up when MSK is pressed, when day view or to do view is empty
-//d: Value is todo
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_todo "To-Do"
-
-//d: Edits a note
-//d: Value is Edit
-//l: list_single_pane_t1_cp2
-//r 3.2
-//
-#define qtn_cale_om_edit "Edit"
-
-//d: Calendar Go to date query prompt
-//l: popup_query_data_window_t3/opt2
-//
-#define qtn_cale_go_to_date "Go to date:"
-
-//d: Msk label displayed in Todo/Day view when there are no events for a day
-//d: Value is New
-//l: control_pane_t3/opt7
-//r: 5.0
-//
-#define qtn_cale_msk_new_entry "New"
-
-//d: Tooltip text for Next View
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_next_view "Next view"
-
-//d: Tooltip text for New Meeting
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_new_meeting "New meeting"
-
-//d: Tooltip text for New ToDo
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_new_todo "New to-do"
-
-//d:Long tap on day opens Long tap menu to create new Meeting note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_meeting "New meeting"
-
-//d:Long tap on day opens Long tap menu to create new Anniversary Note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_anniversary "New anniversary"
-
-//dLong tap on day opens Long tap menu to create new Day Note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_memo "New memo"
-
-//d: Long tap on day opens Long tap menu to create new Todo note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_todo "New todo"
-
-//d: Format string for data shown in preview pane
-//d: %0U is start time
-//d: %1U is hyphen or space
-//d: %2U is end time
-//d: %3U is subject
-//d: %4U is location
-//d: %5U is description
-//d: %6U is language specific separator
-//d: %7U is space
-//l: list_single_fp_cale_pane_t2/opt1
-//w:
-//r: 5.0
-//
-#define qtn_cale_pane_event_data "%0U%1U%2U%7U%3U%6U%4U%6U%5U"
-
-//d: Title for the preview pane
-//d: %0U is currently focused week day
-//d: %1U is currently focused date
-//l: popup_fixed_preview_cale_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_pane_title "%0U %1U"
-
-//d: No events in preview pane
-//l: popup_fixed_preview_cale_window_t2/opt1
-//w:
-//r: 5.0
-//
-#define qtn_cale_pane_no_events "(No events)"
-
-//d: Popup Event Separator
-//l: None
-//w:
-//r: 5.0
-//
-#define qtn_cale_popup_event_separator ","
-
-//d: Options menu item for clearing a missed alarm
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_mav_opt_clear "Clear"
-
-//d: Options menu items for clearing all the missed alarms
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_mav_opt_clear_all "Clear all"
-
-//d: Go to previous view from where Missed Alarms View is launched
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_mav_opt_goto_cale "Go to Calendar"
-
-//d: Options menu item to open Calendar's Missed Alarms View
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_opt_mav "Missed alarms"
-
-//d: Title pane text for Calendar's Missed Alarms view that shows all the missed alarms
-//l: title_pane_t2/opt9
-//w:
-//r: 5.0
-#define qtn_cale_title_missed_alarms "Missed Alarms"
-
-//d: Start date and time of the missed alarm event
-//l: list_double_graphic_pane_t2
-//w:
-//r: 5.0
-#define qtn_cale_mav_start_time "%0U %1U"
-
-//d: Tooltip text for Clearing a Missed Alarm
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_tb_clear "Clear"
-
-//d: Tooltip text for Clearing all the Missed Alarms
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_tb_clearall "Clear all"
-
-//d: Tooltip text for activating the previous view from where Missed Alarms View is launched
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_tb_goto_cale "Go to Calendar"
-
-//d: Query for viewing the missed alarms view for one missed alarm
-//l: popup_note_window
-//w:
-//r: 5.0
-//
-#define qtn_cale_query_view_missed "One missed Calendar event.Do you want to view it?"
-
-//d: Query for viewing the missed alarms view for multiple missed alarms
-//l: popup_note_window
-//w:
-//r: 5.0
-//
-#define qtn_cale_query_view_missed_n "%N missed Calendar events.Do you want to view them?"
-
-//d: The subject text when the item subject is empty in Missed alarms view
-//l: list_double_large_graphic_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_unnamed "(Unnamed)"
-
-//d:Command in stylus popup menu.
-//d:Marked the To-Do item done in List View and Preview popup.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_cmd_task_completed "Mark as done"
-
-//d:Command in stylus popup menu.
-//d:Unmarked the To-Do item done in List View.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_cmd_restore_task "Mark as not done"
-
-//d:Command in stylus popup menu.
-//d:Delete the selected item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_delete "Delete"
-
-//d:Command in stylus popup menu.
-//d:Send the selected item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_send "Send"
-
-//d:Command in stylus popup menu.
-//d:Mark-operation. Marks selected item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_mark "Mark"
-
-//d:Command in stylus popup menu.
-//d:Unmark-operation. Unmarks selected marked item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_unmark "Unmark"
-
-//d: Tooltip text for editing current calendar note
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_edit "Edit"
-
-//d: Tooltip text for deleting current calendar note
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_delete "Delete"
-
-//d: Tooltip text for sending calendar note
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_send "Send"
-
-//d: Default tone selection choice in alarm tone list for Calendar and Clock
-//l: list_single_graphic_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_tc_no_personal_tone "Default tone"
-
-//d: "Off" tone selection choice in alarm tone list for Calendar and Clock
-//l: list_single_graphic_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_tc_none "Off"
-
-//d:Opens Maps application for choosing new location
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_om_assign_from_map "Assign from map"
-
-//d: Msk label displayed in Editors when there is no map location
-//d: Value is From map
-//l: control_pane_t3/opt7
-//r: 5.1
-//
-#define text_softkey_from_map "From map"
-
-//d:Opens Maps application for choosing new location
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_om_find_on_map "Find on map"
-
-//d:Opens Maps application fto show the location
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_om_show_on_map "Show on map"
-
-//d:Shows Update location query
-//l:heading_pane_t1
-//w:
-//r: 5.1
-#define qtn_cale_update_location "Update location:"
-
-//d:Adds selected address to existing location details
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_addto_existing_location "Add to existing"
-
-//d:Replaces existing location details with selected address
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_replace_existing_location "Replace existing"
-
-//d:Confirmation query prompt.
-//d:Replace the exisitng map location with new one
-//d: %0U is the name of the location with which existing one is being replaced
-//l:popup_note_window
-//w:
-//r: 5.1
-#define qtn_cale_confirm_change_address "Update Address to %U?"
-
-//d: Confirmation note shown, when address is replaced with new one
-//l:popup_note_window
-//w:
-//r:5.1
-#define qtn_cale_note_address_updated "Address Updated"
-
-//d: Confirmation note shown, when address with coordinates is manually changed
-//l:popup_note_window
-//w:
-//r:5.1
-#define qtn_cale_confirm_keep_coordinates "Address will be updated. Keep existing map location?"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.1
-#define qtn_cale_sanim_time_out_slider_ykcur "1 minute"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//d:%U in minutes, plural.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_set_cale_sanim_time_out_slider_cur "%U minutes"
-// End of File
--- a/calendarui/regionalplugins/bwins/calenlunarchinesepluginu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-EXPORTS
- ?AnimalYear@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 1 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::AnimalYear(void)
- ?SolarTerm@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 2 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::SolarTerm(void)
- ?GregorianDate@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 3 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::GregorianDate(void)
- ?LunarMonthAndDay@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 4 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::LunarMonthAndDay(void)
- ?Festival@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 5 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::Festival(void)
- ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 6 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
- ?FullLunarDate@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 7 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::FullLunarDate(void)
- ?LunarYear@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 8 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::LunarYear(void)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/regionalplugins/calenregionalutil/calenregionalutil.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,92 @@
+#
+# Copyright (c) 2009 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: Project file for calenregionalutil module.
+#
+
+TEMPLATE = lib
+CONFIG += hb
+TARGET = calenregionalutil
+
+DEPENDPATH += ./inc \
+ ./src \
+ ./data
+
+INCLUDEPATH += ./inc
+INCLUDEPATH += ../inc \
+ ../../inc
+
+# Input
+HEADERS += ./inc/calenextrarowformatter.h \
+ ./inc/calenlunarinfo.h \
+ ./inc/calenlunarinfoprovider.h \
+ ./inc/calenlunarlocalizedinfo.h \
+ ./inc/calenlunarlocalizer.h \
+ ./inc/calensolarterms.h \
+ ./inc/calenregionalpluginuids.h \
+ ./inc/calenlunarpaths.h \
+ ./inc/calenlunarpanic.h
+
+
+SOURCES += ./src/calenextrarowformatter.cpp \
+ ./src/calenlunarinfo.cpp \
+ ./src/calenlunarinfoprovider.cpp \
+ ./src/calenlunarlocalizedinfo.cpp \
+ ./src/calenlunarlocalizer.cpp \
+ ./src/calensolarterms.cpp \
+
+
+
+
+RESOURCES += calenregionalutil.qrc
+
+symbian: {
+
+ TARGET.UID2 = 0x1000008d
+ TARGET.UID3 = 0x20022EDB
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCALLOWDLLDATA = 1
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ BLD_INF_RULES.prj_exports += \
+ "./inc/calenextrarowformatter.h |../inc/calenextrarowformatter.h" \
+ "./inc/calenlunarinfo.h |../inc/calenlunarinfo.h" \
+ "./inc/calenlunarinfoprovider.h |../inc/calenlunarinfoprovider.h" \
+ "./inc/calenlunarlocalizedinfo.h |../inc/calenlunarlocalizedinfo.h" \
+ "./inc/calenlunarlocalizer.h |../inc/calenlunarlocalizer.h" \
+ "./inc/calenlunarpanic.h |../inc/calenlunarpanic.h" \
+ "./inc/CalenLunarPaths.h |../inc/CalenLunarPaths.h" \
+ "./inc/CalenRegionalPluginUids.h |../inc/CalenRegionalPluginUids.h" \
+ "./inc/CalenSolarTerms.h |../inc/CalenSolarTerms.h"
+
+ LIBS += -lcalinterimapi \
+ -lcone \
+ -lecom \
+ -leikcdlg \
+ -leikctl \
+ -leikcoctl \
+ -leikcore \
+ -leuser \
+ -lgdi \
+ -lbafl \
+ -lplatformenv \
+ -lefsrv \
+ -lCommonEngine \
+ -lccon \
+ -lestor \
+ -lcentralrepository \
+ -lCdlEngine
+}
+
+
+# End of file --Don't remove this.
\ No newline at end of file
Binary file calendarui/regionalplugins/calenregionalutil/data/calenregional_en_GB.qm has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/regionalplugins/calenregionalutil/data/calenregionalutil.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,5 @@
+<RCC>
+ <qresource prefix="/translations">
+ <file alias="calenregional_en_GB">calenregional_en_GB.qm</file>
+ </qresource>
+</RCC>
\ No newline at end of file
--- a/calendarui/regionalplugins/calenregionalutil/data/calenregionalutil.rss Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,197 +0,0 @@
-/*
-* Copyright (c) 2009 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: This file contains all the resources for the calenregionalutil.
-*
-*/
-
-#include <eikon.rh>
-#include <avkon.hrh>
-#include <avkon.rh>
-#include <avkon.rsg>
-
-#include "calendarregionalplugin.loc"
-NAME CLRU
-
-RESOURCE RSS_SIGNATURE { }
-
-RESOURCE TBUF r_cale_lunar_separator
- {
- buf = qtn_cale_lunar_separator;
- }
-
-
-RESOURCE TBUF r_cale_extra_row_lunar
- {
- buf = qtn_cale_extra_row_lunar;
- }
-
-RESOURCE TBUF r_cale_lunar_year
- {
- buf = qtn_cale_lunar_year;
- }
-
-
-RESOURCE TBUF r_cale_lunar_full_date
- {
- buf = qtn_cale_lunar_full_date;
- }
-
-RESOURCE TBUF r_cale_lunar_leap_date
- {
- buf = qtn_cale_lunar_leap_date;
- }
-
-RESOURCE TBUF r_cale_lunar_date
- {
- buf = qtn_cale_lunar_date;
- }
-
-// ---------------------------------------------------------
-//
-// r_calen_chi_festivals
-// Descripter array for Chinese festivals
-//
-// ---------------------------------------------------------
-//
-RESOURCE ARRAY r_calen_chi_festivals
- {
- items =
- {
- LBUF { txt = qtn_chi_cale_festival_name_1; },
- LBUF { txt = qtn_chi_cale_festival_name_2; },
- LBUF { txt = qtn_chi_cale_festival_name_3; },
- LBUF { txt = qtn_chi_cale_festival_name_4; },
- LBUF { txt = qtn_chi_cale_festival_name_5; },
- LBUF { txt = qtn_chi_cale_festival_name_6; },
- LBUF { txt = qtn_chi_cale_festival_name_7; },
- LBUF { txt = qtn_chi_cale_festival_name_8; },
- LBUF { txt = qtn_chi_cale_festival_name_9; }
- };
- }
-
-
-// ---------------------------------------------------------
-//
-// r_calen_chi_solar_items
-// Descripter array for Chinese solar items
-//
-// ---------------------------------------------------------
-//
-RESOURCE ARRAY r_calen_chi_solar_items
- {
- items =
- {
- LBUF { txt = qtn_chi_cale_solar_item_1; },
- LBUF { txt = qtn_chi_cale_solar_item_2; },
- LBUF { txt = qtn_chi_cale_solar_item_3; },
- LBUF { txt = qtn_chi_cale_solar_item_4; },
- LBUF { txt = qtn_chi_cale_solar_item_5; },
- LBUF { txt = qtn_chi_cale_solar_item_6; },
- LBUF { txt = qtn_chi_cale_solar_item_7; },
- LBUF { txt = qtn_chi_cale_solar_item_8; },
- LBUF { txt = qtn_chi_cale_solar_item_9; },
- LBUF { txt = qtn_chi_cale_solar_item_10; },
- LBUF { txt = qtn_chi_cale_solar_item_11; },
- LBUF { txt = qtn_chi_cale_solar_item_12; },
- LBUF { txt = qtn_chi_cale_solar_item_13; },
- LBUF { txt = qtn_chi_cale_solar_item_14; },
- LBUF { txt = qtn_chi_cale_solar_item_15; },
- LBUF { txt = qtn_chi_cale_solar_item_16; },
- LBUF { txt = qtn_chi_cale_solar_item_17; },
- LBUF { txt = qtn_chi_cale_solar_item_18; },
- LBUF { txt = qtn_chi_cale_solar_item_19; },
- LBUF { txt = qtn_chi_cale_solar_item_20; },
- LBUF { txt = qtn_chi_cale_solar_item_21; },
- LBUF { txt = qtn_chi_cale_solar_item_22; },
- LBUF { txt = qtn_chi_cale_solar_item_23; },
- LBUF { txt = qtn_chi_cale_solar_item_24; }
- };
- }
-
-
-// ---------------------------------------------------------
-//
-// r_calen_chi_heav_stems
-// Descriptor array for heavenly stems
-//
-// ---------------------------------------------------------
-//
-RESOURCE ARRAY r_calen_chi_heav_stems
- {
- items =
- {
- LBUF { txt = qtn_chi_cale_heav_stem_1; },
- LBUF { txt = qtn_chi_cale_heav_stem_2; },
- LBUF { txt = qtn_chi_cale_heav_stem_3; },
- LBUF { txt = qtn_chi_cale_heav_stem_4; },
- LBUF { txt = qtn_chi_cale_heav_stem_5; },
- LBUF { txt = qtn_chi_cale_heav_stem_6; },
- LBUF { txt = qtn_chi_cale_heav_stem_7; },
- LBUF { txt = qtn_chi_cale_heav_stem_8; },
- LBUF { txt = qtn_chi_cale_heav_stem_9; },
- LBUF { txt = qtn_chi_cale_heav_stem_10;}
- };
- }
-
-// ---------------------------------------------------------
-//
-// r_calen_chi_terr_branches
-// Descripter array for Terrestrial branches
-//
-// ---------------------------------------------------------
-//
-RESOURCE ARRAY r_calen_chi_terr_branches
- {
- items =
- {
- LBUF { txt = qtn_chi_cale_terr_branch_1; },
- LBUF { txt = qtn_chi_cale_terr_branch_2; },
- LBUF { txt = qtn_chi_cale_terr_branch_3; },
- LBUF { txt = qtn_chi_cale_terr_branch_4; },
- LBUF { txt = qtn_chi_cale_terr_branch_5; },
- LBUF { txt = qtn_chi_cale_terr_branch_6; },
- LBUF { txt = qtn_chi_cale_terr_branch_7; },
- LBUF { txt = qtn_chi_cale_terr_branch_8; },
- LBUF { txt = qtn_chi_cale_terr_branch_9; },
- LBUF { txt = qtn_chi_cale_terr_branch_10; },
- LBUF { txt = qtn_chi_cale_terr_branch_11; },
- LBUF { txt = qtn_chi_cale_terr_branch_12; }
- };
- }
-
-// ---------------------------------------------------------
-//
-// r_calen_chi_animal_years
-// Descriptor array for Chinese animal years
-//
-// ---------------------------------------------------------
-//
-RESOURCE ARRAY r_calen_chi_animal_years
- {
- items =
- {
- LBUF { txt = qtn_chi_cale_animal_rat; },
- LBUF { txt = qtn_chi_cale_animal_ox; },
- LBUF { txt = qtn_chi_cale_animal_tiger; },
- LBUF { txt = qtn_chi_cale_animal_rabbit; },
- LBUF { txt = qtn_chi_cale_animal_dragon; },
- LBUF { txt = qtn_chi_cale_animal_snake; },
- LBUF { txt = qtn_chi_cale_animal_horse; },
- LBUF { txt = qtn_chi_cale_animal_sheep; },
- LBUF { txt = qtn_chi_cale_animal_monkey; },
- LBUF { txt = qtn_chi_cale_animal_rooster; },
- LBUF { txt = qtn_chi_cale_animal_dog; },
- LBUF { txt = qtn_chi_cale_animal_pig; }
- };
- }
--- a/calendarui/regionalplugins/calenregionalutil/eabi/calenregionalutilu.def Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/calenregionalutil/eabi/calenregionalutilu.def Thu Jul 22 16:32:51 2010 +0100
@@ -24,12 +24,4 @@
_ZN24CCalenLunarLocalizedInfoD0Ev @ 23 NONAME
_ZN24CCalenLunarLocalizedInfoD1Ev @ 24 NONAME
_ZN24CCalenLunarLocalizedInfoD2Ev @ 25 NONAME
- _ZTI20CCalenLunarLocalizer @ 26 NONAME
- _ZTI23CCalenExtraRowFormatter @ 27 NONAME
- _ZTI23CCalenLunarInfoProvider @ 28 NONAME
- _ZTI24CCalenLunarLocalizedInfo @ 29 NONAME
- _ZTV20CCalenLunarLocalizer @ 30 NONAME
- _ZTV23CCalenExtraRowFormatter @ 31 NONAME
- _ZTV23CCalenLunarInfoProvider @ 32 NONAME
- _ZTV24CCalenLunarLocalizedInfo @ 33 NONAME
--- a/calendarui/regionalplugins/calenregionalutil/group/bld.inf Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,36 +0,0 @@
-/*
-* Copyright (c) 2007 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: This file provides the information required for building
-* CalenInterimUtils
-*
-*/
-
-PRJ_PLATFORMS
-DEFAULT
-
-PRJ_EXPORTS
-../inc/calenextrarowformatter.h |../../inc/calenextrarowformatter.h
-../inc/calenlunarinfo.h |../../inc/calenlunarinfo.h
-../inc/calenlunarinfoprovider.h |../../inc/calenlunarinfoprovider.h
-../inc/calenlunarlocalizedinfo.h |../../inc/calenlunarlocalizedinfo.h
-../inc/calenlunarlocalizer.h |../../inc/calenlunarlocalizer.h
-../inc/calenlunarpanic.h |../../inc/calenlunarpanic.h
-../inc/calenlunarpaths.h |../../inc/calenlunarpaths.h
-../inc/calenregionalpluginuids.h |../../inc/calenregionalpluginuids.h
-../inc/calensolarterms.h |../../inc/calensolarterms.h
-
-PRJ_MMPFILES
-calenregionalutil.mmp
-
-// End of file
--- a/calendarui/regionalplugins/calenregionalutil/group/calenregionalutil.mmp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,73 +0,0 @@
-/*
-* Copyright (c) 2007-2008 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: Project description file for calendar regional utilities
-*
-*/
-
-#include <platform_paths.hrh>
-#include <data_caging_paths.hrh>
-
-// Target
-TARGET calenregionalutil.dll
-TARGETTYPE DLL
-
-UID 0x1000008d 0x20022EDB
-CAPABILITY CAP_GENERAL_DLL
-VENDORID VID_DEFAULT
-
-// Includes
-USERINCLUDE ../inc
-USERINCLUDE ../../inc
-USERINCLUDE ../../../inc
-USERINCLUDE ../../loc
-APP_LAYER_SYSTEMINCLUDE
-
-// Resource
-SOURCEPATH ../data
-START RESOURCE calenregionalutil.rss
-HEADER
-TARGETPATH RESOURCE_FILES_DIR
-LANGUAGE_IDS
-END // RESOURCE
-
-// Source
-SOURCEPATH ../src
-SOURCE calenextrarowformatter.cpp
-SOURCE calenlunarinfo.cpp
-SOURCE calenlunarinfoprovider.cpp
-SOURCE calenlunarlocalizedinfo.cpp
-SOURCE calenlunarlocalizer.cpp
-SOURCE calensolarterms.cpp
-
-// Libraries
-LIBRARY avkon.lib
-LIBRARY calinterimapi.lib
-LIBRARY cone.lib
-LIBRARY ecom.lib
-LIBRARY eikcdlg.lib
-LIBRARY eikctl.lib
-LIBRARY eikcoctl.lib
-LIBRARY eikcore.lib
-LIBRARY euser.lib
-LIBRARY gdi.lib
-LIBRARY bafl.lib
-LIBRARY platformenv.lib
-LIBRARY efsrv.lib
-LIBRARY commonengine.lib
-LIBRARY ccon.lib
-LIBRARY estor.lib
-LIBRARY centralrepository.lib
-LIBRARY cdlengine.lib
-
-// End of file
--- a/calendarui/regionalplugins/calenregionalutil/inc/calenlunarlocalizer.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/calenregionalutil/inc/calenlunarlocalizer.h Thu Jul 22 16:32:51 2010 +0100
@@ -26,6 +26,7 @@
#include "CalendarVariant.hrh"
#include "calendarui_debug.h"
+class QStringList;
class CEikonEnv;
class TCalenLunarInfo;
class TChineseDate;
@@ -64,49 +65,40 @@
* Localized names of lunar festivals
* Own.
*/
- CDesCArray* iFestivalNames;
-
+ QStringList iFestivalNames;
+
/**
* Localized names of solar terms
* Own.
*/
- CDesCArray* iSolarTermNames;
+ QStringList iSolarTermNames;
/**
* Localized names of animal years
* Own.
*/
- CDesCArray* iAnimalYearNames;
+ QStringList iAnimalYearNames;
/**
* Localized names of heavenly stems
* Own.
*/
- CDesCArray* iHeavenlyStemNames;
+ QStringList iHeavenlyStemNames;
/**
* Localized names of terrestial branches
* Own.
*/
- CDesCArray* iTerrestialBranchNames;
+ QStringList iTerrestialBranchNames;
- /**
- * Format string for western date.
- * Own.
- */
- HBufC* iGregorianDateFormat;
-
TBuf<1000> iLunarExtraRowText;
-
/**
* Language independent formatter of extra row information.
*/
CCalenExtraRowFormatter* iRowFormatter;
- TInt iResourceFileOffset;
-
};
#endif // __CALENLUNARLOCALIZER_H__
--- a/calendarui/regionalplugins/calenregionalutil/src/calenextrarowformatter.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/calenregionalutil/src/calenextrarowformatter.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -15,16 +15,18 @@
*
*/
-
+#include <qstringlist.h>
+#include <hbglobal.h>
-#include <calenregionalutil.rsg>
#include <badesca.h>
#include <eikenv.h>
-#include <StringLoader.h>
#include "calendarui_debug.h"
#include "CalenExtraRowFormatter.h"
+// Constants
+const TInt KZero( 0 );
+
// -----------------------------------------------------------------------------
// CollapseDuplicatesL
// -----------------------------------------------------------------------------
@@ -34,7 +36,7 @@
TRACE_ENTRY_POINT;
const TInt sublen = aSub.Length();
- if (aStr.Length() == 0 || sublen == 0)
+ if (aStr.Length() == KZero || sublen == KZero || aPos < KZero || (aPos >aStr.Length()))
{
return;
}
@@ -42,14 +44,14 @@
TPtrC remaining = aStr.Mid( aPos );
TInt fstInRemaining = remaining.Find( aSub );
- if ( fstInRemaining >= 0 )
+ if ( fstInRemaining >= KZero )
{
TInt restPos = fstInRemaining + sublen;
TPtrC rest = remaining.Mid( restPos );
TInt sndInRest = rest.Find( aSub );
// 1) two substrings found in sequence
- if (sndInRest == 0)
+ if (sndInRest == KZero)
{
// replace second substring with empty string
TInt fst = aPos + fstInRemaining;
@@ -59,7 +61,7 @@
CollapseDuplicatesL( aStr, fst, aSub );
}
// 2) substring found later in string
- else if (sndInRest > 0)
+ else if (sndInRest > KZero)
{
// continue collapsing from this second substring
TInt snd = aPos + restPos + sndInRest;
@@ -90,15 +92,15 @@
// Trailing
const TInt sublen = aSub.Length();
- if ( aStr.Right( sublen ).Find( aSub ) == 0 )
+ if ( aStr.Right( sublen ).Find( aSub ) == KZero )
{
aStr.Replace( aStr.Length() - sublen, sublen, KNullDesC );
}
// Leading
- if ( aStr.Left( sublen ).Find( aSub ) == 0 )
+ if ( aStr.Left( sublen ).Find( aSub ) == KZero )
{
- aStr.Replace( 0, sublen, KNullDesC );
+ aStr.Replace( KZero, sublen, KNullDesC );
}
TRACE_EXIT_POINT;
@@ -159,45 +161,44 @@
EXPORT_C TPtrC CCalenExtraRowFormatter::FormatExtraRowInformationL(
CCalenLunarLocalizedInfo& aLocInfo,
RArray<CCalenLunarLocalizedInfo::TField>& aPrioritizedFields )
- {
- TRACE_ENTRY_POINT;
-
-
- if ( aPrioritizedFields.Count() == 0)
- {
- iText = KNullDesC;
-
- TRACE_EXIT_POINT;
- return iText;
- }
+{
+ TRACE_ENTRY_POINT;
+
+
+ if ( aPrioritizedFields.Count() == KZero)
+ {
+ iText = KNullDesC;
+
+ TRACE_EXIT_POINT;
+ return iText;
+ }
- // Initialize substring labels
- RArray<CCalenLunarLocalizedInfo::TField> subLabels;
- CleanupClosePushL( subLabels );
- subLabels.AppendL( CCalenLunarLocalizedInfo::EAnimalYear );
- subLabels.AppendL( CCalenLunarLocalizedInfo::ELunarYear );
- subLabels.AppendL( CCalenLunarLocalizedInfo::ELunarMonthAndDay );
- subLabels.AppendL( CCalenLunarLocalizedInfo::EFestival );
- subLabels.AppendL( CCalenLunarLocalizedInfo::ESolarTerm );
-
- // ASSERT that all prioritized fields can be found from subLabels
- for ( TInt i=0; i < aPrioritizedFields.Count(); i++)
- {
- ASSERT( subLabels.Find( aPrioritizedFields[i] ) >= 0 );
- }
+ // Initialize substring labels
+ RArray<CCalenLunarLocalizedInfo::TField> subLabels;
+ CleanupClosePushL( subLabels );
+ subLabels.AppendL( CCalenLunarLocalizedInfo::EAnimalYear );
+ subLabels.AppendL( CCalenLunarLocalizedInfo::ELunarYear );
+ subLabels.AppendL( CCalenLunarLocalizedInfo::ELunarMonthAndDay );
+ subLabels.AppendL( CCalenLunarLocalizedInfo::EFestival );
+ subLabels.AppendL( CCalenLunarLocalizedInfo::ESolarTerm );
+
+ // ASSERT that all prioritized fields can be found from subLabels
+ for ( TInt i=0; i < aPrioritizedFields.Count(); i++)
+ {
+ ASSERT( subLabels.Find( aPrioritizedFields[i] ) >= KZero );
+ }
// Initialize substring array
CPtrCArray* subs = new (ELeave) CPtrCArray(10);
CleanupStack::PushL( subs );
for ( TInt i = 0; i < subLabels.Count(); i++)
- {
+ {
subs->AppendL( TPtrC( KNullDesC ) );
- }
- // subs->InsertL( 0, TPtrC( KNullDesC ), 5 );
-
+ }
+
// Set wanted fields to substring array
for ( TInt i = 0; i < aPrioritizedFields.Count(); i++)
- {
+ {
CCalenLunarLocalizedInfo::TField field = aPrioritizedFields[i];
TInt subIx = subLabels.Find( field );
// Replace
@@ -206,71 +207,50 @@
subs->InsertL(subIx, TPtrC( aLocInfo.GetField( field ) ) );
RDebug::Print( _L("B sub count %d"), subs->Count() );
RDebug::Print( _L("B field %S"), &(subs->At(subIx)) );
-
- }
-
- // Format all fields to extra row
- HBufC* extraRowFmt = StringLoader::LoadLC( R_CALE_EXTRA_ROW_LUNAR );
-
- RDebug::RawPrint( *extraRowFmt );
-
- TBuf<1000> fmt = *extraRowFmt;
- for (TInt i=0; i < subLabels.Count(); i++)
- {
- RDebug::Print( _L("Before Format") );
- RDebug::RawPrint( fmt );
- StringLoader::Format( iText,
- fmt,
- i + 1, // %0U is a separator
- subs->At( i ) );
- fmt = iText;
- RDebug::Print( _L("After Format") );
- RDebug::RawPrint( fmt );
- }
-
- // Now we have something like "Year of Dog%0U%0U6/11%0U%0U"
- // First We need to remove multiple occurences of %0U
- _LIT(KSeparatorFmt, "%0U");
-
- CollapseDuplicatesL( iText, 0, KSeparatorFmt );
- RDebug::Print( _L("After collapse") );
- RDebug::RawPrint( iText );
- // Remove leading and trailing %0U
- // By now, we are sure that there is max 1 %0U in the beginning
- // and in the end of string.
- RemoveLeadingAndTrailingL( iText, KSeparatorFmt );
- RDebug::Print( _L("After leading and trailing removal") );
- RDebug::RawPrint( iText );
-
-
- // If there are now separators anymore, then do not fill them
- TBool hasSeparators = iText.Find( KSeparatorFmt ) >= 0;
-
- if ( hasSeparators )
- {
+ }
+ TBuf<100> textBuf;
+ QStringList textDataStringList;
+ for (TInt i=0; i < subLabels.Count(); i++) {
+ textBuf = subs->At( i );
+ textDataStringList.append(
+ QString((QChar*)textBuf.Ptr(),textBuf.Length()));
+ }
+ // Get the locale specific separator
+ QString separator = hbTrId("txt_calendar_preview_title_cale_separator");
- // fill in separators
- HBufC* separator = StringLoader::LoadLC( R_CALE_LUNAR_SEPARATOR );
- fmt = iText;
- StringLoader::Format( iText,
- fmt,
- 0, // %0U is a separator
- *separator );
+ // Format all fields to single row
+ QString textDataString;
+ textDataString = hbTrId(
+ "txt_calendar_preview_title_123242526").arg(
+ textDataStringList.at(0)).arg(
+ separator).arg(
+ textDataStringList.at(1)).arg(
+ textDataStringList.at(2)).arg(
+ textDataStringList.at(3)).arg(
+ textDataStringList.at(4));
+
+ iText = static_cast<const TUint16*> (
+ textDataString.utf16()), textDataString.length();
+
+ // Now we have something like "Year of Dog%2GengYin%2%2"
+ // where %2 is the separator txt_calendar_preview_title_cale_separator
+ // First We need to remove multiple occurences of separator
+ textBuf = static_cast<const TUint16*> (
+ separator.utf16()), separator.length();
+ CollapseDuplicatesL( iText, 0, textBuf);
- RDebug::Print( _L("After separator insert") );
- RDebug::RawPrint( iText );
- CleanupStack::PopAndDestroy( separator );
- }
-
-
- CleanupStack::PopAndDestroy( extraRowFmt );
+ // Remove leading and trailing separators
+ // Leading separator won't be there but trailing one is there for sure
+ RemoveLeadingAndTrailingL( iText, textBuf );
+
+ // CleanUp
CleanupStack::PopAndDestroy( subs );
- CleanupStack::PopAndDestroy( &subLabels );
-
- TRACE_EXIT_POINT;
- return iText;
- }
+ CleanupStack::PopAndDestroy( &subLabels );
+ TRACE_EXIT_POINT;
+
+ return iText;
+}
//EOF
--- a/calendarui/regionalplugins/calenregionalutil/src/calenlunarinfo.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/calenregionalutil/src/calenlunarinfo.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -24,7 +24,7 @@
// TCalenLunarInfo::HasFestival
// -----------------------------------------------------------------------------
//
-TBool TCalenLunarInfo::HasFestival()
+EXPORT_C TBool TCalenLunarInfo::HasFestival()
{
TRACE_ENTRY_POINT;
@@ -36,7 +36,7 @@
// TCalenLunarInfo::HasSolarTerm
// -----------------------------------------------------------------------------
//
-TBool TCalenLunarInfo::HasSolarTerm()
+EXPORT_C TBool TCalenLunarInfo::HasSolarTerm()
{
TRACE_ENTRY_POINT;
--- a/calendarui/regionalplugins/calenregionalutil/src/calenlunarlocalizer.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/calenregionalutil/src/calenlunarlocalizer.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -17,17 +17,16 @@
-
+#include <qdatetime.h>
+#include <qstringlist.h>
+#include <hbi18ndef.h>
+#include <hbglobal.h>
-#include <avkon.rsg>
#include <badesca.h>
#include <eikenv.h>
-#include <StringLoader.h>
#include <bautils.h>
#include <data_caging_path_literals.hrh>
-#include <calenregionalutil.rsg>
-
#include "calendarui_debug.h"
#include "CalenLunarLocalizer.h"
@@ -43,8 +42,6 @@
_LIT(KChineseDigits,
"\x0030\x4e00\x4e8c\x4e09\x56db\x4e94\x516d\x4e03\x516b\x4e5d");
-_LIT( KResourceChinesePluginFile, "calenregionalutil.rsc" );
-#define KResourcePath KDC_RESOURCE_FILES_DIR
// -----------------------------------------------------------------------------
@@ -72,18 +69,7 @@
{
TRACE_ENTRY_POINT;
- delete iFestivalNames;
- delete iSolarTermNames;
- delete iHeavenlyStemNames;
- delete iTerrestialBranchNames;
- delete iAnimalYearNames;
- delete iGregorianDateFormat;
delete iRowFormatter;
-
- if( iResourceFileOffset )
- {
- CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset );
- }
TRACE_EXIT_POINT;
}
@@ -102,98 +88,133 @@
// -----------------------------------------------------------------------------
//
EXPORT_C void CCalenLunarLocalizer::ConstructL()
- {
- TRACE_ENTRY_POINT;
-
- iRowFormatter = CCalenExtraRowFormatter::NewL();
-
- TFileName dllName;
- // Get the complate path of the DLL from where it is currently loaded
- Dll::FileName( dllName );
-
- TFileName resourceFilename;
- resourceFilename.Append(dllName.Mid(0,2));
- resourceFilename.Append(KResourcePath);
- resourceFilename.Append(KResourceChinesePluginFile);
- BaflUtils::NearestLanguageFile( CEikonEnv::Static()->FsSession(), resourceFilename );
- // Add the resource file.
- iResourceFileOffset = CEikonEnv::Static()->AddResourceFileL( resourceFilename );
+{
+ iRowFormatter = CCalenExtraRowFormatter::NewL();
+
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_spring_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_lantern_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_dragon_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_seventh_night_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_ghost_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_mid_autumn_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_double_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_eigth_day_fest"));
+ iFestivalNames.append(hbTrId("txt_calendar_preview_title_new_year_fest"));
+
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_chun"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_yu_shui"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_jing_zhe"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_chun_fen"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_qing_ming"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_gu_yu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_xia"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_man"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_mang_zhong"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xia_zhi"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_shu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_da_shu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_qiu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_chu_shu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_bai_lu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_qiu_fen"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_han_lu"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_shaung_jiang"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_li_dong"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_xue"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_da_xue"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_dong_zhi"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_xiao_han"));
+ iSolarTermNames.append(hbTrId("txt_calendar_preview_title_da_han"));
- iFestivalNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_FESTIVALS);
- iSolarTermNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_SOLAR_ITEMS);
- iHeavenlyStemNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_HEAV_STEMS);
- iTerrestialBranchNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_TERR_BRANCHES);
- iAnimalYearNames = iEikEnv->ReadDesCArrayResourceL(R_CALEN_CHI_ANIMAL_YEARS);
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_jia"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_yi"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_bing"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_ding"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_wu"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_ji"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_geng"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_xing"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_reng"));
+ iHeavenlyStemNames.append(hbTrId("txt_calendar_preview_title_gui"));
- iGregorianDateFormat = StringLoader::LoadL(R_QTN_DATE_USUAL_WITH_ZERO);
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_zi"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_chou"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_yin"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_mao"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_chen"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_si"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_wu"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_wei"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_shen"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_you"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_xu"));
+ iTerrestialBranchNames.append(hbTrId("txt_calendar_preview_title_tbranch_hai"));
-
- TRACE_EXIT_POINT;
- }
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_rat"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_ox"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_tiger"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_rabbit"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_dragon"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_snake"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_horse"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_sheep"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_monkey"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_rooster"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_dog"));
+ iAnimalYearNames.append(hbTrId("txt_calendar_preview_title_year_of_the_pig"));
+
+}
// -----------------------------------------------------------------------------
// CCalenLunarLocalizer::LocalizeL
// -----------------------------------------------------------------------------
//
EXPORT_C CCalenLunarLocalizedInfo* CCalenLunarLocalizer::LocalizeL( TCalenLunarInfo& aInfo )
- {
- TRACE_ENTRY_POINT;
-
-
- CCalenLunarLocalizedInfo* localized = CCalenLunarLocalizedInfo::NewL();
- CleanupStack::PushL( localized );
+{
+ CCalenLunarLocalizedInfo* localized = CCalenLunarLocalizedInfo::NewL();
+ CleanupStack::PushL( localized );
+
- if ( aInfo.HasFestival() )
- {
- localized->iFestival.Set( iFestivalNames->MdcaPoint( aInfo.iFestival ) );
- }
-
- if ( aInfo.HasSolarTerm() )
- {
- localized->iSolarTerm.Set( iSolarTermNames->MdcaPoint( aInfo.iSolarTerm ) );
- }
+ if ( aInfo.HasFestival() )
+ {
+ QString festival = iFestivalNames.at(aInfo.iFestival);
+ localized->iFestival.Set( static_cast<const TUint16*>(festival.utf16()),festival.length());
+ }
- // Animal year
- localized->iAnimalYear.Set( iAnimalYearNames->MdcaPoint( aInfo.AnimalYear() ) );
-
+ if ( aInfo.HasSolarTerm() )
+ {
+ QString solarTerm = iSolarTermNames.at(aInfo.iSolarTerm);
+ localized->iSolarTerm.Set( static_cast<const TUint16*>(solarTerm.utf16()),solarTerm.length());
+ }
- // Lunar year
- CPtrCArray* yearSubs = new (ELeave) CPtrCArray(2);
- CleanupStack::PushL( yearSubs );
- yearSubs->AppendL( iHeavenlyStemNames->MdcaPoint( aInfo.iHeavenlyStem ) );
- yearSubs->AppendL( iTerrestialBranchNames->MdcaPoint( aInfo.iTerrestialBranch ) );
+ // Animal year
+ QString animalYear = iAnimalYearNames.at(aInfo.AnimalYear());
+ localized->iAnimalYear.Set( static_cast<const TUint16*>(animalYear.utf16()),animalYear.length());
- HBufC* tmp = StringLoader::LoadLC( R_CALE_LUNAR_YEAR, *yearSubs);
- RDebug::Print( *tmp );
- localized->iLunarYear = *tmp;
- CleanupStack::PopAndDestroy( tmp );
- CleanupStack::PopAndDestroy( yearSubs );
+ // Lunar year
+ QString heavenlyStemNames = iHeavenlyStemNames.at(aInfo.iHeavenlyStem);
+ QString terrestialBranchNames = iTerrestialBranchNames.at(aInfo.iTerrestialBranch);
+ QString lunarYear = hbTrId("txt_calendar_info_lunar_year").arg(heavenlyStemNames).arg(terrestialBranchNames);
+ localized->iLunarYear = static_cast<const TUint16*> (lunarYear.utf16()), lunarYear.length();
- RDebug::Print( localized->iLunarYear );
+ LocalizeMonthAndDayL(localized, aInfo);
- LocalizeMonthAndDayL(localized, aInfo);
-
- // Full lunar date
- CPtrCArray* subs = new (ELeave) CPtrCArray(2);
- CleanupStack::PushL( subs );
- subs->AppendL( localized->LunarMonthAndDay() );
- subs->AppendL( localized->LunarYear() );
-
- tmp = StringLoader::LoadLC( R_CALE_LUNAR_FULL_DATE, *subs );
- localized->iFullLunarDate = *tmp;
- CleanupStack::PopAndDestroy( tmp );
- CleanupStack::PopAndDestroy( subs );
-
-
- aInfo.iGregorianDate.FormatL( localized->iGregorianDate,
- *iGregorianDateFormat );
- CleanupStack::Pop( localized );
-
-
-
- TRACE_EXIT_POINT;
- return localized;
- }
+ QString monthAndDay = QString::fromUtf16(localized->LunarMonthAndDay().Ptr(),localized->LunarMonthAndDay().Length());
+ QString yearString = QString::fromUtf16(localized->LunarYear().Ptr(),localized->LunarYear().Length());
+ QString fullLunarDate = hbTrId("txt_calendar_info_lunar_full_date").arg(monthAndDay).arg(yearString);
+
+ localized->iFullLunarDate = static_cast<const TUint16*> (fullLunarDate.utf16()), fullLunarDate.length();
+
+ QString format(r_qtn_date_usual_with_zero);
+ TBuf<100> gregFormatBuf;
+ gregFormatBuf = static_cast<const TUint16*> (format.utf16()), format.length();
+
+ aInfo.iGregorianDate.FormatL( localized->iGregorianDate, gregFormatBuf );
+
+ CleanupStack::Pop( localized );
+
+ return localized;
+}
// -----------------------------------------------------------------------------
@@ -227,24 +248,27 @@
//
void CCalenLunarLocalizer::LocalizeMonthAndDayL(CCalenLunarLocalizedInfo* aLocInfo,
TCalenLunarInfo& aInfo)
- {
- // Lunar Month and Day
- TInt dateResource = aInfo.iLunarDate.iLeapMonth ? R_CALE_LUNAR_LEAP_DATE : R_CALE_LUNAR_DATE;
- TBuf<10> month;
- TBuf<10> day;
- GetChineseMonth(aInfo.iLunarDate, month);
- GetChineseDay(aInfo.iLunarDate, day);
+{
+ TBuf<10> month;
+ TBuf<10> day;
+ GetChineseMonth(aInfo.iLunarDate, month);
+ GetChineseDay(aInfo.iLunarDate, day);
- CPtrCArray* monthAndDaySubs = new (ELeave) CPtrCArray(2);
- CleanupStack::PushL( monthAndDaySubs );
- monthAndDaySubs->AppendL(month);
- monthAndDaySubs->AppendL(day);
-
- HBufC* tmp = StringLoader::LoadLC( dateResource, *monthAndDaySubs );
- aLocInfo->iLunarMonthAndDay = *tmp;
- CleanupStack::PopAndDestroy( tmp );
- CleanupStack::PopAndDestroy( monthAndDaySubs );
- }
+ QString formattedString;
+ if(aInfo.iLunarDate.iLeapMonth) {
+ formattedString = hbTrId(
+ "txt_calendar_info_lunar_leap_date").arg(
+ QString((QChar*)month.Ptr(),month.Length())).arg(
+ QString((QChar*)day.Ptr(),day.Length()));
+ }else {
+ formattedString = hbTrId(
+ "txt_calendar_info_lunar_date").arg(
+ QString((QChar*)month.Ptr(),month.Length())).arg(
+ QString((QChar*)day.Ptr(),day.Length()));
+ }
+ aLocInfo->iLunarMonthAndDay = static_cast<const TUint16*> (
+ formattedString.utf16()), formattedString.length();
+}
// -----------------------------------------------------------------------------
// CCalenLunarLocalizer::GetChineseMonth
--- a/calendarui/regionalplugins/calenregionalutil/src/calensolarterms.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/calenregionalutil/src/calensolarterms.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -47,7 +47,7 @@
//
// ---------------------------------------------------------------------------
//
-CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs)
+EXPORT_C CCalenSolarTerms* CCalenSolarTerms::NewL(RFs& aFs)
{
TRACE_ENTRY_POINT;
@@ -65,7 +65,7 @@
//
// ---------------------------------------------------------------------------
//
-CCalenSolarTerms::~CCalenSolarTerms()
+EXPORT_C CCalenSolarTerms::~CCalenSolarTerms()
{
TRACE_ENTRY_POINT;
TRACE_EXIT_POINT;
@@ -76,7 +76,7 @@
//
// ---------------------------------------------------------------------------
//
-TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate )
+EXPORT_C TInt CCalenSolarTerms::CheckSolarTermDateL( const TDateTime& aDate )
{
TRACE_ENTRY_POINT;
@@ -180,12 +180,11 @@
if (iCachedYear != year)
{
RFile file;
- RFs& fs = iFs;
- TFindFile ffile(fs);
+ TFindFile ffile(iFs);
User::LeaveIfError(ffile.FindByDir(KSolarTermsFile, KSolarTermsPath));
// User::LeaveIfError(ffile.FindByPath(KSolarTermsFile, KSolarTermsPath));
- User::LeaveIfError(file.Open(fs,
+ User::LeaveIfError(file.Open(iFs,
ffile.File(), EFileRead));
CleanupClosePushL(file);
--- a/calendarui/regionalplugins/eabi/calenlunarchinesepluginu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
- _Z24ImplementationGroupProxyRi @ 1 NONAME
-
--- a/calendarui/regionalplugins/inc/CalenLunarPaths.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: Calendar Lunar Plugin
- *
-*/
-
-
-#ifndef CALENLUNARPATHS_H
-#define CALENLUNARPATHS_H
-
-
-_LIT(KCalenLunarDllFile, "CalenLunar.dll");
-
-_LIT(KCalenLunarResourceDrive, "z:");
-
-_LIT(KCalenLunarResourceFile, "CalenLunar.rsc");
-
-
-
-
-#endif // CALENLUNARPATHS_H
-
-// End of File
--- a/calendarui/regionalplugins/inc/CalenSolarTerms.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,97 +0,0 @@
-/*
-* Copyright (c) 2006 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: Provides Solar Term dates for Lunar Calendar. Reads and caches
-* binary data file that lists solar term dates.
-*
-*/
-
-
-
-#ifndef C_CALENSOLARTERMS_H
-#define C_CALENSOLARTERMS_H
-
-#include <badesca.h>
-#include <e32base.h>
-
-class RFs;
-
-const TInt KSolarTermCount(24);
-
-
-/**
- * Provides Solar term dates for Lunar Calendar.
- *
- * Solar term dates are listed in special binary format file.
- * CCalenSolarTerms reads and caches this file one year at a time.
- *
- * @lib CalenLunar.dll
- * @since S60 v3.1
- */
-NONSHARABLE_CLASS( CCalenSolarTerms ) : public CBase
- {
-public:
- IMPORT_C static CCalenSolarTerms* NewL(RFs& aFs);
-
- IMPORT_C virtual ~CCalenSolarTerms();
-
- /**
- * Checks if date is solar term date. If it is, returns index to particular solar term, otherwise returns error code
- * Index can be then passed to GetSolarTermNameL function.
- *
- * @since S60 v3.1
- * @param aDateTime date that is checked
- * @return index of solar term, if date is solar term date.
- * KErrNone, if date is not solar term date
- * KErrNotSupported, if date is outside of supported
- * range for solar term data.
- */
- IMPORT_C TInt CheckSolarTermDateL( const TDateTime& aDateTime );
-
-
-private:
- CCalenSolarTerms(RFs& aFs);
-
- void ConstructL();
-
- /**
- * Returns ETrue, if date fits into date range of available solar item
- * data.
- * @since 3.0
- */
- TBool HasSolarTermDataAvailable(const TDateTime& aDate) const;
-
- /**
- * Reads and caches 24 solar term dates from "SolarItems" file
- */
- void ReadSolarTermsL(TDateTime aDate);
-
-private: // data
- /**
- * File server handle.
- */
- RFs& iFs;
-
- /**
- * Year that is currently cached from file to memory
- */
- TInt iCachedYear;
-
- /**
- * Table of solar term dates for currently cached year
- */
- TDateTime iSolarTermDates[KSolarTermCount];
-
- };
-
-#endif // C_CALENSOLARTERMS_H
--- a/calendarui/regionalplugins/inc/calenlunarinfo.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
-* Copyright (c) 2009 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: Calendar Lunar Plugin
-*
-*/
-
-#ifndef __CALENLUNARINFO_H__
-#define __CALENLUNARINFO_H__
-
-#include <e32def.h>
-#include <calendarconverter.h>
-
-class TCalenLunarInfo
- {
-public:
- enum TFestival
- {
- ENoFestival = KErrNotFound,
- EFestivalSpring,
- EFestivalLantern,
- EFestivalDragonBoat,
- EFestivalSeventhNight,
- EFestivalGhost,
- EFestivalMidAutumn,
- EFestivalDoubleNinth,
- EFestivalTwelfthMonth,
- EFestivalNewYearEve
- };
-
- enum TAnimalYear
- {
- EYearOfRat = 0,
- EYearOfOx,
- EYearOfTiger,
- EYearOfRabbit,
- EYearOfDragon,
- EYearOfSnake,
- EYearOfHorse,
- EYearOfSheep,
- EYearOfMonkey,
- EYearOfRooster,
- EYearOfDog,
- EYearOfPig
- };
-
- typedef TInt TSolarTerm;
- typedef TInt THeavenlyStem;
- typedef TInt TTerrestialBranch;
-
-public:
- IMPORT_C TBool HasFestival();
- IMPORT_C TBool HasSolarTerm();
-
- IMPORT_C TAnimalYear AnimalYear();
-
-public:
- TFestival iFestival;
- TSolarTerm iSolarTerm;
- TChineseDate iLunarDate;
- TTime iGregorianDate;
-
- THeavenlyStem iHeavenlyStem;
- TTerrestialBranch iTerrestialBranch;
- };
-
-
-#endif // __CALENLUNARINFO_H__
--- a/calendarui/regionalplugins/inc/calenlunarinfoprovider.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-/*
-* Copyright (c) 2008 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: Calendar Lunar Plugin
- *
-*/
-
-
-
-#ifndef __CALENLUNARINFOPROVIDER_H__
-#define __CALENLUNARINFOPROVIDER_H__
-
-#include "CalenLunarInfo.h"
-#include <e32base.h>
-
-
-class CChineseCalendarConverter;
-class CCalenSolarTerms;
-class RFs;
-
-class CCalenLunarInfoProvider : public CBase
- {
-public: // public API
- IMPORT_C static CCalenLunarInfoProvider* NewL(RFs& aFs);
-
- IMPORT_C virtual ~CCalenLunarInfoProvider();
-
- IMPORT_C TCalenLunarInfo GetLunarInfoL( const TTime& aDay );
-
-private: // own methods
- CCalenLunarInfoProvider();
- void ConstructL(RFs& aFs);
-
-private: // data
- CChineseCalendarConverter* iConverter;
- CCalenSolarTerms* iSolarTerms;
-
- };
-
-#endif // __CALENLUNARINFOPROVIDER_H__
--- a/calendarui/regionalplugins/inc/calenlunarlocalizedinfo.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,82 +0,0 @@
-/*
-* Copyright (c) 2008 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: Calendar Lunar Plugin
- *
-*/
-
-
-
-#ifndef __CALENLUNARLOCALIZEDINFO_H__
-#define __CALENLUNARLOCALIZEDINFO_H__
-
-#include <e32base.h>
-
-class CCalenLunarLocalizer;
-
-class CCalenLunarLocalizedInfo : public CBase
- {
-public:
- enum TField
- {
- EFestival,
- ESolarTerm,
- EFullLunarDate,
- ELunarYear,
- ELunarMonthAndDay,
- EAnimalYear,
- EGregorianDate
- };
-
-
-public: // public API
- IMPORT_C static CCalenLunarLocalizedInfo* NewL();
-
- IMPORT_C virtual ~CCalenLunarLocalizedInfo();
-
- /**
- * Get specific field. This is useful, when you have ordered array of TFields
- * and you want to process them in a loop.
- * If day didn't had e.g. festival or solar term, KNullDesC is returned for those.
- */
- IMPORT_C const TDesC& GetField( TField aField );
-
- const TDesC& Festival() { return iFestival; }
- const TDesC& SolarTerm() { return iSolarTerm; }
- const TDesC& FullLunarDate() { return iFullLunarDate; }
- const TDesC& LunarYear() { return iLunarYear; }
- const TDesC& LunarMonthAndDay() { return iLunarMonthAndDay; }
- const TDesC& AnimalYear() { return iAnimalYear; }
- const TDesC& GregorianDate() { return iGregorianDate; }
-
-private:
- CCalenLunarLocalizedInfo();
-
- void ConstructL();
-
-private:
-
- TPtrC iFestival;
- TPtrC iSolarTerm;
- TPtrC iAnimalYear;
-
- TBuf<50> iLunarYear;
- TBuf<50> iLunarMonthAndDay;
- TBuf<50> iFullLunarDate;
- TBuf<50> iGregorianDate;
-private:
- friend class CCalenLunarLocalizer;
- friend class CCalenLunarVietnameseLocalizer;
- };
-
-#endif // __CALENLUNARLOCALIZEDINFO_H__
--- a/calendarui/regionalplugins/inc/calenlunarlocalizer.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,112 +0,0 @@
-/*
-* Copyright (c) 2008 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: Calendar Lunar Plugin
- *
-*/
-
-
-
-#ifndef __CALENLUNARLOCALIZER_H__
-#define __CALENLUNARLOCALIZER_H__
-
-#include <e32base.h>
-#include <badesca.h>
-#include "CalenLunarLocalizedInfo.h"
-#include "CalendarVariant.hrh"
-#include "calendarui_debug.h"
-
-class CEikonEnv;
-class TCalenLunarInfo;
-class TChineseDate;
-class CFont;
-class CCalenExtraRowFormatter;
-
-class CCalenLunarLocalizer : public CBase
- {
-public: // public API
- IMPORT_C static CCalenLunarLocalizer* NewL();
-
- IMPORT_C virtual ~CCalenLunarLocalizer();
-
- IMPORT_C virtual CCalenLunarLocalizedInfo* LocalizeL( TCalenLunarInfo& aInfo );
-
- IMPORT_C virtual TPtrC GetExtraRowTextL( CCalenLunarLocalizedInfo& aLocInfo );
-
-
-protected:
- IMPORT_C CCalenLunarLocalizer();
-
- IMPORT_C void ConstructL();
-
- TBool TryToFitL( const TDesC& aStr );
- virtual void LocalizeMonthAndDayL(CCalenLunarLocalizedInfo* aLocInfo,
- TCalenLunarInfo& aInfo);
-private:
- void GetChineseDigits(TInt aNum, TDes& aDes);
- void GetChineseDay(const TChineseDate& aChineseDate, TDes& aDes);
- void GetChineseMonth(const TChineseDate& aChineseDate, TDes& aDes);
-
-protected: // data
- CEikonEnv* iEikEnv;
-
- /**
- * Localized names of lunar festivals
- * Own.
- */
- CDesCArray* iFestivalNames;
-
- /**
- * Localized names of solar terms
- * Own.
- */
- CDesCArray* iSolarTermNames;
-
- /**
- * Localized names of animal years
- * Own.
- */
- CDesCArray* iAnimalYearNames;
-
- /**
- * Localized names of heavenly stems
- * Own.
- */
- CDesCArray* iHeavenlyStemNames;
-
- /**
- * Localized names of terrestial branches
- * Own.
- */
- CDesCArray* iTerrestialBranchNames;
-
-
- /**
- * Format string for western date.
- * Own.
- */
- HBufC* iGregorianDateFormat;
-
- TBuf<1000> iLunarExtraRowText;
-
-
- /**
- * Language independent formatter of extra row information.
- */
- CCalenExtraRowFormatter* iRowFormatter;
-
- TInt iResourceFileOffset;
-
- };
-
-#endif // __CALENLUNARLOCALIZER_H__
--- a/calendarui/regionalplugins/inc/calenlunarpanic.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-/*
-* Copyright (c) 2008 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: Calendar Lunar Plugin
- *
-*/
-
-
-#ifndef CALENLUNARPANIC_H
-#define CALENLUNARPANIC_H
-
-enum TCalenLunarPanic
- {
- EPanicLunarResourceLoading = 1,
- EPanicLunarEnvNotfound,
- };
-
-void Panic(TCalenLunarPanic aReason)
- {
- _LIT(KPanicText, "CalenLunarPlugin");
- User::Panic(KPanicText,aReason);
- }
-
-#endif
--- a/calendarui/regionalplugins/loc/calendarregionalplugin.loc Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,2037 +0,0 @@
-/*
-* Copyright (c) 2002-2004 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: This is a localisation file for Calendar
-* A _loc file is the one and only place where the logical
-* strings to be localised are defined
-*
-*/
-
-
-
-// LOCALISATION STRINGS
-
-
-//d:Application title for listview
-//l:list_single_large_graphic_pane_t1
-//
-#define qtn_apps_calendar_list "Calendar"
-
-//d:Application title for general settings pane
-//l:list_single_large_graphic_pane_t1_cp2
-//
-#define qtn_cale_title_calendar "Calendar"
-
-//d:Application title for grid
-//l:cell_app_pane_t1
-//
-#define qtn_apps_calendar_grid "Calendar"
-
-//d:Opens New entry SubMenu
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_make_note "New entry"
-
-//d:Opens delete SubMenu in MonthView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_delete "Delete"
-
-//d:Deletes a note
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_delete "Delete"
-
-//d:Discard changes to a note
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_cancel_changes "Discard changes"
-
-//d:Confirmation text when discarding changes to a note
-//l:popup_note_window
-//
-#define qtn_cale_query_cancel_changes "Discard changes?"
-
-//d:Opens SettingView
-//l:list_single_pane_t1_cp2
-//
-#define text_calendar_settings "Settings"
-
-//d:Opens DayView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_open "Open"
-
-//d:Opens WeekView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_view_week "View by weeks"
-
-//d:Jumps to a specific date
-//l:list_single_pane_t1_cp2
-//
-#define text_calendar_goto_date "Go to date"
-
-//d:Opens Meeting note
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_meeting_note "Meeting"
-
-
-//d:Opens Meeting Request note
-//d:Option list item for this is "Make Note"
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_cale_meeting_request_note "Meeting Request"
-
-
-//d:Opens Anniversary Note
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_note_anniversary "Anniversary"
-
-//d:Opens Day Note
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_day_note "Day note"
-
-//d:Opens MonthView
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_opt_view_month "View month"
-
-//d:Deletes all notes
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_sub_all "All notes"
-
-//d:the date before the notes are to be deleted.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_sub_setdate "Before set date"
-
-//d:Settings is changed
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_change "Change"
-
-//d:Subject item text of Meeting
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_subject "subject"
-
-//d:Start date item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_date "start date"
-
-//d:End date item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_end "end date"
-
-//d:Start date and time item text of entry editor
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_start_time_date "start time and date"
-
-//d:End date and time item text of entry editor
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_end_time_date "end time and date"
-
-//d:Alarm date and time item text of entry editor
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_alarm_time_date "alarm time and date"
-
-//d:Start time item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_start "start time"
-
-//d:End time item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_end_meet_time "end time"
-
-//d:Alarm item text of Meeting, Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_alarm_activity "alarm"
-
-//d:Alarm time item text of Meeting, Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_alarm "alarm time"
-
-//d:Alarm date item text of Meeting, Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_alarmdate "alarm date"
-
-//d:Repeat item text of Meeting, Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_repeat "repeat"
-
-//d:Repeat until item text of Meeting, Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_until "repeat until"
-
-//d:Confidentiality item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_confident "synchronisation"
-
-//d:Subject item text of Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_anniversary_occasion "occasion"
-
-//d:Start date item text of Anniversary form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_anniversary_start_date "date"
-
-//d:Subject item text of Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_day_description "description"
-
-//d:Start date item text of Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_day_start_date "start date"
-
-//d:End date item text of Day form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_day_end_date "end date"
-
-//d:Occasion item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_occasion "Occasion:"
-
-//d:Date item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_date "Date:"
-
-//d:Subject item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_subject "Subject:"
-
-//d:Location item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_location "Location:"
-
-//d:Synchronisation item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync "Synchronisation:"
-
-//d:Alarm item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_alarm "Alarm:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_daily "Repeats daily:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_weekly "Repeats weekly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_fortnightly "Repeats fortnightly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_monthly "Repeats monthly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_yearly "Repeats yearly:"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat_other "Recurring entry:"
-
-//d:Repeat item text of note viewer when no end date (repeat from ...)
-//d:%0U is date entry repeats from
-//l:list_form_graphic_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_valid_forever "From %0U"
-
-//d:Navi pane decoration for event viewers
-//d:%0U is current instance date
-//d:%1U is index of current instance
-//d:%2U is total instance count for current day
-//l:navi_text_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_navi "%0U %1U/%2U"
-
-//d:Repeat item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_repeat "Repeat:"
-
-//d:Time item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_time "Time:"
-
-//d:Due date item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_due_date "Due date:"
-
-//d:Since item text of note viewer (anniversaries only)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_since "Since:"
-
-//d:Priority item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio "Priority:"
-
-//d:Description item text of note viewer
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_desc "Description:"
-
-//d:Private item text of note viewer (Sync)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync_private "Private"
-
-//d:Public item text of note viewer (Sync)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync_public "Public"
-
-//d:None item text of note viewer (Sync)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_sync_none "None"
-
-//d:High item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio_high "High"
-
-//d:Normal item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio_normal "Normal"
-
-//d:Low item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_prio_low "Low"
-
-//d:Completed item text of note viewer (Priority)
-//l:list_double_graphic_heading_pane_t1
-//r:3.2
-//
-#define qtn_cale_viewer_completed "Completed:"
-
-//d:Date and time when appointment starts and ends on the same day
-//d:The string is small enough to fit onto one line
-//d:%0U is start time
-//d:%1U is end time
-//d:%2U is start date
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_day "%0U - %1U %2U"
-
-//d:Date and time when appointment starts and ends on the same day
-//d:The string is too long to fit onto one line so must include a linebreak
-//d:%0U is start time
-//d:%1U is end time
-//d:%2U is start date
-//d:<\x2028> is line break
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_day_wrapped "%0U - %1U"<0x2028>"%2U"
-
-//d:Date and time when appointment starts and ends on different days
-//d:The string is small enough to fit onto one line
-//d:%0U is start time
-//d:%1U is start date
-//d:%2U is end time
-//d:%3U is end date
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_days "%0U %1U - %2U %3U"
-
-//d:Date and time when appointment starts and ends on different days
-//d:The string is too long to fit onto one line so must include a linebreak
-//d:%0U is start time
-//d:%1U is start date
-//d:%2U is end time
-//d:%3U is end date
-//d:<\x2028> is line break
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_time_days_wrapped "%0U %1U -"<0x2028>"%2U %3U"
-
-//d:Date and time of alarm (when alarm is on different day to event)
-//d:%0U is alarm time
-//d:%1U is alarm date
-//l:popup_preview_text_window/opt1
-//r:3.2
-//
-#define qtn_cale_viewer_alarm_time "%0U %1U"
-
-//d:Start and end date of event, when event lasts for more than one day
-//d:%0U is start date
-//d:%1U is end date
-//l:msg_body_pane/opt
-//r:3.2
-//
-#define qtn_cale_viewer_valid_limited "%0U - %1U"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_daily "%N day meeting cannot repeat daily"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_weekly "%N day meeting cannot repeat weekly"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_fortnightly "%N day meeting cannot repeat fortnightly"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_monthly "%N day meeting cannot repeat monthly"
-
-//d:Error text when adjusting repeating meeting instance times
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_cannot_occur_yearly "%N day meeting cannot repeat yearly"
-
-//d:Error text when attempting to move a meeting out of sequence
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_child_out_of_sequence "Unable to move a meeting out of sequence"
-
-//d:Error note when attempting to move an instance of a meeting to a day when an instance already exists
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_child_same_day "Two occurrences of a meeting cannot occur on the same day"
-
-//d:Error note when attempting to move a meeting to overlap another instance of the meeting
-//l:popup_note_window
-//r:3.2
-//
-#define qtn_cale_note_child_overlap "Meeting cannot overlap another instance of itself"
-
-//d:Alarm active text of Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_alarm_active "Active"
-
-//d:Alarm off text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_alarm_off "Off"
-
-//d:Synchronisation type text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_confident_public "Public"
-
-//d:Synchronisation type text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_confident_private "Private"
-
-//d:Synchronisation type text of the Note form
-//l:list_form_graphic_pane_t1
-//
-#define qtn_cale_confident_none "None"
-
-//d:Repeat type "Not repeated" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_not_repeated "Not repeated"
-
-//d:Repeat type "Every day" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_every_day "Every day"
-
-//d:Repeat type "Every week" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_every_week "Every week"
-
-//d:Repeat type "Every two weeks" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_bi_weekly "Every 2 weeks"
-
-//d:Repeat type "Monthly" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_repeat_monthly "Monthly"
-
-//d:Repeat type "Yearly" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_every_year "Every year"
-
-//d:Repeat type "Other" text of note form
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_other "Other"
-
-//d:Title pane text of Meeting form
-//l:title_pane_t2/opt9
-//
-#define text_calendar_title_meeting "Meeting"
-
-//d:Title pane text of Anniversary form
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_anniversary_title "Anniversary"
-
-//d:Title pane text of Day form
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_title_daynote "Day note"
-
-//d:After confirming the saving,the confirmation note
-//d:Calendar note savedis shown
-//l:popup_note_window
-//
-#define text_calendar_note_saved "Note saved"
-
-//d:The List_Query with the prompt text Save Repeat Note?
-//l:heading_pane_t1
-//
-#define qtn_cale_lq_save_chang_repeated "Save changes?"
-
-//d:The List_Query with the prompt text "Edit:" (choices being Series or Occurrence)
-//l:heading_pane_t1
-//
-#define qtn_cale_lq_edit_recurring "Edit:"
-
-//d:All notes delete prompt
-//l:popup_note_window
-//
-#define qtn_cale_quest_delete_all_notes "Delete all notes"
-
-//d:A note delete prompt
-//l:popup_note_window
-//
-#define qtn_cale_quest_delete_event "Delete note?"
-
-//d:Data query for inputting the date before the notes are to be deleted.
-//l:popup_query_data_window
-//
-#define qtn_cale_prmpt_del_before_date "Delete before set date"
-
-//d:When deleting a repeated note,
-//d:the phone prompts the List_Query
-//l:heading_pane_t1
-//
-#define qtn_cale_lq_del_repeated_note "Delete repeated note"
-
-//d:After deleting of notes phone displays the information note
-//l:popup_note_window
-//
-#define qtn_cale_conf_past_note_deleted "Notes from past to set date deleted"
-
-//d:After deleting of notes phone displays the information note
-//l:popup_note_window
-//
-#define qtn_cale_conf_all_notes_deleted "All notes deleted from Calendar"
-
-//d:Erase or update note selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_all_occurences "All occurrences"
-
-//d:Erase or update selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_this_occurence "Only this occurrence"
-
-//d:Edit note selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_edit_series "All occurrences"
-
-//d:Edit note selection list of choice items
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_lq_edit_this "Only this occurrence"
-
-//d:Specified Out of range of date
-//l:popup_note_window
-//
-#define qtn_cale_info_year_limit "Year limit is from 1900 to 2100"
-
-//d:Error prompt for alarm date too past
-//l:popup_note_window
-//
-#define qtn_cale_date_alarm_past "Alarm date is too past"
-
-//d:Error prompt for alarm time earlier than note
-//l:popup_note_window
-//
-#define qtn_cale_later_date "Alarm later than note"
-
-//d:Error prompt for setting alarm time which is past.
-//l:popup_note_window
-//
-#define qtn_cale_not_expired "The time for the note alarm has already expired"
-
-//d:Error prompt for repeat until date earlier than start date.
-//l:popup_note_window
-//
-#define qtn_cale_info_repeat_invalid "Repeat until has to be later than the start date"
-
-//d:Confirmaiton prompt for updating start date on repeat note.
-//l:popup_note_window
-//
-#define qtn_cale_quest_change_start_day "Are you sure to change start date of selected recurring note?"
-
-//d:Error prompt "Note ends before than starts"
-//l:popup_note_window
-//
-#define qtn_cale_info_note_ends_before "Note ends before than starts"
-
-//d:Error prompt. Date limit could be set only to the past.
-//l:popup_note_window
-//
-#define qtn_cale_date_not_future "Date in the future not allowed"
-
-//d:Calendar Settings title pane
-//l:title_pane_t2/opt9
-//
-#define text_calendar_setting_title "Settings"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define qtn_cale_default_view "Default view"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define qtn_cale_week_format "Week format"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define text_calendar_week_title_format "Title of week view"
-
-//d: Calendar Settings "Default view" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_default_day_view "Day View"
-
-//d: Calendar Settings "Default view" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_default_week_view "Week View"
-
-//d: Calendar Settings "Default view" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_cale_default_month_view "Month View"
-
-//d: Calendar Settings "Title of week view" item
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_week_title_numb "Week number"
-
-//d: Calendar Settings "Title of week view" item
-//l:list_set_graphic_pane_t1
-//
-#define text_calendar_week_title_dur "Duration of week"
-
-//d:Calendar Settings "Default Mailbox" item
-//l:heading_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_cale_lq_select_mailbox "Select Default Mailbox: "
-
-//d:Calendar "Default Mailbox" setting item name.
-//l:list_setting_pane_t1/opt1
-//w:
-//r:3.0
-//
-#define qtn_cale_default_mailbox "Default mailbox"
-
-//d:Calendar no default mailboxes defined prompt
-//l:popup_note_window
-//w:
-//r:3.0
-//
-#define qtn_cale_query_define_mailbox "No mailboxes defined, define now?"
-
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1
-//r:3.2
-//
-#define qtn_cale_sett_arabic_cale "Arabic calendar"
-
-//d:Opens external calendar application
-//l:list_single_pane_t1_cp2
-//r:3.2
-//
-#define qtn_cale_om_external_cale "External calendar"
-
-//d: Calendar date query prompt
-//l:popup_query_data_window
-//
-#define text_calendar_date_prompt "Date:"
-
-//d:Title pane text in WeekView main state
-//d:currently highlighted day's Week %N
-//d:%N was setted week number
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_week_view_title "Week %N"
-
-//d:Title pane text in WeekView main state
-//d:currently highlighted day's %0U - %1U
-//d:The date of dd/mm/yy form is set to %0U or %1U.
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_title_week_days "%0U -\n %1U"
-
-//d:Confirmation note.
-//d:Message is shown after system time change, but no alarms were missed.
-//l:popup_note_window
-//
-#define qtn_cale_note_system_time_changed "System time changed, Calendar events are updated accordingly"
-
-//d:Deleting wait note text
-//l:popup_note_wait_window
-//
-#define qtn_cale_wait_deleting_notes "Deleting notes..."
-
-//d:Location item text of Meeting form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_cale_note_meeting_location "location"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1/opt1
-//
-#define qtn_chi_cale_sett_lunar_cale "Lunar calendar"
-
-//d: Calendar Settings "Lunar calendar" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_chi_cale_lunar_cale_on "On"
-
-//d: Calendar Settings "Lunar calendar" item
-//l:list_set_graphic_pane_t1
-//
-#define qtn_chi_cale_lunar_cale_off "Off"
-
-//d:Chinese Animal year - Rat
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_rat "Year of the Rat"
-
-//d:Chinese Animal year - Ox
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_ox "Year of the Ox"
-
-//d:Chinese Animal year - Tiger
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_tiger "Year of the Tiger"
-
-//d:Chinese Animal year - Rabbit
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_rabbit "Year of the Rabbit"
-
-//d:Chinese Animal - Rabbit
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_dragon "Year of the Dragon"
-
-//d:Chinese Animal - Snake
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_snake "Year of the Snake"
-
-//d:Chinese Animal - Horse
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_horse "Year of the Horse"
-
-//d:Chinese Animal - Sheep
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_sheep "Year of the Sheep"
-
-//d:Chinese Animal - Monkey
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_monkey "Year of the Monkey"
-
-//d:Chinese Animal - Rooster
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_rooster "Year of the Rooster"
-
-//d:Chinese Animal - Dog
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_dog "Year of the Dog"
-
-//d:Chinese Animal - Pig
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_animal_pig "Year of the Pig"
-
-//d:Chinese Heavenly stem 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_1 "Jia"
-
-//d:Chinese Heavenly stem 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_2 "Yi"
-
-//d:Chinese Heavenly stem 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_3 "Bing"
-
-//d:Chinese Heavenly stem 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_4 "Ding"
-
-//d:Chinese Heavenly stem 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_5 "Wu"
-
-//d:Chinese Heavenly stem 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_6 "Ji"
-
-//d:Chinese Heavenly stem 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_7 "Geng"
-
-//d:Chinese Heavenly stem 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_8 "Xing"
-
-//d:Chinese Heavenly stem 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_9 "Reng"
-
-//d:Chinese Heavenly stem 10
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_heav_stem_10 "Gui"
-
-//d:Chinese Terrestrial branch 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_1 "Zi"
-
-//d:Chinese Terrestrial branch 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_2 "Chou"
-
-//d:Chinese Terrestrial branch 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_3 "Yin"
-
-//d:Chinese Terrestrial branch 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_4 "Mao"
-
-//d:Chinese Terrestrial branch 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_5 "Chen"
-
-//d:Chinese Terrestrial branch 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_6 "Si"
-
-//d:Chinese Terrestrial branch 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_7 "Wu"
-
-//d:Chinese Terrestrial branch 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_8 "Wei"
-
-//d:Chinese Terrestrial branch 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_9 "Shen"
-
-//d:Chinese Terrestrial branch 10
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_10 "You"
-
-//d:Chinese Terrestrial branch 11
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_11 "Xu"
-
-//d:Chinese Terrestrial branch 12
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_terr_branch_12 "Hai"
-
-//d:Chinese solar items 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_1 "Li Chun"
-
-//d:Chinese solar items 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_2 "Yu Shui"
-
-//d:Chinese solar items 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_3 "Jing Zhe"
-
-//d:Chinese solar items 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_4 "Chun Fen"
-
-//d:Chinese solar items 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_5 "Qing Ming"
-
-//d:Chinese solar items 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_6 "Gu Yu"
-
-//d:Chinese solar items 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_7 "Li Xia"
-
-//d:Chinese solar items 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_8 "Xiao Man"
-
-//d:Chinese solar items 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_9 "Mang Zhong"
-
-//d:Chinese solar items 10
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_10 "Xia Zhi"
-
-//d:Chinese solar items 11
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_11 "Xiao Shu"
-
-//d:Chinese solar items 12
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_12 "Da Shu"
-
-//d:Chinese solar items 13
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_13 "Li Qiu"
-
-//d:Chinese solar items 14
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_14 "Chu Shu"
-
-//d:Chinese solar items 15
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_15 "Bai Lu"
-
-//d:Chinese solar items 16
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_16 "Qiu Fen"
-
-//d:Chinese solar items 17
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_17 "Han Lu"
-
-//d:Chinese solar items 18
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_18 "Shuang Jiang"
-
-//d:Chinese solar items 19
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_19 "Li Dong"
-
-//d:Chinese solar items 20
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_20 "Xiao Xue"
-
-//d:Chinese solar items 21
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_21 "Da Xue"
-
-//d:Chinese solar items 22
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_22 "Dong Zhi"
-
-//d:Chinese solar items 23
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_23 "Xiao Han"
-
-//d:Chinese solar items 24
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_solar_item_24 "Da Han"
-
-//d:Lunar festivals 1
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_1 "Spring festival"
-
-//d:Lunar festivals 2
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_2 "Lantern festival"
-
-//d:Lunar festivals 3
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_3 "Dragon boat festival"
-
-//d:Lunar festivals 4
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_4 "Seventh night festival"
-
-//d:Lunar festivals 5
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_5 "Ghost festival"
-
-//d:Lunar festivals 6
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_6 "Mid autumn festival"
-
-//d:Lunar festivals 7
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_7 "Double ninth festival"
-
-//d:Lunar festivals 8
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_8 "Eighth day of twelfth month festival"
-
-//d:Lunar festivals 9
-//l:navi_text_pane_t1
-//
-#define qtn_chi_cale_festival_name_9 "New year's eve"
-
-//d:Opens Lunar data dialog
-//l:list_single_pane_t1_cp2
-//
-#define qtn_chi_cale_lunar_data "Show lunar data"
-
-//d:Title pane sting in "Show lunar data" dialog
-//l:heading_pane_t1
-//
-#define qtn_chi_cale_lunar_calendar "Lunar calendar"
-
-//d:Calendar Settings main pane item
-//l:list_setting_pane_t1
-//
-#define qtn_cale_alarm_tone "Calendar alarm tone"
-
-//d: Empty listbox
-//l: main_list_empty_pane
-//
-#define qtn_cale_no_events "(No Events)"
-
-//d: The subject text when the item subject is empty in DayView
-//l: list_single_heading_pane_t1
-//
-#define qtn_cale_no_subject "<Unnamed>"
-
-//d: Profile Settings Item Edit - setting selection data
-//l: list_set_graphic_pane_t1
-#define qtn_tc_off "Off"
-
-//d: File list dialog header
-//l: heading_pane_t1
-#define qtn_tc_popup_heading "Select tone: "
-
-//d:Default tone selection choice in alarm tone list for Calendar and Clock
-//l:list_set_graphic_pane_t1
-//
-#define qtn_mode_default_tone "Default tone"
-
-//d:Options menu item.
-//d:Opens Add Description submenu in note editor
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_add_descript "Add Description"
-
-//d:Submenu item for adding new description text to Calendar entry
-//d:Opens Notepad Editor.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_om_descript_new "New"
-
-//d:Submenu item for adding description text to Calendar entry
-//d:from existing Notepad memos. Launches Notepad memo fetch.
-//l:list_single_popup_submenu_pane_t1
-//
-#define qtn_cale_om_descript_exist "Use existing"
-
-//d:Options menu item.
-//d:Shows Calendar entry description text in Notepad viewer.
-//d:Opens Notepad viewer.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_desc_show "Show Description"
-
-//d:Options menu item.
-//d:Removes description text from Calendar entry.
-//d:Launches confirmation query before removing.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_cale_om_desc_remove "Remove Description"
-
-//d:Title text, when editing Calendar description in Notepad
-//l:title_pane_t2/opt9
-//
-#define qtn_cale_note_title "Calendar Description"
-
-//d:Confirmation text, when deleting Calendar description data from
-//d:Notepad editor
-//l:popup_note_window
-//
-#define qtn_cale_q_del_notep_desc "Delete Calendar Description?"
-
-//d:Informatio note text shown, when Calendar description is deleted from
-//d:Notepad editor or viewer
-//l:popup_note_window
-//
-#define qtn_cale_inote_desc_del_memo "Calendar description deleted"
-
-//d:Confirmation text, when deleting Calendar description data from
-//d:Calendar meeting editor
-//l:popup_note_window
-//
-#define qtn_cale_query_remove_descr "Remove Description?"
-
-//d:Header text for Description form item.
-//d:One truncated line of description is visible below this.
-//l:data_form_wide_pane_t1
-//
-#define qtn_cale_meeting_description "Description"
-
-//d:Title text of title pane
-//d:Note View
-//l:title_pane_t2/opt9
-//
-#define qtn_todo_note_header "To-Do Note"
-
-//d:Command in options menu.
-//d:Delete the selected item.
-//l:list_single_pane_t1_cp2
-//
-#define qtn_todo_om_delete "Delete"
-
-//d:Command in options sub-menu.
-//d:Set a priority high to selected item.
-//l:list_form_graphic_pane_t1
-//
-#define qtn_todo_attr_high "High"
-
-//d:Command in options sub-menu.
-//d:Set a priority normal to selected item.
-//l:list_form_graphic_pane_t1
-//
-#define qtn_todo_attr_normal "Normal"
-
-//d:Command in options sub-menu.
-//d:Set a priority low to selected item.
-//l:list_form_graphic_pane_t1
-//
-#define qtn_todo_attr_low "Low"
-
-//d:Command in options menu.
-//d:Marked the To-Do item done in List View
-//l:list_single_pane_t1_cp2
-//
-#define qtn_todo_cmd_task_completed "Task completed"
-
-//d:Command in options menu.
-//d:Unmarked the To-Do item done in List View
-//l:list_single_pane_t1_cp2
-//
-#define qtn_todo_cmd_restore_task "Restore task"
-
-//d:Confirmation query prompt.
-//d:Deleting the selected one note.
-//l:popup_note_window
-//
-#define qtn_todo_quest_delete_note "Delete note?"
-
-//d:Confirmation query prompt.
-//d:Deleting the marked one or more notes.
-//l:popup_note_window
-//
-#define qtn_todo_quest_delete_notes "Delete\n%N notes?"
-
-//d:Wait note text in deleting items.
-//l:popup_note_wait_window
-//
-#define qtn_todo_wait_deleting_notes "Deleting notes..."
-
-//d:Item texts of form
-//d:Priority field of To-Do Note form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_todo_note_view_priority "priority"
-
-//d:Item texts of form
-//d:Due date field of To-Do Note form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_todo_note_duedate "due date"
-
-//d:Item texts of form
-//d:Subject field of To-Do Note form
-//l:list_double_graphic_heading_pane_t1
-//
-#define qtn_todo_note_subject "subject"
-
-//d: Information note text shown in Calendar application start,
-//d: when alarms have been passed due system time change
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_cale_note_missed_alarms "1 or more alarms missed due to time change"
-
-//d: Setting item choice to select Todo view as Calendar default view
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.0
-//
-#define qtn_cale_default_todo_view "Todo view"
-
-
-//d: Options Submenu item to create new Todo note
-//l:list_single_popup_submenu_pane_t1
-//w:
-//r:3.0
-#define qtn_cale_note_todo "Todo"
-
-//d: Confirmation note shown, when edited Todo note is saved
-//l:popup_note_window
-//w:
-//r:3.0
-#define qtn_cale_note_todo_saved "Todo Note saved"
-
-//d: Options menu item to open Calendar day view from Todo view
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_cale_opt_view_day "Day view"
-
-//d: Options menu item to open Todo view from other Calendar views
-//l:list_single_pane_t1_cp2
-//w:
-//r:3.0
-#define qtn_cale_opt_view_todo "Todo view"
-
-//d: Title pane text for Calendar Todo view that shows all users Todo entries
-//l:title_pane_t2/opt9
-//w:
-//r:3.0
-#define qtn_cale_title_todos "All Todos"
-
-//d:Snooze time setting header.
-//l:list_setting_pane_t1/opt1
-//w:
-//r:3.1
-#define qtn_cale_set_snooze_time "Calendar Alarm Snooze Time"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_sanim_time_out_slider_ykcur "1 minute"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//d:%U in minutes, plural.
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.1
-#define qtn_cale_sanim_time_out_slider_cur "%U minutes"
-
-//d:Context-specific text for the minimum snooze time value in Calendar Settings.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_cale_sanim_time_out_slider_min "1 min."
-
-//d:Context-specific text for the maximum snooze time value in Calendar Settings.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_snooze_time_max "60 min."
-
-
-//d: Format string for lunar calendar information in Calendar day, week and month views
-//d: Format string is used dynamically to display as much information as possible.
-//d: If all information doesn't fit some information and separators are dropped.
-//d: Localization can affect order of information.
-//d: If data element is dropped, empty string is supplied for it.
-//d: and either for preceding (or following) separator (%0U)
-//d:
-//d: e.g. in Chinese, order should be somethinglike (201030405): "%2U%0U%1U%0U%3U%0U%4U%0U%5U"
-//d: e.g. in Vietnamese, (304050201): "%3U%0U%4U%0U%5U%0U%2U%0U%1U"
-//d: %0U separator between data elements, qtn_cale_lunar_separator
-//d: %1U animal year format, qtn_cale_animal_year_in_extra_row
-//d: %2U lunar year, qtn_cale_lunar_year
-//d: %3U lunar date, either qtn_cale_lunar_date or qtn_cale_lunar_leap_date
-//d: %4U festival, qtn_chi_cale_festival_name_X
-//d: %5U solar term, qtn_chi_cale_solar_item_X
-//l: None
-//w:
-//r:3.2
-//
-#define qtn_cale_extra_row_lunar "%1U%0U%2U%0U%3U%0U%4U%0U%5U"
-
-
-//d: Separator between data elements in Lunar Calendar extra row.
-//d: E.g. in Chinese, " "
-//d: E.g. in Vietnamese, ", "
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_separator ", "
-
-
-//d: Chinese lunar date with day, month and year.
-//d: %0U is lunar date. either qtn_cale_lunar_date or qtn_cale_lunar_leap_date
-//d: %1U lunar year. qtn_cale_lunar_year
-//d:
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_full_date "%0U %1U"
-
-
-//d: Chinese lunar date for dates. Used for non-leap month dates.
-//d: Localication can add language specific separator and extra symbols.
-//d: E.g. in Chinese, character for month should be used: "%0U·%1U"
-//d: E.g. in Vietnamese, order is different and separator is slash "%1U/%0U"
-//d: %0U is lunar month
-//d: %1U lunar day
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_date "%0U/%1U"
-
-
-//d: Chinese lunar date for dates that are on leap months.
-//d: This should be similar to qtn_cale_lunar_date,
-//d: but language specific leap month indicator should be added to correct place.
-//d: E.g. in Vietnamese: "%1U/%0U N"
-//d: %0U is lunar month
-//d: %1U lunar day
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_leap_date "%0UL/%1U"
-
-
-//d: Chinese lunar year, combination of heavenly stem and terrestial branch
-//d: %0U is heavenly stem (qtn_chi_cale_heav_stem_X)
-//d: %1U is terrestial branch (qtn_chi_cale_terr_branch_X)
-//d: Localization can add language specific separator between words
-//d: and if words are written together, space can be removed (e.g. in Chinese).
-//d: E.g. in Chinese "%0U%1U·"
-//d: E.g. in Vietnamese "Nam %0U %1U"
-//l: (None)
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_year "%0U %1U"
-
-
-//d: Heading text for chinese festival
-//d: in Lunar calendar information pop-up.
-//d: It's not shown for dates that do not have festival.
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_info_festival "Festival:"
-
-
-//d: Heading text for chinese solar term
-//d: in Lunar calendar information pop-up.
-//d: It's not shown for dates that do not have solar term.
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_lunar_info_solar "Solar term:"
-
-
-//d: Heading text for chinese lunar calendar date
-//d: in Lunar calendar information pop-up.
-//d: Data for this header is qtn_cale_lunar_full_date.
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_info_lunar_date "Lunar date:"
-
-
-//d: Heading text for animal year
-//d: in Lunar calendar information pop-up.
-//d: Data for this header is qtn_chi_cale_animal_X
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_info_animal_year "Animal year:"
-
-
-//d: Heading text for Gregorian (normal) date
-//d: in Lunar calendar information pop-up.
-//d: Data for this header is qtn_date_usual_with_zero
-//l: list_single_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_info_western_date "Gregorian date:"
-
-
-//d: Year of Cat.
-//d: In Vietnamese Lunar Calendar, year of rabbit of Chinese Lunar Calendar is instead a year of cat.
-//l: list_single_pane_t1_cp2
-//w:
-//r:3.2
-//
-#define qtn_chi_cale_animal_cat "Year of the Cat"
-
-
-//d: Setting item header for Thai Buddhist year display.
-//d: Values are On and Off.
-//d: If setting is on, Buddhist year is shown on
-//d: separate area in month, week and day views
-//l: list_set_graphic_pane_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_sett_thai_year "Show Buddhist year"
-
-//d: Database conflict note: entry was deleted by other application
-//l: popup_note_window
-//r: 3.2/5.0
-#define qtn_cale_note_db_conflict "Calendar database conflict. This entry has been deleted by another application."
-
-//d: Database conflict note: entry was modified by other application
-//l: popup_note_window
-//r: 3.2/5.0
-#define qtn_cale_note_db_modified "Calendar database conflict. This entry has been modified by another application."
-
-//d: Menu item for grouping views.
-//d: Values are month, week, day and todo.
-//l: list_single_pane_t1_cp2
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_view "Change view"
-
-//d: Menu item for changing to month view.
-//d: Value is month.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_month "Month"
-
-//d: Menu item for changing to week view.
-//d: Value is week.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_week "Week"
-
-//d: Menu item for changing to day view.
-//d: Value is day.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_day "Day"
-
-//d: Menu item for changing to todo view.
-//d: Value is todo.
-//l: list_single_popup_submenu_pane_t1
-//w:
-//r:4.0
-//
-#define qtn_cale_opt_change_todo "To-Do"
-
-//d: Tooltip text for previous view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_prev_view "Previous view"
-
-//d: Tooltip text for month view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_month_view "Month view"
-
-//d: Tooltip text for week view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_week_view "Week view"
-
-//d: Tooltip text for day view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_day_view "Day view"
-
-//d: Tooltip text for todo view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_todo_view "ToDo view"
-
-//d: Tooltip text for next view button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_next_view "Next view"
-
-//d: Tooltip text for new entry button.
-//l: popup_preview_text_window_t1
-//w:
-//r:3.2
-//
-#define qtn_cale_tooltip_new_entry "New entry"
-
-//d: New note query heading, which shows up when MSK is pressed, when day view or to do view is empty
-//d: Value is New Entry
-//l: heading_pane_t1
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_entry "New entry"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is meeting
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_meeting "Meeting"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is mr
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_mr "Meeting Request"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is memo
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_memo "Memo"
-
-//d: List item in new note query, which shows up when MSK is pressed when day view or to do view is empty
-//d: Value is anniv
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_anniversary "Anniversary"
-
-//d: List item in new note query, which shows up when MSK is pressed, when day view or to do view is empty
-//d: Value is todo
-//l: list_single_pane_t1_cp2
-//w:
-//r:5.0
-//
-#define qtn_cale_lq_new_todo "To-Do"
-
-//d: Edits a note
-//d: Value is Edit
-//l: list_single_pane_t1_cp2
-//r 3.2
-//
-#define qtn_cale_om_edit "Edit"
-
-//d: Calendar Go to date query prompt
-//l: popup_query_data_window_t3/opt2
-//
-#define qtn_cale_go_to_date "Go to date:"
-
-//d: Msk label displayed in Todo/Day view when there are no events for a day
-//d: Value is New
-//l: control_pane_t3/opt7
-//r: 5.0
-//
-#define qtn_cale_msk_new_entry "New"
-
-//d: Tooltip text for Next View
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_next_view "Next view"
-
-//d: Tooltip text for New Meeting
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_new_meeting "New meeting"
-
-//d: Tooltip text for New ToDo
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_new_todo "New to-do"
-
-//d:Long tap on day opens Long tap menu to create new Meeting note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_meeting "New meeting"
-
-//d:Long tap on day opens Long tap menu to create new Anniversary Note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_anniversary "New anniversary"
-
-//dLong tap on day opens Long tap menu to create new Day Note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_memo "New memo"
-
-//d: Long tap on day opens Long tap menu to create new Todo note
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.0
-//
-#define qtn_cale_long_tap_todo "New todo"
-
-//d: Format string for data shown in preview pane
-//d: %0U is start time
-//d: %1U is hyphen or space
-//d: %2U is end time
-//d: %3U is subject
-//d: %4U is location
-//d: %5U is description
-//d: %6U is language specific separator
-//d: %7U is space
-//l: list_single_fp_cale_pane_t2/opt1
-//w:
-//r: 5.0
-//
-#define qtn_cale_pane_event_data "%0U%1U%2U%7U%3U%6U%4U%6U%5U"
-
-//d: Title for the preview pane
-//d: %0U is currently focused week day
-//d: %1U is currently focused date
-//l: popup_fixed_preview_cale_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_pane_title "%0U %1U"
-
-//d: No events in preview pane
-//l: popup_fixed_preview_cale_window_t2/opt1
-//w:
-//r: 5.0
-//
-#define qtn_cale_pane_no_events "(No events)"
-
-//d: Popup Event Separator
-//l: None
-//w:
-//r: 5.0
-//
-#define qtn_cale_popup_event_separator ","
-
-//d: Options menu item for clearing a missed alarm
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_mav_opt_clear "Clear"
-
-//d: Options menu items for clearing all the missed alarms
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_mav_opt_clear_all "Clear all"
-
-//d: Go to previous view from where Missed Alarms View is launched
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_mav_opt_goto_cale "Go to Calendar"
-
-//d: Options menu item to open Calendar's Missed Alarms View
-//l: list_single_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_opt_mav "Missed alarms"
-
-//d: Title pane text for Calendar's Missed Alarms view that shows all the missed alarms
-//l: title_pane_t2/opt9
-//w:
-//r: 5.0
-#define qtn_cale_title_missed_alarms "Missed Alarms"
-
-//d: Start date and time of the missed alarm event
-//l: list_double_graphic_pane_t2
-//w:
-//r: 5.0
-#define qtn_cale_mav_start_time "%0U %1U"
-
-//d: Tooltip text for Clearing a Missed Alarm
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_tb_clear "Clear"
-
-//d: Tooltip text for Clearing all the Missed Alarms
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_tb_clearall "Clear all"
-
-//d: Tooltip text for activating the previous view from where Missed Alarms View is launched
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_tb_goto_cale "Go to Calendar"
-
-//d: Query for viewing the missed alarms view for one missed alarm
-//l: popup_note_window
-//w:
-//r: 5.0
-//
-#define qtn_cale_query_view_missed "One missed Calendar event.Do you want to view it?"
-
-//d: Query for viewing the missed alarms view for multiple missed alarms
-//l: popup_note_window
-//w:
-//r: 5.0
-//
-#define qtn_cale_query_view_missed_n "%N missed Calendar events.Do you want to view them?"
-
-//d: The subject text when the item subject is empty in Missed alarms view
-//l: list_double_large_graphic_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_mav_unnamed "(Unnamed)"
-
-//d:Command in stylus popup menu.
-//d:Marked the To-Do item done in List View and Preview popup.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_cmd_task_completed "Mark as done"
-
-//d:Command in stylus popup menu.
-//d:Unmarked the To-Do item done in List View.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_cmd_restore_task "Mark as not done"
-
-//d:Command in stylus popup menu.
-//d:Delete the selected item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_delete "Delete"
-
-//d:Command in stylus popup menu.
-//d:Send the selected item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_send "Send"
-
-//d:Command in stylus popup menu.
-//d:Mark-operation. Marks selected item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_mark "Mark"
-
-//d:Command in stylus popup menu.
-//d:Unmark-operation. Unmarks selected marked item.
-//l:list_single_touch_menu_pane_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_stylus_popup_unmark "Unmark"
-
-//d: Tooltip text for editing current calendar note
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_edit "Edit"
-
-//d: Tooltip text for deleting current calendar note
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_delete "Delete"
-
-//d: Tooltip text for sending calendar note
-//l: popup_preview_text_window_t1
-//w:
-//r: 5.0
-//
-#define qtn_cale_tb_send "Send"
-
-//d: Default tone selection choice in alarm tone list for Calendar and Clock
-//l: list_single_graphic_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_tc_no_personal_tone "Default tone"
-
-//d: "Off" tone selection choice in alarm tone list for Calendar and Clock
-//l: list_single_graphic_pane_t1_cp2
-//w:
-//r: 5.0
-#define qtn_cale_tc_none "Off"
-
-//d:Opens Maps application for choosing new location
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_om_assign_from_map "Assign from map"
-
-//d: Msk label displayed in Editors when there is no map location
-//d: Value is From map
-//l: control_pane_t3/opt7
-//r: 5.1
-//
-#define text_softkey_from_map "From map"
-
-//d:Opens Maps application for choosing new location
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_om_find_on_map "Find on map"
-
-//d:Opens Maps application fto show the location
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_om_show_on_map "Show on map"
-
-//d:Shows Update location query
-//l:heading_pane_t1
-//w:
-//r: 5.1
-#define qtn_cale_update_location "Update location:"
-
-//d:Adds selected address to existing location details
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_cale_addto_existing_location "Add to existing"
-
-//d:Replaces existing location details with selected address
-//l:list_single_pane_t1_cp2
-//w:
-//r: 5.1
-#define qtn_replace_existing_location "Replace existing"
-
-//d:Confirmation query prompt.
-//d:Replace the exisitng map location with new one
-//d: %0U is the name of the location with which existing one is being replaced
-//l:popup_note_window
-//w:
-//r: 5.1
-#define qtn_cale_confirm_change_address "Update Address to %U?"
-
-//d: Confirmation note shown, when address is replaced with new one
-//l:popup_note_window
-//w:
-//r:5.1
-#define qtn_cale_note_address_updated "Address Updated"
-
-//d: Confirmation note shown, when address with coordinates is manually changed
-//l:popup_note_window
-//w:
-//r:5.1
-#define qtn_cale_confirm_keep_coordinates "Address will be updated. Keep existing map location?"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//l:list_set_graphic_pane_t1
-//w:
-//r:3.1
-#define qtn_cale_sanim_time_out_slider_ykcur "1 minute"
-
-//d:Context-specific text for the current snooze time value in Calendar Settings.
-//d:%U in minutes, plural.
-//l:setting_slider_pane_t2
-//w:
-//r:3.1
-#define qtn_set_cale_sanim_time_out_slider_cur "%U minutes"
-// End of File
--- a/calendarui/regionalplugins/lunarVietnamese/src/calenlunarvietnameseplugin.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/lunarVietnamese/src/calenlunarvietnameseplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -73,6 +73,7 @@
{
TRACE_ENTRY_POINT;
iLabelControl = NULL;
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
TRACE_EXIT_POINT;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/regionalplugins/lunarchinese/bwins/calenlunarchinesepluginu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,10 @@
+EXPORTS
+ ?ImplementationGroupProxy@@YAPBUTImplementationProxy@@AAH@Z @ 1 NONAME ; struct TImplementationProxy const * ImplementationGroupProxy(int &)
+ ?AnimalYear@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 2 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::AnimalYear(void)
+ ?SolarTerm@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 3 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::SolarTerm(void)
+ ?GregorianDate@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 4 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::GregorianDate(void)
+ ?LunarMonthAndDay@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 5 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::LunarMonthAndDay(void)
+ ?Festival@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 6 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::Festival(void)
+ ?FullLunarDate@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 7 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::FullLunarDate(void)
+ ?LunarYear@CCalenLunarLocalizedInfo@@QAEABVTDesC16@@XZ @ 8 NONAME ; class TDesC16 const & CCalenLunarLocalizedInfo::LunarYear(void)
+
--- a/calendarui/regionalplugins/lunarchinese/data/2002EA3C.rss Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/lunarchinese/data/2002EA3C.rss Thu Jul 22 16:32:51 2010 +0100
@@ -19,7 +19,6 @@
#define CALENLUNARPLUGINREG_H
#include <ecom/registryinfov2.rh>
-#include "calendarregionalplugin.loc"
#include "calenregionalpluginuids.h"
@@ -38,7 +37,7 @@
{
implementation_uid = CALENLUNARPLUGIN_CHINESE_IMPLEMENTATION_UID;
version_no = 1;
- display_name = qtn_chi_cale_sett_lunar_cale;
+ //display_name = qtn_chi_cale_sett_lunar_cale;
// Supported languages can be inserted as follows:
// "language(1)||language(14)||language(151)
// Numbers can be Symbian language codes (TLanguage)
--- a/calendarui/regionalplugins/lunarchinese/data/CalenLunarChinesePluginData.rss Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,100 +0,0 @@
-/*
-* Copyright (c) 2009 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: This file contains all the resources for the Lunar plugin.
-*
-*/
-
-
-
-#include <eikon.rh>
-#include <avkon.hrh>
-#include <avkon.rh>
-#include <avkon.rsg>
-
-#include "calendarregionalplugin.loc"
-
-NAME CLU2
-
-RESOURCE RSS_SIGNATURE { }
-
-
-//----------------------------------------------------
-//----------------------------------------------------
-//
-RESOURCE DIALOG r_calen_lunar_details_dialog
- {
- flags = EGeneralQueryFlags;
- buttons = R_AVKON_SOFTKEYS_OK_EMPTY;
- items =
- {
- DLG_LINE
- {
- type = EAknCtPopupHeadingPane;
- id = EAknMessageQueryHeaderId;
- control = AVKON_HEADING
- {
- label = qtn_chi_cale_lunar_calendar;
- headinglayout = R_AVKON_LIST_HEADING_PANE;
- };
- },
- DLG_LINE
- {
- type = EAknCtMessageQuery;
- id = EAknMessageQueryContentId;
- control = AVKON_MESSAGE_QUERY
- {
- };
- }
- };
- }
-
-
-//----------------------------------------------------
-// Menu item text "Show lunar details"
-//----------------------------------------------------
-//
-RESOURCE TBUF r_calendar_show_lunar_data
- {
- buf = qtn_chi_cale_lunar_data;
- }
-
-
-//----------------------------------------------------
-// Details dialog item headers
-//----------------------------------------------------
-//
-RESOURCE TBUF r_calendar_lunar_info_festival
- {
- buf = qtn_cale_lunar_info_festival;
- }
-
-RESOURCE TBUF r_calendar_lunar_info_solar
- {
- buf = qtn_cale_lunar_info_solar;
- }
-
-RESOURCE TBUF r_calendar_lunar_info_date
- {
- buf = qtn_cale_info_lunar_date;
- }
-
-RESOURCE TBUF r_calendar_lunar_info_animal_year
- {
- buf = qtn_cale_info_animal_year;
- }
-
-RESOURCE TBUF r_calendar_lunar_info_western_date
- {
- buf = qtn_cale_info_western_date;
- }
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/regionalplugins/lunarchinese/eabi/calenlunarchinesepluginu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+
--- a/calendarui/regionalplugins/lunarchinese/inc/CalenLunarChinesePlugin.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/lunarchinese/inc/CalenLunarChinesePlugin.h Thu Jul 22 16:32:51 2010 +0100
@@ -34,7 +34,7 @@
//FORWARD DECLARE
class QString;
-
+class HbTranslator;
class HbWidget;
class HbMenu;
@@ -78,7 +78,7 @@
private:
void FormatExtraRowStringL();
void UpdateLocalizerInfoL();
- void ExecuteMessageDialogL( TDesC& aMsgText );
+ void ExecuteMessageDialogL( QString aMsgText );
public:
void ShowDetailsL();
@@ -112,7 +112,7 @@
HBufC* iInfoBarText;
TInt iStart;
TInt iEnd;
- TInt iResourceFileOffset;
+ HbTranslator* iTranslator;
};
#endif //__CALENLUNARCHINESEPLUGIN_H__
--- a/calendarui/regionalplugins/lunarchinese/lunarchinese.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/lunarchinese/lunarchinese.pro Thu Jul 22 16:32:51 2010 +0100
@@ -50,13 +50,11 @@
-laknicon \
-legul \
-lflogger \
- -lavkon \
-lcalenregionalutil
symbian: {
-INCLUDEPATH += /epoc32/include/ecom \
- ../loc
+INCLUDEPATH += /epoc32/include/ecom
TARGET.UID2 = 0x10009D8D #SYMBIAN_ECOM_PLUGIN_UID
TARGET.UID3 = 0x2002EA3C #CALENLUNARCHINESEPLUGIN_DLL_UID
@@ -82,12 +80,6 @@
"LANGUAGE_IDS" \
"END" \
\
-"START RESOURCE calenlunarchineseplugindata.rss" \
-"HEADER" \
-"TARGETPATH RESOURCE_FILES_DIR" \
-"LANGUAGE_IDS" \
-"END" \
-\
"TARGETTYPE plugin"
@@ -96,6 +88,7 @@
MMP_RULES -= "OPTION_REPLACE ARMCC --export_all_vtbl -D__QT_NOEFFECTMACRO_DONOTUSE"
}
-
+# TODO: uncomment below line once ts file is released to platform
+#TRANSLATIONS += calenregional.ts
# End of file --Don't remove this.
\ No newline at end of file
--- a/calendarui/regionalplugins/lunarchinese/src/CalenLunarChinesePlugin.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/lunarchinese/src/CalenLunarChinesePlugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -16,18 +16,18 @@
*/
-#include <eikenv.h>
-#include <StringLoader.h>
-#include <data_caging_path_literals.hrh>
-#include <bautils.h>
-#include <CalenLunarChinesePluginData.rsg>
-
#include <QString>
+#include <QStringList>
#include <HbAction>
#include <HbView>
#include <HbMenu>
#include <HbMessageBox>
#include <HbLabel>
+#include <HbTranslator>
+
+#include <eikenv.h>
+#include <data_caging_path_literals.hrh>
+#include <bautils.h>
#include "calendarui_debug.h"
#include "CalenLunarChinesePlugin.h"
@@ -39,10 +39,8 @@
#include "hb_calencommands.hrh"
//CONSTANTS
-_LIT( KFieldSeparator, "\n" );
-_LIT( KHeaderSeparator, "\n ");
-_LIT( KResourceChinesePluginFile, "calenlunarchineseplugindata.rsc" );
-#define KResourcePath KDC_RESOURCE_FILES_DIR
+static const QString fieldSeparator("\n");
+static const QString headerSeparator("\n ");
const TInt KFieldCount = 5;
@@ -57,8 +55,7 @@
:iLocalizer(NULL),
iLocInfo(NULL),
iServices(aServices),
- iInfoBarText(NULL),
- iResourceFileOffset( NULL )
+ iInfoBarText(NULL)
{
TRACE_ENTRY_POINT;
@@ -104,13 +101,17 @@
}
delete iInfoProvider;
+ iInfoProvider = NULL;
delete iLocalizer;
+ iLocalizer = NULL;
delete iLocInfo;
+ iLocInfo = NULL;
- if( iResourceFileOffset )
- {
- CCoeEnv::Static()->DeleteResourceFile( iResourceFileOffset );
- }
+ // Remove the translator for plugin
+ if (iTranslator) {
+ delete iTranslator;
+ iTranslator = 0;
+ }
TRACE_EXIT_POINT;
}
@@ -121,29 +122,18 @@
void CCalenLunarChinesePlugin::ConstructL()
{
TRACE_ENTRY_POINT;
-
- TFileName dllName;
- // Get the complate path of the DLL from where it is currently loaded
- Dll::FileName( dllName );
-
- TFileName resourceFilename;
- resourceFilename.Append(dllName.Mid(0,2));
- resourceFilename.Append(KResourcePath);
- resourceFilename.Append(KResourceChinesePluginFile);
- BaflUtils::NearestLanguageFile( CEikonEnv::Static()->FsSession(),
- resourceFilename );
- // Add the resource file.
- iResourceFileOffset = CEikonEnv::Static()->AddResourceFileL(
- resourceFilename );
-
iServices->RegisterForNotificationsL( this, ECalenNotifyContextChanged );
iServices->GetCommandRange( iStart, iEnd );
+ // Install the translator before the CCalenLunarLocalizer is constructed
+ iTranslator = new HbTranslator("calenregional");
+
iLocalizer = CCalenLunarLocalizer::NewL();
iInfoProvider = CCalenLunarInfoProvider::NewL(
CEikonEnv::Static()->FsSession() );
+
TRACE_EXIT_POINT;
}
@@ -274,7 +264,7 @@
void CCalenLunarChinesePlugin::UpdateLocalizerInfoL()
{
TRACE_ENTRY_POINT;
- QDateTime focusDateTime= iServices->Context().focusDateAndTimeL();
+ QDateTime focusDateTime= iServices->Context().focusDateAndTime();
TDateTime tempDateTime(
focusDateTime.date().year(),
static_cast<TMonth>(focusDateTime.date().month() - 1),
@@ -312,69 +302,52 @@
// -----------------------------------------------------------------------------
//
void CCalenLunarChinesePlugin::ShowDetailsL( )
- {
- TRACE_ENTRY_POINT;
- HBufC* msgText = HBufC::NewLC( 1000 );
- if ( iLocInfo )
- {
- TInt headerIds[KFieldCount] = {
- R_CALENDAR_LUNAR_INFO_FESTIVAL,
- R_CALENDAR_LUNAR_INFO_SOLAR,
- R_CALENDAR_LUNAR_INFO_DATE,
- R_CALENDAR_LUNAR_INFO_ANIMAL_YEAR,
- R_CALENDAR_LUNAR_INFO_WESTERN_DATE
- };
-
- RPointerArray<HBufC> headersArray;
-
- for ( TInt i=0; i < KFieldCount; i++)
- {
- headersArray.Append( StringLoader::LoadL( headerIds[i] ) );
- }
-
- CPtrCArray* fieldsArray = new (ELeave) CPtrCArray(5);
- CleanupStack::PushL( fieldsArray );
- fieldsArray->AppendL( iLocInfo->Festival() );
- fieldsArray->AppendL( iLocInfo->SolarTerm() );
- fieldsArray->AppendL( iLocInfo->FullLunarDate() );
- fieldsArray->AppendL( iLocInfo->AnimalYear() );
- fieldsArray->AppendL( iLocInfo->GregorianDate() );
-
- for (TInt i=0; i < KFieldCount; i++)
- {
- TPtrC fieldPtrC = fieldsArray->At(i);
- if ( fieldPtrC != KNullDesC )
- {
- msgText->Des().Append( *(headersArray[i]) );
- msgText->Des().Append( KHeaderSeparator );
- msgText->Des().Append( fieldPtrC );
- if ( i < KFieldCount - 1 ) // not last
- {
- msgText->Des().Append( KFieldSeparator );
- }
- }
- }
- CleanupStack::PopAndDestroy( fieldsArray );
- headersArray.ResetAndDestroy();
- }
-
-
- ExecuteMessageDialogL(*msgText);
-
- CleanupStack::PopAndDestroy( msgText );
-
- TRACE_EXIT_POINT;
- }
+{
+ QString msgText;
+ if(iLocInfo) {
+ QStringList headerIds;
+ headerIds.append(hbTrId("txt_calendar_info_festival"));
+ headerIds.append(hbTrId("txt_calendar_solar_term"));
+ headerIds.append(hbTrId("txt_calendar_lunar_date"));
+ headerIds.append(hbTrId("txt_calendar_animal_year"));
+ headerIds.append(hbTrId("txt_calendar_gregorian_date"));
+
+ QStringList fieldInfo;
+ QString data;
+
+ data = QString::fromUtf16(iLocInfo->Festival().Ptr(),iLocInfo->Festival().Length());
+ fieldInfo.append(data);
+ data = QString::fromUtf16(iLocInfo->SolarTerm().Ptr(),iLocInfo->SolarTerm().Length());
+ fieldInfo.append(data);
+ data = QString::fromUtf16(iLocInfo->FullLunarDate().Ptr(),iLocInfo->FullLunarDate().Length());
+ fieldInfo.append(data);
+ data = QString::fromUtf16(iLocInfo->AnimalYear().Ptr(),iLocInfo->AnimalYear().Length());
+ fieldInfo.append(data);
+ data = QString::fromUtf16(iLocInfo->GregorianDate().Ptr(),iLocInfo->GregorianDate().Length());
+ fieldInfo.append(data);
+ // Append the data in the proper order
+ for (TInt i=0; i < KFieldCount; i++) {
+ if(!fieldInfo.at(i).isEmpty()) {
+ msgText.append(headerIds[i]);
+ msgText.append(headerSeparator);
+ msgText.append(fieldInfo[i]);
+ if ( i < KFieldCount - 1 ) {
+ // not last item
+ msgText.append(fieldSeparator);
+ }
+ }
+ }
+ }
+ ExecuteMessageDialogL(msgText);
+}
// -----------------------------------------------------------------------------
-// CCalenLunarChinesePlugin::ShowMessageDialogL
+// CCalenLunarChinesePlugin::ExecuteMessageDialogL
// -----------------------------------------------------------------------------
-//
-void CCalenLunarChinesePlugin::ExecuteMessageDialogL(TDesC& aMsgText)
+//
+void CCalenLunarChinesePlugin::ExecuteMessageDialogL(QString aMsgText)
{
TRACE_ENTRY_POINT;
- QString text = QString::fromUtf16(aMsgText.Ptr(),aMsgText.Length());
-
// Instantiate a popup
HbMessageBox *popup = new HbMessageBox();
popup->setDismissPolicy(HbDialog::NoDismiss);
@@ -382,8 +355,8 @@
popup->setIconVisible(false);
popup->setAttribute( Qt::WA_DeleteOnClose, true );
- popup->setHeadingWidget(new HbLabel("Lunar Calendar"));
- popup->setText(text);
+ popup->setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_lunar_calendar")));
+ popup->setText(aMsgText);
// Remove the default actions
QList<QAction*> list = popup->actions();
@@ -392,13 +365,12 @@
popup->removeAction(list[i]);
}
// Sets the primary action
- popup->addAction(new HbAction(hbTrId("txt_calendar_button_cancel"), popup));
+ popup->addAction(new HbAction(hbTrId("txt_calendar_button_close"), popup));
// Launch popup
popup->open();
TRACE_EXIT_POINT;
}
-
//EOF
--- a/calendarui/regionalplugins/regionalplugins.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/regionalplugins/regionalplugins.pro Thu Jul 22 16:32:51 2010 +0100
@@ -14,8 +14,6 @@
# Description: Project definition file for calendar regional plugins
#
-BLD_INF_RULES.prj_mmpfiles += "./calenregionalutil/group/calenregionalutil.mmp"
-
BLD_INF_RULES.prj_exports += \
"./calenregionalutil/inc/calenextrarowformatter.h |./inc/calenextrarowformatter.h" \
"./calenregionalutil/inc/calenlunarinfo.h |./inc/calenlunarinfo.h" \
@@ -31,5 +29,6 @@
"./lunarchinese/data/SolarItems /epoc32/release/winscw/urel/z/private/10005901/solaritems"
TEMPLATE = subdirs
-SUBDIRS += lunarchinese
+SUBDIRS += calenregionalutil \
+ lunarchinese
CONFIG += ordered
--- a/calendarui/rom/Calendar.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/rom/Calendar.iby Thu Jul 22 16:32:51 2010 +0100
@@ -30,12 +30,11 @@
// Application registration file.
-data=DATAZ_\private\10003a3f\import\apps\CALENDAR_REG.RSC \private\10003a3f\import\apps\CALENDAR_REG.RSC
-data=\epoc32\data\z\pluginstub\calengriditemstyleplugin.qtplugin \private\10005901\calengriditemstyleplugin.qtplugin
+data=DATAZ_\private\10003a3f\import\apps\calendar_reg.rsc \private\10003a3f\import\apps\calendar_reg.rsc
data=\epoc32\data\z\resource\qt\plugins\calendar\agendaeventviewerplugin.qtplugin resource\qt\plugins\calendar\agendaeventviewerplugin.qtplugin
// Stub sis
-// data=DATAZ_\system\install\calendar_stub.sis \System\Install\calendar_stub.sis
+data=DATAZ_\system\install\calendar_stub.sis \System\Install\calendar_stub.sis
file=ABI_DIR\BUILD_DIR\calencommonutils.dll SHARED_LIB_DIR\calencommonutils.dll
file=ABI_DIR\BUILD_DIR\calenglobaldata.dll SHARED_LIB_DIR\calenglobaldata.dll
@@ -43,7 +42,6 @@
file=ABI_DIR\BUILD_DIR\caleneditor.dll SHARED_LIB_DIR\caleneditor.dll
file=ABI_DIR\BUILD_DIR\calenviews.dll SHARED_LIB_DIR\calenviews.dll
file=ABI_DIR\BUILD_DIR\calensettings.dll SHARED_LIB_DIR\calensettings.dll
-file=ABI_DIR\BUILD_DIR\calengriditemstyleplugin.dll SHARED_LIB_DIR\calengriditemstyleplugin.dll
file=ABI_DIR\BUILD_DIR\calencontroller.dll SHARED_LIB_DIR\calencontroller.dll
file=ABI_DIR\BUILD_DIR\agendaeventviewer.dll SHARED_LIB_DIR\agendaeventviewer.dll
file=ABI_DIR\BUILD_DIR\calenlauncher.dll SHARED_LIB_DIR\calenlauncher.dll
--- a/calendarui/rom/CalendarResources.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/rom/CalendarResources.iby Thu Jul 22 16:32:51 2010 +0100
@@ -11,7 +11,8 @@
*
* Contributors:
*
-* Description: IBY file for localizable elements of Calendar.app
+* Description:
+* The iby file for calendar resources
*
*/
@@ -22,8 +23,8 @@
#include <data_caging_paths_for_iby.hrh>
// Application resource file.
-data=DATAZ_\resource\apps\CALENDAR.RSC APP_RESOURCE_DIR\CALENDAR.RSC
-data=DATAZ_\QT_TRANSLATIONS_DIR\calendar.qm QT_TRANSLATIONS_DIR\calendar.qm
+S60_APP_RESOURCE(calendar)
+data=DATAZ_/QT_TRANSLATIONS_DIR/calendar.qm QT_TRANSLATIONS_DIR/calendar.qm
#endif // CALENDARRESOURCE_IBY
--- a/calendarui/rom/calenlunarchinese_variant.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/rom/calenlunarchinese_variant.iby Thu Jul 22 16:32:51 2010 +0100
@@ -22,13 +22,6 @@
#ifdef RD_CALENDAR_PLUGIN_FW
ECOM_PLUGIN( calenlunarchineseplugin.dll , calenlunarchineseplugin.rsc )
-
-data=DATAZ_\RESOURCE_FILES_DIR\calenlunarchineseplugindata.rsc RESOURCE_FILES_DIR\calenlunarchineseplugindata.rsc
-
-//TODO: once we have USER_RESOURCE_FILES_LOCALIZED defined
-//#define USER_RESOURCE_FILES_LOCALIZED calenlunarchineseplugindata
-//#include <Variant/localized_resources.iby>
-
#endif
#endif // __SERIES60_LUNAR_CALENDAR
--- a/calendarui/rom/calenregionalutil.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/rom/calenregionalutil.iby Thu Jul 22 16:32:51 2010 +0100
@@ -19,7 +19,6 @@
#define CALENREGIONALUTIL_IBY
file=ABI_DIR\BUILD_DIR\calenregionalutil.dll SHARED_LIB_DIR\calenregionalutil.dll
-data=DATAZ_\RESOURCE_FILES_DIR\calenregionalutil.rsc RESOURCE_FILES_DIR\calenregionalutil.rsc
data=DATAZ_\private\10005901\SolarItems private\10005901\SolarItems
#endif // CALENREGIONALUTIL_IBY
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/rom/calenviewerservice.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 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: IBY file for non-localizable elements of calenviewerservice.exe
+*
+*/
+
+
+
+#ifndef CALEN_VIEWER_SERVICE_IBY
+#define CALEN_VIEWER_SERVICE_IBY
+
+
+S60_APP_EXE(calenviewerservice)
+S60_APP_RESOURCE(calenviewerservice)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\calenviewerservice_reg.rsc \private\10003a3f\import\apps\calenviewerservice_reg.rsc
+
+
+#endif // CALEN_VIEWER_SERVICE_IBY
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/settings/bwins/calensettingsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,26 @@
+EXPORTS
+ ?tr@CalenSettings@@SA?AVQString@@PBD0@Z @ 1 NONAME ; class QString CalenSettings::tr(char const *, char const *)
+ ?removeRegionalInfoItem@CalenSettings@@AAEXXZ @ 2 NONAME ; void CalenSettings::removeRegionalInfoItem(void)
+ ?createModel@CalenSettings@@QAEXXZ @ 3 NONAME ; void CalenSettings::createModel(void)
+ ?trUtf8@CalenSettings@@SA?AVQString@@PBD0H@Z @ 4 NONAME ; class QString CalenSettings::trUtf8(char const *, char const *, int)
+ ?isPluginEnabled@CalenSettings@@QAE_NXZ @ 5 NONAME ; bool CalenSettings::isPluginEnabled(void)
+ ?getStaticMetaObject@CalenSettings@@SAABUQMetaObject@@XZ @ 6 NONAME ; struct QMetaObject const & CalenSettings::getStaticMetaObject(void)
+ ?populateRegionalInfo@CalenSettings@@AAEXXZ @ 7 NONAME ; void CalenSettings::populateRegionalInfo(void)
+ ?qt_metacall@CalenSettings@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 8 NONAME ; int CalenSettings::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?handleRegionalInfoChange@CalenSettings@@QAEXXZ @ 9 NONAME ; void CalenSettings::handleRegionalInfoChange(void)
+ ?qt_metacast@CalenSettings@@UAEPAXPBD@Z @ 10 NONAME ; void * CalenSettings::qt_metacast(char const *)
+ ?staticMetaObject@CalenSettings@@2UQMetaObject@@B @ 11 NONAME ; struct QMetaObject const CalenSettings::staticMetaObject
+ ?tr@CalenSettings@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString CalenSettings::tr(char const *, char const *, int)
+ ??0CalenSettings@@QAE@AAVMCalenServices@@PAVHbDataForm@@PAVQObject@@@Z @ 13 NONAME ; CalenSettings::CalenSettings(class MCalenServices &, class HbDataForm *, class QObject *)
+ ?trUtf8@CalenSettings@@SA?AVQString@@PBD0@Z @ 14 NONAME ; class QString CalenSettings::trUtf8(char const *, char const *)
+ ?setStartDayOfWeek@CalenSettings@@QAEXH@Z @ 15 NONAME ; void CalenSettings::setStartDayOfWeek(int)
+ ?handleAlarmSnoozeTimeChange@CalenSettings@@QAEXH@Z @ 16 NONAME ; void CalenSettings::handleAlarmSnoozeTimeChange(int)
+ ?addRegionalInfoItem@CalenSettings@@AAEXXZ @ 17 NONAME ; void CalenSettings::addRegionalInfoItem(void)
+ ?metaObject@CalenSettings@@UBEPBUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const * CalenSettings::metaObject(void) const
+ ?updateShowWeekItem@CalenSettings@@AAEXXZ @ 19 NONAME ; void CalenSettings::updateShowWeekItem(void)
+ ??1CalenSettings@@UAE@XZ @ 20 NONAME ; CalenSettings::~CalenSettings(void)
+ ??_ECalenSettings@@UAE@I@Z @ 21 NONAME ; CalenSettings::~CalenSettings(unsigned int)
+ ?handleWeekNumberChange@CalenSettings@@QAEXXZ @ 22 NONAME ; void CalenSettings::handleWeekNumberChange(void)
+ ?addWeekNumberItem@CalenSettings@@QAEXXZ @ 23 NONAME ; void CalenSettings::addWeekNumberItem(void)
+ ?populateSettingList@CalenSettings@@QAEXXZ @ 24 NONAME ; void CalenSettings::populateSettingList(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/settings/eabi/calensettingsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,26 @@
+EXPORTS
+ _ZN13CalenSettings11createModelEv @ 1 NONAME
+ _ZN13CalenSettings11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN13CalenSettings11qt_metacastEPKc @ 3 NONAME
+ _ZN13CalenSettings15isPluginEnabledEv @ 4 NONAME
+ _ZN13CalenSettings16staticMetaObjectE @ 5 NONAME DATA 16
+ _ZN13CalenSettings17addWeekNumberItemEv @ 6 NONAME
+ _ZN13CalenSettings17setStartDayOfWeekEi @ 7 NONAME
+ _ZN13CalenSettings18updateShowWeekItemEv @ 8 NONAME
+ _ZN13CalenSettings19addRegionalInfoItemEv @ 9 NONAME
+ _ZN13CalenSettings19getStaticMetaObjectEv @ 10 NONAME
+ _ZN13CalenSettings19populateSettingListEv @ 11 NONAME
+ _ZN13CalenSettings20populateRegionalInfoEv @ 12 NONAME
+ _ZN13CalenSettings22handleWeekNumberChangeEv @ 13 NONAME
+ _ZN13CalenSettings22removeRegionalInfoItemEv @ 14 NONAME
+ _ZN13CalenSettings24handleRegionalInfoChangeEv @ 15 NONAME
+ _ZN13CalenSettings27handleAlarmSnoozeTimeChangeEi @ 16 NONAME
+ _ZN13CalenSettingsC1ER14MCalenServicesP10HbDataFormP7QObject @ 17 NONAME
+ _ZN13CalenSettingsC2ER14MCalenServicesP10HbDataFormP7QObject @ 18 NONAME
+ _ZN13CalenSettingsD0Ev @ 19 NONAME
+ _ZN13CalenSettingsD1Ev @ 20 NONAME
+ _ZN13CalenSettingsD2Ev @ 21 NONAME
+ _ZNK13CalenSettings10metaObjectEv @ 22 NONAME
+ _ZTI13CalenSettings @ 23 NONAME
+ _ZTV13CalenSettings @ 24 NONAME
+
--- a/calendarui/settings/inc/calensettings.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/settings/inc/calensettings.h Thu Jul 22 16:32:51 2010 +0100
@@ -19,6 +19,7 @@
#define CALENSETTINGS_H
#include <QObject>
+#include <QHash>
class QPersistentModelIndex;
class QModelIndex;
@@ -31,6 +32,8 @@
class HbLineEdit;
class XQSettingsManager;
class XQSettingsKey;
+class MCalenServices;
+
#ifdef CALENSETTINGS_DLL
#define CALENSETTINGS_EXPORT Q_DECL_EXPORT
@@ -43,31 +46,44 @@
Q_OBJECT
public:
- CalenSettings(HbDataForm *form, QObject *parent = 0);
+ CalenSettings(MCalenServices& services, HbDataForm *form, QObject *parent = 0);
~CalenSettings();
void createModel();
void populateSettingList();
+ void addWeekNumberItem();
+ bool isPluginEnabled();
+
+private:
+ void updateShowWeekItem();
+ void addRegionalInfoItem();
+ void removeRegionalInfoItem();
+ void populateRegionalInfo();
public slots:
void handleAlarmSnoozeTimeChange(int index);
void handleWeekNumberChange();
void handleRegionalInfoChange();
+ //set the start day of the week to the locale
+ void setStartDayOfWeek(const int index);
private:
+ MCalenServices &mServices;
HbDataForm *mSettingsForm;
HbDataFormModel *mSettingsModel;
HbDataFormModelItem *mAlarmSnoozeTimeItem;
HbDataFormModelItem* mShowWeekNumberItem;
HbDataFormModelItem* mShowRegionalInfoItem;
-
+ HbDataFormModelItem* mShowWeekStartOnInfoItem;
+ HbComboBox* mStartOfWeekItem;
+ QHash<int, int> mAlarmSnoozeTimeHash;
XQSettingsManager *mSettingsManager;
XQSettingsKey *mAlarmSnoozeCenrepKey;
XQSettingsKey *mWeekNumberCenrepKey;
XQSettingsKey *mShowRegionalInfoKey;
- uint mAlarmSnoozeTime;
- uint mShowWeekNumber;
- uint mShowRegionalInfo;
+ int mStartOfWeek;
+ bool mWeekNumberItemAdded;
+ bool mRegionalpluginActive;
};
#endif // CALENSETTINGS_H
--- a/calendarui/settings/settings.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/settings/settings.pro Thu Jul 22 16:32:51 2010 +0100
@@ -19,9 +19,10 @@
CONFIG += hb
DEPENDPATH += . \
../../inc
+
INCLUDEPATH += . \
../../inc \
- ../cenrep
+ ../inc
DEFINES += CALENSETTINGS_DLL
--- a/calendarui/settings/src/calensettings.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/settings/src/calensettings.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -23,42 +23,67 @@
#include <hbabstractbutton.h>
#include <xqsettingsmanager.h>
#include <xqsettingskey.h>
+#include <HbExtendedLocale.h>
#include "calensettings.h"
-#include <calendarinternalcrkeys.h> // includes CalendarInternalCRKeys.h
+#include "calenservices.h"
+#include "calendarprivatecrkeys.h"
-CalenSettings::CalenSettings(HbDataForm *form, QObject *parent)
+// Constants
+const int KValueZero( 0 );
+const int KValueOne( 1 );
+
+
+CalenSettings::CalenSettings(MCalenServices& services, HbDataForm *form, QObject *parent)
:QObject(parent),
+ mServices(services),
mSettingsForm(form),
- mSettingsModel(0),
- mShowRegionalInfoItem(NULL)
+ mSettingsModel(NULL),
+ mAlarmSnoozeTimeItem(NULL),
+ mShowWeekNumberItem(NULL),
+ mShowRegionalInfoItem(NULL),
+ mShowWeekStartOnInfoItem(NULL),
+ mStartOfWeekItem(NULL),
+ mWeekNumberItemAdded(false),
+ mRegionalpluginActive(false)
{
- mSettingsManager = new XQSettingsManager(this);
+ mSettingsManager = new XQSettingsManager(this);
mAlarmSnoozeCenrepKey = new XQSettingsKey(
- XQSettingsKey::TargetCentralRepository,
- KCRUidCalendar, KCalendarSnoozeTime);
+ XQSettingsKey::TargetCentralRepository,
+ KCRUidCalendar, KCalendarSnoozeTime);
mWeekNumberCenrepKey = new XQSettingsKey(
- XQSettingsKey::TargetCentralRepository,
- KCRUidCalendar, KCalendarWeekViewTitle);
- mShowRegionalInfoKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
- KCRUidCalendar, KShowRegionalInformation);
-
- // Read the initial values from the cenrep
- QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
- mAlarmSnoozeTime = value.toUInt();
-
- value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
- mShowWeekNumber = value.toUInt();
-
- value = mSettingsManager->readItemValue(*mShowRegionalInfoKey);
- mShowRegionalInfo = value.toUInt();
+ XQSettingsKey::TargetCentralRepository,
+ KCRUidCalendar, KCalendarShowWeekNum);
+ mShowRegionalInfoKey = new XQSettingsKey(
+ XQSettingsKey::TargetCentralRepository,
+ KCRUidCalendar, KCalendarShowRegionalInfo);
}
+/*!
+ Destructor
+ */
CalenSettings::~CalenSettings()
{
- // Nothing yet.
+ if (mSettingsManager) {
+ delete mSettingsManager;
+ }
+ // Delete the cenrep keys
+ delete mAlarmSnoozeCenrepKey;
+ delete mWeekNumberCenrepKey;
+ delete mShowRegionalInfoKey;
+
+ if (mSettingsModel) {
+ delete mSettingsModel;
+ }
+ if (mAlarmSnoozeTimeHash.count()) {
+ // Clear the contents
+ mAlarmSnoozeTimeHash.clear();
+ }
}
+/*!
+ Creates the settings model
+ */
void CalenSettings::createModel()
{
// Remove the model.
@@ -69,193 +94,289 @@
}
// Create a model and set it.
- mSettingsModel = new HbDataFormModel();
+ mSettingsModel = new HbDataFormModel(mSettingsForm);
// Create the alarm snooze choices
QStringList alarmSnoozeChoices;
alarmSnoozeChoices << hbTrId(
- "txt_calendar_setlabel_alarm_snooze_time_val_5_minu")
- << hbTrId("txt_calendar_setlabel_alarm_snooze_time_val_10_min")
- << hbTrId("txt_calendar_setlabel_alarm_snooze_time_val_15_min")
- << hbTrId("txt_calendar_setlabel_alarm_snooze_time_val_30_min");
+ "txt_calendar_setlabel_reminder_snooze_time_val_5_m")
+ << hbTrId("txt_calendar_setlabel_reminder_snooze_time_val_10")
+ << hbTrId("txt_calendar_setlabel_reminder_snooze_time_val_15")
+ << hbTrId("txt_calendar_setlabel_reminder_snooze_time_val_30");
+ // Build the hash map for the alarm snooze time.
+ // The values are five, ten, fifteen and thirty minutes
+ mAlarmSnoozeTimeHash[0] = 5;
+ mAlarmSnoozeTimeHash[1] = 10;
+ mAlarmSnoozeTimeHash[2] = 15;
+ mAlarmSnoozeTimeHash[3] = 30;
// Append Alarm Snooze Time Setting item
mAlarmSnoozeTimeItem = new HbDataFormModelItem();
mAlarmSnoozeTimeItem->setType(HbDataFormModelItem::ComboBoxItem);
mAlarmSnoozeTimeItem->setData(HbDataFormModelItem::LabelRole,
- QString(hbTrId("txt_calendar_setlabel_alarm_snooze_time")));
+ QString(hbTrId("txt_calendar_setlabel_reminder_snooze_time")));
mAlarmSnoozeTimeItem->setContentWidgetData(QString("items"),
- alarmSnoozeChoices);
+ alarmSnoozeChoices);
mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"), 0);
mSettingsForm->addConnection(mAlarmSnoozeTimeItem,
SIGNAL(currentIndexChanged(int)),
this, SLOT(handleAlarmSnoozeTimeChange(int)));
mSettingsModel->appendDataFormItem(mAlarmSnoozeTimeItem);
- // Append Show Week Number settings item
- mShowWeekNumberItem = new HbDataFormModelItem();
- mShowWeekNumberItem->setType(HbDataFormModelItem::ToggleValueItem);
- QStringList values;
- values << hbTrId("txt_calendar_button_no")
- << hbTrId("txt_calendar_button_yes");
- mShowWeekNumberItem->setData(HbDataFormModelItem::LabelRole,
- QString(hbTrId("txt_calendar_setlabel_show_week_numbers")));
-
+ // Create the weekday list based on start of week.
+ QStringList weekdaysList;
+ weekdaysList
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_monday")
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_tuesday")
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_wednesday")
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_thursday")
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_friday")
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_saturday")
+ << hbTrId("txt_calendar_setlabel_week_starts_on_val_sunday");
+ // Start of week item.
+ mShowWeekStartOnInfoItem = mSettingsModel->appendDataFormItem(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_calendar_setlabel_week_starts_on"));
- // For HbPushButton type properties -- to be used for toggle value item
- mShowWeekNumberItem->setContentWidgetData(QString("text"),
- QString(hbTrId("txt_calendar_button_no")));
- mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
- QString(hbTrId("txt_calendar_button_yes")));
-
- mSettingsForm->addConnection(mShowWeekNumberItem, SIGNAL(clicked()),
- this, SLOT(handleWeekNumberChange()));
- mSettingsModel->appendDataFormItem(mShowWeekNumberItem);
-
- // TODO: Append the regional information setting only if any regional plugins have been
- // loaded by the customisation manager
+ // Get start of week from the locale.
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ mStartOfWeek = locale.startOfWeek();
+ mShowWeekStartOnInfoItem->setContentWidgetData("items", weekdaysList);
+ mShowWeekStartOnInfoItem->setContentWidgetData("currentIndex", mStartOfWeek);
+ mSettingsForm->addConnection(mShowWeekStartOnInfoItem,
+ SIGNAL(currentIndexChanged(int)),
+ this, SLOT(setStartDayOfWeek(int)));
+ // Add the show week number item in the model
+ addWeekNumberItem();
+
+ if (isPluginEnabled()) {
+ addRegionalInfoItem();
+ }
+}
+
+/*!
+ Adds the regional info item to the model
+ */
+void CalenSettings::addRegionalInfoItem()
+{
+ mRegionalpluginActive = true;
mShowRegionalInfoItem = new HbDataFormModelItem();
mShowRegionalInfoItem->setType(HbDataFormModelItem::ToggleValueItem);
mShowRegionalInfoItem->setData(HbDataFormModelItem::LabelRole,
- QString("Show regional info"));
+ QString(hbTrId("txt_calendar_setlabel_show_lunar_calendar")));
// For HbPushButton type properties -- to be used for toggle value item
mShowRegionalInfoItem->setContentWidgetData(QString("text"),
- QString(hbTrId("txt_calendar_button_no")));
+ QString(hbTrId("txt_calendar_button_no")));
mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"),
- QString(hbTrId("txt_calendar_button_yes")));
+ QString(hbTrId("txt_calendar_button_yes")));
mSettingsForm->addConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
- this, SLOT(handleRegionalInfoChange()));
+ this, SLOT(handleRegionalInfoChange()));
mSettingsModel->appendDataFormItem(mShowRegionalInfoItem);
}
+/*!
+ Removes the regional info item from the model
+ */
+void CalenSettings::removeRegionalInfoItem()
+{
+ mSettingsForm->removeConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
+ this, SLOT(handleRegionalInfoChange()));
+ mSettingsModel->removeItem(mShowRegionalInfoItem);
+ mRegionalpluginActive = false;
+}
+
+/*!
+ Handles the alarm snooze time change
+ */
void CalenSettings::handleAlarmSnoozeTimeChange(int index)
{
-switch(index)
- {
- case 0:
- {
- mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 5);
- }
- break;
- case 1:
- {
- mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 10);
- }
- break;
- case 2:
- {
- mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 15);
- }
- break;
- case 3:
- {
- mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 30);
- }
- break;
- default:
- break;
- }
-QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
- uint time = value.toUInt();
+ if(mAlarmSnoozeTimeHash.value(index) > KValueZero) {
+ mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, mAlarmSnoozeTimeHash[index]);
+ }
}
+/*!
+ Handles the week number change
+ */
void CalenSettings::handleWeekNumberChange()
{
QVariant data = mShowWeekNumberItem->contentWidgetData(QString("text"));
QString value = data.toString();
- if(!value.compare(hbTrId("txt_calendar_button_no")))
- {
+ if (!value.compare(hbTrId("txt_calendar_button_no"))) {
// User has made it OFF.
- mShowWeekNumber = 0;
- mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, 0);
+ mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, KValueZero);
+ } else if (!value.compare(hbTrId("txt_calendar_button_yes"))) {
+ // User has made it ON.
+ mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, KValueOne);
}
- else if(!value.compare(hbTrId("txt_calendar_button_yes")))
- {
+}
+
+/*!
+ Handles the regional info option change
+ */
+void CalenSettings::handleRegionalInfoChange()
+{
+ QVariant data = mShowRegionalInfoItem->contentWidgetData(QString("text"));
+ QString value = data.toString();
+ if (!value.compare(hbTrId("txt_calendar_button_no"))) {
+ // User has made it OFF
+ mSettingsManager->writeItemValue(*mShowRegionalInfoKey, KValueZero);
+ } else if (!value.compare(hbTrId("txt_calendar_button_yes"))) {
// User has made it ON.
- mShowWeekNumber = 1;
- mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, 1);
+ mSettingsManager->writeItemValue(*mShowRegionalInfoKey, KValueOne);
}
}
-void CalenSettings::handleRegionalInfoChange()
-{
- QVariant data = mShowRegionalInfoItem->contentWidgetData(QString("text"));
- QString value = data.toString();
- if(!value.compare(hbTrId("txt_calendar_button_no"))) {
- // User has made it OFF
- mShowRegionalInfo = 0;
- mSettingsManager->writeItemValue(*mShowRegionalInfoKey, 0);
- } else if(!value.compare(hbTrId("txt_calendar_button_yes"))) {
- // User has made it ON.
- mShowRegionalInfo = 1;
- mSettingsManager->writeItemValue(*mShowRegionalInfoKey, 1);
- }
-}
-
+/*!
+ Populates the settings model
+ */
void CalenSettings::populateSettingList()
{
- // Read the values from cenrep
- // Read the initial values from the cenrep
- QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
- mAlarmSnoozeTime = value.toUInt();
-
- value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
- mShowWeekNumber = value.toUInt();
-
- // set the value to the form
- int choiceIndex = 0;
- switch(mAlarmSnoozeTime)
- {
- case 5:
- choiceIndex = 0;
- break;
- case 10:
- choiceIndex = 1;
- break;
- case 15:
- choiceIndex = 2;
- break;
- case 30:
- choiceIndex = 3;
- break;
- default:
- choiceIndex = 0;
- break;
- }
- mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"),
- choiceIndex);
- if(mShowWeekNumber)
- {
- mShowWeekNumberItem->setContentWidgetData(QString("text"),
- QString(hbTrId("txt_calendar_button_yes")));
- mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
- QString(hbTrId("txt_calendar_button_no")));
- }
- else
- {
- mShowWeekNumberItem->setContentWidgetData(QString("text"),
- QString(hbTrId("txt_calendar_button_no")));
- mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
- QString(hbTrId("txt_calendar_button_yes")));
- }
-
- value = mSettingsManager->readItemValue(*mShowRegionalInfoKey);
- mShowRegionalInfo = value.toUInt();
-
- if (mShowRegionalInfo) {
- mShowRegionalInfoItem->setContentWidgetData(QString("text"),
- QString(hbTrId("txt_calendar_button_yes")));
- mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"),
- QString(hbTrId("txt_calendar_button_no")));
- } else {
- mShowRegionalInfoItem->setContentWidgetData(QString("text"),
- QString(hbTrId("txt_calendar_button_no")));
- mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"),
- QString(hbTrId("txt_calendar_button_yes")));
- }
-
- mSettingsForm->setModel(mSettingsModel);
+ // Read the values from cenrep
+ // Read the initial values from the cenrep
+ QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
+ uint alarmSnoozeTime = value.toUInt();
+
+ // Get the value from the hash and set the value to the form
+ int choiceIndex = mAlarmSnoozeTimeHash.key(alarmSnoozeTime);
+ mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"),
+ choiceIndex);
+ // Get start of week from the locale.
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ mStartOfWeek = locale.startOfWeek();
+
+ mShowWeekStartOnInfoItem->setContentWidgetData("currentIndex", mStartOfWeek);
+ //update the show week number option
+ updateShowWeekItem();
+ // Check the the regional info plugin is loaded now or not
+ if (isPluginEnabled()) {
+ // If the plugin was already there just populate the item
+ // else add the regional info item and then populate
+ if (mRegionalpluginActive) {
+ populateRegionalInfo();
+ }else {
+ addRegionalInfoItem();
+ populateRegionalInfo();
+ }
+ }else {
+ // If the plugin is removed now and if it was loaded before
+ // remove the item
+ if (mRegionalpluginActive) {
+ removeRegionalInfoItem();
+ }
+ }
+ mSettingsForm->setModel(mSettingsModel);
+}
+
+/*!
+ Populates the regional info item
+ */
+void CalenSettings::populateRegionalInfo()
+{
+ QVariant value = mSettingsManager->readItemValue(*mShowRegionalInfoKey);
+ uint showRegionalInfo = value.toUInt();
+
+ if (showRegionalInfo) {
+ mShowRegionalInfoItem->setContentWidgetData(
+ QString("text"), QString(hbTrId("txt_calendar_button_yes")));
+ mShowRegionalInfoItem->setContentWidgetData(
+ QString("additionalText"), QString(
+ hbTrId("txt_calendar_button_no")));
+ } else {
+ mShowRegionalInfoItem->setContentWidgetData(
+ QString("text"), QString(hbTrId("txt_calendar_button_no")));
+ mShowRegionalInfoItem->setContentWidgetData(
+ QString("additionalText"), QString(
+ hbTrId("txt_calendar_button_yes")));
+ }
+}
+
+/*!
+ Adds the week number item in the model
+ */
+void CalenSettings::addWeekNumberItem()
+{
+ mWeekNumberItemAdded = true;
+ // Append Show Week Number settings item
+ mShowWeekNumberItem = new HbDataFormModelItem();
+ mShowWeekNumberItem->setType(HbDataFormModelItem::ToggleValueItem);
+
+ QStringList values;
+ values << hbTrId("txt_calendar_button_no")
+ << hbTrId("txt_calendar_button_yes");
+ mShowWeekNumberItem->setData(HbDataFormModelItem::LabelRole,
+ QString(hbTrId("txt_calendar_setlabel_show_week_numbers")));
+
+ mSettingsModel->appendDataFormItem(mShowWeekNumberItem);
+ mSettingsForm->addConnection(mShowWeekNumberItem, SIGNAL(clicked()),
+ this, SLOT(handleWeekNumberChange()));
+}
+
+/*!
+ Returns true if the regional plugin is loaded
+ */
+bool CalenSettings::isPluginEnabled()
+{
+ QString *pluginInfo = mServices.InfobarTextL();
+ if (!pluginInfo) {
+ return false;
+ } else {
+ return true;
+ }
+}
+
+/*!
+ Sets the start day of the week to the locale
+ Is called when user selects week day
+ */
+void CalenSettings::setStartDayOfWeek(const int index)
+{
+ TLocale locale;
+ TDay day = (TDay)index;
+ //set the start day of the week to locale
+ locale.SetStartOfWeek(day);
+ locale.Set();
+ updateShowWeekItem();
+}
+
+/*!
+ Updates the show week number option
+ */
+void CalenSettings::updateShowWeekItem()
+{
+ // Get start of week from the locale.
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ mStartOfWeek = locale.startOfWeek();
+ mShowWeekStartOnInfoItem->setContentWidgetData("currentIndex", mStartOfWeek);
+
+ // Read the value form cenrep
+ QVariant value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
+ uint showWeekNumber = value.toUInt();
+
+ //if start day is not Monday
+ //set the show week number option dimmed ,
+ //else set to proper status
+ if(mStartOfWeek != HbExtendedLocale::Monday) {
+ mShowWeekNumberItem->setContentWidgetData(QString("text"),
+ QString(hbTrId("txt_calendar_button_no")));
+ mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
+ QString(hbTrId("txt_calendar_button_yes")));
+ mShowWeekNumberItem->setEnabled(false);
+ } else {
+ if(showWeekNumber) {
+ mShowWeekNumberItem->setContentWidgetData(QString("text"),
+ QString(hbTrId("txt_calendar_button_yes")));
+ mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
+ QString(hbTrId("txt_calendar_button_no")));
+ } else {
+ mShowWeekNumberItem->setContentWidgetData(QString("text"),
+ QString(hbTrId("txt_calendar_button_no")));
+ mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
+ QString(hbTrId("txt_calendar_button_yes")));
+ }
+ mShowWeekNumberItem->setEnabled(true);
+ }
}
// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/sis/calendar.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,70 @@
+;
+; Copyright (c) 2009 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: pkg file of Calendar Application for IAD.
+;
+
+; Language
+&EN
+
+; standard SIS file header
+#{"Calendar"}, (0x10005901), 1, 0, 0, TYPE=SA, RU
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
+
+;Calendar engine part
+"/epoc32/release/armv5/urel/AgnVersit2.dll" - "!:/sys/bin/AgnVersit2.dll"
+"/epoc32/release/armv5/urel/CalenImp.dll" - "!:/sys/bin/CalenImp.dll"
+"/epoc32/release/armv5/urel/CalenInterimUtils2.dll" - "!:/sys/bin/CalenInterimUtils2.dll"
+"/epoc32/release/armv5/urel/Versit2.dll" - "!:/sys/bin/Versit2.dll"
+"/epoc32/data/z/resource/agnversit2strings.rsc" - "!:/resource/agnversit2strings.rsc"
+"/epoc32/data/z/resource/plugins/AGNVERSIT2.rsc" - "!:/resource/plugins/AGNVERSIT2.rsc"
+
+;Agenda Interface file to be installed
+"/epoc32/release/armv5/urel/agendainterface.dll" - "!:/sys/bin/agendainterface.dll"
+
+; Calendar executable and default resource files
+
+"/epoc32/release/armv5/urel/calendar.exe" - "!:/sys/bin/calendar.exe"
+"/epoc32/data/Z/private/10003a3f/import/apps/calendar_reg.rsc" - "!:/private/10003a3f/import/apps/calendar_reg.rsc"
+"/epoc32/data/z/resource/apps/calendar.r01" - "!:/resource/apps/calendar.rsc"
+"/epoc32/data/z/resource/qt/translations/calendar_en.qm" - "!:/resource/qt/translations/calendar.qm"
+
+"/epoc32/release/armv5/urel/calenviewerservice.exe" - "!:/sys/bin/calenviewerservice.exe"
+"/epoc32/data/Z/private/10003a3f/import/apps/calenviewerservice_reg.rsc" - "!:/private/10003a3f/import/apps/calenviewerservice_reg.rsc"
+"/epoc32/data/z/resource/apps/calenviewerservice.rsc" - "!:/resource/apps/calenviewerservice.rsc"
+
+"/epoc32/release/armv5/urel/calenviews.dll" - "!:/sys/bin/calenviews.dll"
+"/epoc32/release/armv5/urel/calensettings.dll" - "!:/sys/bin/calensettings.dll"
+"/epoc32/release/armv5/urel/calenglobaldata.dll" - "!:/sys/bin/calenglobaldata.dll"
+"/epoc32/release/armv5/urel/calencustomisationmanager.dll" - "!:/sys/bin/calencustomisationmanager.dll"
+"/epoc32/release/armv5/urel/calencontroller.dll" - "!:/sys/bin/calencontroller.dll"
+"/epoc32/release/armv5/urel/calencommonutils.dll" - "!:/sys/bin/calencommonutils.dll"
+"/epoc32/release/armv5/urel/calenlauncher.dll" - "!:/sys/bin/calenlauncher.dll"
+"/epoc32/release/armv5/urel/caleneditor.dll" - "!:/sys/bin/caleneditor.dll"
+"/epoc32/release/armv5/urel/agendaeventviewer.dll" - "!:/sys/bin/agendaeventviewer.dll"
+"/epoc32/release/armv5/urel/calenregionalutil.dll" - "!:/sys/bin/calenregionalutil.dll"
+
+;ECom files to be installed
+"/epoc32/release/armv5/urel/calenlunarchineseplugin.dll" - "!:/sys/bin/calenlunarchineseplugin.dll"
+"/epoc32/data/z/resource/plugins/calenlunarchineseplugin.rsc" - "!:/resource/plugins/calenlunarchineseplugin.rsc"
+
+;Qt plugin files to be installed
+"/epoc32/release/armv5/urel/agendaeventviewerplugin.dll" - "!:/sys/bin/agendaeventviewerplugin.dll"
+"/epoc32/data/z/resource/qt/plugins/calendar/agendaeventviewerplugin.qtplugin" - "!:/resource/qt/plugins/calendar/agendaeventviewerplugin.qtplugin"
+
+;END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/sis/createandsign.bat Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,22 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Bat file to create Calendar Application's sisx.
+rem
+
+@echo -------- Create sis packages ---------
+makesis calendar.pkg
+
+@echo -------- Sign and rename sis packages -----------
+signsis calendar.sis calendar.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
+
Binary file calendarui/sis/nokia_rndcert_02.der has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/sis/nokia_rndcert_02.key Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn
+uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO
+vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB
+AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo
+REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss
+/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J
+s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut
+sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/
+pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp
+VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ
+P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK
+1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT
+1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x
+-----END RSA PRIVATE KEY-----
--- a/calendarui/sisx/calendarui_armv5_urel.pkg Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-; calendarui_armv5_urel.pkg generated by qmake at Wed Feb 25 16:36:32 2009
-; This file is generated by qmake and should not be modified by the user
-;
-
-; Language
-&EN
-
-; SIS header: name, uid, version
-#{"calendarui"},(0xE4be93e0),1,0,0
-
-; Localised Vendor name
-%{"Nokia, Qt Software"}
-
-; Unique Vendor name
-:"Nokia, Qt Software"
-
-; Dependencies
-[0x101F7961],0,0,0,{"S60ProductID"}
-[0x102032BE],0,0,0,{"S60ProductID"}
-[0x102752AE],0,0,0,{"S60ProductID"}
-[0x1028315F],0,0,0,{"S60ProductID"}
-(0x2001E61C), 4, 5, 0, {"QtLibs pre-release"}
-
-; Executable and default resource files
-"\epoc32\release\armv5\urel\agendainterface.dll" - "!:\sys\bin\agendainterface.dll"
-"\epoc32\release\armv5\urel\hb_calencommonutils.dll" - "!:\sys\bin\hb_calencommonutils.dll"
-"\epoc32\release\armv5\urel\hb_calenglobaldata.dll" - "!:\sys\bin\hb_calenglobaldata.dll"
-"\epoc32\release\armv5\urel\calensettings.dll" - "!:\sys\bin\calensettings.dll"
-"\epoc32\release\armv5\urel\hb_calencustomisationmanager.dll" - "!:\sys\bin\hb_calencustomisationmanager.dll"
-;"\epoc32\release\armv5\urel\hb_CalenEditorPlugin.dll" - "!:\sys\bin\hb_CalenEditorPlugin.dll"
-"\epoc32\release\armv5\urel\caleneditor.dll" - "!:\sys\bin\caleneditor.dll"
-"\epoc32\release\armv5\urel\hb_calenviews.dll" - "!:\sys\bin\hb_calenviews.dll"
-"\epoc32\release\armv5\urel\hb_calencontroller.dll" - "!:\sys\bin\hb_calencontroller.dll"
-;"\epoc32\data\z\resource\plugins\hb_CalenEditorPlugin.rsc" - "!:\resource\plugins\hb_CalenEditorPlugin.rsc"
-"\epoc32\release\armv5\urel\calendarapp.exe" - "!:\sys\bin\calendarapp.exe"
-"\epoc32\data\z\resource\apps\calendarapp.rsc" - "!:\resource\apps\calendarapp.rsc"
-"\epoc32\data\Z\private\10003a3f\import\Apps\calendarapp_reg.rsc" - "!:\private\10003a3f\import\apps\calendarapp_reg.rsc"
-;"\epoc32\release\armv5\urel\calenregionalutil.dll" - "!:\sys\bin\calenregionalutil.dll"
-;"\epoc32\data\z\resource\calenregionalutil.rsc" - "!:\resource\calenregionalutil.rsc"
-;"\epoc32\data\z\resource\calenlunarchineseplugindata.rsc" - "!:\resource\calenlunarchineseplugindata.rsc"
-;"\epoc32\data\z\resource\plugins\hb_calenlunarchineseplugin.rsc" - "!:\resource\plugins\hb_calenlunarchineseplugin.rsc"
-;"\epoc32\release\armv5\urel\hb_calenlunarchineseplugin.dll" - "!:\sys\bin\hb_calenlunarchineseplugin.dll"
-;"\epoc32\data\z\resource\plugins\hb_calenthaiplugin.rsc" - "!:\resource\plugins\hb_calenthaiplugin.rsc"
-;"\epoc32\release\armv5\urel\hb_calenthaiplugin.dll" - "!:\sys\bin\hb_calenthaiplugin.dll"
-
-
-
Binary file calendarui/sisx/calendarui_armv5_urel.sis has changed
--- a/calendarui/sisx/createandsign.bat Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-@rem
-@rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description:
-@rem
-
-@echo -------- Create sis packages ---------
-makesis calendarui_armv5_urel.pkg
-
-@echo -------- Sign and rename sis packages -----------
-signsis calendarui_armv5_urel.sis hb_calendarui.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
-
Binary file calendarui/sisx/hb_calendarui.sisx has changed
Binary file calendarui/sisx/nokia_rndcert_02.der has changed
--- a/calendarui/sisx/nokia_rndcert_02.key Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn
-uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO
-vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB
-AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo
-REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss
-/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J
-s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut
-sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/
-pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp
-VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ
-P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK
-1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT
-1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x
------END RSA PRIVATE KEY-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/stubsis/calendar_stub.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2009 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: pkg file of Calendar Application for IAD.
+;
+
+; Language
+&EN
+
+; Header
+#{"Calendar"}, (0x10005901), 1, 0, 0, TYPE=SA
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
\ No newline at end of file
Binary file calendarui/stubsis/calendar_stub.sis has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for calendarui test code
+#
+
+# include test components here
+
+TEMPLATE = subdirs
+SUBDIRS += unittest_calenviewerservice \
+ unittest_calencommonutils \
+ ../views/dayview/tsrc \
+
+CONFIG += ordered
+
+# End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/inc/test_calenagendautils.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef __TEST_CALENAGENDAUTILS_H__
+#define __TEST_CALENAGENDAUTILS_H__
+
+#include <QObject>
+
+class TestCalenAgendaUtils : public QObject
+{
+ Q_OBJECT
+public:
+ TestCalenAgendaUtils();
+ ~TestCalenAgendaUtils();
+
+private slots:
+ void init();
+ void cleanup();
+
+ void test_endsAtStartOfDay();
+
+private:
+
+};
+
+#endif // __TEST_CALENAGENDAUTILS_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/inc/test_calendateutils.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef __TEST_CALENDATEUTILS_H__
+#define __TEST_CALENDATEUTILS_H__
+
+#include <QObject>
+
+class TestCalenDateUtils : public QObject
+{
+ Q_OBJECT
+public:
+ TestCalenDateUtils();
+ ~TestCalenDateUtils();
+
+private slots:
+ void init();
+ void cleanup();
+
+ void test_onSameDay();
+ void test_onSameMonth();
+ void test_beginningOfDay();
+ void test_displayTimeOnDay();
+ void test_timeRangesIntersect();
+ void test_isValidDay();
+ void test_limitToValidTime();
+ void test_maxTime();
+ void test_minTime();
+ void test_timeOfDay();
+ void test_roundToPreviousHour();
+ void test_roundToPreviousHourFromMinutes();
+ void test_now();
+ void test_today();
+ void test_isOnToday();
+ void test_defaultTime();
+ void test_futureOf();
+};
+
+#endif // __TEST_CALENDATEUTILS_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/rom/unittest_calencommonutils.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENCOMMONUTILS_IBY
+#define UNITTEST_CALENCOMMONUTILS_IBY
+
+S60_APP_EXE(utcalencommonutils)
+S60_APP_RESOURCE(utcalencommonutils)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\utcalencommonutils_reg.rsc \private\10003a3f\import\apps\utcalencommonutils_reg.rsc
+
+
+#endif // UNITTEST_CALENCOMMONUTILS_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,55 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System includes
+#include <QTest>
+#include <hbapplication.h>
+
+// User includes
+#include "test_calenagendautils.h"
+#include "test_calendateutils.h"
+
+int main(int argc, char *argv[])
+{
+ HbApplication app(argc, argv);
+
+ TestCalenDateUtils testDateUtils;
+
+ char *args[3];
+ args[0] = argv[0];
+ args[1] = "-o";
+ args[2] = "c:\\data\\TestCalenDateUtils.txt";
+
+ int retDateUtils = QTest::qExec(&testDateUtils, 3, args);
+
+
+ TestCalenAgendaUtils testAgendaUtils;
+
+ args[2] = "c:\\data\\TestCalenAgendaUtils.txt";
+
+ int retAgendaUtils = QTest::qExec(&testAgendaUtils, 3, args);
+
+ // Core dump if HbIconLoader instance is not destroyed before the
+ // application instance. HbIconLoader uses QCoreApplication::aboutToQuit()
+ // signal to destroy itself. app.exec() where the signal is normally emitted
+ // is not called here. So, invoking the signal explicitly.
+ QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
+
+ return (retDateUtils && retAgendaUtils);
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/src/test_calenagendautils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#include <QtTest/QtTest>
+#include <agendaentry.h>
+
+#include "calenagendautils.h"
+#include "test_calenagendautils.h"
+
+/*!
+ \class TestCalenAgendaUtils
+
+ This is unittest class for CalenAgendaUtils apis.
+ */
+
+TestCalenAgendaUtils::TestCalenAgendaUtils()
+{
+ // No implementation yet
+}
+
+TestCalenAgendaUtils::~TestCalenAgendaUtils()
+{
+ // No implementation yet
+}
+
+/*!
+ This function is called to before every testcase.
+ */
+void TestCalenAgendaUtils::init()
+{
+ // No implementation yet
+}
+
+/*!
+ This function is called after every testcase.
+ */
+void TestCalenAgendaUtils::cleanup()
+{
+ // No implementation yet
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::endsAtStartOfDayL.
+ */
+void TestCalenAgendaUtils::test_endsAtStartOfDay()
+{
+ AgendaEntry entry;
+ entry.setSummary("summary");
+ entry.setStartAndEndTime(QDateTime(QDate(2010, 5, 1), QTime(12, 30)),
+ QDateTime(QDate(2010, 5, 6), QTime(2, 59)));
+ bool outPut = CalenAgendaUtils::endsAtStartOfDay(
+ entry,
+ QDateTime(QDate(2010, 5, 6)));
+ QVERIFY(!outPut);
+
+ entry.setStartAndEndTime(QDateTime(QDate(2010, 5, 1), QTime(1, 35)),
+ QDateTime(QDate(2010, 5, 6), QTime(23, 59)));
+ outPut = CalenAgendaUtils::endsAtStartOfDay(
+ entry,
+ QDateTime(QDate(2010, 5, 6)));
+ QVERIFY(!outPut);
+
+ entry.setStartAndEndTime(QDateTime(QDate(2010, 5, 1), QTime(2, 30)),
+ QDateTime(QDate(2010, 5, 5), QTime(23, 59, 59, 999)));
+ outPut = CalenAgendaUtils::endsAtStartOfDay(
+ entry,
+ QDateTime(QDate(2010, 5, 6)));
+ QVERIFY(!outPut);
+
+ entry.setStartAndEndTime(QDateTime(QDate(2010, 5, 1), QTime(1, 35)),
+ QDateTime(QDate(2010, 5, 6)));
+ outPut = CalenAgendaUtils::endsAtStartOfDay(
+ entry,
+ QDateTime(QDate(2010, 5, 6)));
+ QVERIFY(outPut);
+
+}
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/src/test_calendateutils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#include <QtTest/QtTest>
+#include <QDateTime>
+
+#include "calendateutils.h"
+#include "test_calendateutils.h"
+
+/*!
+ \class TestCalenDateUtils
+
+ This is unittest class for CalenDateUtils apis.
+ */
+
+TestCalenDateUtils::TestCalenDateUtils()
+{
+ // No implementation yet
+}
+
+TestCalenDateUtils::~TestCalenDateUtils()
+{
+ // No implementation yet
+}
+
+/*!
+ This function is called to before every testcase.
+ */
+void TestCalenDateUtils::init()
+{
+ // No implementation yet
+}
+
+/*!
+ This function is called after every testcase.
+ */
+void TestCalenDateUtils::cleanup()
+{
+ // No implementation yet
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::onSameDay.
+ */
+void TestCalenDateUtils::test_onSameDay()
+{
+ QDateTime firstParam(QDate(2010, 10, 9));
+ QDateTime secondParam(QDate(2009, 22, 9));
+ QCOMPARE(CalenDateUtils::onSameDay(firstParam, secondParam), false);
+
+ firstParam = QDateTime(QDate(2010, 2, 30));
+ secondParam = QDateTime::currentDateTime();
+ QCOMPARE(CalenDateUtils::onSameDay(firstParam, secondParam), false);
+
+ firstParam = QDateTime(QDate(2010, 12, 5), QTime(6, 44));
+ secondParam = QDateTime(QDate(2010, 12, 5), QTime(9, 33));
+ QCOMPARE(CalenDateUtils::onSameDay(firstParam, secondParam), true);
+
+ firstParam = QDateTime(QDate(-1756, 12, 5));
+ secondParam = QDateTime(QDate(1900, 5, 9));
+ QCOMPARE(CalenDateUtils::onSameDay(firstParam, secondParam), false);
+
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::onSameMonth.
+ */
+void TestCalenDateUtils::test_onSameMonth()
+{
+ QDateTime firstParam(QDate(2010, 10, 9));
+ QDateTime secondParam(QDate(2010, 22, 9));
+ QCOMPARE(CalenDateUtils::onSameMonth(firstParam, secondParam), false);
+
+ firstParam = QDateTime(QDate(2010, 2, 13));
+ secondParam = QDateTime(QDate(2009, 2, 3));
+ QCOMPARE(CalenDateUtils::onSameMonth(firstParam, secondParam), false);
+
+ firstParam = QDateTime(QDate(2010, 12, 5));
+ secondParam = QDateTime(QDate(2010, 12, 6));
+ QCOMPARE(CalenDateUtils::onSameMonth(firstParam, secondParam), true);
+
+ firstParam = QDateTime(QDate(2010, 13, 5));
+ secondParam = QDateTime(QDate(2010, 12, 9));
+ QCOMPARE(CalenDateUtils::onSameMonth(firstParam, secondParam), false);
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::beginningOfDay.
+ */
+void TestCalenDateUtils::test_beginningOfDay()
+{
+ QDateTime expectedDate(QDate(2010, 5, 4), QTime(0, 0));
+ QDateTime param(QDate(2010, 5, 4), QTime(15, 44));
+ QCOMPARE(CalenDateUtils::beginningOfDay(param), expectedDate);
+
+ expectedDate = QDateTime(QDate(2010, 3, 3), QTime(0, 0));
+ param = QDateTime(QDate(2010, 3, 3), QTime(2, 33));
+ QCOMPARE(CalenDateUtils::beginningOfDay(param), expectedDate);
+
+ expectedDate = QDateTime(QDate(2010, 3, 5));
+ param = QDateTime(QDate(2010, 3, 5), QTime(23, 59, 59, 999));
+ QCOMPARE(CalenDateUtils::beginningOfDay(param), expectedDate);
+
+ expectedDate = QDateTime(QDate(2010, 12, 15), QTime(0, 0));
+ param = QDateTime(QDate(2010, 12, 15), QTime(24, 59));
+ QCOMPARE(CalenDateUtils::beginningOfDay(param), expectedDate);
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::displayTimeOnDay.
+ */
+void TestCalenDateUtils::test_displayTimeOnDay()
+{
+ QDateTime firstParam(QDate(2010, 10, 9), QTime(12, 45));
+ QDateTime secondParam(QDate(2010, 10, 9));
+ QDateTime actualOutput;
+ QDateTime expectedOutput = firstParam;
+
+ actualOutput = CalenDateUtils::displayTimeOnDay(firstParam, secondParam);
+ QCOMPARE(actualOutput, expectedOutput);
+
+ firstParam = QDateTime(QDate(2010, 2, 13));
+ secondParam = QDateTime(QDate(2009, 2, 3), QTime(23, 59));
+ actualOutput = QDateTime();
+ expectedOutput = CalenDateUtils::beginningOfDay(secondParam);
+
+ actualOutput = CalenDateUtils::displayTimeOnDay(firstParam, secondParam);
+ QCOMPARE(actualOutput, expectedOutput);
+
+ firstParam = QDateTime(QDate(2010, 1, 5));
+ secondParam = QDateTime(QDate(2010, 13, 6));
+ actualOutput = QDateTime();
+
+ actualOutput = CalenDateUtils::displayTimeOnDay(firstParam, secondParam);
+ QVERIFY(!actualOutput.isValid());
+
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::displayTimeOnDay.
+ */
+void TestCalenDateUtils::test_timeRangesIntersect()
+{
+ QDateTime firstStartTime(QDate(2010, 10, 9), QTime(12, 45));
+ QDateTime firstEndTime(QDate(2010, 10, 10));
+ QDateTime secondStartTime(QDate(2010, 6, 5));
+ QDateTime secondEndTime(QDate(2010, 10, 9));
+
+ bool actualOutput = CalenDateUtils::timeRangesIntersect(firstStartTime,
+ firstEndTime,
+ secondStartTime,
+ secondEndTime);
+ QCOMPARE(actualOutput, false);
+
+ firstStartTime = QDateTime(QDate(2009, 5, 7));
+ firstEndTime = QDateTime(QDate(2009, 5, 6));
+ secondStartTime = QDateTime(QDate(2009, 5, 6));
+ secondEndTime = QDateTime(QDate(2009, 5, 6));
+ actualOutput = true;
+
+ actualOutput = CalenDateUtils::timeRangesIntersect(firstStartTime,
+ firstEndTime,
+ secondStartTime,
+ secondEndTime);
+ QCOMPARE(actualOutput, false);
+
+ firstStartTime = QDateTime(QDate(2009, 5, 7));
+ firstEndTime = QDateTime(QDate(2009, 6, 11));
+ secondStartTime = QDateTime(QDate(2009, 5, 7), QTime(2,0));
+ secondEndTime = QDateTime(QDate(2009, 5, 8));
+ actualOutput = false;
+
+ actualOutput = CalenDateUtils::timeRangesIntersect(firstStartTime,
+ firstEndTime,
+ secondStartTime,
+ secondEndTime);
+ QCOMPARE(actualOutput, true);
+
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::isValidDay.
+ */
+void TestCalenDateUtils::test_isValidDay()
+{
+ QVERIFY(!CalenDateUtils::isValidDay(QDateTime(QDate(1899,12,28))));
+
+ QVERIFY(CalenDateUtils::isValidDay(QDateTime(QDate(2100,12,31))));
+
+ QVERIFY(CalenDateUtils::isValidDay(QDateTime(QDate(2100,12,30))));
+
+ QVERIFY(!CalenDateUtils::isValidDay(QDateTime(QDate(2100,2,31))));
+
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::limitToValidTime.
+ */
+void TestCalenDateUtils::test_limitToValidTime()
+{
+ QDateTime dateTime(QDate(1899, 12, 28));
+
+ QDateTime actualOutput = CalenDateUtils::limitToValidTime(dateTime);
+ QCOMPARE(actualOutput , QDateTime(QDate(1900,1,1)));
+
+ dateTime = QDateTime(QDate(2010, 10, 20));
+ actualOutput = CalenDateUtils::limitToValidTime(dateTime);
+ QCOMPARE(actualOutput, QDateTime(QDate(2010,10,20)));
+
+ dateTime = QDateTime();
+ actualOutput = CalenDateUtils::limitToValidTime(dateTime);
+ QCOMPARE(actualOutput, QDateTime(QDate(1900,1,1)));
+
+ dateTime = QDateTime(QDate(2101, 1, 1));
+ actualOutput = CalenDateUtils::limitToValidTime(dateTime);
+ QCOMPARE(actualOutput, QDateTime(QDate(2100,12,31)));
+
+ dateTime = QDateTime(QDate(2100, 12, 31), QTime(12,55));
+ actualOutput = CalenDateUtils::limitToValidTime(dateTime);
+ QCOMPARE(actualOutput, QDateTime(QDate(2100,12,31)));
+
+ dateTime = QDateTime(QDate(2010,2,31));
+ actualOutput = CalenDateUtils::limitToValidTime(dateTime);
+ QCOMPARE(actualOutput, QDateTime(QDate(1900,1,1)));
+
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::maxTime.
+ */
+void TestCalenDateUtils::test_maxTime()
+{
+ QCOMPARE(CalenDateUtils::maxTime() , QDateTime(QDate(2100,12,31)));
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::minTime.
+ */
+void TestCalenDateUtils::test_minTime()
+{
+ QCOMPARE(CalenDateUtils::minTime() , QDateTime(QDate(1900,1,1)));
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::timeOfDay.
+ */
+void TestCalenDateUtils::test_timeOfDay()
+{
+ QDateTime dateTime = QDateTime(QDate(1900, 1, 1));
+ int actulOutput = CalenDateUtils::timeOfDay(dateTime);
+ int expectedOutput = 0;
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 12, 8), QTime(12, 30));
+ expectedOutput = 750;
+ actulOutput = CalenDateUtils::timeOfDay(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 12, 8), QTime(6, 59, 59, 999));
+ expectedOutput = 420;
+ actulOutput = CalenDateUtils::timeOfDay(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 4, 31), QTime(7, 0));
+ expectedOutput = 420;
+ actulOutput = CalenDateUtils::timeOfDay(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 4, 7), QTime(6, 59, 59));
+ expectedOutput = 419;
+ actulOutput = CalenDateUtils::timeOfDay(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 4, 7), QTime(12, 60, 60));
+ expectedOutput = 0;
+ actulOutput = CalenDateUtils::timeOfDay(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::roundToPreviousHour.
+ */
+void TestCalenDateUtils::test_roundToPreviousHour()
+{
+ QDateTime dateTime = QDateTime(QDate(1900, 1, 1), QTime(23, 59, 59));
+ QDateTime actulOutput = CalenDateUtils::roundToPreviousHour(dateTime);
+ QDateTime expectedOutput(QDate(1900, 1, 1), QTime(23, 0));
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 12, 8), QTime(12, 30));
+ expectedOutput = QDateTime(QDate(2010, 12, 8), QTime(12, 0));
+ actulOutput = CalenDateUtils::roundToPreviousHour(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 12, 8), QTime(6, 59, 59, 999));
+ expectedOutput = QDateTime(QDate(2010, 12, 8), QTime(6, 0));
+ actulOutput = CalenDateUtils::roundToPreviousHour(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ dateTime = QDateTime(QDate(2010, 4, 3), QTime(12, 60, 60));
+ expectedOutput = QDateTime(QDate(2010, 4, 3));
+ actulOutput = CalenDateUtils::roundToPreviousHour(dateTime);
+ QCOMPARE(actulOutput, expectedOutput);
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::roundToPreviousHour.
+ */
+void TestCalenDateUtils::test_roundToPreviousHourFromMinutes()
+{
+ int minutes = 145;
+ int actulOutput = CalenDateUtils::roundToPreviousHour(minutes);
+ int expectedOutput = 120;
+ QCOMPARE(actulOutput, expectedOutput);
+
+ minutes = -255;
+ expectedOutput = -240;
+ actulOutput = CalenDateUtils::roundToPreviousHour(minutes);
+ QCOMPARE(actulOutput, expectedOutput);
+
+ minutes = 606;
+ expectedOutput = 600;
+ actulOutput = CalenDateUtils::roundToPreviousHour(minutes);
+ QCOMPARE(actulOutput, expectedOutput);
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::now.
+ */
+void TestCalenDateUtils::test_now()
+{
+ QCOMPARE(CalenDateUtils::now() , QDateTime::currentDateTime());
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::today.
+ */
+void TestCalenDateUtils::test_today()
+{
+ QDateTime expectedTime = QDateTime::currentDateTime();
+ expectedTime.setTime(QTime(0,0));
+ QCOMPARE(CalenDateUtils::today() , expectedTime );
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::isOnToday.
+ */
+void TestCalenDateUtils::test_isOnToday()
+{
+ QVERIFY(CalenDateUtils::isOnToday(QDateTime::currentDateTime()));
+ QDateTime dateTime = QDateTime::currentDateTime().addDays(1);
+ QVERIFY(!CalenDateUtils::isOnToday(dateTime));
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::defaultTime.
+ */
+void TestCalenDateUtils::test_defaultTime()
+{
+ QDateTime dateTime = QDateTime(QDate(2010, 3, 2));
+ QDateTime expectedOutput = dateTime;
+ // 8:00 am is default time for Calendar Editor
+ expectedOutput.setTime(QTime(8, 0));
+ QDateTime actualOutput = CalenDateUtils::defaultTime(dateTime);
+ QCOMPARE(actualOutput, expectedOutput);
+}
+
+/*!
+ This function is to test the api of CalenDateUtils::futureOf.
+ */
+void TestCalenDateUtils::test_futureOf()
+{
+ QDateTime dateTime = QDateTime(QDate(2009, 10, 30));
+ QDateTime expectedOutput = QDateTime(QDate(2009, 11, 26));
+ QDateTime actualOutput = CalenDateUtils::futureOf(dateTime, 27);
+ QCOMPARE(actualOutput, expectedOutput);
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calencommonutils/unittest_calencommonutils.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2009 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: This is the project specification file for the calencommonutils.
+#
+
+TEMPLATE = app
+TARGET = utcalencommonutils
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+DEPENDPATH += . \
+ ./inc \
+ ./src
+
+INCLUDEPATH += . \
+ ../../inc
+
+
+# Input
+HEADERS += test_calendateutils.h \
+ test_calenagendautils.h
+
+SOURCES += main.cpp \
+ test_calendateutils.cpp \
+ test_calenagendautils.cpp
+
+symbian : {
+
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.UID3 = 0x200315AE
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lcalencommonutils \
+ -lagendainterface
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calencommonutils.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calencommonutils.iby)"
+}
+
+# End of file --Don't remove this.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/data/meeting.ics Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,19201 @@
+BEGIN:VCALENDAR
+PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
+VERSION:2.0
+METHOD:REQUEST
+X-MS-OLK-FORCEINSPECTOROPEN:TRUE
+BEGIN:VEVENT
+ATTACH;ENCODING=BASE64;VALUE=BINARY;X-FILENAME=EPIC_10.2_Day_View_X0.ppt:0M
+ 8R4KGxGuEAAAAAAAAAAAAAAAAAAAAAPgADAP7/CQAGAAAAAAAAAAAAAAARAAAADwgAAAAAAAAA
+ EAAA/v///wAAAAD+////AAAAAP4HAAD/BwAAAAgAAAEIAAACCAAAAwgAAAQIAAAFCAAABggAAA
+ cIAAAICAAACQgAAAoIAAALCAAADAgAAA0IAAAOCAAA////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////9gIRvwuQQAAFpSSf52ugV0Qw2h4sySG6vyDgAAAAAAAAAAAABgAAAASwAAAO
+ DzDQAA5goAhwQAAAD+eNrNlz9oG1ccx5/k1qntQAzp4CFQBUqJBwVdnRarSxy5MUihKRaBUOGh
+ 4pCJkGphnyE2orSDEB2E6CA8CS1F2qRNt1lTsTYbOsjbZbzxhhJuaOD6ffe7e3f6a4UO6fP3Se
+ +k8+f33u/3ez/dC7AlxhZObzEWYPcXGdpH6AuBT9jHeF8J8k/46HbwGfvRHi2JzwJBy7JYE6Mn
+ KxfsNxbCH2/0HmIP7FfGtvi9+LOb8zbaOOlDN8zBeocZvk//9f36Avot9Dvon6E/BuOXd2Ta4v
+ 5/srLD9qd6MmQ7cI2me5v9D9p5q1Y5TCnpRG43Ksel/6JpfMvQtKsLrd/Vem2t19TVmq5W/DI6
+ JU+tImS2FK5GzmzIpJl83SdtSLrQYFiX1htPM/n1Yf4UWzOtzMPX1Bo06EAVoW41N0OOCR383C
+ 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
+ AUgAJQAApAASgABaAAFIACUAAKQAEoAAWgABSAAlAACkABKAAFoAAUgAJQAApAASgABaAAFIAC
+ UAAKQAEoAAWgABSAAlAACkABKAAFoAAUgAJQAApAASgABaAAFIACUAAKQAEoAAWgABSAAlAACk
+ ABKAAFoAAUgAJQAApAASgABaAAFIACUAAKQAEoAAWgABSAAlAACkABKAAFoAAUgAJQAApAASgA
+ BaAAFIACUAAKQAEoAAWgABSAAlAACkABKAAFoAAUgAJQAApAASgABaAAFIACUAAKQAEoAAWgAB
+ SAAlAACkABKAAFoAAUgAJQAApAASgABaAAFIACUAAKQAEoAAWgABSAAlAACkABKAAFoAAUgAJQ
+ AApAASgABaAAFIACUAAKQAEoAAWgABSAAlAACkABKAAFoEDlFPj/HtMbsKDIy20AAAAASUVORK
+ 5CYIIAbh7wlCMAANeTI5S4Hbcl6S2ovIyNfJX/iVBORw0KGgoAAAANSUhEUgAABgsAAAA8CAYA
+ AABYZopwAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAgY0hSTQAAeiYAAICEAAD6AA
+ AAgOgAAHUwAADqYAAAOpgAABdwnLpRPAAAAAlwSFlzAAAXEQAAFxEByibzPwAAIuxJREFUeF7t
+ nevvZldVx+cPMCG+IPGFCdGQGGi5Sjvt9DaUNqWhpXQGJ16xGMFQ7YUSGkjREi6lnekAb0yMb/
+ CFJiioUV9Ap1MUghRpAY2oTdRgiPY2tIxtwzh17PjseWb3d357zt57rX05ez3Mp8nJ9Pf89tn7
+ uz9rre9e5zkM3bGDfyAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgA
+ AEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAA
+ BCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAA
+ QgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAE
+ IAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABC
+ AAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQg
+ AAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIA
+ ABCEAAAhCAAAQgAAEIQAACEIDAjh0XryB8+5xzfvqkv1772p85uWvXq4dcr3jFT518yUt+7OTL
+ XvYTQ9YP921JjyUtjpMlPZa0wCbuHcSpna9aY6k5M6xpt6THkha8LF2vlmKFlnHnTk/2Peemvq
+ lvzbntx/bOSa0mS3osaRld39ZY8Hwvf/6wFDu0jOttNF5sKU6jvc+y1/RmQx6Mqdc3vOGVp77H
+ d9/pT653tHrR8a7VRG7yF6/du9/wwuc/f+D/Rlw33vhzLzgtIzVM921JjyUtjpElPZa0wCbuHc
+ Spna9aY6k5L6xpt6THkha8LF2vlmKFlnHnTk/2Peemvqlvzbntx/bOSa0mS3osaRld39ZYhHll
+ SZ8lLaPzhjjJnxMt5Y0lLeTwuN6GPBjzLOK5B9/p/1GrlwU3hC8L9u274sQTTxz6nxHXpz992/
+ 86PSM1TPdtSY8lLY6RJT2WtMAm7h3EqZ2vWmOpOS+sabekx5IWvCxdr5ZihZZx505P9j3npr6p
+ b8257cf2zkmtJkt6LGkZXd/WWIR5ZUmfJS2j84Y4yZ8TLeWNJS3k8LjehjwY8yziuQff6X+m28
+ uCvXuveP6xxw49s/T16KOHnjl48JZjbqN79lzxvPt5aQ1+Pbd2qMeSFtisc2MuTrCxy8ZKffta
+ Pnjw1lN+4zzv8cfH+Y3GW5xOdx08+N5T2t/+9s3RPsdds/fWY/H5dM5bPwNHeT15E8+bEX2cj0
+ fsz+m5U+IhmvljY1PrpuYPz8yS+efWjvVOrebXcKaPS9fTiJqKxc+aFutnlKYOWowN67fW+2o0
+ +f7aP897bTVztrg39JtR33nwDJvvP635jaVnWCve5/N4rldpUa/aOejPt74b69UTW+8pY96qzS
+ XteO2zgnb+1Hh/3i72smDPnsuPPfnkfUeWv7545MCBW591G73+eqfhiwM0+H27tUM9I5i4Nee0
+ wGadn7CJ16k9Nnbqe13L99679pu15x0a6Dcab3E6Dx1ZHQyntO/du0na57hr9t56LD6fPuetn4
+ GjzkHyJnXuLO/z63jEru16SjxEM39sbGpdqfaUDu2+Yv1BiX7t2uF4e70K/X8spjynzXuflRze
+ Xr/13lde276/3nqe99rK52zzvcT2WI37zoNn2Fz/eaYPj+r51rFavrdJ9w0j63t77ObYjIoV/X
+ mqH+7X21jqKWPe2vvs0T4rtNPjz9vFXhZcf/3u55544vD3Rlx3333TU+uXBZcN0zDdtyU9lrQ4
+ Rpb0WNICm7h3WIvTPffcfNpvdj/35JNjPE/rs06nu/bvv+W09jdujHa/1yl37f57jLeUl5a04G
+ VpT7AUK7SMO3d6su85N/VNfZecp71zUqvJkh5LWkbX91afZ+N5PsyrrViN+87DayJvxp3fGr8h
+ TpsRp9HeF/caG17YM497zq2pVYve2pONP28Xe1nw1rdeevT737//keWvQ4984hM3PeY2eu21l6
+ w0HBqgwe/brR3qGcHErTmnBTbr/IRNvE7tsbFT3+taXhn3Kb9Ze97hgX6j8Ran8/Aj99yz1n7d
+ dZdtkPY57pq9tx6Lz6fPeetn4KhzkLxJnTvL+/w6HrFru54SD9HMHxubWleqPaVDu69Yf1CiX7
+ t2ON5er0L/H4spz2nz3mclh7fXb733lde276+3nue9tvI523wvsT1W477z4Bk213+e6cOjer51
+ rJbvbdJ9w8j63h67OTajYkV/nuqH+/U2lnrKmLf2Pnu0zwrt9PjzdrGXBddee9GRp546/NCI62
+ Mf+83vrl8W7BqmYbpvS3osaXGMLOmxpAU2ce+wFqePf9z7jfO8B4Z4nt5nnc4HHrrrLq/94g3S
+ vs6N7dzHnDX4vIy7pZq1pAWf3xyf7503PefvOTc5nPbA3uw1Zz9aNsNvLMVpdH1v9Xk2nufDet
+ uK1bjvPLwm8ob61pwHFvOGHN6MHO59LpAHY/LAn7eLvSx485t3PfbUU1/60ojrox+98Z/dRq+6
+ apyG6b4t6bGkxTGypMeSFtjEvcNqnJznPf30GM/T+qzT6S7P8uqrN0e736vXPvKswedl+W6pZi
+ 1pwec3z+d79ZU987Ln3ORw2gN7s9ec/WjZDL+xFKfR9W2NRVhvlvpQa6ws6UEL3qc5K8PnzF59
+ n0aTpRzufS6cTXvV5MBS3Bd7WXDVVRd87+jRL//FiOvOO9/1rfXLgnEapvu2pMeSFsfIkh5LWm
+ AT9w57cXq3Kb/ReO6HP/wbG6v9zjttcbeUl5a04GXpPshSrNAy7tzpyb7n3NQ39a3pOfzY3jmp
+ 1WRJjyUto+vbWp8X5pWlWFnSMjpviJP8+zdLeWNJCzk8rrchD8Y8i/jzdrGXBVdccf6/P/PMV/
+ 5wxHXHHb/+NbfRkRqm+7akx5IWx8iSHktaYBP3DuLUzlc/9CFbXqk5L8gDakSTL34sebMZeXO2
+ xannfnvOTa+SPo97s9d4IFrwPk2+WDgzLeXsHDtL+ixp4VzYDK8hTpzfJWdC77zBy8b4h+e+2M
+ uCyy57/SPPPvvV3xtxfeAD7/xrt9FLL33dMA3TfVvSY0mLY2RJjyUtsIl7h9U4Oc977rkxnqf1
+ WafTXZ7l7t0/uzHa/V699pFnDT4vy3dLNWtJCz6/eT7fq6/smZc95yaH0x7Ym73m7EfLZviNpT
+ iNrm9rLMJ6s9SHWmNlSQ9a8D7NWRk+Z/bq+zSaLOVw73PhbNqrJgeW4r7Yy4JVYX3n2LG//WTs
+ CoScrB03vf/223/1vtMvC5Iapvd4PS00h3No9Ui0uDWk43qzCWPpfk5xrNGT2/OSWkpikNPfi8
+ 0cl+lnuXj1zuGeXHJxWppNzut6eFBsTm1cJdokYzTxbqFd4wvSs6nU5zVacrm7JBut7lIvk64j
+ HVcapyl7jVdqYyatQcl+l/QyiZ65Hkta+1Iu0jj1YKNhkPOVcL8955Yy8/HTas+dcdJ6kuaKVa
+ 9xuqR5LI23dNxcDFprCdfQxEuqRZqrPep7jqGWf652auJkhY2GiZaHJk9S541bV+pLueehUr+Z
+ 0yfJMameUlaSnkVT215vqZ7YWpo8q+n7JHEaoUUSp/DMluROaZxiemq8uLWWmh5Uc35LzsIaLj
+ Vacnmj9WRpfac8I7emNA+0THPrxupFokerJRcXqRbNujnf8vsMxn1m9XOTf24IBeza9Zp/OH78
+ wY/PXX6s/134c+zz2Lhwjfe975f/yo1NaQjXyM0t1Ty3X6mekGGOX05zjRZ3r0TPnAaNrpZslt
+ IiZRPyn/KMxXb6eW82Eg1+TEstubrP6ZJqKY2TVp9GT8oPc3VT40Expl77RRfF/ToXD4lPTGOh
+ 5ZvTnvN5jS/UMJbkQYmWXF7U+LxUj3TcUrGq0SOJ01y+xj5bwuel+y3JlZozZ3pvau0SXb3jpP
+ WhUI80JlLvm87fc25tbks8URKrkj1ZyBuN7lIvlq4hHVfjw6Vr9O5vc15Tkita79OyKdUkqSdt
+ Had6z1yPl9KjYSLxklCLlEVpfpRo0uaNpkeo0VPCKnxOSml12nK50ouNJs9KfVgapxFacnGay3
+ 9pvFrnTanvuT201qLt81r6j5S/lFcPNr38JtUPSNaU7lXKTtqHt+6dYvNN+UjzxM8leRaRnvch
+ Pz93oK/ny4Jzv/X881//nfDyAnKfS8fNrXHrrb/45+7+XbvmNfh73Jjpv09/ns5bo8XNI9Gj0S
+ LRPMdFqsWNk+qJrRNjFo5vyWYJLaVsPE8pF2mspHHSrFtaU1ItnmGs3mJx9J9LcqY0TiW1JdUT
+ 80PJmrUelPeDV836dS4W0pj30F/DfS4HazXW6AnXlnLNxzV9BtZ6ptRXatho/EKip6eWXj4vjZ
+ Nk/6ma7sGmVFMPLbm+swWbuVqeO+vCcZL99py7xhMl2jU5LDkTzwbvk9aOdFzLOE35L+17mlzN
+ 9TDavjLWx4U1Lo1Jab+d2pdkbcmYGjalXhXuqyZnc35f2/O5+bX6UrVSq0erZfqcNLf20n1oiY
+ 9I81jLxpKWXJxGeHFJHku8WBsnCRtpjrTwYm3eaLS1ZtPLb0pyo6QfbvFsKOUvYS+dq7WvSteV
+ 9OB+n37O03/2e1lw/vnnfPPEiW98MLy8gNzn0nFza9x88y98zt1/3nnzGjS63NgaLe5+rZ7Yej
+ lmc/sKP9NqSe0/tZ50D1o90nmn2qT3aLVo2DgNmvGt80bKIBZTLZvUektr0XLXjvdsYp4nqcvc
+ mrUeFNNwyy1rr9y589xZv5ZqH6G/lnvItJaxtkakHlVSLzVacrGU6p6Os6Snp5YlfD7FvyRXes
+ apRk/POPk9a/RJ9ZT6imT+nnPP1b3UEyXaY2dJ616hRos175Pmp3RcDZtcnDTsSvrb3POPlEGr
+ HneTfHhuzxpeJXlT6lUtnlmlXiP1t1QfrO1DUz1CrZ7SOElqV5MvnpdWT0n/JNW1yVp8fKRxko
+ yr7ftK8ljyPKmNU46NND9anQvaHNboW4qNVFNMT0luhGtK9yrVuoS3SrWUPEOn6rVk3ZgGz93P
+ efrPfi8Ldu585UMvvPDQ7eHlBeQ+l46bW+OWW37+T9z9O3e+YlaDRpcbW6PF3a/VE1svx2xuX+
+ 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
+ Jncu06kvslcSrJ59KYSfRI9pWqVen9Ei0aNjU11VqL5yNlkTuPpfNIGUz3K51b6qulLEu0a86M
+ XC6VcJDuNaYzXLNEQ4kXS2NZM66GjYSDZIzXX6MllzclXlyjR5ozUj41WlJspOvnvE9S462Y1L
+ LQ5oKWkbQPDZnNrSP129o+q8RDtFzcGqWx07CR5GJrLdKzY0ScSvqc0jhpfFg6trWWUTWVqpeS
+ WqrJ4Rj73myk+5wbV5MHc/vtvdfS5y8po5KeUnoGz83t7z39Z7+XBRdf/Lp/PHbsawfmLi/C/y
+ 78WXJPbG73+fvf/ytfcHOmNIT35zSUaPZraPXktGi4hfvUanH3p/RItcbipdWj1aLRp9WSY7N0
+ Hltik+O+ZD1J45TTLMvhB2c9L+VX0nquYXbm+k7ngy965SWXOL8u1y5lLN2rhJe0XjVxrWEs0a
+ PRUsNKokUTsxLd0xguoUeqsbWWJXxeure5cdJ7Nb2TZs7SmuoVJ432VA5r5pEwmO5XM/dUY+y+
+ kKUmT7TapX2/xH9KONTkjYaL5IyS1pR0Xek4Wa8iez6TxKnkrFoiTpr8kejR8JfUTU2cYnHRPg
+ dI8jjFpjcTSVzCPWg0SfwzxahEX6qmlsibkp5FU0t+/pZsStYv6UFLc0mjr5TLaC+W5k1p/UnP
+ S02PMcdsiVgt7cM5H4/p6ek3Es7SnlUT8xF7LTmPNfWsfRYprUHvTf7+03/2e1mwe/fr/uWHP/
+ zq78auQMjJuXGSMXP3ffCD73zA3bt792tVGnLr5X4f26tETzh3bC3puBot7l7pOtJxNXo0a8yN
+ TeXh9HeSOGnYpHJaokmixxIbjZY5jhImboyES0mcvH6pDj9uS0/a8yQel/OY3O/Ltb8+6ZVSH0
+ /p66ddd9bkdOR+v4SXaWsp1NS6RqzpidW3JP9bsznbfL7GWzUe2ytOGg2p/kBbEzlfme5XM3du
+ 3tiZqemVcmvUxCqsH83ea/p/qYcspUcaD+m4Gjala2hqS5oz0jhpxi3FJlc3Nb2Ev1cTK018NM
+ 9GJRqkWjR5MtUs1VQao9r+P7X/Uk2lrKa1k2M41Zbrt0r1zLFZyodj55HknMrxODNn0t9R1fSW
+ 0vqK9QfSvcTWkdZf6bOLls3SNSWpbynj3nnTi400N2rOY+2532uvmvO4h5dJ6k2yrvfsYGy/lw
+ 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
+ AHyAFygBwgB8gBcoAcIAc2Mwd4WcAbLfNvtDCXzTQX4kbcyAFygBwgB8gBcoAcIAfIAXKAHCAH
+ yAFygBwgB8iBzckBXhbwsoCXBeQAOUAOkAPkADlADpAD5AA5QA6QA+QAOUAOkAPkADlADpADZ3
+ kONHtZ8OYVyG+urm9Prt9f/fvuQdee1bq3rq53DFo/3LclPZa0OE6W9FjSApu4fxCndt5qjaXm
+ zLCm3ZIeS1rwsnS9WooVWsadOz3Z95yb+qa+Nee2H9s7J7WaLOmxpGV0fVtjwfO9/PnDUuzQMq
+ 630XixpTiN9j7LXtObDXkwpl5vD77Ld9/rf2h18Q8EIAABCEAAAhCAAAQgAAEIQAACEIAABCAA
+ AQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAA
+ EIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAAB
+ CEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQ
+ hAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEI
+ QAACEIAABCAAAQhAAAIQgAAEIAABCEAAAhCAAAQgAAEIQAACEIAABCAAAQhAAAIQ2LHj/wErRg
+ lhXMyFLgAAAABJRU5ErkJgggAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPAOgDzS8AAAEA6QMoAAAA
+ YBgAAOAQAACPEAAA6BcAAAUAAAAKAAAAAgAAAAMAAAABAAIAAAAAAQ8ACQRoEwAAAAAKBAQAAA
+ AKAAAADwDMD7oAAAAAAM0PCAAAAAAAAAABAAAAAQDDDxgAAAABAAAAAAAAAAEAAAAAAAAABAAA
+ AAGUEwAQALoPIAAAAHQAaABpAG4AawAtAGMAZQBsAGwAIABTAGwAaQBkAGUAIAC6DzIAAABUAE
+ MATABhAHkAbwB1AHQALgBBAGMAdABpAHYAZQBEAG8AYwB1AG0AZQBuAHQALgAxADAAug8gAAAA
+ dABoAGkAbgBrAC0AYwBlAGwAbAAgAFMAbABpAGQAZQAPAMwPug8AAAAAzQ8IAAAAAAAAAAEAAA
+ ABAMMPGAAAAAQAAAAAAAAAAgAAAAMAAAAFAAAAAJQTABAAug8SAAAAVwBvAHIAawBzAGgAZQBl
+ AHQAIAC6DxoAAABFAHgAYwBlAGwALgBTAGgAZQBlAHQALgA4ADAAug9AAAAATQBpAGMAcgBvAH
+ MAbwBmAHQAIABPAGYAZgBpAGMAZQAgAEUAeABjAGUAbAAgAFcAbwByAGsAcwBoAGUAZQB0AAAA
+ wQ/+DgAACAAAAOwJAADABwAAAQAJAAADeQcAAAEAIQYAAAAABAAAAAMBCAAFAAAACwIAAAAABQ
+ AAAAwCSwBgAAUAAAAJAgAAAAAFAAAAAQL///8ApQAAAEELxgCIACAAIAAAAAAAIAAgAAAAIAAo
+ AAAAIAAAAEAAAAABAAEAAAAAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP///wAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAP/////8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAAAfwAAAH8AAAB/AAA
+ AfwAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAGAAAABgAAAAYAAAAOAAA
+ AHgAAAD4AAAB+AAAA//AAAf/wAAP//////IQYAAEELRgBmACAAIAAAAAAAIAAgAAAAIAAoAAAA
+ IAAAACAAAAABABgAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAvaaUjHFac2FKa1E5Y0kxY0
+ kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kxY0kx
+ Y0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAAvaaU/+/e3s/G3se13r6t3r6l57aU57aM57aM57aM57
+ aM57aM766E766E766E766E76Z776Z796Zz96Zz955r955j955j955jY0kxAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAvaaU/+/n/+/n/+/n/+/n/+/e/+/e/+/e/+/e/+/e/+fe/+fe/+fe/+fW/+fW/+
+ fW/+fW/+fW/+fO/9/O/9/O/9/O/9/O955jY0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAAvaac/+/n
+ /+/n/+/n/+/n/+/n/+/n/+/n/+/n/+/e/+/e/+/e/+/e/+fe/+fe/+fW/+fW/+fW/+fW/+fW/+
+ fO/9/O/9/O955jY0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAAvaac/+/n/+/n3raU3raU1q6U1q6M
+ 1q6M1q6M1q6MtY5rtY5rtY5rtY5rtY5rtY5rtY5rtY5rtY5rtY5r/+fW/+fO/+fO955rY0kxAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAvaac//fv//fv3raU//fv//fv//fv/+/v1q6M/+/n/+/n1q6M
+ ///3tY5r/+/e/+/e1qaE///3tY5r/+fW/+fW/+fW/+fO955rY0kxAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAva6c//fv//fv3rac//fv//fv//fv//fv1q6U//fv//fv1q6M///3tY5r/+/n/+/n1qaE
+ ///3tY5r/+fe/+fW/+fW/+fW96ZzY0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAAva6c//fv//fv3r
+ ac3rac3rac3raU3raU3raU1q6U//fv1q6M///3tY5r/+/n/+/n1q6M///3tY5r/+/e/+fe/+fe
+ /+fW96ZzY0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAAva6c//f3//f33r6c//f3//f3//f3//f33r
+ aU//fv//fv1q6U///3tY5r1q6M1q6M1q6M///3tY5r/+/e/+/e/+fe/+fe76Z7Y0kxAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAxq6c///3//f33r6l//f3//f3//f3//f33rac//f3//f33raU///3tY
+ 5r//fv//fv1q6M///3tY5r/+/n/+/n/+/e/+fe76Z7Y0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ xq6c///3///3576l576l3r6l3r6c3r6c3rac3rac//f33raU3raUtY5r//fv//fv1q6M///3tY
+ 5r/+/n/+/n/+/n/+/e766EY0kxAAAAAAAAAAAAAAAAAAAAAAAAAAAAxq6c///3///3576l///3
+ ///3///3///33r6c///3///3//f3//f3//f3//f3//fv1q6U1q6MtY5r/+/n/+/n/+/n/+/e76
+ 6EY0kxAAAAAAAAOXFKOXFKOXFKMWlCMWlCMWlCKWFCKWFCKWFCIVkxIVkxIVkxGFExGFExGFEx
+ GEkp///3///33raU//f3//f3//f3//fv//fv//fv/+/n/+/n/+/n766EY0kxAAAAAAAAOXFKa6
+ Z7Y6ZzY6ZzWp5zWp5zUpZrUpZrSpZaSpZaSpZaOY5SOY5SMY5KMY5KGEkp3r6c3rac3rac3rac
+ 3raU3raU3raU3q6U//fv//fv/+/v/+/n57aMY0kxAAAAAAAAQnlSa6Z77/fv7/fv5/fn5+/n5+
+ /n3u/e3u/e3u/e3u/e3u/e3ufe3ufeMY5KGEkp////////3r6c///3///3//f3//f33raU//fv
+ //fv/+/v/+/n57aMY0kxAAAAAAAAQnlSc66E7/fv7/fv7/fv5/fn5+/n5+/n3u/e3u/e3u/e3u
+ /e3u/e3ufeOY5SGFEx////////3r6c///3///3///3//f33raU//fv//fv//fv//fv57aUY0kx
+ AAAAAAAAQoZac66E7/fv7/fv7/fv7/fv7/fv5+/nhK6MKVEpKVEpKVEpKVEp3u/eOY5SGFEx57
+ 6l576l576l3r6l3r6c3r6c3rac3rac//f3//fv//fv//fv57aUY0kxAAAAAAAASoZje7aM9//3
+ UqZaKVEpKVEpKVEpKVEpGHEYa7ZzSpZaSpZKIVkx3u/eSpZaIVkx////////576l//////////
+ /3///33rac//f3//f3//fv//fv576cY0kxAAAAAAAAUo5jhL6U9//39/f3UqZaY7ZzUqZaGHEY
+ e8eESpZaSpZKIVkxhK6M3u/eSpZaIVkx////////576l///////////3///33r6c//f3//f3//
+ fv//fv576cY0kxAAAAAAAAUpZrjLaU9//39//39//3UqZaMYYxhL6USpZaSpZKIVkxY55jY55j
+ 3u/eSpZaIVkx58et58et58et58el576l576l576l3r6l//f3//f3//f3//fv3r6lY0kxAAAAAA
+ AAWp5zlMec////9//39//3MYYxlMecWq5jUqZaMWlCAGkA5/fn5+/n5+/nUpZrKWFC////////
+ 58et///////////////3576l///3//f3//f3//fv3r6lY0kxAAAAAAAAY6ZzlMec////////OZ
+ ZCnNela7ZzWq5jQoZKUqZaMYYxAGkA5/fn5+/nUpZrKWFC////////58et////////////////
+ 3s/G3se13r6l3r6l3r6l3r6lY0kxAAAAAAAAa6Z7nNel////SpZKrde1c757c757SpZaUoZaY7
+ ZrUqZaMYYxAGkA5/fnWp5zMWlC78+178+178+158et58et58etva6cjHFajHFajHFac2FKc2FK
+ a1E5Y0kxAAAAAAAAc66EnNel////Y7ZrY65rY65rUp5a9//39//3UoZaUoZaUoZaUoZa7/fvWp
+ 5zMWlC////////////////////////xq6c79e978+958+158et576tY0kxAAAAAAAAAAAAc66E
+ rde1////////////////////////9//39//39/f37/fv7/fv7/fvY6ZzOXFK//////////////
+ //////////xq6c/+/n/+/e99/W79fGY0kxAAAAAAAAAAAAAAAAe7aMrde1////////////////
+ ////////////9//39//39/f37/fv7/fvY6ZzOXFK78+978+9////////////////xral/+/n/+
+ /e99/WY0kxAAAAAAAAAAAAAAAAAAAAe7aMrde1rde1nNelnNellMeclMeclMecjLaUhL6Ue7aM
+ c66Ec66Ec66Ea6Z7OXFK////////////////////////xral/+/n/+/ea1E5AAAAAAAAAAAAAA
+ AAAAAAAAAAhL6Ue7aMc66Ec66Ea6Z7Y6ZzWp5zUpZrUo5jSoZjSoZjQoZaQnlSQnlSOXFKOXFK
+ ////////////////////////xral/+/njHFaAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAA1r61////////////////////////////////////////////////////////////
+ ////zralnIZzAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA1r611r611r
+ 611r611r6tzr6tzr6tzr6tzr6tzr6tzr6tzr6tzr6tzratzratzralzralzralAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ CgAAACYGDwAJAEljb25Pbmx5AAAFAAAACQIAAAAABQAAAAIBAQAAABwAAAD7AvX/AAAAAAAAkA
+ EAAAAAAAAAAFRhaG9tYQAAzhQKtcSjEwBArfN3Sa3zdyBA9XcxEGbSBAAAAC0BAAAFAAAALgEG
+ AAAAEwAAADIKJAAwABAABAAAAAAAYABLAE1pY3Jvc29mdCBFeGNlbCAQAAAAMgoxADAACQAEAA
+ AAAABgAEsAV29ya3NoZWV0IAUAAAAuAQEAAAAoAAAAJgYPAEYAQzpcV0lOTlRcSW5zdGFsbGVy
+ XHs5MDExMDQwOS02MDAwLTExRDMtOENGRS0wMTUwMDQ4MzgzQzl9XHhsaWNvbnMuZXhlAAYAAA
+ AmBg8AAgAxAAMAAAAAAA8A1w9kAQAAAADTDwQAAAAGAAAAAAC6D6QAAABoAHQAdABwADoALwAv
+ AHcAaQBrAGkAcwAuAGkAbgAuAG4AbwBrAGkAYQAuAGMAbwBtAC8AUwBEAEQAaQBmAGYAZQByAG
+ UAbgB0AGkAYQB0AGkAbgBnAFMAVwAvAEQAUwBXAF8AWAAwAF8ATQBpAGwAZQBzAHQAbwBuAGUA
+ XwBDAHIAaQB0AGUAcgBpAGEAXwBEAHIAYQBmAHQAXwB2ADAAXwAyABAAug+kAAAAaAB0AHQAcA
+ A6AC8ALwB3AGkAawBpAHMALgBpAG4ALgBuAG8AawBpAGEALgBjAG8AbQAvAFMARABEAGkAZgBm
+ AGUAcgBlAG4AdABpAGEAdABpAG4AZwBTAFcALwBEAFMAVwBfAFgAMABfAE0AaQBsAGUAcwB0AG
+ 8AbgBlAF8AQwByAGkAdABlAHIAaQBhAF8ARAByAGEAZgB0AF8AdgAwAF8AMgAPANcPZAEAAAAA
+ 0w8EAAAACgAAAAAAug+kAAAAaAB0AHQAcAA6AC8ALwB3AGkAawBpAHMALgBpAG4ALgBuAG8Aaw
+ BpAGEALgBjAG8AbQAvAFMARABEAGkAZgBmAGUAcgBlAG4AdABpAGEAdABpAG4AZwBTAFcALwBE
+ AFMAVwBfAFgAMABfAE0AaQBsAGUAcwB0AG8AbgBlAF8AQwByAGkAdABlAHIAaQBhAF8ARAByAG
+ EAZgB0AF8AdgAwAF8AMgAQALoPpAAAAGgAdAB0AHAAOgAvAC8AdwBpAGsAaQBzAC4AaQBuAC4A
+ bgBvAGsAaQBhAC4AYwBvAG0ALwBTAEQARABpAGYAZgBlAHIAZQBuAHQAaQBhAHQAaQBuAGcAUw
+ BXAC8ARABTAFcAXwBYADAAXwBNAGkAbABlAHMAdABvAG4AZQBfAEMAcgBpAHQAZQByAGkAYQBf
+ AEQAcgBhAGYAdABfAHYAMABfADIADwDyA3IDAAAvAMgP6gAAADAA0g8EAAAAAgAAAAAAug8oAA
+ AAGCAcIAj/FDA7/1v/CDAKMAwwDjAQMOX/BP8kACgAWwBcAHsAYv/h/xAAug+mAAAAATACMAz/
+ Dv/7MBr/G/8f/wH/mzCcMP0w/jCdMJ4wBTD8MBkgHSAJ/xUwPf9d/wkwCzANMA8wETCwADAgMi
+ AzIAMh4P8F/0EwQzBFMEcwSTBjMIMwhTCHMI4woTCjMKUwpzCpMMMw4zDlMOcw7jD1MPYwIQAl
+ ACkALAAuADoAOwA/AF0AfQBh/2P/ZP9l/2f/aP9p/2r/a/9s/23/bv9v/3D/nv+f/w8A1QfIAQ
+ AAAAC3D0QAAABOAG8AawBpAGEAIABTAGEAbgBzACAAVwBpAGQAZQAAALyoEwC8qBMAbJYTAGCV
+ EwAcNikwYJUTAAgAAAAPANUHAAAGIhAAtw9EAAAAQQByAGkAYQBsAAAAUwBhAG4AcwAgAFcAaQ
+ BkAGUAAAC8qBMAvKgTAGyWEwBglRMAHDYpMGCVEwAIAAAADwDVBwAABAAgALcPRAAAAE4AbwBr
+ AGkAYQAgAEwAYQByAGcAZQAAAGkAZABlAAAAvKgTALyoEwBslhMAYJUTABw2KTBglRMACAAAAA
+ 8A1QcAAAYiMAC3D0QAAABOAG8AawBpAGEAIABTAGEAbgBzAAAAAABpAGQAZQAAALyoEwC8qBMA
+ bJYTAGCVEwAcNikwYJUTAAgAAAAPANUHAAAGIkAAtw9EAAAAUwBpAG0AUwB1AG4AAABhAG4Acw
+ AAAAAAaQBkAGUAAAC8qBMAvKgTAGyWEwBglRMAHDYpMGCVEwAIAAAADwDVB4YABAJQALcPRAAA
+ AFYAZQByAGQAYQBuAGEAAABuAHMAAAAAAGkAZABlAAAAvKgTALyoEwBslhMAYJUTABw2KTBglR
+ MACAAAAA8A1QcAAAYiAACkDwgAAACAAEAAAAAAAAAApQ8QAAAAAAAQiC4AAAAAAOABAgAAAAAA
+ qQ8KAAAABwAAAAIACQQAAEAAow9uAAAABQD//T8ABAAiIAEAZAAAAAAEAABkAA8ADwAAAAAAQA
+ IAAAAAAgAAAP//7wAAAAAA//8AAP//EgAAAAABAAAABQAAIAEgAQAAAAAABQAAQAJAAgAAAAAA
+ BQAAYANgAwAAAAAABQAAgASABAAAAAAPAAsEdgoAAA8AAPBuCgAAAAAG8CgBAAABjAAAJAAAAN
+ 4CAAAjAAAADwAAAGcAAAAhAAAACAAAAAEAAAAKAAAAIwAAAAoAAAARAAAAEgAAABMAAAAGAAAA
+ FQAAAN0AAAAXAAAAKAAAABkAAAAEAAAAGwAAAOcAAAAdAAAALAAAAB8AAAAGAAAADgAAAAQAAA
+ AQAAAABAAAABIAAAAEAAAAFAAAAAQAAAAWAAAABAAAABgAAAAEAAAAGgAAAAQAAAAcAAAABAAA
+ AB4AAAAEAAAAIAAAAAQAAAAiAAAABAAAAA0AAAACAAAADAAAAAEAAAALAAAAAQAAAAoAAAABAA
+ AACQAAAAEAAAAIAAAAAQAAAAcAAAABAAAABgAAAAEAAAAFAAAAAQAAAAQAAAABAAAAAwAAAAEA
+ AAACAAAAAQAAAF8AAfDcAAAAMgAH8CQAAAADBFpSSf52ugV0Qw2h4sySG6v/AMEEAAABAAAAAA
+ AAAAAAAABiAAfwJAAAAAYGvzXfp868n+DX1bQZK52w5P8AewsAAAEAAADBBAAAAAAAAGIAB/Ak
+ AAAABgaiac2Nad4RX3G7A1DIGZc7/wBeCwAAAQAAADwQAAAAAAAAYgAH8CQAAAAGBlCrFhQ7Dq
+ 2LBpgSLEmzJqf/APg2AAABAAAAmhsAAAAAAABiAAfwJAAAAAYG15MjlLgdtyXpLai8jI18lf8A
+ nCMAAAEAAACSUgAAAAAAAAMIC/AAAwAAgQB4YQEAggCirQAAgwB4YQEAhACirQAAhQACAAAAhw
+ ABAAAAiAAAAAAAiQAAAAAAvwACAA8ADAH0AAAQDQEAAAAgDgEAAAAggAEAAAAAgQEAAAAIggEA
+ AAEAgwH///8AhAEAAAEAhQEAAAAghsEAAAAAh8EAAAAAiAEAAAAAiQEAAAAAigEAAAAAiwEAAA
+ AAjAEAAAAAjQEAAAAAjgEAAAAAjwEAAAAAkAEAAAAAkQEAAAAAkgEAAAAAkwEAAAAAlAEAAAAA
+ lQEAAAAAlgEAAAAAl8EAAAAAmAEAAAAAmQEAAAAAmgEAAAAAmwEAAAAAnAEDAABAvwEcAB4AwA
+ EBAAAIwQEAAAEAwgH///8AwwEAAAAgxAEAAAAAxcEAAAAAxsEAAAAAxwEAAAAAyAEAAAAAyQEA
+ AAAAygEAAAAAywE1JQAAzAEAAAgAzQEAAAAAzgEAAAAAz8EAAAAA1wECAAAA/wEOAA4AAAIAAA
+ AAAQICAAAIAgLLy8sAAwIAAAAgBAIAAAEABQI4YwAABgI4YwAABwIAAAAACAIAAAAACQIAAAEA
+ CgIAAAAACwIAAAAADAIAAAEADQIAAAAADgIAAAAADwIAAQAAEAIAAAAAEQIAAAAAPwIAAAMAgA
+ IAAAAAgQIAAAEAggIFAAAAgwKcMQAAhAIAAAAAhQLw+QYAhgIAAAAAhwL3AAAQiAIAAAAgvwIB
+ AA8AwAIAAAAAwQIAAAAAwgJkAAAAwwIAAAAAxAIAAAAAxQIAAAAAxgIAAAAAxwIAAAAAyAIAAA
+ AAyQIAAAAAygIwdQAAywLQEhMAzAIw7ez/zQJAVIkAzgIAgAAAzwIAgP//0AIAAHn/0QIyAAAA
+ 0gIgTgAA0wJQwwAA1AIAAAAA1QIQJwAA1gJwlAAA1wKwPP//2AIAAAAA2QIQJwAA2gJwlAAA/w
+ IWAB8ABAMBAAAAQQOoKQEAQgMAAAAAQwMDAAAARAN8vgEARQMAAAAAfwMAAA8AhAN8vgEAhQMA
+ AAAAhgN8vgEAhwMAAAAAcw0i8QoFAACMAAEAAACNADBlAQB/AQAAQACeAf////+fAf////+gAQ
+ AAACChwQAAAACiAf////+jAf////+kAQAAACClwQAAAACmAf////+nAf////+/AQAAIADZAf//
+ ///aAf/////bAQAAACDcwQAAAADdAf/////eAf/////fAQAAACDgwQAAAADhAf/////iAf////
+ //AQAAwAASAv////8TAv////8UAgAAACAVwgAAAAAWAv////8XAv////8YAgAAACAZwgAAAAAa
+ Av////8bAv////+JAv////+KAv////+LAgAAACCMwgAAAACNAv////+PAwAAAACQAwIAAACRAw
+ AAAACSAwIAAAC/AwCCAIJABQAAAABBBQAAAQBCBf///wBDBQAAACBEBQAAAABFxQAAAABGxQAA
+ AABHBQAAAABIBQAAAABJBQAAAABKBQAAAABLBTUlAABMBQAACABNBQAAAABOBQAAAABPxQAAAA
+ BQBQAAAABRBQAAAABSBQEAAABTBQEAAABUBQEAAABVBQEAAABXBQIAAABZBf////9aBf////9b
+ BQAAACBcxQAAAABdBf////9eBf////9fBQAAACBgxQAAAABhBf////9iBf////9/BQYATgCABQ
+ AAAACBBQAAAQCCBf///wCDBQAAACCEBQAAAACFxQAAAACGxQAAAACHBQAAAACIBQAAAACJBQAA
+ AACKBQAAAACLBTUlAACMBQAACACNBQAAAACOBQAAAACPxQAAAACQBQAAAACRBQAAAACSBQEAAA
+ CTBQEAAACUBQEAAACVBQEAAACXBQIAAACZBf////+aBf////+bBQAAACCcxQAAAACdBf////+e
+ Bf////+fBQAAACCgxQAAAAChBf////+iBf////+/BQYATgDABQAAAADBBQAAAQDCBf///wDDBQ
+ AAACDEBQAAAADFxQAAAADGxQAAAADHBQAAAADIBQAAAADJBQAAAADKBQAAAADLBTUlAADMBQAA
+ CADNBQAAAADOBQAAAADPxQAAAADQBQAAAADRBQAAAADSBQEAAADTBQEAAADUBQEAAADVBQEAAA
+ DXBQIAAADZBf/////aBf/////bBQAAACDcxQAAAADdBf/////eBf/////fBQAAACDgxQAAAADh
+ Bf/////iBf//////BQYATgAABgAAAAABBgAAAQACBv///wADBgAAACAEBgAAAAAFxgAAAAAGxg
+ AAAAAHBgAAAAAIBgAAAAAJBgAAAAAKBgAAAAALBjUlAAAMBgAACAANBgAAAAAOBgAAAAAPxgAA
+ AAAQBgAAAAARBgAAAAASBgEAAAATBgEAAAAUBgEAAAAVBgEAAAAXBgIAAAAZBv////8aBv////
+ 8bBgAAACAcxgAAAAAdBv////8eBv////8fBgAAACAgxgAAAAAhBv////8iBv////8/BgYATgBA
+ BgAAAABBBgAAAQBCBv///wBDBgAAACBEBgAAAABFxgAAAABGxgAAAABHBgAAAABIBgAAAABJBg
+ AAAABKBgAAAABLBjUlAABMBgAACABNBgAAAABOBgAAAABPxgAAAABQBgAAAABRBgAAAABSBgEA
+ AABTBgEAAABUBgEAAABVBgEAAABXBgIAAABZBv////9aBv////9bBgAAACBcxgAAAABdBv////
+ 9eBv////9fBgAAACBgxgAAAABhBv////9iBv////9/BgYADgCAABrxIAAAAP//mQCv1PAA/+gF
+ AAAzzADr6dgA5A5iAHLPUQCZzAAAQAAe8RAAAAAHAAAI5A5iAAQAAAjh8P8AHwDwDzgAAAAAAP
+ MDFAAAAAYAAAAEAAAAAAAAAAQAAIAAAAAAAADzAxQAAAAHAAAABAAAAAAAAAAmAACAAAAAAA8A
+ 0AdbAwAAHwAUBBwAAAAAABUEFAAAACGA8QUAypo7xCZvOADKmjsBAQAAHwATBDwAAAAAAP0DNA
+ AAAGQAAABkAAAAZAAAAGQAAAAIlRMAaDYpMECpEwAYlRMACAAAANCoEwAAAAAAAAAAAAABKTAP
+ APoDZwAAAAAA/gMDAAAAAAAAAAD9AzQAAABpAAAAZAAAAGkAAABkAAAAsFxFMwAAAABBoWAyBq
+ FgMtCoEwAIAAAAov3//6D///8BABMAcAD7AwgAAAAAAAAAcAgAAHAA+wMIAAAAAQAAADAMAAAf
+ APoDRwAAAAAA/gMDAAAAAAAAAAD9AzQAAABCAAAAZAAAAEIAAABkAAAAsFxFMwAAAABBoWAyBq
+ FgMtCoEwAIAAAAAAAAAAAAAAABABMAHwAIBDwAAAAAAP0DNAAAAGQAAABkAAAAZAAAAGQAAAA8
+ lRMAmVApMJ5QKTBCldkdvKgTANCoEwAAAAAAAAAAAAAAKTAfAP8DFAAAAAIAAAQMAAAAAAAAAA
+ AAAAACAAAADwCIE80BAAAPAIkTQgAAAAAAug8wAAAAVABIAEkATgBLAEMARQBMAEwAVQBOAEQA
+ TwBEAE8ATgBPAFQARABFAEwARQBUAEUAEAC6DwIAAAAxAA8AihMpAAAAAAC6DxAAAABfAF8AXw
+ BQAFAAVAAxADIAAACLEwkAAAAAACUEAQAAAAEPAIoT0AAAAAAAug8QAAAAXwBfAF8AUABQAFQA
+ MQAwAAAAixOwAAAADwDWB5gAAAAAALcPRAAAAFMAaQBtAFMAdQBuAAAAEwBoNikwaasTABiTEw
+ AIAAAArJMTALyoEwAAtUoHIJMTABw2KTAgkxMACAAAAA8A1geGAAQCEAC3D0QAAABBAHIAaQBh
+ AGwAAAAAABMAaDYpMGmrEwAYkxMACAAAAKyTEwC8qBMAALVKByCTEwAcNikwIJMTAAgAAAAPAN
+ YHAAAEAAAADQQIAAAAcLUAAHC1AAAPAIoTcgAAAAAAug8OAAAAXwBfAF8AUABQAFQAOQAAAIsT
+ VAAAAC8AyA8MAAAAMADSDwQAAACAAAAADwDkDxgAAAAAANMPBAAAAAYAAAAAABgQBAAAAAEAAA
+ APAOQPGAAAAAAA0w8EAAAACgAAAAAAGBAEAAAAAQAAAD8A2Q8MAAAAAADaDwQAAAANAAIATwDZ
+ DwwAAAAAANoPBAAAAA0AAgAPAPAPGAEAAAAA8wMUAAAACAAAAAQAAAAAAAAAIwEAAAAAAAAAAP
+ MDFAAAAAkAAAAEAAAAAAAAACQBAAAAAAAAAADzAxQAAAAKAAAABAAAAAAAAAApAQAAAAAAAAAA
+ 8wMUAAAACwAAAAQAAAAAAAAAKwEAAAAAAAAAAPMDFAAAAAwAAAAEAAAAAAAAAC4BAAAAAAAAAA
+ DzAxQAAAANAAAABAAAAAAAAAAvAQAAAAAAAAAA8wMUAAAADgAAAAQAAAAAAAAALAEAAAAAAAAA
+ APMDFAAAAA8AAAAEAAAAAAAAACcBAAAAAAAAAADzAxQAAAAQAAAABAAAAAAAAAAtAQAAAAAAAA
+ AA8wMUAAAAEQAAAAQAAAAAAAAAIgEAAAAAAAAvAPAPGAEAAAAA8wMUAAAAEgAAAAAAAAAAAAAA
+ AAEAAAAAAAAAAPMDFAAAABMAAAAAAAAAAAAAAAEBAAAAAAAAAADzAxQAAAAUAAAAAAAAAAAAAA
+ ACAQAAAAAAAAAA8wMUAAAAFQAAAAAAAAAAAAAAAwEAAAAAAAAAAPMDFAAAABYAAAAAAAAAAAAA
+ AAQBAAAAAAAAAADzAxQAAAAXAAAAAAAAAAAAAAAFAQAAAAAAAAAA8wMUAAAAGAAAAAAAAAAAAA
+ AABgEAAAAAAAAAAPMDFAAAABkAAAAAAAAAAAAAAAcBAAAAAAAAAADzAxQAAAAaAAAAAAAAAAAA
+ AAAIAQAAAAAAAAAA8wMUAAAAGwAAAAAAAAAAAAAACQEAAAAAAAABAAEEUAAAAAAAAAH///9/AA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAMMFAAAoBMIHAABQSwMEFAAGAAgAAAAhAFauB8P3AAAAqQEAABMACAJbQ2
+ 9udGVudF9UeXBlc10ueG1sIKIEAiigAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHyQzU7DMBCE70i8g+Urih04II
+ Sa9MDPEZAoD7A4m8Sq/+TdVs3b46RFQqhwsta7M/NpVuuDd2KPmWwMjbxWtRQYTOxsGBr5sXmu
+ 7qQghtCBiwEbOSHJdXt5sdpMCUkUdaBGjszpXmsyI3ogFROGsulj9sBlzINOYLYwoL6p61ttYm
+ AMXPHsIdvVI/awcyyeDuX7SJLRkRQPx8M5q5GQkrMGuJDqfeh+pVSnBFWUyw2NNtFVwZD6bMK8
+ +TvgpHst1WTboXiDzC/gC4Zm+HT4zpNDUv+bnKGMfW8NdtHsfGlApYxU3gXYO/XD+ptcL0W3Xw
+ AAAP//AwBQSwMEFAAGAAgAAAAhAO3kDEu7AAAAJgEAAAsACAJfcmVscy8ucmVscyCiBAIooAAC
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ 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
+ AAfwABAO8BgABAa8MFhwABAAAAvwAEAAQAvwEBABEA/wEBABkAPwMAAAgAgMMYAAAAvwMAAAIA
+ UgBlAGMAdABhAG4AZwBsAGUAIAAyAAAAEwAi8QYAAAD/AQAAQAAAABDwCAAAAAAAdADsF8cCDw
+ AR8BAAAAAAAMMLCAAAAAAAAAABABMADwAN8FQAAAAAAJ8PBAAAAAAAAAAAAKgPIAAAAENsaWNr
+ IHRvIGVkaXQgTWFzdGVyIHRpdGxlIHN0eWxlAACiDwYAAAAhAAAAAAAAAKoPCgAAACEAAAABAA
+ AAAAAPAATwrgUAABIACvAIAAAAAwwAAAAKAADTAAvwZgAAAH8AAQDvAYAAIGHDBYEAeGEBAIIA
+ oq0AAIMAeGEBAIQAoq0AAL8ABAAEAL8BAQARAMsBnDEAAP8BAQAZAD8DAAAIAIDDGAAAAL8DAA
+ ACAFIAZQBjAHQAYQBuAGcAbABlACAAMwAAABMAIvEGAAAA/wEAAEAAAAAQ8AgAAADHAnoA8xcD
+ Dw8AEfAQAAAAAADDCwgAAAABAAAAAgATAA8ADfDyBAAAAACfDwQAAAABAAAAAACgD6YEAABOAG
+ 8AawBpAGEAIABQAG8AdwBlAHIAUABvAGkAbgB0ACAAMgAwADAAOAAgAFQAZQBtAHAAbABhAHQA
+ ZQAsACAAQQA0ACAACwBUAGkAdABsAGUAIABmAG8AbgB0ADoAIABOAG8AawBpAGEAIABMAGEAcg
+ BnAGUAIABiAG8AbABkACAAMwAyACAAcAB0AAsAQwBvAHAAeQAgAGYAbwBuAHQAOgAgAE4AbwBr
+ AGkAYQAgAFMAYQBuAHMAIABXAGkAZABlACAAMgAwACAAcAB0ACAAKAByAGUAZwB1AGwAYQByAC
+ wAIABiAG8AbABkACAAbwByACAAaQB0AGEAbABpAGMAKQANADEAcwB0ACAATABlAHYAZQBsACAA
+ QgB1AGwAbABlAHQADQAyAG4AZAAgAEwAZQB2AGUAbAAgAEIAdQBsAGwAZQB0ACAAKABzAGkAeg
+ BlADoAIAAxADgAIABwAHQAKQANADMAcgBkACAATABlAHYAZQBsACAAQgB1AGwAbABlAHQAIAAo
+ AHMAaQB6AGUAOgAgADEANgAgAHAAdAApAA0ANAB0AGgAIABMAGUAdgBlAGwAIABCAHUAbABsAG
+ UAdAAgACgAcwBpAHoAZQA6ACAAMQA0ACAAcAB0ACkADQBGAG8AbwB0AGUAcgAgACgAZgBvAG4A
+ dAA6ACAATgBvAGsAaQBhACAAUwBhAG4AcwAgAFcAaQBkAGUALAAgADgAIABwAHQAKQA6AAsAHC
+ CpADIAMAAwADgAIABOAG8AawBpAGEAIAAgACAAVgAxACAARgBpAGwAZQBuAGEAbQBlACAALgBw
+ AHAAdAAgAC8AIAB5AHkAeQB5AC0AbQBtAC0AZABkACAALwAgAEkAbgBpAHQAaQBhAGwAcwAdIC
+ AAaQBzACAAcwBlAHQAIAB2AGkAYQAgABwgSQBuAHMAZQByAHQAHSAgAG0AZQBuAHUAIAAvACAA
+ HCBTAGwAaQBkAGUAIABuAHUAbQBiAGUAcgAdIBMgIABOAE8AVAAgAHYAaQBhACAAUwBMAEkARA
+ BFACAATQBBAFMAVABFAFIADQBOAG8AawBpAGEAIABQAG8AdwBlAHIAUABvAGkAbgB0ACAAcABy
+ AGUAcwBlAG4AdABhAHQAaQBvAG4AcwAgAHMAaABvAHUAbABkACAAYQBsAHcAYQB5AHMAIABiAG
+ UAIABtAGEAcgBrAGUAZAAgAHcAaQB0AGgAIAB0AGgAZQAgAGEAcABwAHIAbwBwAHIAaQBhAHQA
+ ZQAgAGwAZQB2AGUAbAAgAG8AZgAgAGMAbwBuAGYAaQBkAGUAbgB0AGkAYQBsAGkAdAB5ADoAIA
+ BDAG8AbQBwAGEAbgB5ACAAQwBvAG4AZgBpAGQAZQBuAHQAaQBhAGwAIAAoAGQAZQBmAGEAdQBs
+ AHQAKQAsACAAQwBvAG4AZgBpAGQAZQBuAHQAaQBhAGwAIABvAHIAIABTAGUAYwByAGUAdAAuAC
+ AATQBvAHIAZQAgAGkAbgBmAG8AIABmAHIAbwBtACAAQwBvAHIAcABvAHIAYQB0AGUAIABTAGUA
+ YwB1AHIAaQB0AHkAIAB3AGUAYgAuAAAAog8eAAAAkwAAAAAAHwAAAAEAHwAAAAIAHwAAAAMAZA
+ EAAAAAAACqDwoAAABUAgAAAQAAAAAADwAE8H8JAAASAArwCAAAAAQMAAAACgAA0wAL8GYAAAB/
+ AAEA7wGAACAUwwWBAHhhAQCCAKKtAACDAHhhAQCEAKKtAAC/AAQABAC/AQEAEQDLAZwxAAD/AQ
+ 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
+ 0iVVRGLTgiIHN0YW5kYWxvbmU9InllcyI/Pg0KPGE6Y2xyTWFwIHhtbG5zOmE9Imh0dHA6Ly9z
+ Y2hlbWFzLm9wZW54bWxmb3JtYXRzLm9yZy9kcmF3aW5nbWwvMjAwNi9tYWluIiBiZzE9Imx0MS
+ IgdHgxPSJkazEiIGJnMj0ibHQyIiB0eDI9ImRrMiIgYWNjZW50MT0iYWNjZW50MSIgYWNjZW50
+ Mj0iYWNjZW50MiIgYWNjZW50Mz0iYWNjZW50MyIgYWNjZW50ND0iYWNjZW50NCIgYWNjZW50NT
+ 0iYWNjZW50NSIgYWNjZW50Nj0iYWNjZW50NiIgaGxpbms9ImhsaW5rIiBmb2xIbGluaz0iZm9s
+ SGxpbmsiLz6wAB4E8wUAAFBLAwQUAAYACAAAACEATY7z/P0AAAC7AQAAEwAAAFtDb250ZW50X1
+ R5cGVzXS54bWx8kMtOxDAMRfdI/EOULWrSYYEQajsLHisELIYPsBK3jchLcTqa/j1pZ5AADaws
+ P67PtZvtwVm2x0Qm+JZvRM0ZehW08UPL33dP1S1nlMFrsMFjy2ckvu0uL5rdHJFYUXtq+ZhzvJ
+ OS1IgOSISIvnT6kBzkkqZBRlAfMKC8rusbqYLP6HOVlx28ax6wh8lm9ngo5aOThJY4uz8OLqyW
+ Q4zWKMjFqdx7/YtSnQiiKNcZGk2kq2KDy7OEpfM34KR7La9JRiN7g5RfwBUbUieSZEvxGeYw5R
+ /JRvy/9ozv0PdGoQ5qcuUnIiakEtcTnBXfQF+3yPX13ScAAAD//wMAUEsDBBQABgAIAAAAIQBw
+ 8DjcvgAAADgBAAALAAAAX3JlbHMvLnJlbHOEj8EKwjAQRO+C/xD2btN6EJGmvYggeBL9gCXZts
+ E2Cdko9u/N0YLgcRjmzUzdvqdRvCiy9U5BVZQgyGlvrOsV3G+nzR4EJ3QGR+9IwUwMbbNe1Vca
+ MeUQDzawyBTHCoaUwkFK1gNNyIUP5LLT+ThhyjL2MqB+YE9yW5Y7Gb8Z0CyY4mwUxLOpQNzmkJ
+ v/s33XWU1Hr58TufSjQvJoDV1w9s+UsRh7SgpM5G9jIaoi7wfZ1HLxt/kAAAD//wMAUEsDBBQA
+ BgAIAAAAIQByMEDFwAIAANoHAAAhAAAAZHJzL3NsaWRlTGF5b3V0cy9zbGlkZUxheW91dDEueG
+ 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
+ UAIABiAG8AbABkACAAMwAyACAAcAB0AAsAQwBvAHAAeQAgAGYAbwBuAHQAOgAgAE4AbwBrAGkA
+ YQAgAFMAYQBuAHMAIABXAGkAZABlACAAMgAwACAAcAB0ACAAKAByAGUAZwB1AGwAYQByACwAIA
+ BiAG8AbABkACAAbwByACAAaQB0AGEAbABpAGMAKQANADEAcwB0ACAATABlAHYAZQBsACAAQgB1
+ AGwAbABlAHQADQAyAG4AZAAgAEwAZQB2AGUAbAAgAEIAdQBsAGwAZQB0ACAAKABzAGkAegBlAD
+ oAIAAxADgAIABwAHQAKQANADMAcgBkACAATABlAHYAZQBsACAAQgB1AGwAbABlAHQAIAAoAHMA
+ aQB6AGUAOgAgADEANgAgAHAAdAApAA0ANAB0AGgAIABMAGUAdgBlAGwAIABCAHUAbABsAGUAdA
+ AgACgAcwBpAHoAZQA6ACAAMQA0ACAAcAB0ACkADQBGAG8AbwB0AGUAcgAgACgAZgBvAG4AdAA6
+ ACAATgBvAGsAaQBhACAAUwBhAG4AcwAgAFcAaQBkAGUALAAgADgAIABwAHQAKQA6AAsAHCCpAD
+ IAMAAwADgAIABOAG8AawBpAGEAIAAgACAAVgAxACAARgBpAGwAZQBuAGEAbQBlACAALgBwAHAA
+ dAAgAC8AIAB5AHkAeQB5AC0AbQBtAC0AZABkACAALwAgAEkAbgBpAHQAaQBhAGwAcwAdICAAaQ
+ BzACAAcwBlAHQAIAB2AGkAYQAgABwgSQBuAHMAZQByAHQAHSAgAG0AZQBuAHUAIAAvACAAHCBT
+ AGwAaQBkAGUAIABuAHUAbQBiAGUAcgAdIBMgIABOAE8AVAAgAHYAaQBhACAAUwBMAEkARABFAC
+ AATQBBAFMAVABFAFIADQBOAG8AawBpAGEAIABQAG8AdwBlAHIAUABvAGkAbgB0ACAAcAByAGUA
+ cwBlAG4AdABhAHQAaQBvAG4AcwAgAHMAaABvAHUAbABkACAAYQBsAHcAYQB5AHMAIABiAGUAIA
+ BtAGEAcgBrAGUAZAAgAHcAaQB0AGgAIAB0AGgAZQAgAGEAcABwAHIAbwBwAHIAaQBhAHQAZQAg
+ AGwAZQB2AGUAbAAgAG8AZgAgAGMAbwBuAGYAaQBkAGUAbgB0AGkAYQBsAGkAdAB5ADoAIABDAG
+ 8AbQBwAGEAbgB5ACAAQwBvAG4AZgBpAGQAZQBuAHQAaQBhAGwAIAAoAGQAZQBmAGEAdQBsAHQA
+ KQAsACAAQwBvAG4AZgBpAGQAZQBuAHQAaQBhAGwAIABvAHIAIABTAGUAYwByAGUAdAAuACAATQ
+ BvAHIAZQAgAGkAbgBmAG8AIABmAHIAbwBtACAAQwBvAHIAcABvAHIAYQB0AGUAIABTAGUAYwB1
+ AHIAaQB0AHkAIAB3AGUAYgAuAAAAog8eAAAAkwAAAAAAHwAAAAEAHwAAAAIAHwAAAAMAZAEAAA
+ AAAACqDwoAAABUAgAAAQAAAAAADwAE8GIJAAASAArwCAAAAAYQAAAACgAA0wAL8GYAAAB/AAEA
+ 7wGAAIDk9gaBAHhhAQCCAKKtAACDAHhhAQCEAKKtAAC/AAQABAC/AQEAEQDLAZwxAAD/AQEAGQ
+ A/AwAACACAwxgAAAC/AwAAAgBSAGUAYwB0AGEAbgBnAGwAZQAgADQAAAAjACLxIQgAAP8BAABA
+ AKnDFQgAAFBLAwQUAAYACAAAACEAWuMRZv4AAADiAQAAEwAAAFtDb250ZW50X1R5cGVzXS54bW
+ yUkU1PxCAQhu8m/gcyV9NSPRhjSvdg9ahG1x8wgWlLtgXCYN3999L9uBjXxCPMvM/7BOrVdhrF
+ TJGtdwquywoEOe2Ndb2Cj/VTcQeCEzqDo3ekYEcMq+byol7vArHIaccKhpTCvZSsB5qQSx/I5U
+ nn44QpH2MvA+oN9iRvqupWau8SuVSkhQFN3VKHn2MSj9t8fTCJNDKIh8Pi0qUAQxitxpRN5ezM
+ j5bi2FDm5H6HBxv4KmuA/LVhmZwvOOZe8tNEa0i8YkzPOGUNaSJL479cpLn8G7JYTlz4rrOayj
+ Zym2NvNJ+sztF5wEAZ/V/8+5I7weX+h5pvAAAA//8DAFBLAwQUAAYACAAAACEAMd1fYdIAAACP
+ AQAACwAAAF9yZWxzLy5yZWxzpJDBasMwDIbvg72D0b1x2kMZo05vhV5LB7sKW0lMY8tYJm3fvq
+ YwWEZvO+oX+j7x7/a3MKmZsniOBtZNC4qiZefjYODrfFh9gJKC0eHEkQzcSWDfvb/tTjRhqUcy
+ +iSqUqIYGEtJn1qLHSmgNJwo1k3POWCpYx50QnvBgfSmbbc6/2ZAt2CqozOQj24D6nxP1fyHHb
+ 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
+ EAAP//AwBQSwMEFAAGAAgAAAAhAA3RkJ+2AAAAGwEAACcAAAB0aGVtZS90aGVtZS9fcmVscy90
+ aGVtZU1hbmFnZXIueG1sLnJlbHOEj00KwjAUhPeCdwhvb9O6EJEm3YjQrdQDhOQ1DTY/JFHs7Q
+ 2uLAguh2G+mWm7l53JE2My3jFoqhoIOumVcZrBbbjsjkBSFk6J2TtksGCCjm837RVnkUsoTSYk
+ UiguMZhyDidKk5zQilT5gK44o49W5CKjpkHIu9BI93V9oPGbAXzFJL1iEHvVABmWUJr/s/04Go
+ lnLx8WXf5RQXPZhQUoosbM4CObqkwEylu6usTfAAAA//8DAFBLAQItABQABgAIAAAAIQCCirwT
+ +gAAABwCAAATAAAAAAAAAAAAAAAAAAAAAABbQ29udGVudF9UeXBlc10ueG1sUEsBAi0AFAAGAA
+ gAAAAhAKXWp+fAAAAANgEAAAsAAAAAAAAAAAAAAAAAKwEAAF9yZWxzLy5yZWxzUEsBAi0AFAAG
+ AAgAAAAhAGt5lhaDAAAAigAAABwAAAAAAAAAAAAAAAAAFAIAAHRoZW1lL3RoZW1lL3RoZW1lTW
+ FuYWdlci54bWxQSwECLQAUAAYACAAAACEASuaTAFsHAAB4HwAAFgAAAAAAAAAAAAAAAADRAgAA
+ dGhlbWUvdGhlbWUvdGhlbWUxLnhtbFBLAQItABQABgAIAAAAIQAN0ZCftgAAABsBAAAnAAAAAA
+ AAAAAAAAAAAGAKAAB0aGVtZS90aGVtZS9fcmVscy90aGVtZU1hbmFnZXIueG1sLnJlbHNQSwUG
+ AAAAAAUABQBdAQAAWwsAAAAAAAAPBDoBAAA8P3htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPS
+ JVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQo8YTpjbHJNYXAgeG1sbnM6YT0iaHR0cDovL3Nj
+ aGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYXdpbmdtbC8yMDA2L21haW4iIGJnMT0ibHQxIi
+ B0eDE9ImRrMSIgYmcyPSJsdDIiIHR4Mj0iZGsyIiBhY2NlbnQxPSJhY2NlbnQxIiBhY2NlbnQy
+ PSJhY2NlbnQyIiBhY2NlbnQzPSJhY2NlbnQzIiBhY2NlbnQ0PSJhY2NlbnQ0IiBhY2NlbnQ1PS
+ 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
+ eCdwhvb9O6EJEm3YjQrdQDhOQ1DTY/JFHs7Q2uLAguh2G+mWm7l53JE2My3jFoqhoIOumVcZrB
+ bbjsjkBSFk6J2TtksGCCjm837RVnkUsoTSYkUiguMZhyDidKk5zQilT5gK44o49W5CKjpkHIu9
+ BI93V9oPGbAXzFJL1iEHvVABmWUJr/s/04GolnLx8WXf5RQXPZhQUoosbM4CObqkwEylu6usTf
+ AAAA//8DAFBLAQItABQABgAIAAAAIQCCirwT+gAAABwCAAATAAAAAAAAAAAAAAAAAAAAAABbQ2
+ 9udGVudF9UeXBlc10ueG1sUEsBAi0AFAAGAAgAAAAhAKXWp+fAAAAANgEAAAsAAAAAAAAAAAAA
+ AAAAKwEAAF9yZWxzLy5yZWxzUEsBAi0AFAAGAAgAAAAhAGt5lhaDAAAAigAAABwAAAAAAAAAAA
+ AAAAAAFAIAAHRoZW1lL3RoZW1lL3RoZW1lTWFuYWdlci54bWxQSwECLQAUAAYACAAAACEA75dL
+ kmEGAAAyGwAAFgAAAAAAAAAAAAAAAADRAgAAdGhlbWUvdGhlbWUvdGhlbWUxLnhtbFBLAQItAB
+ QABgAIAAAAIQAN0ZCftgAAABsBAAAnAAAAAAAAAAAAAAAAAGYJAAB0aGVtZS90aGVtZS9fcmVs
+ cy90aGVtZU1hbmFnZXIueG1sLnJlbHNQSwUGAAAAAAUABQBdAQAAYQoAAAAAAAAPBDoBAAA8P3
+ htbCB2ZXJzaW9uPSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQo8
+ YTpjbHJNYXAgeG1sbnM6YT0iaHR0cDovL3NjaGVtYXMub3BlbnhtbGZvcm1hdHMub3JnL2RyYX
+ dpbmdtbC8yMDA2L21haW4iIGJnMT0ibHQxIiB0eDE9ImRrMSIgYmcyPSJsdDIiIHR4Mj0iZGsy
+ IiBhY2NlbnQxPSJhY2NlbnQxIiBhY2NlbnQyPSJhY2NlbnQyIiBhY2NlbnQzPSJhY2NlbnQzIi
+ BhY2NlbnQ0PSJhY2NlbnQ0IiBhY2NlbnQ1PSJhY2NlbnQ1IiBhY2NlbnQ2PSJhY2NlbnQ2IiBo
+ bGluaz0iaGxpbmsiIGZvbEhsaW5rPSJmb2xIbGluayIvPgAAJwR0BQAAUEsDBBQABgAIAAAAIQ
+ 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
+ ECLQAUAAYACAAAACEAa3mWFoMAAACKAAAAHAAAAAAAAAAAAAAAAAAUAgAAdGhlbWUvdGhlbWUv
+ dGhlbWVNYW5hZ2VyLnhtbFBLAQItABQABgAIAAAAIQDvl0uSYQYAADIbAAAWAAAAAAAAAAAAAA
+ AAANECAAB0aGVtZS90aGVtZS90aGVtZTEueG1sUEsBAi0AFAAGAAgAAAAhAA3RkJ+2AAAAGwEA
+ ACcAAAAAAAAAAAAAAAAAZgkAAHRoZW1lL3RoZW1lL19yZWxzL3RoZW1lTWFuYWdlci54bWwucm
+ Vsc1BLBQYAAAAABQAFAF0BAABhCgAAAAAAAA8EOgEAADw/eG1sIHZlcnNpb249IjEuMCIgZW5j
+ b2Rpbmc9IlVURi04IiBzdGFuZGFsb25lPSJ5ZXMiPz4NCjxhOmNsck1hcCB4bWxuczphPSJodH
+ RwOi8vc2NoZW1hcy5vcGVueG1sZm9ybWF0cy5vcmcvZHJhd2luZ21sLzIwMDYvbWFpbiIgYmcx
+ PSJsdDEiIHR4MT0iZGsxIiBiZzI9Imx0MiIgdHgyPSJkazIiIGFjY2VudDE9ImFjY2VudDEiIG
+ FjY2VudDI9ImFjY2VudDIiIGFjY2VudDM9ImFjY2VudDMiIGFjY2VudDQ9ImFjY2VudDQiIGFj
+ Y2VudDU9ImFjY2VudDUiIGFjY2VudDY9ImFjY2VudDYiIGhsaW5rPSJobGluayIgZm9sSGxpbm
+ s9ImZvbEhsaW5rIi8+DwDuA4DmAQACAO8DGAAAABAAAAAAAAAAAAAAAAQAAIAAAQAABwAAAAAA
+ +QMQAAAAAAAAAAAAAAADCgEAApw3BQ8ADATI5QEADwAC8MDlAQDwAAjwCAAAAGYAAABmBAAADw
+ AD8KjlAQAPAATwKAAAAAEACfAQAAAAAAAAAAAAAAAAAAAAAAAAAAIACvAIAAAAAAQAAAUAAAAP
+ AATwDgEAABIACvAIAAAAAgQAABAKAABzAAvwRgAAAAsBAQAAAD8BAAABAL8BAAAQAP8BAAAIAD
+ 8CAAACAIDDHAAAAL8DAgACAFIAZQBjAHQAYQBuAGcAbABlACAAMQAzADAAAAAAABDwCAAAAAAA
+ AABkAGQADwAR8JgAAAAAAMELBAAAAAEAAAAPAIgThAAAAA8AiRN8AAAAAAC6DzIAAABUAEgASQ
+ BOAEsAQwBFAEwATABTAEgAQQBQAEUARABPAE4ATwBUAEQARQBMAEUAVABFABAAug86AAAAdABo
+ AGkAbgBrAGMAZQBsAGwAQQBjAHQAaQB2AGUARABvAGMARABvAE4AbwB0AEQAZQBsAGUAdABlAA
+ 8ABPDbAQAAogwK8AgAAAADBAAAAAoAANMAC/B4AAAAfwABAO8BgADAKXAIgQB4YQEAggCirQAA
+ gwB4YQEAhACirQAAvwAEAAQAvwEBABEAywGcMQAA/wEQABgAPwMAAAgAgMMqAAAAvwMAAAIARg
+ BvAG8AdABlAHIAIABQAGwAYQBjAGUAaABvAGwAZABlAHIAIAAzAAAAEwAi8QYAAAD/AQAAQAAA
+ ABDwCAAAAA4QWQHFC4cQDwAR8IAAAAAPAIgTeAAAAA8AiRNwAAAAAAC6DzIAAABUAEgASQBOAE
+ sAQwBFAEwATABTAEgAQQBQAEUARABPAE4ATwBUAEQARQBMAEUAVABFABAAug8uAAAAcABhAFAA
+ WgBLAEIAZwBzAHMAUwBrAFcATwBXAHQATgBaAFYAaQBuAEMAXwBBAA8ADfCdAAAAAACfDwQAAA
+ AEAAAAAACoDzkAAACpIDIwMDggIE5va2lhIAkgVjEuMCBFcGljIFRlbXBsYXRlIC5wcHQgLyAy
+ MDA5LTA4LTA0IC8gU0MAAKEPHAAAADoAAAAAAARwAAAAAFoAAAAAADoAAAAAAAIACAAAAKoPDg
+ AAADoAAAAHAAAAAAAABAAAAACmDw4AAADxAAAA/gDUAdAC8AMQBQ8ABPCIAQAAogwK8AgAAAAE
+ BAAAAAoAAIMAC/BmAAAAfwABAO8BgADgKnAIvwAEAAQAvwEBABEA/wEQABgAPwMAAAgAgMM2AA
+ AAvwMAAAIAUwBsAGkAZABlACAATgB1AG0AYgBlAHIAIABQAGwAYQBjAGUAaABvAGwAZABlAHIA
+ IAA0AAAAAAAQ8AgAAAAKEHAAWwGHEA8AEfCAAAAADwCIE3gAAAAPAIkTcAAAAAAAug8yAAAAVA
+ BIAEkATgBLAEMARQBMAEwAUwBIAEEAUABFAEQATwBOAE8AVABEAEUATABFAFQARQAQALoPLgAA
+ AHAAZwBpADcAXwBLAEcAOQBrAEgAawBXAC4ASABaAFUAdABEADkAegBnAGQAQQAPAA3wagAAAA
+ AAnw8EAAAABAAAAAAAoA8CAAAAKgAAAKEPGgAAAAIAAAAAAARgAAAAAAAAAAACAAAAAAACAAgA
+ AADYDwQAAAAAAAAAAACqDwoAAAACAAAAAQAAAAAAAACmDwwAAADwAAAA1AHQAvADEAUPAATwtg
+ EAABIACvAIAAAABQQAACACAAATAQvwfgAAAAQAAAAAAH8AAQDvAYAAACxwCIEAoIwAAIIAoIwA
+ AIMAoIwAAIQAoIwAAIUAAAAAAIcAAAAAAIgAAAAAAL8ABAAEAL8BAAARAP8BAAARAAEDAgwAAD
+ 8DAAAIAIDDGAAAAL8DAAACAFIAZQBjAHQAYQBuAGcAbABlACAAMgAAAAAAEPAIAAAAAABcAJYU
+ QgEPABHwkAAAAAAAwwsIAAAA/////w0AEwAPAIgTeAAAAA8AiRNwAAAAAAC6DzIAAABUAEgASQ
+ BOAEsAQwBFAEwATABTAEgAQQBQAEUARABPAE4ATwBUAEQARQBMAEUAVABFABAAug8uAAAAcABF
+ AGIAeABxAHMAcgBpAEQAcwAwAC4AeQAwAC4AdwBHAHQAUQB6AEoAQwBnAA8ADfBwAAAAAACfDw
+ QAAAAAAAAAAACoDygAAAAzLiBJbXBsZW1lbnRhdGlvbiBQbGFubmluZwtQcm9qZWN0IFBsYW4L
+ AAChDxYAAAApAAAAAAAAAAoABwApAAAAAAACABwAAACqDw4AAAApAAAABwAAAAAACQgAAA8ABP
+ ACAwAAEgAK8AgAAAAGBAAAAAoAAPMAC/ByAAAAfwAAAO8BgABABdwFgQB4YQEAggCirQAAgwB4
+ YQEAhACirQAAvwAEAAQAgQEAAAAIvwEQABAAwAEBAAAIywHOGAAA/wEIABgAPwMAAAgAgMMYAA
+ AAvwMAAAIAUgBlAGMAdABhAG4AZwBsAGUAIAAzAAAAEwAi8QYAAAD/AQAAQAAAABDwCAAAAJQC
+ yQB0DIQPDwAR8IAAAAAPAIgTeAAAAA8AiRNwAAAAAAC6DzIAAABUAEgASQBOAEsAQwBFAEwATA
+ BTAEgAQQBQAEUARABPAE4ATwBUAEQARQBMAEUAVABFABAAug8uAAAAcABTAHYAYQBRADMAbQBD
+ ADcAUQBrAC4ARABwAF8AQQBRAHoAQgBMAFYAUgB3AA8ADfDKAQAAAACfDwQAAAAEAAAAAACoD9
+ AAAABQcm9qZWN0IGRlbGl2ZXJpZXMgQ2FsZW5kYXIgRGF5IHZpZXcgdG8gMTAuMiBhcyBhIHBh
+ cnQgb2YgMTAuMiBDYWxlbmRhciBSZXN0b3JhdGlvbiBFcGljLCA0MTctNzEzOTYuDTQxNy03MD
+ c5OTogQ2FsZW5kYXIgRGF5IHZpZXcgd2l0aCB0aW1lbGluZSBmb3IgMTAuMg1Qcm9qZWN0IGtl
+ eSBkZXBlbmRlbmNpZXMgYXJlDTEwLjIgT3JiaXQNMTAuMiBPcmdhbml6ZXINAAChD5oAAABlAA
+ AAAAAhAAAABQAAAAADNAAAAAEAIQAAAAUAAAAAAx0AAAAAACEAAAAFAAAAAAMaAAAAAQAhAAAA
+ BQAAAAADAQAAAAAAIAAAAAAAAANlAAAAAABDAAMAAwAQADQAAAAAAEMAAwADABAAHQAAAAAEQw
+ AABAMAAwAQABoAAAAABEMAAAQDAAMAEAABAAAAAARDAAAEAwADABAAAACqDyIAAABlAAAAAQAA
+ AAAAMwAAAAcAAAAAAAsEAAA5AAAAAQAAAAAAAACmDxIAAAD5AgAA4AF5AKQBKQHQAvADEAUPAA
+ PwPJIAAA8ABPB5DgAAAQAJ8BAAAAAKDQAAywEAANAXAADABQAAAgAK8AgAAAAHBAAAAQIAAEMA
+ C/AsAAAABAAAAAAAfwABAOEAgMMUAAAAvwMAAAIARwByAG8AdQBwACAAMQA4ADUAAAAzACLxfQ
+ 0AAJ8DAQAAAKDDHgAAAKnDTQ0AAAYACAAEAK0AAACtAAAAegAAAKcAAACtAAAArQAAAFBLAwQU
+ AAYACAAAACEAk169kvsAAADhAQAAEwAAAFtDb250ZW50X1R5cGVzXS54bWyUkUFOwzAQRfdI3M
+ HyFsUOXSCEknRByhIQKgcY2ZPEajK2PCa0t8dpy4IFRSwt6/3/vqZa76dRzBjZearlrSqlQDLe
+ Oupr+b59Ku6l4ARkYfSEtTwgy3VzfVVtDwFZZJq4lkNK4UFrNgNOwMoHpPzT+ThBys/Y6wBmBz
+ 3qVVneaeMpIaUiLRmyqV6yQHQWxSvE9AxT7tE2ssaVb71ROUqKxxOz1NYSQhidgZSl9UxWTVz4
+ rnMGVRt5c6RuFko3VYsdfIxJbPa58rQy4sh/BP5cUJztVSaPpTy4wBcaLhufzX5bbf0nRZz/O7
+ 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
+ ARAAAAERQAAA8AA/CiaAAADwAE8CgAAAABAAnwEAAAAAAAAAAAAAAAAAAAAAAAAAACAArwCAAA
+ AAAUAAAFAAAADwAE8FMBAACiDArwCAAAAAIUAAAACgAA0wAL8HgAAAB/AAEA7wGAACAUPAeBAH
+ hhAQCCAKKtAACDAHhhAQCEAKKtAAC/AAQABAC/AQEAEQDLAZwxAAD/ARAAGAA/AwAACACAwyoA
+ AAC/AwAAAgBGAG8AbwB0AGUAcgAgAFAAbABhAGMAZQBoAG8AbABkAGUAcgAgADMAAAATACLxBg
+ AAAP8BAABAAAAAEPAIAAAADhBVAsULehAPAA3wnQAAAAAAnw8EAAAABAAAAAAAqA85AAAAqSAy
+ MDA4ICBOb2tpYSAJIFYxLjAgRXBpYyBUZW1wbGF0ZSAucHB0IC8gMjAwOS0wOC0wNCAvIFNDAA
+ ChDxwAAAA6AAAAAAAEcAAAAABaAAAAAAA6AAAAAAACAAgAAACqDw4AAAA6AAAABwAAAAAAAAQA
+ AAAApg8OAAAA8QAAAP4A1AHQAvADEAUPAATwAAEAAKIMCvAIAAAAAxQAAAAKAACDAAvwZgAAAH
+ 8AAQDvAYAAgBE8B78ABAAEAL8BAQARAP8BEAAYAD8DAAAIAIDDNgAAAL8DAAACAFMAbABpAGQA
+ ZQAgAE4AdQBtAGIAZQByACAAUABsAGEAYwBlAGgAbwBsAGQAZQByACAANAAAAAAAEPAIAAAACh
+ CGAFsBehAPAA3wagAAAAAAnw8EAAAABAAAAAAAoA8CAAAAKgAAAKEPGgAAAAIAAAAAAARgAAAA
+ AAAAAAACAAAAAAACAAgAAADYDwQAAAAAAAAAAACqDwoAAAACAAAAAQAAAAAAAACmDwwAAADwAA
+ AA1AHQAvADEAUPAATwQQEAABIACvAIAAAABBQAACACAAATAQvwfgAAAAQAAAAAAH8AAQDvAYAA
+ QA48B4EAoIwAAIIAoIwAAIMAoIwAAIQAoIwAAIUAAAAAAIcAAAAAAIgAAAAAAL8ABAAEAL8BAA
+ ARAP8BAAARAAEDAgwAAD8DAAAIAIDDGAAAAL8DAAACAFIAZQBjAHQAYQBuAGcAbABlACAAMgAA
+ AAAAEPAIAAAAAABcAJYUQgEPABHwEAAAAAAAwwsIAAAA/////w0AEwAPAA3wewAAAAAAnw8EAA
+ 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
+ 9Eb2MueG1s7J1dc+JYs6XvJ2L+g0IXEzMXddr42zUvfcLY5a6KqK7XYdyney43QoDaYosjbaps
+ //rJvSVAsqHBLrCx/NgRtgAZw0bSyly5cuW//vN2GHvfwzSLEt30G/+x43uhDpJupPtN/4/riw
+ /HvpcZpbsqTnTY9O/CzP/PX//n//jX6OOn3eQiVcPQk6fQ2cdR0x8YM/r4yy9ZMAiHKvuPZBRq
+ eayXpENl5Gba/2WUhlmojTLy74bxL7s7O4e/DFWk/V/lCfX331I1GkSBe9rL1N4XfPt+mXpRt+
+ kfHx7sH/melv/Y9H9Lk/HIO9hr+L8Uez38U/WxX3qyr0lwkxUvVK3yQrup+iFrUHmNnk5+S+Vt
+ un/6i3ttD/+rfRP5Cx8N5FXfNv393ZP9k8Oj3ZMD+1Llr/Id3Mbjv77tpcNf/6U+Jr3eT79a+e
+ eNk73DowPfu5PNxu7xUWPPvgj1Mbw1P/30gTz/ye7J0cmxHCKB/If9o5P93YP94m1O3knxKfzs
+ v7Ovuniqc2WUN06jZ3yMRnXiUI419dF04uLXZeqWRO74LY26+f+JumdJ7P2QVTs6PmlMVq0vjx
+ f3H8h73TvKF7N09+7e/snBzqO7Dw8PGofF0pf2Pjg4Pt6Zs3dj90g+NPeqSnvv7u8eH8/5l/v7
+ +3P23ts7PJjzSvb2jht7x4+eu9E42JXvR/fvHezvNHYf3b17tH8451l25W3O2/twZ2/OS1n0JP
+ a5H7/N472TIznQ7CnkPrzfis/KpN6g6R/tHO/Iy3efaOB+3raS7p3d6sjv4iOOM9M2d3HoVnZk
+ HxzJtWWo0q9NX657snHlNuLvsfsd6a5cq9ymivtyeYx9rxv2rlWnfS/HfmN/Xz49LzX53qH6ql
+ vpjb08eL1Em1P3Jx2Vhb4XywVPFw/LnwyU7svF5XKsA3n6hnvdsW6P3EvPRsFlYLzvSp62sWO/
+ indd3qMV9uzrL+872U3umz162jMP92sczJ5S9i326IzPYrngylPai3coN/JXYG7dxy+LPt2jM2
+ 7fX9+6ReyML+SdTm98E4hw98t59jUz+Ycla2yfN/8h630zHkbD5G85fWUlYlmJpt+LPlx8EZyx
+ q2qXtOMWMd9j3PS1PK1FoTS6kUu/TtpuSy46Si7G+YPaYkwc3Yef3dPaVY8ji1fybNnQnMWhks
+ 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
+ AAJwAAACcgAAAPAAPwhsMAAA8ABPAoAAAAAQAJ8BAAAAAAAAAAAAAAAAAAAAAAAAAAAgAK8AgA
+ AAAAIAAABQAAAA8ABPCSAQAAogwK8AgAAAACIAAAAAoAANMAC/B4AAAAfwABAO8BgABgv28HgQ
+ B4YQEAggCirQAAgwB4YQEAhACirQAAvwAEAAQAvwEBABEAywGcMQAA/wEQABgAPwMAAAgAgMMq
+ AAAAvwMAAAIARgBvAG8AdABlAHIAIABQAGwAYQBjAGUAaABvAGwAZABlAHIAIAA0AAAAEwAi8Q
+ YAAAD/AQAAQAAAABDwCAAAAA4QjQD5CocQDwAN8NwAAAAAAJ8PBAAAAAQAAAAAAKAPbAAAACoA
+ IAAgACAAIAAgACAAIACpACAAMgAwADAANQAgACAATgBvAGsAaQBhACAACQBQACYAUABmAE0AIA
+ BwAHIAbwBjAGUAcwBzACAATwB2AGUAcgB2AGkAZQB3ACAAEyAgAHYAIAAyAEgAMAA2AAAAoQ8c
+ AAAANwAAAAAABHAAAAAAWgAAAAAANwAAAAAAAgAIAAAA2A8EAAAAAAAAAAAAqg8OAAAANwAAAA
+ cAAAAAAAAEAAAAAKYPDgAAAPEAAAD+ANQB0ALwAxAFDwAD8E1yAAAPAATwvQ0AAAEACfAQAAAA
+ ZBIAAI8AAADiFwAAeQUAAAIACvAIAAAAAyAAAAECAABDAAvwLAAAAAQAAAAAAH8AAQDhAIDDFA
+ AAAL8DAAACAEcAcgBvAHUAcAAgADIAMgAyAAAAMwAi8TENAACfAwEAAACgwx4AAACpwwENAAAG
+ AAgABABoAAAAxwAAAMgAAADHAAAAyAAAAMgAAABQSwMEFAAGAAgAAAAhAJNevZL7AAAA4QEAAB
+ MAAABbQ29udGVudF9UeXBlc10ueG1slJFBTsMwEEX3SNzB8hbFDl0ghJJ0QcoSECoHGNmTxGoy
+ tjwmtLfHacuCBUUsLev9/76mWu+nUcwY2Xmq5a0qpUAy3jrqa/m+fSrupeAEZGH0hLU8IMt1c3
+ 1VbQ8BWWSauJZDSuFBazYDTsDKB6T80/k4QcrP2OsAZgc96lVZ3mnjKSGlIi0ZsqleskB0FsUr
+ xPQMU+7RNrLGlW+9UTlKiscTs9TWEkIYnYGUpfVMVk1c+K5zBlUbeXOkbhZKN1WLHXyMSWz2uf
+ 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
+ HeCt0EDwAN8MIAAAAAAJ8PBAAAAAQAAAAAAKAPeAAAAEEAcABwAHIAbwB2AGUAZAAgAGMAbwBz
+ AHQAIABmAG8AcgAgADEASAAvADIAMAAxADAAOgAgADMANgAgADAANwAwAKwgDQBTAFQAUAAgAG
+ YAbwByACAAMgBIAC8AMgAwADEAMAA6ACAAMgA0ADkAIAAyADAAMACsIAAAqg8YAAAAPAAAAAcA
+ AAAAAAsEAAABAAAAAQAAAAAAAACmDw4AAADxAAAA4AHUAdAC8AMQBRAA8AcgAAAA////AAAAAA
+ CAgIAAADPMAAQEdwCv1PAARKUcAPnyBgAPAIgTkQAAAA8AihOJAAAAAAC6DxAAAABfAF8AXwBQ
+ AFAAVAAxADAAAACLE2kAAAAAAOsuCAAAAJw6xQHAwtqGAAAAKwQAAAAAAAAAHwBE8T0AAAAAAC
+ fxIAAAAAAAAAADAAAAAAAAAAAAAAAAAAAAAAAAAP////8SAAAADwA98Q0AAABAAULxBQAAAAEJ
+ AAAADwACKwAAAAAAACIECAAAAAEAAAACAAAADwDuA7zUAAACAO8DGAAAABAAAAAAAAAAAAAAAA
+ QAAIAHAQAABwAAAAAA+QMQAAAAAAAAAAAAAAADCgEAAtzhBQ8ADAQE1AAADwAC8PzTAADQAQjw
+ CAAAACsAAAArLAAADwAD8OTTAAAPAATwKAAAAAEACfAQAAAAAAAAAAAAAAAAAAAAAAAAAAIACv
+ AIAAAAACwAAAUAAAAPAATwUwEAAKIMCvAIAAAAAiwAAAAKAADTAAvweAAAAH8AAQDvAYAAwAA+
+ CIEAeGEBAIIAoq0AAIMAeGEBAIQAoq0AAL8ABAAEAL8BAQARAMsBnDEAAP8BEAAYAD8DAAAIAI
+ DDKgAAAL8DAAACAEYAbwBvAHQAZQByACAAUABsAGEAYwBlAGgAbwBsAGQAZQByACAAMwAAABMA
+ IvEGAAAA/wEAAEAAAAAQ8AgAAAAOEFkBxQuHEA8ADfCdAAAAAACfDwQAAAAEAAAAAACoDzkAAA
+ CpIDIwMDggIE5va2lhIAkgVjEuMCBFcGljIFRlbXBsYXRlIC5wcHQgLyAyMDA5LTA4LTA0IC8g
+ U0MAAKEPHAAAADoAAAAAAARwAAAAAFoAAAAAADoAAAAAAAIACAAAAKoPDgAAADoAAAAHAAAAAA
+ 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
+ ZVFL3eV8vVcTfXmVKPD/37G4hIfbw9H75fyrX8L6+oT60gmVQfl4M3eoMhkr9ekmmyBDn5AwAA
+ //8DAFBLAQItABQABgAIAAAAIQDb4fbL7gAAAIUBAAATAAAAAAAAAAAAAAAAAAAAAABbQ29udG
+ VudF9UeXBlc10ueG1sUEsBAi0AFAAGAAgAAAAhAFr0LFu/AAAAFQEAAAsAAAAAAAAAAAAAAAAA
+ HwEAAF9yZWxzLy5yZWxzUEsBAi0AFAAGAAgAAAAhAA4qeQ/VAAAA+QAAAA8AAAAAAAAAAAAAAA
+ AABwIAAGRycy9kb3ducmV2LnhtbFBLBQYAAAAAAwADALcAAAAJAwAAAAAAAA/wEAAAAMQAAAD3
+ BQAABwcAADAKAAAPAA3w8AEAAAAAnw8EAAAABAAAAAAAoA+GAQAATgBlAHcAIABzAHQAeQBsAG
+ UAIABVAEkAIABzAHAAZQBjAGkAZgBpAGMAYQB0AGkAbwBuACAAZABvAGUAcwBuABkgdAAgAHAA
+ cgBvAHYAaQBkAGUAIABlAG4AbwB1AGcAaAAgAGYAdQBuAGMAdABpAG8AbgAgAGQAZQBzAGMAcg
+ BpAHAAdABpAG8AbgAgAGYAbwByACAAZABlAHYAZQBsAG8AcABtAGUAbgB0ACAAYQBuAGQAIAB0
+ AGUAcwB0AGkAbgBnACAAdABlAGEAbQAsACAAbQBvAHIAZQAgAGUAcgByAG8AcgAgAG8AcgAgAG
+ 0AaQBzAHMAaQBuAGcAIABmAGUAYQB0AHUAcgBlAHMAIABvAHIAIABpAG4AYwBvAHIAcgBlAGMA
+ dAAgAGkAbQBwAGwAZQBtAGUAbgB0AGEAdABpAG8AbgAgAG0AYQB5ACAAYgBlACAAZgBvAHUAbg
+ BkACAAaQBuACAAdABoAGUAIABsAGEAdABlACAAcABoAGEAcwBlAC4AAAChDxgAAADEAAAAAAAg
+ AAAAAAAAA8QAAAAAAAIADAAAAKoPGAAAAMMAAAAHAAAAAAALBAAAAQAAAAEAAAAAAAAApg8OAA
+ AA8QAAAOAB1AHQAvADEAUPAATwxAQAABIACvAIAAAAESwAAAIKAACjAAvwPAAAAH8AAAAEAIAA
+ YPZdCIEAeGEBAIIAoq0AAIMAeGEBAIQAoq0AAL8ABAAEAL8BAQAVAP8BAAAIAL8DAAACABMAIv
+ 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
+ V9agXZpPm4HILRW4yJwvWSTbMlyPkvAAAA//8DAFBLAQItABQABgAIAAAAIQDb4fbL7gAAAIUB
+ AAATAAAAAAAAAAAAAAAAAAAAAABbQ29udGVudF9UeXBlc10ueG1sUEsBAi0AFAAGAAgAAAAhAF
+ r0LFu/AAAAFQEAAAsAAAAAAAAAAAAAAAAAHwEAAF9yZWxzLy5yZWxzUEsBAi0AFAAGAAgAAAAh
+ APcOwaHVAAAA+QAAAA8AAAAAAAAAAAAAAAAABwIAAGRycy9kb3ducmV2LnhtbFBLBQYAAAAAAw
+ ADALcAAAAJAwAAAAAAAA/wEAAAALMNAAD3BQAA+hcAADAKAAAPABHwgAAAAA8AiBN4AAAADwCK
+ EzAAAAAAALoPEAAAAF8AXwBfAFAAUABUADEAMAAAAIsTEAAAAAAAsQ8IAAAAAAAAAwAAAQAPAI
+ oTOAAAAAAAug8OAAAAXwBfAF8AUABQAFQAOQAAAIsTGgAAAAAArA8SAAAAAAAAAgEAAAAQAAAA
+ AAAAAAAADwAN8HoBAAAAAJ8PBAAAAAQAAAAAAKgPBgEAAEludml0ZSBVSSBkZXNpZ25lciB0by
+ BzcHJpbnQgZGVtbyAmIHBsYW5uaW5nIHNlc3Npb247DURpcmVjdCBjb21tdW5pY2F0aW9uIGJl
+ dHdlZW4gZGV2ZWxvcG1lbnQsIHRlc3RpbmcgdGVhbSBhbmQgVUkgZGVzaWduZXI7DVRlc3Rpbm
+ cgdGVhbSBwcm92aWRlIG1pc3NpbmcgdXNlIGNhc2Ugb3IgZXhjZXB0aW9uIGNhc2VzIHRvIFVJ
+ IGRlc2lnbmVyOw1BbGxvY2F0ZSBhbm90aGVyIFVJIGRlc2lnbmVyIHRvIG1ha2UgZGV0YWlsZW
+ QgVUkgc3BlY2lmaWNhdGlvbi4AAKEPIAAAAAcBAAAAACEAAAAFAAAAAAMHAQAAAAAmAAQADAAA
+ AAD+AACqDxgAAAAGAQAABwAAAAAACwQAAAEAAAABAAAAAAAAAKYPEAAAAPkAAADgAdgA1AHQAv
+ ADEAUPAATwTwUAABIACvAIAAAAFSwAAAIKAACjAAvwPAAAAH8AAAAEAIAAIPpdCIEAeGEBAIIA
+ oq0AAIMAeGEBAIQAoq0AAL8ABAAEAL8BAQAVAP8BAAAIAL8DAAACABMAIvHdAwAAqcPXAwAAUE
+ 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
+ ZyK23zHztFL6w81c5zQp6m6P9TMfB3PtPWFCczVQtB9N4U2rp2HOA44NMz4y8AAAD//wMAUEsD
+ BBQABgAIAAAAIQAYieRZ1QAAAPkAAAAPAAAAZHJzL2Rvd25yZXYueG1sRI9BTwIxEIXvJv6HZk
+ y8SVcPxKwUYkCigXhgRbkO29ltw3a6aSss/96GgxzfvMn38k1mg+vEkUK0nhU8jgoQxLXXllsF
+ 26/lwzOImJA1dp5JwZkizKa3NxMstT/xho5VakWGcCxRgUmpL6WMtSGHceR74tw1PjhMOYZW6o
+ CnDHedfCqKsXRoOS8Y7GluqD5Uv07B0q6a8fyzW1fVoH+a1frwvdCFUvd3w+sLiERDuj4v3oLZ
+ bf/LC+pDK8gmzft5H6zeYEwULpdsmi1BTv8AAAD//wMAUEsBAi0AFAAGAAgAAAAhANvh9svuAA
+ AAhQEAABMAAAAAAAAAAAAAAAAAAAAAAFtDb250ZW50X1R5cGVzXS54bWxQSwECLQAUAAYACAAA
+ ACEAWvQsW78AAAAVAQAACwAAAAAAAAAAAAAAAAAfAQAAX3JlbHMvLnJlbHNQSwECLQAUAAYACA
+ AAACEAGInkWdUAAAD5AAAADwAAAAAAAAAAAAAAAAAHAgAAZHJzL2Rvd25yZXYueG1sUEsFBgAA
+ AAADAAMAtwAAAAkDAAAAAAAAD/AQAAAAxAAAAO0MAAAHBwAAZQ8AAA8ADfD5AAAAAACfDwQAAA
+ AEAAAAAACoD48AAABJQUQgc3VwcG9ydCBpcyBkZXBlbmRpbmcgb24gQ2FsZW5kYXIgYXBwbGlj
+ YXRpb24gSUFEIHN1cHBvcnQgc2NoZWR1bGUuIEl0IG1heSBiZSBhIHJpc2sgZm9yIHJlbGVhc2
+ Ugc2NoZWR1bGUgaWYgd2UgbXVzdCBwcm92aWRlIGJpbmFyeSBkZWxpdmVyLgAAoQ8YAAAAkAAA
+ AAAAIAAAAAAAAAOQAAAAAAACAAwAAACqDxgAAACPAAAABwAAAAAACwQAAAEAAAABAAAAAAAAAK
+ YPDgAAAPEAAADgAdQB0ALwAxAFDwAE8MUEAAASAArwCAAAABssAAACCgAAowAL8DwAAAB/AAAA
+ BACAAOAhXwiBAHhhAQCCAKKtAACDAHhhAQCEAKKtAAC/AAQABAC/AQEAFQD/AQAACAC/AwAAAg
+ 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
+ oPDgAAACgAAAAHAAAAAAAJCAAADwAE8I0DAAASAArwCAAAAAUwAAAACgAA8wAL8HIAAAB/AAAA
+ 7wGAAMDm5waBAHhhAQCCAKKtAACDAHhhAQCEAKKtAAC/AAQABACBAQAAAAi/ARAAEADAAQEAAA
+ jLAc4YAAD/AQgAGAA/AwAACACAwxgAAAC/AwAAAgBSAGUAYwB0AGEAbgBnAGwAZQAgADMAAAAT
+ ACLxBgAAAP8BAABAAAAAEPAIAAAAlALJAJQXDw8PAA3w3QIAAAAAnw8EAAAABAAAAAAAqA8hAQ
+ AADUFyY2hpdGVjdHVyZQ1BcmNoaXRlY3R1cmUgcHJlLXN0dWR5IHdhcyBhcHByb3ZlZA1VSSBk
+ ZXNpZ24NVUkgc3BlY2lmaWNhdGlvbiAob25lIHBhZ2UgVUkgZmxvdyB3aXRoIGZldyB0ZXh0KS
+ BpcyBhdmFpbGFibGUsIG1pc3NpbmcgdXNlIGNhc2VzLCB1cGRhdGUgaXMgb25nb2luZy4NUGFy
+ dGlhbCBidXkNVGlldG8gaXMgcmVzcG9uc2libGUgZm9yIERheSB2aWV3IGltcGxlbWVudGF0aW
+ 9uDUlQUg1ObyBJUFIgaXNzdWUgc2luY2UgcG9ydGluZyBmcm9tIEJ1c2luZXNzIENhbGVuZGFy
+ IDkuMiBEYXkgdmlldwAAoQ82AQAAAQAAAAEAAAAAAA0AAAAAACEAAAAFAAAAAAMkAAAAAQAhAA
+ AABQAAAAADCgAAAAAAIQAAAAUAAAAAA2YAAAABACEAAAAFAAAAAAMMAAAAAAAhAAAABQAAAAAD
+ MQAAAAEAIQAAAAUAAAAAAwQAAAAAACEAAAAFAAAAAAM/AAAAAQAhAAAABQAAAAADAQAAAAAAQw
+ ADAAMACQANAAAAAABDAAMAAwAQACQAAAAABEMAAAQDAAMAEAAKAAAAAARDAAAEAwADABAAZgAA
+ AAAIQwAACAMAAwAQAAwAAAAACEMAAAgDAAMAEAAwAAAAAAxDAAAMAwADABAAAQAAAAAMQwAADA
+ MAAwAOAAMAAAAADEMAAAwDAAMAEAABAAAAAAxDAAAMAwADAA4APwAAAAAMQwAADAMAAwAQAAAA
+ qg9IAAAAAQAAAAEAAAAAAKAAAAAHAAAAAAALBAAADQAAAAEAAAAAADAAAAAHAAAAAAALBAAAAQ
+ AAAAEAAAAAAEMAAAAHAAAAAAAJCAAAAACmDxIAAAD5AgAA4AF5AKQBKQHQAvADEAUQAPAHIAAA
+ AP///wAAAAAAgICAAAAzzAAEBHcAr9TwAESlHAD58gYADwCIEzgAAAAPAIoTMAAAAAAAug8QAA
+ AAXwBfAF8AUABQAFQAMQAwAAAAixMQAAAAAADrLggAAADee8kBYNaI8gAAIgQIAAAAAQAAAAIA
+ AAAPAO4DXwsAAAIA7wMYAAAAEAAAAAAAAAAAAAAABAAAgAkBAAAHAAAAAAD5AxAAAAAAAAAAAA
+ AAAAMKAQACsP0FDwAMBKcKAAAPAALwnwoAABACCPAIAAAABwAAAAcIAAAPAAPwhwoAAA8ABPAo
+ AAAAAQAJ8BAAAAAAAAAAAAAAAAAAAAAAAAAAAgAK8AgAAAAACAAABQAAAA8ABPBTAQAAogwK8A
+ gAAAADCAAAAAoAANMAC/B4AAAAfwABAO8BgACAbTwIgQB4YQEAggCirQAAgwB4YQEAhACirQAA
+ vwAEAAQAvwEBABEAywGcMQAA/wEQABgAPwMAAAgAgMMqAAAAvwMAAAIARgBvAG8AdABlAHIAIA
+ BQAGwAYQBjAGUAaABvAGwAZABlAHIAIAAzAAAAEwAi8QYAAAD/AQAAQAAAABDwCAAAAA4QWQHF
+ C4cQDwAN8J0AAAAAAJ8PBAAAAAQAAAAAAKgPOQAAAKkgMjAwOCAgTm9raWEgCSBWMS4wIEVwaW
+ MgVGVtcGxhdGUgLnBwdCAvIDIwMDktMDgtMDQgLyBTQwAAoQ8cAAAAOgAAAAAABHAAAAAAWgAA
+ AAAAOgAAAAAAAgAIAAAAqg8OAAAAOgAAAAcAAAAAAAAEAAAAAKYPDgAAAPEAAAD+ANQB0ALwAx
+ AFDwAE8AABAACiDArwCAAAAAQIAAAACgAAgwAL8GYAAAB/AAEA7wGAAKBuPAi/AAQABAC/AQEA
+ EQD/ARAAGAA/AwAACACAwzYAAAC/AwAAAgBTAGwAaQBkAGUAIABOAHUAbQBiAGUAcgAgAFAAbA
+ BhAGMAZQBoAG8AbABkAGUAcgAgADQAAAAAABDwCAAAAAoQcABbAYcQDwAN8GoAAAAAAJ8PBAAA
+ AAQAAAAAAKAPAgAAACoAAAChDxoAAAACAAAAAAAEYAAAAAAAAAAAAgAAAAAAAgAIAAAA2A8EAA
+ AAAAAAAAAAqg8KAAAAAgAAAAEAAAAAAAAApg8MAAAA8AAAANQB0ALwAxAFDwAE8EgBAAASAArw
+ CAAAAAUIAAAgAgAAEwEL8H4AAAAEAAAAAAB/AAEA7wGAAKACPgiBAKCMAACCAKCMAACDAKCMAA
+ CEAKCMAACFAAAAAACHAAAAAACIAAAAAAC/AAQABAC/AQAAEQD/AQAAEQABAwIMAAA/AwAACACA
+ wxgAAAC/AwAAAgBSAGUAYwB0AGEAbgBnAGwAZQAgADIAAAAAABDwCAAAAAAAcQDfEEIBDwAR8B
+ AAAAAAAMMLCAAAAP////8NABMADwAN8IIAAAAAAJ8PBAAAAAAAAAAAAKgPMgAAADMuOSBJbXBs
+ ZW1lbnRhdGlvbiBQbGFubmluZzoLRXBpYyBwbGFubmluZyBzdW1tYXJ5AAChDx4AAAAzAAAAAA
+ AAAAoABwAdAAAAAAAAABYAAAAAAAIAHAAAAKoPDgAAADMAAAAHAAAAAAAJCAAADwAE8PsEAAAS
+ AArwCAAAAAYIAAAACgAA8wAL8HIAAAB/AAAA7wGAAOAEPgiBAHhhAQCCAKKtAACDAHhhAQCEAK
+ KtAAC/AAQABACBAQAAAAi/ARAAEADAAQEAAAjLAc4YAAD/AQgAGAA/AwAACACAwxgAAAC/AwAA
+ AgBSAGUAYwB0AGEAbgBnAGwAZQAgADMAAAATACLxBgAAAP8BAABAAAAAEPAIAAAAtgJwAOkXcw
+ 8PAA3wSwQAAAAAnw8EAAAABAAAAAAAqA/ZAQAAQnVkZ2V0ICYgZnVuZGluZw0xSC8yMDEwIGNv
+ c3Qgd2FzIGFwcHJvdmVkLCAySC8yMDEwIGNvc3QgaGFzIG5vdCBiZWVuIGFwcHJvdmVkLg0NRG
+ V2aWF0aW9ucyBpbiBYMC1NaWxlc3RvbmUgY3JpdGVyaWEgY2hlY2tsaXN0DWh0dHA6Ly93aWtp
+ cy5pbi5ub2tpYS5jb20vU0REaWZmZXJlbnRpYXRpbmdTVy9EU1dfWDBfTWlsZXN0b25lX0NyaX
+ RlcmlhX0RyYWZ0X3YwXzINUDEyIFByb2plY3QgaW5mb3JtYXRpb24gbWFuYWdlbWVudCBzdHJ1
+ Y3R1cmVzIGluIHBsYWNlDVAxNE1haW50ZW5hbmNlIHBsYW4gZG9uZQ1WMSBRdWFsaXR5IGtpY2
+ stb2ZmIG1lZXRpbmcgaGVsZA1WMiBQcm9qZWN0IHF1YWxpdHkgdGFyZ2V0cyBkZWZpbmVkIChx
+ dWFsaXR5IHBsYW4pDVYzIFByb2plY3QgdGVzdGluZyBwbGFuIGNyZWF0ZWQgd2l0aCB0ZXN0aW
+ 5nIHNjb3BlIGFuZCBhcHByb2FjaA1EMSBBcHByb3ZlZCBVSSBzcGVjaWZpY2F0aW9uIGV4aXN0
+ cw0AAKEPqAEAABEAAAAAACEAAAAFAAAAAAM/AAAAAQAhAAAABQAAAAADAQAAAAEAIAAAAAAAAA
+ MuAAAAAAAhAAAABQAAAAADUwAAAAAAIAAAAAAAAAMHAQAAAQAhAAAABQAAAAADAQAAAAAAIQAA
+ AAUAAAAAAxEAAAAAAEMAAwADABAAGwAAAAAEQwAABAMAAwAOACIAAAAABEcAAAQDAAMADgD/AA
+ D+AQAAAAAEQwAABAMAAwAOAAEAAAAACGMAAAgDAAQAAwAOAAEAAAAADEMAAAwDAAMADgAuAAAA
+ ABBDAAAQAwADABAAUgAAAAAUAgAAFA4AAQAAAAAUQwAAFAMAAwAMAAMAAAABFAIAARQQAAEAAA
+ AAFAIAABQQADIAAAABFAIAARQQAAEAAAAAFEMAABQDAAMADAAbAAAAARQCAAEUEAABAAAAABQC
+ AAAUEACPAAAAARQCAAEUEAABAAAAABRDAAAUAwADAAwAAgAAAAEUAgABFBAAAQAAAAAUAgAAFB
+ AAIAAAAAEUAgABFBAAAQAAAAAUQwAAFAMAAwAMAAEAAAAAFEMAABQDAAMADAAAAKoPXAAAABEA
+ AAABAAAAAAAZAAAABwAAAAAACwQAACUAAAABAAAAAAABAAAABwAAAAAACQQECC8AAAABAAAAAA
+ BSAAAAAQAAAAAACAEAAAEAAAAAAAEAAAAHAAAAAAAJCAAADwDyDxgAAAAAAPMPEAAAAAAAAAAK
+ AAAABAAAAAiQEwAAAN8PCAAAAH8AAADRAAAAAACmDxIAAAD5AgAA4AF5AKQBKQHQAvADEAUPAA
+ TwegAAALIECvAIAAAAAggAABAKAABzAAvwPgAAAARBAQAAAAsBAgAAAD8BAAABAL8BAAAQAP8B
+ AAAIAD8CAAACAIDDFAAAAE8AYgBqAGUAYwB0ACAANgA3AAAAAAAQ8AgAAACOACAWYBhQAg8AEf
+ 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
+ AAALQAAAAFAAAAzAAAAAYAAADYAAAABwAAAOQAAAAIAAAA9AAAAAkAAAAAAQAAEgAAAAwBAAAK
+ AAAAMAEAAAsAAAA8AQAADAAAAEgBAAANAAAAVAEAAA4AAABgAQAADwAAAGgBAAARAAAAcAEAAA
+ IAAADkBAAAHgAAAAgAAABTbGlkZSAxAB4AAAAEAAAAAAAAAB4AAAAQAAAAQ2xhcmtlIFN0ZXZl
+ AAAAAB4AAAAEAAAAAAAAAB4AAAAEAAAAAAAAAB4AAAAIAAAAYmxhbmsAAAAeAAAABAAAAGRsdQ
+ AeAAAABAAAADI3NgAeAAAAHAAAAE1pY3Jvc29mdCBPZmZpY2UgUG93ZXJQb2ludABAAAAA8ET9
+ bT8CAABAAAAA0GPDpdrXvQFAAAAAUCPgroXjyQFAAAAA0LgY1oj2ygEDAAAADwAAAAMAAAA4BA
+ AARwAAAKjQAAD/////AwAAAAgAiRB0CwAAAQAJAAADTGgAAAAAMWgAAAAABQAAAAsCAAAAAAUA
+ AAAMApkCwAMFAAAABwEDAAAAMWgAAEELIADMAG8AoAAAAAAAmQLAAwAAAAAoAAAAoAAAAG8AAA
+ ABABgAAAAAACDQAAAAAAAAAAAAAAAAAAAAAAAA////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////vf//cwBz//+9////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////vf//cwBz//+9////////////3v//AEKUvXMAc5S9QkJzQkJCQkJCAE
+ JCAAAAc0IA3t69c0KU//+93v//c0KUQpRzQgBCc3NCAEJz3r1zlJSUc3OUc3NzAEJzlHMAAEKU
+ 3r1zQkKUvb1zQnOUAABCAAAAvZRC3r29c5S9QkJzc0JCc3Nz3v+9QkKUc0JC3v+9QkKUQkJC3r
+ 1zQnO9lHNC///e////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////3v//3t7e/97e////////////
+ ////////////////3v///97e////////////////////3v///97e//////////////////////
+ //3t7e////////////3v//vZSU////3v//vZSU////////3t7e////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////3lIp////54xrzjEA54xr1lox52tK3lIp54Rr3mtC997W3nta54xz3oRj3nNK3mtC77
+ Wl54Rr3nNK////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////1koY54xr3mNC54Rj1k
+ oh55R7////98691mM51lox1lIp53ta9/f33nNS772t3nNK1mM51koY99bO////////////////
+ ////////////////////3v//c3OUAEJzAAAAlHMAAEKUQgAAQkJClHNC///e3v//c3OUAEJzQg
+ AA3t6U3t7eQkKUc3NCQkJzvb1z3t7eQkKU/96U////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////1kIQ1lop/+/v55yE54Rj1lox52tC3lIp54xr3mtK9869
+ 3ntS77Wc3nta9869997W3koY55Rz////////////////////////////////////////////Qk
+ JKY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3Nz
+ Y2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2
+ tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tz
+ a3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3NzY2tza3
+ NzY2tza3NzGCEh////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////GBgY5/f35+/v5+/35+/v5/f35+/v
+ 5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/
+ f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/3
+ 5+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+
+ /v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/vCAgI////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////AAAA//////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////AAAA//////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////AAAA3v
+ //QkKUc3NC3t69c3OUQkJzlJRCc3OUc3NzQkJzc0JC//+9////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////QnO9AEJClHMAQkKUQkJCvb1zc0KUc5RzlHNz///e////
+ //////////////////////////////////////////////////////////////////////////
+ //////AAAA////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////AAAA////////3v///97e////////////
+ ////////////3t7////e//////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////3t7e//////////////////////////////////////////////
+ //////////////////////////////////////////////////////AAAA////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////AAAA//////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////AAAA////////////////7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v////7+/v
+ 9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v////9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v
+ 7+/v9+/v7+/v9+/v7+/v9+/v7+/v////////////////////////////////////KTEx7/f39/
+ f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f3
+ 7/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/
+ f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f3
+ 9/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f3//
+ //AAAA////////////////9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v
+ 7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v////9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+
+ /v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn
+ 9+/v7+fn////7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+
+ /v////////////////////////////////////KSkx1v//QkKUa3NC1ta1a3OUQkJrlJRCa2uU
+ lJRztbW1QkKUtbVr1r299/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39/
+ //9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///
+ Qmu1AEJClGsAQkKUQkJCtb1za0KUa5RzlGtr9//e9/f39///9/f39///9/f39///9/f39///9/
+ f39///9/f39///9/f39///9/f39///9/f39///9/f39///////AAAA////////////3v//AEKM
+ a2sAAABrQgAAAEJCtYxCQmuMAABCrWsA9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v////zu/vQkKMAEJCAAAAAAAAQgAAAEJCa0IAQkJr1s6MAEKMlGsAAEKMQgAA
+ jIxCQkKMa0JC9++t7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v////QmutAEJCAAAAaw
+ AA9++t7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v////////////////////////
+ ////////////KTEx7/f39/f3zvf399be7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/
+ f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f3
+ 9/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f3ztbW9/
+ f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f3
+ 7/f39/f/7/f39/f37/f3////AAAA////////////////////////////////3v//3r29//////
+ //////////////////////////////////////////////////////////////////////////
+ ////lN7/3pRz////////////////////////3v//3r29//////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////KSkp9///9/f39/
+ //9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///
+ 9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/
+ f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f3
+ 9///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///////AA
+ AA////////////////3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O////3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s
+ 7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ 3tbW////3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O//
+ //////////////////////////////////AAAA////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////AAAA////////////////3tbW1s7O
+ 3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3t
+ bW1s7O3s7O////3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O
+ 1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O////1s7O3s7O1s7O3tbW1s
+ 7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3s7O////////////////////////////
+ ////////AAAA3v//vb29QkKUvb1zc3OUQkJzvb1zQkKUvb1z3t7eAEKUQgAAAEJCvZRC3t7eQk
+ KUQkJCAEJCAAAA3pRC////////////////////////////////////////////////////////
+ ////////////////////////////////////////////c3O9c5RzlHNz///e//////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////AAAA////////////3v//ADF7hFoAADF7pXs5pXt73tbW3s7O3tbW3s
+ 7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O////vc7OpZycADF7
+ AAAAOTEAAAA5AAAAOQAAADExAAAAAAAApVoA3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3t
+ bW3s7O3tbW3s7O3tbW3s7O3tbW////UlKcADFaMQAAYylK3tac3s7O3tbW3s7O3tbW3s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O////////////////////////////////////AAAA//////////////
+ //////////////////3v///97e////////////3v///97e////3t7////e////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////AAAA//
+ //////////////3s7Otc7OpZyctZSU3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW
+ 1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW////3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s
+ 7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O
+ ////1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3tbW//////
+ //////////////////////////////AAAA////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////AAAA////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////AAAA//////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////AAAA////////////////hISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE////hISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISE////hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISE////////////////////////////////////KSkx1v//a2uU1t69AEKUlH
+ MAlGuU1v/eAEKUAAAAlEIA9//e9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///
+ 9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/
+ f39///9/f39///a2u1a5RzQkJra3NClGtr9//e9/f39///9/f39///9/f39///9/f39///9/f3
+ 9///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///9/f39///////AAAA//////
+ //////////hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISE////hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE////
+ 59bG///n////1uf//+fW1uf/ra3GxsbG/+fG5+f////n////rdb/hISEhISEhISE//////////
+ //////////////////////////KTEx7/f31vf379bW9/f/7/f31vf3lJSU99be7/f39/f37/f3
+ 9/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/
+ f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/
+ 7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/f39/f/7/f39/f37/
+ f39/f/7/f39/f37/f39/f/7/f39/f37/f3////AAAA////////////////hISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SE////hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE////hISEhISEhISEhISEhISElISElK
+ 2thISEhISEhISEhISEhISEhISEhISEhISEhISE////////////////////////////////////
+ UlJS5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u
+ /v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv
+ 5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+
+ /33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f33u/v5+/33ufv5/f3
+ 3u/v5+/35+/vISEh////////////////hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE////hISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISE////hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISE////////////////////////////////////OUpK3ufv5+/33ufn5+/v3ufv5+
+ /33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v
+ 3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33u
+ fn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv
+ 5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/v3ufv5+/33ufn5+/3AAgI//////////
+ ///////+fG////5////+fn1uf/ra3G1tbG/+fWxtb/ra2txsbG1ufGhISthISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISE////lISE/+fG////1uf//+fW////////1uf/ra3G/+fGxsbn5/
+ /WlJTG/+fG5////+fn5+f/5//nhJTGhISEhISEhISEhISEhISEhISEhISEhISEhISE/////+fG
+ ////rcbnra2t/+fG////xtb/1ufGhISthISEhISEhISEhISEhISEhISEhISE//////////////
+ //////////////////////AAAA////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////AAAA////////////////hISEhISEhISEhISEhISE
+ ra2UhISUhISElISElK2thISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE//
+ //hISEhISEhISEhISEhISEhISEhISElISEra2tra2tlK2thISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISE////hISElISEra2tlK2thISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISE////////////////////////////////////AAAA
+ 3v//AEKUlHMAvb29lJSUAEKUQgAAAEJClEIA///evf//c3NzAABzAAAAc3MAAABzAAAAvXMA//
+ //3v//AEKUc0IAQkJzAEJCAAAAAAAAAAAAAAAAQkIAAABCAAAAlHMAvZSU////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////AAAA//////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////AAAA////////3v//3r293v//3r29//
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////vf///729//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////AAAA//////////////
+ //hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE//////////////////
+ //////////////////AAAA////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////AAAA/////////////////+fG////1v//rYSt///W////
+ ////////////////////5///rZTGxtbWxq2t///Wxuf/hISUhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISE////////////////////////////////////AAAA3v//
+ c3OUAEJzlJRCc3NzAABzAAAAAAAAlHMAAEKUlHMAlL29AABzQgAA/96U////3v//lJSUQkKUc5
+ RCAABzAAAAlHMAlHOU3v/evb29QkKUlHNC3v/eAEKUAAAAc3MAAABzAAAAQgAA/96U////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////AAAA////////////////hISEhISEhISEhISErZSEhJSthISEhISEhISErZSEhJSthISEhI
+ SElISElK2thISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISE////////////////////////////////////OTk55+/v5+/vxu/vxq215+/v5+/v5+/v5+
+ /35+/v5+/vxu/vxq215+/v5+/v5+/v5+/35+/v5+/v5+/v5+/35+/v5+/v5+/v5+/35+/vra2t
+ 5+/v5+/35+/v5+/v5+/v5+/35+/v5+/vrc7v58615+/v5+/v5+/v5+/35+/v5+/v5+/v5+/35+
+ /v5+/v5+/v5+/35+/v5+/v5+/v5+/35+/v5+/v5+/v5+/35+/v5+/v5+/v5+/35+/v5+/v5+/v
+ 5+/35+/v5+/v5+/v5+/35+/v5+/v5+/v5+/35+/v5+/v5+/v5+/3GBgY////////////9/f3//
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////GBgY5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v
+ 5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/
+ f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/3
+ 5+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+/v5+/35+/v5/f35+
+ /v5+/35+/v5/f35+/v5+/35+/vCAgI////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////AAAA////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ AAAA//////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////AAAA//////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////AAAA//////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////AAAA////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////AAAA////////////////9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn
+ 9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+
+ /v7+fn9+/v7+/v9+/v7+fn9+/v7+/v////7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v
+ 7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+
+ fn9+/v7+/v9+/v7+fn9+/v7+/v////////////////////////////////AAAA////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////AAAA
+ ////////////3v//ra2tAEKMa2sAAABrAAAAlGsAQkKMlIxCjK2tAABrAAAAAAAAAAAAAAAAjI
+ xCAABrQgAAQmtCQgBC986M7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v
+ 9/f33v//QkKMQkJCAEJCQgAAAEJCrYxCQkKMAEJCAAAAa0IAQkJrrYxC1u/vQkKMQkJCAEJCAA
+ AAQgAAlIxCra2tlIyMQkKMQkJCQkJCQkJCQkJC986M7+/v9+/v7+/v9+/v7+/v9+/v7+/v9/f3
+ ////////////////////////////////AAAA//////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////AAAA//////////////////f37+fn9/
+ f37+/v//f37+fn9/f3zu/v3rW17+fn9/f37+/v//f3zufn1rW17+/v//f37+fn9/f37+/v//f3
+ 7+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn////7+/v//f3zufn1rW1zu
+ /vvbW1zq2t9/f37+/v//f37+fn9/f37+/v//f37+fn9/f3zu/v3rW1zufn1rW17+/v//f37+fn
+ 9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn//////////////////////////
+ //////AAAA////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////AAAA////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////AAAA////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////AAAA////
+ ////////////3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s
+ 7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ ////3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3t
+ bW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O////
+ ////////////////////////////AAAA//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////AAAA////////////3v//ADmEAAAAYzkAjI
+ xjADmErYw5OTmEADk5AAAAAAAAAAAArWMA597e5+fn597e7+fn597e5+fn597e7+fn597e5+fn
+ 597e7+fn597e5+fn597e7+fn597e5+fn597e7+fn597e7+fn3v//QjmMOTk5ADk5rYQ5ra2tAD
+ mEOQAAOTk5jIw5ADmErYw5OTmEjIw5OTmExq1j597e7+fn597e5+fn597e7+fn597e5+fn597e
+ 7+fn597e5+fn597e7+fn597e5+fn597e7+fn597e7+/v//////////////////////////////
+ //AAAA////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////AAAA////////////////////9/f3//f39/f3////9/f3//f39/f3////9/f3
+ //f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3//
+ //9/f3//f39/f3////9/f3////9/f3////1vf3vbW11rW1////9/f3//f39/f33v//1rW1//f3
+ 9/f33v//1rW1//f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/
+ f3//f39/f3////9/f3////////////////////////////////AAAA////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////AAAA////////
+ ////////7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v//f3////
+ 9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v//f3////////
+ ////////////////////////AAAA//////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////AAAA////////////3v//AEKMa2sAlGtrADmMtY
+ xCa4yMAABrjGMAtYyM7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v
+ 7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v3v//jK2tAABrAAAAAAAArYw5AEKMjG
+ sAQkKMra1ja0KM7++t9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn
+ 9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v////////////////////////////////AA
+ AA////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////AAAA////////////////9/f3//f3zu/vvbW11rW1//f37+/v//f39/f3//f37+/v
+ //f39/f3//f37+/v//f39/f3//f37+/v//f39/f3//f37+/v//f39/f3//f37+/v//f39/f3//
+ f37+/v//f39/f3//////////f39/f3//f3zu/v3rW11vf33rW1zu/v3rW19/f3//f37+/v//f3
+ 9/f3//f37+/v//f39/f3//f37+/v//f39/f3//f37+/v//f39/f3//f37+/v//f39/f3//f37+
+ /v//f39/f3//f3////////////////////////////////AAAA////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////AAAA////////////
+ //////////f3//////////////f3//////////////f3//////////////f3//////////////
+ f3//////////////f3//////////////f3//////////////f3//////////////f3////////
+ //////f3//////////////f3//////////////f3//////////////f3//////////////f3//
+ ////////////f3//////////////f3//////////////f3//////////////f3////////////
+ ////////////////////AAAA//////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////AAAA////////////////3tbW3tbW3tbW3tbW3tbW3t
+ bW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW
+ 3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW597e////3tbW3tbW3tbW3tbW3tbW3tbW3tbW3t
+ bW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW
+ 3tbW3tbW3tbW3tbW3tbW3tbW3tbW3tbW597e////////////////////////////////AAAA//
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////AAAA////////////3v//ADl7pXsxADl7AAAAYzkAhJR7AABaAAAAAAAApVoA3tbW3s7O
+ 3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3t
+ bW3s7O3tbW3s7O3v//ADF7AAAAAAAAYzkAOTFahHs5OTF7OTk5va17OTl7OTExpZxaOTF7ADk5
+ vXsx3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s
+ 7O3tbW3s7O////////////////////////////////AAAA////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////AAAA////////////////
+ 597e5+fn597e7+fnxt7exq2t597e7+fn597e5+fn597e7+fn597e5+fn597e7+fn597e5+fn59
+ 7e7+fn597e5+fn597e7+fn597e5+fn597e7+fn597e5+fn597e7+fn597e7+fn////7+fn597e
+ 5+fn597e7+fn597e5+fn597e7+fn597exufnxqWl7+fnxt7exq2t597e7+fn597e5+fn597e7+
+ fn597e5+fn597e7+fn597e5+fn597e7+fn597e5+fn597e7+fn597e7+/v////////////////
+ ////////////////AAAA//////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////AAAA////////////////////9/f3//f39/f3////9/f3//
+ f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3////
+ 9/f3//f39/f3////9/f3//f39/f3////9/f3////9/f3////9/f3//f39/f3////9/f3//f39/
+ f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3//f39/f3////9/f3
+ //f39/f3////9/f3//f39/f3////9/f3////////////////////////////////AAAA//////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //AAAA////////////////7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v
+ 9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v//f3////9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v
+ 7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v//f3////////////////////////////////AAAA////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////AAAA////////////////9+/v
+ 7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+
+ fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v////7+fn9+/v7+/v
+ 9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+
+ /v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v////////////////////
+ ////////////AAAA//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////AAAA////////////3v//QkKMa4xCAABrAAAAAAAAlGsAjIyMAE
+ KMrYxCQkKMAEJCAAAAAAAAAAAArWsA9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v
+ 7+/v9+/v7+/v9+/v7+/v9+/v7+/v9/f33v//AEKMAAAAAAAAa0IAAEJra0IAta2MQkKMta1rra
+ 2tlIyMra2tAEKMAAAAQgAA786M9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v
+ 9+/v7+/v9+/v7+/v9+/v7+/v9/f3////////////////////////////////AAAA//////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////AA
+ AA//////////////////f37+fn9/f3rc7v/9a17+fn9/f37+/v//f37+fn9/f37+/v//f37+fn
+ 9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//
+ f37+fn////7+/v//f37+fn9/f37+/v3vf3zq2t1vf3ra2t3rW1zufn1rW17+/v//f37+fn9/f3
+ 7+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+
+ fn////////////////////////////////AAAA////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////AAAA////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////AAAA//////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////AAAA////////////////3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s
+ 7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW
+ 1s7O3s7O1s7O3tbW1s7O3s7O1s7O////1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s
+ 7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O
+ 3s7O1s7O3tbW1s7O3s7O1s7O////////////////////////////////AAAA//////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////AAAA//
+ //////////3v//OTF7Y3s5AABaY1oAAABahFoAhHt7ADl7pXsxOTl7ADExAAAAAAAAAAAApVoA
+ 3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O59
+ 7e3v//ADl7AAAAAAAAAAAAYzkAADFaAAAAAAAAOQAA3q17vdbWY1p7OTla3q173tbW3s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O597e//
+ //////////////////////////////AAAA////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////AAAA////////////////5+fn3tbWxt7e
+ vZyc5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3t
+ bW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW////3tbW5+fn3tbW597evdbW
+ xq2t3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW59
+ 7e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW////////////////////////////
+ ////AAAA//////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////AAAA////////////////9/f3//////f3////9/f3//////f3////9/f3//
+ ////f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////
+ 9/f3//////f3////9/f3////////////9/f3//////f3////9/f3//////f3////9/f3//////
+ f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/f3
+ //////f3////9/f3////////////////////////////////////AAAA//////////////////
+ //////////////////////////////////////////////////////////////////////////
+ lJTe//+9//////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////AAAA//////
+ //////////9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn
+ 9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v//
+ //7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v
+ 7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v//////
+ //////////////////////////AAAA////////////////////////////////////////////
+ ////AHO93r1zAEKU3r1zvb29QkKU/96U3v//AEKUlHMAvb29lL29vZSUAEKU3r1zvb293r29vd
+ 7eAEKUQgAA3t6U3r29////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////AAAA////////////3v//AEKMAAAAa0IAta2M
+ AEKMAAAAa0IAa2trAEJrAAAAjGsAAEKMAAAAtWsA7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9/f33v//AEKMrYxCQkKMjIxCQkKMQkJC
+ AEJCAAAAAAAAAAAAAAAAQgAAQkJCQkJCQkJCjIxCa0KM7++t9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9/f3////////////////////////////////
+ AAAA////////////////////////////////////3qXe/96U////c3O93v+9AEKU3pRC////AH
+ O9/71z3v//AEKUlHMAc0KUAHNzvZRCAEKU3r1zAEKUvb1zvZSUQkKUAEJC3r1zc0KU//+9////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////AAAA//////////////////f37+fn1vf3zq2t//f37+fn9/f37+/v//f37+fn9/
+ f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f3
+ 7+fn9/f37+/v//f37+fn////7+/v//f37+fn1vf3ra2t3rW17+fn9/f37+/v//f37+fn9/f37+
+ /v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn9/f37+/v//f37+fn
+ 9/f37+/v//f37+fn////////////////////////////////AAAA//////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////AAAA//////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////AAAA////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////AAAA////////////////3s7O1s7O3tbW1s7O3s7O
+ 1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s
+ 7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O////1s7O3s7O1s7O3tbW1s7O3s7O1s7O
+ 3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s
+ 7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O////////////////////////////////AAAA
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////AAAA////////////3v//Y1p7OTlapZRaY1p7ADFaAAAAhFoAADl7AAAApVoA3s7O3t
+ bW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW
+ 3s7O3tbW3s7O597e3v//ADl7AAAAAAAAAAAAOQAAva17Y1p7hJR7AABaAAAAAAAAhDEA3ta13s
+ 7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ 3tbW3s7O597e////////////////////////////////AAAA//////////////////////////
+ //////////////////////AHO93r1zAEKU3r1zvb29QkKU/96U3v//AEKUlHMAvb29AEKU3pRC
+ 3t7elJS9///e//////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////AAAA//////////////
+ //5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW
+ 597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW////3tbW5+
+ fn3tbW597e3tbW5+fnvdbWxqWl3tbWrcbn3rWc597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e
+ 3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW597e3tbW5+fn3tbW//////////////
+ //////////////////AAAA////////////////////////////////////3qXe/96U////c3O9
+ 3v+9AEKU3pRC////AHO9/71z3v//AEKUlHMAQkKUAEJCvb1zlJSUcwBz//+9//////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////AAAA////////////////9/f3//////f3////9/f3////
+ //f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/
+ f3//////f3////9/f3//////f3////9/f3////////////9/f3//////f3////9/f3//////f3
+ ////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/f3//////f3////9/f3//
+ ////f3////9/f3//////f3////9/f3////////////////////////////////////AAAA////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////AAAA////////////7+/vhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISElJSU9/f3hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISElJSU////////////////////////////////AAAA//////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////AAAA////////////9/f35+
+ fG1sbn///W1tb////Wxtb/rcbGlISE1sbG///W5////+fnxuf/hISUhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISElJSU9/f3/+fG5////+
+ fn5+f/5//nhJTGhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISElJSU//////////////////
+ //////////////AAAA////////////////////////////////vf///729////////////////
+ ////////////////3t7////e//////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////AAAA////////////9/f3paWlnJyctaWltb29paWlnJycpaWl
+ paWlpaWlnJycpaWlpaWlpaWlnJycpaWlpaWlpaWlnJycpaWlpaWlpaWlnJycpaWlpaWlpaWlnJ
+ ycpaWlpaWlpaWlnJycpaWlpaWlpaWlpaWl9/f3paWlpaWlnJycpaWlpaWlpaWlnJycpaWlpaWl
+ paWlnJycpaWlpaWlpaWlnJycpaWlpaWlpaWlnJycpaWlpaWlpaWlnJycpaWlpaWlpaWlnJycpa
+ WlpaWlpaWlnJycpaWlpaWlpaWlpaWl////////////////////////////////AAAA////////
+ ////3v//3r293v//vb29AEKU3pRCvd7eQkKU3t6Uc0KUlJRz3v/eAEKUQgAA/96UlJS93v/eAE
+ KUvZRCQkKU3t6UAEKUvZRCQkKU3t6Uvb29vb29AEKUvZRCQkKU3t6Uvb29vb29c0KUvd6UQkKU
+ /96UQnO93t6UAEKU3r1zvb29QkKU/96U//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ AAAA////////////7+/v5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn
+ 5+fn7+/v7+/v5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+
+ fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn5+fn
+ 7+/v////////////////////////////////AAAA////3qXe/96U3v//AEKUvZRCc0KUAHNzvb
+ 1z3pSUAHO9/71zAHO9cwAA3v+9lL29AABzvb1zvb29/729AHO93pRCAHO93r1zAEKU/71zAHO9
+ 3r1zAEKU/71zAHO93pRCAHO93r1zAEKU/71zAHO9vXMAAHO93r1zQkKU3t6UAEKU3r1zc0KUAH
+ Nz/71z////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////AAAA//////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////AAAA////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////AAAA////////////9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s
+ 7O3tbW3s7O3tbW3s7O3tbW3s7O7+fn9+/v3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ 3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW797e9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3t
+ bW3s7O3tbW3s7O3tbW3s7O7+fn////////////////////////////////AAAA////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////AAAA
+ ////////////7+/v3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s
+ 7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW
+ 597e9+/v1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s
+ 7O3tbW1s7O7+fn7+/v3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW597e
+ ////////////////////////////////AAAA//////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////AAAA////////////1vf3OTF7OTk5pZ
+ RaOTl7OTEx3rV7OVqUADk5hFoAOTl7pXsx3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ 3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O7+/v1u/vADl7hFoAYzl7AFpaOQ
+ AA3q173tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW797e9/f33s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O7+/v//////////////////////////
+ //////AAAA////////////////////////////////////////////////vd7eAEKUvZRC3r29
+ ////AHO93r1zAEKU3r1zvb29QkKU/96U//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////AAAA////////////////////////vb29////////////////////////
+ vf///729//////////////////////////////////////////////////////////////////
+ //////////////////////////////////3v//3r29////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////AAAA////////////////
+ ////////////////////////////vf//lEJzAHOU3r1zc0KU//+9c3O93v+9AEKU3pRC////AH
+ O9/71z////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////AAAA////
+ ////////////7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v//f3
+ ////9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v9+/v9/f3////7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v//f3////
+ ////////////////////////////AAAA//////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////AAAA////////////9/f39+/v7+fn9+/v7+
+ /v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn
+ 9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v9+/v////7+/v9+/v7+fn9+/v7+/v9+
+ /v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn//f39/f39+/v7+fn9+/v
+ 7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v9+/v//////////////////////////////
+ //AAAA////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////3t7////e////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////AAAA////////////3v//AEKMQgAAra1rQkKMQkJC986MQmutAEJCjGsAQkKM
+ rYxC9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v9+/v7+/v9+/v7+/v//f33v//AEKMa0IAAEJrAAAAQgAA786M9+/v7+/v9+/v7+/v9+/v7+/v
+ 9+/v7+/v9+/v7+/v9+/v7+/v9+/v9/f3////7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v//f3////////////////////////////////AAAA////////////////////
+ ////////////////////////vf//AABz3pRCAHO9/71zvb3e///e////vb3e3v/eAEKU/71zvb
+ 3e///eQpTe/71zQpTe/71z////3v//AEKUAAAA3r1zvb29QkKU3t6Uvb29vb29AEKUvZRCAEKU
+ 3r1z3r293v//AEKUvZRCAEKU/71zlJS9///ec3O9vd6UQkKU/96Uc3O9c3Nz//+9c3O9c3Nz3t
+ 6Uc5S9vb2U3r29////lJS9vd69vb29lL293r29AEKU3pRCvd7elL29AABC/96UAAAA////////
+ ////9/f39+/v7+/vta2t7+fn9+/v7+/v9+/v7+fn9+/vre/v962t7+fn9+/v7+/v9+/v7+fn9+
+ /v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v9/f3////
+ 7+fn1u/vzq2t9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+
+ /v//f39/f39+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v9/f3////////
+ ////////////////////////AAAA////////////////////////////////////3qXe/96U//
+ //QpTe/71zc3O9//+9AHO93r1zlHOUAHOl3r1zAEKU3pRCAHO93r1zAEKUvZRCAEKU3pRC////
+ 3v//AEKUAAAA3r1z3r29AHO93r1zAEKU/71zAHO9vZRCAEKU3r1zc0KU3v+9AEKUvZRCAEKUvb
+ 1zvb293r29lN7evXNCAHO93r1zvd7elJSU3r29vd7eQpSUc3NCQgBzAEJC/71zvf//AABzvZRC
+ AEKUAAAA/71zAHO9c3MAvZSUAEKUAAAA/71zAAAA//////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////////////////////////////////////AA
+ AA////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////AAAA////////////7+/v3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O
+ 1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s
+ 7O3s7O1s7O3tbW597e9+/v1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O
+ 3tbW1s7O3s7O1s7O3tbW1s7O7+fn7+/v3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s
+ 7O1s7O3tbW597e////////////////////////////////AAAA////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////AAAA////////////
+ 9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3t
+ bW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O7+/v9+/v3tbW
+ 3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW79
+ 7e9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O7+/v////////////
+ ////////////////////AAAA//////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////AAAA////////////zu/vOTF7WjEx3tac1s7O3s7O1s
+ 7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O
+ 3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O597e1vf3ADF7YzEAOTFaYzk5Wlpa3s6U1s7O3t
+ bW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O7+fn7+/v3s7O1s7O3tbW1s7O3s7O
+ 1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O597e////////////////////////////////AAAA//
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////AAAA////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////3v//3r29////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////AAAA////////////3v//AEKUvZRCAEKU
+ 3r1z3r29lJS93v/eAEKU3pRC3t7e////AHO93r1zAEKU3r1zvb29QkKU/96U3v//AEKUAAAA3r
+ 1zvb29QkKU3t6Uvb29vb29AEKUvZRCAEKU3r1z3r293v//lL29vZSUQkKU/96UQnO9c3NCAEJz
+ vZRCvb29AEKU/71zlJS9vd69AEKUvZRCvb293r293v//AEKUAAAA3pRCvd7eQkKU3r1zvf//AA
+ Bz3pRCAHO9vXNC///e////vb3e///eAHO9/71zAHO9AEJCAAAAvXMAAAAA////////////9/f3
+ 9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+
+ /v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v9+/v////7+/v9+/v
+ 7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn//f39/
+ f39+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v9+/v////////////////
+ ////////////////AAAA////////////3v//AEKU3r1zAEKU3r1zAEKUcwAA//+9AHO9vb1zlE
+ Jz///ec3O93v+9AEKU3pRC////AHO9/71z3v//AEKUAAAA3r1z3r29AHO93r1zAEKU/71zAHO9
+ vZRCAEKU3r1zc0KU3v+9AEKU3pRCAHO93r1zAEKUcwAAAHNz3r1zQkKUAEJCvb1zAABz3pRCAH
+ O93r1zAEKU/71z3v//AEKUAAAAvb1z3pSUQnO9/96U////QpTe/71zc3O9AHNz3r1zlHOUAHOl
+ /71zc3O9//+9AHO9AAAAAAAA/96UAAAA////////////////7+/v9+/v7+/v9+/v7+/v9+/v7+
+ /v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v
+ 9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v//f3////9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+
+ /v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v7+/v9+/v9/f3////7+/v9+/v7+/v9+/v7+/v9+/v
+ 7+/v9+/v7+/v9+/v7+/v9+/v7+/v//f3////////////////////////////////AAAA//////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //AAAA////////////1vf3AEKMQgAA986M7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v
+ 7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+
+ fn9+/v9/f33v//ADmMa0IAa0JrQmtrQjk5986M7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v
+ 9+/v7+fn9+/v7+/v//f39/f39+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+/v7+/v9+/v7+fn9+
+ /v9/f3////////////////////////////////AAAA////////////////////////////////
+ vf///729//////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////3t7////e//////////////////////////////////////////////////////
+ //////////////////////////////////////////////////AAAA////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////3v//3r29
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////AAAA////////////3v//3r293v//vb29AEKU3pRCvd7eQkKU3t6Uc0KUlJRz3v
+ /eAEKUvZRCQkKU3t6U3r293t7eQnO9QkJC3t6U3r29vd7eQkKU/96UQnO93t6UAEKUAAAA3r1z
+ vb29QkKU3t6Uvb29vb29AEKUvZRCAEKU3r1z3r293v//AEKUvZRCAEKU/71zlJS9///ec3O9vd
+ 6UQkKU/96Uc3O9c3Nz//+9c5S9AEJz3pRC////AHO93r1zAEKU3r1zvb29QkKU/96U3v//AEKU
+ /71zQnO93t6UAEKU/71z////AAAA////////////7+/v3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s
+ 7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O
+ 3s7O1s7O3tbW1s7O3s7O1s7O3tbW597e9+/v1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3t
+ bW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O7+fn7+/v3tbW1s7O3s7O1s7O3tbW1s7O3s7O
+ 1s7O3tbW1s7O3s7O1s7O3tbW597e////////////////////////////////AAAA////3qXe/9
+ 6U3v//AEKUvZRCc0KUAHNzvb1z3pSUAHO9/71zAHO9cwAA//+9AHO93pRCAHO93r1zlL29vZSU
+ vd7eAABz3r1zAEKU3pRCAHO93r1zQkKU3t6UAEKUAAAA3r1z3r29AHO93r1zAEKU/71zAHO9vZ
+ RCAEKU3r1zc0KU3v+9AEKUvZRCAEKUvb1zvb293r29lN7evXNCAHO93r1zvd7elJSUvb29cwBz
+ AHNz/71z////c3O93v+9AEKU3pRC////AHO9/71z3v//AEKU3r1zQkKU3t6UAEKU/71z////AA
+ AA////////////9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s
+ 7O7+/v9+/v3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ 3tbW3s7O3tbW797e9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O7+
+ /v////////////////////////////////AAAA////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////AAAA////////////zu/vOVp7AAAx
+ AAAAWloAAABaAAAApVoAtc7OOTF7ADExAAAAWloAAABaOQAAOTk5tZRa3s7O1s7O3tbW1s7O3s
+ 7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O597e9/f31s7O3s7O1s7O3tbW
+ 1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O7+fn7+/v3s7O1s
+ 7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O1s7O3tbW1s7O3s7O597e////////////////////////
+ ////////MTExAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAMTEx////////////9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s
+ 7O3tbW3s7O3tbW3s7O3tbWvc7OvZyc3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O
+ 3tbW3s7O3tbW3s7O3tbW3s7O7+fn9+/v3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3t
+ bW3s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW797e9/f33s7O3tbW3s7O3tbW3s7O3tbW3s7O3tbW
+ 3s7O3tbW3s7O3tbW3s7O7+fn//////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////1tbWhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEtbW11tbWhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEtbW11tbWhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEtbW1////////////////////////////
+ ////////////////////////3sb/zjEA/8Zz//////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////1s7O/+fGrcbnra2txq2t///W1uf/1sbW///W//////
+ //xuf/hISUhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEtbW11tbW5+fG5+fn1sbn///W////rdb/hISEhISEhISEhISEhISEhI
+ SEhISEhISEhISEhISEhISEhISEhISEtbW11s7O1tbGxtbWhISUhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEtbW1////////////////////////zoS9/8Zz////1oS9/96U1qXezjEA3j
+ EA1qWU/8Zz1qXezjEA51oA1qW9zjEA96VC1qXe1jEA/96UzoS9/8Zz////zoS9zjEAzjEA51oA
+ 1oSU996U1lqU/96U//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////1tbWhISElISEra2tlK2thISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEtbW11t
+ bWhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISE
+ hISEtbW11tbWhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEtbW1//////
+ //////////////////zoS91jEA/96U1oS9996U1lqU/96UzoS91lpC98ZzzlqUzjEA1jEA1lpC
+ /96U////1qXe/8Zz////zoS91jEA/96UzoS9zjEA78Zz51pz1oSU996U1lqU/96U//////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////zoS998Zz
+ 3lqUzoRz1jEAzlpCzjEA1jEAzlpC/8ZzzoS9zjEA1jEAzlpCzjEA/8ZzzoS93jEA//+9zoS998
+ Zz3lqU1oRz1oRzzjEA51oAzoSUzjEA1jEA/96U////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////zoS9zjEA3jEA//+9//////////////////
+ //////////////////////////////1qXe/8Zz////zoS9zjEA3jEA1oRz/96U////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////1qXe/8Zz////////////////////
+ ////////////////////////////1oS9/96U//////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////1oS9/96U////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ zoS9zjEA51oA///e//////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////7///zjFzzjEA76VCzlqU98ZzzlqU74QA1oS9996U1lqU796U3jFzzoRzzjEA51oA1oSU
+ 1oRzzjEA51oA1oSU996U1lqU796U3jFz1qWUzjEA51oA1oSU996U1lqU1oRzzjEAzjEAzjEA51
+ oA1qW91jEA1oRz/8Zz1qXezjEA3jEA1oRz996U1lqU/96U////zoS9/8Zz////zoS9zjEAzjEA
+ 51oA1oSU996U1lqU1lpC996U1lqU1oRz/8Zz1oS9996U1lqUzlpCzjEA1jEA/96U//////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////3sb/74QA////
+ ////1qXe96VC1oS9996U1lqU796U3jFz1oRz/96UzoS9zjEAzjEAzjEA3jEA1oRz996U1lqU79
+ 6U1jFzzlpCzjEA3jEA1oRz996U1lqU1oRz98ZzzlqU78Zz51pz1qW9/8Zz1qXe98Zz1lqU/96U
+ zoS91jEA996U1lqU/96U////zoS91jEA/96UzoS9zjEA78Zz51pz1oSU996U1lqU1lpC996U1l
+ qU1oRz/8Zz1oS9996UzlqU1jEA996U1lqU/96U////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////1qXezjEA/8Zz////////1qXe96VCzoS9zjEAzjEAzj
+ EA3jEAzoRzzjEA1jEA1lpCzlpCzjEA3jEAzoRzzjEAzjEAzjEA3jEAzoRzzjEA3jEAzoRzzjEA
+ 1jEAzlpC3jEA1qWUzjEA51oAzoSU3jEAzoRz98ZzzlqUzjEA1jEAzlpCzjEA1jEA/96U////zo
+ S998Zz3lqU1oRz1oRzzjEA51oAzoSUzjEA1jEAzlpCzjEA1jEAzlpC/8ZzzoS9zjEAzjEAzjEA
+ zjEA1jEA/96U//////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////zoS9zjEA74QA////////zoS996VC////////////////////////////////1oS9/96U
+ ////////////////////////////////////////////////////1qXe/8Zz////////////1q
+ Xe/8Zz////////////////////////////////////////zoS9zjEA3jEA1oRz/96U////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ ////////////////////////////////////////1oS9/96U//////////////////////////
+ //////////////////////////////////////////////////////1qXe/8Zz////////////
+ ////////////////////////////////1oS9/96U////////////////////////////////1q
+ Xe/8Zz////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////AwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAA/v8AAAUBAgAAAAAAAAAAAAAAAAAAAAAAAgAAAALVzdWc
+ LhsQk5cIACss+a5EAAAABdXN1ZwuGxCTlwgAKyz5rkwEAAAIBAAAEQAAAAEAAACQAAAAAwAAAJ
+ gAAAAOAAAAuAAAAA8AAADEAAAABAAAANgAAAAGAAAA4AAAAAcAAADoAAAACAAAAPAAAAAJAAAA
+ +AAAAAoAAAAAAQAAFwAAAAgBAAALAAAAEAEAABAAAAAYAQAAEwAAACABAAAWAAAAKAEAAA0AAA
+ AwAQAADAAAAI0DAAACAAAA5AQAAB4AAAAYAAAAQTQgUGFwZXIgKDIxMHgyOTcgbW0pAAAAHgAA
+ AAQAAAAAAAAAHgAAAAwAAABOb2tpYSBPeWoAAAADAAAAyQUPAAMAAACnAQAAAwAAAAoAAAADAA
+ AACgAAAAMAAAAAAAAAAwAAAAAAAAADAAAAAAAMAAsAAAAAAAAACwAAAAAAAAALAAAAAAAAAAsA
+ AAAAAAAAHhAAABQAAAAQAAAATm9raWEgU2FucyBXaWRlAAYAAABBcmlhbAAMAAAATm9raWEgTG
+ FyZ2UACwAAAE5va2lhIFNhbnMABwAAAFNpbVN1bgAIAAAAVmVyZGFuYQAGAAAAQkxBTksACAAA
+ ADFfQkxBTksAEQAAAHRoaW5rLWNlbGwgU2xpZGUAIQAAAE1pY3Jvc29mdCBPZmZpY2UgRXhjZW
+ wgV29ya3NoZWV0ACkAAAAzLiBJbXBsZW1lbnRhdGlvbiBQbGFubmluZyBQcm9qZWN0IFBsYW4g
+ ADQAAAAzLjEgSW1wbGVtZW50YXRpb24gUGxhbm5pbmcgSGlnaC1sZXZlbCBBcmNoaXRlY3R1cm
+ UALQAAADMuMiBJbXBsZW1lbnRhdGlvbiBQbGFubmluZyBLZXkgZGVwZW5kZW5jaWVzADcAAAAz
+ LjMgSW1wbGVtZW50YXRpb24gUGxhbm5pbmc6IEVwaWMgZWZmb3J0IGluIG1hbiBtb250aHMACA
+ AAAFNsaWRlIDUACAAAAFNsaWRlIDYAMgAAADMuNiBJbXBsZW1lbnRhdGlvbiBQbGFubmluZzog
+ UmVzb3VyY2UgJiBjb3N0IHBsYW4AKwAAADMuNyBJbXBsZW1lbnRhdGlvbiBQbGFubmluZyBSaX
+ NrcyBBbmFseXNpcwAoAAAAMy44IEltcGxlbWVudGF0aW9uIFBsYW5uaW5nIFRlY2hub2xvZ3kg
+ ADMAAAAzLjkgSW1wbGVtZW50YXRpb24gUGxhbm5pbmc6IEVwaWMgcGxhbm5pbmcgc3VtbWFyeQ
+ AMEAAACAAAAB4AAAALAAAARm9udHMgVXNlZAADAAAABgAAAB4AAAAGAAAAVGhlbWUAAwAAAAIA
+ AAAeAAAAFQAAAEVtYmVkZGVkIE9MRSBTZXJ2ZXJzAAMAAAACAAAAHgAAAA0AAABTbGlkZSBUaX
+ RsZXMAAwAAAAoAAAAEAgAAAwAAAAAAAAAgAAAAAQAAADgAAAACAAAAQAAAAAEAAAACAAAADAAA
+ AF9QSURfSExJTktTAAIAAADkBAAAQQAAALwBAAAMAAAAAwAAAAcAAAADAAAABgAAAAMAAAAAAA
+ AAAwAAAAcAAAAfAAAAUwAAAGgAdAB0AHAAOgAvAC8AdwBpAGsAaQBzAC4AaQBuAC4AbgBvAGsA
+ aQBhAC4AYwBvAG0ALwBTAEQARABpAGYAZgBlAHIAZQBuAHQAaQBhAHQAaQBuAGcAUwBXAC8ARA
+ BTAFcAXwBYADAAXwBNAGkAbABlAHMAdABvAG4AZQBfAEMAcgBpAHQAZQByAGkAYQBfAEQAcgBh
+ AGYAdABfAHYAMABfADIAAAAAAB8AAAABAAAAAAAAAAMAAAAHAAAAAwAAAAYAAAADAAAAAAAAAA
+ MAAAAHAAAAHwAAAFMAAABoAHQAdABwADoALwAvAHcAaQBrAGkAcwAuAGkAbgAuAG4AbwBrAGkA
+ YQAuAGMAbwBtAC8AUwBEAEQAaQBmAGYAZQByAGUAbgB0AGkAYQB0AGkAbgBnAFMAVwAvAEQAUw
+ BXAF8AWAAwAF8ATQBpAGwAZQBzAHQAbwBuAGUAXwBDAHIAaQB0AGUAcgBpAGEAXwBEAHIAYQBm
+ AHQAXwB2ADAAXwAyAAAAAAAfAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAA9g8bAAAAFAAAAF/AkeN3jw4AAwD0AwMAYDJkbHUIAAAAZABsAHUAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ ABAAAAAgAAAAMAAAAEAAAABQAAAAYAAAAHAAAACAAAAAkAAAAKAAAACwAAAAwAAAANAAAADgAA
+ AA8AAAAQAAAAEQAAABIAAAATAAAAFAAAABUAAAAWAAAAFwAAABgAAAAZAAAAGgAAABsAAAAcAA
+ AAHQAAAB4AAAAfAAAAIAAAACEAAAAiAAAAIwAAACQAAAAlAAAAJgAAACcAAAAoAAAAKQAAACoA
+ AAArAAAALAAAAC0AAAAuAAAALwAAADAAAAAxAAAAMgAAADMAAAA0AAAANQAAADYAAAA3AAAAOA
+ AAADkAAAA6AAAAOwAAAP7///89AAAAPgAAAD8AAABAAAAAQQAAAEIAAABDAAAARAAAAEUAAABG
+ AAAARwAAAEgAAABJAAAASgAAAEsAAABMAAAATQAAAE4AAABPAAAAUAAAAFEAAABSAAAAUwAAAF
+ QAAABVAAAAVgAAAFcAAABYAAAAWQAAAFoAAABbAAAAXAAAAF0AAABeAAAAXwAAAGAAAABhAAAA
+ YgAAAGMAAABkAAAAZQAAAGYAAABnAAAAaAAAAGkAAABqAAAAawAAAGwAAABtAAAAbgAAAG8AAA
+ BwAAAAcQAAAHIAAABzAAAAdAAAAHUAAAB2AAAAdwAAAHgAAAB5AAAAegAAAHsAAAB8AAAAfQAA
+ AH4AAAB/AAAAgAAAAIEAAACCAAAAgwAAAIQAAACFAAAAhgAAAIcAAACIAAAAiQAAAIoAAACLAA
+ AAjAAAAI0AAACOAAAAjwAAAJAAAACRAAAAkgAAAJMAAACUAAAAlQAAAJYAAACXAAAAmAAAAJkA
+ AACaAAAAmwAAAJwAAACdAAAAngAAAJ8AAACgAAAAoQAAAKIAAACjAAAApAAAAKUAAACmAAAApw
+ AAAKgAAACpAAAAqgAAAKsAAACsAAAArQAAAK4AAACvAAAAsAAAALEAAACyAAAAswAAALQAAAC1
+ AAAAtgAAALcAAAC4AAAAuQAAALoAAAC7AAAAvAAAAL0AAAC+AAAAvwAAAMAAAADBAAAAwgAAAM
+ MAAADEAAAAxQAAAMYAAADHAAAAyAAAAMkAAADKAAAAywAAAMwAAADNAAAAzgAAAM8AAADQAAAA
+ 0QAAANIAAADTAAAA1AAAANUAAADWAAAA1wAAANgAAADZAAAA2gAAANsAAADcAAAA3QAAAN4AAA
+ DfAAAA4AAAAOEAAADiAAAA4wAAAOQAAADlAAAA5gAAAOcAAADoAAAA6QAAAOoAAADrAAAA7AAA
+ AO0AAADuAAAA7wAAAPAAAADxAAAA8gAAAPMAAAD0AAAA9QAAAPYAAAD3AAAA+AAAAPkAAAD6AA
+ AA+wAAAPwAAAD9AAAA/gAAAP8AAAAAAQAAAQEAAAIBAAADAQAABAEAAAUBAAAGAQAABwEAAAgB
+ AAAJAQAACgEAAAsBAAAMAQAADQEAAA4BAAAPAQAAEAEAABEBAAASAQAAEwEAABQBAAAVAQAAFg
+ EAABcBAAAYAQAAGQEAABoBAAAbAQAAHAEAAB0BAAAeAQAAHwEAACABAAAhAQAAIgEAACMBAAAk
+ AQAAJQEAACYBAAAnAQAAKAEAACkBAAAqAQAAKwEAACwBAAAtAQAALgEAAC8BAAAwAQAAMQEAAD
+ IBAAAzAQAANAEAADUBAAA2AQAANwEAADgBAAA5AQAAOgEAADsBAAA8AQAAPQEAAD4BAAA/AQAA
+ QAEAAEEBAABCAQAAQwEAAEQBAABFAQAARgEAAEcBAABIAQAASQEAAEoBAABLAQAATAEAAE0BAA
+ BOAQAATwEAAFABAABRAQAAUgEAAFMBAABUAQAAVQEAAFYBAABXAQAAWAEAAFkBAABaAQAAWwEA
+ AFwBAABdAQAAXgEAAF8BAABgAQAAYQEAAGIBAABjAQAAZAEAAGUBAABmAQAAZwEAAGgBAABpAQ
+ AAagEAAGsBAABsAQAAbQEAAG4BAABvAQAAcAEAAHEBAAByAQAAcwEAAHQBAAB1AQAAdgEAAHcB
+ AAB4AQAAeQEAAHoBAAB7AQAAfAEAAH0BAAB+AQAAfwEAAIABAACBAQAAggEAAIMBAACEAQAAhQ
+ EAAIYBAACHAQAAiAEAAIkBAACKAQAAiwEAAIwBAACNAQAAjgEAAI8BAACQAQAAkQEAAJIBAACT
+ AQAAlAEAAJUBAACWAQAAlwEAAJgBAACZAQAAmgEAAJsBAACcAQAAnQEAAJ4BAACfAQAAoAEAAK
+ EBAACiAQAAowEAAKQBAAClAQAApgEAAKcBAACoAQAAqQEAAKoBAACrAQAArAEAAK0BAACuAQAA
+ rwEAALABAACxAQAAsgEAALMBAAC0AQAAtQEAALYBAAC3AQAAuAEAALkBAAC6AQAAuwEAALwBAA
+ C9AQAAvgEAAL8BAADAAQAAwQEAAMIBAADDAQAAxAEAAMUBAADGAQAAxwEAAMgBAADJAQAAygEA
+ AMsBAADMAQAAzQEAAM4BAADPAQAA0AEAANEBAADSAQAA0wEAANQBAADVAQAA1gEAANcBAADYAQ
+ AA2QEAANoBAADbAQAA3AEAAN0BAADeAQAA3wEAAOABAADhAQAA4gEAAOMBAADkAQAA5QEAAOYB
+ AADnAQAA6AEAAOkBAADqAQAA6wEAAOwBAADtAQAA7gEAAO8BAADwAQAA8QEAAPIBAADzAQAA9A
+ EAAPUBAAD2AQAA9wEAAPgBAAD5AQAA+gEAAPsBAAD8AQAA/QEAAP4BAAD/AQAAAAIAAAECAAAC
+ AgAAAwIAAAQCAAAFAgAABgIAAAcCAAAIAgAACQIAAAoCAAALAgAADAIAAA0CAAAOAgAADwIAAB
+ ACAAARAgAAEgIAABMCAAAUAgAAFQIAABYCAAAXAgAAGAIAABkCAAAaAgAAGwIAABwCAAAdAgAA
+ HgIAAB8CAAAgAgAAIQIAACICAAAjAgAAJAIAACUCAAAmAgAAJwIAACgCAAApAgAAKgIAACsCAA
+ AsAgAALQIAAC4CAAAvAgAAMAIAADECAAAyAgAAMwIAADQCAAA1AgAANgIAADcCAAA4AgAAOQIA
+ ADoCAAA7AgAAPAIAAD0CAAA+AgAAPwIAAEACAABBAgAAQgIAAEMCAABEAgAARQIAAEYCAABHAg
+ AASAIAAEkCAABKAgAASwIAAEwCAABNAgAATgIAAE8CAABQAgAAUQIAAFICAABTAgAAVAIAAFUC
+ AABWAgAAVwIAAFgCAABZAgAAWgIAAFsCAABcAgAAXQIAAF4CAABfAgAAYAIAAGECAABiAgAAYw
+ IAAGQCAABlAgAAZgIAAGcCAABoAgAAaQIAAGoCAABrAgAAbAIAAG0CAABuAgAAbwIAAHACAABx
+ AgAAcgIAAHMCAAB0AgAAdQIAAHYCAAB3AgAAeAIAAHkCAAB6AgAAewIAAHwCAAB9AgAAfgIAAH
+ 8CAACAAgAAgQIAAIICAACDAgAAhAIAAIUCAACGAgAAhwIAAIgCAACJAgAAigIAAIsCAACMAgAA
+ jQIAAI4CAACPAgAAkAIAAJECAACSAgAAkwIAAJQCAACVAgAAlgIAAJcCAACYAgAAmQIAAJoCAA
+ CbAgAAnAIAAJ0CAACeAgAAnwIAAKACAAChAgAAogIAAKMCAACkAgAApQIAAKYCAACnAgAAqAIA
+ AKkCAACqAgAAqwIAAKwCAACtAgAArgIAAK8CAACwAgAAsQIAALICAACzAgAAtAIAALUCAAC2Ag
+ AAtwIAALgCAAC5AgAAugIAALsCAAC8AgAAvQIAAL4CAAC/AgAAwAIAAMECAADCAgAAwwIAAMQC
+ AADFAgAAxgIAAMcCAADIAgAAyQIAAMoCAADLAgAAzAIAAM0CAADOAgAAzwIAANACAADRAgAA0g
+ IAANMCAADUAgAA1QIAANYCAADXAgAA2AIAANkCAADaAgAA2wIAANwCAADdAgAA3gIAAN8CAADg
+ AgAA4QIAAOICAADjAgAA5AIAAOUCAADmAgAA5wIAAOgCAADpAgAA6gIAAOsCAADsAgAA7QIAAO
+ 4CAADvAgAA8AIAAPECAADyAgAA8wIAAPQCAAD1AgAA9gIAAPcCAAD4AgAA+QIAAPoCAAD7AgAA
+ /AIAAP0CAAD+AgAA/wIAAAADAAABAwAAAgMAAAMDAAAEAwAABQMAAAYDAAAHAwAACAMAAAkDAA
+ AKAwAACwMAAAwDAAANAwAADgMAAA8DAAAQAwAAEQMAABIDAAATAwAAFAMAABUDAAAWAwAAFwMA
+ ABgDAAAZAwAAGgMAABsDAAAcAwAAHQMAAB4DAAAfAwAAIAMAACEDAAAiAwAAIwMAACQDAAAlAw
+ AAJgMAACcDAAAoAwAAKQMAACoDAAArAwAALAMAAC0DAAAuAwAALwMAADADAAAxAwAAMgMAADMD
+ AAA0AwAANQMAADYDAAA3AwAAOAMAADkDAAA6AwAAOwMAADwDAAA9AwAAPgMAAD8DAABAAwAAQQ
+ MAAEIDAABDAwAARAMAAEUDAABGAwAARwMAAEgDAABJAwAASgMAAEsDAABMAwAATQMAAE4DAABP
+ AwAAUAMAAFEDAABSAwAAUwMAAFQDAABVAwAAVgMAAFcDAABYAwAAWQMAAFoDAABbAwAAXAMAAF
+ 0DAABeAwAAXwMAAGADAABhAwAAYgMAAGMDAABkAwAAZQMAAGYDAABnAwAAaAMAAGkDAABqAwAA
+ awMAAGwDAABtAwAAbgMAAG8DAABwAwAAcQMAAHIDAABzAwAAdAMAAHUDAAB2AwAAdwMAAHgDAA
+ B5AwAAegMAAHsDAAB8AwAAfQMAAH4DAAB/AwAAgAMAAIEDAACCAwAAgwMAAIQDAACFAwAAhgMA
+ AIcDAACIAwAAiQMAAIoDAACLAwAAjAMAAI0DAACOAwAAjwMAAJADAACRAwAAkgMAAJMDAACUAw
+ AAlQMAAJYDAACXAwAAmAMAAJkDAACaAwAAmwMAAJwDAACdAwAAngMAAJ8DAACgAwAAoQMAAKID
+ AACjAwAApAMAAKUDAACmAwAApwMAAKgDAACpAwAAqgMAAKsDAACsAwAArQMAAK4DAACvAwAAsA
+ MAALEDAACyAwAAswMAALQDAAC1AwAAtgMAALcDAAC4AwAAuQMAALoDAAC7AwAAvAMAAL0DAAC+
+ AwAAvwMAAMADAADBAwAAwgMAAMMDAADEAwAAxQMAAMYDAADHAwAAyAMAAMkDAADKAwAAywMAAM
+ wDAADNAwAAzgMAAM8DAADQAwAA0QMAANIDAADTAwAA1AMAANUDAADWAwAA1wMAANgDAADZAwAA
+ 2gMAANsDAADcAwAA3QMAAN4DAADfAwAA4AMAAOEDAADiAwAA4wMAAOQDAADlAwAA5gMAAOcDAA
+ DoAwAA6QMAAOoDAADrAwAA7AMAAO0DAADuAwAA7wMAAPADAADxAwAA8gMAAPMDAAD0AwAA9QMA
+ APYDAAD3AwAA+AMAAPkDAAD6AwAA+wMAAPwDAAD9AwAA/gMAAP8DAAAABAAAAQQAAAIEAAADBA
+ AABAQAAAUEAAAGBAAABwQAAAgEAAAJBAAACgQAAAsEAAAMBAAADQQAAA4EAAAPBAAAEAQAABEE
+ AAASBAAAEwQAABQEAAAVBAAAFgQAABcEAAAYBAAAGQQAABoEAAAbBAAAHAQAAB0EAAAeBAAAHw
+ QAACAEAAAhBAAAIgQAACMEAAAkBAAAJQQAACYEAAAnBAAAKAQAACkEAAAqBAAAKwQAACwEAAAt
+ BAAALgQAAC8EAAAwBAAAMQQAADIEAAAzBAAANAQAADUEAAA2BAAANwQAADgEAAA5BAAAOgQAAD
+ sEAAA8BAAAPQQAAD4EAAA/BAAAQAQAAEEEAABCBAAAQwQAAEQEAABFBAAARgQAAEcEAABIBAAA
+ SQQAAEoEAABLBAAATAQAAE0EAABOBAAATwQAAFAEAABRBAAAUgQAAFMEAABUBAAAVQQAAFYEAA
+ BXBAAAWAQAAFkEAABaBAAAWwQAAFwEAABdBAAAXgQAAF8EAABgBAAAYQQAAGIEAABjBAAAZAQA
+ AGUEAABmBAAAZwQAAGgEAABpBAAAagQAAGsEAABsBAAAbQQAAG4EAABvBAAAcAQAAHEEAAByBA
+ AAcwQAAHQEAAB1BAAAdgQAAHcEAAB4BAAAeQQAAHoEAAB7BAAAfAQAAH0EAAB+BAAAfwQAAIAE
+ AACBBAAAggQAAIMEAACEBAAAhQQAAIYEAACHBAAAiAQAAIkEAACKBAAAiwQAAIwEAACNBAAAjg
+ QAAI8EAACQBAAAkQQAAJIEAACTBAAAlAQAAJUEAACWBAAAlwQAAJgEAACZBAAAmgQAAJsEAACc
+ BAAAnQQAAJ4EAACfBAAAoAQAAKEEAACiBAAAowQAAKQEAAClBAAApgQAAKcEAACoBAAAqQQAAK
+ oEAACrBAAArAQAAK0EAACuBAAArwQAALAEAACxBAAAsgQAALMEAAC0BAAAtQQAALYEAAC3BAAA
+ uAQAALkEAAC6BAAAuwQAALwEAAC9BAAAvgQAAL8EAADABAAAwQQAAMIEAADDBAAAxAQAAMUEAA
+ DGBAAAxwQAAMgEAADJBAAAygQAAMsEAADMBAAAzQQAAM4EAADPBAAA0AQAANEEAADSBAAA0wQA
+ ANQEAADVBAAA1gQAANcEAADYBAAA2QQAANoEAADbBAAA3AQAAN0EAADeBAAA3wQAAOAEAADhBA
+ AA4gQAAOMEAADkBAAA5QQAAOYEAADnBAAA6AQAAOkEAADqBAAA6wQAAOwEAADtBAAA7gQAAO8E
+ AADwBAAA8QQAAPIEAADzBAAA9AQAAPUEAAD2BAAA9wQAAPgEAAD5BAAA+gQAAPsEAAD8BAAA/Q
+ QAAP4EAAD/BAAAAAUAAAEFAAACBQAAAwUAAAQFAAAFBQAABgUAAAcFAAAIBQAACQUAAAoFAAAL
+ BQAADAUAAA0FAAAOBQAADwUAABAFAAARBQAAEgUAABMFAAAUBQAAFQUAABYFAAAXBQAAGAUAAB
+ kFAAAaBQAAGwUAABwFAAAdBQAAHgUAAB8FAAAgBQAAIQUAACIFAAAjBQAAJAUAACUFAAAmBQAA
+ JwUAACgFAAApBQAAKgUAACsFAAAsBQAALQUAAC4FAAAvBQAAMAUAADEFAAAyBQAAMwUAADQFAA
+ A1BQAANgUAADcFAAA4BQAAOQUAADoFAAA7BQAAPAUAAD0FAAA+BQAAPwUAAEAFAABBBQAAQgUA
+ AEMFAABEBQAARQUAAEYFAABHBQAASAUAAEkFAABKBQAASwUAAEwFAABNBQAATgUAAE8FAABQBQ
+ AAUQUAAFIFAABTBQAAVAUAAFUFAABWBQAAVwUAAFgFAABZBQAAWgUAAFsFAABcBQAAXQUAAF4F
+ AABfBQAAYAUAAGEFAABiBQAAYwUAAGQFAABlBQAAZgUAAGcFAABoBQAAaQUAAGoFAABrBQAAbA
+ UAAG0FAABuBQAAbwUAAHAFAABxBQAAcgUAAHMFAAB0BQAAdQUAAHYFAAB3BQAAeAUAAHkFAAB6
+ BQAAewUAAHwFAAB9BQAAfgUAAH8FAACABQAAgQUAAIIFAACDBQAAhAUAAIUFAACGBQAAhwUAAI
+ gFAACJBQAAigUAAIsFAACMBQAAjQUAAI4FAACPBQAAkAUAAJEFAACSBQAAkwUAAJQFAACVBQAA
+ lgUAAJcFAACYBQAAmQUAAJoFAACbBQAAnAUAAJ0FAACeBQAAnwUAAKAFAAChBQAAogUAAKMFAA
+ CkBQAApQUAAKYFAACnBQAAqAUAAKkFAACqBQAAqwUAAKwFAACtBQAArgUAAK8FAACwBQAAsQUA
+ ALIFAACzBQAAtAUAALUFAAC2BQAAtwUAALgFAAC5BQAAugUAALsFAAC8BQAAvQUAAL4FAAC/BQ
+ AAwAUAAMEFAADCBQAAwwUAAMQFAADFBQAAxgUAAMcFAADIBQAAyQUAAMoFAADLBQAAzAUAAM0F
+ AADOBQAAzwUAANAFAADRBQAA0gUAANMFAADUBQAA1QUAANYFAADXBQAA2AUAANkFAADaBQAA2w
+ UAANwFAADdBQAA3gUAAN8FAADgBQAA4QUAAOIFAADjBQAA5AUAAOUFAADmBQAA5wUAAOgFAADp
+ BQAA6gUAAOsFAADsBQAA7QUAAO4FAADvBQAA8AUAAPEFAADyBQAA8wUAAPQFAAD1BQAA9gUAAP
+ cFAAD4BQAA+QUAAPoFAAD7BQAA/AUAAP0FAAD+BQAA/wUAAAAGAAABBgAAAgYAAAMGAAAEBgAA
+ BQYAAAYGAAAHBgAACAYAAAkGAAAKBgAACwYAAAwGAAANBgAADgYAAA8GAAAQBgAAEQYAABIGAA
+ ATBgAAFAYAABUGAAAWBgAAFwYAABgGAAAZBgAAGgYAABsGAAAcBgAAHQYAAB4GAAAfBgAAIAYA
+ ACEGAAAiBgAAIwYAACQGAAAlBgAAJgYAACcGAAAoBgAAKQYAACoGAAArBgAALAYAAC0GAAAuBg
+ AALwYAADAGAAAxBgAAMgYAADMGAAA0BgAANQYAADYGAAA3BgAAOAYAADkGAAA6BgAAOwYAADwG
+ AAA9BgAAPgYAAD8GAABABgAAQQYAAEIGAABDBgAARAYAAEUGAABGBgAARwYAAEgGAABJBgAASg
+ YAAEsGAABMBgAATQYAAE4GAABPBgAAUAYAAFEGAABSBgAAUwYAAFQGAABVBgAAVgYAAFcGAABY
+ BgAAWQYAAFoGAABbBgAAXAYAAF0GAABeBgAAXwYAAGAGAABhBgAAYgYAAGMGAABkBgAAZQYAAG
+ YGAABnBgAAaAYAAGkGAABqBgAAawYAAGwGAABtBgAAbgYAAG8GAABwBgAAcQYAAHIGAABzBgAA
+ dAYAAHUGAAB2BgAAdwYAAHgGAAB5BgAAegYAAHsGAAB8BgAAfQYAAH4GAAB/BgAAgAYAAIEGAA
+ CCBgAAgwYAAIQGAACFBgAAhgYAAIcGAACIBgAAiQYAAIoGAACLBgAAjAYAAI0GAACOBgAAjwYA
+ AJAGAACRBgAAkgYAAJMGAACUBgAAlQYAAJYGAACXBgAAmAYAAJkGAACaBgAAmwYAAJwGAACdBg
+ AAngYAAJ8GAACgBgAAoQYAAKIGAACjBgAApAYAAKUGAACmBgAApwYAAKgGAACpBgAAqgYAAKsG
+ AACsBgAArQYAAK4GAACvBgAAsAYAALEGAACyBgAAswYAALQGAAC1BgAAtgYAALcGAAC4BgAAuQ
+ YAALoGAAC7BgAAvAYAAL0GAAC+BgAAvwYAAMAGAADBBgAAwgYAAMMGAADEBgAAxQYAAMYGAADH
+ BgAAyAYAAMkGAADKBgAAywYAAMwGAADNBgAAzgYAAM8GAADQBgAA0QYAANIGAADTBgAA1AYAAN
+ UGAADWBgAA1wYAANgGAADZBgAA2gYAANsGAADcBgAA3QYAAN4GAADfBgAA4AYAAOEGAADiBgAA
+ 4wYAAOQGAADlBgAA5gYAAOcGAADoBgAA6QYAAOoGAADrBgAA7AYAAO0GAADuBgAA7wYAAPAGAA
+ DxBgAA8gYAAPMGAAD0BgAA9QYAAPYGAAD3BgAA+AYAAPkGAAD6BgAA+wYAAPwGAAD9BgAA/gYA
+ AP8GAAAABwAAAQcAAAIHAAADBwAABAcAAAUHAAAGBwAABwcAAAgHAAAJBwAACgcAAAsHAAAMBw
+ AADQcAAA4HAAAPBwAAEAcAABEHAAASBwAAEwcAABQHAAAVBwAAFgcAABcHAAAYBwAAGQcAABoH
+ AAAbBwAAHAcAAB0HAAAeBwAAHwcAACAHAAAhBwAAIgcAACMHAAAkBwAAJQcAACYHAAAnBwAAKA
+ cAACkHAAAqBwAAKwcAACwHAAAtBwAALgcAAC8HAAAwBwAAMQcAADIHAAAzBwAANAcAADUHAAA2
+ BwAANwcAADgHAAA5BwAAOgcAADsHAAA8BwAAPQcAAD4HAAA/BwAAQAcAAEEHAABCBwAAQwcAAE
+ QHAABFBwAARgcAAEcHAABIBwAASQcAAEoHAABLBwAATAcAAE0HAABOBwAATwcAAFAHAABRBwAA
+ UgcAAFMHAABUBwAAVQcAAFYHAABXBwAAWAcAAFkHAABaBwAAWwcAAFwHAABdBwAAXgcAAF8HAA
+ BgBwAAYQcAAGIHAABjBwAAZAcAAGUHAABmBwAAZwcAAGgHAABpBwAAagcAAGsHAABsBwAAbQcA
+ AG4HAABvBwAAcAcAAHEHAAByBwAAcwcAAHQHAAB1BwAAdgcAAHcHAAB4BwAAeQcAAHoHAAB7Bw
+ AAfAcAAH0HAAB+BwAAfwcAAIAHAACBBwAAggcAAIMHAAD+////hQcAAIYHAACHBwAAiAcAAIkH
+ AACKBwAAiwcAAIwHAACNBwAAjgcAAI8HAACQBwAAkQcAAJIHAACTBwAAlAcAAJUHAACWBwAAlw
+ cAAJgHAACZBwAAmgcAAJsHAACcBwAAnQcAAJ4HAACfBwAAoAcAAKEHAACiBwAAowcAAKQHAACl
+ BwAApgcAAKcHAACoBwAAqQcAAKoHAACrBwAArAcAAK0HAACuBwAArwcAALAHAACxBwAAsgcAAL
+ MHAAC0BwAAtQcAALYHAAC3BwAAuAcAALkHAAC6BwAAuwcAALwHAAC9BwAAvgcAAL8HAADABwAA
+ wQcAAMIHAADDBwAAxAcAAMUHAADGBwAAxwcAAMgHAADJBwAAygcAAMsHAADMBwAAzQcAAM4HAA
+ DPBwAA0AcAANEHAADSBwAA0wcAANQHAADVBwAA1gcAANcHAADYBwAA2QcAANoHAADbBwAA3AcA
+ AN0HAADeBwAA3wcAAOAHAADhBwAA4gcAAOMHAADkBwAA5QcAAOYHAADnBwAA6AcAAOkHAADqBw
+ AA6wcAAOwHAADtBwAA/v///+8HAADwBwAA8QcAAPIHAADzBwAA9AcAAPUHAAD+////9wcAAPgH
+ AAD5BwAA+gcAAPsHAAD8BwAA/QcAAP7////9/////f////3////9/////f////3////9/////f
+ ////3////9/////f////3////9/////f////3////9/////f///xAIAAD+////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////////////////
+ //////////////////////////////////////////////////////////////UgBvAG8AdAAg
+ AEUAbgB0AHIAeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAB
+ YABQH//////////wMAAAAQjYFkm0/PEYbqAKoAuSnoAAAAAAAAAAAAAAAAAAAAAAAAAAD+////
+ AAAAAAAAAABQAGkAYwB0AHUAcgBlAHMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAEgACAf///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAudgAAAAAAAEMAdQByAHIAZQBuAHQAIABVAHMAZQByAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAIBAQAAAP//////////AAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA9gcAAAAQAAAAAAAABQBTAHUAbQBtAGEAcg
+ B5AEkAbgBmAG8AcgBtAGEAdABpAG8AbgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACgAAgEC
+ AAAABQAAAP////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACEBwAAUNIAAA
+ AAAABQAG8AdwBlAHIAUABvAGkAbgB0ACAARABvAGMAdQBtAGUAbgB0AAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAKAACAf///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAADwAAACbjw4AAAAAAAUARABvAGMAdQBtAGUAbgB0AFMAdQBtAG0AYQByAHkASQBu
+ AGYAbwByAG0AYQB0AGkAbwBuAAAAAAAAAAAAAAA4AAIBBAAAAP//////////AAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA7gcAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD///////
+ ////////8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAP///////////////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
+ AAAAAAAAAAAAAAAAAAAAAA==
+ATTENDEE;CN="ext Tuomas.J.Iivarinen@tieto.com";RSVP=TRUE:mailto:Tuomas.J.Ii
+ varinen@tieto.com
+ATTENDEE;CN="ext Pawel.Grygiel@tieto.com";RSVP=TRUE:mailto:Pawel.Grygiel@ti
+ eto.com
+ATTENDEE;CN="Lehtonen Kalle.Ju (Nokia-D/Tampere)";RSVP=TRUE:mailto:kalle.ju
+ .lehtonen@nokia.com
+ATTENDEE;CN="Tiitinen Tommi (Nokia-D/Tampere)";RSVP=TRUE:mailto:tommi.tiiti
+ nen@nokia.com
+ATTENDEE;CN="Ojala Jouni (Nokia-D/Tampere)";RSVP=TRUE:mailto:jouni.ojala@no
+ kia.com
+ATTENDEE;CN="V Ravi-Iyer (Nokia-D/Bangalore)";RSVP=TRUE:mailto:ravi-iyer.v@
+ nokia.com
+ATTENDEE;CN="Murugasen Mathan (Nokia-D/Bangalore)";RSVP=TRUE:mailto:Mathan.
+ Murugasen@nokia.com
+CLASS:PUBLIC
+CREATED:20100519T104559Z
+DESCRIPTION:When: 19.05.2010 10:00-11:00 (GMT+02:00) Helsinki\, Kyiv\, Riga
+ \, Sofia\, Tallinn\, Vilnius.\nWhere: Live Meeting\n\nNote: The GMT offset
+ above does not reflect daylight saving time adjustments.\n\n*~*~*~*~*~*~*
+ ~*~*~*\n\nAgenda:\n\nGo through Day view X0 material and discussion open i
+ ssue.\n\n\n \nBr\,\nDongsheng.\n\n----------------------------------------
+ --------------------------------------------------------------------------
+ ---------------------\nFinland: +358 7180 71870\; \nPoland: +48 71 718 121
+ 5 \nBeijing:+8610 8711 1870 \nChengdu: +86 288 689 0188 ext 1870 and press
+ "#" \n\nConference ID: 21439 andPIN:1017\n-+-----+-----+-----+-----+-----
+ +-----+-----+-----+-\n\n\nDongsheng Lu has invited you to present at an on
+ line meeting using Microsoft® Office Live Meeting service.\nJoin the meet
+ ing <https://www206.livemeeting.com/cc/_XML/nokia/join?id=D2BTWM&role=pres
+ ent&pw=F2H=s\;'=X> \nAUDIO INFORMATION \nComputer Audio\nTo use computer a
+ udio\, you need speakers and a microphone\, or a headset.\nFIRST-TIME USER
+ S \nTo save time before the meeting\, check your system <http://go.microso
+ ft.com/fwlink/?LinkId=90703> to make sure it is ready to use Office Live
+ Meeting.\nNotes \nOffice Live Meeting can be used to record meetings. By p
+ articipating in this meeting\, you agree that your communications may be r
+ ecorded at any time during the meeting. You will be notified on screen if
+ recording of the meeting is active.\nTROUBLESHOOTING \nUnable to join the
+ meeting? Follow these steps:\n 1. Copy this address and paste into your w
+ eb browser: \n https://www206.livemeeting.com/cc/_XML/nokia/join\n 2. Cop
+ y and paste the required information:\n Meeting ID: D2BTWM\n Entry Code:
+ F2H=s\;'=X\n Location: https://www206.livemeeting.com/cc/_XML/nokia\nIf
+ you still cannot enter the meeting\, contact support. <http://r.office.mic
+ rosoft.com/r/rlidLiveMeeting?p1=12&p2=en_US&p3=LMInfo&p4=support> \nNOTICE
+ \nOffice Live Meeting can be used to record meetings. By participating in
+ this meeting\, you agree that your communications may be monitored or rec
+ orded at any time during the meeting.\n\n\n
+DTEND:20100519T080000Z
+DTSTAMP:20100518T125406Z
+DTSTART:20100519T070000Z
+LAST-MODIFIED:20100519T104559Z
+LOCATION:Live Meeting
+ORGANIZER;CN="Lu Dongsheng (Nokia-D/Tampere)":mailto:dongsheng.lu@nokia.com
+PRIORITY:5
+SEQUENCE:0
+SUMMARY;LANGUAGE=en-us:Day view X0 workshop.
+TRANSP:OPAQUE
+UID:040000008200E00074C5B7101A82E00800000000F000B626A1F6CA01000000000000000
+ 0100000004D2DBA4A9642AB49B9120B2E5F04066A
+X-ALT-DESC;FMTTYPE=text/html:<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//E
+ N">\n<HTML>\n<HEAD>\n<META NAME="Generator" CONTENT="MS Exchange Server ve
+ rsion 08.00.0681.000">\n<TITLE></TITLE>\n</HEAD>\n<BODY>\n<!-- Converted f
+ rom text/rtf format -->\n\n<P><FONT FACE="Calibri">When: 19.05.2010 10:00-
+ 11:00 (GMT+02:00) Helsinki\, Kyiv\, Riga\, Sofia\, Tallinn\, Vilnius.</FON
+ T>\n\n<BR><FONT FACE="Calibri">Where: Live Meeting</FONT>\n</P>\n\n<P><FON
+ T FACE="Calibri">Note: The GMT offset above does not reflect daylight savi
+ ng time adjustments.</FONT>\n</P>\n\n<P><FONT FACE="Calibri">*~*~*~*~*~*~*
+ ~*~*~*</FONT>\n</P>\n\n<P><B><FONT SIZE=2 FACE="Arial">Agenda:</FONT></B>\
+ n</P>\n\n<P><FONT SIZE=2 FACE="Arial">Go through Day view X0 material and
+ discussion open issue.</FONT>\n</P>\n<BR>\n\n<P><FONT FACE="Calibri"></FON
+ T> \;\n\n<BR><FONT SIZE=2 FACE="Arial">Br\,</FONT>\n\n<BR><FONT SIZE=2
+ FACE="Arial">Dongsheng.</FONT>\n</P>\n\n<P><FONT SIZE=2 FACE="Arial">----
+ --------------------------------------------------------------------------
+ ---------------------------------------------------------</FONT></P>\n\n<P
+ ><FONT SIZE=2 FACE="Arial">Finland: +358 7180 71870\; </FONT>\n\n<BR><FONT
+ SIZE=2 FACE="Arial">Poland: +48 71 718 1215 </FONT>\n\n<BR><FONT SIZE=2 F
+ ACE="Arial">Beijing:+8610 8711 1870 </FONT>\n\n<BR><FONT SIZE=2 FACE="Aria
+ l">Chengdu: +86 288 689 0188 ext 1870 and press "\;#"\; </FONT>\n<
+ /P>\n\n<P><B><FONT SIZE=2 FACE="Arial">Conference ID: 21439 andPIN:1017</F
+ ONT></B>\n\n<BR><FONT SIZE=2 FACE="Arial">-+-----+-----+-----+-----+-----+
+ -----+-----+-----+-</FONT>\n</P>\n<BR>\n\n<P><FONT SIZE=2 FACE="Tahoma">Do
+ ngsheng Lu has invited you to present at an online meeting using Microsoft
+ ® Office Live Meeting service.</FONT>\n\n<BR><A HREF="https://www206.live
+ meeting.com/cc/_XML/nokia/join?id=D2BTWM&\;role=present&\;pw=F2H=s\;
+ '=X"><U></U><U></U><U><FONT COLOR="#0000FF" FACE="Tahoma">Join the meeting
+ </FONT></U></A>\n\n<BR><B><FONT COLOR="#004D80" FACE="Tahoma">AUDIO INFORM
+ ATION</FONT><FONT COLOR="#000080" FACE="Tahoma"></FONT> </B>\n\n<BR><B><FO
+ NT COLOR="#4D4D4D" SIZE=2 FACE="Tahoma">Computer Audio</FONT></B>\n\n<BR><
+ FONT SIZE=2 FACE="Tahoma">To use computer audio\, you need speakers and a
+ microphone\, or a headset.</FONT>\n\n<BR><B><FONT COLOR="#004D80" FACE="Ta
+ homa">FIRST-TIME USERS</FONT><FONT COLOR="#000080" FACE="Tahoma"></FONT> <
+ /B>\n\n<BR><FONT SIZE=2 FACE="Tahoma">To save time before the meeting\, </
+ FONT><A HREF="http://go.microsoft.com/fwlink/?LinkId=90703"><U></U><U><FON
+ T COLOR="#0000FF" SIZE=2 FACE="Tahoma">check your system</FONT></U></A><FO
+ NT SIZE=2 FACE="Tahoma"> to make sure it is ready to use Office Live Meeti
+ ng.</FONT>\n\n<BR><B><FONT COLOR="#004D80" FACE="Tahoma">Notes</FONT><FONT
+ COLOR="#000080" FACE="Tahoma"></FONT> </B>\n\n<BR><FONT SIZE=2 FACE="Taho
+ ma">Office Live Meeting can be used to record meetings. By participating i
+ n this meeting\, you agree that your communications may be recorded at any
+ time during the meeting. You will be notified on screen if recording of t
+ he meeting is active.</FONT></P>\n\n<P><B><FONT COLOR="#004D80" FACE="Taho
+ ma">TROUBLESHOOTING</FONT><FONT COLOR="#000080" FACE="Tahoma"></FONT> </B>
+ \n\n<BR><FONT SIZE=2 FACE="Tahoma">Unable to join the meeting? \; Foll
+ ow these steps:</FONT>\n\n<BR> \; \; \; \; \; \;&n
+ bsp\; <FONT SIZE=2 FACE="Tahoma">1. \; \; \; \; \; Cop
+ y this address and paste into your web browser: </FONT>\n\n<BR> \;&nbs
+ p\; \; \; \; \; \;  \; \; \; \; \;
+  \; \; <FONT SIZE=2 FACE="Tahoma"><A HREF="https://www206.livemeet
+ ing.com/cc/_XML/nokia/join">https://www206.livemeeting.com/cc/_XML/nokia/j
+ oin</A></FONT>\n\n<BR> \; \; \; \; \; \; \; <F
+ ONT SIZE=2 FACE="Tahoma">2. \; \; \; \; \; Copy and pa
+ ste the required information:</FONT>\n\n<BR> \; \; \; \;&n
+ bsp\; \; \;  \; \; \; \; \; \; \; <FON
+ T SIZE=2 FACE="Tahoma">Meeting ID: D2BTWM</FONT>\n\n<BR> \; \;&nbs
+ p\; \; \; \; \;  \; \; \; \; \; \;
+  \; <FONT SIZE=2 FACE="Tahoma">Entry Code: F2H=s\;'=X</FONT>\n\n<BR>&n
+ bsp\; \; \; \; \; \; \;  \; \; \; 
+ \; \; \; \; <FONT SIZE=2 FACE="Tahoma">Location: <A HREF="http
+ s://www206.livemeeting.com/cc/_XML/nokia">https://www206.livemeeting.com/c
+ c/_XML/nokia</A></FONT>\n\n<BR><FONT SIZE=2 FACE="Tahoma">If you still can
+ not enter the meeting\, </FONT><A HREF="http://r.office.microsoft.com/r/rl
+ idLiveMeeting?p1=12&\;p2=en_US&\;p3=LMInfo&\;p4=support"><U></U><
+ U><FONT COLOR="#0000FF" SIZE=2 FACE="Tahoma">contact support.</FONT></U></
+ A>\n\n<BR><B><FONT COLOR="#004D80" FACE="Tahoma">NOTICE</FONT><FONT COLOR=
+ "#000080" FACE="Tahoma"></FONT> </B>\n\n<BR><FONT SIZE=2 FACE="Tahoma">Off
+ ice Live Meeting can be used to record meetings. By participating in this
+ meeting\, you agree that your communications may be monitored or recorded
+ at any time during the meeting.</FONT></P>\n<BR>\n\n</BODY>\n</HTML>
+X-MICROSOFT-CDO-BUSYSTATUS:BUSY
+X-MICROSOFT-CDO-IMPORTANCE:1
+X-MICROSOFT-CDO-INTENDEDSTATUS:BUSY
+X-MICROSOFT-DISALLOW-COUNTER:FALSE
+X-MS-OLK-APPTLASTSEQUENCE:0
+X-MS-OLK-CONFTYPE:0
+END:VEVENT
+END:VCALENDAR
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/data/meeting.vcs Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,23 @@
+BEGIN:VCALENDAR
+PRODID:-//Microsoft Corporation//Outlook 12.0 MIMEDIR//EN
+VERSION:1.0
+BEGIN:VEVENT
+DTSTART:20100514T053000Z
+DTEND:20100514T093000Z
+LOCATION:Hara 5004
+UID:040000008200E00074C5B7101A82E00800000000C0BE6AE8BFE7CA01000000000000000
+ 0100000008F4AF94160A11240BBE3C983058E3269
+DESCRIPTION;ENCODING=QUOTED-PRINTABLE:=
+When: Friday, May 14, 2010 11:00 AM-3:00 PM (GMT+05:30) Chennai, Kolkata,=
+ Mumbai, New Delhi.=0D=0AWhere: Hara 5004 =0D=0A=0D=0ANote: The GMT offse=
+t above does not reflect daylight saving time adjustments.=0D=0A=0D=0A*~*=
+~*~*~*~*~*~*~*~*=0D=0A=0D=0AHello All,=0D=0A=0D=0AAs all of you know Ravi=
+ is taking Experience Owner responsibility from wk 19 and like to discuss=
+ with us face to face the Organizer opportunity and future. =0D=0AHe will=
+ put further agenda of this meeting.=0D=0A=0D=0AThe workshop will be thre=
+e hours but due to room availability 2 hrs will be pre lunch session and =
+1 hr post lunch session.=0D=0A=0D=0ARegards=0D=0ASudhansu=0D=0A=0D=0A
+SUMMARY:workshop to discuss possibilities on organizer..
+PRIORITY:3
+END:VEVENT
+END:VCALENDAR
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/inc/test_calenviewerservice.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef __TEST_CALENVIWRSRV_H__
+#define __TEST_CALENVIWRSRV_H__
+
+#include <QObject>
+#include <xqappmgr.h>
+
+class TestCalenViewerService : public QObject
+{
+ Q_OBJECT
+public:
+ TestCalenViewerService();
+ ~TestCalenViewerService();
+
+private slots:
+ void init();
+ void cleanup();
+
+ void testOpeningVCal();
+ void testOpeningICal();
+
+private:
+
+};
+
+#endif // __TEST_CALENVIWRSRV_H__
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/rom/unittest_calenviewerservice.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef __UT_CALENVIEWER_SERVICE_IBY__
+#define __UT_CALENVIEWER_SERVICE_IBY__
+
+S60_APP_EXE(utcalenviewerservice)
+S60_APP_RESOURCE(utcalenviewerservice)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\utcalenviewerservice_reg.rsc \private\10003a3f\import\apps\utcalenviewerservice_reg.rsc
+
+// Test files
+data=DATAZ_\data\others\meeting.vcs \data\others\meeting.vcs
+data=DATAZ_\data\others\meeting.ics \data\others\meeting.ics
+
+#endif // __UT_CALENVIEWER_SERVICE_IBY__
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System includes
+#include <QTest>
+#include <hbapplication.h>
+
+// User includes
+#include "test_calenviewerservice.h"
+
+int main(int argc, char *argv[])
+{
+ HbApplication app(argc, argv);
+
+ TestCalenViewerService tc;
+
+ char *args[3];
+ args[0] = argv[0];
+ args[1] = "-o";
+ args[2] = "c:\\data\\TestCalenViewerService.txt";
+
+ int ret = QTest::qExec(&tc, 3, args);
+ // Core dump if HbIconLoader instance is not destroyed before the
+ // application instance. HbIconLoader uses QCoreApplication::aboutToQuit()
+ // signal to destroy itself. app.exec() where the signal is normally emitted
+ // is not called here. So, invoking the signal explicitly.
+ QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
+ return ret;
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/src/test_calenviewerservice.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#include <xqaiwdeclplat.h>
+#include <QtTest/QtTest>
+
+#include "test_calenviewerservice.h"
+
+TestCalenViewerService::TestCalenViewerService()
+{
+ // No implementation yet
+}
+
+TestCalenViewerService::~TestCalenViewerService()
+{
+ // No implementation yet
+}
+
+void TestCalenViewerService::init()
+{
+ // No implementation yet
+}
+
+void TestCalenViewerService::cleanup()
+{
+ // No implementation yet
+}
+
+void TestCalenViewerService::testOpeningVCal()
+{
+ QTest::qWait(2);
+
+ QFile file("z:\\data\\others\\meeting.vcs");
+
+ XQApplicationManager mAppMgr;
+ XQAiwRequest *request;
+ QVERIFY(request = mAppMgr.create(file));
+
+ // Set function parameters
+ QList<QVariant> args;
+ args << file.fileName();
+ request->setArguments(args);
+ request->setEmbedded(true);
+
+ // Send the request
+ bool res;
+ QVERIFY(res = request->send());
+
+ delete request;
+}
+
+void TestCalenViewerService::testOpeningICal()
+{
+ // TODO: Both the test cases cannot be run in sequence
+ // due to some issues in Qt/Highway framework. Need to
+ // re-check on newer version and then modify the test case
+ // if required
+
+ /*QTest::qWait(2);
+
+ QFile file("z:\\data\\others\\meeting.ics");
+
+ XQApplicationManager mAppMgr;
+ XQAiwRequest *request;
+ QVERIFY(request = mAppMgr.create(file));
+
+ // Set function parameters
+ QList<QVariant> args;
+ args << file.fileName();
+ request->setArguments(args);
+ request->setEmbedded(true);
+
+ // Send the request
+ bool res;
+ QVERIFY(res = request->send());
+
+ delete request;*/
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/tsrc/unittest_calenviewerservice/unittest_calenviewerservice.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,42 @@
+#
+# Copyright (c) 2008 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: This is the project specification file for the calenviewerservice.
+#
+
+TEMPLATE = app
+TARGET = utcalenviewerservice
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+DEPENDPATH += . inc src
+INCLUDEPATH += .
+
+# Input
+HEADERS += inc/test_calenviewerservice.h
+SOURCES += src/main.cpp src/test_calenviewerservice.cpp
+
+symbian : {
+
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.UID3 = 0xE0003364
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lxqserviceutil -lxqservice
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calenviewerservice.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calenviewerservice.iby)" \
+ "./data/meeting.vcs z:/data/others/meeting.vcs" \
+ "./data/meeting.ics z:/data/others/meeting.ics"
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/bwins/calenviewsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,162 @@
+EXPORTS
+ ?scrollingFinished@CalenPreviewPane@@QAEXXZ @ 1 NONAME ; void CalenPreviewPane::scrollingFinished(void)
+ ?fetchEntriesAndUpdateModel@CalenMonthView@@QAEXXZ @ 2 NONAME ; void CalenMonthView::fetchEntriesAndUpdateModel(void)
+ ?setDate@CalenMonthView@@AAEXXZ @ 3 NONAME ; void CalenMonthView::setDate(void)
+ ?showHideRegionalInformation@CalenMonthView@@AAEXXZ @ 4 NONAME ; void CalenMonthView::showHideRegionalInformation(void)
+ ?updateMonthGridWithEventIndicators@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@@Z @ 5 NONAME ; void CalenMonthGrid::updateMonthGridWithEventIndicators(class QList<class CalenMonthData> &)
+ ?handleGridItemActivated@CalenMonthView@@QAEXXZ @ 6 NONAME ; void CalenMonthView::handleGridItemActivated(void)
+ ?setFocusToProperDay@CalenMonthGrid@@AAEXXZ @ 7 NONAME ; void CalenMonthGrid::setFocusToProperDay(void)
+ ??1CalenPreviewPane@@UAE@XZ @ 8 NONAME ; CalenPreviewPane::~CalenPreviewPane(void)
+ ?mousePressEvent@CalenMonthGrid@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 9 NONAME ; void CalenMonthGrid::mousePressEvent(class QGraphicsSceneMouseEvent *)
+ ?completePopulation@CalenMonthView@@AAEXXZ @ 10 NONAME ; void CalenMonthView::completePopulation(void)
+ ??0CalenAgendaViewWidget@@QAE@AAVMCalenServices@@PAVCalenDocLoader@@@Z @ 11 NONAME ; CalenAgendaViewWidget::CalenAgendaViewWidget(class MCalenServices &, class CalenDocLoader *)
+ ?handleAppendingRows@CalenMonthGrid@@AAEXAAV?$QList@VCalenMonthData@@@@@Z @ 12 NONAME ; void CalenMonthGrid::handleAppendingRows(class QList<class CalenMonthData> &)
+ ?handleChangeOrientation@CalenMonthView@@AAEXXZ @ 13 NONAME ; void CalenMonthView::handleChangeOrientation(void)
+ ?staticMetaObject@CalenSettingsView@@2UQMetaObject@@B @ 14 NONAME ; struct QMetaObject const CalenSettingsView::staticMetaObject
+ ?docLoader@CalenAgendaView@@QAEPAVCalenDocLoader@@XZ @ 15 NONAME ; class CalenDocLoader * CalenAgendaView::docLoader(void)
+ ?getStaticMetaObject@CalenSettingsView@@SAABUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const & CalenSettingsView::getStaticMetaObject(void)
+ ?updateMonthDataArrayWithActiveDates@CalenMonthView@@AAEXXZ @ 17 NONAME ; void CalenMonthView::updateMonthDataArrayWithActiveDates(void)
+ ?scrollingFinished@CalenMonthGrid@@QAEXXZ @ 18 NONAME ; void CalenMonthGrid::scrollingFinished(void)
+ ?setCurrentIdex@CalenMonthGrid@@QAEXH@Z @ 19 NONAME ; void CalenMonthGrid::setCurrentIdex(int)
+ ?setupView@CalenAgendaView@@QAEXPAVCalenDocLoader@@@Z @ 20 NONAME ; void CalenAgendaView::setupView(class CalenDocLoader *)
+ ??_ECalenMonthGrid@@UAE@I@Z @ 21 NONAME ; CalenMonthGrid::~CalenMonthGrid(unsigned int)
+ ?trUtf8@CalenPreviewPane@@SA?AVQString@@PBD0@Z @ 22 NONAME ; class QString CalenPreviewPane::trUtf8(char const *, char const *)
+ ?trUtf8@CalenMonthGrid@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString CalenMonthGrid::trUtf8(char const *, char const *)
+ ?populatePrevMonth@CalenMonthView@@QAEXXZ @ 24 NONAME ; void CalenMonthView::populatePrevMonth(void)
+ ?qt_metacall@CalenSettingsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 25 NONAME ; int CalenSettingsView::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??1CalenPluginLabel@@UAE@XZ @ 26 NONAME ; CalenPluginLabel::~CalenPluginLabel(void)
+ ?handleLeftEffectCompleted@CalenMonthView@@AAEXABUEffectStatus@HbEffect@@@Z @ 27 NONAME ; void CalenMonthView::handleLeftEffectCompleted(struct HbEffect::EffectStatus const &)
+ ?getStaticMetaObject@CalenMonthGrid@@SAABUQMetaObject@@XZ @ 28 NONAME ; struct QMetaObject const & CalenMonthGrid::getStaticMetaObject(void)
+ ?trUtf8@CalenSettingsView@@SA?AVQString@@PBD0H@Z @ 29 NONAME ; class QString CalenSettingsView::trUtf8(char const *, char const *, int)
+ ?qt_metacast@CalenMonthView@@UAEPAXPBD@Z @ 30 NONAME ; void * CalenMonthView::qt_metacast(char const *)
+ ?staticMetaObject@CalenMonthView@@2UQMetaObject@@B @ 31 NONAME ; struct QMetaObject const CalenMonthView::staticMetaObject
+ ?setupView@CalenMonthView@@QAEXPAVCalenDocLoader@@@Z @ 32 NONAME ; void CalenMonthView::setupView(class CalenDocLoader *)
+ ?metaObject@CalenMonthGrid@@UBEPBUQMetaObject@@XZ @ 33 NONAME ; struct QMetaObject const * CalenMonthGrid::metaObject(void) const
+ ?startAutoScroll@CalenPreviewPane@@QAEXXZ @ 34 NONAME ; void CalenPreviewPane::startAutoScroll(void)
+ ?doLazyLoading@CalenMonthView@@QAEXXZ @ 35 NONAME ; void CalenMonthView::doLazyLoading(void)
+ ?setView@CalenMonthGrid@@QAEXPAVCalenMonthView@@@Z @ 36 NONAME ; void CalenMonthGrid::setView(class CalenMonthView *)
+ ??1CalenSettingsView@@UAE@XZ @ 37 NONAME ; CalenSettingsView::~CalenSettingsView(void)
+ ?Date@CalenPreviewPane@@QAE?AVQDateTime@@XZ @ 38 NONAME ; class QDateTime CalenPreviewPane::Date(void)
+ ?tr@CalenPreviewPane@@SA?AVQString@@PBD0H@Z @ 39 NONAME ; class QString CalenPreviewPane::tr(char const *, char const *, int)
+ ?metaObject@CalenMonthView@@UBEPBUQMetaObject@@XZ @ 40 NONAME ; struct QMetaObject const * CalenMonthView::metaObject(void) const
+ ??0CalenPreviewPane@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 41 NONAME ; CalenPreviewPane::CalenPreviewPane(class MCalenServices &, class QGraphicsItem *)
+ ?rowsInPrevMonth@CalenMonthView@@QAEHXZ @ 42 NONAME ; int CalenMonthView::rowsInPrevMonth(void)
+ ?handlePrependingRows@CalenMonthGrid@@AAEXAAV?$QList@VCalenMonthData@@@@@Z @ 43 NONAME ; void CalenMonthGrid::handlePrependingRows(class QList<class CalenMonthData> &)
+ ?metaObject@CalenPreviewPane@@UBEPBUQMetaObject@@XZ @ 44 NONAME ; struct QMetaObject const * CalenPreviewPane::metaObject(void) const
+ ?clearListModel@CalenAgendaView@@QAEXXZ @ 45 NONAME ; void CalenAgendaView::clearListModel(void)
+ ?gestureEvent@CalenMonthGrid@@MAEXPAVQGestureEvent@@@Z @ 46 NONAME ; void CalenMonthGrid::gestureEvent(class QGestureEvent *)
+ ??0CalenDayView@@QAE@AAVMCalenServices@@@Z @ 47 NONAME ; CalenDayView::CalenDayView(class MCalenServices &)
+ ?populateNextMonth@CalenMonthView@@QAEXXZ @ 48 NONAME ; void CalenMonthView::populateNextMonth(void)
+ ?handleRightEffectCompleted@CalenMonthView@@AAEXABUEffectStatus@HbEffect@@@Z @ 49 NONAME ; void CalenMonthView::handleRightEffectCompleted(struct HbEffect::EffectStatus const &)
+ ?qt_metacast@CalenMonthGrid@@UAEPAXPBD@Z @ 50 NONAME ; void * CalenMonthGrid::qt_metacast(char const *)
+ ?firstDayOfGrid@CalenMonthView@@QAE?AVQDateTime@@XZ @ 51 NONAME ; class QDateTime CalenMonthView::firstDayOfGrid(void)
+ ?rowsInFutMonth@CalenMonthView@@QAEHXZ @ 52 NONAME ; int CalenMonthView::rowsInFutMonth(void)
+ ?launchDayView@CalenMonthView@@QAEXXZ @ 53 NONAME ; void CalenMonthView::launchDayView(void)
+ ?getCurrGridIndex@CalenMonthView@@QAEHXZ @ 54 NONAME ; int CalenMonthView::getCurrGridIndex(void)
+ ?gestureEvent@CalenPreviewPane@@MAEXPAVQGestureEvent@@@Z @ 55 NONAME ; void CalenPreviewPane::gestureEvent(class QGestureEvent *)
+ ?prependRows@CalenMonthGrid@@QAEXXZ @ 56 NONAME ; void CalenMonthGrid::prependRows(void)
+ ?orientationChanged@CalenMonthGrid@@MAEXW4Orientation@Qt@@@Z @ 57 NONAME ; void CalenMonthGrid::orientationChanged(enum Qt::Orientation)
+ ?qt_metacall@CalenPreviewPane@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 58 NONAME ; int CalenPreviewPane::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?trUtf8@CalenPreviewPane@@SA?AVQString@@PBD0H@Z @ 59 NONAME ; class QString CalenPreviewPane::trUtf8(char const *, char const *, int)
+ ??1CalenThickLinesDrawer@@UAE@XZ @ 60 NONAME ; CalenThickLinesDrawer::~CalenThickLinesDrawer(void)
+ ?setView@CalenPreviewPane@@QAEXPAVCalenMonthView@@@Z @ 61 NONAME ; void CalenPreviewPane::setView(class CalenMonthView *)
+ ??_ECalenMonthView@@UAE@I@Z @ 62 NONAME ; CalenMonthView::~CalenMonthView(unsigned int)
+ ??1CalenAgendaView@@UAE@XZ @ 63 NONAME ; CalenAgendaView::~CalenAgendaView(void)
+ ?populatePreviewPane@CalenMonthView@@QAEXAAVQDateTime@@@Z @ 64 NONAME ; void CalenMonthView::populatePreviewPane(class QDateTime &)
+ ??0CalenSettingsView@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 65 NONAME ; CalenSettingsView::CalenSettingsView(class MCalenServices &, class QGraphicsItem *)
+ ??0CalenAgendaView@@QAE@AAVMCalenServices@@@Z @ 66 NONAME ; CalenAgendaView::CalenAgendaView(class MCalenServices &)
+ ?updateModelWithPrevMonth@CalenMonthView@@QAEXXZ @ 67 NONAME ; void CalenMonthView::updateModelWithPrevMonth(void)
+ ?stopScrolling@CalenPreviewPane@@QAEXXZ @ 68 NONAME ; void CalenPreviewPane::stopScrolling(void)
+ ?refreshView@CalenSettingsView@@QAEXXZ @ 69 NONAME ; void CalenSettingsView::refreshView(void)
+ ?addBackgroundFrame@CalenMonthView@@AAEXXZ @ 70 NONAME ; void CalenMonthView::addBackgroundFrame(void)
+ ?createGrid@CalenMonthView@@AAEXXZ @ 71 NONAME ; void CalenMonthView::createGrid(void)
+ ?tr@CalenPreviewPane@@SA?AVQString@@PBD0@Z @ 72 NONAME ; class QString CalenPreviewPane::tr(char const *, char const *)
+ ?getStaticMetaObject@CalenPreviewPane@@SAABUQMetaObject@@XZ @ 73 NONAME ; struct QMetaObject const & CalenPreviewPane::getStaticMetaObject(void)
+ ?launchPreviousView@CalenSettingsView@@AAEXXZ @ 74 NONAME ; void CalenSettingsView::launchPreviousView(void)
+ ?setCurrGridIndex@CalenMonthView@@QAEXH@Z @ 75 NONAME ; void CalenMonthView::setCurrGridIndex(int)
+ ?setDateToLabel@CalenMonthView@@AAEXXZ @ 76 NONAME ; void CalenMonthView::setDateToLabel(void)
+ ?addWeekNumbers@CalenMonthView@@AAEXXZ @ 77 NONAME ; void CalenMonthView::addWeekNumbers(void)
+ ?downGesture@CalenMonthGrid@@AAEXXZ @ 78 NONAME ; void CalenMonthGrid::downGesture(void)
+ ?qt_metacall@CalenThickLinesDrawer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 79 NONAME ; int CalenThickLinesDrawer::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?setupView@CalenDayView@@QAEXPAVCalenDocLoader@@@Z @ 80 NONAME ; void CalenDayView::setupView(class CalenDocLoader *)
+ ?upGesture@CalenMonthGrid@@AAEXXZ @ 81 NONAME ; void CalenMonthGrid::upGesture(void)
+ ??1CalenMonthView@@UAE@XZ @ 82 NONAME ; CalenMonthView::~CalenMonthView(void)
+ ?dateFromContext@CalenMonthView@@AAE?AVQDateTime@@ABVMCalenContext@@@Z @ 83 NONAME ; class QDateTime CalenMonthView::dateFromContext(class MCalenContext const &)
+ ?staticMetaObject@CalenMonthGrid@@2UQMetaObject@@B @ 84 NONAME ; struct QMetaObject const CalenMonthGrid::staticMetaObject
+ ?trUtf8@CalenMonthGrid@@SA?AVQString@@PBD0H@Z @ 85 NONAME ; class QString CalenMonthGrid::trUtf8(char const *, char const *, int)
+ ?paint@CalenThickLinesDrawer@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 86 NONAME ; void CalenThickLinesDrawer::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+ ?initializeForm@CalenSettingsView@@QAEXXZ @ 87 NONAME ; void CalenSettingsView::initializeForm(void)
+ ?tr@CalenMonthGrid@@SA?AVQString@@PBD0H@Z @ 88 NONAME ; class QString CalenMonthGrid::tr(char const *, char const *, int)
+ ?handlePanGestureFinished@CalenMonthGrid@@AAEXXZ @ 89 NONAME ; void CalenMonthGrid::handlePanGestureFinished(void)
+ ?goToToday@CalenMonthView@@AAEXXZ @ 90 NONAME ; void CalenMonthView::goToToday(void)
+ ?trUtf8@CalenThickLinesDrawer@@SA?AVQString@@PBD0H@Z @ 91 NONAME ; class QString CalenThickLinesDrawer::trUtf8(char const *, char const *, int)
+ ?onContextChanged@CalenMonthView@@EAEXXZ @ 92 NONAME ; void CalenMonthView::onContextChanged(void)
+ ?qt_metacast@CalenPreviewPane@@UAEPAXPBD@Z @ 93 NONAME ; void * CalenPreviewPane::qt_metacast(char const *)
+ ?getCurrentIndex@CalenMonthGrid@@QAEHXZ @ 94 NONAME ; int CalenMonthGrid::getCurrentIndex(void)
+ ?tr@CalenSettingsView@@SA?AVQString@@PBD0H@Z @ 95 NONAME ; class QString CalenSettingsView::tr(char const *, char const *, int)
+ ?removeWeekNumbers@CalenMonthView@@AAEXXZ @ 96 NONAME ; void CalenMonthView::removeWeekNumbers(void)
+ ?trUtf8@CalenMonthView@@SA?AVQString@@PBD0H@Z @ 97 NONAME ; class QString CalenMonthView::trUtf8(char const *, char const *, int)
+ ??0CalenMonthView@@QAE@AAVMCalenServices@@@Z @ 98 NONAME ; CalenMonthView::CalenMonthView(class MCalenServices &)
+ ?getStaticMetaObject@CalenThickLinesDrawer@@SAABUQMetaObject@@XZ @ 99 NONAME ; struct QMetaObject const & CalenThickLinesDrawer::getStaticMetaObject(void)
+ ?setNoEntriesLabel@CalenPreviewPane@@QAEXPAVHbLabel@@@Z @ 100 NONAME ; void CalenPreviewPane::setNoEntriesLabel(class HbLabel *)
+ ??0CalenThickLinesDrawer@@QAE@W4WidgetType@CalendarNamespace@@PAVQGraphicsItem@@@Z @ 101 NONAME ; CalenThickLinesDrawer::CalenThickLinesDrawer(enum CalendarNamespace::WidgetType, class QGraphicsItem *)
+ ?onLocaleChanged@CalenMonthView@@UAEXH@Z @ 102 NONAME ; void CalenMonthView::onLocaleChanged(int)
+ ?doPopulation@CalenMonthView@@UAEXXZ @ 103 NONAME ; void CalenMonthView::doPopulation(void)
+ ?tr@CalenMonthView@@SA?AVQString@@PBD0H@Z @ 104 NONAME ; class QString CalenMonthView::tr(char const *, char const *, int)
+ ?captureScreenshot@CalenNativeView@@QAEX_N@Z @ 105 NONAME ; void CalenNativeView::captureScreenshot(bool)
+ ?GetInstanceListL@CalenPreviewPane@@AAEXXZ @ 106 NONAME ; void CalenPreviewPane::GetInstanceListL(void)
+ ?getInstanceList@CalenMonthView@@AAEXAAV?$QList@VQDate@@@@VQDateTime@@1@Z @ 107 NONAME ; void CalenMonthView::getInstanceList(class QList<class QDate> &, class QDateTime, class QDateTime)
+ ?tr@CalenMonthView@@SA?AVQString@@PBD0@Z @ 108 NONAME ; class QString CalenMonthView::tr(char const *, char const *)
+ ??0CalenMonthGrid@@QAE@PAVQGraphicsItem@@@Z @ 109 NONAME ; CalenMonthGrid::CalenMonthGrid(class QGraphicsItem *)
+ ?refreshViewOnGoToDate@CalenMonthView@@EAEXXZ @ 110 NONAME ; void CalenMonthView::refreshViewOnGoToDate(void)
+ ?appendRows@CalenMonthGrid@@QAEXXZ @ 111 NONAME ; void CalenMonthGrid::appendRows(void)
+ ?HandleNotification@CalenAgendaView@@UAEXW4TCalenNotification@@@Z @ 112 NONAME ; void CalenAgendaView::HandleNotification(enum TCalenNotification)
+ ?tr@CalenThickLinesDrawer@@SA?AVQString@@PBD0H@Z @ 113 NONAME ; class QString CalenThickLinesDrawer::tr(char const *, char const *, int)
+ ??0CalenPluginLabel@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 114 NONAME ; CalenPluginLabel::CalenPluginLabel(class MCalenServices &, class QGraphicsItem *)
+ ?mouseReleaseEvent@CalenMonthGrid@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 115 NONAME ; void CalenMonthGrid::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
+ ?updateMonthGridWithInActiveMonths@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@@Z @ 116 NONAME ; void CalenMonthGrid::updateMonthGridWithInActiveMonths(class QList<class CalenMonthData> &)
+ ?getCurrentDay@CalenMonthView@@QAE?AVQDateTime@@XZ @ 117 NONAME ; class QDateTime CalenMonthView::getCurrentDay(void)
+ ?staticMetaObject@CalenPreviewPane@@2UQMetaObject@@B @ 118 NONAME ; struct QMetaObject const CalenPreviewPane::staticMetaObject
+ ?doPopulation@CalenAgendaView@@UAEXXZ @ 119 NONAME ; void CalenAgendaView::doPopulation(void)
+ ?tr@CalenSettingsView@@SA?AVQString@@PBD0@Z @ 120 NONAME ; class QString CalenSettingsView::tr(char const *, char const *)
+ ?onTwoSecondsTimeout@CalenPreviewPane@@QAEXXZ @ 121 NONAME ; void CalenPreviewPane::onTwoSecondsTimeout(void)
+ ?tr@CalenThickLinesDrawer@@SA?AVQString@@PBD0@Z @ 122 NONAME ; class QString CalenThickLinesDrawer::tr(char const *, char const *)
+ ?staticMetaObject@CalenThickLinesDrawer@@2UQMetaObject@@B @ 123 NONAME ; struct QMetaObject const CalenThickLinesDrawer::staticMetaObject
+ ?populateWithInstanceView@CalenMonthView@@AAEXXZ @ 124 NONAME ; void CalenMonthView::populateWithInstanceView(void)
+ ?trUtf8@CalenThickLinesDrawer@@SA?AVQString@@PBD0@Z @ 125 NONAME ; class QString CalenThickLinesDrawer::trUtf8(char const *, char const *)
+ ??1CalenAgendaViewWidget@@UAE@XZ @ 126 NONAME ; CalenAgendaViewWidget::~CalenAgendaViewWidget(void)
+ ?populateLabel@CalenPreviewPane@@QAEXVQDateTime@@@Z @ 127 NONAME ; void CalenPreviewPane::populateLabel(class QDateTime)
+ ?doPopulation@CalenDayView@@UAEXXZ @ 128 NONAME ; void CalenDayView::doPopulation(void)
+ ??1CalenDayView@@UAE@XZ @ 129 NONAME ; CalenDayView::~CalenDayView(void)
+ ?updateModelWithFutureMonth@CalenMonthView@@QAEXXZ @ 130 NONAME ; void CalenMonthView::updateModelWithFutureMonth(void)
+ ?monthDataList@CalenMonthView@@QAE?AV?$QList@VCalenMonthData@@@@XZ @ 131 NONAME ; class QList<class CalenMonthData> CalenMonthView::monthDataList(void)
+ ?updateMonthGridModel@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@H_N@Z @ 132 NONAME ; void CalenMonthGrid::updateMonthGridModel(class QList<class CalenMonthData> &, int, bool)
+ ??1CalenMonthGrid@@UAE@XZ @ 133 NONAME ; CalenMonthGrid::~CalenMonthGrid(void)
+ ?metaObject@CalenThickLinesDrawer@@UBEPBUQMetaObject@@XZ @ 134 NONAME ; struct QMetaObject const * CalenThickLinesDrawer::metaObject(void) const
+ ?updateWeekNumGridModel@CalenMonthView@@AAEXXZ @ 135 NONAME ; void CalenMonthView::updateWeekNumGridModel(void)
+ ?qt_metacast@CalenThickLinesDrawer@@UAEPAXPBD@Z @ 136 NONAME ; void * CalenThickLinesDrawer::qt_metacast(char const *)
+ ?prepareForPopulation@CalenMonthView@@AAEXXZ @ 137 NONAME ; void CalenMonthView::prepareForPopulation(void)
+ ?handlePreviewPaneGesture@CalenMonthView@@QAEX_N@Z @ 138 NONAME ; void CalenMonthView::handlePreviewPaneGesture(bool)
+ ?updateDayLabel@CalenMonthView@@AAEXXZ @ 139 NONAME ; void CalenMonthView::updateDayLabel(void)
+ ?setActiveDates@CalenMonthGrid@@AAEXVQDate@@@Z @ 140 NONAME ; void CalenMonthGrid::setActiveDates(class QDate)
+ ?trUtf8@CalenMonthView@@SA?AVQString@@PBD0@Z @ 141 NONAME ; class QString CalenMonthView::trUtf8(char const *, char const *)
+ ?setContextForActiveDay@CalenMonthView@@QAEXH@Z @ 142 NONAME ; void CalenMonthView::setContextForActiveDay(int)
+ ?trUtf8@CalenSettingsView@@SA?AVQString@@PBD0@Z @ 143 NONAME ; class QString CalenSettingsView::trUtf8(char const *, char const *)
+ ??_ECalenSettingsView@@UAE@I@Z @ 144 NONAME ; CalenSettingsView::~CalenSettingsView(unsigned int)
+ ??_ECalenThickLinesDrawer@@UAE@I@Z @ 145 NONAME ; CalenThickLinesDrawer::~CalenThickLinesDrawer(unsigned int)
+ ?metaObject@CalenSettingsView@@UBEPBUQMetaObject@@XZ @ 146 NONAME ; struct QMetaObject const * CalenSettingsView::metaObject(void) const
+ ?getStaticMetaObject@CalenMonthView@@SAABUQMetaObject@@XZ @ 147 NONAME ; struct QMetaObject const & CalenMonthView::getStaticMetaObject(void)
+ ?changeOrientation@CalenMonthView@@EAEXW4Orientation@Qt@@@Z @ 148 NONAME ; void CalenMonthView::changeOrientation(enum Qt::Orientation)
+ ?paint@CalenMonthGrid@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 149 NONAME ; void CalenMonthGrid::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
+ ?tr@CalenMonthGrid@@SA?AVQString@@PBD0@Z @ 150 NONAME ; class QString CalenMonthGrid::tr(char const *, char const *)
+ ?qt_metacast@CalenSettingsView@@UAEPAXPBD@Z @ 151 NONAME ; void * CalenSettingsView::qt_metacast(char const *)
+ ?qt_metacall@CalenMonthView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 152 NONAME ; int CalenMonthView::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?disconnectAboutToQuitEvent@CalenAgendaView@@QAEXXZ @ 153 NONAME ; void CalenAgendaView::disconnectAboutToQuitEvent(void)
+ ?setActiveDay@CalenMonthView@@AAEXVQDateTime@@@Z @ 154 NONAME ; void CalenMonthView::setActiveDay(class QDateTime)
+ ?itemActivated@CalenMonthGrid@@QAEXABVQModelIndex@@@Z @ 155 NONAME ; void CalenMonthGrid::itemActivated(class QModelIndex const &)
+ ?qt_metacall@CalenMonthGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 156 NONAME ; int CalenMonthGrid::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?createEditor@CalenMonthView@@AAEXXZ @ 157 NONAME ; void CalenMonthView::createEditor(void)
+ ??_ECalenPreviewPane@@UAE@I@Z @ 158 NONAME ; CalenPreviewPane::~CalenPreviewPane(unsigned int)
+ ?getActiveDay@CalenMonthView@@QAE?AVQDateTime@@XZ @ 159 NONAME ; class QDateTime CalenMonthView::getActiveDay(void)
+ ?addRemoveActionsInMenu@CalenMonthView@@AAEXXZ @ 160 NONAME ; void CalenMonthView::addRemoveActionsInMenu(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/dayview.pri Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,60 @@
+# Copyright (c) 2010 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: Project definition include file for Day View
+
+# Input
+
+# Enables panning-effect when swiching between days
+# Uncomment to enable
+#DEFINES += CALENDAYVIEW_PANNING_ENABLED
+
+INCLUDEPATH += ./dayview/inc \
+ $${EPOCROOT}sf/mw/hb/include/hbwidgets/private
+
+DEPENDPATH += ./dayview/inc \
+ ./dayview/src
+
+HEADERS += calendayview.h \
+ calendaycommonheaders.h \
+ calendayutils.h \
+ calendaycontentscrollarea.h \
+ calendayhourscrollarea.h \
+ calendaycontentwidget.h \
+ calendaymodelmanager.h \
+ calendaymodel.h \
+ calendayitemview.h \
+ calendaycontainer.h \
+ calendayinfo.h \
+ calendayitem.h \
+ calendayhourelement.h \
+ calendaystatusstrip.h \
+ calendayeventspane.h
+
+SOURCES += calendayview.cpp \
+ calendayutils.cpp \
+ calendaycontentscrollarea.cpp \
+ calendayhourscrollarea.cpp \
+ calendaycontentwidget.cpp \
+ calendaymodelmanager.cpp \
+ calendaymodel.cpp \
+ calendayitemview.cpp \
+ calendaycontainer.cpp \
+ calendayinfo.cpp \
+ calendayitem.cpp \
+ calendayhourelement.cpp \
+ calendaystatusstrip.cpp \
+ calendayeventspane.cpp
+
+RESOURCES += dayview/resources/calendaywidgets.qrc
+
+# End of file --Don't remove this.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaycommonheaders.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,67 @@
+/*
+* Copyright (c) 2010 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: CalenDay commons.
+*
+*/
+
+#ifndef CALENDAYCOMMONHEADERS_H_
+#define CALENDAYCOMMONHEADERS_H_
+
+// Constants
+
+/*!
+ Default timeout for scrolling between days [ms]
+ */
+const int KCalenScrollDaysTimeout = 600;
+
+/*!
+ Value [%] defines how long (depending on content area width) should horizontal
+ pan gesture be to change day to previous/next.
+ If the gesture is shorter - current view is not changed.
+ */
+const int KCalenHScrollMoveParam = 30; //!< Percentage
+
+/*!
+ Value [degree] defines the max. angle of swipe gesture which should change day.
+ */
+const qreal KCalenSwipeAngle = 30;
+
+
+// Enumerations
+
+/*!
+ \enum CalenPanDirection
+ \brief Enumeration identifies pan gesture directions.
+ */
+enum CalenPanDirection
+{
+ ECalenPanNotSet = 0,
+ ECalenPanVertical,
+ ECalenPanHorizontal
+};
+
+/*!
+ \enum CalenScrollDirection
+ \brief Enumeration identifies horizontal scroll directions of scroll area.
+
+ ECalenScrollNoDayChange means that move does not change the current day.
+ */
+enum CalenScrollDirection
+{
+ ECalenScrollNoDayChange = 0,
+ ECalenScrollToNext,
+ ECalenScrollToPrev
+};
+
+#endif /* CALENDAYCOMMONHEADERS_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaycontainer.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,191 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+#ifndef CALENDAYCONTAINER_H
+#define CALENDAYCONTAINER_H
+
+//System includes
+#include <QDateTime>
+
+#include "../../../../../mw/hb/src/hbwidgets/itemviews/hbabstractitemcontainer_p.h"
+
+//User includes
+
+//Forward declarations
+class CalenDayInfo;
+class TouchEventAbsorber;
+
+class CalenDayContainer : public HbAbstractItemContainer
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ * Constructor.
+ */
+ CalenDayContainer(QGraphicsItem *parent = 0);
+
+ /**
+ * Destructor.
+ */
+ ~CalenDayContainer();
+
+ /**
+ *
+ */
+ void itemAdded (int index, HbAbstractViewItem *item, bool animate);
+
+ /**
+ *
+ */
+ void itemRemoved (HbAbstractViewItem *item, bool animate);
+
+ /**
+ *
+ */
+ void reset();
+
+ /**
+ *
+ */
+ void viewResized (const QSizeF &size);
+
+ /**
+ * Sets day's info structer to the container.
+ *
+ * @param dayInfo Day info.
+ */
+ void setDayInfo( CalenDayInfo* dayInfo );
+
+public slots:
+
+ /**
+ * Slot handles layout switch.
+ * @param orientation Current device orientation
+ */
+ void orientationChanged(Qt::Orientation orientation);
+
+protected:
+
+ /**
+ *
+ */
+ HbAbstractViewItem * createDefaultPrototype() const;
+
+ /**
+ *
+ */
+ void setItemModelIndex(HbAbstractViewItem *item, const QModelIndex &index);
+
+ /**
+ * Updates geometry of a timed event.
+ */
+ void updateTimedEventGeometry(HbAbstractViewItem *item,
+ const QModelIndex &index);
+
+ /**
+ * Updates geometry of a all-day events
+ */
+ void updateAllDayEventGeometry(HbAbstractViewItem *item,
+ const QModelIndex &index);
+
+ /**
+ * Structure with event layout values.
+ *
+ * eventAreaX X value for event area start.
+ * eventAreaWidth The width of event area.
+ * eventMargin Margins between the multiple events.
+ * slotHeight Half hour slot's height.
+ * unitInPixels no. of pixels in 1un
+ */
+
+ struct LayoutValues {
+ LayoutValues()
+ :eventAreaX(0),
+ eventAreaWidth(0),
+ eventMargin(0),
+ slotHeight(0),
+ unitInPixels(0),
+ maxColumns(0)
+ {}
+
+ qreal eventAreaX;
+ qreal eventAreaWidth;
+ qreal eventMargin;
+ qreal slotHeight;
+ qreal unitInPixels;
+ int maxColumns;
+ };
+
+ /**
+ * Gets event layout values.
+ *
+ * @param layoutValues structure to be filled with layout data
+ */
+ void getTimedEventLayoutValues(LayoutValues& layoutValues);
+
+
+ /**
+ * creates absorbers which prevent touching to small items
+ * (according to UI spec items smaller than ... are untouchable)
+ */
+ void createTouchEventAbsorbers();
+
+ /**
+ *
+ */
+ TouchEventAbsorber* crateAbsorberBetweenSlots(int startSlot, int endSlot);
+
+private:
+
+ bool mGeometryUpdated;
+
+ QDateTime mDateTime;
+
+ /**
+ * Day event info.
+ * Not own.
+ */
+ CalenDayInfo* mInfo;
+
+ LayoutValues mLayoutValues;
+ QList<TouchEventAbsorber*> mAbsorbers;
+};
+
+
+
+class TouchEventAbsorber : public HbWidget
+ {
+ Q_OBJECT
+ public:
+ TouchEventAbsorber(QGraphicsItem *parent=0);
+ ~TouchEventAbsorber();
+
+ protected:
+ void gestureEvent(QGestureEvent *event);
+
+#ifdef _DEBUG
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget);
+#endif
+
+ };
+
+#endif // CALENDAYCONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaycontentscrollarea.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,80 @@
+/*
+ * Copyright (c) 2010 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: CalenDayContentScrollArea class definition.
+ *
+ */
+
+#ifndef CALENDAYCONTENTSCROLLAREA_H_
+#define CALENDAYCONTENTSCROLLAREA_H_
+
+// System includes
+#include <hbscrollarea.h>
+
+// User includes
+#include "calendaycommonheaders.h"
+
+// Class declaration
+class CalenDayContentScrollArea : public HbScrollArea
+{
+Q_OBJECT
+
+public:
+ CalenDayContentScrollArea(QGraphicsItem *parent = 0);
+ virtual ~CalenDayContentScrollArea();
+
+signals:
+ void scrollAreaMoveStarted(CalenScrollDirection scrollTo);
+ void scrollAreaMoveFinished(CalenScrollDirection scrollTo);
+
+public slots:
+ void scrollToMiddleWidget();
+
+protected:
+ bool scrollByAmount(const QPointF &delta);
+
+ void gestureEvent(QGestureEvent *event);
+ bool eventFilter(QObject *obj, QEvent *event);
+ bool event(QEvent *e);
+
+private: // private functions
+ void checkPanDirection(QPanGesture *panGesture);
+ void moveTo(const QPointF &newPosition, int time = 0);
+
+private slots:
+ void moveFinished();
+ void orientationChanged(Qt::Orientation orientation);
+
+private: // data
+ QPointF mStartPosition; //!< Start position of movement
+
+ qreal mContentWidth; //!< Content width
+
+ Qt::Orientation mOrientation; //!< Stores current orientation
+
+ /*!
+ \brief Pan gesture direction indicator
+
+ Member is used when switching widgets by panning gesture is enabled.
+ */
+ CalenPanDirection mPanDayDirection;
+
+ bool mIsMoving; //!< Indicates if moving of scroll area is in progress
+
+ /*!
+ \brief Scroll area horizontal move direction
+ */
+ CalenScrollDirection mMoveDirection;
+};
+
+#endif /* CALENDAYCONTENTSCROLLAREA_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaycontentwidget.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,75 @@
+/*
+ * Copyright (c) 2010 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: CalenDayContentWidget class definition.
+ *
+ */
+
+#ifndef CALENDAYCONTENTWIDGET_H_
+#define CALENDAYCONTENTWIDGET_H_
+
+// System includes
+#include <hbwidget.h>
+
+// User includes
+#include "calendaycommonheaders.h"
+
+// Forward declarations
+class QGraphicsLinearLayout;
+class CalenDayModelManager;
+
+
+class CalenDayContentWidget : public HbWidget
+{
+Q_OBJECT
+
+public:
+ /*!
+ \enum CalenWidgetPosition
+ \brief Enumeration identifies widget position if queue.
+ */
+ enum CalenWidgetPosition
+ {
+ ECalenLastWidget = 0,
+ ECalenFirstWidget
+ };
+
+public:
+ CalenDayContentWidget(CalenDayModelManager &modelManager,
+ QGraphicsItem *parent = 0);
+ ~CalenDayContentWidget();
+
+ void add(HbWidget* item, CalenWidgetPosition where = ECalenLastWidget);
+ HbWidget* take(CalenWidgetPosition which);
+ void remove(CalenWidgetPosition which);
+
+signals:
+ void widgetsRelayoutFinished(CalenScrollDirection scrollTo);
+ void scrollPositionChanged(const QPointF &newPos);
+
+public slots:
+ void relayoutWidgets(CalenScrollDirection scrollTo);
+ void widgetScrolled(const QPointF &newPos);
+
+private:
+ void initializeViews(QGraphicsItem *parent);
+
+private:
+ QGraphicsLinearLayout* mLayout; //!< Linear layout for day views
+
+ QList<HbWidget*> mWidgets; //!< List of widget instances
+
+ CalenDayModelManager &mModelManager; //!< Reference to model manager
+};
+
+#endif /* CALENDAYCONTENTWIDGET_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayeventspane.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+#ifndef CALENDAYEVENTSPANE_H_
+#define CALENDAYEVENTSPANE_H_
+
+// System includes
+#include <QPen>
+#include <HbWidget>
+
+class CalenDayEventsPane : public HbWidget
+{
+public:
+ CalenDayEventsPane(HbWidget *parent=0);
+ virtual ~CalenDayEventsPane();
+
+ void drawTopLine(bool drawTopLine = false);
+
+protected:
+ void paint(QPainter * painter, const QStyleOptionGraphicsItem * option,
+ QWidget * widget);
+
+private:
+ QColor mHourLineColor;
+ qreal mUnitInPixels;
+ QPen mCustomDashedPen;
+ bool mDrawTopLine; //!< Flag indicates if top line should be drawn
+};
+
+#endif /* CALENDAYEVENTSPANE_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayhourelement.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,61 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+#ifndef CALENDAYHOURELEMENT_H
+#define CALENDAYHOURELEMENT_H
+
+//System includes
+#include <QTime>
+#include <QPen>
+#include <hbwidget.h>
+
+//User includes
+
+
+//Forward declarations
+class CalenDayHourScrollArea;
+
+class CalenDayHourElement : public HbWidget
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ * Constructor.
+ */
+ CalenDayHourElement(const QTime &time, QGraphicsItem *parent=0);
+
+ /**
+ * Destructor.
+ */
+ virtual ~CalenDayHourElement();
+
+ /**
+ *
+ */
+ void paint(QPainter * painter, const QStyleOptionGraphicsItem * option, QWidget * widget);
+
+private:
+
+ CalenDayHourScrollArea *mContainer;
+ QTime mHour;
+ QColor mHourLineColor;
+ qreal mUnitInPixels;
+};
+
+#endif // CALENDAYHOURELEMENT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayhourscrollarea.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,52 @@
+/*
+ * Copyright (c) 2010 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: CalenDayHourScrollArea class definition.
+ *
+ */
+
+#ifndef CALENDAYHOURSCROLLAREA_H_
+#define CALENDAYHOURSCROLLAREA_H_
+
+// System includes
+#include <hbscrollarea.h>
+#include <QDateTime>
+
+// User includes
+#include "calendaycommonheaders.h"
+
+//forward declarations
+class CalenDayHourElement;
+
+// Class declaration
+class CalenDayHourScrollArea : public HbScrollArea
+{
+Q_OBJECT
+
+public:
+ CalenDayHourScrollArea(QGraphicsItem *parent = 0);
+ virtual ~CalenDayHourScrollArea();
+ void setDateTime(const QDateTime &dateTime);
+ QDateTime dateTime() const;
+
+ void scrollToHour(int hour);
+
+public slots:
+ void scrollVertically(const QPointF &newPosition);
+
+private:
+ QDateTime mDateTime;
+ QList<CalenDayHourElement*> mHourElements;
+};
+
+#endif /* CALENDAYHOURSCROLLAREA_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayinfo.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,759 @@
+/*
+* Copyright (c) 2007-2010 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: Storage class for day and week views.
+*
+*/
+
+#ifndef CALENDAYINFO_H
+#define CALENDAYINFO_H
+
+// INCLUDES
+#include <e32std.h>
+#include <QList>
+#include <QDateTime>
+#include <QAbstractItemModel>
+
+#include <calinstance.h>
+#include "caleninstanceid.h"
+
+
+//
+/** Scrolling directions **/
+enum TScrollDirection
+ {
+ EScrollUp,
+ EScrollDown,
+ EScrollLeft,
+ EScrollRight
+ };
+
+//Constants
+const int KFSCalMaxDescriptionLength = 100;
+const int KFSCalStartingHour = 8;
+const int KFSCalSlotsInHour = 2;
+
+/**
+ * An interval containing a start and end slot.
+ * The start slot belongs to the interval, the end slot
+ * is the first slot outside of the interval. If the end slot
+ * is before or at the same slot as the start slot, the interval
+ * is considered empty.
+ */
+class CalenSlotInterval
+ {
+public:
+ /**
+ * Check if this interval overlaps the second interval.
+ */
+ bool Overlaps( const CalenSlotInterval& aInterval ) const;
+
+ /**
+ * Add aOffset to all slot coordinates later than aPos
+ */
+ void AddOffset( int aOffset, int aPos );
+
+ /**
+ * Set this interval to be the minimum interval
+ * containing both this original interval and aInterval.
+ */
+ void Union( const CalenSlotInterval& aInterval );
+
+ /**
+ * Check if aInterval lies directly next to this interval.
+ */
+ bool Adjacent( const CalenSlotInterval& aInterval ) const;
+
+ /**
+ * Check if this interval is empty.
+ */
+ bool IsEmpty() const;
+
+ /**
+ * Set this interval to be the area contained in both
+ * this interval and to aInterval.
+ */
+ void Intersect( const CalenSlotInterval& aInterval );
+
+ /**
+ * Remove aInterval from this interval. If aInterval lies
+ * within this interval, the result is two separate intervals.
+ * This object contains one of them, aSecondPart contains the other one.
+ * If the result is just one single interval, this interval contains that
+ * and aSecondPart is set to an empty interval.
+ */
+ void Subtract( const CalenSlotInterval& aInterval, CalenSlotInterval& aSecondPart );
+
+ /**
+ * Check if this interval starts later than aInterval.
+ */
+ bool operator>( const CalenSlotInterval& aInterval ) const;
+
+ /**
+ * The starting slot of the interval. This is the first slot
+ * that belongs to the interval.
+ */
+ int iStartSlot;
+
+ /**
+ * The ending slot of the interval. This is the first slot
+ * that doesn't belong to the interval.
+ */
+ int iEndSlot;
+ };
+
+
+/**
+ * Class for storing a calendar instance and the range it occupies.
+ */
+struct CalenTimedEventInfo : public CalenSlotInterval
+ {
+public:
+ /**
+ * The id of the calendar instance
+ */
+ TCalenInstanceId iId;
+
+ /**
+ * Status of the entry, needed for setting the displayed color later
+ */
+ AgendaEntry::Status iStatus;
+
+ /**
+ * Replication status of the entry, needed for setting the displayed color
+ * later.
+ */
+// AgendaEntry::TReplicationStatus iReplicationStatus;
+ };
+
+/**
+ * Class for storing general time intervals and their associated
+ * status (needed for displaying the interval).
+ */
+struct CalenEventInterval : public CalenSlotInterval
+ {
+public:
+ /**
+ * The status of this interval, if it represents only one calendar
+ * instance.
+ */
+ AgendaEntry::Status iStatus;
+
+ /**
+ * The replication status of this interval, if it represents only one
+ * calendar instance.
+ */
+// AgendaEntry::TReplicationStatus iReplicationStatus;
+
+ /**
+ * A flag saying that this interval represents a conflict between two or
+ * more calendar instances.
+ */
+ bool iOverlap;
+ };
+
+
+
+/**
+ * A class containing a sequence of non-overlapping events,
+ * visualised as a column.
+ */
+class CalenTimeColumn : public CalenSlotInterval
+ {
+public:
+
+ /**
+ * Explicitly frees the memory used by the event array.
+ */
+ void Close();
+
+ /**
+ * Add a new event to this column. Events must be added sequentially,
+ * and must not overlap earlier events in this column.
+ */
+ void AddEvent( const CalenTimedEventInfo& aEvent );
+
+ /**
+ * Check if a new event can be added to this column.
+ */
+ bool CanFitEvent( const CalenTimedEventInfo& aEvent );
+
+ /**
+ * Check if this column contains an event with the id aId.
+ */
+ bool ContainsEvent( const TCalenInstanceId& aId );
+
+ /**
+ * Add aOffset to all slot coordinates later than aPos
+ */
+ void AddOffset( int aOffset, int aPos );
+
+ /**
+ * Event array.
+ */
+ QList<CalenTimedEventInfo> iEventArray;
+ };
+
+
+/**
+ * A class containing one or more columns with events,
+ * where every event overlaps at least one event in some other
+ * column. (Otherwise that event should be added to a separate region.)
+ */
+class CalenTimeRegion : public CalenSlotInterval
+ {
+public:
+
+ /**
+ * Explicitly frees the memory used by data structures.
+ */
+ void Close();
+
+ /**
+ * Check if the given interval overlaps with this region.
+ */
+ bool Overlaps( const CalenSlotInterval& aInterval ) const;
+
+ /**
+ * Add an event to this region. Events must be added sequentially,
+ * and must overlap this region (unless it's the first event of the region).
+ */
+ void AddEvent( const CalenTimedEventInfo& aEvent );
+
+ /**
+ * Add aOffset to all slot coordinates later than aPos
+ */
+ void AddOffset( int aOffset, int aPos );
+
+private:
+
+ /**
+ * Add the event to the bookkeeping of overlapping/nonoverlapping
+ * intervals.
+ */
+ void AddInterval( const CalenTimedEventInfo& aEvent );
+
+public:
+
+ QList<CalenTimeColumn> iColumns;
+ QList<CalenEventInterval> iIntervals;
+ };
+
+
+/**
+ * A container struct, used by the clients of the slot info storage,
+ * to provide data in.
+ */
+struct SCalenApptInfo
+ {
+ QModelIndex iIndex;
+ QDateTime iStartTime;
+ QDateTime iEndTime;
+ bool iAllDay;
+ TCalenInstanceId iId;
+ AgendaEntry::Status iStatus;
+// AgendaEntry::TReplicationStatus iReplicationStatus;
+ TBufC<KFSCalMaxDescriptionLength> iSummary;
+ TUint32 iColor;
+ };
+
+
+/**
+ * Storage class for storing all calendar instances within one day. This
+ * class organises the data according to the way it will be needed in the
+ * day and week view.
+ */
+class CalenDayInfo
+ {
+public:
+
+ enum TSlotsInHour
+ {
+ EOne = 1,
+ ETwo,
+ EThree,
+ EFour
+ };
+
+public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CalenDayInfo( TSlotsInHour aSlotsInHour );
+
+ /**
+ * Destructor
+ */
+ virtual ~CalenDayInfo();
+
+
+public: // New functions
+
+ /**
+ * Reset the storage, remove all data and set the state back to normal.
+ */
+ void Reset();
+
+ /**
+ * Add a timed event. All timed events must be added in increasing
+ * order (sorted by starting time).
+ */
+ void InsertTimedEvent( const SCalenApptInfo& aItemInfo );
+
+ /**
+ * Add an untimed event.
+ */
+// void InsertUntimedEventL( const CCalInstance& aInstance );
+
+ /**
+ * Add an untimed event. (Nonleaving version, useful for testing.)
+ */
+ void InsertUntimedEvent( AgendaEntry::Type aType,
+ const TCalenInstanceId& aId );
+ /**
+ * Add an allday event.
+ */
+ void InsertAlldayEvent( const SCalenApptInfo& aItemInfo );
+
+ /**
+ * Is the given event allday event
+ * @param aStart time to be checked
+ * @param aEnd time to be checked
+ * @return true if this is allday event, false otherwise
+ */
+ static bool IsAlldayEvent( QDateTime aStart, QDateTime aEnd );
+
+ /**
+ * Is the given event allday event
+ * @param aInstance Instance to be checked
+ * @return true if this is allday event, false otherwise
+ */
+// static bool IsAlldayEvent( const CCalInstance& aInstance );
+
+ /**
+ * Return the slot number where this class would insert the
+ * untimed events if nothing else is specified.
+ */
+ int SuggestedUntimedSlotPos();
+
+ /**
+ * Return how many untimed slots is needed for this day.
+ */
+ int NeededUntimedSlotCount();
+
+ /**
+ * Update the indexing to take the current amount of untimed slots
+ * into account. This must be called after all untimed events
+ * have been added.
+ *
+ * @param aSlot the slot where the untimed events are to be added.
+ * If negative, uses the default, otherwise aSlot must
+ * be less than or equal to the default position as
+ * returned by SuggestedUntimedSlotPos().
+ * @param aUntimedCount the number of slots to insert for untimed events. If
+ * aSlot is specified, this must be larger or equal
+ * to NeededUntimedSlotCount().
+ */
+ int UpdateUntimedPos( int aSlot = -1, int aUntimedCount = 0 );
+
+ /**
+ * Return the first slot containing a non-allday event.
+ * If this class doesn't contain any data, returns KErrNotFound.
+ */
+ int FirstOccupiedSlot();
+
+ /**
+ * Return the last slot containing a non-allday event.
+ * If this class doesn't contain any data, returns KErrNotFound.
+ */
+ int LastOccupiedSlot();
+
+ int EarliestEndSlot();
+ int LastStartSlot();
+
+
+ /**
+ * Convert a starting time into a slot index.
+ */
+ int SlotIndexForStartTime( QDateTime aStartTime );
+
+ /**
+ * Convert an ending time into a slot index.
+ */
+ int SlotIndexForEndTime( QDateTime aStartTime );
+
+ /**
+ * Get information about where the item aItemInfo
+ * should be displayed. The parameters are filled
+ * on return.
+ *
+ * @param aStartSlot the first slot of the event
+ * @param aEndSlot the first slot after the event
+ * @param aColumnIndex the column in which this event is located
+ * @param aColumns the total number of columns in the region
+ * this event belongs to
+ */
+ void GetLocation( const SCalenApptInfo& aItemInfo,
+ int& aStartSlot,
+ int& aEndSlot,
+ int& aColumnIndex,
+ int& aColumns );
+
+ /**
+ * Get the number of allday events
+ */
+ int AlldayCount();
+
+ /**
+ * Get the number of todo events
+ */
+ int TodoCount();
+
+ /**
+ * Check if a slot is the first slot of an hour.
+ */
+ bool IsHourStartSlot( const int& aSlotIndex ) const;
+
+ /**
+ * Check if a slot is an extra slot (for untimed events).
+ */
+ bool IsExtraSlot( const int& aSlotIndex ) const;
+
+ /**
+ * Convert a slot index into a hour
+ */
+ int HourFromSlotIndex( const int& aSlotIndex ) const;
+
+ /**
+ * Convert a hour into a slot index.
+ */
+ int SlotIndexFromHour( int aHour );
+
+ /**
+ * Rounds the slot number up (towards earlier hours) to an even hour
+ */
+ int RoundHourUp( int aSlot );
+
+ /**
+ * Rounds the slot number down (towards later hours) to an even hour
+ */
+ int RoundHourDown( int aSlot );
+
+ /**
+ * Get the starting slot of the current selection
+ */
+ void GetSelectedSlot( int& aSlot, int& aRegion, int& aColumnIndex, int& aColumns );
+
+ /**
+ * Try to move the selection in the given direction
+ *
+ * @return true if able to move the selection, false if
+ * unable to move (indicating that the selection should move
+ * to the next/previous day).
+ */
+ bool MoveSelection( TScrollDirection aDirection );
+
+ /**
+ * Move the selected slot within the currently selected event.
+ */
+ void MoveSelectionInEvent( TScrollDirection aDirection );
+
+ /**
+ * Make sure the selected slot within the currently selected event is valid.
+ */
+ void UpdateSelectionInEvent();
+
+ /**
+ * Check if any event currently is selected.
+ */
+ bool IsEventSelected() const;
+
+ /**
+ * Check if the current selection actually denotes
+ * more than one event (the todo event slot is selected,
+ * containing more than one todo).
+ */
+ bool IsMultipleEventsSelected() const;
+
+ /**
+ * Check if an allday event currently is selected.
+ */
+ bool IsAlldayEventSelected() const;
+
+ /**
+ * Get the instance id of the currently selected event.
+ */
+ TCalenInstanceId SelectedEvent();
+
+ /**
+ * Update the state to make the given calendar instance selected
+ *
+ * @return KErrNotFound if the instance isn't found, KErrNone otherwise.
+ */
+ int SelectEvent( const TCalenInstanceId& aId );
+
+ /**
+ * Get the instance id of an untimed event. Maximally one
+ * todo event is counted into this, i.e. aIndex = 1 never returns
+ * a todo event even though there are more than one.
+ */
+ TCalenInstanceId UntimedEvent( int aIndex );
+
+ /**
+ * Get info about an allday event.
+ */
+ const CalenTimedEventInfo& AlldayEvent( int aIndex );
+
+ /**
+ * Move the selection to the given slot, possibly selecting
+ * an event.
+ */
+ void SelectSlot( int aSlot );
+
+ /**
+ * Return the list of regions.
+ */
+ const QList<CalenTimeRegion>& RegionList() const;
+
+ /**
+ * Get the list of event intervals (for use in week view and ribbon).
+ */
+ void GetEventIntervals( QList<CalenEventInterval>& aArray ) const;
+
+ /**
+ * Return the interval which is selected currently.
+ */
+ CalenSlotInterval SelectedInterval();
+
+ /**
+ * Sets selection within a region
+ *
+ * @param aRegion Region index.
+ * @param aColumn Column index.
+ * @param aSlot Slot number (has to be aligned to full hour).
+ */
+ bool SetSelectionInRegion( int aRegion, int aColumn, int aSlot );
+
+private:
+
+ enum TMoveDirection
+ {
+ EMoveDirectionUp = -1,
+ EMoveDirectionDown = 1
+ };
+
+ /**
+ * See if any region overlaps the given interval. Regions are searched
+ * in the direction specified by aDirection, e.g. if aDirection < 0,
+ * this returns the last overlapping region, if aDirection > 0, returns
+ * the first overlapping instead.
+ *
+ * @return the index of the found overlapping region, or -1 if no
+ * matching region was found.
+ */
+ int FindRegion( const CalenSlotInterval& aInterval, int aDirection );
+
+ /**
+ * See if any event overlaps the given interval within the current column.
+ * Events are searched in the direction specified by aDirection,
+ * e.g. if aDirection < 0, this returns the last overlapping event,
+ * if aDirection > 0, returns the first overlapping instead.
+ *
+ * @return the index within the column of the overlapping event, or -1 if no
+ * matching event was found.
+ */
+ int FindEvent( const CalenSlotInterval& aInterval, int aDirection );
+
+ /**
+ * Update the selection state by selecting the first event which ends at
+ * the end of the current region.
+ */
+ void EnterRegionFromBelow();
+
+ /**
+ * Update the selection state by selecting the first event which starts
+ * at the start of the current region.
+ */
+ void EnterRegionFromAbove();
+
+ /**
+ * Try to move the selection in the given direction, when an
+ * empty area is selected.
+ *
+ * @return true if able to move the selection, false if
+ * unable to move (indicating that the selection should move
+ * to the next/previous day).
+ */
+ bool MoveInEmptyArea( TScrollDirection aDirection );
+
+ /**
+ * Try to move the selection in the given direction, when the
+ * selection is in a region.
+ *
+ * @return true if able to move the selection, false if
+ * unable to move (indicating that the selection should move
+ * to the next/previous day).
+ */
+ bool MoveInRegion( TScrollDirection aDirection );
+
+ /**
+ * Try to move the selection in the given direction, when an
+ * allday event is selected
+ *
+ * @return true if able to move the selection, false if
+ * unable to move (indicating that the selection should move
+ * to the next/previous day).
+ */
+ bool MoveInAlldayEvent( TScrollDirection aDirection );
+
+ /**
+ * Update the selection state by moving from one ordinary event column
+ * to another, in the given direction
+ */
+ void MoveBetweenColumns( TScrollDirection aDirection );
+
+ /**
+ * Update the selection state by moving in the given direction
+ */
+ void MoveInColumn( int aDirection );
+
+ /**
+ * The selection should be moved out of the current region (in the given
+ * direction), update the selection state according to what there is
+ * outside of the region.
+ */
+ void MoveOutFromRegion( int aDirection );
+
+ /**
+ * Set the selected slot within the current event according to the selection
+ * direction.
+ */
+ void SetSelectionInEvent( int aDirection );
+
+ /**
+ * Determines how large area to scan for new events/regions when moving in the
+ * given direction.
+ *
+ * I.e., if moving upwards, returns the whole interval from the start of aInterval
+ * up to the next slot which can be focused as an empty slot. If aInterval doesn't
+ * start on an even hour, the returned interval is from the start of the first whole
+ * hour before the interval, to the start of aInterval.
+ *
+ * If moving downwards, returns the whole interval from the end of aInterval to the
+ * end of the next whole hour after the interval.
+ *
+ */
+ CalenSlotInterval NextFocusArea( const CalenSlotInterval& aInterval, int aDirection );
+
+ /**
+ * Return the next slot to focus if moving in the given direction from the interval
+ * and focusing an empty slot.
+ */
+ int NextEmptyFocusSlot( const CalenSlotInterval& aInterval, int aDirection );
+
+ /**
+ * Return the interval which the current selection state represents, if
+ * an empty area is selected.
+ */
+ CalenSlotInterval EmptySelectionInterval();
+
+ /**
+ * Backup the whole selection state.
+ */
+ void StoreOrigSelection();
+
+ /**
+ * Check if the current selection state is valid, if not, reset it
+ * to the backed up copy
+ * @return true if selection state is valid, false if not.
+ */
+ bool ValidateSelection();
+
+private: // New data
+
+ QList<CalenTimeRegion> iRegionList;
+ QList<TCalenInstanceId> iUntimedEvents;
+ QList<TCalenInstanceId> iTodoEvents;
+ QList<CalenTimedEventInfo> iAlldayEvents;
+
+ int iLastStartSlot;
+ int iEarliestEndSlot;
+ /**
+ * The total number of untimed slots.
+ */
+ int iUntimedSlotCount;
+ /**
+ * The slot index of the first untimed slot.
+ */
+ int iFirstUntimedSlot;
+ /**
+ * The number of empty untimed slots.
+ */
+ int iEmptyUntimedSlots;
+ /**
+ * The number of slots per hour.
+ */
+ TSlotsInHour iSlotsInHour;
+
+ /**
+ * Chooses which allday event is selected. If none currently is selected,
+ * this is negative. This variable overrides the rest selection variables.
+ * If this points to an allday event, the other variables are ignored,
+ * except iSelectedSlot which is used for returning to the original place
+ * if moving back to the ordinary events.
+ */
+ int iSelectedAlldayEvent;
+
+ /**
+ * Chooses which region currently is selected. If none currently is selected,
+ * this is negative. If this points to a region, iSelectedColumn and
+ * iSelectedColumnEventIndex are taken into account.
+ */
+ int iSelectedRegion;
+
+ /**
+ * Chooses which column is selected within the currently selected region.
+ * If this is equal to the number of columns, the last, implicit, empty column
+ * is selected.
+ */
+ int iSelectedColumn;
+ /**
+ * Chooses which event is selected within the currently selected column. If
+ * none is selected, this is negative.
+ */
+ int iSelectedColumnEventIndex;
+ /**
+ * Chooses which slot in the day currently is in focus. This must always point
+ * to a valid slot. If an event is selected within a column, it points to an
+ * slot within that event. If no event is selected, it points to the start
+ * of the currently selected empty time region (which is iSlotsInHour slots long).
+ * If an allday event is selected, this points to the last selected slot in the
+ * ordinary day area.
+ */
+ int iSelectedSlot;
+
+ // copies of the current selection state, to be used for reverting to the original
+ // state if the selection is moved to an invalid position
+ int iOrigSelectedAlldayEvent;
+ int iOrigSelectedRegion;
+ int iOrigSelectedColumn;
+ int iOrigSelectedSlot;
+ int iOrigSelectedColumnEventIndex;
+
+ };
+
+#endif // CALENDAYINFO_H
+
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayitem.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,62 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+#ifndef CALENDAYITEM_H
+#define CALENDAYITEM_H
+
+//System includes
+#include <hbabstractviewitem.h>
+#include <hbtextitem.h>
+#include <hbframeitem.h>
+
+//Forward declarations
+class AgendaEntry;
+class CalenDayStatusStrip;
+
+
+class CalenDayItem : public HbAbstractViewItem
+{
+ Q_OBJECT
+ Q_PROPERTY( bool eventDescription READ hasEventDescription )
+ Q_PROPERTY( bool backgroundFrame READ hasBackgroundFrame )
+
+public:
+ CalenDayItem();
+ virtual ~CalenDayItem();
+ HbAbstractViewItem * createItem();
+ void updateChildItems();
+ bool hasEventDescription() const { return mEventDesc->isVisible();}
+ bool hasBackgroundFrame() const { return mBg->isVisible();}
+
+protected:
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+private:
+ CalenDayItem(const CalenDayItem &source);
+ void setDescription(const AgendaEntry &entry, bool allDayEvent);
+ void setStatusStrip(const AgendaEntry &entry, bool allDayEvent);
+
+ bool mUpdated;
+ HbFrameItem *mBg;
+ HbTextItem *mEventDesc;
+ CalenDayStatusStrip *mColorStripe;
+ qreal mEventDescMinWidth;
+ qreal mFrameMinWidth;
+
+};
+
+#endif // CALENDAYITEM_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayitemview.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,184 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+#ifndef CALENDAYITEMVIEW_H
+#define CALENDAYITEMVIEW_H
+
+//System includes
+#include <hbabstractitemview.h>
+#include <hbmenu.h>
+
+//User includes
+
+//Forward declarations
+class CalenDayInfo;
+class CalenDayContainer;
+class MCalenServices;
+
+class CalenDayItemView : public HbAbstractItemView
+{
+ Q_OBJECT
+
+public:
+ enum CalendarPanDirection {
+ CalendarPanNotSet,
+ CalendarPanVertical,
+ CalendarPanHorizontal
+ };
+
+ enum CalendaRecycleDays {
+ CalendarNoRecycle,
+ CalendarBackwardRecycle,
+ CalendarForwardRecycle
+ };
+
+ /**
+ * Constructor.
+ */
+ CalenDayItemView(MCalenServices &services, HbModelIterator* iterator, QGraphicsItem *parent);
+
+ /**
+ * Destructor.
+ */
+ ~CalenDayItemView();
+
+ /**
+ *
+ */
+ void scrollTo(const QModelIndex &index, HbAbstractItemView::ScrollHint hint = EnsureVisible);
+
+public slots:
+
+ /**
+ *
+ */
+ virtual void reset();
+
+ /**
+ * Handles signal that is emitted when reset() is called, before the model's
+ * internal state (e.g. persistent model indexes) has been invalidated.
+ */
+ void modelAboutToBeReset();
+
+ /**
+ * Handles signal that is emitted when reset() is called, after the model's
+ * internal state (e.g. persistent model indexes) has been invalidated.
+ */
+ void modelReset();
+
+ /**
+ *
+ */
+ void scrollVertically(const QPointF &newPosition);
+
+private slots:
+
+ /**
+ * This function is called when a touch down event is received within Abstract view item that is representing index.
+ */
+ void itemPressed(const QPointF &position);
+
+ /**
+ * This function is called when a touch release event is received within Abstract view item that is representing index.
+ */
+ void itemReleased(const QPointF &position);
+
+ /**
+ * This function is called when the item specified by index is activated by the user.
+ */
+ void itemActivated(const QPointF &position);
+
+ /**
+ * This function is called when long press event is received within Abstract view item viewItem.
+ *
+ * @param item The item.
+ * @param coords is scene position where the long press event happened
+ */
+ void itemLongPressed(HbAbstractViewItem*, QPointF);
+
+ /**
+ * Slot which is called whenever the orientation of the device changes
+ * @param orientation Current device orientation
+ */
+ void orientationChanged(Qt::Orientation orientation);
+
+ /**
+ * Opens currently selected model item.
+ */
+ void openSelectedItem();
+
+ /**
+ * Edits currently selected model item.
+ */
+ void editSelectedItem();
+
+ /**
+ * Deletes currently selected model item.
+ */
+ void deleteSelectedItem();
+
+private:
+
+ /**
+ * Connects item view's slots.
+ */
+ void setupSlots();
+
+ /**
+ * Creates Context menu.
+ */
+ void setupContextMenu();
+
+ /**
+ * Sets context to currently selected model item and issues calendar command.
+ *
+ * @param command Calendar command.
+ */
+ bool issueCommandOnSelectedItem( int command );
+
+ /**
+ * Clears current selection in Selection Model.
+ */
+ void clearSelectionInModel();
+
+private:
+
+ /**
+ * Calendar services. Not owned.
+ */
+ MCalenServices &mServices;
+
+ /**
+ * Item container.
+ */
+ CalenDayContainer* mContainer;
+
+ /**
+ * Day event info.
+ * Own.
+ */
+ CalenDayInfo* mInfo;
+
+ /**
+ * context menu
+ */
+ HbMenu* mContextMenu;
+};
+
+#endif // CALENDAYITEMVIEW_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaymodel.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2010 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: Single day item view model
+*
+*/
+
+#ifndef CALENDAYMODEL_H
+#define CALENDAYMODEL_H
+
+//System includes
+#include <QAbstractItemModel>
+#include <QVariant>
+#include <QDateTime>
+
+#include <agendaentry.h>
+
+//User includes
+
+//Forward declarations
+class MCalenServices;
+
+//Constantss
+const int CalenDayEntry = Qt::UserRole + 1;
+
+Q_DECLARE_METATYPE(AgendaEntry)
+
+class CalenDayModel : public QAbstractListModel
+{
+ Q_OBJECT
+public:
+ CalenDayModel(const QDateTime &date, MCalenServices &services,
+ QObject *parent = 0);
+
+ // from QAbstractListModel
+ int rowCount(const QModelIndex &parent = QModelIndex()) const;
+ QVariant data(const QModelIndex &index, int role) const;
+
+ void refreshModel(const QDateTime &date);
+
+ QDateTime modelDate() const;
+
+
+private:
+ void loadAndStoreInstances(const QDateTime& date);
+
+private:
+ MCalenServices &mServices;
+ QVariantList mEntryList;
+ QDateTime mDateTime;
+};
+
+#endif //CALENDAYMODEL_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaymodelmanager.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,69 @@
+/*
+* Copyright (c) 2009 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: Model manager holds models for three day views
+*
+*/
+#ifndef CALENDAYMODELMANAGER_H
+#define CALENDAYMODELMANAGER_H
+
+#include <QObject>
+#include <QMap>
+#include <QDateTime>
+
+#include "calendaycommonheaders.h"
+
+class QAbstractItemModel;
+class MCalenServices;
+class CalenDayModel;
+
+class CalenDayModelManager : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum ModelDay {
+ PreviousDay = 0,
+ CurrentDay = 1,
+ NextDay = 2,
+ NumberOfDays
+ };
+
+public:
+ CalenDayModelManager(MCalenServices &services, bool emptyModels,
+ QObject *parent = 0);
+ ~CalenDayModelManager();
+
+ QAbstractItemModel &getModel(CalenDayModelManager::ModelDay day);
+
+ void refreshAllModels();
+ void refreshSingleModel(CalenDayModelManager::ModelDay day);
+ MCalenServices &getServices() {
+ return mServices;
+ }
+
+public slots:
+ void viewsScrollingFinished(CalenScrollDirection scrollTo);
+
+private:
+ void createAllModels();
+ void moveBackward();
+ void moveForeward();
+
+private:
+ QMap<ModelDay, CalenDayModel*> mModels;
+ MCalenServices &mServices;
+ QDateTime mCurrentDayTime;
+};
+
+#endif//CALENDAYMODELMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendaystatusstrip.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,94 @@
+/*
+ * Copyright (c) 2010 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: Day view control of calendar
+ *
+ */
+
+
+#ifndef CALENDAYSTATUSSTRIP_H
+#define CALENDAYSTATUSSTRIP_H
+
+#include <QTime>
+#include <HbWidget>
+
+class CalenDayStatusStrip : public HbWidget
+{
+ Q_OBJECT
+ Q_ENUMS(DrawingStyle)
+public:
+ /*!
+ \brief It specifiy how status Strip should be drawed.
+
+ OnlyFrame -- draw not filled rectangle
+ StripWithLines -- draw filled rectangle with transparent diagonal lines
+ Filled -- draw filled rectangle
+ */
+ enum DrawingStyle
+ {
+ OnlyFrame,
+ StripWithLines,
+ Filled
+ };
+
+
+ CalenDayStatusStrip(HbWidget *parent = 0);
+ ~CalenDayStatusStrip();
+
+ qreal range() const;
+
+ QColor color() const;
+
+ CalenDayStatusStrip::DrawingStyle drawingStyle() const;
+
+ QPair<QTime,QTime> startEndTime() const;
+
+ void setRange(qreal mRange);
+
+ void setColor(QColor mStripColor);
+
+ void setDrawingStyle(CalenDayStatusStrip::DrawingStyle mDrawingStyle);
+
+ void setStartEndTime(const QTime &startTime, const QTime &endTime);
+
+
+protected:
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget = 0);
+
+ QPolygonF diagonalLine(QPointF startPoint, qreal dx, qreal dy);
+
+
+ QPair<QTime,QTime> calculateStartEndPostion(
+ const QTime &startTime,
+ const QTime &endTime
+ );
+
+ qreal calculateMinuteHeight(const QTime &start, const QTime &end);
+
+private:
+ qreal mRange; //!<Distanse beatween lines
+ QColor mColor;//!<Color of status stripe
+ CalenDayStatusStrip::DrawingStyle mDrawingStyle;//!<Specify style of drawing
+ /*!
+ Orginal start and end time of event
+ */
+ QPair<QTime,QTime> mStartEndEventTime;
+
+ static const qreal mMinute;//!<It keep info how much seconds are in minute
+ static const qreal mMinimumTime;//!<It keep info about minimum timeline in minutes
+};
+
+Q_DECLARE_METATYPE(CalenDayStatusStrip::DrawingStyle)
+
+#endif // CALENDAYSTATUSSTRIP_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayutils.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2010 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: CalenDayUtils utility class header.
+*
+*/
+
+#ifndef CALENDAYUTILS_H_
+#define CALENDAYUTILS_H_
+
+// Forward declarations
+class HbMainWindow;
+class QDateTime;
+class AgendaEntry;
+
+class CalenDayUtils
+{
+public:
+ static CalenDayUtils *instance();
+ ~CalenDayUtils();
+
+ qreal screenWidth() const;
+ qreal hourElementWidth() const;
+ qreal hourElementHeight() const;
+ qreal contentWidth() const;
+
+ Qt::Orientation orientation() const;
+
+ HbMainWindow* mainWindow();
+
+ bool isHorizontalSwipe(qreal angle) const;
+
+ /**
+ * Get event's start/end time fromm agenda entry.
+ * Start/end time are validated to be within the current day (the case of
+ * multi-day events)
+ * @param start [out] valid start time
+ * @param end [out] valid end time
+ * @param entry [in] agenda entry asociated with the event.
+ * @param currentDate [in] current date
+ */
+ void getEventValidStartEndTime( QDateTime& start, QDateTime& end,
+ AgendaEntry& entry, QDateTime& currentDate );
+
+protected:
+ CalenDayUtils();
+
+private:
+ qreal calculateHourElementWidth() const;
+ qreal calculateHourElementHeight() const;
+
+private: // data
+
+ static CalenDayUtils* mInstance;
+
+ HbMainWindow* mMainWindow; //!< Pointer to main window
+
+ qreal mHourElementWidth; //!< The width of hour element
+ qreal mHourElementHeight; //!< The height of hour element
+};
+
+#endif /* CALENDAYUTILS_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/inc/calendayview.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,204 @@
+/*
+* Copyright (c) 2010 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: CalenDayView class definition.
+*
+*/
+
+#ifndef CALEDAYVIEW_H
+#define CALEDAYVIEW_H
+
+// System includes
+#include <QDateTime>
+#include <xqsettingskey.h>
+
+// User includes
+#include "calennativeview.h"
+#include "calendaycommonheaders.h"
+#include "hb_calencommands.hrh" // command ids
+
+// Forward declarations
+class QGraphicsLinearLayout;
+class XQSettingsManager;
+class QVariant;
+class HbGroupBox;
+class AgendaEntry;
+class CalenDocLoader;
+class CalenDayContentScrollArea;
+class CalenDayContentWidget;
+class CalenDayHourScrollArea;
+class CalenDayModelManager;
+
+
+// Constants
+
+
+#ifdef CALENVIEWS_DLL
+#define CALENDAYVIEW_EXPORT Q_DECL_EXPORT
+#else
+#define CALENDAYVIEW_EXPORT Q_DECL_IMPORT
+#endif
+
+class CalenDayView : public CalenNativeView
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ * Constructor.
+ *
+ * @param services Calendar services.
+ */
+ CALENDAYVIEW_EXPORT CalenDayView( MCalenServices &services );
+
+ /**
+ * Destructor.
+ */
+ CALENDAYVIEW_EXPORT virtual ~CalenDayView();
+
+public:
+
+//From CalenNativeView
+
+ /**
+ * Handles locale change.
+ *
+ * @param reason Change reason.
+ */
+ virtual void onLocaleChanged(int reason);
+
+//From CalenView
+
+ /**
+ * Handles view (re)population.
+ *
+ */
+ CALENDAYVIEW_EXPORT virtual void doPopulation();
+
+ /**
+ * Informs the organizer that the view's population is complete.
+ */
+ virtual void populationComplete();
+
+//From MCalenNotificationHandler
+
+ /**
+ * The function handles calendar notifications.
+ */
+ virtual void HandleNotification( const TCalenNotification notification );
+
+public:
+ //API
+
+ /**
+ * Sets up the view accroding to the 'xml'
+ *
+ * @param docLoader Loaded document.
+ */
+ CALENDAYVIEW_EXPORT void setupView(CalenDocLoader* docLoader);
+
+private slots:
+
+ /**
+ * Handles 'back' functionality;
+ */
+ void onBack();
+
+ /**
+ * Updates selected date member and context
+ */
+ void dayChangeStarted(CalenScrollDirection direction);
+
+ /**
+ * Refreshes the model
+ */
+ void dayChanged(CalenScrollDirection direction);
+
+ /**
+ * Sets new date as heading text. Triggerd after fadeOut effect.
+ */
+ void setHeadingText(const HbEffect::EffectStatus &status);
+
+ /**
+ * Handles actions from menu
+ */
+ void runNewMeeting();
+ void runGoToToday();
+ void runChangeToAgendaView();
+ void runLunarData();
+
+ void showRegionalInformation(const HbEffect::EffectStatus &status);
+ void showRegionalInformationFadeIn();
+ void showHideRegionalInformationChanged(const XQSettingsKey& key, const QVariant& var);
+
+public slots:
+ void changeView(TCalenCommandId viewId);
+private:
+ /**
+ *
+ */
+ void getCurrentDate();
+
+ /**
+ * setup menu for the view
+ */
+ void setupMenu();
+
+ /**
+ * Connects view's slots.
+ */
+ void setupSlots();
+
+ /**
+ * Scrolls content to correct position after view repopulation
+ */
+ void setupViewport();
+
+private: // members related to view management and gesture handling
+
+ CalenDayContentScrollArea* mContentScrollArea; //!< Scroll area for content (events)
+
+ CalenDayContentWidget* mContentWidget; //!< Content widget
+
+ CalenDayHourScrollArea* mHourScrollArea; //!< Scroll area for hour elements
+
+ CalenDayModelManager* mModelManager;
+
+ QGraphicsLinearLayout* mVLayout;
+
+
+private:
+
+ XQSettingsManager* mSettingsManager;
+ XQSettingsKey mRegionalInfo;
+ MCalenServices &mServices;
+
+ /**
+ * Current date/time.
+ */
+ QDateTime mDate;
+
+ HbGroupBox *mHeadingLabel;
+
+ HbGroupBox *mRegionalInfoGroupBox;
+ /*!
+ * \brief It keep pointer to go to Today action from menu.
+ */
+ HbAction *mGoToTodayMenuAction;
+};
+
+
+#endif // CALEDAYVIEW_H
+
+//End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/calendayhourelement.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+CalenDayHourElement{
+ layout: customCalendarLayout;
+}
+
+CalenDayHourElement::time {
+ color: var(qtc_cal_view_text);
+
+ fixed-width: 8.04un;
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+
+ text-align: right;
+}
+
+CalenDayHourElement::ampm {
+ color: var(qtc_cal_view_text);
+
+ fixed-width: 8.04un;
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+
+ text-align: right;
+}
+
+CalenDayHourElement::bottomSpacer{
+ pref-height: 3un;
+ size-policy-vertical: expanding;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/calendayhourelement.widgetml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,14 @@
+<hbwidget version="0.1" type="CalenDayHourElement">
+
+ <layout name="customCalendarLayout" type="mesh">
+ <meshitem src="time" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-var(hb-param-margin-gene-middle-vertical)"/>
+ <meshitem src="time" srcEdge="BOTTOM" dst="ampm" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)"/>
+ <meshitem src="time" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)"/>
+ <meshitem src="time" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-middle-horizontal)"/>
+
+ <meshitem src="ampm" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="0un" spacer="bottomSpacer"/>
+ <meshitem src="ampm" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)"/>
+ <meshitem src="ampm" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-middle-horizontal)"/>
+ </layout>
+
+</hbwidget>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/calendayitem.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,30 @@
+CalenDayItem{
+ layout: noIconLayout;
+}
+
+CalenDayItem[!eventDescription][!backgroundFrame]{
+ layout: noIconNoTextNoBkgLayout;
+}
+
+CalenDayItem[!eventDescription][backgroundFrame]{
+ layout: noIconNoTextLayout;
+}
+
+CalenDayItem::eventDescription {
+ color: var(qtc_cal_meeting_text);
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+ text-align: center center;
+ text-line-count-min: 1;
+ size-policy-vertical: expanding;
+}
+
+CalenDayItem::colorStripe {
+ pref-width: 1.5un;
+ size-policy-horizontal: fixed;
+}
+
+CalenDayItem::spacerItem{
+ pref-width: 1.5un;
+ size-policy-horizontal: expanding;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/calendayitem.widgetml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,37 @@
+<hbwidget version="0.1" type="CalenDayItem">
+ <!-- layout for timed and all-day event bubble -->
+ <layout name="noIconLayout" type="mesh">
+ <meshitem src="backgroundFrame" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="backgroundFrame" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="backgroundFrame" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="backgroundFrame" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="colorStripe" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="colorStripe" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="colorStripe" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)"/>
+ <meshitem src="colorStripe" srcEdge="RIGHT" dst="eventDescription" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)"/>
+
+ <meshitem src="eventDescription" srcEdge="TOP" dst="" dstEdge="TOP" spacing="-var(hb-param-margin-gene-middle-vertical)" />
+ <meshitem src="eventDescription" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="var(hb-param-margin-gene-middle-vertical)" />
+ <meshitem src="eventDescription" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="var(hb-param-margin-gene-right)"/>
+ </layout>
+
+ <layout name="noIconNoTextLayout" type="mesh">
+ <meshitem src="backgroundFrame" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="backgroundFrame" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="backgroundFrame" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
+ <meshitem src="backgroundFrame" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="colorStripe" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="colorStripe" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="colorStripe" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="-var(hb-param-margin-gene-middle-horizontal)"/>
+ <meshitem src="colorStripe" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacer="spacerItem"/>
+ </layout>
+
+ <layout name="noIconNoTextNoBkgLayout" type="mesh">
+ <meshitem src="colorStripe" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="colorStripe" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="colorStripe" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
+ <meshitem src="colorStripe" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
+ </layout>
+</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/calendaywidgets.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,10 @@
+<RCC>
+ <qresource prefix="/" >
+ <file>calendayhourelement.css</file>
+ <file>calendayhourelement.widgetml</file>
+ <file>calendayitem.css</file>
+ <file>calendayitem.widgetml</file>
+ <file>fade_out.fxml</file>
+ <file>fade_in.fxml</file>
+ </qresource>
+</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/fade_in.fxml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,10 @@
+<layers>
+ <visual>
+ <param name="opacity" type="anim">
+ <duration>0.2</duration>
+ <style>linear</style>
+ <keyframe at="0.0">0.0</keyframe>
+ <keyframe at="1.0">1.0</keyframe>
+ </param>
+ </visual>
+</layers>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/resources/fade_out.fxml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,10 @@
+<layers>
+ <visual>
+ <param name="opacity" type="anim">
+ <duration>0.2</duration>
+ <style>linear</style>
+ <keyframe at="0.0">1.0</keyframe>
+ <keyframe at="1.0">0.0</keyframe>
+ </param>
+ </visual>
+</layers>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendaycontainer.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,531 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+//System includes
+#include <QTime>
+#include <QGraphicsLinearLayout>
+#include <QGesture>
+
+#ifdef _DEBUG
+ #include <QPainter>
+#endif
+
+#include <hbabstractitemview.h>
+#include <hbtextitem.h>
+#include <hbmodeliterator.h>
+#include <hbinstance.h>
+
+//User includes
+#include "calendaycontainer.h"
+#include "calendayutils.h"
+#include "calendayeventspane.h"
+#include "calendayitem.h"
+#include "calendaymodel.h"
+#include "calendayinfo.h"
+#include "calendayview.h"
+
+// -----------------------------------------------------------------------------
+// CalenDayContainer()
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CalenDayContainer::CalenDayContainer(QGraphicsItem *parent) :
+ HbAbstractItemContainer(parent), mGeometryUpdated(false), mInfo(0)
+{
+ getTimedEventLayoutValues(mLayoutValues);
+
+ // Get the height of element
+ qreal paneHeight = CalenDayUtils::instance()->hourElementHeight();
+
+ QGraphicsLinearLayout* timeLinesLayout = new QGraphicsLinearLayout(
+ Qt::Vertical, this);
+ for (int i = 0; i < 24; i++) {
+ CalenDayEventsPane* element = new CalenDayEventsPane(this);
+ element->setPreferredHeight(paneHeight);
+ element->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ // Draw top line at midnight
+ if (i == 0) {
+ element->drawTopLine(true);
+ }
+ timeLinesLayout->addItem(element);
+ }
+ timeLinesLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+ timeLinesLayout->setSpacing(0.0);
+
+ setLayout(timeLinesLayout);
+}
+
+// -----------------------------------------------------------------------------
+// ~CalenDayContainer()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CalenDayContainer::~CalenDayContainer()
+{
+}
+
+// -----------------------------------------------------------------------------
+// itemAdded()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::itemAdded( int index, HbAbstractViewItem *item,
+ bool animate )
+{
+ Q_UNUSED( index )
+ Q_UNUSED( item )
+ Q_UNUSED( animate )
+}
+
+// -----------------------------------------------------------------------------
+// reset()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::reset()
+{
+ // remove absorbers if exist
+ if (mAbsorbers.count())
+ {
+ qDeleteAll(mAbsorbers);
+ mAbsorbers.clear();
+ }
+
+ // shrink event area when all-day events available after reset
+ getTimedEventLayoutValues(mLayoutValues);
+
+ // position need to be maintained while changing model
+ QPointF position(pos());
+ HbAbstractItemContainer::reset();
+ setPos( position );
+}
+
+// -----------------------------------------------------------------------------
+// itemRemoved()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::itemRemoved( HbAbstractViewItem *item, bool animate )
+{
+ Q_UNUSED( item )
+ Q_UNUSED( animate )
+}
+
+// -----------------------------------------------------------------------------
+// viewResized()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::viewResized (const QSizeF &size)
+{
+ resize(size);
+ if (!mGeometryUpdated) {
+ mGeometryUpdated = true;
+ updateGeometry();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// createDefaultPrototype()
+//
+// -----------------------------------------------------------------------------
+//
+HbAbstractViewItem * CalenDayContainer::createDefaultPrototype() const
+{
+ CalenDayItem *calendarViewItem = new CalenDayItem;
+ return calendarViewItem;
+}
+
+// -----------------------------------------------------------------------------
+// setItemModelIndex()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::setItemModelIndex(HbAbstractViewItem *item,
+ const QModelIndex &index)
+{
+ QVariant variant = index.data( CalenDayEntry );
+ AgendaEntry entry = variant.value<AgendaEntry>();
+
+ if (entry.isTimedEntry()) {
+ updateTimedEventGeometry( item, index );
+ item->setParentItem(this);
+ }
+ else if( entry.type() == AgendaEntry::TypeEvent ){
+ updateAllDayEventGeometry( item, index );
+ item->setParentItem(this);
+ }
+ else {
+ item->setVisible(false);
+ }
+
+ // last item
+ if (index.row() == index.model()->rowCount() - 1) {
+ createTouchEventAbsorbers();
+ }
+
+ HbAbstractItemContainer::setItemModelIndex(item, index);
+}
+
+// -----------------------------------------------------------------------------
+// updateTimedEventGeometry()
+// Updates geometry of a timed event.
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::updateTimedEventGeometry(HbAbstractViewItem *item,
+ const QModelIndex &index)
+{
+//safety check
+ if ( !mInfo ) {
+ return;
+ }
+
+ QVariant variant = index.data( CalenDayEntry );
+ AgendaEntry entry = variant.value<AgendaEntry>();
+
+//1. get 'virtual' event position from DayInfo
+//TODO: k.g.: Day Info should store model index instead of keeping redundant data
+ SCalenApptInfo apptInfo;
+ apptInfo.iIndex = index;
+
+ QDateTime start;
+ QDateTime end;
+ QDateTime currentDate;
+ currentDate = static_cast<const CalenDayModel*>(index.model())->modelDate();
+ CalenDayUtils::instance()->getEventValidStartEndTime( start, end, entry,
+ currentDate );
+ apptInfo.iStartTime = start;
+ apptInfo.iEndTime = end;
+
+ TCalenInstanceId id = TCalenInstanceId::nullInstanceId();
+ id.mEntryLocalUid = index.row(); //index.row() - temporary ID
+ id.mInstanceTime = apptInfo.iStartTime;
+ apptInfo.iId = id;
+ apptInfo.iAllDay = 0;
+ apptInfo.iColor = 0xffff;
+
+ int startSlot, endSlot, columnIdx, columns;
+ mInfo->GetLocation( apptInfo, startSlot, endSlot, columnIdx, columns );
+
+
+//2. set timed event's geometry
+ qreal eventStartX(mLayoutValues.eventAreaX );
+ qreal eventStartY(0.0);
+ qreal eventWidth(mLayoutValues.eventAreaWidth);
+ qreal eventHeight(0.0);
+
+ //event's startY/height
+ eventStartY = startSlot * mLayoutValues.slotHeight;
+ eventHeight = (endSlot - startSlot) * mLayoutValues.slotHeight;
+
+ //event's startX/width
+ eventWidth /= columns;
+
+ //In case when eventWidth will be smaller then 3.0un we need to
+ //make spacings between events smaller.
+ //Check whether it's possible to shring them so the bubbles
+ //width can stay at 3.0un (time stripe + frame margins).
+ qreal minWidth = 3.0 * mLayoutValues.unitInPixels;
+ if(eventWidth - mLayoutValues.eventMargin < minWidth){
+
+ //Calculate new margin value
+ //from totalMarginSpace we need to subtract
+ //mLayoutValues.eventMargin because first margin is always 1.5un
+ qreal totalMarginSpace = mLayoutValues.eventAreaWidth - minWidth * columns - mLayoutValues.eventMargin;
+ qreal newMarginValue = totalMarginSpace / (columns - 1);
+
+ //check if we managed to pack all the events into space we have
+ if(newMarginValue > 0){
+
+ eventWidth = minWidth;
+ }
+ else{
+ //there's not enough space
+ //new minWidth it's 1.5un (time stripe only)
+ minWidth = 1.5 * mLayoutValues.unitInPixels;
+ totalMarginSpace = mLayoutValues.eventAreaWidth - minWidth * columns - mLayoutValues.eventMargin;
+ newMarginValue = totalMarginSpace / (columns - 1);
+ eventWidth = minWidth;
+ }
+
+ //First column margin should be always 1.5un (mLayoutValues.eventMargin)
+ eventStartX += columnIdx * (eventWidth + newMarginValue) + mLayoutValues.eventMargin;
+ }
+ else{
+ //add margins between the event
+ eventStartX += columnIdx * eventWidth + mLayoutValues.eventMargin;
+ eventWidth -= mLayoutValues.eventMargin;
+ }
+
+ QRectF eventGeometry( eventStartX, eventStartY, eventWidth, eventHeight );
+ item->setGeometry(eventGeometry);}
+
+
+// -----------------------------------------------------------------------------
+// updateAllDayEventGeometry()
+// Updates geometry of a timed event.
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::updateAllDayEventGeometry(HbAbstractViewItem *item,
+ const QModelIndex &index)
+{
+ //safety check
+ if ( !mInfo ) {
+ return;
+ }
+
+ QVariant variant = index.data( CalenDayEntry );
+ AgendaEntry entry = variant.value<AgendaEntry>();
+
+ //1. get 'virtual' event position from DayInfo
+ //TODO: k.g.: Day Info should store model index instead of keeping redundant data
+ SCalenApptInfo apptInfo;
+ apptInfo.iIndex = index;
+
+
+ QDateTime start;
+ QDateTime end;
+ QDateTime currentDate;
+ currentDate = static_cast<const CalenDayModel*>(index.model())->modelDate();
+ CalenDayUtils::instance()->getEventValidStartEndTime( start, end, entry,
+ currentDate );
+ apptInfo.iStartTime = start;
+ apptInfo.iEndTime = end;
+
+ TCalenInstanceId id = TCalenInstanceId::nullInstanceId();
+ id.mEntryLocalUid = index.row(); //index.row() - temporary ID
+ id.mInstanceTime = apptInfo.iStartTime;
+ apptInfo.iId = id;
+ apptInfo.iAllDay = true;
+ apptInfo.iColor = 0xffff;
+
+ int startSlot, endSlot, columnIdx, columns;
+ mInfo->GetLocation( apptInfo, startSlot, endSlot, columnIdx, columns );
+
+ //2. set timed event's geometry
+ qreal eventStartX(0.0);
+ qreal eventStartY(0.0);
+ qreal eventWidth(mLayoutValues.eventAreaX);
+ qreal eventHeight = (endSlot - startSlot) * mLayoutValues.slotHeight;
+
+
+ //event's startX/width
+ if ( columns > 1 ) {
+ eventWidth /= columns;
+ eventStartX += columnIdx * eventWidth + mLayoutValues.eventMargin;
+ //add margins between the event
+ eventWidth -= mLayoutValues.eventMargin;
+ } else {
+ eventStartX += mLayoutValues.eventMargin;
+ eventWidth -= mLayoutValues.eventMargin;
+ }
+
+ QRectF eventGeometry( eventStartX, eventStartY, eventWidth, eventHeight );
+ item->setGeometry(eventGeometry);
+
+}
+
+
+// -----------------------------------------------------------------------------
+// movingBackwards()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::getTimedEventLayoutValues(LayoutValues& layoutValues)
+{
+ // get the width of content area
+ qreal contentWidth = CalenDayUtils::instance()->contentWidth();
+//1.time column width -> eventAreaX[out]
+ HbStyle style;
+ HbDeviceProfile deviceProfile;
+ layoutValues.unitInPixels = deviceProfile.unitValue();
+
+ if ( mInfo && mInfo->AlldayCount())
+ { // 9.5 -> all-day area width
+ layoutValues.eventAreaX = 9.5 * layoutValues.unitInPixels;
+ }
+ else
+ {
+ layoutValues.eventAreaX = 0;
+ }
+
+//2. event area width -> eventAreaWidth[out]
+ qreal emptyRightColumnWidth(0.0);
+ emptyRightColumnWidth = 6.0 * layoutValues.unitInPixels; //pix (according to UI spec)
+ layoutValues.eventAreaWidth = contentWidth - emptyRightColumnWidth - layoutValues.eventAreaX ;
+//3. margins between the overlapping events -> eventMargin[out]
+ layoutValues.eventMargin = 1.5 * layoutValues.unitInPixels;
+//4. half-hour slot'h height -> slotHeight[out]
+ //curent slot height corresponds to half an hour
+ layoutValues.slotHeight =
+ CalenDayUtils::instance()->hourElementHeight() / 2;
+
+ // 8.2 un (min. touchable event) from layout guide
+ layoutValues.maxColumns = layoutValues.eventAreaWidth / (8.2 * layoutValues.unitInPixels);
+}
+
+// -----------------------------------------------------------------------------
+// setDayInfo()
+// Sets day's info structer to the container.
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::setDayInfo( CalenDayInfo* dayInfo )
+{
+ mInfo = dayInfo;
+}
+
+// -----------------------------------------------------------------------------
+// orientationChanged()
+// Slot handles layout switch.
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::orientationChanged(Qt::Orientation orientation)
+{
+ getTimedEventLayoutValues(mLayoutValues);
+
+ Q_UNUSED( orientation )
+ QList<HbAbstractViewItem *> items = this->items();
+ int count(items.count());
+ for (int i = 0; i < count; i++) {
+ QModelIndex modelIndex = items[i]->modelIndex();
+ if (modelIndex.isValid()) {
+ QVariant variant = modelIndex.data(CalenDayEntry);
+ AgendaEntry entry = variant.value<AgendaEntry> ();
+ if (entry.isTimedEntry()) {
+ updateTimedEventGeometry(items[i], modelIndex);
+ }
+ }
+ }
+
+ createTouchEventAbsorbers();
+}
+
+// -----------------------------------------------------------------------------
+// createTouchEventAbsorbers()
+// Creates absorbers which prevent touching to small items
+// -----------------------------------------------------------------------------
+//
+void CalenDayContainer::createTouchEventAbsorbers()
+{
+ // remove absorbers if exist
+ if (mAbsorbers.count())
+ {
+ qDeleteAll(mAbsorbers);
+ mAbsorbers.clear();
+ }
+
+ const QList<CalenTimeRegion>& regionList = mInfo->RegionList();
+
+ for(int i=0; i < regionList.count(); i++)
+ {
+ if(regionList[i].iColumns.count() > mLayoutValues.maxColumns )
+ {
+ TouchEventAbsorber* absorber =
+ crateAbsorberBetweenSlots(regionList[i].iStartSlot, regionList[i].iEndSlot);
+
+ mAbsorbers.append(absorber);
+ }
+ }
+
+}
+
+// -----------------------------------------------------------------------------
+// crateAbsorberBetweenSlots()
+// Creates single absorber in given location
+// -----------------------------------------------------------------------------
+//
+TouchEventAbsorber *CalenDayContainer::crateAbsorberBetweenSlots
+ (int startSlot, int endSlot)
+{
+ TouchEventAbsorber *absorber = new TouchEventAbsorber(this);
+ absorber->setZValue(1000);
+ absorber->setVisible(true);
+
+ absorber->setGeometry( mLayoutValues.eventAreaX, // x
+ startSlot * mLayoutValues.slotHeight, // y
+ mLayoutValues.eventAreaWidth, // w
+ (endSlot-startSlot) * mLayoutValues.slotHeight ); // h
+
+ return absorber;
+}
+
+
+// -----------------------------------------------------------------------------
+// TouchEventAbsorber::gestureEvent()
+// Handles tap event on overlapping area (currently it leads to Agenda View -
+// as described in UI spec)
+// -----------------------------------------------------------------------------
+//
+void TouchEventAbsorber::gestureEvent(QGestureEvent *event)
+{
+ QTapGesture *tapGesture = qobject_cast<QTapGesture*> (event->gesture(
+ Qt::TapGesture));
+
+ if (tapGesture && tapGesture->state() == Qt::GestureFinished)
+ {
+ CalenDayView* dayView = static_cast<CalenDayView*>
+ (CalenDayUtils::instance()->mainWindow()->currentView());
+
+ dayView->changeView(ECalenAgendaView);
+ }
+}
+
+// -----------------------------------------------------------------------------
+// TouchEventAbsorber()
+// default ctor
+// -----------------------------------------------------------------------------
+//
+TouchEventAbsorber::TouchEventAbsorber(QGraphicsItem *parent) : HbWidget(parent)
+{
+#ifdef _DEBUG
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
+#endif
+ grabGesture(Qt::TapGesture);
+}
+
+// -----------------------------------------------------------------------------
+// TouchEventAbsorber()
+// default dtor
+// -----------------------------------------------------------------------------
+//
+TouchEventAbsorber::~TouchEventAbsorber()
+{
+
+}
+
+// -----------------------------------------------------------------------------
+// TouchEventAbsorber::paint()
+// used for debugging purposes to see absorbers areas
+// -----------------------------------------------------------------------------
+//
+#ifdef _DEBUG
+void TouchEventAbsorber::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget)
+{
+ Q_UNUSED(option)
+ Q_UNUSED(widget)
+
+ painter->save();
+ QPen pen;
+ pen.setWidth(2);
+ pen.setColor(Qt::red);
+ painter->setPen(pen);
+ painter->drawRect(boundingRect());
+ painter->restore();
+}
+#endif
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendaycontentscrollarea.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,412 @@
+/*
+ * Copyright (c) 2010 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: CalenDayContentScrollArea implementation.
+ *
+ */
+
+// System includes
+#include <QGraphicsLinearLayout>
+#include <QGesture>
+
+#include <hbinstance.h>
+#include <hbswipegesture.h>
+
+// User includes
+#include "calendaycontentscrollarea.h"
+#include "calendayutils.h"
+
+/*!
+ \class CalenDayContentScrollArea
+ \brief Scrollable container class for content widgets.
+
+ It handles horizontal scrolling and swipe or pan gestures.
+ */
+
+/*!
+ \brief Constructor
+
+ Configures scroll area settings and resets internal stares of widget.
+ Gets the width of device.
+
+ \param parent The parent of scroll area widget
+ */
+CalenDayContentScrollArea::CalenDayContentScrollArea(QGraphicsItem *parent) :
+ HbScrollArea(parent), mPanDayDirection(ECalenPanNotSet), mIsMoving(false),
+ mMoveDirection(ECalenScrollNoDayChange)
+{
+ // Set scroll settings
+ setScrollDirections(Qt::Horizontal);
+ setClampingStyle(StrictClamping);
+ setHorizontalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
+
+#ifdef CALENDAYVIEW_PANNING_ENABLED
+ grabGesture(Qt::PanGesture);
+ ungrabGesture(Qt::SwipeGesture);
+#else
+ grabGesture(Qt::SwipeGesture);
+ ungrabGesture(Qt::PanGesture);
+#endif
+
+ // Get the width of content area and orientation of screen
+ mContentWidth = CalenDayUtils::instance()->contentWidth();
+ mOrientation = CalenDayUtils::instance()->orientation();
+
+ // Connect to main window's orientationChanged SIGNAL to handle orientation
+ // switching
+ connect(CalenDayUtils::instance()->mainWindow(),
+ SIGNAL(orientationChanged(Qt::Orientation)), this,
+ SLOT(orientationChanged(Qt::Orientation)));
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayContentScrollArea::~CalenDayContentScrollArea()
+{
+}
+
+/*!
+ \brief Scrolls to middle widget.
+
+ Scrolling to middle widget is done if needed.
+ Resets internal pan direction flag.
+ */
+void CalenDayContentScrollArea::scrollToMiddleWidget()
+{
+ QPointF currentPosition = contentWidget()->pos();
+ QPointF destPosition = QPointF(mContentWidth, currentPosition.y());
+
+ // Scroll only when x position is wrong
+ if (currentPosition.x() != destPosition.x()) {
+ scrollContentsTo(QPointF(mContentWidth, currentPosition.y()), 0);
+ }
+
+ // Reset pan direction flag and scrolling flag
+ mPanDayDirection = ECalenPanNotSet;
+}
+
+/*!
+ \brief Scrolls the view by the amount indicated by "delta".
+
+ Checks the direction of pan gesture and promotes leading direction.
+
+ \param delta Move offset
+ \return Returns TRUE if the view was able to scroll, FALSE otherwise
+ */
+bool CalenDayContentScrollArea::scrollByAmount(const QPointF &delta)
+{
+ QPointF newDelta(delta);
+ if (mPanDayDirection == ECalenPanVertical) {
+ newDelta.setX(0);
+ }
+ else
+ if (mPanDayDirection == ECalenPanHorizontal) {
+ newDelta.setY(0);
+ }
+ else {
+ // Pan direction not set
+ }
+
+ return HbScrollArea::scrollByAmount(newDelta);
+}
+
+/*!
+ \brief Handles pan gesture event (horizontal) or swipe gesture.
+
+ Ignores vertical pan gestures.
+
+ \param event Gesture event to be handled
+ */
+void CalenDayContentScrollArea::gestureEvent(QGestureEvent *event)
+{
+#ifdef CALENDAYVIEW_PANNING_ENABLED
+ // Process a pan gesture event
+ if (QPanGesture *panGesture = qobject_cast<QPanGesture*> (event->gesture(
+ Qt::PanGesture))) {
+
+ // Checks pan gesture direction
+ checkPanDirection(panGesture);
+
+ // Put the gesture forward before working with finished gesture
+ HbScrollArea::gestureEvent(event);
+
+ // If gesture is finished move the scroll area to next or previous
+ // widget or resume to gesture start point
+ if (panGesture->state() == Qt::GestureFinished) {
+ // Pan direction should be reseted when scrolling ends
+
+ // Gets the offset of pan gesture.
+ QPointF offset = panGesture->offset();
+
+ // Note: in horizontal orientation x should is treaten as Y, y as X.
+ QPointF movement;
+ if (mOrientation == Qt::Vertical) {
+ movement = offset;
+ }
+ else {
+ movement.setX(offset.y());
+ movement.setY(offset.x());
+ }
+
+ // Gesture was long enough for place movement
+ if (qAbs(movement.x()) > (KCalenHScrollMoveParam * mContentWidth / 100)) {
+ if (movement.x() < 0) {
+ mMoveDirection = ECalenScrollToNext;
+ moveTo(QPointF((-mStartPosition.x() + mContentWidth),
+ -mStartPosition.y()), KCalenScrollDaysTimeout);
+ }
+ else {
+ mMoveDirection = ECalenScrollToPrev;
+ moveTo(QPointF(-mStartPosition.x() - mContentWidth,
+ -mStartPosition.y()), KCalenScrollDaysTimeout);
+ }
+ }
+ // Gesture was short one, reset to gesture start point
+ else {
+ qreal startPos = mStartPosition.x();
+ bool isNegative = false;
+ if (startPos < 0) {
+ isNegative = true;
+ }
+ startPos = qAbs(startPos);
+ qreal normalizeValue = mContentWidth / 2;
+
+ while (startPos > normalizeValue) {
+ normalizeValue += mContentWidth;
+ }
+
+ if (isNegative) {
+ mStartPosition.setX(-(normalizeValue - (mContentWidth / 2)));
+ }
+ else {
+ mStartPosition.setX(normalizeValue - (mContentWidth / 2));
+ }
+
+ mMoveDirection = ECalenScrollNoDayChange;
+ moveTo(-mStartPosition, KCalenScrollDaysTimeout);
+ }
+ }
+ }
+ else {
+ HbScrollArea::gestureEvent(event);
+ }
+#else
+ // Let the content scroll area ignore pan gestures
+ if (QPanGesture *panGesture = qobject_cast<QPanGesture *> (event->gesture(
+ Qt::PanGesture))) {
+ // do nothing with pan gesture
+ }
+
+ if (HbSwipeGesture *swipeGesture =
+ qobject_cast<HbSwipeGesture *> (event->gesture(Qt::SwipeGesture))) {
+ if (swipeGesture->state() == Qt::GestureStarted) {
+ mStartPosition = contentWidget()->pos();
+
+ qreal swipeAngle = swipeGesture->sceneSwipeAngle();
+ if (CalenDayUtils::instance()->isHorizontalSwipe(swipeAngle)) {
+ if (QSwipeGesture::Left ==
+ swipeGesture->sceneHorizontalDirection()) {
+ mMoveDirection = ECalenScrollToNext;
+ moveTo(QPointF((-mStartPosition.x() + mContentWidth),
+ -mStartPosition.y()), KCalenScrollDaysTimeout);
+ }
+ else if (QSwipeGesture::Right ==
+ swipeGesture->sceneHorizontalDirection()) {
+ mMoveDirection = ECalenScrollToPrev;
+ moveTo(QPointF(-mStartPosition.x() - mContentWidth,
+ -mStartPosition.y()), KCalenScrollDaysTimeout);
+ }
+ }
+ }
+ }
+#endif
+}
+
+/*!
+ \brief Filters pan gesture events.
+
+ Filters events if this object has been installed as an event filter for
+ the watched object. Handles horizontal pan gestures (ignores vertical).
+ When moving scroll area all gesture events are blocked.
+
+ \param obj Watched object
+ \param event Event to be filtered
+ \return Returns TRUE if event was handled. FALSE otherwise.
+ */
+bool CalenDayContentScrollArea::eventFilter(QObject *obj, QEvent *event)
+{
+ Q_UNUSED(obj);
+
+ bool handled = false;
+
+ // Check if we get a gesture event
+ if (event->type() == QEvent::Gesture) {
+
+ // Blocks handling of gesture events if scrolling started by
+ // pan gesture is in progress
+ if (mIsMoving) {
+ handled = true;
+ }
+ else {
+ QGestureEvent* gesture = static_cast<QGestureEvent*> (event);
+
+ // Check if we get a pan gesture
+ QPanGesture *panGesture = qobject_cast<QPanGesture*> (
+ gesture->gesture(Qt::PanGesture));
+ if (panGesture) {
+ checkPanDirection(panGesture);
+ if (mPanDayDirection == ECalenPanHorizontal) {
+ gestureEvent(gesture);
+ handled = true;
+ }
+ }
+ }
+ }
+
+ return handled;
+}
+
+/*!
+ \brief Overriden event handler.
+
+ Handles events:
+ - gesture/focus events blocked when horizontal scrolling is in progress
+ - layout request event - scrolls to middle widget if current position is wrong
+
+ \param e Event to be handled
+ \return Returns TRUE if event was handled. FALSE otherwise.
+ */
+bool CalenDayContentScrollArea::event(QEvent *e)
+{
+ bool result = false;
+
+ // Blocks base class handler for certain events if scrolling started
+ // by pan gesture is in progress
+ if (mIsMoving && (e->type() == QEvent::Gesture || e->type()
+ == QEvent::GestureOverride || e->type() == QEvent::FocusOut
+ || e->type() == QEvent::FocusIn)) {
+ result = true;
+ }
+ if (!result) {
+ // Call base class handler
+ result = HbScrollArea::event(e);
+
+ // Scroll to middle widget when layout request
+ if (e->type() == QEvent::LayoutRequest) {
+ scrollToMiddleWidget();
+ }
+ }
+
+ return result;
+}
+
+/*!
+ \brief Checks the direction of pan gesture.
+
+ Changes the scrolling style according to movement direction,
+ stores the orientation of the pan gesture.
+ Function is used when switching widgets by panning gesture is enabled.
+
+ \param panGesture Pan gesture event
+ */
+void CalenDayContentScrollArea::checkPanDirection(QPanGesture *panGesture)
+{
+ // Gets the offset of pan gesture.
+ QPointF offset = panGesture->offset();
+
+ // Note: in horizontal orientation x should is treaten as Y, y as X.
+ QPointF movement;
+ if (mOrientation == Qt::Vertical) {
+ movement = offset;
+ }
+ else {
+ movement.setX(offset.y());
+ movement.setY(offset.x());
+ }
+
+ // If gesture is started check leading movement direction
+ if (panGesture->state() == Qt::GestureStarted) {
+ if (qAbs(movement.x()) < qAbs(movement.y())) {
+ mPanDayDirection = ECalenPanVertical;
+ }
+ else {
+ mStartPosition = contentWidget()->pos();
+ mPanDayDirection = ECalenPanHorizontal;
+ }
+ }
+}
+
+/*!
+ \brief Scrolls the contents to the newPosition in a given time.
+
+ Sets the flag to indicate that scrolling is in progress. Use this function
+ for scrolling with timeout > 0 to block gesture and focus events during
+ scroll area movement.
+
+ \param newPosition Destination position
+ \param time Time of scroll movement
+ */
+void CalenDayContentScrollArea::moveTo(const QPointF &newPosition, int time)
+{
+ // Connect to scrollingEnded SIGNAL to get feedback when scrolling ends
+ connect(this, SIGNAL(scrollingEnded()), this, SLOT(moveFinished()));
+
+ // Scroll the content to new position and set isMoving flag
+ scrollContentsTo(newPosition, time);
+ mIsMoving = true;
+
+ // Emit signal that moving has just started
+ if (mMoveDirection != ECalenScrollNoDayChange) {
+ emit scrollAreaMoveStarted(mMoveDirection);
+ }
+}
+
+/*!
+ \brief Slot which is called when moving of scroll area is finished.
+
+ Resets internal isMoving flag.
+ */
+void CalenDayContentScrollArea::moveFinished()
+{
+ // Disconnect from signal, move is finished now
+ disconnect(this, SIGNAL(scrollingEnded()), this, SLOT(moveFinished()));
+ mIsMoving = false;
+
+ // Emit signal that moving has just finished and reset direction
+ if (mMoveDirection != ECalenScrollNoDayChange) {
+ emit scrollAreaMoveFinished(mMoveDirection);
+ mMoveDirection = ECalenScrollNoDayChange;
+ }
+}
+
+/*!
+ \brief Slot which is called whenever the orientation of the device changes.
+
+ Stores screen width and orientation in private members.
+
+ \param orientation Current device orientation
+ */
+void CalenDayContentScrollArea::orientationChanged(Qt::Orientation orientation)
+{
+ // Update the width of content area
+ mContentWidth = CalenDayUtils::instance()->contentWidth();
+ mOrientation = orientation;
+
+ // Reset flag related to moving
+ mPanDayDirection = ECalenPanNotSet;
+ mMoveDirection = ECalenScrollNoDayChange;
+ mIsMoving = false;
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendaycontentwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,243 @@
+/*
+ * Copyright (c) 2010 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: CalenDayContentWidget implementation.
+ *
+ */
+
+// System includes
+#include <QGraphicsLinearLayout>
+#include <hbmodeliterator.h>
+
+// User includes
+#include "calendaymodelmanager.h"
+#include "calendaycontentwidget.h"
+#include "calendayitemview.h"
+#include "calendaycontentscrollarea.h"
+
+/*!
+ \class CalenDayContentWidget
+ \brief Content widget is a container class for horizontal layouted widgets.
+ */
+
+/*!
+ \brief Constructor
+
+ \param parent The parent of central widget
+ */
+CalenDayContentWidget::CalenDayContentWidget(
+ CalenDayModelManager &modelManager,
+ QGraphicsItem *parent) :
+ HbWidget(parent), mLayout(NULL), mModelManager(modelManager)
+{
+ mWidgets.clear();
+ initializeViews(parent);
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayContentWidget::~CalenDayContentWidget()
+{
+ // Just clear widget list - parent object will destroy its children
+ mWidgets.clear();
+}
+
+/*!
+ \brief Adds the widget to central widget and layouts it horizontally.
+
+ Ownership of item is passed to CalenDayContentWidget.
+
+ \param item Widget to be added
+ \param where Place where widget should be added (as first/last item)
+ */
+void CalenDayContentWidget::add(HbWidget* item, CalenWidgetPosition where)
+{
+ // Create linear, horizontal layout if not exist
+ if (!mLayout) {
+ mLayout = new QGraphicsLinearLayout(Qt::Horizontal, NULL);
+ mLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+ mLayout->setSpacing(0.0);
+ }
+
+ switch (where) {
+ case ECalenFirstWidget: {
+ mLayout->insertItem(0, item);
+ mWidgets.insert(0, item);
+ break;
+ }
+ case ECalenLastWidget:
+ default: {
+ mLayout->addItem(item);
+ mWidgets.append(item);
+ }
+ }
+
+ // If layout has no parent - apply it to central widget
+ if (mLayout && !mLayout->parentLayoutItem()) {
+ setLayout(mLayout);
+ }
+}
+
+/*!
+ \brief Takes the widget and removes it from central widget.
+
+ Ownership of item is passed to caller.
+
+ \param which Indicates which widget should be taken (first/last)
+ \return Pointer to HbWidget or NULL if widget was not found
+ */
+HbWidget* CalenDayContentWidget::take(CalenWidgetPosition which)
+{
+ Q_ASSERT(mLayout);
+
+ HbWidget* itemToTake = NULL;
+ switch (which) {
+ case ECalenFirstWidget: {
+ itemToTake = mWidgets.takeFirst();
+ break;
+ }
+ case ECalenLastWidget:
+ default: {
+ itemToTake = mWidgets.takeLast();
+ }
+ }
+
+ if (itemToTake) {
+ mLayout->removeItem(itemToTake);
+ }
+
+ return itemToTake;
+}
+
+/*!
+ \brief Removed the widget from central widget.
+
+ Widget is removed and deleted.
+
+ \param which Indicates which widget should be removed (first/last)
+ */
+void CalenDayContentWidget::remove(CalenWidgetPosition which)
+{
+ Q_ASSERT(mLayout);
+
+ HbWidget* itemToRemove = NULL;
+ switch (which) {
+ case ECalenFirstWidget: {
+ itemToRemove = mWidgets.takeFirst();
+ break;
+ }
+ case ECalenLastWidget:
+ default: {
+ itemToRemove = mWidgets.takeLast();
+ }
+ }
+
+ if (itemToRemove) {
+ mLayout->removeItem(itemToRemove);
+ delete itemToRemove;
+ }
+}
+
+/*!
+ \brief Performs relayout of widgets when it is needed.
+
+ Relayout is done depending on last scroll move:
+ - if widget was scrolled to next: first widget is taken and added as last
+ - if widget was scrolled to prev: last widget is taken and inserted as first
+
+ Emits widgetsRelayoutFinished SIGNAL when relayout is over.
+
+ \param scrollTo Direction of last movement
+ */
+void CalenDayContentWidget::relayoutWidgets(CalenScrollDirection scrollTo)
+{
+ HbWidget* widget = NULL;
+ switch (scrollTo) {
+ case ECalenScrollToNext: {
+ widget = take(ECalenFirstWidget);
+ add(widget, ECalenLastWidget);
+ break;
+ }
+ case ECalenScrollToPrev:
+ default: {
+ widget = take(ECalenLastWidget);
+ add(widget, ECalenFirstWidget);
+ }
+ }
+ emit widgetsRelayoutFinished(scrollTo);
+}
+
+/*!
+ \brief SLOT handles simultanous vertical scrolling of owned widgets.
+
+ \param newPos New scroll position
+ */
+void CalenDayContentWidget::widgetScrolled(const QPointF &newPos)
+{
+ for (int i = 0; i < mWidgets.count(); i++) {
+ CalenDayItemView *view =
+ static_cast<CalenDayItemView *> (mWidgets[i]);
+ view->scrollVertically(newPos);
+ }
+ emit scrollPositionChanged(newPos);
+}
+
+/*!
+ \brief Initializes content widgets and adds them to layout.
+
+ \param parent Parent object
+ */
+void CalenDayContentWidget::initializeViews(QGraphicsItem *parent)
+{
+ // Create item views
+ HbModelIterator *iterator(0);
+
+ iterator = new HbModelIterator(&mModelManager.getModel(
+ CalenDayModelManager::PreviousDay));
+ CalenDayItemView *prevItemView = new CalenDayItemView(
+ mModelManager.getServices(), iterator, 0);
+
+ iterator = new HbModelIterator(&mModelManager.getModel(
+ CalenDayModelManager::CurrentDay));
+ CalenDayItemView *currItemView = new CalenDayItemView(
+ mModelManager.getServices(), iterator, 0);
+
+ iterator = new HbModelIterator(&mModelManager.getModel(
+ CalenDayModelManager::NextDay));
+ CalenDayItemView *nextItemView = new CalenDayItemView(
+ mModelManager.getServices(), iterator, 0);
+
+ // Connecting views with widgetScrolled SLOT
+ // to support simultanous vertical scrolling
+ connect(prevItemView, SIGNAL(scrollPositionChanged(const QPointF&)), this,
+ SLOT(widgetScrolled(const QPointF&)));
+ connect(currItemView, SIGNAL(scrollPositionChanged(const QPointF&)), this,
+ SLOT(widgetScrolled(const QPointF&)));
+ connect(nextItemView, SIGNAL(scrollPositionChanged(const QPointF&)), this,
+ SLOT(widgetScrolled(const QPointF&)));
+
+ // Install event filters to receive events necessary for gesture handling
+ CalenDayContentScrollArea* scrollArea =
+ static_cast<CalenDayContentScrollArea*> (parent);
+ prevItemView->installEventFilter(scrollArea);
+ currItemView->installEventFilter(scrollArea);
+ nextItemView->installEventFilter(scrollArea);
+
+ // Add views to layout
+ add(prevItemView);
+ add(currItemView);
+ add(nextItemView);
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayeventspane.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,108 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+// System includes
+#include <QPainter>
+#include <hbcolorscheme.h>
+
+// User includes
+#include "CalenDayEventsPane.h"
+
+/*!
+ \class CalenDayEventsPane
+ \brief Events pane draws timelines in content view.
+ */
+
+/*!
+ \brief Constructor
+
+ \param parent The parent of widget
+ */
+CalenDayEventsPane::CalenDayEventsPane(HbWidget *parent) : HbWidget(parent),
+ mDrawTopLine(false)
+{
+ // Necessary when widget implements own paint method
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
+
+ HbDeviceProfile deviceProfile;
+ mUnitInPixels = deviceProfile.unitValue();
+ mHourLineColor = HbColorScheme::color("qtc_cal_day_hour_lines");
+
+ // Set custom dashed pen
+ mCustomDashedPen.setWidth(0.15);
+ QVector<qreal> dashes;
+ dashes << 5 << 5;
+ mCustomDashedPen.setDashPattern(dashes);
+ mCustomDashedPen.setCapStyle(Qt::FlatCap);
+ mCustomDashedPen.setColor(mHourLineColor);
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayEventsPane::~CalenDayEventsPane()
+{
+}
+
+/*!
+ \brief Shows/hides a line at top of event pane.
+
+ \param drawTopLine Flag to be set if top line should be drawn.
+ */
+void CalenDayEventsPane::drawTopLine(bool drawTopLine)
+{
+ mDrawTopLine = drawTopLine;
+}
+
+/*!
+ \brief Paints the item with given painter.
+
+ \param painter
+ \param option
+ \param widget
+ */
+void CalenDayEventsPane::paint(QPainter *painter,
+ const QStyleOptionGraphicsItem *option, QWidget *widget)
+{
+ Q_UNUSED(widget)
+
+ QRectF drawArea = option->rect;
+
+ const qreal hourLineThickness = 0.15; //un (according to UI spec)
+
+ painter->save();
+
+ // Draw full hour line
+ QPen linePen = QPen(mHourLineColor, hourLineThickness * mUnitInPixels);
+ painter->setPen(linePen);
+ QLineF fullHourLine(drawArea.bottomLeft(), drawArea.bottomRight());
+ painter->drawLine(fullHourLine);
+
+ // Draw extra line on top if needed
+ if (mDrawTopLine) {
+ fullHourLine = QLineF(drawArea.topLeft(), drawArea.topRight());
+ painter->drawLine(fullHourLine);
+ }
+
+ // Draw half hour line
+ painter->setPen(mCustomDashedPen);
+ qreal halfHourYPos = drawArea.height() / 2;
+ QLineF halfHourLine(drawArea.left(), halfHourYPos, drawArea.right(), halfHourYPos);
+ painter->drawLine(halfHourLine);
+
+ painter->restore();
+}
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayhourelement.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,143 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+//System includes
+#include <QGraphicsLinearLayout>
+#include <QPainter>
+#include <hbtextitem.h>
+#include <hbstyle.h>
+#include <hbcolorscheme.h>
+#include <hbfontspec.h>
+#include <hbextendedlocale.h>
+
+//User includes
+#include "calendayhourelement.h"
+#include "calendaycontainer.h"
+#include "calendayhourscrollarea.h"
+
+// Constants
+
+/*!
+ \brief CalenDayHourElement()
+ Constructor
+*/
+CalenDayHourElement::CalenDayHourElement(const QTime &time, QGraphicsItem *parent) :
+ HbWidget(parent), mHour(time)
+{
+ // Necessary when widget implements own paint method
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
+
+ HbDeviceProfile deviceProfile;
+ mUnitInPixels = deviceProfile.unitValue();
+
+ mHourLineColor = HbColorScheme::color("qtc_cal_day_hour_lines");
+
+ //Create text items
+ HbExtendedLocale systemLocale = HbExtendedLocale::system();
+
+ //Get current time format and (if there's a need) separate time from am/pm text
+ QChar timeSeparator = ' ';
+ QStringList timeTextList = systemLocale.format(time, r_qtn_time_usual_with_zero).split(
+ timeSeparator);
+
+ //prepend 0 if needed to achieve format - 01:00
+ QString timeString = timeTextList[0];
+ if (timeString.length() < 5) {
+ timeString.prepend('0');
+ }
+
+ QString ampmString = "";
+ if (timeTextList.count() > 1) {
+ ampmString = timeTextList[1].toLower();
+ }
+
+ HbTextItem* timeTextItem = new HbTextItem(timeString, this);
+ HbTextItem* ampmTextItem = new HbTextItem(ampmString, this);
+
+ HbStyle::setItemName(timeTextItem, QLatin1String("time"));
+ HbStyle::setItemName(ampmTextItem, QLatin1String("ampm"));
+
+ mContainer = static_cast<CalenDayHourScrollArea*> (parent);
+
+}
+
+/*!
+ \brief CalenDayHourElement()
+ Destructor
+*/
+CalenDayHourElement::~CalenDayHourElement()
+{
+
+}
+
+/*!
+ \brief CalenDayHourElement()
+ paint
+*/
+void CalenDayHourElement::paint(
+ QPainter * painter,
+ const QStyleOptionGraphicsItem * option,
+ QWidget * widget)
+{
+ Q_UNUSED(widget);
+
+ QRectF drawArea = option->rect;
+
+ const qreal hourLineThickness = 0.15; //un (according to UI spec)
+ const qreal timeLineThickness = 0.75; //un (according to UI spec)
+
+ painter->save();
+
+ //Draw full hour line
+ QPen linePen = QPen(mHourLineColor, hourLineThickness * mUnitInPixels);
+ painter->setPen(linePen);
+ QLineF fullHourLine(drawArea.bottomLeft(), drawArea.bottomRight());
+
+ painter->drawLine(fullHourLine);
+
+ //Draw extra line on top for midnight
+ if (mHour.hour() == 0) {
+ fullHourLine = QLineF(drawArea.topLeft(), drawArea.topRight());
+ painter->drawLine(fullHourLine);
+ }
+
+ QDateTime currentDateTime = QDateTime::currentDateTime();
+
+ //Draw the time line in theme color
+ if (mContainer) {
+ QDateTime containersDateTime = mContainer->dateTime();
+
+ if (currentDateTime.date() == containersDateTime.date() && currentDateTime.time().hour()
+ == mHour.hour()) {
+
+ qreal currentTimeY = drawArea.height() * currentDateTime.time().minute() / 60;
+
+ QColor color = HbColorScheme::color("qtc_cal_month_current_day");
+
+ painter->setPen(QPen(color, timeLineThickness * mUnitInPixels, Qt::SolidLine,
+ Qt::FlatCap));
+ QLineF currentTimeline(drawArea.left(), drawArea.top() + currentTimeY, drawArea.right(), drawArea.top()
+ + currentTimeY);
+ painter->drawLine(currentTimeline);
+
+ }
+ }
+
+ painter->restore();
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayhourscrollarea.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,147 @@
+/*
+ * Copyright (c) 2010 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: CalenDayHourScrollArea implementation.
+ *
+ */
+
+// System includes
+#include <QGraphicsLinearLayout>
+
+// User includes
+#include "calendayhourscrollarea.h"
+#include "calendayhourelement.h"
+#include "calendayutils.h"
+
+/*!
+ \class CalenDayHourScrollArea
+ \brief Scrollable container class for hour elements.
+
+ It handles vertical scrolling.
+ */
+
+/*!
+ \brief Constructor
+
+ Configures scroll area settings and resets internal stares of widget.
+ Gets the width of device.
+
+ \param parent The parent of scroll area widget
+ */
+CalenDayHourScrollArea::CalenDayHourScrollArea(QGraphicsItem *parent) :
+ HbScrollArea(parent),
+ mDateTime(QDateTime())
+{
+ // Set scroll settings
+ setScrollDirections(Qt::Vertical);
+ setScrollingStyle(HbScrollArea::PanWithFollowOn);
+ setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
+ grabGesture(Qt::PanGesture, Qt::ReceivePartialGestures);
+
+ // Get height and width of hour elements and set fixed size policy
+ qreal hourElementHeight = CalenDayUtils::instance()->hourElementHeight();
+ qreal hourElementWidth = CalenDayUtils::instance()->hourElementWidth();
+
+ // Create widget for hour elements
+ HbWidget *hourWidget = new HbWidget();
+
+ // Create and insert hour elements into vertical layout
+ QGraphicsLinearLayout* hourLayout = new QGraphicsLinearLayout(Qt::Vertical,
+ NULL);
+ for (int i = 0; i < 24; i++) {
+ CalenDayHourElement* element = new CalenDayHourElement(QTime(i, 0),
+ this);
+ element->setPreferredWidth(hourElementWidth);
+ element->setPreferredHeight(hourElementHeight);
+ element->setSizePolicy(QSizePolicy(QSizePolicy::Fixed,
+ QSizePolicy::Fixed));
+ hourLayout->addItem(element);
+
+ mHourElements.append(element);
+ }
+
+ hourLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+ hourLayout->setSpacing(0.0);
+
+ // Fix the size of scroll area
+ setMinimumWidth(hourElementWidth);
+ setMaximumWidth(hourElementWidth);
+
+ // Apply hour layout for new widget and set content widget to scroll area
+ hourWidget->setLayout(hourLayout);
+ setContentWidget(hourWidget);
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayHourScrollArea::~CalenDayHourScrollArea()
+{
+}
+
+/*!
+ \brief SLOT scrolls the view vertically to new position.
+
+ \param newPosition New position
+ */
+void CalenDayHourScrollArea::scrollVertically(const QPointF &newPosition)
+{
+ QPointF currentPos = contentWidget()->pos();
+ if (abs(newPosition.y()) != abs(currentPos.y())) {
+ currentPos.setY(newPosition.y());
+ scrollContentsTo(currentPos, 0);
+ }
+}
+
+/*!
+ \brief Sets date and time for this container.
+
+ \param dateTime new date and time
+ */
+void CalenDayHourScrollArea::setDateTime(const QDateTime &dateTime)
+{
+ mDateTime = dateTime;
+}
+/*!
+ \brief Returns date and time assigned to current view.
+*/
+QDateTime CalenDayHourScrollArea::dateTime() const
+{
+ return mDateTime;
+}
+
+/*!
+ \brief Scroll view to given hour.
+
+ \param An hour In 24 hour format (0 - 23)
+*/
+void CalenDayHourScrollArea::scrollToHour(int hour)
+{
+ CalenDayHourElement *hourElement = mHourElements.at(hour);
+ QRectF hourElementRect = hourElement->rect();
+ hourElementRect = hourElement->mapRectToParent(hourElementRect);
+ QPointF newPos = hourElementRect.topLeft();
+
+ //Ensure that we won't scroll out of bound
+ CalenDayHourElement *lastElement = mHourElements.last();
+ qreal bottomEdge = lastElement->mapRectToParent(lastElement->rect()).bottom();
+ qreal viewHeight = rect().height();
+
+ if(bottomEdge - newPos.y() < viewHeight){
+ newPos.setY(bottomEdge - viewHeight);
+ }
+
+ scrollContentsTo(newPos);
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayinfo.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,2362 @@
+/*
+* Copyright (c) 2007-2010 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: Storage class for day and week views.
+*
+*/
+
+
+// INCLUDES
+#include "calendayinfo.h"
+#include "calenagendautils.h"
+#include "calenconstants.h"
+#include "calendateutils.h"
+
+namespace
+{
+const int KUntimedDefaultSlot(16);
+}
+
+/*!
+ \brief CalenDayInfo::CalenDayInfo
+*/
+CalenDayInfo::CalenDayInfo(TSlotsInHour aSlotsInHour) :
+ iFirstUntimedSlot(KUntimedDefaultSlot), iSlotsInHour(aSlotsInHour)
+{
+ iSelectedSlot = KFSCalStartingHour * iSlotsInHour;
+ iSelectedRegion = KErrNotFound;
+ iSelectedColumn = 0;
+ iSelectedAlldayEvent = KErrNotFound;
+ iEarliestEndSlot = KErrNotFound;
+ iLastStartSlot = KErrNotFound;
+}
+
+/*!
+ \brief Destructor
+*/
+CalenDayInfo::~CalenDayInfo()
+{
+ for (int i = 0; i < iRegionList.count(); i++) {
+ iRegionList[i].Close();
+ }
+ iRegionList.clear();
+ iUntimedEvents.clear();//Close();
+ iTodoEvents.clear();//Close();
+ iAlldayEvents.clear();//Close();
+}
+
+/*!
+ \brief CalenDayInfo::Reset
+*/
+void CalenDayInfo::Reset()
+{
+ for (int i = 0; i < iRegionList.count(); i++) {
+ iRegionList[i].Close();
+ }
+ iRegionList.clear();//Reset();
+ iUntimedEvents.clear();//Reset();
+ iTodoEvents.clear();//Reset();
+ iAlldayEvents.clear();//Reset();
+
+ iUntimedSlotCount = 0;
+ iFirstUntimedSlot = KFSCalStartingHour * iSlotsInHour;
+
+ iSelectedSlot = KFSCalStartingHour * iSlotsInHour;
+ iSelectedRegion = KErrNotFound;
+ iSelectedColumn = 0;
+ iSelectedAlldayEvent = KErrNotFound;
+ iEarliestEndSlot = KErrNotFound;
+ iLastStartSlot = KErrNotFound;
+}
+
+/*!
+ \brief CalenDayInfo::InsertTimedEvent
+*/
+void CalenDayInfo::InsertTimedEvent(const SCalenApptInfo& aItemInfo)
+{
+
+ int startIndex = SlotIndexForStartTime(aItemInfo.iStartTime);
+ int endIndex = SlotIndexForEndTime(aItemInfo.iEndTime);
+ if (endIndex == startIndex) {
+ endIndex++;
+ }
+ if (iRegionList.count() > 0) {
+ // the timed events must be added in order
+ ASSERT( startIndex >= iLastStartSlot );
+ }
+
+ CalenTimedEventInfo info;
+ info.iStartSlot = startIndex;
+ info.iEndSlot = endIndex;
+ info.iId = aItemInfo.iId;
+ info.iStatus = aItemInfo.iStatus;
+ // info.iReplicationStatus = aItemInfo.iReplicationStatus;
+ iLastStartSlot = startIndex;
+ if (iEarliestEndSlot == KErrNotFound || endIndex < iEarliestEndSlot) {
+ iEarliestEndSlot = endIndex;
+ }
+
+ bool added(false);
+ if (iRegionList.count() > 0) {
+ // Since events are added in order, the event either overlaps the
+ // last region or doesn't overlap any region at all
+ CalenTimeRegion& region = iRegionList[iRegionList.count() - 1];
+ if (region.Overlaps(info)) {
+ region.AddEvent(info);
+ added = true;
+ }
+ }
+
+ if (!added) {
+ // If it didn't overlap the last region, add a new region for this event.
+ iRegionList.append(CalenTimeRegion());
+ CalenTimeRegion& region = iRegionList[iRegionList.count() - 1];
+ region.AddEvent(info);
+
+ // Do rounding of the region ends
+ if (iRegionList.count() >= 2) {
+ // Check if the previous region end time can be rounded down
+ CalenTimeRegion& prevRegion = iRegionList[iRegionList.count() - 2];
+ int end = RoundHourDown(prevRegion.iEndSlot);
+ if (end <= region.iStartSlot) {
+ prevRegion.iEndSlot = end;
+ }
+ // Check if the start time of the new region can be rounded up
+ int start = RoundHourUp(region.iStartSlot);
+ if (start >= prevRegion.iEndSlot) {
+ region.iStartSlot = start;
+ }
+ }
+ else {
+ // No previous region, round the start time up
+ region.iStartSlot = RoundHourUp(region.iStartSlot);
+ }
+ }
+}
+
+/*!
+ \brief CalenDayInfo::InsertAlldayEvent
+*/
+void CalenDayInfo::InsertAlldayEvent(const SCalenApptInfo& aItemInfo)
+{
+ CalenTimedEventInfo info;
+ info.iStartSlot = 0;
+ info.iEndSlot = iSlotsInHour * KCalenHoursInDay + iUntimedSlotCount;
+ info.iId = aItemInfo.iId;
+ info.iStatus = aItemInfo.iStatus;
+ // info.iReplicationStatus = aItemInfo.iReplicationStatus;
+
+ iAlldayEvents.append(info);
+}
+
+/*!
+ \brief CalenDayInfo::IsAllDayEvent
+*/
+bool CalenDayInfo::IsAlldayEvent(QDateTime aStart, QDateTime aEnd)
+{
+ bool isAllDay(false);
+
+ if (!CalenDateUtils::onSameDay(aStart, aEnd)) {
+ QDateTime startMidnight = CalenDateUtils::beginningOfDay(aStart);
+ QDateTime endMidnight = CalenDateUtils::beginningOfDay(aEnd);
+
+ if ((aStart == startMidnight) && (aEnd == endMidnight)) {
+ isAllDay = true;
+ }
+ }
+ return isAllDay;
+}
+
+/*!
+ \brief CalenDayInfo::IsAllDayEvent
+ Allday event is an event starting and ending at midnight,
+ with a duration of n*24h.
+*/
+/*
+bool CalenDayInfo::IsAlldayEvent(const CCalInstance& aInstance)
+{
+ bool isAllDay(false);
+
+ // If getting the start or end time fails, return false.
+ QDateTime start;
+ QDateTime end;
+ TRAPD( error,
+ {
+ start = aInstance.StartTimeL().TimeLocalL();
+ end = aInstance.EndTimeL().TimeLocalL();
+ });
+
+ if (error == KErrNone && !CalenDateUtils::onSameDay(start, end)) {
+ QDateTime startMidnight = CalenDateUtils::beginningOfDay(start);
+ QDateTime endMidnight = CalenDateUtils::beginningOfDay(end);
+
+ if ((start == startMidnight) && (end == endMidnight)) {
+ isAllDay = true;
+ }
+ }
+
+ if (error != KErrNone) {
+ CEikonEnv::Static()->HandleError(error);//codescanner::eikonenvstatic
+ }
+
+ return isAllDay;
+}
+*/
+
+/*!
+ \brief CalenDayInfo::AlldayCount
+*/
+int CalenDayInfo::AlldayCount()
+{
+ return iAlldayEvents.count();
+}
+
+/*!
+ \brief CalenDayInfo::TodoCount
+*/
+int CalenDayInfo::TodoCount()
+{
+ return iTodoEvents.count();
+}
+
+/*!
+ \brief CalenDayInfo::GetLocation
+*/
+void CalenDayInfo::GetLocation(
+ const SCalenApptInfo& aItemInfo,
+ int& aStartSlot,
+ int& aEndSlot,
+ int& aColumnIndex,
+ int& aColumns)
+{
+ int startIndex = SlotIndexForStartTime(aItemInfo.iStartTime);
+ int endIndex = SlotIndexForEndTime(aItemInfo.iEndTime);
+ if (endIndex == startIndex) {
+ endIndex++;
+ }
+
+ aStartSlot = startIndex;
+ aEndSlot = endIndex;
+
+ CalenSlotInterval interval;
+ interval.iStartSlot = startIndex;
+ interval.iEndSlot = endIndex;
+
+ bool found(false);
+ // Scan through all allday events and see if it matches any of them
+ for (int i = 0; i < iAlldayEvents.count() && !found; i++) {
+ if (aItemInfo.iId == iAlldayEvents[i].iId) {
+ aColumns = iAlldayEvents.count();
+ aColumnIndex = i;
+ found = true;
+ }
+ }
+
+ // Scan through all regions and see if the event overlaps any region.
+ // If it overlaps a region, the event must be in that region.
+ for (int i = 0; i < iRegionList.count() && !found; i++) {
+ CalenTimeRegion& region = iRegionList[i];
+ if (region.Overlaps(interval)) {
+ // Scan through all columns and look for the event
+ aColumns = region.iColumns.count();
+ for (int j = 0; j < aColumns && !found; j++) {
+ if (region.iColumns[j].ContainsEvent(aItemInfo.iId)) {
+ aColumnIndex = j;
+ found = true;
+ }
+ }
+ // the event should be in this region if it overlaps the region
+ ASSERT( found );
+ }
+ }
+ // the event should have been found somewhere
+ ASSERT( found );
+}
+
+/*!
+ \brief CalenDayInfo::GetSelectedSlot
+*/
+void CalenDayInfo::GetSelectedSlot(int& aSlot, int& aRegion, int& aColumnIndex, int& aColumns)
+{
+
+ aSlot = iSelectedSlot;
+ aColumnIndex = iSelectedColumn;
+ if (iSelectedRegion >= 0) {
+ aColumns = iRegionList[iSelectedRegion].iColumns.count();
+ aRegion = iSelectedRegion;
+ }
+ else {
+ aColumns = 0;
+ aRegion = KErrNotFound;
+ }
+}
+
+/*!
+ \brief CalenDayInfo::FindRegion
+*/
+int CalenDayInfo::FindRegion(const CalenSlotInterval& aInterval, int aDirection)
+{
+ // Setup the start and end region indices for iterating
+ int start, end;
+ if (aDirection > 0) {
+ start = 0;
+ end = iRegionList.count();
+ }
+ else {
+ start = iRegionList.count() - 1;
+ end = -1;
+ }
+
+ int region = KErrNotFound;
+
+ // Iterate over the regions, in the order given, looking for a region
+ // overlapping this interval
+ for (int i = start; i != end && region < 0; i += aDirection) {
+ if (iRegionList[i].Overlaps(aInterval)) {
+ region = i;
+ }
+ }
+ return region;
+}
+
+/*!
+ \brief Find an event within the given interval of the current column,
+ searching in the given direction.
+*/
+int CalenDayInfo::FindEvent(const CalenSlotInterval& aInterval, int aDirection)
+{
+ ASSERT( iSelectedRegion >= 0 && iSelectedRegion < iRegionList.count() );
+
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ int index = KErrNotFound;
+
+ if (iSelectedColumn < region.iColumns.count()) {
+ CalenTimeColumn& column = region.iColumns[iSelectedColumn];
+ int start, end;
+ if (aDirection > 0) {
+ start = 0;
+ end = column.iEventArray.count();
+ }
+ else {
+ start = column.iEventArray.count() - 1;
+ end = -1;
+ }
+
+ // Iterate over the events in the chosen column in the order given,
+ // looking for an event overlapping this interval
+ for (int i = start; i != end && index < 0; i += aDirection) {
+ if (column.iEventArray[i].Overlaps(aInterval)) {
+ index = i;
+ }
+ }
+ }
+ return index;
+}
+
+/*!
+ \brief CalenDayInfo::IsEventSelected
+*/
+bool CalenDayInfo::IsEventSelected() const
+{
+ bool selected(false);
+ if (iSelectedAlldayEvent >= 0) {
+ selected = true;
+ }
+ else
+ if (iSelectedRegion >= 0 && iSelectedColumn < iRegionList[iSelectedRegion].iColumns.count()
+ && iSelectedColumnEventIndex >= 0) {
+ selected = true;
+ }
+ else
+ if (IsExtraSlot(iSelectedSlot) && iSelectedSlot - iFirstUntimedSlot
+ >= iEmptyUntimedSlots) {
+ selected = true;
+ }
+ else {
+ // if no event is selected, the selection slot must be a hour starting slot or an extra slot
+ ASSERT( IsHourStartSlot( iSelectedSlot ) || IsExtraSlot( iSelectedSlot ) );
+ selected = false;
+ }
+ return selected;
+}
+
+/*!
+ \brief CalenDayInfo::IsMultipleEventsSelected
+*/
+bool CalenDayInfo::IsMultipleEventsSelected() const
+{
+ bool isMultiple(false);
+ if (iSelectedAlldayEvent >= 0) {
+ // If an allday event is selected, disregard the value of
+ // iSelectedSlot
+ isMultiple = false;
+ }
+ else
+ if (IsExtraSlot(iSelectedSlot)) {
+ int index = iSelectedSlot - iFirstUntimedSlot - iEmptyUntimedSlots;
+ isMultiple = (index == 0) && iTodoEvents.count() > 1;
+ }
+ return isMultiple;
+}
+
+/*!
+ \brief CalenDayInfo::IsAlldayEventSelected
+*/
+bool CalenDayInfo::IsAlldayEventSelected() const
+{
+ bool selected(false);
+ if (iSelectedAlldayEvent >= 0) {
+ ASSERT( iSelectedAlldayEvent < iAlldayEvents.count() );
+ selected = true;
+ }
+ return selected;
+}
+
+/*!
+ \brief CalenDayInfo::UntimedEvent
+*/
+TCalenInstanceId CalenDayInfo::UntimedEvent(int aIndex)
+{
+ TCalenInstanceId id;
+ if (iTodoEvents.count() > 0 && aIndex == 0) {
+ id = iTodoEvents[0];
+ }
+ else {
+ // If we have one or more todo items, the first slot is used for them
+ // (but not more than one slot)
+ if (iTodoEvents.count() > 0) {
+ aIndex--;
+ }
+
+ if (aIndex >= 0 && aIndex < iUntimedEvents.count()) {
+ id = iUntimedEvents[aIndex];
+ }
+ else {
+ // should not happen
+ User::Invariant();
+ }
+ }
+
+ return id;
+}
+
+/*!
+ \brief CalenDayInfo::AlldayEvent
+*/
+const CalenTimedEventInfo& CalenDayInfo::AlldayEvent(int aIndex)
+{
+ ASSERT( aIndex >= 0 && aIndex < iAlldayEvents.count() );
+ return iAlldayEvents[aIndex];
+}
+
+/*!
+ \brief CalenDayInfo::SelectedEvent
+*/
+TCalenInstanceId CalenDayInfo::SelectedEvent()
+{
+ TCalenInstanceId id;
+ if (iSelectedAlldayEvent >= 0) {
+ ASSERT( iSelectedAlldayEvent < iAlldayEvents.count() );
+ id = iAlldayEvents[iSelectedAlldayEvent].iId;
+ }
+ else
+ if (iSelectedRegion >= 0) {
+ ASSERT( iSelectedRegion < iRegionList.count() );
+
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ if (iSelectedColumn < region.iColumns.count()) {
+ CalenTimeColumn& column = region.iColumns[iSelectedColumn];
+ if (iSelectedColumnEventIndex >= 0 && iSelectedColumnEventIndex
+ < column.iEventArray.count()) {
+ CalenTimedEventInfo& info = column.iEventArray[iSelectedColumnEventIndex];
+ id = info.iId;
+ }
+ else {
+ // should not happen, no event selected in the column
+ User::Invariant();
+ }
+ }
+ else {
+ // should not happen, the empty column was selected
+ User::Invariant();
+ }
+ }
+ else
+ if (IsExtraSlot(iSelectedSlot)) {
+ int index = iSelectedSlot - iFirstUntimedSlot - iEmptyUntimedSlots;
+ id = UntimedEvent(index);
+ }
+ else {
+ // should not happen
+ User::Invariant();
+ }
+
+ return id;
+}
+
+/*!
+ \brief CalenDayInfo::SelectEvent
+ Return KErrNotFound if not found, otherwise KErrNone
+*/
+int CalenDayInfo::SelectEvent(const TCalenInstanceId& aId)
+{
+ // Id can be of allday event, untimed event or other events
+
+ // Look for this event id in all event data structures and set
+ // the state accordingly if it was found
+
+ for (int i(0); i < iAlldayEvents.count(); i++) {
+ TCalenInstanceId id = iAlldayEvents[i].iId;
+ if (id == aId) {
+ iSelectedAlldayEvent = i;
+ iSelectedRegion = KErrNotFound;
+ return KErrNone;
+ }
+ }
+
+ for (int i(0); i < iTodoEvents.count(); i++) {
+ TCalenInstanceId id = iTodoEvents[i];
+ if (id == aId) {
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedRegion = KErrNotFound;
+ iSelectedSlot = iFirstUntimedSlot + iEmptyUntimedSlots;
+ return KErrNone;
+ }
+ }
+
+ for (int i(0); i < iUntimedEvents.count(); i++) {
+ TCalenInstanceId id = iUntimedEvents[i];
+ if (id == aId) {
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedRegion = KErrNotFound;
+ iSelectedSlot = iFirstUntimedSlot + iEmptyUntimedSlots + i;
+ if (iTodoEvents.count() > 0) {
+ iSelectedSlot++;
+ }
+ return KErrNone;
+ }
+ }
+
+ for (int i(0); i < iRegionList.count(); i++) {
+ CalenTimeRegion& region = iRegionList[i];
+ for (int col(0); col < region.iColumns.count(); col++) {
+ for (int ind(0); ind < region.iColumns[col].iEventArray.count(); ind++) {
+ if (region.iColumns[col].iEventArray[ind].iId == aId) {
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedRegion = i;
+ iSelectedColumn = col;
+ iSelectedColumnEventIndex = ind;
+ SetSelectionInEvent(EMoveDirectionDown);
+ return KErrNone;
+ }
+ }
+ }
+ }
+
+ return KErrNotFound;
+}
+
+/*!
+ \brief CalenDayInfo::EnterRegionFromBelow
+*/
+void CalenDayInfo::EnterRegionFromBelow()
+{
+ ASSERT( iSelectedRegion >= 0 && iSelectedRegion < iRegionList.count() );
+ iSelectedColumn = KErrNotFound;
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ int latestEnd = region.iStartSlot;
+ // Look for the column with the latest end
+ for (int i = 0; i < region.iColumns.count(); i++) {
+ CalenTimeColumn& column = region.iColumns[i];
+ ASSERT( column.iEventArray.count()> 0 );
+ if (column.iEndSlot > latestEnd) {
+ // found a column with an event touching the end of the region
+ latestEnd = column.iEndSlot;
+ iSelectedColumn = i;
+ iSelectedColumnEventIndex = column.iEventArray.count() - 1;
+ SetSelectionInEvent(EMoveDirectionUp);
+ }
+ }
+ ASSERT( iSelectedColumn >= 0 );
+}
+
+/*!
+ \brief CalenDayInfo::EnterRegionFromAbove
+*/
+void CalenDayInfo::EnterRegionFromAbove()
+{
+ ASSERT( iSelectedRegion >= 0 && iSelectedRegion < iRegionList.count() );
+ iSelectedColumn = KErrNotFound;
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ int earliestStart = region.iEndSlot;
+ // Look for the column with the earliest start
+ for (int i = 0; i < region.iColumns.count(); i++) {
+ CalenTimeColumn& column = region.iColumns[i];
+ ASSERT( column.iEventArray.count()> 0 );
+ if (column.iStartSlot < earliestStart) {
+ // found a column with an event
+ earliestStart = column.iStartSlot;
+ iSelectedColumn = i;
+ iSelectedColumnEventIndex = 0;
+ SetSelectionInEvent(EMoveDirectionDown);
+ }
+ }
+ ASSERT( iSelectedColumn >= 0 );
+}
+
+/*!
+ \brief CalenDayInfo::NextFocusArea
+ Determines how large area to scan for new events/regions when moving in
+ the given direction. If no events are found in this area, focus an
+ empty slot instead
+*/
+CalenSlotInterval CalenDayInfo::NextFocusArea(const CalenSlotInterval& aInterval, int aDirection)
+{
+ // NOTE: the comments are written with the visual layout in mind.
+ // upwards == up in the display, towards earlier times
+ // downwards == down in the display, towards later times
+ CalenSlotInterval target;
+ target.iEndSlot = 0;
+ target.iStartSlot = 0;
+
+ if (IsExtraSlot(aInterval.iStartSlot)) {
+ // Special case logic for moving within the extra slots.
+
+ // The index within the extra slot area
+ int extraIndex = aInterval.iStartSlot - iFirstUntimedSlot;
+ // Generally, move just one slot at a time in this area
+ int newIndex = extraIndex + aDirection;
+
+ if (newIndex < iEmptyUntimedSlots) {
+ // Moved upwards past the first slot, return
+ // the whole last hour before the untimed slot area
+ target.iEndSlot = iFirstUntimedSlot;
+ target.iStartSlot = target.iEndSlot - iSlotsInHour;
+ }
+ else
+ if (newIndex >= iUntimedSlotCount) {
+ // Moved downwards past the last untimed slot, return
+ // the whole first hour after the untimed slot area
+ target.iStartSlot = iFirstUntimedSlot + iUntimedSlotCount;
+ target.iEndSlot = target.iStartSlot + iSlotsInHour;
+ }
+ else {
+ // Moved normally within the untimed slot area
+ target.iStartSlot = aInterval.iStartSlot + aDirection;
+ target.iEndSlot = target.iStartSlot + 1;
+ }
+ return target;
+ }
+
+ // Helper interval for the whole untimed area
+ CalenSlotInterval untimedInterval;
+ untimedInterval.iStartSlot = iFirstUntimedSlot;
+ untimedInterval.iEndSlot = untimedInterval.iStartSlot + iUntimedSlotCount;
+
+ if (aDirection < 0) {
+ // Moving upwards
+ // Create a target interval of one hour upwards
+ target.iEndSlot = aInterval.iStartSlot;
+ target.iStartSlot = aInterval.iStartSlot - iSlotsInHour;
+
+ if (iUntimedSlotCount > 0 && untimedInterval.Overlaps(target)) {
+ // The target interval overlaps the untimed area
+ if (iUntimedSlotCount > iEmptyUntimedSlots) {
+ // Make the interval start at the last untimed slot
+ target.iStartSlot = untimedInterval.iEndSlot - 1;
+ }
+ else {
+ // Untimed area containing no actual events.
+ // Include one whole hour before the untimed area.
+ target.iStartSlot = iFirstUntimedSlot - iSlotsInHour;
+ }
+ return target;
+ }
+
+ // Round the start slot upwards to an even hour
+ target.iStartSlot = RoundHourUp(target.iStartSlot);
+ }
+ else {
+ // Moving downwards
+ // Create a target interval of one hour downwards
+ target.iStartSlot = aInterval.iEndSlot;
+ target.iEndSlot = aInterval.iEndSlot + iSlotsInHour;
+
+ if (iUntimedSlotCount > 0 && untimedInterval.Overlaps(target)) {
+ // The target interval overlaps the untimed area
+
+ // Assumption: There can't be any regions before the untimed area
+ if (iUntimedSlotCount > iEmptyUntimedSlots) {
+ // Make the interval end at the first untimed slot containing
+ // an event
+ target.iStartSlot = untimedInterval.iStartSlot + iEmptyUntimedSlots;
+ target.iEndSlot = target.iStartSlot + 1;
+ }
+ else {
+ // Untimed area containing no actual events.
+ // Include one whole hour after the untimed area.
+ target.iStartSlot = untimedInterval.iStartSlot + iUntimedSlotCount;
+ target.iEndSlot = target.iStartSlot + iSlotsInHour;
+ }
+ return target;
+ }
+
+ target.iEndSlot = RoundHourDown(target.iEndSlot);
+ }
+
+ return target;
+}
+
+/*!
+ \brief CalenDayInfo::NextEmptyFocusSlot
+ If no events are found in an empty area scanned, focus this slot instead
+*/
+int CalenDayInfo::NextEmptyFocusSlot(const CalenSlotInterval& aInterval, int aDirection)
+{
+ // NOTE: the comments are written with the visual layout in mind.
+ // upwards == up in the display, towards earlier times
+ // downwards == down in the display, towards later times
+
+ int target(0);
+
+ // If the next focus area logic says we should go to an untimed slot,
+ // skip the rest of this method
+ CalenSlotInterval testInterval = NextFocusArea(aInterval, aDirection);
+ if (IsExtraSlot(testInterval.iStartSlot)) {
+ target = testInterval.iStartSlot;
+ }
+ else {
+ if (aDirection < 0) {
+ // Moving upwards, target slot is the start of the area returned by
+ // NextFocusArea. This always is an even hour.
+ target = testInterval.iStartSlot;
+ ASSERT( IsHourStartSlot( target ) );
+ }
+ else {
+ target = testInterval.iStartSlot;
+ if (!IsHourStartSlot(target)) {
+ // If the interval doesn't start on an even hour, round downwards.
+ target = RoundHourDown(target);
+ }
+ }
+ }
+
+ return target;
+}
+
+/*!
+ \brief CalenDayInfo::EmptySelectionInterval
+ Create an interval representation of the current focus area
+*/
+CalenSlotInterval CalenDayInfo::EmptySelectionInterval()
+{
+ CalenSlotInterval target;
+ target.iEndSlot = 0;
+ target.iStartSlot = 0;
+
+ if (IsExtraSlot(iSelectedSlot)) {
+ // Return an interval consisting of one single slot
+ target.iStartSlot = iSelectedSlot;
+ target.iEndSlot = target.iStartSlot + 1;
+ }
+ else {
+ // Round the start slot to an even hour if it isn't.
+ // NOTE: This actually updates the selection state!
+ // Only call this method if no event actually is selected.
+ if (!IsHourStartSlot(iSelectedSlot)) {
+ iSelectedSlot = RoundHourUp(iSelectedSlot);
+ }
+ target.iStartSlot = iSelectedSlot;
+ target.iEndSlot = iSelectedSlot + iSlotsInHour;
+ }
+
+ return target;
+}
+
+/*!
+ \brief CalenDayInfo::SelectedInterval
+*/
+CalenSlotInterval CalenDayInfo::SelectedInterval()
+{
+ CalenSlotInterval selection;
+ selection.iStartSlot = selection.iEndSlot = 0;
+
+ if (iSelectedAlldayEvent >= 0) {
+ selection.iStartSlot = 0;
+ selection.iEndSlot = iSlotsInHour * KCalenHoursInDay + iUntimedSlotCount;
+ }
+ else
+ if (iSelectedRegion >= 0) {
+
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ if (iSelectedColumn < region.iColumns.count()) {
+ CalenTimeColumn& column = region.iColumns[iSelectedColumn];
+ if (iSelectedColumnEventIndex >= 0 && iSelectedColumnEventIndex
+ < column.iEventArray.count()) {
+ CalenTimedEventInfo& info = column.iEventArray[iSelectedColumnEventIndex];
+ // gets only the CalenSlotInterval part from the CalenTimedEventInfo struct
+ selection = info;
+ }
+ }
+ }
+
+ if (selection.IsEmpty()) {
+ // No selection was set in the cases above, no event is selected, thus
+ // use the empty area selection interval instead.
+ selection = EmptySelectionInterval();
+ }
+ return selection;
+}
+
+/*!
+ \brief CalenDayInfo::SetSelectionInRegion
+ Sets selection within a region
+*/
+bool CalenDayInfo::SetSelectionInRegion(int aRegion, int aColumn, int aSlot)
+{
+ bool selected(false);
+ StoreOrigSelection();
+ //validate given values
+ if (aRegion >= 0 && aRegion < iRegionList.count()) {//ASSERT( iSelectedRegion >= 0 && iSelectedRegion < iRegionList.count() );
+ CalenSlotInterval interval;
+ //TODO: round aSlot hour to full hour down????
+ interval.iStartSlot = aSlot;
+ interval.iEndSlot = interval.iStartSlot + 1;
+
+ CalenTimeRegion& region = iRegionList[aRegion];
+ if (region.Overlaps(interval)) {
+ if (aColumn >= 0 && aColumn < region.iColumns.count()) {
+ bool eventFound(false);
+ CalenTimeColumn& column = region.iColumns[aColumn];
+ if (column.Overlaps(interval)) {
+ ASSERT( column.iEventArray.count()> 0 );
+ for (int i = 0; i < column.iEventArray.count(); i++) {
+ CalenTimedEventInfo& event = column.iEventArray[i];
+ if (event.Overlaps(interval)) {
+ iSelectedColumnEventIndex = i;
+
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedRegion = aRegion;
+ iSelectedColumn = aColumn;
+ iSelectedSlot = aSlot;
+ selected = true;
+ eventFound = true;
+ break;
+ }
+
+ }
+ }
+
+ if (!eventFound) {
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedRegion = aRegion;
+ iSelectedColumn = aColumn;
+ iSelectedSlot = aSlot;
+ iSelectedColumnEventIndex = KErrNotFound;
+ selected = true;
+ }
+ }
+ else
+ if (aColumn == iRegionList[aRegion].iColumns.count()) {//empty selection on right selected
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedRegion = aRegion;
+ iSelectedColumn = aColumn;
+ iSelectedSlot = aSlot;
+ iSelectedColumnEventIndex = KErrNotFound;
+ selected = true;
+ }
+ }
+ }
+
+ return selected;
+}
+
+/*!
+ \brief CalenDayInfo::MoveOutFromRegion
+*/
+void CalenDayInfo::MoveOutFromRegion(int aDirection)
+{
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ CalenSlotInterval targetInterval = NextFocusArea(region, aDirection);
+ int next = iSelectedRegion + aDirection;
+ // Check what the next region would be and if we should move into that
+ // or into an empty area
+ if (next >= 0 && next < iRegionList.count()) {
+ if (iRegionList[next].Overlaps(targetInterval)) {
+ iSelectedRegion = next;
+ if (aDirection < 0) {
+ EnterRegionFromBelow();
+ }
+ else {
+ EnterRegionFromAbove();
+ }
+ }
+ else {
+ iSelectedRegion = KErrNotFound;
+ iSelectedSlot = NextEmptyFocusSlot(region, aDirection);
+ }
+ }
+ else {
+ iSelectedRegion = KErrNotFound;
+ iSelectedSlot = NextEmptyFocusSlot(region, aDirection);
+ }
+}
+
+/*!
+ \brief CalenDayInfo::MoveInColumn
+*/
+void CalenDayInfo::MoveInColumn(int aDirection)
+{
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ if (iSelectedColumn < region.iColumns.count()) {
+ CalenTimeColumn& column = region.iColumns[iSelectedColumn];
+ if (iSelectedColumnEventIndex >= 0) {
+ // We currently have an event in a column selected
+ CalenSlotInterval curInterval = column.iEventArray[iSelectedColumnEventIndex];
+ CalenSlotInterval targetInterval = NextFocusArea(curInterval, aDirection);
+
+ int next = iSelectedColumnEventIndex + aDirection;
+ // Check if the target interval overlaps the next event in this column
+ if (next >= 0 && next < column.iEventArray.count()) {
+ if (column.iEventArray[next].Overlaps(targetInterval)) {
+ iSelectedColumnEventIndex = next;
+ SetSelectionInEvent(aDirection);
+ }
+ else {
+ iSelectedColumnEventIndex = KErrNotFound;
+ iSelectedSlot = NextEmptyFocusSlot(curInterval, aDirection);
+ }
+ }
+ else {
+ // There's no next event in this column, focus an empty area instead.
+ iSelectedColumnEventIndex = KErrNotFound;
+ iSelectedSlot = NextEmptyFocusSlot(curInterval, aDirection);
+ }
+ }
+ else {
+ // No event selected in the current column, find the target interval
+ // and check if there's any event there
+ CalenSlotInterval curInterval = EmptySelectionInterval();
+ CalenSlotInterval targetInterval = NextFocusArea(curInterval, aDirection);
+ iSelectedColumnEventIndex = FindEvent(targetInterval, aDirection);
+ if (iSelectedColumnEventIndex >= 0) {
+ SetSelectionInEvent(aDirection);
+ }
+ else {
+ iSelectedSlot = NextEmptyFocusSlot(curInterval, aDirection);
+ }
+ }
+
+ // If the new selection lies outside of the region, move out from the region.
+ CalenSlotInterval selection = SelectedInterval();
+ if (selection.iStartSlot < region.iStartSlot || selection.iEndSlot > region.iEndSlot) {
+ MoveOutFromRegion(aDirection);
+ }
+
+ }
+ else {
+ // The empty column was selected, just move up/down in that column
+ iSelectedSlot = NextEmptyFocusSlot(EmptySelectionInterval(), aDirection);
+
+ // When moving in the empty column, move out from the region only if
+ // the selection moved completely out from the region.
+ CalenSlotInterval selection = SelectedInterval();
+ if (!selection.Overlaps(region)) {
+ // The target selection is completely outside of the current region
+ int next = iSelectedRegion + aDirection;
+ if (next >= 0 && next < iRegionList.count() && iRegionList[next].Overlaps(selection)) {
+ // The target selection overlaps the next region, move into that,
+ // stay within the rightmost empty column
+ iSelectedRegion = next;
+ iSelectedColumn = iRegionList[next].iColumns.count();
+ iSelectedColumnEventIndex = KErrNotFound;
+ }
+ else {
+ // Move out from the current region
+ iSelectedRegion = KErrNotFound;
+ iSelectedColumn = KErrNotFound;
+ iSelectedColumnEventIndex = KErrNotFound;
+ // iSelectedSlot was update above, keep the same value
+ }
+ }
+
+ }
+
+}
+
+/*!
+ \brief CalenDayInfo::MoveInAlldayEvent
+*/
+bool CalenDayInfo::MoveInAlldayEvent(TScrollDirection aDirection)
+{
+ ASSERT( iSelectedAlldayEvent >= 0 );
+ bool moved(true);
+ switch (aDirection) {
+ case EScrollUp: {
+ // don't do anything
+ }
+ break;
+ case EScrollDown: {
+ // don't do anything
+ }
+ break;
+ case EScrollLeft: {
+ if (iSelectedAlldayEvent > 0) {
+ // there are more allday events to the left, select next
+ iSelectedAlldayEvent--;
+ }
+ else {
+ // move to previous day
+ moved = false;
+ }
+ }
+ break;
+ case EScrollRight: {
+ if (iSelectedAlldayEvent < iAlldayEvents.count() - 1) {
+ // there are more allday events to the right, select next
+ iSelectedAlldayEvent++;
+ }
+ else {
+ iSelectedAlldayEvent = KErrNotFound;
+ // find a region to select
+ if (iSelectedRegion >= 0) {
+ // keep using the old selection state
+ }
+ else {
+ // find a new suitable selection
+
+ // if iSelectedSlot was moved to the empty untimed slot area,
+ // move it down to a real slot
+
+ if (iSelectedSlot >= iFirstUntimedSlot && iSelectedSlot < iFirstUntimedSlot
+ + iEmptyUntimedSlots) {
+ iSelectedSlot = iFirstUntimedSlot + iEmptyUntimedSlots;
+ }
+
+ CalenSlotInterval interval = EmptySelectionInterval();
+
+ iSelectedRegion = FindRegion(interval, EMoveDirectionDown);
+ int firstRegion = iSelectedRegion;
+ bool found(false);
+ // Iterate over all regions overlapping this interval, see
+ // if any of them has events in this column
+ while (iSelectedRegion >= 0 && iSelectedRegion < iRegionList.count()
+ && iRegionList[iSelectedRegion].Overlaps(interval) && !found) {
+
+ ASSERT( iSelectedRegion < iRegionList.count() );
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+
+ ASSERT( region.iColumns.count()> 0 );
+ iSelectedColumn = 0;
+ CalenTimeColumn& column = region.iColumns[iSelectedColumn];
+
+ iSelectedColumnEventIndex = FindEvent(interval, EMoveDirectionDown);
+ if (iSelectedColumnEventIndex >= 0) {
+ ASSERT( iSelectedColumnEventIndex < column.iEventArray.count() );
+ // Keep using the old selected slot also here, just
+ // update it to make sure it's within the actual event
+ UpdateSelectionInEvent();
+ found = true;
+ }
+ else {
+ // Check the next region
+ iSelectedRegion++;
+ }
+ }
+
+ if (!found) {
+ iSelectedRegion = firstRegion;
+ iSelectedColumn = 0;
+ iSelectedSlot = interval.iStartSlot;
+ }
+
+ }
+ }
+ }
+ break;
+ default:
+ // Do nothing
+ break;
+ }
+
+ return moved;
+}
+
+/*!
+ \brief CalenDayInfo::MoveBetweenColumns
+*/
+void CalenDayInfo::MoveBetweenColumns(TScrollDirection aDirection)
+{
+ // Moving to another column
+ CalenSlotInterval selection = SelectedInterval();
+ if (IsEventSelected()) {
+ // If moving from an event, just use the selected
+ // slot pos within the event, not the whole event
+ // interval.
+ selection.iStartSlot = iSelectedSlot;
+ selection.iEndSlot = selection.iStartSlot + iSlotsInHour;
+ // Crop the selection to be within the event
+ selection.Intersect(SelectedInterval());
+ }
+
+ switch (aDirection) {
+ case EScrollLeft: {
+ iSelectedColumn--;
+ break;
+ }
+ case EScrollRight: {
+ iSelectedColumn++;
+ break;
+ }
+ default:
+ // Do nothing
+ break;
+ }
+
+ // First try finding events exactly in the selection area
+ iSelectedColumnEventIndex = FindEvent(selection, EMoveDirectionDown);
+ if (iSelectedColumnEventIndex >= 0) {
+ // An event was found in the given interval
+ // Keep using the old selection position, just update it to make
+ // sure it's within the event
+ UpdateSelectionInEvent();
+ }
+ else {
+ // No event found in the interval
+
+ // Expand the interval to even hour endings
+ selection.iStartSlot = RoundHourUp(selection.iStartSlot);
+ selection.iEndSlot = RoundHourDown(selection.iEndSlot);
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ // Crop the selection to the current region
+ selection.Intersect(region);
+
+ // Try again with the possibly larger interval
+ iSelectedColumnEventIndex = FindEvent(selection, EMoveDirectionDown);
+ if (iSelectedColumnEventIndex >= 0) {
+ // An event was found in the given interval
+ // Keep using the old selection position, just update it to make
+ // sure it's within the event
+ UpdateSelectionInEvent();
+ }
+ else {
+ // Still no events found. Select an empty interval if possible.
+
+ if (!IsHourStartSlot(selection.iStartSlot)) {
+ // The starting slot isn't a hour start slot. Rounding directly
+ // would move the interval outside of the region. See if we can
+ // round the starting slot down instead and still be within
+ // the region.
+ int start = RoundHourDown(selection.iStartSlot);
+ if (start + iSlotsInHour <= region.iEndSlot) {
+ // Ok, an empty selection fits within the region.
+ iSelectedSlot = start;
+ }
+ }
+ else
+ if (!IsHourStartSlot(selection.iEndSlot)) {
+ // The ending slot isn't a hour start slot. Rounding directly
+ // could move the interval outside of the region. See if we can
+ // round the upwards instead and still be within
+ // the region.
+ int start = RoundHourUp(selection.iEndSlot - iSlotsInHour);
+ if (start >= region.iStartSlot) {
+ // Ok, an empty selection fits within the region.
+ iSelectedSlot = start;
+ }
+ }
+
+ // Make sure the selected interval really is a valid
+ // empty interval selection (this forces rounding if needed)
+ selection = EmptySelectionInterval();
+
+ // Check the final target interval once more.
+ iSelectedColumnEventIndex = FindEvent(selection, EMoveDirectionDown);
+ if (iSelectedColumnEventIndex >= 0) {
+ // An event was found in the given interval
+ UpdateSelectionInEvent();
+ }
+ else {
+ // No even found, use the empty selection
+
+ // If not within the region, move out
+ if (selection.iStartSlot < region.iStartSlot) {
+ MoveOutFromRegion(EMoveDirectionUp);
+ }
+ else
+ if (selection.iEndSlot > region.iEndSlot) {
+ MoveOutFromRegion(EMoveDirectionDown);
+ }
+ }
+ }
+
+ }
+
+}
+
+/*!
+ \brief CalenDayInfo::MoveInRegion
+*/
+bool CalenDayInfo::MoveInRegion(TScrollDirection aDirection)
+{
+ ASSERT( iSelectedAlldayEvent < 0 && iSelectedRegion >= 0 );
+ bool moved(true);
+ switch (aDirection) {
+ case EScrollUp: {
+ MoveInColumn(EMoveDirectionUp);
+ }
+ break;
+ case EScrollDown: {
+ MoveInColumn(EMoveDirectionDown);
+ }
+ break;
+
+ case EScrollLeft: {
+ ASSERT( iSelectedRegion < iRegionList.count() );
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ ASSERT( iSelectedColumn >= 0 && iSelectedColumn <= region.iColumns.count() );
+ if (iSelectedColumn == 0) {
+ if (iAlldayEvents.count() > 0) {
+ // remember the last selection state
+ iSelectedAlldayEvent = iAlldayEvents.count() - 1;
+ }
+ else {
+ // move to previous day
+ moved = false;
+ }
+ }
+ else {
+ MoveBetweenColumns(aDirection);
+ }
+ }
+ break;
+
+ case EScrollRight: {
+ ASSERT( iSelectedRegion < iRegionList.count() );
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ if (iSelectedColumn < region.iColumns.count() - 1) {
+ MoveBetweenColumns(aDirection);
+ }
+ else
+ if (iSelectedColumn == region.iColumns.count() - 1) {
+ // In the last column, moving to the empty column
+ iSelectedColumn++;
+ iSelectedColumnEventIndex = KErrNotFound;
+
+ // Round the selection to an empty interval
+ EmptySelectionInterval();
+ }
+ else {
+ // in the last, empty column
+ // move to next day
+ moved = false;
+ }
+ }
+ break;
+
+ default:
+ // Do nothing
+ break;
+ }
+
+ return moved;
+}
+
+/*!
+ \brief CalenDayInfo::MoveInEmptyArea
+*/
+bool CalenDayInfo::MoveInEmptyArea(TScrollDirection aDirection)
+{
+ ASSERT( iSelectedAlldayEvent < 0 && iSelectedRegion < 0 );
+ bool moved(true);
+ switch (aDirection) {
+ case EScrollUp: {
+ CalenSlotInterval curInterval = EmptySelectionInterval();
+ CalenSlotInterval targetInterval = NextFocusArea(curInterval, EMoveDirectionUp);
+ iSelectedRegion = FindRegion(targetInterval, EMoveDirectionUp);
+ if (iSelectedRegion >= 0) {
+ EnterRegionFromBelow();
+ }
+ else {
+ iSelectedSlot = NextEmptyFocusSlot(curInterval, EMoveDirectionUp);
+ }
+
+ }
+ break;
+ case EScrollDown: {
+ CalenSlotInterval curInterval = EmptySelectionInterval();
+ CalenSlotInterval targetInterval = NextFocusArea(curInterval, EMoveDirectionDown);
+ iSelectedRegion = FindRegion(targetInterval, EMoveDirectionDown);
+ if (iSelectedRegion >= 0) {
+ EnterRegionFromAbove();
+ }
+ else {
+ iSelectedSlot = NextEmptyFocusSlot(curInterval, EMoveDirectionDown);
+ }
+ }
+ break;
+ case EScrollLeft: {
+ if (iAlldayEvents.count() > 0) {
+ iSelectedAlldayEvent = iAlldayEvents.count() - 1;
+ }
+ else {
+ // move to previous day
+ moved = false;
+ }
+ }
+ break;
+ case EScrollRight: {
+ // move to next day
+ moved = false;
+ }
+ break;
+ default:
+ // Do nothing
+ break;
+ }
+
+ return moved;
+}
+
+/*!
+ \brief CalenDayInfo::MoveSelection
+*/
+bool CalenDayInfo::MoveSelection(TScrollDirection aDirection)
+{
+ bool moved(true);
+ StoreOrigSelection();
+ if (iSelectedAlldayEvent >= 0) {
+ // focused on an allday event
+ moved = MoveInAlldayEvent(aDirection);
+ }
+ else
+ if (iSelectedRegion >= 0) {
+ // focused on some event region
+ moved = MoveInRegion(aDirection);
+ }
+ else {
+ // focused on an empty, plain area
+ moved = MoveInEmptyArea(aDirection);
+ }
+ if (!ValidateSelection()) {
+ moved = false;
+ }
+ return moved;
+}
+
+/*!
+ \brief CalenDayInfo::MoveSelectionInEvent
+*/
+void CalenDayInfo::MoveSelectionInEvent(TScrollDirection aDirection)
+{
+ ASSERT( IsEventSelected() );
+
+ switch (aDirection) {
+ case EScrollUp: {
+ iSelectedSlot -= KFSCalSlotsInHour;
+ }
+ break;
+ case EScrollDown: {
+ iSelectedSlot += KFSCalSlotsInHour;
+ }
+ break;
+
+ default:
+ // Do nothing
+ break;
+ }
+
+ UpdateSelectionInEvent();
+
+ if (iSelectedAlldayEvent >= 0) {
+ // if an allday event is selected, invalidate
+ // the old region/event selection
+ iSelectedRegion = KErrNotFound;
+ }
+}
+
+/*!
+ \brief CalenDayInfo::UpdateSelectionInEvent
+*/
+void CalenDayInfo::UpdateSelectionInEvent()
+{
+ ASSERT( IsEventSelected() );
+ CalenSlotInterval event = SelectedInterval();
+
+ if (iSelectedSlot < event.iStartSlot) {
+ iSelectedSlot = event.iStartSlot;
+ }
+ if (iSelectedSlot >= event.iEndSlot) {
+ iSelectedSlot = event.iEndSlot - 1;
+ }
+
+}
+
+/*!
+ \brief CalenDayInfo::SetSelectionInEvent
+*/
+void CalenDayInfo::SetSelectionInEvent(int aDirection)
+{
+ CalenSlotInterval event = SelectedInterval();
+ if (aDirection > 0) {
+ iSelectedSlot = event.iStartSlot;
+ }
+ else {
+ iSelectedSlot = event.iEndSlot - 1;
+ }
+}
+
+/*!
+ \brief CalenDayInfo::StoreOrigSelection
+*/
+void CalenDayInfo::StoreOrigSelection()
+{
+ iOrigSelectedAlldayEvent = iSelectedAlldayEvent;
+ iOrigSelectedRegion = iSelectedRegion;
+ iOrigSelectedColumn = iSelectedColumn;
+ iOrigSelectedSlot = iSelectedSlot;
+ iOrigSelectedColumnEventIndex = iSelectedColumnEventIndex;
+}
+
+/*!
+ \brief CalenDayInfo::ValidateSelection
+*/
+bool CalenDayInfo::ValidateSelection()
+{
+ bool validate(true);
+ if (iSelectedSlot < 0 || iSelectedSlot >= iSlotsInHour * KCalenHoursInDay + iUntimedSlotCount) {
+ // tried to move outside of the day
+ // revert to the original coords
+ iSelectedAlldayEvent = iOrigSelectedAlldayEvent;
+ iSelectedRegion = iOrigSelectedRegion;
+ iSelectedColumn = iOrigSelectedColumn;
+ iSelectedSlot = iOrigSelectedSlot;
+ iSelectedColumnEventIndex = iOrigSelectedColumnEventIndex;
+ validate = false;
+ }
+ return validate;
+}
+
+/*!
+ \brief CalenDayInfo::SelectSlot
+*/
+void CalenDayInfo::SelectSlot(int aSlot)
+{
+ // Check for special case: empty untimed slot is selected
+ if (aSlot >= iFirstUntimedSlot && aSlot < iFirstUntimedSlot + iEmptyUntimedSlots) {
+ aSlot = iFirstUntimedSlot + iEmptyUntimedSlots;
+ }
+
+ iSelectedAlldayEvent = KErrNotFound;
+ iSelectedSlot = aSlot;
+ CalenSlotInterval interval = EmptySelectionInterval();
+ iSelectedRegion = FindRegion(interval, EMoveDirectionDown);
+ if (iSelectedRegion >= 0) {
+ CalenTimeRegion& region = iRegionList[iSelectedRegion];
+ int regCount(region.iColumns.count());
+ for (int i = 0; i < regCount; i++) {
+ CalenTimeColumn& column = region.iColumns[i];
+ int colCount(column.iEventArray.count());
+ for (int j = 0; j < colCount; j++) {
+ if (column.iEventArray[j].Overlaps(interval)) {
+ iSelectedColumn = i;
+ iSelectedColumnEventIndex = j;
+ iSelectedSlot = aSlot;
+ UpdateSelectionInEvent();
+ return;
+ }
+ }
+ }
+ // Regions can have empty areas where there aren't any events,
+ // due to rounding of the ends of the region to whole hours.
+ // A region cannot, however, have a empty complete whole hour.
+ // Therefore, this cannot occur.
+ User::Invariant();
+ }
+}
+
+/*!
+ \brief CalenDayInfo::RegionList
+*/
+const QList<CalenTimeRegion>& CalenDayInfo::RegionList() const
+{
+ return iRegionList;
+}
+
+/*!
+ \brief CalenDayInfo::GetEventIntervals
+*/
+void CalenDayInfo::GetEventIntervals(QList<CalenEventInterval>& aArray) const
+{
+ int regCount(iRegionList.count());
+ for (int i = 0; i < regCount; i++) {
+ const CalenTimeRegion& region = iRegionList[i];
+ for (int j = 0; j < region.iIntervals.count(); j++) {
+ aArray.append(region.iIntervals[j]);
+ }
+ }
+}
+
+/*!
+ \brief CalenDayInfo::InsertUntimedEventL
+*/
+/*
+void CalenDayInfo::InsertUntimedEventL(const CCalInstance& aInstance)
+{
+ if (CalenAgendaUtils::IsTimedEntryL(aInstance.Entry().EntryTypeL())) {
+ // timed entry added as untimed event
+ User::Invariant();
+ }
+
+ TCalenInstanceId id = TCalenInstanceId::CreateL(aInstance);
+ InsertUntimedEvent(aInstance.Entry().EntryTypeL(), id);
+}
+*/
+
+/*!
+ \brief CalenDayInfo::InsertUntimedEvent
+*/
+void CalenDayInfo::InsertUntimedEvent(AgendaEntry::Type aType, const TCalenInstanceId& aId)
+{
+ if (aType == AgendaEntry::TypeTodo) {
+ iTodoEvents.append(aId);
+ }
+ else {
+ iUntimedEvents.append(aId);
+ }
+}
+
+/*!
+ \brief CalenDayInfo::SuggestedUntimedSlotPos
+*/
+int CalenDayInfo::SuggestedUntimedSlotPos()
+{
+ int slot = KFSCalStartingHour * iSlotsInHour;
+ if (iRegionList.count() > 0) {
+ CalenTimeRegion& region = iRegionList[0];
+ if (region.iStartSlot < slot) {
+ slot = RoundHourUp(region.iStartSlot);
+ }
+ }
+ return slot;
+}
+
+/*!
+ \brief CalenDayInfo::NeededUntimedSlotCount
+*/
+int CalenDayInfo::NeededUntimedSlotCount()
+{
+ int count = iUntimedEvents.count();
+ if (iTodoEvents.count() > 0) {
+ count++;
+ }
+ return count;
+}
+
+/*!
+ \brief CalenDayInfo::NeededUntimedSlotCount
+*/
+int CalenDayInfo::UpdateUntimedPos(int aSlot, int aUntimedCount)
+{
+ int newValue = NeededUntimedSlotCount();
+
+ // If this method is called many times, first undo the previous modifications
+ int regCount(iRegionList.count());
+ for (int i = 0; i < regCount; i++) {
+ iRegionList[i].AddOffset(-iUntimedSlotCount, iFirstUntimedSlot);
+ }
+ if (iSelectedSlot >= iFirstUntimedSlot) {
+ iSelectedSlot -= iUntimedSlotCount;
+ }
+
+ // Reset the untimed slot count
+ iUntimedSlotCount = 0;
+
+ // Get the default values
+ iFirstUntimedSlot = SuggestedUntimedSlotPos();
+ iUntimedSlotCount = newValue;
+
+ // If parameters were given, use them instead of the defaults
+ if (aSlot >= 0) {
+ ASSERT( aSlot <= iFirstUntimedSlot );
+ ASSERT( iUntimedSlotCount <= aUntimedCount );
+
+ iFirstUntimedSlot = aSlot;
+ iUntimedSlotCount = aUntimedCount;
+ }
+
+ iEmptyUntimedSlots = iUntimedSlotCount - NeededUntimedSlotCount();
+
+ // Add the new offset to all regions and update the selected slot
+ regCount = iRegionList.count();
+ for (int i = 0; i < regCount; i++) {
+ iRegionList[i].AddOffset(iUntimedSlotCount, iFirstUntimedSlot);
+ }
+ if (iSelectedSlot >= iFirstUntimedSlot) {
+ iSelectedSlot += iUntimedSlotCount;
+ }
+ int eventCount(iAlldayEvents.count());
+ for (int i = 0; i < eventCount; i++) {
+ iAlldayEvents[i].iEndSlot = iSlotsInHour * KCalenHoursInDay + iUntimedSlotCount;
+ }
+
+ // Do rounding of the end of the last region. This should be done when no
+ // more events will be added, but there's no real harm if new events are
+ // added after this.
+ if (iRegionList.count() > 0) {
+ // Round the end of the last region down
+ CalenTimeRegion& lastRegion = iRegionList[iRegionList.count() - 1];
+ lastRegion.iEndSlot = RoundHourDown(lastRegion.iEndSlot);
+ }
+
+ return iFirstUntimedSlot;
+}
+
+/*!
+ \brief Returns the index of the first occupied slot
+*/
+int CalenDayInfo::FirstOccupiedSlot()
+{
+
+ int firstNonemptySlot(KErrNotFound);
+
+ if (iUntimedSlotCount > 0) {
+ firstNonemptySlot = iFirstUntimedSlot;
+ }
+ else {
+ if (iRegionList.count() > 0) {
+ CalenTimeRegion& region = iRegionList[0];
+ firstNonemptySlot = region.iStartSlot;
+ }
+ }
+
+ return firstNonemptySlot;
+}
+
+/*!
+ \brief Returns the index of the last occupied slot
+*/
+int CalenDayInfo::LastOccupiedSlot()
+{
+ int lastNonemptySlot(KErrNotFound);
+ if (iRegionList.count() > 0) {
+ int lastIndex = iRegionList.count() - 1;
+ CalenTimeRegion& region = iRegionList[lastIndex];
+ lastNonemptySlot = region.iEndSlot;
+ }
+ else {
+ if (iUntimedSlotCount > 0) {
+ lastNonemptySlot = iFirstUntimedSlot + iUntimedSlotCount - 1;
+ }
+ }
+ return lastNonemptySlot;
+}
+
+/*!
+ \brief Returns the index of the earliest end slot
+*/
+int CalenDayInfo::EarliestEndSlot()
+{
+ int earliestEndSlot(KErrNotFound);
+ int untimedEventCount = iUntimedSlotCount - iEmptyUntimedSlots;
+ if (untimedEventCount > 0) {
+ earliestEndSlot = iFirstUntimedSlot + iEmptyUntimedSlots;
+ // add 1, since end slot is actually the one that is right after..
+ earliestEndSlot++;
+ }
+ else {
+ if (iRegionList.count() > 0) {
+ earliestEndSlot = iEarliestEndSlot + iEmptyUntimedSlots;
+ }
+ }
+ return earliestEndSlot;
+}
+
+/*!
+ \brief Returns the index of the last start slot
+*/
+int CalenDayInfo::LastStartSlot()
+{
+ int lastStartSlot(KErrNotFound);
+
+ if (iRegionList.count() > 0) {
+ lastStartSlot = iLastStartSlot + iUntimedSlotCount;
+ }
+ else {
+ if (iUntimedSlotCount - iEmptyUntimedSlots > 0) {
+ lastStartSlot = iFirstUntimedSlot + iUntimedSlotCount - 1;
+ }
+ }
+ return lastStartSlot;
+}
+
+/*!
+ \brief Returns the index of a slot where this event should start drawing,
+ based on the start time
+*/
+int CalenDayInfo::SlotIndexForStartTime(QDateTime aStartTime)
+{
+ // For example, 1/2 hour accuracy (iSlotsInHour == 2):
+ // Start drawing with the previus half hour: 9:15 -> 9:00, 9:59-> 9:30.
+
+
+ // TDateTime dt = aStartTime.DateTime();
+ // int minutes = dt.Minute();
+ // int hours = dt.Hour();
+ int minutes = aStartTime.time().minute();//dt.Minute();
+ int hours = aStartTime.time().hour();//dt.Hour();
+
+ // calculate index based on the hour.
+ int slotIndex = hours * iSlotsInHour;
+
+ switch (iSlotsInHour) {
+ case EOne: // do nothing
+ break;
+ case ETwo: {
+ if (minutes >= 30) {
+ slotIndex++;
+ }
+ }
+ break;
+ case EThree: {
+ if (minutes >= 20) {
+ slotIndex++;
+ }
+ if (minutes >= 40) {
+ slotIndex++;
+ }
+ }
+ break;
+ case EFour: // followthrough
+ default: {
+ if (minutes >= 15) {
+ slotIndex++;
+ }
+ if (minutes >= 30) {
+ slotIndex++;
+ }
+ if (minutes >= 45) {
+ slotIndex++;
+ }
+
+ }
+ }
+
+ if (slotIndex >= iFirstUntimedSlot) {
+ slotIndex += iUntimedSlotCount;
+ }
+ return slotIndex;
+}
+
+/*!
+ \brief Returns the index of a slot where this event should end drawing,
+ based on the end time
+*/
+int CalenDayInfo::SlotIndexForEndTime(QDateTime aEndTime)
+{
+ // For example, 1/2 hour accuracy (iSlotsInHour == 2):
+ // End drawing with the next half hour: 9:10 -> 9:30, 9:59-> 10:00.
+
+ // TDateTime dt = aEndTime.DateTime();
+ // int minutes = dt.Minute();
+ // int hours = dt.Hour();
+ int minutes = aEndTime.time().minute();
+ int hours = aEndTime.time().hour();
+
+ // calculate index based on the hour.
+ int slotIndex = hours * iSlotsInHour;
+
+ switch (iSlotsInHour) {
+ case EOne: {
+ if (minutes > 0) {
+ slotIndex++;
+ }
+ }
+
+ break;
+ case ETwo: {
+ if (minutes > 0) {
+ slotIndex++;
+ }
+ if (minutes > 30) {
+ slotIndex++;
+ }
+ }
+ break;
+ case EThree: {
+ if (minutes > 0) {
+ slotIndex++;
+ }
+ if (minutes > 20) {
+ slotIndex++;
+ }
+ if (minutes > 40) {
+ slotIndex++;
+ }
+ }
+ break;
+ case EFour: // followthrough
+ default: {
+ if (minutes > 0) {
+ slotIndex++;
+ }
+
+ if (minutes > 15) {
+ slotIndex++;
+ }
+ if (minutes > 30) {
+ slotIndex++;
+ }
+ if (minutes > 45) {
+ slotIndex++;
+ }
+
+ }
+ }
+
+ if (slotIndex >= iFirstUntimedSlot) {
+ slotIndex += iUntimedSlotCount;
+ }
+
+ return slotIndex;
+
+}
+
+/*!
+ \brief CalenDayInfo::IsHourStartSlot
+*/
+bool CalenDayInfo::IsHourStartSlot(const int& aSlotIndex) const
+{
+ bool isHourStartSlot(false);
+ if (IsExtraSlot(aSlotIndex)) {
+ isHourStartSlot = false;
+ }
+ else {
+ int hourIndex(aSlotIndex);
+ if (aSlotIndex >= iFirstUntimedSlot + iUntimedSlotCount) {
+ hourIndex -= iUntimedSlotCount;
+ }
+ int hour = hourIndex / iSlotsInHour;
+ int startIndOfHour = hour * iSlotsInHour;
+ if (hourIndex - startIndOfHour > 0) {
+ isHourStartSlot = false;
+ }
+ else {
+ isHourStartSlot = true;
+ }
+ }
+ return isHourStartSlot;
+
+}
+
+/*!
+ \brief CalenDayInfo::IsExtraSlot
+*/
+bool CalenDayInfo::IsExtraSlot(const int& aSlotIndex) const
+{
+ return (aSlotIndex >= iFirstUntimedSlot) && (aSlotIndex < (iFirstUntimedSlot
+ + iUntimedSlotCount));
+}
+
+/*!
+ \brief CalenDayInfo::HourFromSlotIndex
+ Returns the corresponding hour, or KErrNone if index is not hour slot index
+*/
+int CalenDayInfo::HourFromSlotIndex(const int& aSlotInd) const
+{
+
+ int hour(KErrNotFound);
+
+ if (!IsExtraSlot(aSlotInd)) {
+
+ if (aSlotInd < 0) {
+ // round downwards, to the previous starting hour
+ // e.g. iSlotsInHour = 2, aSlotInd = -1, hour = -1,
+ // which by SlotIndexFromHour corresponds to slot -2
+ hour = (aSlotInd - iSlotsInHour + 1) / iSlotsInHour;
+ }
+ else
+ if (aSlotInd < iFirstUntimedSlot) {
+ hour = aSlotInd / iSlotsInHour;
+ }
+ else
+ if (aSlotInd >= iFirstUntimedSlot + iUntimedSlotCount) {
+ hour = (aSlotInd - iUntimedSlotCount) / iSlotsInHour;
+ }
+ }
+ return hour;
+}
+
+/*!
+ \brief CalenDayInfo::SlotIndexFromHour
+ Returns the corresponding hour, or KErrNone if index is not hour slot index
+*/
+int CalenDayInfo::SlotIndexFromHour(int aHour)
+{
+
+ int slotIndex(KErrNotFound);
+
+ if (aHour >= iFirstUntimedSlot / iSlotsInHour) {
+ slotIndex = aHour * iSlotsInHour + iUntimedSlotCount;
+ }
+ else {
+ slotIndex = aHour * iSlotsInHour;
+ }
+
+ return slotIndex;
+}
+
+/*!
+ \brief CalenDayInfo::RoundHourUp
+ Rounds the slot number up (towards earlier hours) to an even hour
+*/
+int CalenDayInfo::RoundHourUp(int aSlot)
+{
+ if (!IsExtraSlot(aSlot)) {
+ aSlot = SlotIndexFromHour(HourFromSlotIndex(aSlot));
+ }
+ return aSlot;
+}
+
+/*!
+ \brief CalenDayInfo::RoundHourDown
+ Rounds the slot number down (towards later hours) to an even hour
+*/
+int CalenDayInfo::RoundHourDown(int aSlot)
+{
+ if (!IsExtraSlot(aSlot) && !IsHourStartSlot(aSlot)) {
+ aSlot = SlotIndexFromHour(HourFromSlotIndex(aSlot + iSlotsInHour));
+ }
+ return aSlot;
+}
+
+/*!
+ \brief CalenSlotInterval::Overlaps
+*/
+bool CalenSlotInterval::Overlaps(const CalenSlotInterval& aInterval) const
+{
+ return aInterval.iStartSlot < iEndSlot && aInterval.iEndSlot > iStartSlot;
+}
+
+/*!
+ \brief CalenSlotInterval::AddOffset
+*/
+void CalenSlotInterval::AddOffset(int aOffset, int aPos)
+{
+ if (iStartSlot >= aPos) {
+ iStartSlot += aOffset;
+ }
+ if (iEndSlot >= aPos) {
+ iEndSlot += aOffset;
+ }
+}
+
+/*!
+ \brief CalenSlotInterval::Union
+*/
+void CalenSlotInterval::Union(const CalenSlotInterval& aInterval)
+{
+ if (!aInterval.IsEmpty()) {
+ iStartSlot = Min(iStartSlot, aInterval.iStartSlot);
+ iEndSlot = Max(iEndSlot, aInterval.iEndSlot);
+ }
+}
+
+/*!
+ \brief CalenSlotInterval::Adjacent
+*/
+bool CalenSlotInterval::Adjacent(const CalenSlotInterval& aInterval) const
+{
+ bool adjacent(false);
+ if (Overlaps(aInterval)) {
+ adjacent = true;
+ }
+ else {
+ adjacent = iStartSlot == aInterval.iEndSlot || iEndSlot == aInterval.iStartSlot;
+ }
+ return adjacent;
+}
+
+/*!
+ \brief CalenSlotInterval::IsEmpty
+*/
+bool CalenSlotInterval::IsEmpty() const
+{
+ return iStartSlot >= iEndSlot;
+}
+
+/*!
+ \brief CalenSlotInterval::Intersect
+*/
+void CalenSlotInterval::Intersect(const CalenSlotInterval& aInterval)
+{
+ if (aInterval.IsEmpty()) {
+ iEndSlot = iStartSlot;
+ }
+ else {
+ iStartSlot = Max(iStartSlot, aInterval.iStartSlot);
+ iEndSlot = Min(iEndSlot, aInterval.iEndSlot);
+ }
+}
+
+/*!
+ \brief CalenSlotInterval::Subtract
+*/
+void CalenSlotInterval::Subtract(const CalenSlotInterval& aInterval, CalenSlotInterval& aSecondPart)
+{
+ aSecondPart.iStartSlot = aSecondPart.iEndSlot = 0;
+ if (!aInterval.IsEmpty() && Overlaps(aInterval)) {
+ if (aInterval.iStartSlot <= iStartSlot) {
+ iStartSlot = aInterval.iEndSlot;
+ }
+ else
+ if (aInterval.iEndSlot >= iEndSlot) {
+ iEndSlot = aInterval.iStartSlot;
+ }
+ else {
+ aSecondPart.iStartSlot = aInterval.iEndSlot;
+ aSecondPart.iEndSlot = iEndSlot;
+ iEndSlot = aInterval.iStartSlot;
+ }
+ }
+}
+
+/*!
+ \brief CalenSlotInterval::operator>
+*/
+bool CalenSlotInterval::operator>(const CalenSlotInterval& aInterval) const
+{
+ return iStartSlot > aInterval.iStartSlot;
+}
+
+/*!
+ \brief CalenTimeColumn::Close
+*/
+void CalenTimeColumn::Close()
+{
+ iEventArray.clear();
+}
+
+/*!
+ \brief CalenTimeColumn::AddEvent
+*/
+void CalenTimeColumn::AddEvent(const CalenTimedEventInfo& aEvent)
+{
+ ASSERT( aEvent.iStartSlot < aEvent.iEndSlot );
+ ASSERT( CanFitEvent( aEvent ) );
+
+ if (iEventArray.count() == 0) {
+ iStartSlot = aEvent.iStartSlot;
+ }
+ iEndSlot = aEvent.iEndSlot;
+ iEventArray.append(aEvent);
+}
+
+/*!
+ \brief CalenTimeColumn::CanFitEvent
+*/
+bool CalenTimeColumn::CanFitEvent(const CalenTimedEventInfo& aEvent)
+{
+ return (aEvent.iStartSlot >= iEndSlot) || (iEventArray.count() == 0);
+}
+
+/*!
+ \brief CalenTimeColumn::ContainsEvent
+*/
+bool CalenTimeColumn::ContainsEvent(const TCalenInstanceId& aId)
+{
+ bool contains(false);
+ int eventCount(iEventArray.count());
+ for (int i = 0; i < eventCount && !contains; i++) {
+ if (iEventArray[i].iId == aId) {
+ contains = true;
+ }
+ }
+ return contains;
+}
+
+/*!
+ \brief CalenTimeColumn::AddOffset
+*/
+void CalenTimeColumn::AddOffset(int aOffset, int aPos)
+{
+ if (aOffset != 0) {
+ CalenSlotInterval::AddOffset(aOffset, aPos);
+ int eventCount(iEventArray.count());
+ for (int i = 0; i < eventCount; i++) {
+ iEventArray[i].AddOffset(aOffset, aPos);
+ }
+ }
+}
+
+/*!
+ \brief CalenTimeRegion::Close
+*/
+void CalenTimeRegion::Close()
+{
+ int colCount(iColumns.count());
+ for (int i = 0; i < colCount; i++) {
+ iColumns[i].Close();
+ }
+ iColumns.clear();
+ iIntervals.clear();
+}
+
+/*!
+ \brief CalenTimeRegion::Overlaps
+*/
+bool CalenTimeRegion::Overlaps(const CalenSlotInterval& aInterval) const
+{
+ // the base class implementation would be ok, but we might want the assertion here
+ ASSERT( iColumns.count()> 0 );
+ return CalenSlotInterval::Overlaps(aInterval);
+}
+
+/*!
+ \brief CalenTimeRegion::AddOffset
+*/
+void CalenTimeRegion::AddOffset(int aOffset, int aPos)
+{
+ if (aOffset != 0) {
+ CalenSlotInterval::AddOffset(aOffset, aPos);
+ int colCount(iColumns.count());
+ for (int i = 0; i < colCount; i++) {
+ iColumns[i].AddOffset(aOffset, aPos);
+ }
+ int intervalCount(iIntervals.count());
+ for (int i = 0; i < intervalCount; i++) {
+ iIntervals[i].AddOffset(aOffset, aPos);
+ }
+ }
+
+}
+
+/*!
+ \brief CalenTimeRegion::AddEvent
+*/
+void CalenTimeRegion::AddEvent(const CalenTimedEventInfo& aEvent)
+{
+ if (iColumns.count() == 0) {
+ // This is the first event added to this region
+ iStartSlot = aEvent.iStartSlot;
+ iEndSlot = aEvent.iEndSlot;
+ }
+ else {
+ // Check that the events actually are added in the correct order
+ ASSERT( aEvent.iStartSlot >= iStartSlot );
+ ASSERT( aEvent.iStartSlot < iEndSlot );
+
+ if (aEvent.iEndSlot > iEndSlot) {
+ iEndSlot = aEvent.iEndSlot;
+ }
+ }
+
+ AddInterval(aEvent);
+
+ // If the event fits in one of the existing columns, add it to that one
+ bool added(false);
+ int colCount(iColumns.count());
+ for (int i = 0; i < colCount && !added; i++) {
+ if (iColumns[i].CanFitEvent(aEvent)) {
+ iColumns[i].AddEvent(aEvent);
+ added = true;
+ }
+ }
+
+ if (!added) {
+ // otherwise create a new column for it
+ iColumns.append(CalenTimeColumn());
+ iColumns[iColumns.count() - 1].AddEvent(aEvent);
+ }
+}
+
+/*!
+ \brief CalenTimeRegion::AddInterval
+*/
+void CalenTimeRegion::AddInterval(const CalenTimedEventInfo& aEvent)
+{
+ /*
+ * Here are a few examples of different possible cases for this method.
+ * The first picture of each example shows the initial situation in the
+ * array, and the new event to be added. The transformations performed
+ * are shown with a few intermediate steps.
+ *
+ * nO = newOverlap, nE = newEvent
+ *
+ * Example one:
+ *
+ * ------------------
+ * | newEvent |
+ * --------------------------------
+ * ... | lastOverlap | tail |
+ * --------------------------
+ *
+ * --------------
+ * | newEvent |
+ * --------------------------------
+ * ... | lastOverlap | tail |
+ * --------------------------
+ *
+ * --------------
+ * | nO | nE |
+ * --------------------------------
+ * ... | lastOverlap | tail |
+ * --------------------------
+ *
+ * Result:
+ * --------------------------------
+ * ... | lastOverlap | nE |
+ * --------------------------------
+ *
+ *
+ * Example two:
+ * ------------------
+ * | newEvent |
+ * -------------------------------------------
+ * ... | lastOverlap | tail |
+ * -------------------------------
+ *
+ * ------------------
+ * | nO | newEvent |
+ * -------------------------------------------
+ * ... | lastOverlap | tail |
+ * -------------------------------
+ *
+ * Result:
+ * -------------------------------------------
+ * ... | lastOverlap | tail | nO | newEvent |
+ * -------------------------------------------
+ *
+ *
+ * Example three:
+ * --------------
+ * | newEvent |
+ * -----------------------------------------------------
+ * ... | lastOverlap | tail |
+ * -----------------------------------------------------
+ *
+ * --------------
+ * | newOverlap |
+ * -----------------------------------------------------
+ * ... | lastOverlap | tail |
+ * -----------------------------------------------------
+ *
+ * --------------
+ * | newOverlap |
+ * -----------------------------------------------------
+ * ... | lastOverlap | tail | | tailPart2 |
+ * -----------------------------------------------------
+ *
+ * Result:
+ * -----------------------------------------------------
+ * ... | lastOverlap | tail | newOverlap | tailPart2 |
+ * -----------------------------------------------------
+ */
+
+ // Fill out the new event
+ CalenEventInterval newEvent;
+ newEvent.iStartSlot = aEvent.iStartSlot;
+ newEvent.iEndSlot = aEvent.iEndSlot;
+ newEvent.iStatus = aEvent.iStatus;
+ // newEvent.iReplicationStatus = aEvent.iReplicationStatus;
+ newEvent.iOverlap = false;
+
+ // a pointer to the last interval which is an overlap interval
+ CalenEventInterval* lastOverlap = NULL;
+ // If nonempty, this is the last interval after the last overlap
+ CalenEventInterval tail;
+ tail.iStartSlot = tail.iEndSlot = 0;
+
+ // Find lastOverlap and tail.
+ if (iIntervals.count() >= 1) {
+ // lastInterval is a pointer to the last interval in the array
+ CalenEventInterval* lastInterval = &iIntervals[iIntervals.count() - 1];
+
+ // If this is an overlap interval, we haven't got any tail.
+ if (lastInterval->iOverlap) {
+ lastOverlap = lastInterval;
+ }
+ else {
+ tail = *lastInterval;
+ }
+
+ // If there's at least two intervals, and the last one wasn't an overlap,
+ // the second last one must be an overlap.
+ if (iIntervals.count() >= 2 && !lastOverlap) {
+ lastOverlap = &iIntervals[iIntervals.count() - 2];
+ ASSERT( lastOverlap->iOverlap );
+ }
+ }
+
+ // If we got a tail, remove it from the array (it will be readded
+ // at the end if needed)
+ if (!tail.IsEmpty()) {
+ iIntervals.removeAt(iIntervals.count() - 1);
+ }
+
+ CalenEventInterval empty;
+ if (lastOverlap) {
+ // Remove the part which already is marked as an overlap
+ // from the new event. The new event can't start before the
+ // last overlap starts since events are added in order, therefore
+ // the second subtraction result interval will remain empty.
+ newEvent.Subtract(*lastOverlap, empty);
+ ASSERT( empty.IsEmpty() );
+ }
+
+ // Create a new interval, representing the overlap between the old tail
+ // and the new event
+ CalenEventInterval newOverlap = newEvent;
+ newOverlap.iOverlap = true;
+ newOverlap.Intersect(tail);
+
+ CalenEventInterval tailPart2 = tail; // initialize iOverlap and iStatus from tail
+ // Remove the new overlap from the old tail, possibly creating two separate intervals.
+ tail.Subtract(newOverlap, tailPart2);
+
+ // If the subtraction only yielded one single interval, but it's
+ // after newOverlap, make tailPart2 contain that and make tail empty.
+ if (tail > newOverlap) {
+ tailPart2 = tail;
+ tail.iEndSlot = tail.iStartSlot;
+ }
+
+ // Remove the new overlap from the new event. Since we already removed the old
+ // overlap, this subtraction can't produce two intervals either.
+ newEvent.Subtract(newOverlap, empty);
+ ASSERT( empty.IsEmpty() );
+
+ // If the new overlap is adjacent to the old one, expand the old one
+ // and set the new overlap to be empty.
+ if (lastOverlap && newOverlap.Adjacent(*lastOverlap)) {
+ lastOverlap->Union(newOverlap);
+ newOverlap.iEndSlot = newOverlap.iStartSlot;
+ }
+
+ // Add all the new intervals, if they're non-empty.
+ if (!tail.IsEmpty()) {
+ iIntervals.append(tail);
+ }
+ if (!newOverlap.IsEmpty()) {
+ iIntervals.append(newOverlap);
+ }
+ if (!tailPart2.IsEmpty()) {
+ iIntervals.append(tailPart2);
+ }
+ if (!newEvent.IsEmpty()) {
+ iIntervals.append(newEvent);
+ }
+
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,239 @@
+/*
+* Copyright (c) 2010 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: Event view item, exact size and position of event is set in
+* CalenDayContainer::setItemModelIndex based on event duration
+*
+*/
+
+//System includes
+#include <hbframeitem.h>
+#include <hbtextitem.h>
+#include <agendaentry.h>
+#include <hbstyle.h>
+#include <hbcolorscheme.h>
+
+
+//User inlcudes
+#include "calendayitem.h"
+#include "calendaystatusstrip.h"
+#include "calendaymodel.h"
+
+// -----------------------------------------------------------------------------
+// CalenDayItem()
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CalenDayItem::CalenDayItem():
+ mUpdated(false), mBg(0), mEventDesc(0), mColorStripe(0),
+ mEventDescMinWidth(0.0), mFrameMinWidth(0.0)
+{
+}
+
+// -----------------------------------------------------------------------------
+// CalenBCDayView()
+// Copy constructor.
+// -----------------------------------------------------------------------------
+//
+CalenDayItem::CalenDayItem(const CalenDayItem & source) :
+ HbAbstractViewItem(source), mUpdated(false), mBg(0), mEventDesc(0),
+ mColorStripe(0), mEventDescMinWidth(0.0), mFrameMinWidth(0.0)
+{
+ // TODO: "qtg_fr_btn_pressed" need to replaced with qtg_fr_cal_meeting_bg
+ // when available
+ mBg = new HbFrameItem("qtg_fr_btn_pressed", HbFrameDrawer::NinePieces, this);
+ mEventDesc = new HbTextItem(this);
+ // TODO: probably ElideLeft needed for mirrored layout
+ mEventDesc->setElideMode(Qt::ElideRight);
+ mEventDesc->setTextWrapping(Hb::TextWrapAnywhere);
+
+ mColorStripe = new CalenDayStatusStrip(this);
+
+ HbStyle::setItemName(mBg, QLatin1String("backgroundFrame"));
+ HbStyle::setItemName(mEventDesc, QLatin1String("eventDescription"));
+ HbStyle::setItemName(static_cast<QGraphicsItem *>(mColorStripe), QLatin1String("colorStripe"));
+
+ HbDeviceProfile deviceProfile;
+ HbStyle style;
+
+ qreal horizontalSpacing = 0.0;
+ qreal rightMargin = 0.0;
+
+ style.parameter(QString("hb-param-margin-gene-middle-horizontal"),
+ horizontalSpacing, deviceProfile);
+ style.parameter(QString("hb-param-margin-gene-right"),
+ rightMargin, deviceProfile);
+
+ qreal stripeWidth = 1.5 * deviceProfile.unitValue(); //1.5un according to UI spec
+
+ mFrameMinWidth = 2 * horizontalSpacing + stripeWidth; //smallest width for which background frame is displayed
+ mEventDescMinWidth = mFrameMinWidth + rightMargin;//smallest width for which text can be displayed
+
+ //Minimum width is assured by widgetml and css
+ //additionally called here to prevent minimum size hint caching inside effectiveSizeHint
+ setMinimumWidth(stripeWidth);
+}
+
+// -----------------------------------------------------------------------------
+// ~CalenDayItem()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CalenDayItem::~CalenDayItem()
+{
+}
+
+// -----------------------------------------------------------------------------
+//
+// -----------------------------------------------------------------------------
+//
+HbAbstractViewItem * CalenDayItem::createItem()
+{
+ CalenDayItem* newItem = new CalenDayItem(*this);
+ return newItem;
+}
+
+
+// -----------------------------------------------------------------------------
+// -----------------------------------------------------------------------------
+//
+void CalenDayItem::updateChildItems()
+{
+ // there is no need to update items after creation
+ if (!mUpdated)
+ {
+ AgendaEntry entry;
+ entry = modelIndex().data( CalenDayEntry ).value<AgendaEntry>();
+
+ bool isAllDayEvent = (entry.type() == AgendaEntry::TypeEvent)
+ && !entry.isTimedEntry();
+
+ setDescription(entry, isAllDayEvent);
+ setStatusStrip(entry, isAllDayEvent);
+
+ mUpdated = true;
+ }
+
+ //TODO: check if needed
+ //repolish();
+ //HbAbstractViewItem::updateChildItems();
+}
+
+
+// -----------------------------------------------------------------------------
+// setDescription()
+// -----------------------------------------------------------------------------
+//
+void CalenDayItem::setDescription(const AgendaEntry &entry, bool allDayEvent)
+{
+ QString description(entry.summary());
+ QString location(entry.location());
+
+
+ int separtorPos = 0;
+
+ if(!location.isEmpty()) {
+ if ( !description.isEmpty() ) {
+ separtorPos = description.count();
+ description.append(", ");
+ }
+
+ description.append(location);
+ }
+
+ if ( description.isEmpty() ) {
+ description.append(hbTrId("txt_calendar_dblist_unnamed"));
+ }
+
+ //Description of all day events has to be displayed vertically
+ if(allDayEvent){
+
+ QString verticalString;
+ for(int i=0; i<description.count(); i++){
+
+ verticalString.append(QString(description.at(i)) + "\n");
+ }
+
+ // remove "\n" before comma separator if exist
+ if (separtorPos)
+ {
+ verticalString.remove( 2*separtorPos-1, 1);
+ }
+ description = verticalString;
+ }
+
+ mEventDesc->setText(description);
+}
+
+/*!
+ \brief It set all needed things for status strip from Agenda Entry.
+
+ \param entry Status Strip is created from Agenda Entry
+ */
+void CalenDayItem::setStatusStrip(const AgendaEntry &entry, bool allDayEvent)
+{
+ QColor color = HbColorScheme::color("qtc_cal_month_current_day");
+ mColorStripe->setColor(color);
+
+ if (!allDayEvent) {
+ mColorStripe->setStartEndTime(entry.startTime().time(),
+ entry.endTime().time());
+ } else {
+ // This is workaround for displaying all-day events.
+ // Now for MS Outlook compability all-day events' start and end time is
+ // 00:00:00 and 00:00:00 next day respectively.
+ // To draw it correctly we need times like those visible for user in
+ // editor: 00:00:00 to 23:59:59 (the same day)
+ mColorStripe->setStartEndTime(entry.startTime().time(),
+ entry.endTime().time().addSecs(-1));
+ }
+
+ switch (entry.status()) {
+ case AgendaEntry::Confirmed:
+ mColorStripe->setDrawingStyle(CalenDayStatusStrip::Filled);
+ break;
+ case AgendaEntry::Tentative:
+ mColorStripe->setDrawingStyle(CalenDayStatusStrip::StripWithLines);
+ break;
+ case AgendaEntry::Cancelled:
+ mColorStripe->setDrawingStyle(CalenDayStatusStrip::OnlyFrame);
+ break;
+ default:
+ mColorStripe->setDrawingStyle(CalenDayStatusStrip::Filled);
+ break;
+ }
+}
+
+void CalenDayItem::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ Q_UNUSED(event)
+
+ qreal width = rect().width();
+
+ if(width < mEventDescMinWidth){
+ mEventDesc->hide();
+ } else{
+ mEventDesc->show();
+ }
+
+ if(width < mFrameMinWidth){
+ mBg->hide();
+ } else{
+ mBg->show();
+ }
+
+ //Necessary to switch layout
+ repolish();
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayitemview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,393 @@
+/*
+* Copyright (c) 2010 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: Day view control of calendar
+*
+*/
+
+//System includes
+#include <QGesture>
+#include <QGraphicsLinearLayout>
+#include <hbabstractviewitem.h>
+#include <hbinstance.h>
+#include <hbaction.h>
+
+//User includes
+#include "calendayitemview.h"
+#include "calendayutils.h"
+#include "calendaycontainer.h"
+#include "calendayinfo.h"
+#include "calendaymodel.h"
+#include "calenservices.h"
+#include "calencontext.h"
+#include "CalenUid.h"
+
+
+// -----------------------------------------------------------------------------
+// CalenDayItemView()
+// Constructor
+// -----------------------------------------------------------------------------
+//
+CalenDayItemView::CalenDayItemView( MCalenServices &services, HbModelIterator *iterator, QGraphicsItem *parent )
+: HbAbstractItemView(mContainer = new CalenDayContainer(), iterator, parent),
+ mServices( services )
+{
+ mInfo = new CalenDayInfo( CalenDayInfo::ETwo );
+ mContainer->setDayInfo( mInfo );
+
+ //setup Selection Model
+ QItemSelectionModel* selModel = new QItemSelectionModel(this->model());
+ if ( selModel ) {
+ setSelectionMode( HbAbstractItemView::SingleSelection );
+ setSelectionModel( selModel );
+ }
+
+ setScrollDirections(Qt::Vertical);
+ setScrollingStyle(HbScrollArea::PanWithFollowOn);
+ setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
+
+ grabGesture(Qt::PanGesture);
+ ungrabGesture(Qt::SwipeGesture);
+
+ //TODO: KG: Animate item pressed?! HbAbstractItemView::TouchDown
+ setEnabledAnimations( HbAbstractItemView::None );
+
+ // Get the width of content and fix its size
+ qreal contentWidth = CalenDayUtils::instance()->contentWidth();
+ setMinimumWidth(contentWidth);
+ setMaximumWidth(contentWidth);
+
+ setupSlots();
+ setupContextMenu();
+}
+
+// -----------------------------------------------------------------------------
+// ~CalenDayItemView()
+// Destructor
+// -----------------------------------------------------------------------------
+//
+CalenDayItemView::~CalenDayItemView()
+{
+ delete mInfo;
+}
+
+// -----------------------------------------------------------------------------
+// scrollTo()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::scrollTo(const QModelIndex &index, HbAbstractItemView::ScrollHint hint)
+{
+ HbAbstractItemView::scrollTo(index, hint);
+}
+
+// -----------------------------------------------------------------------------
+// reset()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::reset()
+{
+// CalenDayItemView::reset();
+}
+
+// -----------------------------------------------------------------------------
+// modelAboutToBeReset()
+// Handles signal that is emitted when reset() is called, before the model's
+// internal state (e.g. persistent model indexes) has been invalidated.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::modelAboutToBeReset()
+{
+
+}
+
+// -----------------------------------------------------------------------------
+// modelReset()
+// Handles signal that is emitted when reset() is called, after the model's
+// internal state (e.g. persistent model indexes) has been invalidated.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::modelReset()
+{
+ if ( !mInfo ) {
+ return;
+ }
+ //reset day info
+ mInfo->Reset();
+
+ CalenDayModel* model(0);
+ model = static_cast<CalenDayModel*>(this->model());
+ if ( !model ) {
+ return;
+ }
+ int rowCount = model->rowCount( );
+ SCalenApptInfo apptInfo;
+ for( int row = 0; row < rowCount; row++ ) {
+ QModelIndex idx = model->index( row, 0 );
+ QVariant variant = idx.data( CalenDayEntry );
+ AgendaEntry entry = variant.value<AgendaEntry>();
+ apptInfo.iIndex = idx;
+
+ QDateTime start;
+ QDateTime end;
+ QDateTime currDate( model->modelDate() );
+ CalenDayUtils::instance()->getEventValidStartEndTime( start, end,
+ entry, currDate );
+
+ apptInfo.iStartTime = start;
+ apptInfo.iEndTime = end;
+
+ TCalenInstanceId id = TCalenInstanceId::nullInstanceId();//index.row() - temporary ID
+ id.mEntryLocalUid = row;
+ id.mInstanceTime = apptInfo.iStartTime;
+ apptInfo.iId = id;
+ apptInfo.iColor = 0xffff;
+
+ if ( entry.isTimedEntry() )
+ {
+ apptInfo.iAllDay = false;
+ mInfo->InsertTimedEvent( apptInfo );
+ }
+ else if( entry.type() == AgendaEntry::TypeEvent) //all-day event
+ {
+ apptInfo.iAllDay = true;
+ mInfo->InsertAlldayEvent( apptInfo );
+ }
+ }
+
+ HbAbstractItemView::reset();
+}
+
+// -----------------------------------------------------------------------------
+// scrollVertically()
+//
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::scrollVertically( const QPointF &newPosition )
+{
+ QPointF currentPos = contentWidget()->pos();
+ if (abs(newPosition.y()) != abs(currentPos.y())) {
+ currentPos.setY(newPosition.y());
+ scrollContentsTo(currentPos, 0);
+ }
+}
+
+// -----------------------------------------------------------------------------
+// itemPressed()
+// This function is called when a touch down event is received within Abstract view item that is representing index.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::itemPressed( const QPointF &position )
+{
+ Q_UNUSED( position )
+}
+
+// -----------------------------------------------------------------------------
+// itemReleased()
+// This function is called when a touch release event is received within Abstract view item that is representing index.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::itemReleased( const QPointF &position )
+{
+ Q_UNUSED( position )
+}
+
+// -----------------------------------------------------------------------------
+// itemActivated()
+// This function is called when the item specified by index is activated by the user.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::itemActivated( const QPointF &position )
+{
+ Q_UNUSED( position )
+ HbAbstractViewItem *item = qobject_cast<HbAbstractViewItem *>(sender());
+ QModelIndex index = item->modelIndex();
+ QItemSelectionModel* selModel( selectionModel() );
+ if ( index.isValid() && selModel) {
+ selModel->select( index, QItemSelectionModel::Current | QItemSelectionModel::Select );
+ openSelectedItem();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// itemLongPressed()
+// This function is called when long press event is received within Abstract view item viewItem.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::itemLongPressed(HbAbstractViewItem* item, QPointF coords)
+{
+ QModelIndex index = item->modelIndex();
+ QItemSelectionModel* selModel( selectionModel() );
+ if ( index.isValid() && selModel && mContextMenu) {
+ selModel->select( index, QItemSelectionModel::Current | QItemSelectionModel::Select );
+ mContextMenu->setPreferredPos( coords, HbPopup::BottomRightCorner );
+ mContextMenu->open();
+ }
+}
+
+// -----------------------------------------------------------------------------
+// orientationChanged()
+// Slot which is called whenever the orientation of the device changes.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::orientationChanged( Qt::Orientation orientation )
+{
+ // Update the width of screen
+ qreal contentWidth = CalenDayUtils::instance()->contentWidth();
+ setMinimumWidth(contentWidth);
+ setMaximumWidth(contentWidth);
+ if( mContainer ) {
+ mContainer->orientationChanged( orientation );
+ }
+}
+
+// -----------------------------------------------------------------------------
+// openSelectedItem()
+// Opens currently selected model item.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::openSelectedItem()
+{
+ issueCommandOnSelectedItem( ECalenEventView );
+}
+
+// -----------------------------------------------------------------------------
+// editSelectedItem()
+// Edits currently selected model item.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::editSelectedItem()
+{
+ issueCommandOnSelectedItem( ECalenEditCurrentEntry );
+}
+
+// -----------------------------------------------------------------------------
+// deleteSelectedIten()
+// Deletes currently selected model item.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::deleteSelectedItem()
+{
+ issueCommandOnSelectedItem( ECalenDeleteCurrentEntry );
+}
+
+// -----------------------------------------------------------------------------
+// setupSlots()
+// Connects item view's slots.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::setupSlots()
+{
+ // Connect to main window's orientationChanged signal to handle orientation
+ // switching
+ QObject::connect(CalenDayUtils::instance()->mainWindow(),
+ SIGNAL(orientationChanged(Qt::Orientation)), this,
+ SLOT(orientationChanged(Qt::Orientation)));
+
+ // Connect with model signals
+ if (this->model()) {
+ QObject::connect(this->model(), SIGNAL(modelAboutToBeReset()), this,
+ SLOT(modelAboutToBeReset()));
+ QObject::connect(this->model(), SIGNAL(modelReset()), this,
+ SLOT(modelReset()));
+ }
+ if (mContainer) {
+ // Connect with base class to enable handling item press by model index
+ QObject::connect(mContainer, SIGNAL(itemCreated(HbAbstractViewItem *)),
+ this, SLOT(itemCreated(HbAbstractViewItem*)));
+ }
+ QObject::connect(this, SIGNAL(pressed(const QPointF&)), this,
+ SLOT(itemPressed(const QPointF&)));
+ QObject::connect(this, SIGNAL(released(const QPointF&)), this,
+ SLOT(itemReleased(const QPointF&)));
+ QObject::connect(this, SIGNAL(activated(const QPointF&)), this,
+ SLOT(const QPointF&));
+ QObject::connect(this, SIGNAL(longPressed(HbAbstractViewItem*, QPointF)),
+ this, SLOT(itemLongPressed(HbAbstractViewItem*, QPointF)));
+}
+
+// -----------------------------------------------------------------------------
+// setupSlots()
+// Creates Context menu.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::setupContextMenu()
+{
+ mContextMenu = new HbMenu();
+ HbAction *openAction = mContextMenu->addAction(hbTrId("txt_common_menu_open"));
+ if (openAction) {
+ connect(openAction, SIGNAL(triggered()), this, SLOT(openSelectedItem()));
+ }
+ HbAction *editAction = mContextMenu->addAction(hbTrId("txt_common_menu_edit"));
+ if (editAction) {
+ connect(editAction, SIGNAL(triggered()), this, SLOT(editSelectedItem()));
+ }
+ HbAction *deleteAction = mContextMenu->addAction(hbTrId("txt_common_menu_delete"));
+ if (deleteAction) {
+ connect(deleteAction, SIGNAL(triggered()), this,
+ SLOT(deleteSelectedItem()));
+ }
+}
+
+// -----------------------------------------------------------------------------
+// issueCommandOnSelectedItem()
+// Sets context to currently selected model item and issues calendar command.
+// -----------------------------------------------------------------------------
+//
+bool CalenDayItemView::issueCommandOnSelectedItem( int command )
+{
+ bool retVal(false);
+ QItemSelectionModel* selModel(selectionModel());
+ if (!selModel){
+ return retVal;
+ }
+ QModelIndex index( selModel->currentIndex() );
+ if( index.isValid() ) {
+ retVal = true;
+ QVariant variant = index.data( CalenDayEntry );
+ AgendaEntry entry = variant.value<AgendaEntry>();
+ QDateTime start;
+ QDateTime end;
+ CalenDayModel* model(0);
+ model = static_cast<CalenDayModel*>(this->model());
+ QDateTime currDate( model->modelDate() );
+ CalenDayUtils::instance()->getEventValidStartEndTime( start, end,
+ entry, currDate );
+ TRAPD(error,
+ mServices.Context().setFocusDateAndTimeAndInstance(start,
+ TCalenInstanceId::create(entry));
+ mServices.IssueCommandL( command );
+ );
+ if( error ) {
+ retVal = false;
+ }
+ clearSelectionInModel();
+ }
+ return retVal;
+}
+
+// -----------------------------------------------------------------------------
+// clearSelectionInModel()
+// Clears current selection in Selection Model.
+// -----------------------------------------------------------------------------
+//
+void CalenDayItemView::clearSelectionInModel()
+{
+ QItemSelectionModel* selModel(selectionModel());
+ if (selModel) {
+ selModel->clear();
+ }
+}
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendaymodel.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,113 @@
+/*
+* Copyright (c) 2010 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: Single day item view model
+*
+*/
+
+
+
+#include <calenservices.h>
+#include <agendautil.h>
+#include "calendaymodel.h"
+
+
+/*!
+ BC Day Model constructor
+ \a date defined day for which entries will be fetched \a services is handle to
+ organizer services \a parent
+ */
+CalenDayModel::CalenDayModel(const QDateTime &date, MCalenServices &services,
+ QObject *parent)
+ : QAbstractListModel(parent), mServices(services)
+{
+ if (date.isValid())
+ {
+ loadAndStoreInstances(date);
+ }
+}
+
+/*
+ \reimp
+ */
+int CalenDayModel::rowCount( const QModelIndex &parent ) const
+{
+ Q_UNUSED( parent )
+ return mEntryList.count();
+}
+
+/*
+ \reimp
+ */
+QVariant CalenDayModel::data(const QModelIndex &index, int role) const
+{
+ if (!index.isValid())
+ {
+ return QVariant();
+ }
+
+ if (index.row() >= mEntryList.count())
+ {
+ return QVariant();
+ }
+
+ if (role == CalenDayEntry)
+ {
+ return mEntryList.at(index.row());
+ }
+ else
+ {
+ return QVariant();
+ }
+}
+
+/*!
+ Resets model. Old events are removed. Evenets for given day are fetched.
+ \a date defined day for which entries will be fetched
+ */
+void CalenDayModel::refreshModel(const QDateTime &date)
+{
+ beginResetModel();
+ loadAndStoreInstances(date);
+ endResetModel();
+}
+
+
+/*!
+ Fetches entries via. organizer API and stores it in member container
+ */
+void CalenDayModel::loadAndStoreInstances(const QDateTime &date)
+{
+ mDateTime = date;
+ //Filter flags
+ AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(
+ AgendaUtil::IncludeAppointments | AgendaUtil::IncludeEvents);
+ QList<AgendaEntry> list;
+ // Fetch the instance list from the agenda interface
+ list = mServices.agendaInterface()->createEntryIdListForDay(date, filter);
+
+ mEntryList.clear();
+
+ foreach(AgendaEntry entry, list)
+ {
+ mEntryList.append(QVariant::fromValue(entry));
+ }
+}
+
+/*!
+ Retruns date (day). Model holds events for this day.
+ */
+QDateTime CalenDayModel::modelDate() const
+{
+ return mDateTime;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendaymodelmanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,167 @@
+/*
+* Copyright (c) 2010 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: Model manager holds models for three day views
+*
+*/
+
+#include <calenservices.h>
+#include <calencontext.h>
+
+#include "calendaymodelmanager.h"
+#include "calendaymodel.h"
+
+/*!
+ BC Model Manager constructor. Model manager use calendar context to
+ populate models with proper events.
+ \a services is handle to organizer services \a emptyModels if true created models
+ are not populated with events \a parent
+ */
+CalenDayModelManager::CalenDayModelManager(MCalenServices &services, bool emptyModels,
+ QObject *parent)
+ : QObject(parent), mServices (services)
+{
+ if (emptyModels)
+ {
+ mCurrentDayTime = QDateTime();
+ }
+ else
+ {
+ mCurrentDayTime = mServices.Context().focusDateAndTime();
+ }
+ createAllModels();
+}
+
+CalenDayModelManager::~CalenDayModelManager()
+{
+ // not needed now
+}
+
+
+void CalenDayModelManager::viewsScrollingFinished(CalenScrollDirection scrollTo)
+ {
+ if (scrollTo == ECalenScrollToNext)
+ {
+ moveForeward();
+ }
+ else
+ {
+ moveBackward();
+ }
+ }
+
+
+/*!
+ Reorganize models after move to previous day.
+ */
+void CalenDayModelManager::moveBackward()
+{
+ mCurrentDayTime = mServices.Context().focusDateAndTime();
+
+ CalenDayModel* tmp = mModels[NextDay];
+ tmp->refreshModel( mCurrentDayTime.addDays(-1));
+
+ mModels[NextDay] = mModels[CurrentDay];
+ mModels[CurrentDay] = mModels[PreviousDay];
+ mModels[PreviousDay] = tmp;
+}
+
+/*!
+ Reorganize models after move to next day.
+ */
+void CalenDayModelManager::moveForeward()
+{
+ mCurrentDayTime = mServices.Context().focusDateAndTime();
+
+ CalenDayModel* tmp = mModels[PreviousDay];
+ tmp->refreshModel( mCurrentDayTime.addDays(1));
+
+ mModels[PreviousDay] = mModels[CurrentDay];
+ mModels[CurrentDay] = mModels[NextDay];
+ mModels[NextDay] = tmp;
+}
+
+/*!
+ Returns given model
+ /a day defines model, can be (PreviousDay, CurrentDay, NextDay) only.
+ */
+QAbstractItemModel &CalenDayModelManager::getModel(ModelDay day)
+{
+ return *(mModels[day]);
+}
+
+/*!
+ Creates all models objects durring construction.
+ */
+void CalenDayModelManager::createAllModels()
+{
+
+ mModels[CurrentDay] = new CalenDayModel(mCurrentDayTime, mServices, this);
+
+ QDateTime previousDayTime;
+ QDateTime nextDayTime;
+
+ if (mCurrentDayTime.isValid())
+ {
+ previousDayTime = mCurrentDayTime.addDays(-1);
+ nextDayTime = mCurrentDayTime.addDays(1);
+ }
+
+ mModels[PreviousDay] = new CalenDayModel(previousDayTime, mServices, this);
+ mModels[NextDay] = new CalenDayModel(nextDayTime, mServices, this);
+}
+
+
+/*!
+ Refetch data for all models. Context calendar is used to fill models
+ with correct events. Should be used for full (three days) repopulation.
+ */
+void CalenDayModelManager::refreshAllModels()
+ {
+ mCurrentDayTime = mServices.Context().focusDateAndTime();
+
+ mModels[PreviousDay]->refreshModel(mCurrentDayTime.addDays(-1));
+ mModels[CurrentDay]->refreshModel(mCurrentDayTime);
+ mModels[NextDay]->refreshModel(mCurrentDayTime.addDays(1));
+ }
+
+/*!
+ Refetch data given day model. Context calendar is used to fill model
+ with correct events.
+ /a day defines model, can be (PreviousDay, CurrentDay, NextDay) only.
+ */
+void CalenDayModelManager::refreshSingleModel(CalenDayModelManager::ModelDay day)
+ {
+ switch (day)
+ {
+ case PreviousDay:
+ {
+ mModels[PreviousDay]->refreshModel(mCurrentDayTime.addDays(-1));
+ }
+ break;
+ case CurrentDay:
+ {
+ mModels[CurrentDay]->refreshModel(mCurrentDayTime);
+ }
+ break;
+ case NextDay:
+ {
+ mModels[PreviousDay]->refreshModel(mCurrentDayTime.addDays(1));
+ }
+ break;
+ default:
+ break;
+ }
+ }
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendaystatusstrip.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,290 @@
+/*
+ * Copyright (c) 2010 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: Day view control of calendar
+ *
+ */
+
+#include <QPainter>
+#include <QPen>
+
+#include "calendaystatusstrip.h"
+
+qreal const CalenDayStatusStrip::mMinute = 60;
+qreal const CalenDayStatusStrip::mMinimumTime = 5;
+
+/*!
+ Constructor
+ */
+CalenDayStatusStrip::CalenDayStatusStrip(HbWidget *parent)
+ : HbWidget(parent), mRange(2),
+ mDrawingStyle(CalenDayStatusStrip::Filled)
+{
+ setFlag(QGraphicsItem::ItemHasNoContents,false);
+
+}
+
+/*!
+ Destructor
+ */
+CalenDayStatusStrip::~CalenDayStatusStrip()
+{
+
+}
+
+/*!
+ \brief Return range beatween two filled lines in StripWithLines drawing
+ styles.
+
+ \sa CalenDayStatusStrip::DrawingStyle, setRange
+ */
+qreal CalenDayStatusStrip::range() const
+{
+ return mRange;
+}
+
+/*!
+ \brief Return color drawing
+
+ \sa setColor
+ */
+QColor CalenDayStatusStrip::color() const
+{
+ return mColor;
+}
+
+/*!
+ \brief Return style of drawing.
+
+ \sa CalenDayStatusStrip::DrawingStyle, setDrawingStyle
+ */
+CalenDayStatusStrip::DrawingStyle CalenDayStatusStrip::drawingStyle() const
+{
+ return mDrawingStyle;
+}
+
+/*!
+ \brief Return orginal start and entime fo event
+
+ \sa setStartEndTime
+ */
+QPair<QTime,QTime> CalenDayStatusStrip::startEndTime() const
+{
+ return mStartEndEventTime;
+}
+
+/*!
+ \brief It set range beatween two filled lines in StripWithLines drawing
+ styles.
+
+ \param range Range beatween two filled lines
+
+ \sa CalenDayStatusStrip::DrawingStyle, range
+ */
+void CalenDayStatusStrip::setRange(qreal range)
+{
+ mRange = range;
+}
+
+/*!
+ \brief It set color drawing
+
+ \param stripColor Color of drawing
+
+ \sa stripColor
+ */
+void CalenDayStatusStrip::setColor(QColor stripColor)
+{
+ mColor = stripColor;
+}
+
+/*!
+ \brief It set drawing style of strip
+
+ \param drawingStyle Style of strip drawing.
+
+ \sa CalenDayStatusStrip::DrawingStyle, drawingStyle
+ */
+void
+CalenDayStatusStrip::setDrawingStyle(CalenDayStatusStrip::DrawingStyle drawingStyle)
+{
+ mDrawingStyle = drawingStyle;
+}
+
+/*!
+ It set start and end time of event
+
+ \param startTime Start of event
+ \param endTime End of event
+ */
+void CalenDayStatusStrip::setStartEndTime(const QTime &startTime,
+ const QTime &endTime)
+{
+ mStartEndEventTime.first = startTime;
+ mStartEndEventTime.second = endTime;
+
+ //check if startEndEvent is longer than mMinimumTimeminutes;
+ if (mStartEndEventTime.first.secsTo(mStartEndEventTime.second) < mMinute * mMinimumTime) {
+ mStartEndEventTime.second = QTime(mStartEndEventTime.first.hour(),
+ mStartEndEventTime.first.minute() + mMinimumTime);
+ }
+}
+
+/*!
+ \brief Reimplemented function...
+
+ Reimplemented function to draw status strip.
+ It is based on CalenDayStatusStrip::DrawingStyle, range and color
+ */
+void CalenDayStatusStrip::paint(
+ QPainter *painter,
+ const QStyleOptionGraphicsItem *option,
+ QWidget *widget)
+{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+
+ //calculate bubble start and end time of bubble
+ QPair<QTime, QTime> startEndEvent =
+ calculateStartEndPostion(mStartEndEventTime.first,
+ mStartEndEventTime.second
+ );
+ //calculate how big is Minute
+ qreal minuteHeight = calculateMinuteHeight(startEndEvent.first,
+ startEndEvent.second
+ );
+
+ painter->save();// saves the painter state.
+
+
+ //calculate how long is event in minutes
+ qreal eventMinutes =
+ mStartEndEventTime.first.secsTo(mStartEndEventTime.second) / mMinute;
+ //calculate height and width of status stripe
+ qreal dx = size().width() - 1;
+ qreal dy = eventMinutes * minuteHeight;
+
+ //calculate time from wehre it should be drawed
+ qreal startTime =
+ startEndEvent.first.secsTo(mStartEndEventTime.first) / mMinute;
+ //this is done because bubble can be drawed from half hour
+ startTime = startTime > 30 ? startTime - 30 : startTime;
+ //calculate status stripe height
+ qreal startTimeHeight = startTime * minuteHeight;
+
+ //set bounding rect of drawed area
+ QRectF bounding(boundingRect());
+ //set size smaller by 1px in each side
+ bounding.setRect(bounding.left() + 1, bounding.top() + startTimeHeight,
+ dx - 1, dy - 1
+ );
+
+ //set clip region
+ painter->setClipRect(bounding, Qt::IntersectClip);
+
+ //prepare brush and paint
+ QBrush brush(mColor);
+ painter->setBrush(brush);
+ QPen pen;
+ pen.setWidth(1);
+ pen.setBrush(brush);
+ pen.setCapStyle(Qt::RoundCap);
+ pen.setJoinStyle(Qt::RoundJoin);
+
+ painter->setPen(pen);
+ QPointF startPoint(0, dy + dx);
+
+ switch (mDrawingStyle) {
+ case StripWithLines:
+ for (int i = 0; startPoint.y() > 0; i++) {
+ painter->drawPolygon(diagonalLine(startPoint, dx, 3));
+ startPoint.setY(startPoint.y() - 6 - mRange);
+ }
+ case OnlyFrame:
+ painter->setBrush(Qt::NoBrush);
+ break;
+ }
+
+ //draw rectangle
+ painter->drawRect(bounding);
+
+ // restore the painter
+ painter->restore();
+}
+
+/*!
+ \brief It preapre points to draw filled polygon when StripWithLines style is
+ on.
+ */
+QPolygonF
+CalenDayStatusStrip::diagonalLine(QPointF startPoint, qreal dx, qreal dy)
+{
+ QPolygonF polygon;
+ polygon << QPointF(startPoint.x(), startPoint.y());
+ polygon << QPointF(startPoint.x(), startPoint.y() - dy);
+ polygon << QPointF(startPoint.x() + dx, startPoint.y() - 2 * dy);
+ polygon << QPointF(startPoint.x() + dx, startPoint.y() - dy);
+ return polygon;
+}
+
+/*!
+ Return time for position 0 and height in widget
+
+ \param startTime Start of event
+ \param endTime End of event
+ \return Draw region of bubble
+ */
+ QPair<QTime,QTime> CalenDayStatusStrip::calculateStartEndPostion(
+ const QTime &startTime,
+ const QTime &endTime
+ )
+{
+
+ QTime start;
+ QTime end;
+
+ if (startTime.minute() < 30) {
+ start = QTime(startTime.hour(), 0);
+ }
+ else {
+ start = QTime(startTime.hour(), 30);
+ }
+
+ if (endTime.minute() == 0) {
+ end = endTime;
+ }
+ else if (endTime.hour() == 23) {
+ end = QTime(endTime.hour(), 59);
+ }
+ else if (endTime.minute() <= 30) {
+ end = QTime(endTime.hour(), 30);
+ }
+ else {
+ end = QTime(endTime.hour() + 1, 0);
+ }
+
+ return QPair<QTime, QTime> (start, end);
+}
+
+/*!
+ Calculate height of one minute from widget height, and start/end time.
+ */
+qreal CalenDayStatusStrip::calculateMinuteHeight(const QTime &start,
+ const QTime &end)
+{
+ qreal min = start.secsTo(end) / mMinute;
+
+ qreal height = size().height();
+
+ return height / min;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayutils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,234 @@
+/*
+* Copyright (c) 2010 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: CalenDayUtils utility class implementation.
+*
+*/
+
+// System includes
+#include <hbdeviceprofile.h>
+#include <hbstyle.h>
+#include <hbinstance.h>
+#include <qdatetime.h>
+
+// User includes
+#include "calendayutils.h"
+#include "calendaycommonheaders.h"
+#include "agendaentry.h"
+#include "calendateutils.h"
+
+// Initialization of static member
+CalenDayUtils* CalenDayUtils::mInstance = 0;
+
+/*!
+ \class CalenDayUtils
+ \brief Singleton utility class.
+
+ Class cannot be used in console applications.
+
+ Provided functionalities (getters):
+ - screen width of device
+ - default width of hour element
+ - default height of hour element
+ - default width of content area
+ - current orientation of screen
+ - pointer to the main window of application
+ */
+
+/*!
+ \brief Returns the instance of CalenDayUtils class
+ */
+CalenDayUtils *CalenDayUtils::instance()
+{
+ if (!mInstance) {
+ mInstance = new CalenDayUtils();
+ }
+ return mInstance;
+}
+
+/*!
+ \brief Destructor
+ */
+CalenDayUtils::~CalenDayUtils()
+{
+
+}
+
+/*!
+ \brief screenWidth
+
+ \return Width of main window's screen
+ */
+qreal CalenDayUtils::screenWidth() const
+{
+ ASSERT(mMainWindow);
+
+ return mMainWindow->layoutRect().width();
+}
+
+/*!
+ \brief hourElementWidth
+
+ \return Width of hour element
+ */
+qreal CalenDayUtils::hourElementWidth() const
+{
+ return mHourElementWidth;
+}
+
+/*!
+ \brief hourElementHeight
+
+ \return Height of hour element
+ */
+qreal CalenDayUtils::hourElementHeight() const
+{
+ return mHourElementHeight;
+}
+
+/*!
+ \brief contentWidth
+
+ \return Width of content area
+ */
+qreal CalenDayUtils::contentWidth() const
+{
+ return (screenWidth() - mHourElementWidth);
+}
+
+/*!
+ \brief orientation
+
+ \return Orientation of main window
+ */
+Qt::Orientation CalenDayUtils::orientation() const
+{
+ ASSERT(mMainWindow);
+
+ return mMainWindow->orientation();
+}
+
+/*!
+ \brief mainWindow
+
+ \return Pointer to main window of application
+ */
+HbMainWindow* CalenDayUtils::mainWindow()
+{
+ ASSERT(mMainWindow);
+
+ return mMainWindow;
+}
+
+/*!
+ \brief isHorizontalSwipe
+
+ \return TRUE if horizontal swipe was recognized (angle in specific range)
+ */
+bool CalenDayUtils::isHorizontalSwipe(qreal angle) const
+{
+ bool isHSwipe = false;
+ if ((angle < KCalenSwipeAngle) ||
+ ((angle > 180 - KCalenSwipeAngle) && (angle < 180 + KCalenSwipeAngle)) ||
+ (angle > 360 - KCalenSwipeAngle)) {
+ isHSwipe = true;
+ }
+
+ return isHSwipe;
+}
+
+/*!
+ \brief getEventValidStartEndTime
+ \brief Get event's valid start/end time from agenda entry.
+ */
+void CalenDayUtils::getEventValidStartEndTime( QDateTime& start, QDateTime& end,
+ AgendaEntry& entry, QDateTime& currentDate )
+{
+ start = entry.startTime();
+ end = entry.endTime();
+
+ if ( !CalenDateUtils::onSameDay( start, currentDate ) ) {
+ start = CalenDateUtils::beginningOfDay( currentDate );
+ }
+
+ if ( !CalenDateUtils::onSameDay( end, currentDate ) ) {
+ QDateTime tommorrow( currentDate.addDays( 1 ));
+ end = CalenDateUtils::beginningOfDay( tommorrow ).addSecs( -60 );
+ }
+}
+
+/*!
+ \brief Constructor
+ */
+CalenDayUtils::CalenDayUtils() : mMainWindow(NULL)
+{
+ if (HbInstance::instance()->allMainWindows().count() > 0) {
+ mMainWindow = HbInstance::instance()->allMainWindows().first();
+ }
+ mHourElementWidth = calculateHourElementWidth();
+ mHourElementHeight = calculateHourElementHeight();
+}
+
+/*!
+ \brief Calculates the width of hour element according to UI spec.
+
+ \return Calculated width of hour element
+ */
+qreal CalenDayUtils::calculateHourElementWidth() const
+{
+ HbStyle style;
+ HbDeviceProfile deviceProfile;
+ qreal unitInPixels = deviceProfile.unitValue();
+
+ // Calculate element's preferred width
+ qreal prefWidth = 0.0;
+ qreal textWidth = 0.0;
+ qreal horizontalSpacing = 0.0;
+
+ textWidth = 8.04 * unitInPixels; // pix (according to UI spec)
+ style.parameter(QString("hb-param-margin-gene-middle-horizontal"),
+ horizontalSpacing, deviceProfile);
+ prefWidth = horizontalSpacing * 2 + textWidth;
+
+ return prefWidth;
+}
+
+/*!
+ \brief Calculates the height of hour element according to UI spec.
+
+ \return Calculated height of hour element
+ */
+qreal CalenDayUtils::calculateHourElementHeight() const
+{
+ HbStyle style;
+ HbDeviceProfile deviceProfile;
+
+ qreal unitInPixels = deviceProfile.unitValue();
+
+ // Calculate element's preferred height
+ qreal prefHeight = 0.0;
+ qreal textHeight = 0.0;
+ qreal verticalSpacing = 0.0;
+
+ qreal bottomSpacer = 3.0 * unitInPixels;
+ style.parameter(QString("hb-param-text-height-secondary"), textHeight,
+ deviceProfile);
+ style.parameter(QString("hb-param-margin-gene-middle-vertical"),
+ verticalSpacing, deviceProfile);
+
+ prefHeight = textHeight * 2; //time + ampm
+ prefHeight += verticalSpacing * 2;
+ prefHeight += bottomSpacer;
+
+ return prefHeight;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/src/calendayview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,516 @@
+/*
+ * Copyright (c) 2010 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: CalenDayView class definition.
+ *
+ */
+
+//system includes
+#include <QDateTime>
+#include <QGraphicsLinearLayout>
+#include <xqsettingsmanager.h>
+#include <hbaction.h>
+#include <hbmenu.h>
+#include <hbmainwindow.h>
+#include <hbmodeliterator.h>
+#include <hbstyleloader.h>
+#include <hbgroupbox.h>
+#include <hbextendedlocale.h>
+#include <agendautil.h>
+//user includes
+#include "calendayview.h"
+#include "calencontext.h"
+#include "calenservices.h"
+#include "calendocloader.h"
+#include "calendateutils.h" //useful date/time utils
+#include "calendaycontentscrollarea.h"
+#include "calendaycontentwidget.h"
+#include "calendayhourscrollarea.h"
+#include "calendaymodelmanager.h"
+#include "CalenUid.h"
+#include "CalendarPrivateCRKeys.h"
+#include "calenpluginlabel.h"
+#include "calendaymodel.h"
+
+//constants
+
+// -----------------------------------------------------------------------------
+// CalenDayView()
+// Constructor.
+// -----------------------------------------------------------------------------
+//
+CalenDayView::CalenDayView(MCalenServices &services) :
+ CalenNativeView(services), mContentScrollArea(NULL), mContentWidget(NULL),
+ mHourScrollArea(NULL), mSettingsManager(NULL),
+ mRegionalInfo(XQSettingsKey::TargetCentralRepository, KCRUidCalendar,
+ KCalendarShowRegionalInfo),
+ mServices(services), mRegionalInfoGroupBox(NULL), mGoToTodayMenuAction(NULL)
+{
+ setupMenu();
+
+ // Create model manager
+ mModelManager = new CalenDayModelManager(mServices, true, this);
+
+ mVLayout = new QGraphicsLinearLayout(Qt::Vertical, NULL);
+ mVLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+ mVLayout->setSpacing(0.0);
+
+ // Create heading label and insert into layout
+ mHeadingLabel = new HbGroupBox();
+ HbEffect::add(mHeadingLabel, ":/fade_out.fxml", "fadeOut");
+ HbEffect::add(mHeadingLabel, ":/fade_in.fxml", "fadeIn");
+
+ mSettingsManager = new XQSettingsManager(this);
+
+ // Add day info
+ mVLayout->addItem(mHeadingLabel);
+
+ //show regional info if set so
+ showRegionalInformationFadeIn();
+ mSettingsManager->startMonitoring(mRegionalInfo);
+
+ // Put hour scroll area and content scroll area into horizontal layout
+ QGraphicsLinearLayout *hLayout = new QGraphicsLinearLayout(Qt::Horizontal, NULL);
+ hLayout->setContentsMargins(0.0, 0.0, 0.0, 0.0);
+ hLayout->setSpacing(0.0);
+
+ // Create scroll area for content (events)
+ mContentScrollArea = new CalenDayContentScrollArea(this);
+
+ // Create and apply central widget for scroll area
+ mContentWidget = new CalenDayContentWidget(*mModelManager, mContentScrollArea);
+ mContentScrollArea->setContentWidget(mContentWidget);
+
+ // Create scroll area for hour elements
+ mHourScrollArea = new CalenDayHourScrollArea(this);
+
+ hLayout->addItem(mHourScrollArea);
+ hLayout->addItem(mContentScrollArea);
+
+ mVLayout->addItem(hLayout);
+ setLayout(mVLayout);
+
+ setupSlots();
+
+ //setup Back functionality
+ if (ECalenDayView != mServices.getFirstView()) {
+ HbAction* action = new HbAction(Hb::BackNaviAction, this);
+ setNavigationAction(action);
+ // Connect to the signal triggered by clicking on back button.
+ connect(action, SIGNAL(triggered()), this, SLOT(onBack()));
+ }
+
+ HbStyleLoader::registerFilePath(":/calendayhourelement.css");
+ HbStyleLoader::registerFilePath(":/calendayhourelement.widgetml");
+ HbStyleLoader::registerFilePath(":/calendayitem.css");
+ HbStyleLoader::registerFilePath(":/calendayitem.widgetml");
+}
+
+// -----------------------------------------------------------------------------
+// ~CalenDayView()
+// Destructor.
+// -----------------------------------------------------------------------------
+//
+CalenDayView::~CalenDayView()
+{
+ mSettingsManager->stopMonitoring(mRegionalInfo);
+}
+
+// -----------------------------------------------------------------------------
+// onLocaleChanged()
+// Handles locale change.
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::onLocaleChanged(int reason)
+{
+ Q_UNUSED( reason )
+}
+
+// -----------------------------------------------------------------------------
+// From CalenView
+// doPopulation()
+// Handles view (re)population.
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::doPopulation()
+{
+ // Triggers fading effect for heading label
+ getCurrentDate();
+ HbEffect::start(mHeadingLabel, "fadeOut", this, "setHeadingText");
+
+ mModelManager->refreshAllModels();
+ //Set date and time for hour scroll area.
+ //It's later used by hour element to display timeline
+ mHourScrollArea->setDateTime(mDate);
+
+ //set in menu go to today visible
+ QDateTime currentDateTime = QDateTime::currentDateTime();
+ if (mGoToTodayMenuAction and currentDateTime.date() == mDate.date()) {
+ mGoToTodayMenuAction->setVisible(false);
+ }
+ else if(mGoToTodayMenuAction) {
+ mGoToTodayMenuAction->setVisible(true);
+ }
+
+ setupViewport();
+
+ populationComplete();
+}
+
+// -----------------------------------------------------------------------------
+// From CalenView
+// populationComplete()
+// Informs the organizer that the view's population is complete.
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::populationComplete()
+{
+ CalenNativeView::populationComplete();
+}
+
+// -----------------------------------------------------------------------------
+// From MCalenNotificationHandler
+// HandleNotification()
+// The function handles calendar notifications.
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::HandleNotification(const TCalenNotification notification)
+{
+ Q_UNUSED( notification )
+}
+
+// -----------------------------------------------------------------------------
+// setupView()
+// Sets up the view accroding to the 'xml'
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::setupView(CalenDocLoader* docLoader)
+{
+ Q_UNUSED( docLoader )
+}
+
+//private slots
+
+// -----------------------------------------------------------------------------
+// onBack()
+// Handles 'back' functionality;
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::onBack()
+{
+ TRAP_IGNORE(mServices.IssueCommandL(ECalenMonthView));
+}
+
+// -----------------------------------------------------------------------------
+// dayChange()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::dayChangeStarted(CalenScrollDirection direction)
+{
+ if (direction == ECalenScrollToNext) {
+ mDate = mDate.addDays(1);
+ }
+ else {
+ mDate = mDate.addDays(-1);
+ }
+
+ //set in menu go to today visible
+ QDateTime currentDateTime = QDateTime::currentDateTime();
+ if (mGoToTodayMenuAction and currentDateTime.date() == mDate.date()) {
+ mGoToTodayMenuAction->setVisible(false);
+ }
+ else if(mGoToTodayMenuAction) {
+ mGoToTodayMenuAction->setVisible(true);
+ }
+
+ // Triggers fading effect for heading label.
+ HbEffect::start(mHeadingLabel, "fadeOut", this, "setHeadingText");
+ HbEffect::start(mRegionalInfoGroupBox, "fadeOut", this, "showRegionalInformation");
+
+ mServices.Context().setFocusDate(mDate);
+}
+
+// -----------------------------------------------------------------------------
+// dayChanged()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::dayChanged(CalenScrollDirection direction)
+{
+ mModelManager->viewsScrollingFinished(direction);
+ mHourScrollArea->setDateTime(mDate);
+}
+
+// -----------------------------------------------------------------------------
+// getCurrentDate()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::getCurrentDate()
+{
+ mDate = CalenNativeView::mServices.Context().focusDateAndTime();
+}
+
+// -----------------------------------------------------------------------------
+// setupMenu()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::setupMenu()
+{
+ menu()->addAction(hbTrId("txt_calendar_opt_new_event"), this, SLOT(runNewMeeting()));
+ //get pointer to this position, because need to change visibility
+ mGoToTodayMenuAction = menu()->addAction(hbTrId("txt_calendar_opt_go_to_today"), this, SLOT(runGoToToday()));
+ menu()->addAction(hbTrId("txt_calendar_opt_go_to_date"), this, SLOT(goToDate()));
+ //TODO: Add id for this text
+ //"Switch to Agenda view"
+ menu()->addAction(hbTrId("txt_calendar_opt_switch_to_agenda_view"), this, SLOT(runChangeToAgendaView()));
+ //TODO: Add id for this text (lunar data)
+ //"Show lunar data"
+ if (pluginEnabled())
+ {
+ menu()->addAction(hbTrId("txt_calendar_opt_show_lunar_data"), this, SLOT(runLunarData()));
+ }
+ menu()->addAction(hbTrId("txt_calendar_opt_settings"), this, SLOT(launchSettingsView()));
+}
+
+/*!
+ \brief Ot change Day view to Agenda View
+ */
+void CalenDayView::runChangeToAgendaView()
+{
+ changeView(ECalenAgendaView);
+}
+
+/*!
+ \brief Shows lunar data in popup box
+ */
+void CalenDayView::runLunarData()
+{
+ TRAP_IGNORE(mServices.IssueCommandL(ECalenRegionalPluginTapEvent));
+}
+
+// -----------------------------------------------------------------------------
+// setupSlots()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::setupSlots()
+{
+ // Connecting other view-related signals/slots
+ connect(mContentScrollArea,
+ SIGNAL(scrollAreaMoveStarted(CalenScrollDirection)), this,
+ SLOT(dayChangeStarted(CalenScrollDirection)));
+
+ connect(mContentScrollArea,
+ SIGNAL(scrollAreaMoveFinished(CalenScrollDirection)), mContentWidget,
+ SLOT(relayoutWidgets(CalenScrollDirection)));
+
+ connect(mContentWidget, SIGNAL(
+ widgetsRelayoutFinished(CalenScrollDirection)), mContentScrollArea,
+ SLOT(scrollToMiddleWidget()));
+
+ connect(mContentWidget,
+ SIGNAL(widgetsRelayoutFinished(CalenScrollDirection)), this,
+ SLOT(dayChanged(CalenScrollDirection)));
+
+ connect(mContentWidget, SIGNAL(scrollPositionChanged(const QPointF &)),
+ mHourScrollArea, SLOT(scrollVertically(const QPointF &)));
+
+ connect(mHourScrollArea, SIGNAL(scrollPositionChanged(const QPointF &)),
+ mContentWidget, SLOT(widgetScrolled(const QPointF &)));
+
+ connect(mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
+ this, SLOT(showHideRegionalInformationChanged(XQSettingsKey, QVariant)));
+}
+
+// -----------------------------------------------------------------------------
+// runNewMeeting()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::runNewMeeting()
+{
+ QDateTime dateTime(mDate);
+ TRAP_IGNORE(
+ dateTime.setTime(mServices.Context().defaultCalTimeForViewsL().time());
+ mServices.Context().setFocusDateAndTime(dateTime);
+ mServices.IssueCommandL(ECalenNewMeeting)
+ );
+}
+
+// -----------------------------------------------------------------------------
+// runGoToToday()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::runGoToToday()
+{
+ mServices.Context().setFocusDateAndTime(CalenDateUtils::today());
+ TRAP_IGNORE(mServices.IssueCommandL(ECalenGotoToday));
+ refreshViewOnGoToDate();
+}
+
+
+// -----------------------------------------------------------------------------
+// changeView()
+// -----------------------------------------------------------------------------
+//
+void CalenDayView::changeView(TCalenCommandId viewId)
+{
+ TRAP_IGNORE(mServices.IssueCommandL(viewId));
+}
+
+// ----------------------------------------------------------------------------
+// CalenDayView::setHeadingText
+// Sets heading text according to date from model and locale.
+// It's connected to modelReset signal
+// ----------------------------------------------------------------------------
+//
+void CalenDayView::setHeadingText(const HbEffect::EffectStatus &status)
+{
+ Q_UNUSED(status)
+
+ // Format the date as per the device locale settings
+ HbExtendedLocale systemLocale = HbExtendedLocale::system();
+
+ // Get localised name of the day from locale
+ QString dayString = systemLocale.dayName(mDate.date().dayOfWeek());
+ // Append a single space
+ dayString.append(" ");
+ // Set the heading
+
+ // Append the date which is formatted as per the locale
+ mHeadingLabel->setHeading(hbTrId("txt_calendar_subhead_1_2").arg(dayString).arg(
+ systemLocale.format(mDate.date(), r_qtn_date_usual_with_zero)));
+
+ HbEffect::start(mHeadingLabel, "fadeIn");
+}
+
+// ----------------------------------------------------------------------------
+// CalenDayView::showHideRegionalInformation
+// To run effect on lunar data label
+// ----------------------------------------------------------------------------
+//
+void CalenDayView::showRegionalInformation(const HbEffect::EffectStatus &status)
+{
+ Q_UNUSED(status);
+ showRegionalInformationFadeIn();
+}
+
+// ----------------------------------------------------------------------------
+// CalenDayView::showRegionalInformationFadeIn
+// To run effect on lunar data label and change text according to date change
+// ----------------------------------------------------------------------------
+//
+void CalenDayView::showRegionalInformationFadeIn()
+ {
+ showHideRegionalInformationChanged(mRegionalInfo, 3);
+ HbEffect::start(mRegionalInfoGroupBox, "fadeIn");
+ }
+
+// ----------------------------------------------------------------------------
+// CalenDayView::showHideRegionalInformationChanged
+// To Show and hide regional plugin label depends upon settings
+// ----------------------------------------------------------------------------
+//
+void CalenDayView::showHideRegionalInformationChanged(const XQSettingsKey& key, const QVariant&)
+ {
+ if (key.key() == mRegionalInfo.key())
+ {
+ int showRegionalInfo =
+ mSettingsManager->readItemValue(mRegionalInfo).toUInt();
+
+ if (showRegionalInfo)
+ {
+ QString *pluginString = pluginText();
+ if (pluginString)
+ {
+ if (!mRegionalInfoGroupBox)
+ {
+ mRegionalInfoGroupBox = new HbGroupBox();
+ CalenPluginLabel *regionalInfo = new CalenPluginLabel(
+ mServices, this);
+ HbEffect::add(mRegionalInfoGroupBox, ":/fade_out.fxml",
+ "fadeOut");
+ HbEffect::add(mRegionalInfoGroupBox, ":/fade_in.fxml", "fadeIn");
+
+ // add margins to calenpluginlabel
+
+ HbStyle style;
+ HbDeviceProfile deviceProfile;
+ qreal marginLeft = 0.0;
+ qreal marginRight = 0.0;
+ qreal marginTop = 0.0;
+ qreal marginBottom = 0.0;
+ style.parameter(QString("hb-param-margin-gene-left"), marginLeft, deviceProfile);
+ style.parameter(QString("hb-param-margin-gene-right"), marginRight, deviceProfile);
+ style.parameter(QString("hb-param-margin-gene-top"), marginTop, deviceProfile);
+ style.parameter(QString("hb-param-margin-gene-bottom"), marginBottom, deviceProfile);
+
+ regionalInfo->setContentsMargins(1, 1, 1, 1);
+
+ // qreal width = mRegionalInfoGroupBox->size().width();
+ // qreal height = mRegionalInfoGroupBox->size().height() + marginTop + marginBottom;
+
+ // mRegionalInfoGroupBox->resize(width, height);
+
+ mRegionalInfoGroupBox->setContentWidget(regionalInfo);
+ }
+
+ if (pluginEnabled())
+ {
+ HbLabel *pluginInfoLabel = qobject_cast<HbLabel *> (
+ mRegionalInfoGroupBox->contentWidget());
+
+ pluginInfoLabel->setPlainText(*pluginString);
+
+ mVLayout->insertItem(1, mRegionalInfoGroupBox);
+ }
+ }
+ }
+ else
+ {
+
+ if (mRegionalInfoGroupBox)
+ {
+ mVLayout->removeItem(mRegionalInfoGroupBox);
+ delete mRegionalInfoGroupBox;
+ mRegionalInfoGroupBox = NULL;
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CalenDayView::setupViewport
+// Scrolls view according to current day and events
+// ----------------------------------------------------------------------------
+//
+void CalenDayView::setupViewport()
+{
+ QDateTime currentTime = QDateTime::currentDateTime();
+
+ //Filter flags (only timed events)
+ AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(
+ AgendaUtil::IncludeAppointments );
+ QList<AgendaEntry> list;
+ // Fetch the instance list from the agenda interface
+ list = mServices.agendaInterface()->fetchEntriesInRange(currentTime, currentTime, filter);
+
+ // If we have event in current day and hour, scroll to this event
+ if(mDate.date() == currentTime.date() && !list.isEmpty()){
+ int hourToScrollTo(list.first().startTime().time().hour());
+ mHourScrollArea->scrollToHour(hourToScrollTo);
+ }
+ else{
+ //Scroll view to 7am
+ mHourScrollArea->scrollToHour(7);
+ }
+}
+
+//End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,26 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for calendayview test code
+#
+
+# include test components here
+
+TEMPLATE = subdirs
+
+SUBDIRS += unittests
+
+CONFIG += ordered
+
+# End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/calendayinfo.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,117 @@
+/*
+* Copyright (c) 2007-2010 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: Mocked classes for testing CalenDayInfo class
+*
+*/
+
+#ifndef CALENDAYINFO_H
+#define CALENDAYINFO_H
+
+#include <calinstance.h>
+#include "caleninstanceid.h"
+
+const int KFSCalMaxDescriptionLength = 100;
+
+/*!
+ Mocked struct SCalenApptInfo
+ */
+struct SCalenApptInfo
+{
+ QModelIndex iIndex;
+ QDateTime iStartTime;
+ QDateTime iEndTime;
+ bool iAllDay;
+ TCalenInstanceId iId;
+ AgendaEntry::Status iStatus;
+ TBufC<KFSCalMaxDescriptionLength> iSummary;
+ TUint32 iColor;
+};
+
+/*!
+ Mocked class CalenTimeColumn
+ */
+class CalenTimeColumn
+{
+public:
+ CalenTimeColumn() {
+
+ }
+
+ ~CalenTimeColumn() {
+
+ }
+};
+
+/*!
+ Mocked class CalenTimeRegion
+ */
+class CalenTimeRegion
+{
+public:
+ CalenTimeRegion() {
+
+ }
+
+ ~CalenTimeRegion() {
+
+ }
+
+ QList<CalenTimeColumn> iColumns;
+
+ int iStartSlot;
+ int iEndSlot;
+};
+
+/*!
+ Mocked class CalenDayInfo
+ */
+class CalenDayInfo
+{
+public:
+ enum TSlotsInHour
+ {
+ EOne = 1, ETwo, EThree, EFour
+ };
+
+public:
+
+ CalenDayInfo(TSlotsInHour aSlotsInHour) {
+ Q_UNUSED(aSlotsInHour)
+ }
+ virtual ~CalenDayInfo();
+
+ void GetLocation( const SCalenApptInfo& aItemInfo, int& aStartSlot,
+ int& aEndSlot, int& aColumnIndex, int& aColumns ) {
+ Q_UNUSED(aItemInfo)
+ Q_UNUSED(aStartSlot)
+ Q_UNUSED(aEndSlot)
+ Q_UNUSED(aColumnIndex)
+ Q_UNUSED(aColumns)
+ }
+
+ int AlldayCount() {
+ return 0;
+ }
+
+ const QList<CalenTimeRegion>& RegionList() const {
+ return mList;
+ }
+
+public:
+ QList<CalenTimeRegion> mList;
+};
+
+#endif // CALENDAYINFO_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/calendayview.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,73 @@
+/*
+* Copyright (c) 2010 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: Mocked classes for testing CalenDayContainer class
+*
+*/
+
+#ifndef CALENSERVICES_H
+#define CALENSERVICES_H
+
+/*!
+ Mocked class MCalenServices
+ */
+class MCalenServices
+{
+public:
+ MCalenServices() {
+
+ }
+
+ ~MCalenServices() {
+
+ }
+};
+
+#endif // CALENSERVICES_H
+
+#ifndef CALEDAYVIEW_H
+#define CALEDAYVIEW_H
+
+#include <HbView>
+
+enum TCalenCommandId
+{
+ ECalenMonthView = 0,
+ ECalenWeekView,
+ ECalenAgendaView
+};
+
+/*!
+ Mocked class CalenDayView
+ */
+class CalenDayView : public HbView
+{
+public:
+
+ CalenDayView(MCalenServices &services) {
+ Q_UNUSED(services)
+ }
+
+ virtual ~CalenDayView() {
+
+ }
+
+ void changeView(TCalenCommandId viewId) {
+ Q_UNUSED(viewId)
+ }
+};
+
+#endif // CALEDAYVIEW_H
+
+//End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/caleninstanceid.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2010 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: Mocked classes for testing CalenDayContainer class
+*
+*/
+
+#ifndef CALENINSTANCEID_H
+#define CALENINSTANCEID_H
+
+/*!
+ Mocked class TCalenInstanceId
+ */
+class TCalenInstanceId
+{
+public:
+ TCalenInstanceId() {
+
+ }
+
+ static TCalenInstanceId nullInstanceId() {
+ return TCalenInstanceId();
+ }
+
+public: // data members
+ ulong mEntryLocalUid;
+ QDateTime mInstanceTime;
+ AgendaEntry::Type mType;
+ bool mInstanceViewed;
+};
+
+#endif // CALENINSTANCEID_H
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/hbinstance.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,98 @@
+/*
+* Copyright (c) 2010 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: Mocked classes for testing CalenDayUtils class
+*
+*/
+
+#ifndef HBMAINWINDOW_H
+#define HBMAINWINDOW_H
+
+#include <HbView>
+
+// Test variables
+extern QRectF gTestWindowRect;
+extern Qt::Orientation gTestOrientation;
+
+/*!
+ Mocked class HbMainWindow (simulating window in unittests)
+ */
+class HbMainWindow
+{
+public:
+ HbMainWindow() {
+ mView = new HbView();
+ }
+
+ ~HbMainWindow() {
+ if (mView) {
+ delete mView;
+ mView = 0;
+ }
+ }
+
+ QRectF layoutRect() const {
+ return gTestWindowRect;
+ }
+
+ Qt::Orientation orientation() const {
+ return gTestOrientation;
+ }
+
+ HbView *HbMainWindow::currentView() const {
+ return mView;
+ }
+
+ HbView *mView;
+};
+
+#endif // HBMAINWINDOW_H
+
+#ifndef HBINSTANCE_H
+#define HBINSTANCE_H
+
+#include <QList>
+
+/*!
+ Mocked class HbInstance (simulating hbinstance in unittests)
+ */
+class HbInstance
+{
+public:
+
+ static HbInstance *instance() {
+ return new HbInstance();
+ }
+
+ QList<HbMainWindow *> allMainWindows() const {
+ return mMainWindows;
+ }
+
+ HbInstance() {
+ HbMainWindow* window = new HbMainWindow();
+ mMainWindows.append(window);
+ }
+
+ ~HbInstance() {
+ for (int i = 0; i < mMainWindows.count(); i++) {
+ delete mMainWindows[i];
+ }
+ mMainWindows.clear();
+ }
+
+ QList<HbMainWindow *> mMainWindows;
+};
+
+#endif // HBINSTANCE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/rom/unittest_calendaycontainer.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYCONTAINER_IBY
+#define UNITTEST_CALENDAYCONTAINER_IBY
+
+S60_APP_EXE(unittest_calendaycontainer)
+S60_APP_RESOURCE(unittest_calendaycontainer)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendaycontainer_reg.rsc \private\10003a3f\import\apps\unittest_calendaycontainer_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYCONTAINER_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/unittest_calendaycontainer.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,115 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContainerWidget
+ *
+ */
+#include <QtTest/QtTest>
+
+#include "calendaycontainer.h"
+
+// Test variables
+QRectF gTestWindowRect = QRectF(0, 0, 10, 20);
+Qt::Orientation gTestOrientation = Qt::Horizontal;
+
+class TestCalenDayContainer : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayContainer();
+ virtual ~TestCalenDayContainer();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayContainer *mContainer;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayContainer::TestCalenDayContainer() :
+ mContainer(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayContainer::~TestCalenDayContainer()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayContainer::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayContainer::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayContainer::init()
+{
+ mContainer = new CalenDayContainer();
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayContainer::cleanup()
+{
+ if (mContainer) {
+ delete mContainer;
+ mContainer = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if container is not initialized
+ 2. Test if container is correcty created
+ */
+void TestCalenDayContainer::testConstructors()
+{
+ //1)
+ CalenDayContainer *testContainer = 0;
+ QVERIFY(!testContainer);
+
+ //2)
+ testContainer = new CalenDayContainer();
+ QVERIFY(testContainer);
+
+ delete testContainer;
+}
+
+QTEST_MAIN(TestCalenDayContainer);
+#include "unittest_calendaycontainer.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontainer/unittest_calendaycontainer.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,71 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendaycontainer
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+# Input
+HEADERS += calendaycontainer.h \
+ calendayutils.h \
+ calendayeventspane.h \
+ calendayitem.h \
+ calendaystatusstrip.h \
+ calendaymodel.h
+
+SOURCES += unittest_calendaycontainer.cpp \
+ calendaycontainer.cpp \
+ calendayutils.cpp \
+ calendayeventspane.cpp \
+ calendayitem.cpp \
+ calendaystatusstrip.cpp \
+ calendaymodel.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface \
+ -lxqsettingsmanager
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendaycontainer.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendaycontainer.iby)"
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface \
+ -lcalencommonutils
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontentwidget/calendaycontentwidgetheaders.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2009 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: Mocked classes for testing CalenDayContentWidget class
+*
+*/
+
+#ifndef CALENSERVICES_H
+#define CALENSERVICES_H
+
+/*!
+ Mocked class MCalenServices
+ */
+class MCalenServices
+{
+public:
+ MCalenServices() {
+
+ }
+
+ ~MCalenServices() {
+
+ }
+};
+
+#endif // CALENSERVICES_H
+
+
+#ifndef CALENDAYITEMVIEW_H
+#define CALENDAYITEMVIEW_H
+
+#include <QGraphicsItem>
+#include <QPointF>
+#include <HbWidget>
+#include <HbModelIterator>
+
+/*!
+ Mocked class CalenDayItemView
+ */
+class CalenDayItemView : public HbWidget
+{
+ Q_OBJECT
+
+public:
+ CalenDayItemView(MCalenServices &services, HbModelIterator *iterator,
+ QGraphicsItem *parent) : HbWidget(parent) {
+ Q_UNUSED(services)
+ Q_UNUSED(iterator)
+ }
+
+ void scrollVertically(const QPointF &newPosition) {
+ Q_UNUSED(newPosition)
+ }
+
+signals:
+ void scrollPositionChanged(const QPointF&);
+};
+
+#endif // CALENDAYITEMVIEW_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontentwidget/calendaymodelmanager.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,97 @@
+/*
+* Copyright (c) 2009 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: Mocked classes for testing CalenDayContentWidget class
+*
+*/
+
+
+#include "calendaycontentwidgetheaders.h"
+
+
+#ifndef CALENDAYMODELMANAGER_H
+#define CALENDAYMODELMANAGER_H
+
+#include <QAbstractListModel>
+
+/*!
+ Test class TestAbstractListModel
+ */
+class TestAbstractListModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ TestAbstractListModel() : QAbstractListModel() {
+ }
+
+ ~TestAbstractListModel() {
+ }
+
+ int rowCount(const QModelIndex &parent) const {
+ Q_UNUSED(parent);
+ return 0;
+ }
+
+ QVariant data(const QModelIndex &index, int role) const {
+ Q_UNUSED(index);
+ Q_UNUSED(role);
+ return QVariant(0);
+ }
+};
+
+/*!
+ Test class CalenDayModelManager
+ */
+class CalenDayModelManager : public QObject
+{
+public:
+ enum ModelDay {
+ PreviousDay = 0,
+ CurrentDay = 1,
+ NextDay = 2,
+ NumberOfDays
+ };
+
+ CalenDayModelManager() : QObject() {
+ mModel = new TestAbstractListModel();
+ mServices = new MCalenServices();
+ }
+
+ ~CalenDayModelManager() {
+ if (mModel) {
+ delete mModel;
+ mModel = NULL;
+ }
+
+ if (mServices) {
+ delete mServices;
+ mServices = NULL;
+ }
+ }
+
+ QAbstractItemModel &getModel(CalenDayModelManager::ModelDay day) {
+ Q_UNUSED(day)
+ return *mModel;
+ }
+
+ MCalenServices &getServices() {
+ return *mServices;
+ }
+
+public:
+ TestAbstractListModel *mModel;
+ MCalenServices *mServices;
+};
+
+#endif//CALENDAYMODELMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontentwidget/rom/unittest_calendaycontentwidget.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYCONTENTWIDGET_IBY
+#define UNITTEST_CALENDAYCONTENTWIDGET_IBY
+
+S60_APP_EXE(unittest_calendaycontentwidget)
+S60_APP_RESOURCE(unittest_calendaycontentwidget)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendaycontentwidget_reg.rsc \private\10003a3f\import\apps\unittest_unittest_calendaycontentwidget_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYCONTENTWIDGET_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontentwidget/unittest_calendaycontentwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,111 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+
+
+#include "calendaymodelmanager.h"
+#include "calendaycontentwidget.h"
+
+class TestCalenContentWidget : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenContentWidget();
+ virtual ~TestCalenContentWidget();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayModelManager *mModelMgr;
+ CalenDayContentWidget *mContentWidget;
+};
+
+/*!
+ Constructor
+ */
+TestCalenContentWidget::TestCalenContentWidget() :
+ mModelMgr(NULL), mContentWidget(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenContentWidget::~TestCalenContentWidget()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenContentWidget::initTestCase()
+{
+ mModelMgr = new CalenDayModelManager();
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenContentWidget::cleanupTestCase()
+{
+ if (mModelMgr) {
+ delete mModelMgr;
+ }
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenContentWidget::init()
+{
+
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenContentWidget::cleanup()
+{
+ if (mContentWidget) {
+ delete mContentWidget;
+ mContentWidget = NULL;
+ }
+}
+
+/*!
+ Test class for constructors
+ 1. Test if content widget is correcty created
+ */
+void TestCalenContentWidget::testConstructors()
+{
+ QVERIFY(!mContentWidget);
+ mContentWidget = new CalenDayContentWidget(*mModelMgr);
+ QVERIFY(mContentWidget);
+}
+
+QTEST_MAIN(TestCalenContentWidget);
+#include "unittest_calendaycontentwidget.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaycontentwidget/unittest_calendaycontentwidget.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendaycontentwidget
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendaymodelmanager.h \
+ calendaycontentwidgetheaders.h \
+ calendaycontentwidget.h
+
+
+SOURCES += unittest_calendaycontentwidget.cpp \
+ calendaycontentwidget.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendaycontentwidget.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendaycontentwidget.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayeventspane/rom/unittest_calendayeventspane.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYEVENTSPANE_IBY
+#define UNITTEST_CALENDAYEVENTSPANE_IBY
+
+S60_APP_EXE(unittest_calendayeventspane)
+S60_APP_RESOURCE(unittest_calendayeventspane)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayeventspane_reg.rsc \private\10003a3f\import\apps\unittest_calendayeventspane_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYEVENTSPANE_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayeventspane/unittest_calendayeventspane.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+#include <QPen>
+
+#include "calendayeventspane.h"
+
+class TestCalenEventsPane : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenEventsPane();
+ virtual ~TestCalenEventsPane();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayEventsPane *mEventsPane;
+};
+
+/*!
+ Constructor
+ */
+TestCalenEventsPane::TestCalenEventsPane() :
+ mEventsPane(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenEventsPane::~TestCalenEventsPane()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenEventsPane::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenEventsPane::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenEventsPane::init()
+{
+ mEventsPane = new CalenDayEventsPane();
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenEventsPane::cleanup()
+{
+ if (mEventsPane) {
+ delete mEventsPane;
+ mEventsPane = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if events pane is not initialized
+ 2. Test if events pane is correcty created
+ */
+void TestCalenEventsPane::testConstructors()
+{
+ //1)
+ CalenDayEventsPane *testEventsPane = 0;
+ QVERIFY(!testEventsPane);
+
+ //2)
+ testEventsPane = new CalenDayEventsPane();
+ QVERIFY(testEventsPane);
+ delete testEventsPane;
+}
+
+QTEST_MAIN(TestCalenEventsPane);
+#include "unittest_calendayeventspane.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayeventspane/unittest_calendayeventspane.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,48 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayeventspane
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendayeventspane.h
+
+
+SOURCES += unittest_calendayeventspane.cpp \
+ calendayeventspane.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayeventspane.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayeventspane.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayhourelement/rom/unittest_calendayhourelement.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYHOURELEMENT_IBY
+#define UNITTEST_CALENDAYHOURELEMENT_IBY
+
+S60_APP_EXE(unittest_calendayhourelement)
+S60_APP_RESOURCE(unittest_calendayhourelement)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayhourelement_reg.rsc \private\10003a3f\import\apps\unittest_calendayhourelement_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYHOURELEMENT_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayhourelement/unittest_calendayhourelement.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,113 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+
+#include "calendayhourelement.h"
+
+class TestCalenDayHourElement : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayHourElement();
+ virtual ~TestCalenDayHourElement();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayHourElement *mHourElement;
+ QTime mTime;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayHourElement::TestCalenDayHourElement() :
+ mHourElement(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayHourElement::~TestCalenDayHourElement()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayHourElement::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayHourElement::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayHourElement::init()
+{
+ mHourElement = new CalenDayHourElement(mTime);
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayHourElement::cleanup()
+{
+ if (mHourElement) {
+ delete mHourElement;
+ mHourElement = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if content widget is not initialized
+ 2. Test if content widget is correcty created
+ */
+void TestCalenDayHourElement::testConstructors()
+{
+ //1)
+ CalenDayHourElement *testHourElement = 0;
+ QVERIFY(!testHourElement);
+
+ testHourElement = new CalenDayHourElement(mTime);
+
+ QVERIFY(testHourElement);
+
+ delete testHourElement;
+}
+
+QTEST_MAIN(TestCalenDayHourElement);
+#include "unittest_calendayhourelement.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayhourelement/unittest_calendayhourelement.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,50 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayhourelement
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendayhourelement.h \
+ calendayhourscrollarea.h
+
+
+SOURCES += unittest_calendayhourelement.cpp \
+ calendayhourelement.cpp \
+ calendayhourscrollarea.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayhourelement.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayhourelement.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayhourscrollarea/rom/unittest_calendayhourscrollarea.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYHOURSCROLLAREA_IBY
+#define UNITTEST_CALENDAYHOURSCROLLAREA_IBY
+
+S60_APP_EXE(unittest_calendayhourscrollarea)
+S60_APP_RESOURCE(unittest_calendayhourscrollarea)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayhourscrollarea_reg.rsc \private\10003a3f\import\apps\unittest_calendayhourscrollarea_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYHOURSCROLLAREA_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayhourscrollarea/unittest_calendayhourscrollarea.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,112 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+
+#include "calendayhourscrollarea.h"
+
+class TestCalenDayHourScrollArea : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayHourScrollArea();
+ virtual ~TestCalenDayHourScrollArea();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayHourScrollArea *mHourScrollArea;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayHourScrollArea::TestCalenDayHourScrollArea() :
+ mHourScrollArea(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayHourScrollArea::~TestCalenDayHourScrollArea()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayHourScrollArea::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayHourScrollArea::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayHourScrollArea::init()
+{
+ mHourScrollArea = new CalenDayHourScrollArea();
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayHourScrollArea::cleanup()
+{
+ if (mHourScrollArea) {
+ delete mHourScrollArea;
+ mHourScrollArea = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if hour scroll area is not initialized
+ 2. Test if hour scroll area is correcty created
+ */
+void TestCalenDayHourScrollArea::testConstructors()
+{
+ //1)
+ CalenDayHourScrollArea *testHourScrollArea = 0;
+ QVERIFY(!testHourScrollArea);
+
+ testHourScrollArea = new CalenDayHourScrollArea();
+
+ QVERIFY(testHourScrollArea);
+
+ delete testHourScrollArea;
+}
+
+QTEST_MAIN(TestCalenDayHourScrollArea);
+#include "unittest_calendayhourscrollarea.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayhourscrollarea/unittest_calendayhourscrollarea.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,61 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayhourscrollarea
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+# Input
+HEADERS += calendayhourelement.h \
+ calendayhourscrollarea.h \
+ calendayutils.h
+
+
+SOURCES += unittest_calendayhourscrollarea.cpp \
+ calendayhourelement.cpp \
+ calendayhourscrollarea.cpp \
+ calendayutils.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayhourscrollarea.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayhourscrollarea.iby)"
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface \
+ -lcalencommonutils
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayinfo/rom/unittest_calendayinfo.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYINFO_IBY
+#define UNITTEST_CALENDAYINFO_IBY
+
+S60_APP_EXE(unittest_calendayinfo)
+S60_APP_RESOURCE(unittest_calendayinfo)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayinfo_reg.rsc \private\10003a3f\import\apps\unittest_calendayinfo_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYINFO_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayinfo/unittest_calendayinfo.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,116 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+
+
+#include <HbMainWindow>
+
+#include "calendayinfo.h"
+#include "calendaycommonheaders.h"
+
+class TestCalenDayInfo : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayInfo();
+ virtual ~TestCalenDayInfo();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayInfo *mInfo;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayInfo::TestCalenDayInfo() :
+ mInfo(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayInfo::~TestCalenDayInfo()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayInfo::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayInfo::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayInfo::init()
+{
+ mInfo = new CalenDayInfo(CalenDayInfo::ETwo);
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayInfo::cleanup()
+{
+ if (mInfo) {
+ delete mInfo;
+ mInfo = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if CalenDayInfo is not initialized
+ 2. Test if CalenDayInfo is correcty created
+ */
+void TestCalenDayInfo::testConstructors()
+{
+ //1)
+ CalenDayInfo *testCalenDayInfo = 0;
+ QVERIFY(!testCalenDayInfo);
+
+ //2)
+ testCalenDayInfo = new CalenDayInfo(CalenDayInfo::ETwo);
+ QVERIFY(testCalenDayInfo);
+}
+
+
+QTEST_MAIN(TestCalenDayInfo);
+
+#include "unittest_calendayinfo.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayinfo/unittest_calendayinfo.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,61 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayinfo
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../inc/ \
+ ../../../inc/ \
+ ../../../../../inc/ \
+ ../../../../../commonutils/inc/
+
+DEPENDPATH += . \
+ ../../inc/ \
+ ../../../inc/ \
+ ../../../../../inc/ \
+ ../../../../../commonutils/inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendayinfo.h \
+ calinstance.h \
+ caleninstanceid.h \
+ calenagendautils.h \
+ calenconstants.h \
+ calendateutils.h
+
+
+SOURCES += unittest_calendayinfo.cpp \
+ calendayinfo.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayinfo.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayinfo.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitem/rom/unittest_calendayitem.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYITEM_IBY
+#define UNITTEST_CALENDAYITEM_IBY
+
+S60_APP_EXE(unittest_calendayitem)
+S60_APP_RESOURCE(unittest_calendayitem)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayitem_reg.rsc \private\10003a3f\import\apps\unittest_calendayitem_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYITEM_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitem/unittest_calendayitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,126 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+
+
+#include "calendayitem.h"
+
+class TestCalenDayItem : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayItem();
+ virtual ~TestCalenDayItem();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+ void testCreateItem();
+
+private:
+ CalenDayItem *mItem;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayItem::TestCalenDayItem() :
+ mItem(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayItem::~TestCalenDayItem()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayItem::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayItem::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayItem::init()
+{
+ mItem = new CalenDayItem();
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayItem::cleanup()
+{
+ if (mItem) {
+ delete mItem;
+ mItem = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if content widget is not initialized
+ 2. Test if content widget is correcty created
+ */
+void TestCalenDayItem::testConstructors()
+{
+ //1)
+ CalenDayItem *testItem = 0;
+ QVERIFY(!testItem);
+
+ //2)
+ testItem = new CalenDayItem();
+ QVERIFY(testItem);
+ delete testItem;
+}
+
+/*!
+ Test function for creating new abstract items.
+ 1. Test if item is created
+ 2. Test if is the same as orginal.
+ */
+void TestCalenDayItem::testCreateItem()
+{
+ HbAbstractViewItem *testItem = mItem->createItem();
+ QVERIFY(testItem);
+
+ delete testItem;
+}
+
+QTEST_MAIN(TestCalenDayItem);
+#include "unittest_calendayitem.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitem/unittest_calendayitem.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,55 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayitem
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+ ../../../../inc/
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendayitem.h \
+ calendaystatusstrip.h
+
+
+SOURCES += unittest_calendayitem.cpp \
+ calendayitem.cpp \
+ calendaystatusstrip.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayitem.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayitem.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/calencontext.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef CALENCONTEXT_H
+#define CALENCONTEXT_H
+
+#include <QDateTime>
+#include "calendayinfo.h"
+
+class MCalenContext
+{
+ public:
+ MCalenContext() {}
+
+ void setFocusDateAndTimeAndInstance( const QDateTime& focusDateTime,
+ const TCalenInstanceId& aInstanceId )
+ {
+ Q_UNUSED(focusDateTime);
+ Q_UNUSED(aInstanceId);
+ }
+
+};
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/calendaycontainer.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,211 @@
+/*
+ * Copyright (c) 2009 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:
+ *
+ */
+
+#ifndef CALENDAYCONTAINER_H
+#define CALENDAYCONTAINER_H
+
+//System includes
+#include <QDateTime>
+
+#include "../../../../../mw/hb/src/hbwidgets/itemviews/hbabstractitemcontainer_p.h"
+
+//User includes
+
+//Forward declarations
+#include "calendayinfo.h"
+
+class CalenDayContainer : public HbAbstractItemContainer
+{
+ Q_OBJECT
+
+public:
+
+ /**
+ * Constructor.
+ */
+ CalenDayContainer(QGraphicsItem *parent = 0)
+ {
+ Q_UNUSED(parent);
+ }
+
+ /**
+ * Destructor.
+ */
+ ~CalenDayContainer(){}
+
+ /**
+ *
+ */
+ void itemAdded (int index, HbAbstractViewItem *item, bool animate)
+ {
+ Q_UNUSED(index);
+ Q_UNUSED(item);
+ Q_UNUSED(animate);
+ }
+
+ /**
+ *
+ */
+ void itemRemoved (HbAbstractViewItem *item, bool animate)
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(animate);
+ }
+
+ /**
+ *
+ */
+ //void reset();
+
+ /**
+ *
+ */
+ void viewResized (const QSizeF &size)
+ {
+ Q_UNUSED(size);
+ }
+
+ /**
+ * Sets day's info structer to the container.
+ *
+ * @param dayInfo Day info.
+ */
+ void setDayInfo( CalenDayInfo* dayInfo )
+ {
+ Q_UNUSED(dayInfo);
+ }
+
+public slots:
+
+ /**
+ * Slot handles layout switch.
+ * @param orientation Current device orientation
+ */
+ void orientationChanged(Qt::Orientation orientation)
+ {
+ Q_UNUSED(orientation);
+ }
+
+protected:
+
+ /**
+ *
+ */
+ HbAbstractViewItem * createDefaultPrototype() const{ return 0;}
+
+ /**
+ *
+ */
+ // void setItemModelIndex(HbAbstractViewItem *item, const QModelIndex &index);
+
+ /**
+ * Updates geometry of a timed event.
+ */
+ // void updateTimedEventGeometry(HbAbstractViewItem *item,
+ // const QModelIndex &index);
+
+ /**
+ * Updates geometry of a all-day events
+ */
+ // void updateAllDayEventGeometry(HbAbstractViewItem *item,
+ // const QModelIndex &index);
+
+ /**
+ * Structure with event layout values.
+ *
+ * eventAreaX X value for event area start.
+ * eventAreaWidth The width of event area.
+ * eventMargin Margins between the multiple events.
+ * slotHeight Half hour slot's height.
+ * unitInPixels no. of pixels in 1un
+ */
+
+ /*struct LayoutValues {
+ LayoutValues()
+ :eventAreaX(0),
+ eventAreaWidth(0),
+ eventMargin(0),
+ slotHeight(0),
+ unitInPixels(0),
+ maxColumns(0)
+ {}
+
+ qreal eventAreaX;
+ qreal eventAreaWidth;
+ qreal eventMargin;
+ qreal slotHeight;
+ qreal unitInPixels;
+ int maxColumns;
+ };
+ */
+ /**
+ * Gets event layout values.
+ *
+ * @param layoutValues structure to be filled with layout data
+ */
+ //void getTimedEventLayoutValues(LayoutValues& layoutValues);
+
+
+ /**
+ * creates absorbers which prevent touching to small items
+ * (according to UI spec items smaller than ... are untouchable)
+ */
+ //void createTouchEventAbsorbers();
+
+ /**
+ *
+ */
+ //TouchEventAbsorber* crateAbsorberBetweenSlots(int startSlot, int endSlot);
+
+private:
+
+ //bool mGeometryUpdated;
+
+ //QDateTime mDateTime;
+
+ /**
+ * Day event info.
+ * Not own.
+ */
+ //CalenDayInfo* mInfo;
+
+ // LayoutValues mLayoutValues;
+ //QList<TouchEventAbsorber*> mAbsorbers;
+};
+
+
+
+class TouchEventAbsorber : public HbWidget
+ {
+ Q_OBJECT
+ public:
+ TouchEventAbsorber(QGraphicsItem *parent=0);
+ ~TouchEventAbsorber();
+
+ protected:
+ void gestureEvent(QGestureEvent *event);
+
+#ifdef _DEBUG
+ void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
+ QWidget *widget);
+#endif
+
+ };
+
+#endif // CALENDAYCONTAINER_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/calendayinfo.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,214 @@
+/*
+ * Copyright (c) 2009 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:
+ *
+ */
+
+#ifndef CALENDAYINFO_H
+#define CALENDAYINFO_H
+
+#include <QtGlobal>
+#include "caleninstanceid.h"
+#include <QtGui>
+
+//from hb_calencommands.hrh
+
+enum TCalenCommandId
+ {
+ ECalenMonthView,
+ ECalenWeekView,
+ ECalenAgendaView,
+ ECalenDayView,
+ ECalenTodoEditor,
+ ECalenTodoEditorDone,
+ ECalenForwardsToDayView,
+ ECalenNextView,
+ ECalenPrevView,
+ ECalenSwitchView,
+ ECalenShowToolbar,
+ ECalenHideToolbar,
+ ECalenUpdateToolbar,
+ ECalenHidePreview,
+ ECalenShowPreview,
+ ECalenStartActiveStep,
+ ECalenGotoToday,
+ ECalenGotoDate,
+ ECalenEventView,
+ ECalenCmdPromptThenEdit,
+ ECalenFasterAppExit,
+ ECalenShowNextDay,
+ ECalenShowPrevDay,
+ ECalenNewMeeting,
+ ECalenNewAnniv,
+ ECalenNewDayNote,
+ ECalenNewReminder,
+ ECalenNewMeetingRequest,
+ ECalenNewEntry,
+ ECalenEditCurrentEntry,
+ ECalenEditSeries,
+ ECalenEditOccurrence,
+ ECalenEditEntryFromViewer,
+ ECalenViewCurrentEntry,
+ ECalenNotifyFocusChange,
+ ECalenCompleteTodo,
+ ECalenRestoreTodo,
+ ECalenSend,
+ ECalenDeleteCurrentEntry,
+ ECalenDeleteEntryWithoutQuery,
+ ECalenDeleteSeries,
+ ECalenDeleteCurrentOccurrence,
+ ECalenDeleteAllEntries,
+ ECalenDeleteEntriesBeforeDate,
+ ECalenCancelDelete,
+ ECalenDeleteEntryFromViewer,
+ ECalenShowSettings,
+ ECalenGetLocation,
+ ECalenShowLocation,
+ ECalenGetLocationAndSave,
+ ECalenMissedAlarmsView,
+ ECalenMissedEventView,
+ ECalenCmdClear,
+ ECalenCmdClearAll,
+ ECalenCmdGotoCalendar,
+ ECalenMissedAlarmsViewFromIdle,
+ ECalenMissedEventViewFromIdle,
+ ECalenLastCommand,
+ ECalenRegionalPluginTapEvent
+ };
+
+//////////////////end of hb_calencommands.hrh
+
+struct SCalenApptInfo
+ {
+ QModelIndex iIndex;
+ QDateTime iStartTime;
+ QDateTime iEndTime;
+ bool iAllDay;
+ TCalenInstanceId iId;
+// AgendaEntry::Status iStatus;
+// AgendaEntry::TReplicationStatus iReplicationStatus;
+ // TBufC<KFSCalMaxDescriptionLength> iSummary;
+ TUint32 iColor;
+ };
+
+class CalenDayInfo
+{
+public:
+
+ enum TSlotsInHour
+ {
+ EOne = 1,
+ ETwo,
+ EThree,
+ EFour
+ };
+
+public: // Constructors and destructor
+
+ /**
+ * C++ default constructor.
+ */
+ CalenDayInfo( TSlotsInHour aSlotsInHour ) {Q_UNUSED(aSlotsInHour);}
+
+public:
+
+ void Reset() {}
+
+ void InsertTimedEvent( const SCalenApptInfo& aItemInfo ) {Q_UNUSED(aItemInfo);}
+
+ //void InsertUntimedEvent( AgendaEntry::Type aType,
+ // const TCalenInstanceId& aId );
+
+ void InsertAlldayEvent( const SCalenApptInfo& aItemInfo ){Q_UNUSED(aItemInfo);}
+
+ //static bool IsAlldayEvent( QDateTime aStart, QDateTime aEnd );
+
+
+ //int SuggestedUntimedSlotPos();
+
+ //int NeededUntimedSlotCount();
+
+ //int UpdateUntimedPos( int aSlot = -1, int aUntimedCount = 0 );
+
+ //int FirstOccupiedSlot();
+
+ //int LastOccupiedSlot();
+
+ //int EarliestEndSlot();
+ //int LastStartSlot();
+
+
+ //int SlotIndexForStartTime( QDateTime aStartTime );
+
+ //int SlotIndexForEndTime( QDateTime aStartTime );
+
+ //void GetLocation( const SCalenApptInfo& aItemInfo,
+ // int& aStartSlot,
+ // int& aEndSlot,
+ // int& aColumnIndex,
+ // int& aColumns );
+
+ //int AlldayCount();
+
+ //int TodoCount();
+
+ //bool IsHourStartSlot( const int& aSlotIndex ) const;
+
+ //bool IsExtraSlot( const int& aSlotIndex ) const;
+
+ //int HourFromSlotIndex( const int& aSlotIndex ) const;
+
+ //int SlotIndexFromHour( int aHour );
+
+ //int RoundHourUp( int aSlot );
+
+ //int RoundHourDown( int aSlot );
+
+ //void GetSelectedSlot( int& aSlot, int& aRegion, int& aColumnIndex, int& aColumns );
+
+ //bool MoveSelection( TScrollDirection aDirection );
+
+ //void MoveSelectionInEvent( TScrollDirection aDirection );
+
+ //void UpdateSelectionInEvent();
+
+ //bool IsEventSelected() const;
+
+ // bool IsMultipleEventsSelected() const;
+
+ //bool IsAlldayEventSelected() const;
+
+ //TCalenInstanceId SelectedEvent();
+
+ //int SelectEvent( const TCalenInstanceId& aId );
+
+ //TCalenInstanceId UntimedEvent( int aIndex );
+
+ //const CalenTimedEventInfo& AlldayEvent( int aIndex );
+
+ //void SelectSlot( int aSlot );
+
+
+ //const QList<CalenTimeRegion>& RegionList() const;
+
+
+ //void GetEventIntervals( QList<CalenEventInterval>& aArray ) const;
+
+
+ // CalenSlotInterval SelectedInterval();
+
+ // bool SetSelectionInRegion( int aRegion, int aColumn, int aSlot );
+};
+
+#endif
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/calendaymodel.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,72 @@
+/*
+* Copyright (c) 2010 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: Single day item view model
+*
+*/
+
+#ifndef CALENDAYMODEL_H
+#define CALENDAYMODEL_H
+
+//System includes
+#include <QAbstractItemModel>
+#include <QVariant>
+#include <QDateTime>
+
+#include <agendaentry.h>
+
+//User includes
+
+//Forward declarations
+class MCalenServices;
+
+//Constantss
+const int CalenDayEntry = Qt::UserRole + 1;
+
+Q_DECLARE_METATYPE(AgendaEntry)
+class CalenDayModel : public QAbstractListModel
+{
+ Q_OBJECT
+public:
+ CalenDayModel(const QDateTime &date, MCalenServices &services,
+ QObject *parent = 0)
+ {
+ Q_UNUSED(date)
+ Q_UNUSED(parent)
+ Q_UNUSED(date)
+ };
+
+ // from QAbstractListModel
+ int rowCount(const QModelIndex &parent = QModelIndex()) const
+ {
+ return 0;
+ }
+ QVariant data(const QModelIndex &index, int role) const
+ {
+ Q_UNUSED(index)
+ Q_UNUSED(role)
+ return QVariant();
+ }
+
+ void refreshModel(const QDateTime &date)
+ {
+ Q_UNUSED(date)
+ };
+
+ QDateTime modelDate() const
+ {return QDateTime();}
+
+};
+
+#endif //CALENDAYMODEL_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/calenservices.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,42 @@
+/*
+ * Copyright (c) 2009 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:
+ *
+ */
+
+#ifndef CALENSERVICES_H
+#define CALENSERVICES_H
+
+#include "calencontext.h"
+
+/*!
+ Mocked class MCalenServices
+ */
+class MCalenServices
+{
+public:
+ MCalenServices() {
+
+ }
+
+ ~MCalenServices() {
+
+ }
+
+ MCalenContext Context() {return MCalenContext();}
+
+ bool IssueCommandL( quint32 aCommand ) {Q_UNUSED(aCommand); return true;}
+};
+
+#endif // CALENSERVICES_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/hbinstance.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,96 @@
+/*
+* Copyright (c) 2010 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: Mocked classes for testing CalenDayUtils class
+*
+*/
+
+#ifndef HBMAINWINDOW_H
+#define HBMAINWINDOW_H
+
+#include <QObject>
+#include <QtGlobal>
+#include <QRectF>
+
+// Test variables
+extern QRectF gTestWindowRect;
+extern Qt::Orientation gTestOrientation;
+
+
+
+/*!
+ Mocked class HbMainWindow (simulating window in unittests)
+ */
+class HbMainWindow
+: public QObject
+{
+ Q_OBJECT
+public:
+ HbMainWindow(QObject *parent = 0) : QObject(parent){
+ Q_UNUSED(parent);
+ }
+
+ ~HbMainWindow() {
+ }
+
+ QRectF layoutRect() const {
+ return gTestWindowRect;
+ }
+
+ Qt::Orientation orientation() const {
+ return gTestOrientation;
+ }
+signals:
+ void orientationChanged(Qt::Orientation);
+};
+
+#endif // HBMAINWINDOW_H
+
+#ifndef HBINSTANCE_H
+#define HBINSTANCE_H
+
+#include <QList>
+
+/*!
+ Mocked class HbInstance (simulating hbinstance in unittests)
+ */
+class HbInstance
+{
+public:
+
+ static HbInstance *instance() {
+ return new HbInstance();
+ }
+
+ QList<HbMainWindow *> allMainWindows() const {
+ return mMainWindows;
+ }
+
+ HbInstance() {
+ HbMainWindow* window = new HbMainWindow();
+ mMainWindows.append(window);
+ }
+
+ ~HbInstance() {
+ for (int i = 0; i < mMainWindows.count(); i++) {
+ delete mMainWindows[i];
+ }
+ mMainWindows.clear();
+ }
+
+ QList<HbMainWindow *> mMainWindows;
+};
+
+#endif // HBINSTANCE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/rom/unittest_calendayitemview.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYITEMVIEW_IBY
+#define UNITTEST_CALENDAYITEMVIEW_IBY
+
+S60_APP_EXE(unittest_calendayitemview)
+S60_APP_RESOURCE(unittest_calendayitemview)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayitemview_reg.rsc \private\10003a3f\import\apps\unittest_calendayitemview_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYITEMVIEW_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/unittest_calendayitemview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,114 @@
+/*
+ * Copyright (c) 2009 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:
+ *
+ */
+#include <QGraphicsItem>
+#include <hbmodeliterator.h>
+#include <QtTest/QtTest>
+
+#include "calenservices.h"
+#include "calendayitemview.h"
+
+// Test variables
+QRectF gTestWindowRect = QRectF(0, 0, 10, 20);
+Qt::Orientation gTestOrientation = Qt::Horizontal;
+
+class TestCalenItemView : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenItemView();
+ virtual ~TestCalenItemView();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+private:
+ MCalenServices mMCalenServices;
+
+};
+
+/*!
+ Constructor
+ */
+TestCalenItemView::TestCalenItemView()
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenItemView::~TestCalenItemView()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenItemView::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenItemView::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenItemView::init()
+{
+
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenItemView::cleanup()
+{
+
+}
+
+/*!
+ Test function for constructors
+ 1. Test if content widget is not initialized
+ 2. Test if content widget is correcty created
+ */
+void TestCalenItemView::testConstructors()
+{
+ //1)
+ CalenDayItemView *testItemView = 0;
+ QVERIFY(!testItemView);
+
+ //2)
+ HbModelIterator *iterator = new HbModelIterator();
+ testItemView = new CalenDayItemView(mMCalenServices,iterator,0);
+ QVERIFY(testItemView);
+ delete testItemView;
+}
+
+QTEST_MAIN(TestCalenItemView);
+#include "unittest_calendayitemview.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayitemview/unittest_calendayitemview.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,68 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayitemview
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+ ../../../src/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+# Input
+HEADERS += calencontext.h \
+ calendayinfo.h \
+ calenservices.h \
+ CalenUid.h \
+ calendayitemview.h \
+ caleninstanceid.h \
+ calendaycontainer.h \
+ calendayutils.h \
+ hbinstance.h \
+ calendaymodel.h
+
+
+SOURCES += unittest_calendayitemview.cpp \
+ calendayitemview.cpp \
+ calendayutils.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface \
+ -lcalencommonutils
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayitemview.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayitemview.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodel/calenservices.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,86 @@
+/*
+* Copyright (c) 2009 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: Mocked classes for testing CalenDayModel class
+*
+*/
+
+#ifndef AGENDAUTIL_H
+#define AGENDAUTIL_H
+
+#include <agendaentry.h>
+
+/*!
+ Mocked class AgendaUtil
+ */
+class AgendaUtil
+{
+public:
+ enum FilterFlags {
+ IncludeAppointments = 0x01,
+ IncludeReminders = 0x02,
+ IncludeEvents = 0x03
+ };
+
+public:
+ AgendaUtil() {
+
+ }
+
+ ~AgendaUtil() {
+
+ }
+
+ QList<AgendaEntry> createEntryIdListForDay(const QDateTime &date,AgendaUtil::FilterFlags filter)
+ {
+ QList<AgendaEntry> agenda;
+ AgendaEntry entry;
+ agenda << entry;
+ return agenda;
+ }
+};
+
+#endif // AGENDAUTIL_H
+
+#ifndef CALENSERVICES_H
+#define CALENSERVICES_H
+
+/*!
+ Mocked class MCalenServices
+ */
+class MCalenServices
+{
+public:
+ MCalenServices() : mAgendaUtil(NULL) {
+ mAgendaUtil = new AgendaUtil();
+ }
+
+ ~MCalenServices() {
+ if (mAgendaUtil) {
+ delete mAgendaUtil;
+ mAgendaUtil = NULL;
+ }
+ }
+
+ AgendaUtil* agendaInterface() {
+ return mAgendaUtil;
+ }
+
+public:
+ AgendaUtil* mAgendaUtil;
+};
+
+#endif // CALENSERVICES_H
+
+// End of file
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodel/rom/unittest_calendaymodel.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYMODEL_IBY
+#define UNITTEST_CALENDAYMODEL_IBY
+
+S60_APP_EXE(unittest_calendaymodel)
+S60_APP_RESOURCE(unittest_calendaymodel)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendaymodel_reg.rsc \private\10003a3f\import\apps\unittest_calendaymodel_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYMODEL_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodel/unittest_calendaymodel.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,118 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayModel
+ *
+ */
+#include <QtTest/QtTest>
+
+#include "calendaymodel.h"
+#include "calenservices.h"
+
+class TestCalenDayModel : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayModel();
+ virtual ~TestCalenDayModel();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ QDateTime mDateTime;
+ MCalenServices *mServices;
+ CalenDayModel *mModel;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayModel::TestCalenDayModel() :
+ mServices(NULL), mModel(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayModel::~TestCalenDayModel()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayModel::initTestCase()
+{
+ mDateTime = QDateTime::currentDateTime();
+ mServices = new MCalenServices();
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayModel::cleanupTestCase()
+{
+ if (mServices) {
+ delete mServices;
+ }
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayModel::init()
+{
+ mModel = new CalenDayModel(mDateTime, *mServices);
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayModel::cleanup()
+{
+ if (mModel) {
+ delete mModel;
+ mModel = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if model is not initialized
+ 2. Test if model is correcty created
+ */
+void TestCalenDayModel::testConstructors()
+{
+ //1)
+ CalenDayModel *testModel = 0;
+ QVERIFY(!testModel);
+
+ //2)
+ testModel = new CalenDayModel(mDateTime, *mServices);
+ QVERIFY(testModel);
+
+ delete testModel;
+}
+
+QTEST_MAIN(TestCalenDayModel);
+#include "unittest_calendaymodel.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodel/unittest_calendaymodel.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2009 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: CalenDayModel test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendaymodel
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+ ../../../../inc/
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendaymodel.h
+
+SOURCES += unittest_calendaymodel.cpp \
+ calendaymodel.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+ LIBS += -lagendainterface
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendaymodel.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendaymodel.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodelmanager/calencontext.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,46 @@
+/*
+* Copyright (c) 2007 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: Calendar context, info on what's currently focused
+*
+*/
+
+
+#ifndef CALENCONTEXT_H
+#define CALENCONTEXT_H
+#include <QDateTime>
+
+// FORWARD DECLARATIONS
+class TCalenInstanceId;
+class QDateTime;
+
+// INCLUDES
+
+// CLASS DEFINITIONS
+/**
+ * The controller handles events from the rest of Calendar and delegates
+ * them to the appropriate place (i.e. the action ui classes).
+ */
+class MCalenContext
+ {
+public :
+ QDateTime focusDateAndTime()
+ {
+ return QDateTime(QDate(2000, 10, 10));
+ }
+
+ };
+
+#endif // CALENCONTEXT_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodelmanager/calendaymodel.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,70 @@
+/*
+* Copyright (c) 2010 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: Single day item view model
+*
+*/
+
+#ifndef CALENDAYMODEL_H
+#define CALENDAYMODEL_H
+
+//System includes
+#include <QAbstractItemModel>
+#include <QVariant>
+#include <QDateTime>
+
+#include <agendaentry.h>
+
+//User includes
+
+//Forward declarations
+class MCalenServices;
+
+//Constantss
+const int CalenDayEntry = Qt::UserRole + 1;
+
+Q_DECLARE_METATYPE(AgendaEntry)
+
+class CalenDayModel : public QAbstractListModel
+{
+ Q_OBJECT
+public:
+ CalenDayModel(const QDateTime &date, MCalenServices &services,
+ QObject *parent = 0){
+ Q_UNUSED(date);
+ Q_UNUSED(services);
+ Q_UNUSED(parent);
+ }
+
+ // from QAbstractListModel
+ int rowCount(const QModelIndex &parent = QModelIndex()) const{
+ Q_UNUSED(parent);
+ return 0;
+ }
+ QVariant data(const QModelIndex &index, int role) const{
+ Q_UNUSED(index);
+ Q_UNUSED(role);
+ return 0;
+ }
+
+ void refreshModel(const QDateTime &date){
+ Q_UNUSED(date);
+ }
+
+ QDateTime modelDate(){
+ return QDateTime(QDate(2000, 10, 10));
+ }
+};
+
+#endif //CALENDAYMODEL_H
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodelmanager/calenservices.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,33 @@
+/*
+ * calenservices.h
+ *
+ * Created on: Jun 21, 2010
+ * Author: zabinpio
+ */
+
+#ifndef CALENSERVICES_H_
+#define CALENSERVICES_H_
+
+#include "calencontext.h"
+
+/*!
+ Mocked class MCalenServices
+ */
+class MCalenServices
+{
+public:
+ MCalenServices() {
+
+ }
+
+ MCalenContext& Context(){
+ return mContext;
+ }
+
+ ~MCalenServices() {
+
+ }
+
+ MCalenContext mContext;
+};
+#endif /* CALENSERVICES_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodelmanager/rom/unittest_calendaymodelmanager.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYMODELMANAGER_IBY
+#define UNITTEST_CALENDAYMODELMANAGER_IBY
+
+S60_APP_EXE(unittest_calendaymodelmanager)
+S60_APP_RESOURCE(unittest_calendaymodelmanager)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendaymodelmanager_reg.rsc \private\10003a3f\import\apps\unittest_calendaymodelmanager_reg.rsc
+
+
+#endif //UNITTEST_CALENDAYMODELMANAGER_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodelmanager/unittest_calendaymodelmanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,119 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContainerWidget
+ *
+ */
+#include <QtTest/QtTest>
+
+#include "calenservices.h"
+#include "calendaymodelmanager.h"
+
+class TestCalenDayModelManager : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayModelManager();
+ virtual ~TestCalenDayModelManager();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayModelManager *mManager;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayModelManager::TestCalenDayModelManager() :
+mManager(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayModelManager::~TestCalenDayModelManager()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayModelManager::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayModelManager::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayModelManager::init()
+{
+ //mManager = new CalenDayModelManager();
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayModelManager::cleanup()
+{
+ // if (mManager) {
+ // delete mManager;
+ // mManager = NULL;
+ // }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if container is not initialized
+ 2. Test if container is correcty created
+ */
+void TestCalenDayModelManager::testConstructors()
+{
+ //1)
+ MCalenServices services;
+
+ CalenDayModelManager *testManager = 0;
+ CalenDayModelManager *testManager2 = 0;
+ QVERIFY(!testManager);
+ QVERIFY(!testManager2);
+
+ //2)
+ testManager = new CalenDayModelManager(services, false, 0);
+ testManager2 = new CalenDayModelManager(services, true, 0);
+ QVERIFY(testManager);
+ QVERIFY(testManager2);
+
+ delete testManager;
+ delete testManager2;
+}
+
+QTEST_MAIN(TestCalenDayModelManager);
+#include "unittest_calendaymodelmanager.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaymodelmanager/unittest_calendaymodelmanager.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,38 @@
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+TEMPLATE = app
+TARGET = unittest_calendaymodelmanager
+MOC_DIR = moc
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+INCLUDEPATH += . \
+ ../../../inc/
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calencontext.h \
+ calendaymodel.h \
+ calenservices.h \
+ calendaymodelmanager.h
+
+SOURCES += calendaymodelmanager.cpp \
+ unittest_calendaymodelmanager.cpp
+
+symbian: {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendaymodelmanager.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendaymodelmanager.iby)"
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaystatusstrip/calendaystatusstriptest.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,37 @@
+/*
+ * Copyright (c) 2010 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: Class needed by testing to have acces to private data memebers
+ *
+ */
+
+
+#ifndef CALENDAYSTATUSSTRIPTEST_H
+#define CALENDAYSTATUSSTRIPTEST_H
+
+#include "calenDaystatusstrip.h"
+
+class CalenDayStatusStripTest : public CalenDayStatusStrip
+{
+
+ Q_OBJECT
+public:
+ CalenDayStatusStripTest(HbWidget *parent = 0)
+ : CalenDayStatusStrip(parent)
+ {
+
+ }
+ friend class TestCalenStatusStrip;
+};
+
+#endif // CALENDAYSTATUSSTRIPTEST_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaystatusstrip/rom/unittest_calendaystatusstrip.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYSTATUSSTRIP_IBY
+#define UNITTEST_CALENDAYSTATUSSTRIP_IBY
+
+S60_APP_EXE(unittest_calendaystatusstrip)
+S60_APP_RESOURCE(unittest_calendaystatusstrip)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendaystatusstrip_reg.rsc \private\10003a3f\import\apps\unittest_calendaystatusstrip_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYSTATUSSTRIP_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaystatusstrip/unittest_calendaystatusstrip.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,368 @@
+/*
+ * Copyright (c) 2010 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: Test class for CalenDayContentWidget
+ *
+ */
+
+#include <QtTest/QtTest>
+#include <QGraphicsItem>
+
+#include "calendaystatusstriptest.h"
+
+#include <QPainter>
+#include <QImage>
+#include <QPair>
+
+const qreal WIDGET_WIDTH = 50;
+const qreal WIDGET_HEIGHT = 150;
+
+class TestCalenStatusStrip : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenStatusStrip();
+ virtual ~TestCalenStatusStrip();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+ void testSetGetColor();
+ void testSetGetRange();
+ void testSetGetDrawingStyle_data();
+ void testSetGetDrawingStyle();
+ void testStartEndTime();
+ void testCreatingDiagonalLine();
+ void testCalculateStartEndTimePosition_data();
+ void testCalculateStartEndTimePosition();
+ void testCalculateMinuteHegiht();
+ void testPaint();
+
+private:
+ CalenDayStatusStripTest *mStatusStrip;
+};
+
+
+
+
+/*!
+ Constructor
+ */
+TestCalenStatusStrip::TestCalenStatusStrip() :
+ mStatusStrip(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenStatusStrip::~TestCalenStatusStrip()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenStatusStrip::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenStatusStrip::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenStatusStrip::init()
+{
+ mStatusStrip = new CalenDayStatusStripTest();
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenStatusStrip::cleanup()
+{
+ if (mStatusStrip) {
+ delete mStatusStrip;
+ mStatusStrip = NULL;
+ }
+}
+
+/*!
+ Test function for constructors
+ 1. Test if content widget is not initialized
+ 2. Test if content widget is correcty created
+ */
+void TestCalenStatusStrip::testConstructors()
+{
+ //1)
+ CalenDayStatusStrip *testStatusStrip = 0;
+ QVERIFY(!testStatusStrip);
+
+ //2)
+ testStatusStrip = new CalenDayStatusStrip();
+ QVERIFY(testStatusStrip);
+ delete testStatusStrip;
+}
+
+/*!
+ Test function for geting and setting color
+ 1. Test setting red color
+ 2. Test change color to blue
+ */
+void TestCalenStatusStrip::testSetGetColor()
+{
+ //1)
+ mStatusStrip->setColor(QColor(Qt::red));
+ QColor testColor = mStatusStrip->color();
+ QCOMPARE(QColor(Qt::red),testColor);
+
+ //2)
+ mStatusStrip->setColor(QColor(Qt::blue));
+ testColor = mStatusStrip->color();
+ QCOMPARE(QColor(Qt::blue),testColor);
+}
+
+/*!
+ Test function for geting and setting range
+ 1. Test setting 5px range
+ 2. Test change range to 1px
+ */
+void TestCalenStatusStrip::testSetGetRange()
+{
+ //1)
+ mStatusStrip->setRange(5);
+ QCOMPARE((qreal)5,mStatusStrip->range());
+
+ //2)
+ mStatusStrip->setRange(1);
+ QCOMPARE((qreal)1,mStatusStrip->range());
+}
+
+/*!
+ Preapre data for \sa testSetGetDrawingStyle
+ Add new enum \sa CalenDayStatusStrip::DrawingStyle
+ 1)OnlyFrame
+ 2)StripWithLines
+ 3)Filled
+ */
+void TestCalenStatusStrip::testSetGetDrawingStyle_data()
+{
+ QTest::addColumn<CalenDayStatusStrip::DrawingStyle>("testedValue");
+ QTest::addColumn<CalenDayStatusStrip::DrawingStyle>("testValue");
+
+ QTest::newRow("OnlyFrame") << CalenDayStatusStrip::OnlyFrame
+ << CalenDayStatusStrip::OnlyFrame;
+ QTest::newRow("StripWithLines") << CalenDayStatusStrip::StripWithLines
+ << CalenDayStatusStrip::StripWithLines;
+ QTest::newRow("Filled") << CalenDayStatusStrip::Filled
+ << CalenDayStatusStrip::Filled;
+}
+
+/*!
+ Test settting and getting drawing style on preapred data
+
+ \sa testSetGetDrawingStyle_data
+ */
+void TestCalenStatusStrip::testSetGetDrawingStyle()
+{
+ //get data to test
+ QFETCH(CalenDayStatusStrip::DrawingStyle, testedValue);
+ QFETCH(CalenDayStatusStrip::DrawingStyle, testValue);
+
+ //set data
+ mStatusStrip->setDrawingStyle(testedValue);
+
+ //check data
+ QCOMPARE(mStatusStrip->drawingStyle(),testValue);
+}
+
+/*!
+ Test setting and getting start and end time of event
+ 1)Set end and start of event
+ 2)Change values
+ */
+void TestCalenStatusStrip::testStartEndTime()
+{
+ QPair<QTime, QTime> startEndTime;
+ startEndTime.first = QTime(12,12,12);
+ startEndTime.second = QTime(15,15,15);
+
+ mStatusStrip->setStartEndTime(startEndTime.first,startEndTime.second);
+
+ QCOMPARE(mStatusStrip->startEndTime().first,startEndTime.first);
+ QCOMPARE(mStatusStrip->startEndTime().second,startEndTime.second);
+
+ startEndTime.first = QTime(1,1,1);
+ startEndTime.second = QTime(5,5,5);
+
+ mStatusStrip->setStartEndTime(startEndTime.first,startEndTime.second);
+
+ QCOMPARE(mStatusStrip->startEndTime().first,startEndTime.first);
+ QCOMPARE(mStatusStrip->startEndTime().second,startEndTime.second);
+}
+
+/*!
+ Test creating polygon to draw diagonal line on widget
+ */
+void TestCalenStatusStrip::testCreatingDiagonalLine()
+{
+ qreal dx = 10;
+ qreal dy = 1;
+ QPointF point(0,60);
+ QVector<QPointF> points;
+
+ points << QPointF(0,60);
+ points << QPointF(0,59);
+ points << QPointF(10,58);
+ points << QPointF(10,59);
+
+ QPolygonF testValue(points);
+ QPolygonF testedValue = mStatusStrip->diagonalLine(point,dx,dy);
+
+ QCOMPARE(testedValue,testValue);
+}
+
+/*!
+ Prepare data for \sa testCalculateStartEndTimePosition
+ Add new start and end time of event.
+ 1)Full time start and end
+ 2)Exactly 30min time start and end
+ 3)More than 30min time start and end
+ 4)time start > 30m and end > 23h30m
+ */
+void TestCalenStatusStrip::testCalculateStartEndTimePosition_data()
+{
+ QTest::addColumn<QTime>("testedStartValue");
+ QTest::addColumn<QTime>("testedEndValue");
+ QTest::addColumn<QTime>("testStartValue");
+ QTest::addColumn<QTime>("testEndValue");
+
+ QTest::newRow("Full time start and end") << QTime(10,00,00)
+ << QTime(11,00,00)
+ << QTime(10,00,00)
+ << QTime(11,00,00);
+ QTest::newRow("Exactly 30min time start and end") << QTime(10,30,00)
+ << QTime(11,30,00)
+ << QTime(10,30,00)
+ << QTime(11,30,00);
+ QTest::newRow("More than 30min time start and end") << QTime(10,40,00)
+ << QTime(12,35,00)
+ << QTime(10,30,00)
+ << QTime(13,00,00);
+ QTest::newRow("time start > 30m and end > 23h30m") << QTime(20,35,00)
+ << QTime(23,35,00)
+ << QTime(20,30,00)
+ << QTime(23,59,00);
+}
+
+/*!
+ Test calculating start and end time drawing of event bubble on prepared data
+ \sa testCalculateStartEndTimePosition_data
+ */
+void TestCalenStatusStrip::testCalculateStartEndTimePosition()
+{
+ //get prepared data
+ QFETCH(QTime, testedStartValue);
+ QFETCH(QTime, testedEndValue);
+ QFETCH(QTime, testStartValue);
+ QFETCH(QTime, testEndValue);
+
+ //run function
+ QPair<QTime,QTime> testStartEndValue
+ = mStatusStrip->calculateStartEndPostion(testedStartValue,
+ testedEndValue);
+ //check data
+ QCOMPARE(testStartEndValue.first,testStartValue);
+ QCOMPARE(testStartEndValue.second,testEndValue);
+}
+
+/*!
+ Test calculating minute height based on widget height and given time.
+ 1)Calculate on given time
+ 2)Change time of event
+ */
+void TestCalenStatusStrip::testCalculateMinuteHegiht()
+{
+ qreal testedValue;
+ qreal testValue;
+ mStatusStrip->resize(WIDGET_WIDTH,WIDGET_HEIGHT);
+
+ //1)
+ testedValue = mStatusStrip->calculateMinuteHeight(QTime(10,00,0),
+ QTime(11,00,0));
+ testValue = WIDGET_HEIGHT / (qreal)60;
+ QCOMPARE(testedValue,testValue);
+
+ //2)
+ testedValue = mStatusStrip->calculateMinuteHeight(QTime(10,00,0),
+ QTime(11,30,0));
+ testValue = WIDGET_HEIGHT / (qreal)90;
+ QCOMPARE(testedValue,testValue);
+}
+
+
+/*!
+ Test drawing widget.
+
+ If there is no SAVE_IMAGES macro defined it will only run this function.
+ If there is macro defined and c:\unittest folder created then image will be
+ created so user can see if it draw in good way.
+ */
+void TestCalenStatusStrip::testPaint()
+{
+ //preapre data needed to draw on widget
+ mStatusStrip->setColor(QColor(Qt::red));
+ QPair<QTime, QTime> startEndTime;
+ startEndTime.first = QTime(10,20,0);
+ startEndTime.second = QTime(15,10,00);
+
+ //set event time
+ mStatusStrip->setStartEndTime(startEndTime.first,startEndTime.second);
+
+ //resize widget to be bigger than (0,0)
+ mStatusStrip->resize(WIDGET_WIDTH,WIDGET_HEIGHT);
+ QSize size = mStatusStrip->size().toSize();
+
+ //create image that will simulate widget where painting should be done
+ QImage img(size,QImage::Format_RGB32);
+ //create painter which will be used to paint
+ QPainter painter(&img);
+ //fill image with white color to have better filings with look of "paper"
+ painter.fillRect(0,0,size.width(),size.height(),QColor(Qt::white));
+ //run paint
+ mStatusStrip->paint(&painter,0);
+
+#ifdef SAVE_IMAGES
+ //save drawed image
+ img.save("c:/unittest/TestCalenStatusStrip_testPaint.jpg");
+
+#endif
+
+}
+
+QTEST_MAIN(TestCalenStatusStrip);
+#include "unittest_calendaystatusstrip.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendaystatusstrip/unittest_calendaystatusstrip.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,53 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendaystatusstrip
+
+#uncoment it if want to get images from test where it is posible.
+#it need folder in c:/unittest path
+#DEFINES += SAVE_IMAGES
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/
+
+# Input
+HEADERS += calendaystatusstrip.h \
+ calendaystatusstriptest.h
+
+
+SOURCES += unittest_calendaystatusstrip.cpp \
+ calendaystatusstrip.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendaystatusstrip.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendaystatusstrip.iby)"
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayutils/hbinstance.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,85 @@
+/*
+* Copyright (c) 2010 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: Mocked classes for testing CalenDayUtils class
+*
+*/
+
+#ifndef HBMAINWINDOW_H
+#define HBMAINWINDOW_H
+
+// Test variables
+extern QRectF gTestWindowRect;
+extern Qt::Orientation gTestOrientation;
+
+/*!
+ Mocked class HbMainWindow (simulating window in unittests)
+ */
+class HbMainWindow
+{
+public:
+ HbMainWindow() {
+ }
+
+ ~HbMainWindow() {
+ }
+
+ QRectF layoutRect() const {
+ return gTestWindowRect;
+ }
+
+ Qt::Orientation orientation() const {
+ return gTestOrientation;
+ }
+};
+
+#endif // HBMAINWINDOW_H
+
+#ifndef HBINSTANCE_H
+#define HBINSTANCE_H
+
+#include <QList>
+
+/*!
+ Mocked class HbInstance (simulating hbinstance in unittests)
+ */
+class HbInstance
+{
+public:
+
+ static HbInstance *instance() {
+ return new HbInstance();
+ }
+
+ QList<HbMainWindow *> allMainWindows() const {
+ return mMainWindows;
+ }
+
+ HbInstance() {
+ HbMainWindow* window = new HbMainWindow();
+ mMainWindows.append(window);
+ }
+
+ ~HbInstance() {
+ for (int i = 0; i < mMainWindows.count(); i++) {
+ delete mMainWindows[i];
+ }
+ mMainWindows.clear();
+ }
+
+ QList<HbMainWindow *> mMainWindows;
+};
+
+#endif // HBINSTANCE_H
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayutils/rom/unittest_calendayutils.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYUTILS_IBY
+#define UNITTEST_CALENDAYUTILS_IBY
+
+S60_APP_EXE(unittest_calendayutils)
+S60_APP_RESOURCE(unittest_calendayutils)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayutils_reg.rsc \private\10003a3f\import\apps\unittest_calendayutils_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYUTILS_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayutils/unittest_calendayutils.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,144 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContentWidget
+ *
+ */
+#include <QGraphicsItem>
+#include <QtTest/QtTest>
+
+#include "calendayutils.h"
+#include "calendaycommonheaders.h"
+
+// Test variables
+QRectF gTestWindowRect = QRectF(0, 0, 10, 20);
+Qt::Orientation gTestOrientation = Qt::Horizontal;
+
+class TestCalenDayUtils : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayUtils();
+ virtual ~TestCalenDayUtils();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+ void testHorizontalSwipe();
+ void testOrientation();
+
+private:
+ CalenDayUtils *mUtils;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayUtils::TestCalenDayUtils() :
+ mUtils(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayUtils::~TestCalenDayUtils()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayUtils::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayUtils::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayUtils::init()
+{
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayUtils::cleanup()
+{
+}
+
+/*!
+ Test function for constructors
+ 1. Test if content widget is not initialized
+ 2. Test if content widget is correcty created
+ */
+void TestCalenDayUtils::testConstructors()
+{
+ //1)
+ CalenDayUtils *testUtils = 0;
+ QVERIFY(!testUtils);
+
+ //2)
+ testUtils = CalenDayUtils::instance();
+ QVERIFY(testUtils);
+}
+
+/*!
+ Test function for checking if swipe is horizontal or not
+ 1)test Horizontal swipe
+ 2)test no horizontal swipe
+ */
+void TestCalenDayUtils::testHorizontalSwipe()
+{
+ //1)
+ QCOMPARE(CalenDayUtils::instance()->isHorizontalSwipe(KCalenSwipeAngle-5),
+ true);
+
+ //2)
+ QCOMPARE(CalenDayUtils::instance()->isHorizontalSwipe(KCalenSwipeAngle+5),
+ false);
+}
+
+/*!
+ Test function for getting main window's orientation
+ 1)test if horizontal orientation is returned
+ 2)test if vertical orientation is returned
+ */
+void TestCalenDayUtils::testOrientation()
+{
+ //1)
+ gTestOrientation = Qt::Horizontal;
+ QCOMPARE(CalenDayUtils::instance()->orientation(), Qt::Horizontal);
+
+ //2)
+ gTestOrientation = Qt::Vertical;
+ QCOMPARE(CalenDayUtils::instance()->orientation(), Qt::Vertical);
+}
+
+QTEST_MAIN(TestCalenDayUtils);
+#include "unittest_calendayutils.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayutils/unittest_calendayutils.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,58 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayutils
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/ \
+ ./../../../../inc/ \
+ ./../../../../../inc/
+
+# Input
+HEADERS += calendayutils.h \
+ calendaycommonheaders.h
+
+
+SOURCES += unittest_calendayutils.cpp \
+ calendayutils.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unittest_calendayutils.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unittest_calendayutils.iby)"
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface \
+ -lcalencommonutils
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/CalenUid.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,45 @@
+/*
+* Copyright (c) 2008 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: UIDS used by the S60 Calendar
+*
+*/
+
+
+#ifndef CALENUID_H
+#define CALENUID_H
+
+// UID of the S60 Calendar application
+const TUid KUidCalendar = { 0x10005901 };
+
+// UIDS of the S60 Calendar native views
+const TInt KCalenMonthViewUidValue = 0x00000000 ;
+const TInt KCalenAgendaViewUidValue = 0x00000002;
+const TInt KCalenEventViewUidValue = 0x00000003;
+const TInt KCalenLandscapeDayViewUidValue = 0x00000004;
+const TInt KCalenTodoEditorViewUidValue = 0x00000005;
+const TInt KCalenSettingsViewUidValue = 0x00000006;
+
+
+const TUid KUidCalenMonthView = { KCalenMonthViewUidValue };
+const TUid KUidCalenAgendaView = { KCalenAgendaViewUidValue };
+const TUid KCalenTodoEditorView = { KCalenTodoEditorViewUidValue };
+const TUid KUidCalenEventView = { KCalenEventViewUidValue };
+const TUid KUidCalenLandscapeDayView = { KCalenLandscapeDayViewUidValue };
+const TUid KUidCalenSettingsView = { KCalenSettingsViewUidValue };
+
+const TUid KCalenChineseImplUid = {0x2002EA3D};
+
+#endif // CALENUID_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/CalendarPrivateCRKeys.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 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: The file contains the uid of keys used by application.
+*
+*
+*/
+
+#ifndef CALENDARPRIVATECRKEYS_H
+#define CALENDARPRIVATECRKEYS_H
+
+#include <calendardomaincrkeys.h>
+
+/**
+* Defines whether week number must be shown in month view of the calendar.
+* Default value: 0
+**/
+const long int KCalendarShowWeekNum = 0x00000000;
+
+/**
+* Defines whether regional information must be shown in the Calendar.
+* Default value: 1
+*/
+const long int KCalendarShowRegionalInfo = 0x00000002;
+
+#endif // CALENDARPRIVATECRKEYS_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calencontext.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,59 @@
+/*
+ * Copyright (c) 2007 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: Calendar context, info on what's currently focused
+ *
+ */
+
+#ifndef CALENCONTEXT_H
+#define CALENCONTEXT_H
+#include <QDateTime>
+
+// FORWARD DECLARATIONS
+class TCalenInstanceId;
+class QDateTime;
+
+// INCLUDES
+
+// CLASS DEFINITIONS
+/**
+ * The controller handles events from the rest of Calendar and delegates
+ * them to the appropriate place (i.e. the action ui classes).
+ */
+class MCalenContext
+ {
+public:
+ QDateTime focusDateAndTime()
+ {
+ return QDateTime(QDate(2000, 10, 10));
+ }
+
+ void setFocusDate(const QDateTime& focusDateTime)
+ {
+ Q_UNUSED(focusDateTime);
+ }
+
+ void setFocusDateAndTime(const QDateTime& focusDateTime)
+ {
+ Q_UNUSED(focusDateTime);
+ }
+
+ QDateTime defaultCalTimeForViewsL()
+ {
+ return QDateTime(QDate(2000, 10, 10));
+ }
+
+ };
+
+#endif // CALENCONTEXT_H
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendateutils.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,188 @@
+/*
+ * 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: ?Description
+ *
+ */
+
+#ifndef __CALENDATEUTILS_H__
+#define __CALENDATEUTILS_H__
+
+#include <e32base.h>
+#include <qglobal.h> // Q_DECL_EXPORT macro
+#ifdef CALENDATEUTILS_DLL
+#define CALENDATEUTIL_EXPORT Q_DECL_EXPORT
+#else
+#define CALENDATEUTIL_EXPORT Q_DECL_IMPORT
+#endif
+
+// forward declarations
+class QDateTime;
+
+/**
+ * CalenDateUtils contains static utility functions useful
+ * when comparing and calculating with dates and times.
+ *
+ * @lib Calendar.app
+ * @since 2.1
+ */
+
+class CalenDateUtils
+ {
+public:
+ static bool onSameDay(const QDateTime& x, const QDateTime& y)
+ {
+ Q_UNUSED(x);Q_UNUSED(y);
+ return false;
+ }
+ static bool onSameMonth(const QDateTime& x, const QDateTime& y)
+ {
+ Q_UNUSED(x);Q_UNUSED(y);
+ return false;
+ }
+ static QDateTime beginningOfDay(const QDateTime& startTime)
+ {
+ Q_UNUSED(startTime);
+ return QDateTime();
+ }
+ static QDateTime displayTimeOnDay(const QDateTime& startTime,
+ const QDateTime& day)
+ {
+ Q_UNUSED(startTime);Q_UNUSED(day);
+ return QDateTime();
+ }
+
+ static bool timeRangesIntersect(const QDateTime& xStart,
+ const QDateTime& xEnd, const QDateTime& yStart,
+ const QDateTime& yEnd)
+ {
+ Q_UNUSED(xStart);Q_UNUSED(xEnd);Q_UNUSED(yStart);Q_UNUSED(yEnd);
+ return false;
+ }
+
+ /**
+ * Is aTime between KCalenMaxYear/KCalenMaxMonth/KCalenMaxDay
+ * and KCalenMinYear/KCalenMinMonth/KCalenMinDay.
+ * Min/Max day is defined agenda server.
+ * @param aTime aTime to be checked
+ * @return EFalse : Out of range
+ */
+ static bool isValidDay(const QDateTime& time)
+ {
+ Q_UNUSED(time);
+ return false;
+ }
+
+ /**
+ * Return Min or Max time if aTime goes out of bounds.
+ * Valid range is [CalenDateUtils::MinTime(), CalenDateUtils::MaxTime]
+ * @param aTime time to be checked
+ * @return aTime, if aTime in [CalenDateUtils::MinTime(), CalenDateUtils::MaxTime]
+ * CalenDateUtils::MinTime(), if aTime < CalenDateUtils::MinTime()
+ * CalenDateUtils::MaxTime(), if aTime > CalenDateUtils::MaxTime()
+ */
+ static QDateTime limitToValidTime(const QDateTime& time)
+ {
+ Q_UNUSED(time);
+ return QDateTime();
+ }
+
+ /**
+ * Return maximum allowed time. (31.
+ */
+ static QDateTime maxTime()
+ {
+ return QDateTime();
+ }
+
+ /**
+ * Return minimum allowed time.
+ */
+ static QDateTime minTime()
+ {
+ return QDateTime();
+ }
+
+ /**
+ * Return time of day as a minutes from midnight. Useful to get hours::minutes component of datetime,
+ * regardless of date
+ */
+ static int timeOfDay(const QDateTime& dateTime)
+ {
+ Q_UNUSED(dateTime);
+ return 0;
+ }
+
+ /**
+ * Round QDateTime to previous full hour, e.g. RoundToPreviousHour( 23.11.2006 9:31 ) = 23.11.2006 9:00
+ */
+ static QDateTime roundToPreviousHour(const QDateTime& dateTime)
+ {
+ Q_UNUSED(dateTime);
+ return QDateTime();
+ }
+
+ /**
+ * Round QDateTimeIntervalMinutes to previous full hour, e.g. RoundToPreviousHour( 130 min ) = 120 min
+ */
+ static int roundToPreviousHour(const int& minutes)
+ {
+ Q_UNUSED(minutes);
+ return 0;
+ }
+
+ /**
+ * @return current time.
+ */
+ static QDateTime now()
+ {
+ return QDateTime();
+ }
+
+ /**
+ * @return today with time component set to 00:00.
+ */
+ static QDateTime today()
+ {
+ return QDateTime();
+ }
+
+ /**
+ * @return ETrue if given aTime is on today, EFalse otherwise
+ */
+ static bool isOnToday(const QDateTime& time)
+ {
+ Q_UNUSED(time);
+ return false;
+ }
+
+ /*
+ * Given aDate = DD::MM::YY @ hh:mm:ss, it returns a QDateTime obj DD::MM::YY @ 08:00 am
+ * @param: aDate, which has the DD::MM::YY
+ */
+ static QDateTime defaultTime(const QDateTime& date)
+ {
+ Q_UNUSED(date);
+ return QDateTime();
+ }
+
+ static QDateTime futureOf(const QDateTime& dateTime, int numOfDays)
+ {
+ Q_UNUSED(dateTime);Q_UNUSED(numOfDays);
+ return QDateTime();
+ }
+ };
+
+#endif // __CALENDATEUTILS_H__
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendaycontentscrollarea.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,72 @@
+/*
+ * Copyright (c) 2010 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: CalenDayContentScrollArea class definition.
+ *
+ */
+
+#ifndef CALENDAYCONTENTSCROLLAREA_H_
+#define CALENDAYCONTENTSCROLLAREA_H_
+
+// System includes
+#include <hbscrollarea.h>
+
+#include "calendaycommonheaders.h"
+
+// Class declaration
+class CalenDayContentScrollArea : public HbScrollArea
+ {
+Q_OBJECT
+
+public:
+ CalenDayContentScrollArea(QGraphicsItem *parent = 0)
+ {
+ Q_UNUSED(parent);
+ }
+ virtual ~CalenDayContentScrollArea()
+ {
+ }
+
+ signals:
+ void scrollAreaMoveStarted(CalenScrollDirection scrollTo);
+ void scrollAreaMoveFinished(CalenScrollDirection scrollTo);
+
+public slots:
+ void scrollToMiddleWidget()
+ {
+ }
+
+protected:
+ bool scrollByAmount(const QPointF &delta)
+ {
+ Q_UNUSED(delta);
+ return false;
+ }
+
+ void gestureEvent(QGestureEvent *event)
+ {
+ Q_UNUSED(event);
+ }
+ bool eventFilter(QObject *obj, QEvent *event)
+ {
+ Q_UNUSED(obj);Q_UNUSED(event);
+ return false;
+ }
+ bool event(QEvent *e)
+ {
+ Q_UNUSED(e);
+ return false;
+ }
+ };
+
+#endif /* CALENDAYCONTENTSCROLLAREA_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendaycontentwidget.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,86 @@
+/*
+ * Copyright (c) 2010 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: CalenDayContentWidget class definition.
+ *
+ */
+
+#ifndef CALENDAYCONTENTWIDGET_H_
+#define CALENDAYCONTENTWIDGET_H_
+
+// System includes
+#include <hbwidget.h>
+
+// User includes
+#include "calendaycommonheaders.h"
+
+// Forward declarations
+class QGraphicsLinearLayout;
+class CalenDayModelManager;
+
+class CalenDayContentWidget : public HbWidget
+ {
+Q_OBJECT
+
+public:
+ /*!
+ \enum CalenWidgetPosition
+ \brief Enumeration identifies widget position if queue.
+ */
+ enum CalenWidgetPosition
+ {
+ ECalenLastWidget = 0, ECalenFirstWidget
+ };
+
+public:
+ CalenDayContentWidget(CalenDayModelManager &modelManager,
+ QGraphicsItem *parent = 0)
+ {
+ Q_UNUSED(parent);
+ Q_UNUSED(modelManager);
+ }
+ ~CalenDayContentWidget()
+ {
+ }
+
+ void add(HbWidget* item, CalenWidgetPosition where = ECalenLastWidget)
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(where);
+ }
+ HbWidget* take(CalenWidgetPosition which)
+ {
+ Q_UNUSED(which);
+ return 0;
+ }
+ void remove(CalenWidgetPosition which)
+ {
+ Q_UNUSED(which);
+ }
+
+ signals:
+ void widgetsRelayoutFinished(CalenScrollDirection scrollTo);
+ void scrollPositionChanged(const QPointF &newPos);
+
+public slots:
+ void relayoutWidgets(CalenScrollDirection scrollTo)
+ {
+ Q_UNUSED(scrollTo);
+ }
+ void widgetScrolled(const QPointF &newPos)
+ {
+ Q_UNUSED(newPos);
+ }
+ };
+
+#endif /* CALENDAYCONTENTWIDGET_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendayhourscrollarea.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,63 @@
+/*
+ * Copyright (c) 2010 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: CalenDayHourScrollArea class definition.
+ *
+ */
+
+#ifndef CALENDAYHOURSCROLLAREA_H_
+#define CALENDAYHOURSCROLLAREA_H_
+
+// System includes
+#include <hbscrollarea.h>
+#include <QDateTime>
+
+// User includes
+#include "calendaycommonheaders.h"
+
+// Class declaration
+class CalenDayHourScrollArea : public HbScrollArea
+ {
+Q_OBJECT
+
+public:
+ CalenDayHourScrollArea(QGraphicsItem *parent = 0)
+ {
+ Q_UNUSED(parent);
+ }
+ virtual ~CalenDayHourScrollArea()
+ {
+ }
+ void setDateTime(const QDateTime &dateTime)
+ {
+ Q_UNUSED(dateTime);
+ }
+ QDateTime dateTime()
+ {
+ return QDateTime();
+ }
+
+ void scrollToHour(int hour)
+ {
+ Q_UNUSED(hour);
+ }
+
+public slots:
+ void scrollVertically(const QPointF &newPosition)
+ {
+ Q_UNUSED(newPosition);
+ }
+
+ };
+
+#endif /* CALENDAYHOURSCROLLAREA_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendaymodelmanager.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,120 @@
+/*
+ * Copyright (c) 2009 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: Model manager holds models for three day views
+ *
+ */
+#ifndef CALENDAYMODELMANAGER_H
+#define CALENDAYMODELMANAGER_H
+
+#include <QObject>
+#include <QMap>
+#include <QDateTime>
+
+#include "calendaycommonheaders.h"
+#include <QAbstractListModel>
+class QAbstractItemModel;
+class MCalenServices;
+class CalenDayModel;
+
+/*!
+ Test class TestAbstractListModel
+ */
+class TestAbstractListModel : public QAbstractListModel
+{
+ Q_OBJECT
+
+public:
+ TestAbstractListModel() : QAbstractListModel() {
+ }
+
+ ~TestAbstractListModel() {
+ }
+
+ int rowCount(const QModelIndex &parent) const {
+ Q_UNUSED(parent);
+ return 0;
+ }
+
+ QVariant data(const QModelIndex &index, int role) const {
+ Q_UNUSED(index);
+ Q_UNUSED(role);
+ return QVariant(0);
+ }
+};
+
+class CalenDayModelManager : public QObject
+ {
+Q_OBJECT
+
+public:
+ enum ModelDay
+ {
+ PreviousDay = 0, CurrentDay = 1, NextDay = 2, NumberOfDays
+ };
+
+public:
+ CalenDayModelManager(MCalenServices &services, bool emptyModels, QObject *parent = 0) :
+ mServices(services)
+ {
+ Q_UNUSED(emptyModels);
+ Q_UNUSED(parent);
+ }
+ ~CalenDayModelManager()
+ {
+ }
+
+ QAbstractItemModel &getModel(CalenDayModelManager::ModelDay day)
+ {
+ Q_UNUSED(day);
+ model = new TestAbstractListModel();
+ return *model;
+ }
+
+ void refreshAllModels()
+ {
+ }
+ void refreshSingleModel(CalenDayModelManager::ModelDay day)
+ {
+ Q_UNUSED(day);
+ }
+ MCalenServices &getServices()
+ {
+ return mServices;
+ }
+
+public slots:
+ void viewsScrollingFinished(CalenScrollDirection scrollTo)
+ {
+ Q_UNUSED(scrollTo);
+ }
+
+private:
+ void createAllModels()
+ {
+ }
+ void moveBackward()
+ {
+ }
+ void moveForeward()
+ {
+ }
+
+private:
+ QMap<ModelDay, CalenDayModel*> mModels;
+ MCalenServices &mServices;
+ QDateTime mCurrentDayTime;
+ TestAbstractListModel* model;
+ };
+
+#endif//CALENDAYMODELMANAGER_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendayutils.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,70 @@
+/*
+ * Copyright (c) 2010 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: CalenDayUtils utility class header.
+ *
+ */
+
+#ifndef CALENDAYUTILS_H_
+#define CALENDAYUTILS_H_
+
+class CalenDayUtils
+ {
+public:
+ static CalenDayUtils *instance()
+ {
+ }
+ ~CalenDayUtils()
+ {
+ }
+
+ qreal screenWidth()
+ {
+ return 0;
+ }
+ qreal hourElementWidth()
+ {
+ return 0;
+ }
+ qreal hourElementHeight()
+ {
+ return 0;
+ }
+ qreal contentWidth()
+ {
+ return 0;
+ }
+
+ Qt::Orientation orientation()
+ {
+ return 1;
+ }
+
+ HbMainWindow* mainWindow()
+ {
+ return 0;
+ }
+
+ bool isHorizontalSwipe(qreal angle)
+ {
+ Q_UNUSED(angle);
+ return false;
+ }
+
+protected:
+ CalenDayUtils()
+ {
+ }
+ };
+
+#endif /* CALENDAYUTILS_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calendocloader.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,52 @@
+/*
+* Copyright (c) 2008-2009 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: Class declaration for CalenDocLoader.
+ *
+*/
+
+
+#ifndef CALENDOCLOADER_H
+#define CALENDOCLOADER_H
+
+// system includes
+#include <hbdocumentloader.h>
+
+// forward declaration
+class CCalenController;
+
+// Class declaration
+/**
+ * @class CalenDocLoader
+ * @brief The loader class for application
+ * Inherits from HbDocumentLoader.
+ */
+class CalenDocLoader : public HbDocumentLoader
+{
+public:
+
+ CalenDocLoader(CCalenController &controller) : mController(controller){}
+ ~CalenDocLoader(){}
+
+protected:
+
+ virtual QObject *createObject(const QString &type, const QString &name){Q_UNUSED(type); Q_UNUSED(name); return 0;}
+
+private:
+
+ CCalenController &mController;
+};
+
+#endif // CALENDOCLOADER_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calennativeview.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,92 @@
+/*
+* Copyright (c) 2007-2008 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: This class is the base class of all Calendar views.
+ *
+*/
+
+
+#ifndef CALENNATIVEVIEW_H
+#define CALENNATIVEVIEW_H
+
+#ifdef CALENVIEWS_DLL
+#define CALENNATIVEVIEW_EXPORT Q_DECL_EXPORT
+#else
+#define CALENNATIVEVIEW_EXPORT Q_DECL_IMPORT
+#endif
+
+// System includes
+#include <hblabel.h>
+#include <hblistwidget.h>
+#include <hbabstractviewitem.h>
+
+// User includes
+#include "calennotificationhandler.h" // MCalenNotificationHandler
+#include "calenview.h"
+
+const int WORKAROUND_TO_LIMIT_MAX_SPEED=8000;
+
+class MCalenServices;
+class HbDateTimePicker;
+
+class CalenNativeView : public CalenView,
+ public MCalenNotificationHandler
+ {
+ Q_OBJECT
+
+ public: // Constructors and destructor
+ /**
+ * Destructor.
+ */
+ virtual ~CalenNativeView(){}
+ virtual void populationComplete(){}
+ TBool pluginEnabled(){return EFalse;}
+ virtual void refreshViewOnGoToDate(){}
+ QString *pluginText() {QString* str = new QString("string"); return str;}
+ /**
+ * captureScreenshot captures the current screenshot
+ */
+ CALENNATIVEVIEW_EXPORT void captureScreenshot(bool captureScreenShot = false) {Q_UNUSED(captureScreenShot);}
+
+ protected: // New functions
+ CalenNativeView( MCalenServices& services ) : mServices(services){}
+
+ void HandleNotification( const TCalenNotification notification ){Q_UNUSED(notification);}
+ virtual void onLocaleChanged(int reason) {Q_UNUSED(reason);}
+ virtual void onContextChanged() {}
+
+ protected slots:
+
+ void goToDate(){}
+ void goToSelectedDate(){}
+ void deleteBeforeDate(){}
+ void deleteAllEntries(){}
+ void launchSettingsView(){}
+ virtual void changeOrientation(Qt::Orientation orientation){Q_UNUSED(orientation);}
+ /**
+ * saveActivity saves the current view as an activity
+ *
+ */
+ void saveActivity(){}
+
+ protected:
+
+ MCalenServices &mServices; // not owned.
+ int mActivityId; // Recent Activity ID, currently it holdes wither of ECalenMonthView or ECalenAgendaView
+ QVariantHash mScreenShotMetadata; // Screenshot
+
+ };
+
+#endif // CALENNATIVEVIEW_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calennotificationhandler.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,83 @@
+/*
+* Copyright (c) 2007 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: Notification interface for S60 Calendar customizations
+*
+*/
+
+#ifndef CALENNOTIFICATIONHANDLER_H
+#define CALENNOTIFICATIONHANDLER_H
+
+enum TCalenNotification
+ {
+ ECalenNotifyAll = 0, // Receive all notifications
+ ECalenNotifyEntryInstanceViewCreated,
+ ECalenNotifyEntryInstanceViewCreationFailed,
+ ECalenNotifyContextChanged,
+ ECalenNotifyExternalDatabaseChanged,
+ ECalenNotifyEntrySaved,
+ ECalenNotifyEntryDeleted,
+ ECalenNotifyMultipleEntriesDeleted,
+ ECalenNotifyInstanceSaved,
+ ECalenNotifyInstanceDeleted,
+ ECalenNotifySystemTimeChanged,
+ ECalenNotifySystemLocaleChanged,
+ ECalenNotifySystemLanguageChanged,
+ ECalenNotifyLostAlarms,
+ ECalenNotifyCmdLineLaunch,
+ ECalenNotifyAvkonViewSwitchLaunch,
+ ECalenNotifySettingsChanged,
+ ECalenNotifyViewCreationStarted,
+ ECalenNotifyDialogClosed,
+ ECalenNotifyCommandFailed,
+ ECalenNotifyDeleteFailed,
+ ECalenNotifyEntryClosed,
+ ECalenNotifySettingsClosed,
+ ECalenNotifySettingsCRepKeyChanged,
+ ECalenNotifyPluginEnabledDisabled,
+ ECalenNotifyEComRegistryChanged,
+ ECalenNotifyResourceChanged,
+ ECalenNotifyViewPopulationComplete,
+ ECalenNotifyAppForegrounded,
+ ECalenNotifyAppBackgrounded,
+ ECalenNotifyMarkedEntryDeleted,
+ ECalenNotifyCheckPluginUnloading,
+ ECalenNotifyEntrySent,
+ ECalenNotifyCancelDelete,
+ ECalenNotifyDayViewClosed,
+ ECalenNotifyMapClosed,
+ ECalenNotifyCancelMapLaunch,
+ ECalenNotifyMissedAlarmViewClosed,
+ ECalenNotifyMissedEventViewClosed,
+ ECalenNotifyEditorClosedFromViewer,
+ /*ECalenNotifyUserDefined1,
+ ECalenNotifyUserDefined2,*/
+ ECalenNotifyThaiPluginEnabled,
+ ECalenNotifyThaiPluginDisabled,
+ ECalenNotifyUserDefined3,
+ ECalenNotifyUserDefined4,
+ ECalenNotifyLast
+ };
+
+/**
+ * Class for handling calendar notifications.
+ */
+class MCalenNotificationHandler
+ {
+ public: // New functions
+ virtual void HandleNotification( const TCalenNotification aNotification ) = 0;
+ };
+
+#endif // CALENNOTIFICATIONHANDLER_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calenpluginlabel.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: CalenPluginLabel class definition.
+*
+*/
+
+#ifndef CALENPLUGINLABEL_H
+#define CALENPLUGINLABEL_H
+
+// System includes
+#include <hblabel.h>
+
+class MCalenServices;
+class CalenPluginLabel : public HbLabel
+{
+ Q_OBJECT
+
+public:
+ Q_DECL_EXPORT CalenPluginLabel(MCalenServices &services, QGraphicsItem *parent = 0) : mServices(services){Q_UNUSED(parent);}
+ Q_DECL_EXPORT ~CalenPluginLabel(){}
+
+protected:
+ void gestureEvent(QGestureEvent *event){Q_UNUSED(event);}
+
+
+private:
+ MCalenServices &mServices;
+};
+
+#endif /* CALENPLUGINLABEL_H */
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calenservices.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,39 @@
+/*
+ * calenservices.h
+ *
+ * Created on: Jun 21, 2010
+ * Author: zabinpio
+ */
+
+#ifndef CALENSERVICES_H_
+#define CALENSERVICES_H_
+
+#include "calencontext.h"
+
+/*!
+ Mocked class MCalenServices
+ */
+class AgendaUtil;
+
+class MCalenServices
+{
+public:
+ MCalenServices() {
+
+ }
+
+ MCalenContext& Context(){
+ return mContext;
+ }
+
+ int getFirstView(){ return 0;}
+ TBool IssueCommandL( TInt aCommand ){ Q_UNUSED(aCommand); return EFalse;}
+ AgendaUtil* agendaInterface() {return 0;}
+
+ ~MCalenServices() {
+
+ }
+
+ MCalenContext mContext;
+};
+#endif /* CALENSERVICES_H_ */
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/calenview.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,49 @@
+/*
+* Copyright (c) 2007 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: Baseclass for creating customised views
+ *
+*/
+
+#ifndef CALENVIEW_H
+#define CALENVIEW_H
+
+// INCLUDES
+#include <hbview.h>
+
+
+/**
+ * CCalenView is the base class for
+ * creating customised calendar views.
+ */
+class CalenView : public HbView
+ {
+ public: // Enumerations
+ enum TNextPopulationStep
+ {
+ EKeepGoing,
+ EWaitForInstanceView,
+ EWaitForEntryView,
+ EDone
+ };
+
+ public: // New functions
+
+ virtual TNextPopulationStep ActiveStepL(){return EDone;}
+ virtual void CancelPopulation(){}
+
+ };
+
+#endif // CALENVIEW_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/hb_calencommands.hrh Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,102 @@
+/*
+* Copyright (c) 2007 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: Calendar controller commands
+*
+*/
+
+
+#ifndef HB_CALENCOMMANDS_HRH
+#define HB_CALENCOMMANDS_HRH
+
+
+// 1000 commands for each action ui.
+// We start from 10000 because otherwise we might overlap other command ranges,
+// e.g. Avkon == 3000.
+
+enum TCalenCommandBase
+ {
+ ECalenViewCommandBase = 20000,
+ ECalenEditCommandBase = 20100,
+ ECalenDeleteCommandBase = 20200,
+ ECalenSettingsCommandBase = 20300,
+ ECalenMapCommandBase = 20400,
+ ECalenMissedAlarmCommandBase = 20500
+ };
+
+enum TCalenCommandId
+ {
+ ECalenMonthView = ECalenViewCommandBase,
+ ECalenWeekView,
+ ECalenAgendaView,
+ ECalenDayView,
+ ECalenTodoEditor,
+ ECalenTodoEditorDone,
+ ECalenForwardsToDayView,
+ ECalenNextView,
+ ECalenPrevView,
+ ECalenSwitchView,
+ ECalenShowToolbar,
+ ECalenHideToolbar,
+ ECalenUpdateToolbar,
+ ECalenHidePreview,
+ ECalenShowPreview,
+ ECalenStartActiveStep,
+ ECalenGotoToday,
+ ECalenGotoDate,
+ ECalenEventView,
+ ECalenCmdPromptThenEdit,
+ ECalenFasterAppExit,
+ ECalenShowNextDay,
+ ECalenShowPrevDay,
+ ECalenNewMeeting = ECalenEditCommandBase,
+ ECalenNewAnniv,
+ ECalenNewDayNote,
+ ECalenNewReminder,
+ ECalenNewMeetingRequest,
+ ECalenNewEntry,
+ ECalenEditCurrentEntry,
+ ECalenEditSeries,
+ ECalenEditOccurrence,
+ ECalenEditEntryFromViewer,
+ ECalenViewCurrentEntry,
+ ECalenNotifyFocusChange,
+ ECalenCompleteTodo,
+ ECalenRestoreTodo,
+ ECalenSend,
+ ECalenDeleteCurrentEntry = ECalenDeleteCommandBase,
+ ECalenDeleteEntryWithoutQuery,
+ ECalenDeleteSeries,
+ ECalenDeleteCurrentOccurrence,
+ ECalenDeleteAllEntries,
+ ECalenDeleteEntriesBeforeDate,
+ ECalenCancelDelete,
+ ECalenDeleteEntryFromViewer,
+ ECalenShowSettings = ECalenSettingsCommandBase,
+ ECalenGetLocation = ECalenMapCommandBase,
+ ECalenShowLocation,
+ ECalenGetLocationAndSave,
+ ECalenMissedAlarmsView = ECalenMissedAlarmCommandBase,
+ ECalenMissedEventView,
+ ECalenCmdClear,
+ ECalenCmdClearAll,
+ ECalenCmdGotoCalendar,
+ ECalenMissedAlarmsViewFromIdle,
+ ECalenMissedEventViewFromIdle,
+ ECalenLastCommand,
+ ECalenRegionalPluginTapEvent
+ };
+
+#endif // HB_CALENCOMMANDS_HRH
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/hbeffect.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,183 @@
+/****************************************************************************
+ **
+ ** Copyright (C) 2008-2010 Nokia Corporation and/or its subsidiary(-ies).
+ ** All rights reserved.
+ ** Contact: Nokia Corporation (developer.feedback@nokia.com)
+ **
+ ** This file is part of the HbCore module of the UI Extensions for Mobile.
+ **
+ ** GNU Lesser General Public License Usage
+ ** This file may be used under the terms of the GNU Lesser General Public
+ ** License version 2.1 as published by the Free Software Foundation and
+ ** appearing in the file LICENSE.LGPL included in the packaging of this file.
+ ** Please review the following information to ensure the GNU Lesser General
+ ** Public License version 2.1 requirements will be met:
+ ** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+ **
+ ** In addition, as a special exception, Nokia gives you certain additional
+ ** rights. These rights are described in the Nokia Qt LGPL Exception
+ ** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+ **
+ ** If you have questions regarding the use of this file, please contact
+ ** Nokia at developer.feedback@nokia.com.
+ **
+ ****************************************************************************/
+
+#ifndef HBEFFECT_H
+#define HBEFFECT_H
+
+#include <hbglobal.h>
+#include <hbnamespace.h>
+#include <QRectF>
+#include <QStringList>
+
+QT_BEGIN_NAMESPACE
+class QGraphicsItem;
+class QVariant;
+QT_END_NAMESPACE
+
+class HbEffect
+ {
+
+public:
+
+ struct EffectStatus
+ {
+ QGraphicsItem *item;
+ QString effectEvent;
+ Hb::EffectEvent reason;
+ QVariant userData;
+ };
+
+ static bool start(QGraphicsItem *item, const QString &itemType,
+ const QString &effectEvent, QObject *receiver = 0,
+ const char *member = 0, const QVariant &userData = QVariant(),
+ const QRectF &extRect = QRectF())
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(itemType);
+ Q_UNUSED(effectEvent);
+ Q_UNUSED(receiver);
+ Q_UNUSED(member);
+ Q_UNUSED(userData);
+ Q_UNUSED(extRect);
+ return false;
+ }
+
+ static bool start(QGraphicsItem *item, const QString &effectEvent,
+ QObject *receiver = 0, const char *member = 0,
+ const QVariant &userData = QVariant(), const QRectF &extRect =
+ QRectF())
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(effectEvent);
+ Q_UNUSED(receiver);
+ Q_UNUSED(member);
+ Q_UNUSED(userData);
+ Q_UNUSED(extRect);
+ return false;
+ }
+
+ static bool start(const QList<QGraphicsItem *> &items,
+ const QString &itemType, const QString &effectEvent,
+ QObject *receiver = 0, const char *member = 0,
+ const QVariant &userData = QVariant())
+ {
+ Q_UNUSED(items);
+ Q_UNUSED(itemType);
+ Q_UNUSED(effectEvent);
+ Q_UNUSED(receiver);
+ Q_UNUSED(member);
+ Q_UNUSED(userData);
+ return false;
+ }
+
+ static bool effectRunning(QGraphicsItem *item, const QString &effectEvent =
+ QString())
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+
+ static bool cancel(QGraphicsItem *item, const QString &effectEvent =
+ QString(), bool clearEffect = false, bool sendCallback = true,
+ bool itemIsValid = true)
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(effectEvent);
+ Q_UNUSED(clearEffect);
+ Q_UNUSED(sendCallback);
+ Q_UNUSED(itemIsValid);
+ return false;
+ }
+
+ static bool add(const QString &itemType, const QString &filePath,
+ const QString &effectEvent = QString())
+ {
+ Q_UNUSED(itemType);
+ Q_UNUSED(filePath);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+ static bool add(const QStringList &itemType, const QStringList &filePath,
+ const QStringList &effectEvent = QStringList())
+ {
+ Q_UNUSED(itemType);
+ Q_UNUSED(filePath);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+
+ static bool add(QGraphicsItem *item, const QString &filePath,
+ const QString &effectEvent = QString())
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(filePath);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+ static bool add(QGraphicsItem *item, const QStringList &filePath,
+ const QStringList &effectEvent = QStringList())
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(filePath);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+
+ static bool remove(const QString &itemType, const QString &filePath,
+ const QString &effectEvent = QString())
+ {
+ Q_UNUSED(itemType);
+ Q_UNUSED(filePath);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+ static bool remove(QGraphicsItem *item, const QString &filePath,
+ const QString &effectEvent = QString())
+ {
+ Q_UNUSED(item);
+ Q_UNUSED(filePath);
+ Q_UNUSED(effectEvent);
+ return false;
+ }
+ static bool remove(QGraphicsItem *item)
+ {
+ Q_UNUSED(item);
+ return false;
+ }
+
+ static void enable(QGraphicsItem *item)
+ {
+ Q_UNUSED(item);
+ }
+ static void disable(QGraphicsItem *item)
+ {
+ Q_UNUSED(item);
+ }
+ };
+
+Q_DECLARE_METATYPE(HbEffect::EffectStatus)
+
+#endif // HBEFFECT_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/rom/unittest_calendayview.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2006-2007 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: Image description file for test project
+*
+*/
+
+#ifndef UNITTEST_CALENDAYITEM_IBY
+#define UNITTEST_CALENDAYITEM_IBY
+
+S60_APP_EXE(unittest_calendayitem)
+S60_APP_RESOURCE(unittest_calendayitem)
+
+// Application registration file.
+data=DATAZ_\private\10003a3f\import\apps\unittest_calendayview_reg.rsc \private\10003a3f\import\apps\unittest_calendayview_reg.rsc
+
+
+#endif // UNITTEST_CALENDAYITEM_IBY
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/unittest_calendayview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,129 @@
+/*
+ * Copyright (c) 2009 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: Test class for CalenDayContainerWidget
+ *
+ */
+#include <QtTest/QtTest>
+
+#include "calenservices.h"
+#include "calendateutils.h"
+#include "calendaymodelmanager.h"
+#include "calendayview.h"
+
+class TestCalenDayView : public QObject
+{
+Q_OBJECT
+
+public:
+ TestCalenDayView();
+ virtual ~TestCalenDayView();
+
+private slots:
+ void initTestCase();
+ void cleanupTestCase();
+ void init();
+ void cleanup();
+
+ void testConstructors();
+
+private:
+ CalenDayView *mView;
+};
+
+/*!
+ Constructor
+ */
+TestCalenDayView::TestCalenDayView() :
+ mView(NULL)
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestCalenDayView::~TestCalenDayView()
+{
+
+}
+
+/*!
+ Called before testcase
+ */
+void TestCalenDayView::initTestCase()
+{
+}
+
+/*!
+ Called after testcase
+ */
+void TestCalenDayView::cleanupTestCase()
+{
+
+}
+
+/*!
+ Called before every function
+ */
+void TestCalenDayView::init()
+{
+
+}
+
+/*!
+ Called after everyfunction
+ */
+void TestCalenDayView::cleanup()
+{
+
+}
+
+void TestCalenDayView::testConstructors()
+{
+ MCalenServices services;
+ //1)
+ CalenDayView *testView = 0;
+ QVERIFY(!testView);
+
+ //2)
+ testView = new CalenDayView(services);
+ QVERIFY(testView);
+
+ delete testView;
+}
+
+int main(int argc, char ** argv)
+
+{
+
+argc++;
+
+argc++;
+
+char * argvNew[3];
+
+argvNew[0]= argv[0];
+
+argvNew[1]= const_cast<char*>("-o");
+
+argvNew[2]= const_cast<char*>("c:\\unittest\\TestCalenDayView.txt");//set place where //output chould be
+
+QApplication app(argc, argvNew);
+
+TestCalenDayView testFile;//file with class containing unit tests
+
+QTest::qExec(&testFile,argc,argvNew);
+
+}
+#include "unittest_calendayview.moc"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittest_calendayview/unittest_calendayview.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,67 @@
+#
+# Copyright (c) 2009 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: calendaycontentwidget test project file
+#
+
+TEMPLATE = app
+TARGET = unittest_calendayview
+
+MOC_DIR = moc
+
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += hb
+
+INCLUDEPATH += . \
+ ../../../inc/ \
+
+DEPENDPATH += . \
+ ../../../inc/ \
+ ../../../src/ \
+
+# Input
+HEADERS += hbeffect.h \
+ calendateutils.h \
+ calenservices.h \
+ calencontext.h \
+ calennotificationhandler.h \
+ calenview.h \
+ calennativeview.h \
+ hb_calencommands.hrh \
+ calendocloader.h \
+ calendarcrkeys.h \
+ calenuid.h \
+ calenpluginlabel.h \
+ calendaymodelmanager.h \
+ calendaycontentwidget.h \
+ calendaycontentscrollarea.h \
+ calendayhourscrollarea.h \
+ calendayutils.h \
+ calendateutils.h \
+ calendayview.h
+
+SOURCES += unittest_calendayview.cpp \
+ calendayview.cpp
+
+symbian : {
+ TARGET.CAPABILITY = CAP_APPLICATION
+ MMP_RULES += "USERINCLUDE ."
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += -lagendainterface \
+ -lxqsettingsmanager
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/dayview/tsrc/unittests/unittests.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,35 @@
+#
+# Copyright (c) 2009 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: calendayview project file for all unittests
+#
+
+TEMPLATE = subdirs
+
+SUBDIRS = unittest_calendaycontentwidget \
+ unittest_calendaystatusstrip \
+ unittest_calendayutils \
+ unittest_calendayitem \
+ unittest_calendayhourelement \
+ unittest_calendayhourscrollarea \
+ unittest_calendayeventspane \
+ unittest_calendayinfo \
+ unittest_calendaycontainer \
+ unittest_calendaymodel \
+ unittest_calendayitemview \
+ unittest_calendaymodelmanager \
+ unittest_calendayview
+
+CONFIG += symbian_test
+
+# End of file --Don't remove this.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/eabi/calenviewsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,215 @@
+EXPORTS
+ _ZN12CalenDayView12doPopulationEv @ 1 NONAME
+ _ZN12CalenDayView9setupViewEP14CalenDocLoader @ 2 NONAME
+ _ZN12CalenDayViewC1ER14MCalenServices @ 3 NONAME
+ _ZN12CalenDayViewC2ER14MCalenServices @ 4 NONAME
+ _ZN12CalenDayViewD0Ev @ 5 NONAME
+ _ZN12CalenDayViewD1Ev @ 6 NONAME
+ _ZN12CalenDayViewD2Ev @ 7 NONAME
+ _ZN14CalenMonthGrid10appendRowsEv @ 8 NONAME
+ _ZN14CalenMonthGrid11downGestureEv @ 9 NONAME
+ _ZN14CalenMonthGrid11prependRowsEv @ 10 NONAME
+ _ZN14CalenMonthGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 11 NONAME
+ _ZN14CalenMonthGrid11qt_metacastEPKc @ 12 NONAME
+ _ZN14CalenMonthGrid12gestureEventEP13QGestureEvent @ 13 NONAME
+ _ZN14CalenMonthGrid13itemActivatedERK11QModelIndex @ 14 NONAME
+ _ZN14CalenMonthGrid14setActiveDatesE5QDate @ 15 NONAME
+ _ZN14CalenMonthGrid14setCurrentIdexEi @ 16 NONAME
+ _ZN14CalenMonthGrid15getCurrentIndexEv @ 17 NONAME
+ _ZN14CalenMonthGrid15mousePressEventEP24QGraphicsSceneMouseEvent @ 18 NONAME
+ _ZN14CalenMonthGrid16staticMetaObjectE @ 19 NONAME DATA 16
+ _ZN14CalenMonthGrid17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 20 NONAME
+ _ZN14CalenMonthGrid17scrollingFinishedEv @ 21 NONAME
+ _ZN14CalenMonthGrid18orientationChangedEN2Qt11OrientationE @ 22 NONAME
+ _ZN14CalenMonthGrid19getStaticMetaObjectEv @ 23 NONAME
+ _ZN14CalenMonthGrid19handleAppendingRowsER5QListI14CalenMonthDataE @ 24 NONAME
+ _ZN14CalenMonthGrid19setFocusToProperDayEv @ 25 NONAME
+ _ZN14CalenMonthGrid20handlePrependingRowsER5QListI14CalenMonthDataE @ 26 NONAME
+ _ZN14CalenMonthGrid20updateMonthGridModelER5QListI14CalenMonthDataEib @ 27 NONAME
+ _ZN14CalenMonthGrid24handlePanGestureFinishedEv @ 28 NONAME
+ _ZN14CalenMonthGrid33updateMonthGridWithInActiveMonthsER5QListI14CalenMonthDataE @ 29 NONAME
+ _ZN14CalenMonthGrid34updateMonthGridWithEventIndicatorsER5QListI14CalenMonthDataE @ 30 NONAME
+ _ZN14CalenMonthGrid5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 31 NONAME
+ _ZN14CalenMonthGrid7setViewEP14CalenMonthView @ 32 NONAME
+ _ZN14CalenMonthGrid9upGestureEv @ 33 NONAME
+ _ZN14CalenMonthGridC1EP13QGraphicsItem @ 34 NONAME
+ _ZN14CalenMonthGridC2EP13QGraphicsItem @ 35 NONAME
+ _ZN14CalenMonthGridD0Ev @ 36 NONAME
+ _ZN14CalenMonthGridD1Ev @ 37 NONAME
+ _ZN14CalenMonthGridD2Ev @ 38 NONAME
+ _ZN14CalenMonthView10createGridEv @ 39 NONAME
+ _ZN14CalenMonthView11qt_metacallEN11QMetaObject4CallEiPPv @ 40 NONAME
+ _ZN14CalenMonthView11qt_metacastEPKc @ 41 NONAME
+ _ZN14CalenMonthView12createEditorEv @ 42 NONAME
+ _ZN14CalenMonthView12doPopulationEv @ 43 NONAME
+ _ZN14CalenMonthView12getActiveDayEv @ 44 NONAME
+ _ZN14CalenMonthView12setActiveDayE9QDateTime @ 45 NONAME
+ _ZN14CalenMonthView13doLazyLoadingEv @ 46 NONAME
+ _ZN14CalenMonthView13getCurrentDayEv @ 47 NONAME
+ _ZN14CalenMonthView13launchDayViewEv @ 48 NONAME
+ _ZN14CalenMonthView13monthDataListEv @ 49 NONAME
+ _ZN14CalenMonthView14addWeekNumbersEv @ 50 NONAME
+ _ZN14CalenMonthView14firstDayOfGridEv @ 51 NONAME
+ _ZN14CalenMonthView14rowsInFutMonthEv @ 52 NONAME
+ _ZN14CalenMonthView14setDateToLabelEv @ 53 NONAME
+ _ZN14CalenMonthView14updateDayLabelEv @ 54 NONAME
+ _ZN14CalenMonthView15dateFromContextERK13MCalenContext @ 55 NONAME
+ _ZN14CalenMonthView15getInstanceListER5QListI5QDateE9QDateTimeS4_ @ 56 NONAME
+ _ZN14CalenMonthView15onLocaleChangedEi @ 57 NONAME
+ _ZN14CalenMonthView15rowsInPrevMonthEv @ 58 NONAME
+ _ZN14CalenMonthView16getCurrGridIndexEv @ 59 NONAME
+ _ZN14CalenMonthView16onContextChangedEv @ 60 NONAME
+ _ZN14CalenMonthView16setCurrGridIndexEi @ 61 NONAME
+ _ZN14CalenMonthView16staticMetaObjectE @ 62 NONAME DATA 16
+ _ZN14CalenMonthView17changeOrientationEN2Qt11OrientationE @ 63 NONAME
+ _ZN14CalenMonthView17populateNextMonthEv @ 64 NONAME
+ _ZN14CalenMonthView17populatePrevMonthEv @ 65 NONAME
+ _ZN14CalenMonthView17removeWeekNumbersEv @ 66 NONAME
+ _ZN14CalenMonthView18addBackgroundFrameEv @ 67 NONAME
+ _ZN14CalenMonthView18completePopulationEv @ 68 NONAME
+ _ZN14CalenMonthView19getStaticMetaObjectEv @ 69 NONAME
+ _ZN14CalenMonthView19populatePreviewPaneER9QDateTime @ 70 NONAME
+ _ZN14CalenMonthView20prepareForPopulationEv @ 71 NONAME
+ _ZN14CalenMonthView21refreshViewOnGoToDateEv @ 72 NONAME
+ _ZN14CalenMonthView22addRemoveActionsInMenuEv @ 73 NONAME
+ _ZN14CalenMonthView22setContextForActiveDayEi @ 74 NONAME
+ _ZN14CalenMonthView22updateWeekNumGridModelEv @ 75 NONAME
+ _ZN14CalenMonthView23handleChangeOrientationEv @ 76 NONAME
+ _ZN14CalenMonthView23handleGridItemActivatedEv @ 77 NONAME
+ _ZN14CalenMonthView24handlePreviewPaneGestureEb @ 78 NONAME
+ _ZN14CalenMonthView24populateWithInstanceViewEv @ 79 NONAME
+ _ZN14CalenMonthView24updateModelWithPrevMonthEv @ 80 NONAME
+ _ZN14CalenMonthView25handleLeftEffectCompletedERKN8HbEffect12EffectStatusE @ 81 NONAME
+ _ZN14CalenMonthView26fetchEntriesAndUpdateModelEv @ 82 NONAME
+ _ZN14CalenMonthView26handleRightEffectCompletedERKN8HbEffect12EffectStatusE @ 83 NONAME
+ _ZN14CalenMonthView26updateModelWithFutureMonthEv @ 84 NONAME
+ _ZN14CalenMonthView27showHideRegionalInformationEv @ 85 NONAME
+ _ZN14CalenMonthView35updateMonthDataArrayWithActiveDatesEv @ 86 NONAME
+ _ZN14CalenMonthView7setDateEv @ 87 NONAME
+ _ZN14CalenMonthView9goToTodayEv @ 88 NONAME
+ _ZN14CalenMonthView9setupViewEP14CalenDocLoader @ 89 NONAME
+ _ZN14CalenMonthViewC1ER14MCalenServices @ 90 NONAME
+ _ZN14CalenMonthViewC2ER14MCalenServices @ 91 NONAME
+ _ZN14CalenMonthViewD0Ev @ 92 NONAME
+ _ZN14CalenMonthViewD1Ev @ 93 NONAME
+ _ZN14CalenMonthViewD2Ev @ 94 NONAME
+ _ZN15CalenAgendaView12doPopulationEv @ 95 NONAME
+ _ZN15CalenAgendaView14clearListModelEv @ 96 NONAME
+ _ZN15CalenAgendaView18HandleNotificationE18TCalenNotification @ 97 NONAME
+ _ZN15CalenAgendaView26disconnectAboutToQuitEventEv @ 98 NONAME
+ _ZN15CalenAgendaView9docLoaderEv @ 99 NONAME
+ _ZN15CalenAgendaView9setupViewEP14CalenDocLoader @ 100 NONAME
+ _ZN15CalenAgendaViewC1ER14MCalenServices @ 101 NONAME
+ _ZN15CalenAgendaViewC2ER14MCalenServices @ 102 NONAME
+ _ZN15CalenAgendaViewD0Ev @ 103 NONAME
+ _ZN15CalenAgendaViewD1Ev @ 104 NONAME
+ _ZN15CalenAgendaViewD2Ev @ 105 NONAME
+ _ZN15CalenNativeView17captureScreenshotEb @ 106 NONAME
+ _ZN16CalenPluginLabelC1ER14MCalenServicesP13QGraphicsItem @ 107 NONAME
+ _ZN16CalenPluginLabelC2ER14MCalenServicesP13QGraphicsItem @ 108 NONAME
+ _ZN16CalenPluginLabelD0Ev @ 109 NONAME
+ _ZN16CalenPluginLabelD1Ev @ 110 NONAME
+ _ZN16CalenPluginLabelD2Ev @ 111 NONAME
+ _ZN16CalenPreviewPane11qt_metacallEN11QMetaObject4CallEiPPv @ 112 NONAME
+ _ZN16CalenPreviewPane11qt_metacastEPKc @ 113 NONAME
+ _ZN16CalenPreviewPane12gestureEventEP13QGestureEvent @ 114 NONAME
+ _ZN16CalenPreviewPane13populateLabelE9QDateTime @ 115 NONAME
+ _ZN16CalenPreviewPane13stopScrollingEv @ 116 NONAME
+ _ZN16CalenPreviewPane15startAutoScrollEv @ 117 NONAME
+ _ZN16CalenPreviewPane16GetInstanceListLEv @ 118 NONAME
+ _ZN16CalenPreviewPane16staticMetaObjectE @ 119 NONAME DATA 16
+ _ZN16CalenPreviewPane17scrollingFinishedEv @ 120 NONAME
+ _ZN16CalenPreviewPane17setNoEntriesLabelEP7HbLabel @ 121 NONAME
+ _ZN16CalenPreviewPane19getStaticMetaObjectEv @ 122 NONAME
+ _ZN16CalenPreviewPane19onTwoSecondsTimeoutEv @ 123 NONAME
+ _ZN16CalenPreviewPane4DateEv @ 124 NONAME
+ _ZN16CalenPreviewPane7setViewEP14CalenMonthView @ 125 NONAME
+ _ZN16CalenPreviewPaneC1ER14MCalenServicesP13QGraphicsItem @ 126 NONAME
+ _ZN16CalenPreviewPaneC2ER14MCalenServicesP13QGraphicsItem @ 127 NONAME
+ _ZN16CalenPreviewPaneD0Ev @ 128 NONAME
+ _ZN16CalenPreviewPaneD1Ev @ 129 NONAME
+ _ZN16CalenPreviewPaneD2Ev @ 130 NONAME
+ _ZN17CalenSettingsView11qt_metacallEN11QMetaObject4CallEiPPv @ 131 NONAME
+ _ZN17CalenSettingsView11qt_metacastEPKc @ 132 NONAME
+ _ZN17CalenSettingsView11refreshViewEv @ 133 NONAME
+ _ZN17CalenSettingsView14initializeFormEv @ 134 NONAME
+ _ZN17CalenSettingsView16staticMetaObjectE @ 135 NONAME DATA 16
+ _ZN17CalenSettingsView18launchPreviousViewEv @ 136 NONAME
+ _ZN17CalenSettingsView19getStaticMetaObjectEv @ 137 NONAME
+ _ZN17CalenSettingsViewC1ER14MCalenServicesP13QGraphicsItem @ 138 NONAME
+ _ZN17CalenSettingsViewC2ER14MCalenServicesP13QGraphicsItem @ 139 NONAME
+ _ZN17CalenSettingsViewD0Ev @ 140 NONAME
+ _ZN17CalenSettingsViewD1Ev @ 141 NONAME
+ _ZN17CalenSettingsViewD2Ev @ 142 NONAME
+ _ZN21CalenAgendaViewWidgetC1ER14MCalenServicesP14CalenDocLoader @ 143 NONAME
+ _ZN21CalenAgendaViewWidgetC2ER14MCalenServicesP14CalenDocLoader @ 144 NONAME
+ _ZN21CalenAgendaViewWidgetD0Ev @ 145 NONAME
+ _ZN21CalenAgendaViewWidgetD1Ev @ 146 NONAME
+ _ZN21CalenAgendaViewWidgetD2Ev @ 147 NONAME
+ _ZN21CalenThickLinesDrawer11qt_metacallEN11QMetaObject4CallEiPPv @ 148 NONAME
+ _ZN21CalenThickLinesDrawer11qt_metacastEPKc @ 149 NONAME
+ _ZN21CalenThickLinesDrawer16staticMetaObjectE @ 150 NONAME DATA 16
+ _ZN21CalenThickLinesDrawer19getStaticMetaObjectEv @ 151 NONAME
+ _ZN21CalenThickLinesDrawer5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 152 NONAME
+ _ZN21CalenThickLinesDrawerC1EN17CalendarNamespace10WidgetTypeEP13QGraphicsItem @ 153 NONAME
+ _ZN21CalenThickLinesDrawerC2EN17CalendarNamespace10WidgetTypeEP13QGraphicsItem @ 154 NONAME
+ _ZN21CalenThickLinesDrawerD0Ev @ 155 NONAME
+ _ZN21CalenThickLinesDrawerD1Ev @ 156 NONAME
+ _ZN21CalenThickLinesDrawerD2Ev @ 157 NONAME
+ _ZNK14CalenMonthGrid10metaObjectEv @ 158 NONAME
+ _ZNK14CalenMonthView10metaObjectEv @ 159 NONAME
+ _ZNK16CalenPreviewPane10metaObjectEv @ 160 NONAME
+ _ZNK17CalenSettingsView10metaObjectEv @ 161 NONAME
+ _ZNK21CalenThickLinesDrawer10metaObjectEv @ 162 NONAME
+ _ZTI14CalenMonthGrid @ 163 NONAME
+ _ZTI14CalenMonthView @ 164 NONAME
+ _ZTI16CalenPreviewPane @ 165 NONAME
+ _ZTI17CalenSettingsView @ 166 NONAME
+ _ZTI21CalenThickLinesDrawer @ 167 NONAME
+ _ZTV14CalenMonthGrid @ 168 NONAME
+ _ZTV14CalenMonthView @ 169 NONAME
+ _ZTV16CalenPreviewPane @ 170 NONAME
+ _ZTV17CalenSettingsView @ 171 NONAME
+ _ZTV21CalenThickLinesDrawer @ 172 NONAME
+ _ZThn16_N12CalenDayViewD0Ev @ 173 NONAME
+ _ZThn16_N12CalenDayViewD1Ev @ 174 NONAME
+ _ZThn16_N14CalenMonthGridD0Ev @ 175 NONAME
+ _ZThn16_N14CalenMonthGridD1Ev @ 176 NONAME
+ _ZThn16_N14CalenMonthViewD0Ev @ 177 NONAME
+ _ZThn16_N14CalenMonthViewD1Ev @ 178 NONAME
+ _ZThn16_N15CalenAgendaViewD0Ev @ 179 NONAME
+ _ZThn16_N15CalenAgendaViewD1Ev @ 180 NONAME
+ _ZThn16_N16CalenPluginLabelD0Ev @ 181 NONAME
+ _ZThn16_N16CalenPluginLabelD1Ev @ 182 NONAME
+ _ZThn16_N16CalenPreviewPaneD0Ev @ 183 NONAME
+ _ZThn16_N16CalenPreviewPaneD1Ev @ 184 NONAME
+ _ZThn16_N17CalenSettingsViewD0Ev @ 185 NONAME
+ _ZThn16_N17CalenSettingsViewD1Ev @ 186 NONAME
+ _ZThn16_N21CalenAgendaViewWidgetD0Ev @ 187 NONAME
+ _ZThn16_N21CalenAgendaViewWidgetD1Ev @ 188 NONAME
+ _ZThn16_N21CalenThickLinesDrawerD0Ev @ 189 NONAME
+ _ZThn16_N21CalenThickLinesDrawerD1Ev @ 190 NONAME
+ _ZThn28_N15CalenAgendaView18HandleNotificationE18TCalenNotification @ 191 NONAME
+ _ZThn8_N12CalenDayViewD0Ev @ 192 NONAME
+ _ZThn8_N12CalenDayViewD1Ev @ 193 NONAME
+ _ZThn8_N14CalenMonthGrid15mousePressEventEP24QGraphicsSceneMouseEvent @ 194 NONAME
+ _ZThn8_N14CalenMonthGrid17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 195 NONAME
+ _ZThn8_N14CalenMonthGrid5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 196 NONAME
+ _ZThn8_N14CalenMonthGridD0Ev @ 197 NONAME
+ _ZThn8_N14CalenMonthGridD1Ev @ 198 NONAME
+ _ZThn8_N14CalenMonthViewD0Ev @ 199 NONAME
+ _ZThn8_N14CalenMonthViewD1Ev @ 200 NONAME
+ _ZThn8_N15CalenAgendaViewD0Ev @ 201 NONAME
+ _ZThn8_N15CalenAgendaViewD1Ev @ 202 NONAME
+ _ZThn8_N16CalenPluginLabelD0Ev @ 203 NONAME
+ _ZThn8_N16CalenPluginLabelD1Ev @ 204 NONAME
+ _ZThn8_N16CalenPreviewPaneD0Ev @ 205 NONAME
+ _ZThn8_N16CalenPreviewPaneD1Ev @ 206 NONAME
+ _ZThn8_N17CalenSettingsViewD0Ev @ 207 NONAME
+ _ZThn8_N17CalenSettingsViewD1Ev @ 208 NONAME
+ _ZThn8_N21CalenAgendaViewWidgetD0Ev @ 209 NONAME
+ _ZThn8_N21CalenAgendaViewWidgetD1Ev @ 210 NONAME
+ _ZThn8_N21CalenThickLinesDrawer5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 211 NONAME
+ _ZThn8_N21CalenThickLinesDrawerD0Ev @ 212 NONAME
+ _ZThn8_N21CalenThickLinesDrawerD1Ev @ 213 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/inc/calenagendaview.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,189 @@
+/*
+* Copyright (c) 2009 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: Class declaration for the agenda view
+*
+*/
+
+#ifndef CALENAGENDAVIEW_H
+#define CALENAGENDAVIEW_H
+
+// System includes
+#include <QDateTime>
+
+// User includes
+#include "calennativeview.h"
+
+// Forward declarations
+class QGraphicsSceneMouseEvent;
+class CalenAgendaViewWidget;
+class CalenDocLoader;
+
+#ifdef CALENVIEWS_DLL
+#define CALENAGENDAVIEW_EXPORT Q_DECL_EXPORT
+#else
+#define CALENAGENDAVIEW_EXPORT Q_DECL_IMPORT
+#endif
+
+/**
+ * @class CalenAgendaView
+ * @brief Class declaration for the agenda view
+ * which shows the list of events &/ to-do's (if any)
+ * for any given day in the calendar. User can do other
+ * basic operations like creating, viewing or deleting
+ * an event
+ */
+class CalenAgendaView : public CalenNativeView
+ {
+ Q_OBJECT
+
+public:
+ /**
+ * @brief Constructor
+ * @param services A reference to the MCalenServices object
+ */
+ CALENAGENDAVIEW_EXPORT CalenAgendaView(MCalenServices &services);
+
+ /**
+ * @brief Default C++ constructor
+ */
+ CALENAGENDAVIEW_EXPORT virtual ~CalenAgendaView();
+
+ /**
+ * @brief Initializes the view after its creation
+ * Must be called only after the view and its children are constructed
+ * @param docLoader Pointer to the document loader object which has
+ * loaded this view from the .docml file
+ */
+ CALENAGENDAVIEW_EXPORT void setupView(CalenDocLoader *docLoader);
+
+ /**
+ * @brief Activates the current view. Sets this view as the current
+ * view of the application's main window. Must be called only after
+ * the view has been constructed and initialized
+ */
+ CALENAGENDAVIEW_EXPORT virtual void doPopulation();
+
+ /**
+ * @brief Callback function for any notifications that has been
+ * subscribed by this view
+ * @param notification The event for which notification is being sent
+ */
+ CALENAGENDAVIEW_EXPORT void HandleNotification(const TCalenNotification notification);
+
+ /**
+ * @brief Getter function for the document loader. Called from the content
+ * widget in order get its children
+ */
+ CALENAGENDAVIEW_EXPORT CalenDocLoader* docLoader();
+
+ /**
+ * @brief clears the list model from the view
+ */
+ CALENAGENDAVIEW_EXPORT void clearListModel();
+
+ /**
+ * disconnectAboutToQuitEvent disconnects for the aboutToQuit events
+ *
+ */
+ CALENAGENDAVIEW_EXPORT void disconnectAboutToQuitEvent();
+
+ /*
+ * @brief Refreshes the view with the date set in the context
+ */
+ void refreshViewOnGoToDate();
+
+protected:
+ void gestureEvent(QGestureEvent *event);
+
+private:
+
+ /**
+ * @brief Connects to all the toolbar and menu actions associated
+ * with this view
+ */
+ void setupActions();
+
+ /**
+ * @brief Callback function for listening to locale changes like
+ * time format, date format etc
+ */
+ void onLocaleChanged(int reason);
+
+private slots:
+
+ /**
+ * @brief Slot which is called whenever the orientation of the device changes
+ * @param orientation The current device orientation
+ */
+ void orientationChanged(Qt::Orientation orientation);
+
+ /**
+ * @brief Slot which launches back the month view
+ */
+ void launchMonthView();
+
+ /**
+ * @brief Slot which launches the day view
+ */
+ void launchDayView();
+
+private:
+
+ /**
+ * @var mDate
+ * @brief The date for which this view is being shown
+ */
+ QDateTime mDate;
+
+ /**
+ * @var mSoftKeyAction
+ * TODO: This may not be required going ahead
+ */
+ HbAction *mSoftKeyAction;
+
+ /**
+ * @var mAgendaViewWidget
+ * @brief The pointer to the content widget of this view
+ */
+ CalenAgendaViewWidget *mAgendaViewWidget;
+
+ /**
+ * @var mDocLoader
+ * @brief Pointer to the document loader which has loaded
+ * this view
+ */
+ CalenDocLoader *mDocLoader;
+
+ /**
+ * @var mGoToTodayAction
+ * Action which provides "Go to today" functionality
+ */
+ HbAction *mGoToTodayAction;
+
+ /**
+ * @var mSwitchToDayViewAction
+ * Action which provides "Switch to day view" functionality
+ */
+ HbAction *mSwitchToDayViewAction;
+
+ // TODO: Remove these after gestures are available
+ QPointF mTapPoint;
+ bool mActionTaken;
+ bool mIsAboutToQuitEventConnected; // bool to check if agenda view is registered to get aboutToQuit signals
+
+};
+
+#endif /* CALENAGENDAVIEW_H */
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/inc/calenagendaviewwidget.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,362 @@
+/*
+* Copyright (c) 2009 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: CalenAgendaViewWidget class definition.
+*
+*/
+
+#ifndef CALENAGENDAVIEWWIDGET_H
+#define CALENAGENDAVIEWWIDGET_H
+
+// System includes
+#include <QGraphicsLinearLayout>
+#include <QDateTime>
+#include <QPointer>
+#include <hbwidget.h>
+
+// User includes
+
+// Forward declarations
+class QStandardItemModel;
+class QGraphicsSceneMouseEvent; // TODO: Remove this after gestures are supported
+class HbAbstractViewItem;
+class HbGroupBox;
+class HbListView;
+class QPluginLoader;
+class HbLabel;
+class HbAction;
+class HbDateTimePicker;
+class XQSettingsManager;
+class MCalenServices;
+class CalenAgendaView;
+class AgendaEntry;
+class CalenDocLoader;
+class CalenEventListViewItem;
+class NotesEditor;
+
+/**
+ * @class CalenAgendaViewWidget
+ * @brief The content widget for the agenda view.
+ * It is responsible for showing all the events &/ to-do's
+ * (if any) for a particular day selected by the user
+ */
+class CalenAgendaViewWidget : public HbWidget
+ {
+ Q_OBJECT
+
+public:
+
+ /**
+ * @brief Constructor
+ * @param services The reference to the MCalenServices object
+ * @param docLoader The document loader object
+ */
+ IMPORT_C CalenAgendaViewWidget(MCalenServices &services,
+ CalenDocLoader *docLoader);
+
+ /**
+ * @brief Default C++ destructor
+ */
+ IMPORT_C ~CalenAgendaViewWidget();
+
+ /**
+ * @brief Initializes the widget to show all the events/to-do's
+ * for the selected day
+ * @param view Pointer to the view to which this is the content
+ */
+ void setupWidget(CalenAgendaView *view);
+
+ /**
+ * @brief Prepares the widget to be shown.
+ * Initializes the widget with the day's events and other details
+ */
+ void showWidget();
+
+ /**
+ * @brief Called from the view whenever the orientation of the
+ * device changes
+ */
+ void orientationChanged(Qt::Orientation);
+
+ /**
+ * @brief Callback function to handle system locale change
+ */
+ void handleLocaleChange();
+
+ /**
+ * @brief clears the list model from the view
+ */
+ void clearListModel();
+
+private:
+
+ /**
+ * @brief Sets the context based on the item selected by the user
+ * @param entry The entry using which the context is deduced
+ */
+ void setContextFromHighlight(AgendaEntry entry);
+
+ /**
+ * @brief Initializes the child widgets of this widget
+ */
+ void initChildWidgets();
+
+ /**
+ * @brief Populates the list with the events for the current day.
+ * Does nothing if the day has no events. To be called whenever
+ * the view has to be refreshed
+ */
+ void populateListWidget();
+
+ /**
+ * @brief Gets the instance list for day
+ */
+ void getInstanceList();
+
+ /**
+ * @brief Sets the heading text to show the date for which this
+ * widget is being shown
+ */
+ void setHeadingText();
+
+ /**
+ * @brief Creates and adds an item to the list at position index
+ * @param index The position in the list when the item is added
+ * @param entry The entry whose details must be shown in the item
+ */
+ void createListItem(int index, AgendaEntry entry);
+
+ /**
+ * @brief Creates and add a list item for the event
+ * @param index The position in the list when the item is added
+ * @param entry The entry whose details must be shown in the item
+ */
+ void addTimedEventToList(int index, AgendaEntry entry);
+
+ /**
+ * @brief Creates and add a list item for the event which is non timed
+ * @param index The position in the list when the item is added
+ * @param entry The entry whose details must be shown in the item
+ */
+ void addNonTimedEventToList(int index, AgendaEntry entry);
+
+ /**
+ * @brief Sets strecthing to list items showing non-timed events
+ */
+ void handleListItemStretching(Qt::Orientation orientation);
+
+ /**
+ * @brief Returns the index in the list to which scrolling must
+ * happen. For ex: After creating a new event, the list must scroll
+ * to the newly created event
+ */
+ int getIndexToScrollTo();
+
+ /**
+ * @brief To Show and hide regional plugin label depends upon settings
+ */
+
+ void showHideRegionalInformation();
+
+
+
+private slots:
+
+ /**
+ * @brief Opens the editor to create a new entry
+ */
+ void createNewEvent();
+
+ /**
+ * @brief Opens the entry at position index in the list for
+ * editing in the editor. Does nothing if the index is invalid
+ */
+ void editEntry();
+
+ /**
+ * @brief Opens the entry at position index in the list for
+ * viewing in the viewer. Does nothing if the index is invalid
+ */
+ void viewEntry();
+
+ /**
+ * @brief Deletes the entry at position index in the list.
+ * Does nothing if the list is empty
+ */
+ void deleteEntry();
+
+ /**
+ * @brief Marks a to-do as done
+ */
+ void markAsDone();
+
+ /**
+ * @brief Handles long press on a particular item. Presents a
+ * context menu with various operations that the user can
+ * perform
+ * @param ite, The index item which is being long pressed
+ * @param coords The (x, y) co-ordinates where the long tap has
+ * occured
+ */
+ void itemLongPressed(HbAbstractViewItem *item, const QPointF &coords);
+
+ /**
+ * @brief Handles user selection on a particular item of a
+ * particular event in the list. Default action is to view it
+ * @param index Index of the item which was selected
+ */
+ void itemActivated(const QModelIndex &index);
+
+ /**
+ * @brief Called whenever a editing a to-do is completed
+ * @param status Inidcates if the editing was successful or not
+ */
+ void noteEditingCompleted(bool status);
+
+ /**
+ * @brief Callback function for navigating to today's agenda
+ * This option must be available only if the view is showing
+ * events for some day other than the current day
+ */
+ void goToToday();
+
+ /**
+ * @brief This slot connected to aboutToClose()signal of contextmenu
+ * To reset the flag of mLongTapEventFlag
+ */
+ void contextMenuClosed();
+
+ /**
+ * @brief Called when contextMenu item is triggered
+ */
+ void contextManuTriggered(HbAction *action);
+
+private:
+ /**
+ * @var mDate
+ * @brief Stores the date for which this widget is being shown
+ */
+ QDateTime mDate;
+
+ /**
+ * @var mInstanceArray
+ * @brief Holds the list of instances for the day
+ */
+ QList<AgendaEntry> mInstanceArray;
+
+ /**
+ * @var mHeadingLabel
+ * @brief The heading widget which shows the date
+ */
+ HbGroupBox *mHeadingLabel;
+
+ /**
+ * @var mEventsList
+ * @brief The list view which shows the list of events
+ */
+ HbListView *mEventsList;
+
+ /**
+ * @var mServices
+ * @brief The reference to the MCalenServices object
+ */
+ MCalenServices &mServices;
+
+ /**
+ * @var mView
+ * @brief The pointer to the view
+ */
+ CalenAgendaView *mView;
+
+ /**
+ * @var mDocLoader
+ * @brief The pointer to the document loader which has
+ * loaded this widget
+ */
+ CalenDocLoader *mDocLoader;
+
+ /**
+ * @var mListViewPrototype
+ * @brief Acts as the item prototype for list view.
+ * Allows providing own layout for list items
+ */
+ CalenEventListViewItem *mListViewPrototype;
+
+ /**
+ * @var mEmptyListLabel
+ * @brief The pointer to the empty view label
+ */
+ HbLabel *mEmptyListLabel;
+
+ /**
+ * @var mListModel
+ * @brief The event list model
+ */
+ QStandardItemModel *mListModel;
+
+ /**
+ * @var mSelectedIndex
+ * @brief Stores the index of the item being acted upon
+ * Since there is no focus, it becomes necessary to store the
+ * index of the item on which user is performing some action
+ */
+ int mSelectedIndex;
+
+ /**
+ * @var NotesEditorPluginLoader
+ * @brief Pointer to the notes editor plugin loader
+ */
+ QPointer<QPluginLoader> mNotesEditorPluginLoader;
+
+ /**
+ * @var mDatePicker
+ * @brief The date picker component
+ */
+ HbDateTimePicker *mDatePicker;
+
+ /**
+ * @var mRegionalPluginLayout
+ * @brief Regional Plugin layout pointer
+ */
+ QGraphicsLinearLayout* mRegionalPluginLayout;
+
+ /**
+ * @var mRegionalInfoGroupBox
+ * @brief Regional Plugin Info groupbox
+ */
+ HbGroupBox *mRegionalInfoGroupBox;
+
+ /**
+ * @var mSettingsManager
+ * @brief Setting Manager pointer
+ */
+
+ XQSettingsManager *mSettingsManager;
+
+ /**
+ * @var mLongTapeventFlag
+ * @brief Set flag true if contextmenu is opened
+ */
+ bool mLongTapEventFlag;
+
+ /**
+ * @var mNotesPluginLoaded
+ * @brief Holds notes editor plugin load info.
+ */
+ bool mNotesPluginLoaded;
+
+};
+
+#endif //CALENAGENDAVIEWWIDGET_H
+
+// End of file --Don't remove this.
--- a/calendarui/views/inc/calendayview.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,175 +0,0 @@
-/*
-* Copyright (c) 2009 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: Class declaration for the day/agenda view
-*
-*/
-
-#ifndef CALENDAYVIEW_H
-#define CALENDAYVIEW_H
-
-// System includes
-#include <QDateTime>
-
-// User includes
-#include "calennativeview.h"
-
-// Forward declarations
-class QGraphicsSceneMouseEvent;
-class CalenDayViewWidget;
-class CalenDocLoader;
-
-#ifdef CALENVIEWS_DLL
-#define CALENDAYVIEW_EXPORT Q_DECL_EXPORT
-#else
-#define CALENDAYVIEW_EXPORT Q_DECL_IMPORT
-#endif
-
-/**
- * @class CalenDayView
- * @brief Class declaration for the day/agenda view
- * which shows the list of events &/ to-do's (if any)
- * for any given day in the calendar. User can do other
- * basic operations like creating, viewing or deleting
- * an event
- */
-class CalenDayView : public CalenNativeView
- {
- Q_OBJECT
-
-public:
- /**
- * @brief Constructor
- * @param services A reference to the MCalenServices object
- */
- CALENDAYVIEW_EXPORT CalenDayView(MCalenServices &services);
-
- /**
- * @brief Default C++ constructor
- */
- CALENDAYVIEW_EXPORT virtual ~CalenDayView();
-
- /**
- * @brief Initializes the view after its creation
- * Must be called only after the view and its children are constructed
- * @param docLoader Pointer to the document loader object which has
- * loaded this view from the .docml file
- */
- CALENDAYVIEW_EXPORT void setupView(CalenDocLoader *docLoader);
-
- /**
- * @brief Activates the current view. Sets this view as the current
- * view of the application's main window. Must be called only after
- * the view has been constructed and initialized
- */
- CALENDAYVIEW_EXPORT virtual void doPopulation();
-
- /**
- * @brief Callback function for any notifications that has been
- * subscribed by this view
- * @param notification The event for which notification is being sent
- */
- CALENDAYVIEW_EXPORT void HandleNotification(const TCalenNotification notification);
-
- /**
- * @brief Getter function for the document loader. Called from the content
- * widget in order get its children
- */
- CALENDAYVIEW_EXPORT CalenDocLoader* docLoader();
-
- /**
- * @brief clears the list model from the view
- */
- CALENDAYVIEW_EXPORT void clearListModel();
-
- /*
- * @brief Refreshes the view with the date set in the context
- */
- void refreshViewOnGoToDate();
-
-protected:
-
- // TODO: Remove these after gestures are available
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent *event);
- bool eventFilter(QObject *source, QEvent *event);
-
-private:
-
- /**
- * @brief Connects to all the toolbar and menu actions associated
- * with this view
- */
- void setupActions();
-
- /**
- * @brief Callback function for listening to locale changes like
- * time format, date format etc
- */
- void onLocaleChanged(int reason);
-
-private slots:
-
- /**
- * @brief Slot which is called whenever the orientation of the device changes
- * @param orientation The current device orientation
- */
- void orientationChanged(Qt::Orientation orientation);
-
- /**
- * @brief Slot which launches back the month view
- */
- void launchMonthView();
-
-private:
-
- /**
- * @var mDate
- * @brief The date for which this view is being shown
- */
- QDateTime mDate;
-
- /**
- * @var mSoftKeyAction
- * TODO: This may not be required going ahead
- */
- HbAction *mSoftKeyAction;
-
- /**
- * @var mDayViewWidget
- * @brief The pointer to the content widget of this view
- */
- CalenDayViewWidget *mDayViewWidget;
-
- /**
- * @var mDocLoader
- * @brief Pointer to the document loader which has loaded
- * this view
- */
- CalenDocLoader *mDocLoader;
-
- /**
- * @var mGoToTodayAction
- * Action which provides "Go to today" functionality
- */
- HbAction *mGoToTodayAction;
-
- // TODO: Remove these after gestures are available
- QPointF mTapPoint;
- bool mActionTaken;
-
-};
-
-#endif /* CALENDAYVIEW_H */
-
-// End of file --Don't remove this.
--- a/calendarui/views/inc/calendayviewwidget.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,352 +0,0 @@
-/*
-* Copyright (c) 2009 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: CalenDayViewWidget class definition.
-*
-*/
-
-#ifndef CALENDAYVIEWWIDGET_H
-#define CALENDAYVIEWWIDGET_H
-
-// System includes
-#include <QGraphicsLinearLayout>
-#include <QDateTime>
-#include <hbwidget.h>
-
-// User includes
-
-// Forward declarations
-class QStandardItemModel;
-class QGraphicsSceneMouseEvent; // TODO: Remove this after gestures are supported
-class HbAbstractViewItem;
-class HbGroupBox;
-class HbListView;
-class HbLabel;
-class HbAction;
-class HbDateTimePicker;
-class XQSettingsManager;
-class MCalenServices;
-class CalenDayView;
-class AgendaEntry;
-class CalenDocLoader;
-class CalenEventListViewItem;
-class NotesEditor;
-
-/**
- * @class CalenDayViewWidget
- * @brief The content widget for the day/agenda view.
- * It is responsible for showing all the events &/ to-do's
- * (if any) for a particular day selected by the user
- */
-class CalenDayViewWidget : public HbWidget
- {
- Q_OBJECT
-
-public:
-
- /**
- * @brief Constructor
- * @param services The reference to the MCalenServices object
- * @param docLoader The document loader object
- */
- IMPORT_C CalenDayViewWidget(MCalenServices &services,
- CalenDocLoader *docLoader);
-
- /**
- * @brief Default C++ destructor
- */
- IMPORT_C ~CalenDayViewWidget();
-
- /**
- * @brief Initializes the widget to show all the events/to-do's
- * for the selected day
- * @param view Pointer to the view to which this is the content
- */
- void setupWidget(CalenDayView *view);
-
- /**
- * @brief Prepares the widget to be shown.
- * Initializes the widget with the day's events and other details
- */
- void showWidget();
-
- /**
- * @brief Called from the view whenever the orientation of the
- * device changes
- */
- void orientationChanged(Qt::Orientation);
-
- /**
- * @brief Callback function to handle system locale change
- */
- void handleLocaleChange();
-
- /**
- * @brief clears the list model from the view
- */
- void clearListModel();
-
-private:
-
- /**
- * @brief Sets the context based on the item selected by the user
- * @param entry The entry using which the context is deduced
- */
- void setContextFromHighlight(AgendaEntry entry);
-
- /**
- * @brief Initializes the child widgets of this widget
- */
- void initChildWidgets();
-
- /**
- * @brief Populates the list with the events for the current day.
- * Does nothing if the day has no events. To be called whenever
- * the view has to be refreshed
- */
- void populateListWidget();
-
- /**
- * @brief Gets the instance list for day
- */
- void getInstanceList();
-
- /**
- * @brief Sets the heading text to show the date for which this
- * widget is being shown
- */
- void setHeadingText();
-
- /**
- * @brief Creates and adds an item to the list at position index
- * @param index The position in the list when the item is added
- * @param entry The entry whose details must be shown in the item
- */
- void createListItem(int index, AgendaEntry entry);
-
- /**
- * @brief Creates and add a list item for the event
- * @param index The position in the list when the item is added
- * @param entry The entry whose details must be shown in the item
- */
- void addTimedEventToList(int index, AgendaEntry entry);
-
- /**
- * @brief Creates and add a list item for the event which is non timed
- * @param index The position in the list when the item is added
- * @param entry The entry whose details must be shown in the item
- */
- void addNonTimedEventToList(int index, AgendaEntry entry);
-
- /**
- * @brief Sets strecthing to list items showing non-timed events
- */
- void handleListItemStretching(Qt::Orientation orientation);
-
- /**
- * @brief Returns the index in the list to which scrolling must
- * happen. For ex: After creating a new event, the list must scroll
- * to the newly created event
- */
- int getIndexToScrollTo();
-
- /**
- * @brief To Show and hide regional plugin label depends upon settings
- */
-
- void showHideRegionalInformation();
-
-private slots:
-
- /**
- * @brief Opens the editor to create a new entry
- */
- void createNewEvent();
-
- /**
- * @brief Opens the entry at position index in the list for
- * editing in the editor. Does nothing if the index is invalid
- */
- void editEntry();
-
- /**
- * @brief Opens the entry at position index in the list for
- * viewing in the viewer. Does nothing if the index is invalid
- */
- void viewEntry();
-
- /**
- * @brief Deletes the entry at position index in the list.
- * Does nothing if the list is empty
- */
- void deleteEntry();
-
- /**
- * @brief Marks a to-do as done
- */
- void markAsDone();
-
- /**
- * @brief Handles long press on a particular item. Presents a
- * context menu with various operations that the user can
- * perform
- * @param ite, The index item which is being long pressed
- * @param coords The (x, y) co-ordinates where the long tap has
- * occured
- */
- void itemLongPressed(HbAbstractViewItem *item, const QPointF &coords);
-
- /**
- * @brief Handles user selection on a particular item of a
- * particular event in the list. Default action is to view it
- * @param index Index of the item which was selected
- */
- void itemActivated(const QModelIndex &index);
-
- /**
- * @brief Called whenever a editing a to-do is completed
- * @param status Inidcates if the editing was successful or not
- */
- void noteEditingCompleted(bool status);
-
- /**
- * @brief Callback function for navigating to today's agenda
- * This option must be available only if the view is showing
- * events for some day other than the current day
- */
- void goToToday();
-
- /**
- * @brief This slot connected to aboutToClose()signal of contextmenu
- * To reset the flag of mLongTapEventFlag
- */
- void contextMenuClosed();
-
- /**
- * @brief Called when contextMenu item is triggered
- */
- void contextManuTriggered(HbAction *action);
-
-private:
- /**
- * @var mDate
- * @brief Stores the date for which this widget is being shown
- */
- QDateTime mDate;
-
- /**
- * @var mInstanceArray
- * @brief Holds the list of instances for the day
- */
- QList<AgendaEntry> mInstanceArray;
-
- /**
- * @var mHeadingLabel
- * @brief The heading widget which shows the date
- */
- HbGroupBox *mHeadingLabel;
-
- /**
- * @var mEventsList
- * @brief The list view which shows the list of events
- */
- HbListView *mEventsList;
-
- /**
- * @var mServices
- * @brief The reference to the MCalenServices object
- */
- MCalenServices &mServices;
-
- /**
- * @var mView
- * @brief The pointer to the view
- */
- CalenDayView *mView;
-
- /**
- * @var mDocLoader
- * @brief The pointer to the document loader which has
- * loaded this widget
- */
- CalenDocLoader *mDocLoader;
-
- /**
- * @var mListViewPrototype
- * @brief Acts as the item prototype for list view.
- * Allows providing own layout for list items
- */
- CalenEventListViewItem *mListViewPrototype;
-
- /**
- * @var mEmptyListLabel
- * @brief The pointer to the empty view label
- */
- HbLabel *mEmptyListLabel;
-
- /**
- * @var mListModel
- * @brief The event list model
- */
- QStandardItemModel *mListModel;
-
- /**
- * @var mSelectedIndex
- * @brief Stores the index of the item being acted upon
- * Since there is no focus, it becomes necessary to store the
- * index of the item on which user is performing some action
- */
- int mSelectedIndex;
-
- /**
- * @var NotesEditor
- * @brief Pointer to the notes editor
- */
- NotesEditor *mNotesEditor;
-
- /**
- * @var mDatePicker
- * @brief The date picker component
- */
- HbDateTimePicker *mDatePicker;
-
- /**
- * @var mRegionalPluginLayout
- * @brief Regional Plugin layout pointer
- */
- QGraphicsLinearLayout* mRegionalPluginLayout;
-
- /**
- * @var mRegionalInfoGroupBox
- * @brief Regional Plugin Info groupbox
- */
- HbGroupBox *mRegionalInfoGroupBox;
-
- /**
- * @var mSettingsManager
- * @brief Setting Manager pointer
- */
-
- XQSettingsManager *mSettingsManager;
-
- /**
- * @var mLongTapeventFlag
- * @brief Set flag true if contextmenu is opened
- */
- bool mLongTapEventFlag;
-
-};
-
-#endif //CALENDAYVIEWWIDGET_H
-
-// End of file --Don't remove this.
--- a/calendarui/views/inc/caleneventlistviewitem.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/caleneventlistviewitem.h Thu Jul 22 16:32:51 2010 +0100
@@ -24,17 +24,12 @@
class CalenEventListViewItem : public HbListViewItem
{
Q_OBJECT
- Q_PROPERTY(bool timeFormat12 READ timeFormat12Hr WRITE setTimeFormat12Hr)
public:
CalenEventListViewItem(QGraphicsItem *parent = 0);
~CalenEventListViewItem();
HbAbstractViewItem * createItem();
void updateChildItems();
- bool timeFormat12Hr();
- void setTimeFormat12Hr(bool format);
-private:
- bool timeFormat12;
};
#endif // __CALEN_EVENT_LIST_VIEW_ITEM_H__
--- a/calendarui/views/inc/calengriditemprototype.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calengriditemprototype.h Thu Jul 22 16:32:51 2010 +0100
@@ -28,6 +28,7 @@
class HbIconItem;
class HbTextItem;
class HbFrameItem;
+class CalenTodayIndicatorLineDrawer;
// CONSTANTS
const QString focusIconName = "qtg_fr_cal_focused_day_ind";
@@ -54,8 +55,6 @@
void createPrimitives();
private:
- void drawUnderline(bool underlineEnabled);
-private:
QColor mTodayUnderLineColor;
QColor mActiveTextColor;
QColor mInActiveTextColor;
@@ -64,7 +63,7 @@
HbIconItem *mEventIndicatorItem;
HbTextItem *mMonthDayInfoItem;
HbFrameItem *mFocusIndicatorItem;
- HbIconItem *mTodayIndicatorItem;
+ CalenTodayIndicatorLineDrawer *mTodayIndicatorItem;
};
#endif // CALENGRIDITEMPROTOTYPE_H
--- a/calendarui/views/inc/calenmonthgrid.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calenmonthgrid.h Thu Jul 22 16:32:51 2010 +0100
@@ -66,8 +66,11 @@
protected:
void orientationChanged(Qt::Orientation newOrientation);
+ void gestureEvent(QGestureEvent *event);
private:
+ void downGesture();
+ void upGesture();
void handlePrependingRows(QList<CalenMonthData > &monthDataList);
void handleAppendingRows(QList<CalenMonthData > &monthDataList);
void handlePanGestureFinished();
@@ -84,11 +87,6 @@
void appendRows();
void itemActivated(const QModelIndex &index);
-protected slots:
- void downGesture(int value);
- void upGesture(int value);
- void panGesture(const QPointF &delta);
-
private:
QStandardItemModel *mModel;
QList<CalenMonthData> mMonthDataArray;
--- a/calendarui/views/inc/calenmonthview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calenmonthview.h Thu Jul 22 16:32:51 2010 +0100
@@ -23,6 +23,7 @@
#include <qdatetime.h>
#include <hblabel.h>
#include <hbextendedlocale.h>
+#include <hbframeitem.h>
// User includes
#include "calennativeview.h"
@@ -46,7 +47,6 @@
class CalenPluginLabel;
// Constants
-const int KCalenDaysInWeek = 7;
const int KNumOfVisibleRows = 6;
#ifdef CALENVIEWS_DLL
@@ -85,6 +85,7 @@
void handlePreviewPaneGesture(bool rightGesture);
QDateTime firstDayOfGrid();
void fetchEntriesAndUpdateModel();
+ void launchDayView();
private:
void createGrid();
@@ -105,6 +106,7 @@
void refreshViewOnGoToDate();
void showHideRegionalInformation();
void onContextChanged();
+ void updateDayLabel();
private slots:
void createEditor();
@@ -113,9 +115,6 @@
void handleLeftEffectCompleted(const HbEffect::EffectStatus &status);
void handleRightEffectCompleted(const HbEffect::EffectStatus &status);
void addRemoveActionsInMenu();
-
-public slots:
- void launchDayView();
void changeOrientation(Qt::Orientation orientation);
private:
@@ -175,6 +174,7 @@
CalenPluginLabel *mNextRegionalInfo;
HbMenu *mDeleteSubMenu;
QColor mWeekDaysColor;
+ bool mIsAboutToQuitEventConnected; // bool to check if month view is registered to get aboutToQuit signals
};
#endif //CALENMONTHVIEW_H
--- a/calendarui/views/inc/calennativeview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calennativeview.h Thu Jul 22 16:32:51 2010 +0100
@@ -19,6 +19,12 @@
#ifndef CALENNATIVEVIEW_H
#define CALENNATIVEVIEW_H
+#ifdef CALENVIEWS_DLL
+#define CALENNATIVEVIEW_EXPORT Q_DECL_EXPORT
+#else
+#define CALENNATIVEVIEW_EXPORT Q_DECL_IMPORT
+#endif
+
// System includes
#include <hblabel.h>
#include <hblistwidget.h>
@@ -47,6 +53,10 @@
TBool pluginEnabled();
virtual void refreshViewOnGoToDate();
QString *pluginText();
+ /**
+ * captureScreenshot captures the current screenshot
+ */
+ CALENNATIVEVIEW_EXPORT void captureScreenshot(bool captureScreenShot = false);
protected: // New functions
CalenNativeView( MCalenServices& services );
@@ -63,13 +73,20 @@
void deleteAllEntries();
void launchSettingsView();
virtual void changeOrientation(Qt::Orientation orientation);
+ /**
+ * saveActivity saves the current view as an activity
+ *
+ */
+ void saveActivity();
protected:
MCalenServices &mServices; // not owned.
-
+ int mActivityId; // Recent Activity ID, currently it holdes wither of ECalenMonthView or ECalenAgendaView
+ QVariantHash mScreenShotMetadata; // Screenshot
private:
HbDateTimePicker *mDatePicker;
+ bool mIsCapturedScreenShotValid; // to check if the captured screenshot is valid
};
#endif // CALENNATIVEVIEW_H
--- a/calendarui/views/inc/calenpluginlabel.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calenpluginlabel.h Thu Jul 22 16:32:51 2010 +0100
@@ -27,11 +27,12 @@
Q_OBJECT
public:
- CalenPluginLabel(MCalenServices &services, QGraphicsItem *parent = 0);
- ~CalenPluginLabel();
+ IMPORT_C CalenPluginLabel(MCalenServices &services, QGraphicsItem *parent = 0);
+ IMPORT_C ~CalenPluginLabel();
-private:
- void mousePressEvent(QGraphicsSceneMouseEvent *event);
+protected:
+ void gestureEvent(QGestureEvent *event);
+
private:
MCalenServices &mServices;
--- a/calendarui/views/inc/calenpreviewpane.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calenpreviewpane.h Thu Jul 22 16:32:51 2010 +0100
@@ -23,7 +23,6 @@
// System includes
#include <qdatetime.h>
#include <hbscrollarea.h>
-#include <hbgridviewitem.h>
// Forward declarations
class HbLabel;
@@ -50,12 +49,12 @@
void populateLabel( QDateTime date);
QDateTime Date();
void startAutoScroll();
- void mousePressEvent(QGraphicsSceneMouseEvent* event);
- void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
- void mouseMoveEvent(QGraphicsSceneMouseEvent* event);
void setView(CalenMonthView* view);
void stopScrolling();
+protected:
+ void gestureEvent(QGestureEvent *event);
+
private:
void GetInstanceListL();
@@ -82,6 +81,8 @@
HbLabel* mNoEntriesLabel;
bool mIsNoEntriesAdded;
bool mIsGestureHandled;
+ qreal mHtDiff;
+ int mScrollDuration;
};
#endif /* CALENPREVIEWPANE_H_ */
--- a/calendarui/views/inc/calensettingsview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/inc/calensettingsview.h Thu Jul 22 16:32:51 2010 +0100
@@ -44,19 +44,20 @@
public:
void initializeForm();
+ void refreshView();
private slots:
void launchPreviousView();
private:
- /**
- * @var mSoftKeyAction
- * @brief Holder for soft key action
- */
- HbAction *mSoftKeyAction;
+ MCalenServices &mServices;
HbDataForm *mCalenSettingsForm;
CalenSettings *mCalenSettings;
- MCalenServices &mServices;
+ /**
+ * @var mSoftKeyAction
+ * @brief Holder for soft key action
+ */
+ HbAction *mSoftKeyAction;
};
#endif // DTSETTINGVIEW_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/inc/calentodayindicatorlinedrawer.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: CalenTodayIndicatorLineDrawer class definition.
+*
+*/
+
+#ifndef CALENTODAYINDICATORLINEDRAWER_H
+#define CALENTODAYINDICATORLINEDRAWER_H
+
+// System includes
+#include <hbwidget.h>
+
+class CalenTodayIndicatorLineDrawer : public HbWidgetBase
+{
+ Q_OBJECT
+
+public:
+ CalenTodayIndicatorLineDrawer( QGraphicsItem* parent = NULL );
+ virtual ~CalenTodayIndicatorLineDrawer();
+
+private:
+ void paint(
+ QPainter* painter, const QStyleOptionGraphicsItem* option,
+ QWidget* widget);
+
+private slots:
+ void handleThemeChange();
+
+};
+#endif /* CALENTODAYINDICATORLINEDRAWER_H */
+
+// End of file --Don't remove this.
--- a/calendarui/views/resources/caleneventlistviewitem.css Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/resources/caleneventlistviewitem.css Thu Jul 22 16:32:51 2010 +0100
@@ -6,72 +6,78 @@
layout: custom-stretch;
}
-CalenEventListViewItem[timeFormat12="true"]::text-1{
- fixed-width: 13.5un;
- text-height: var(hb-param-text-height-secondary);
- text-align: left;
- top: -var(hb-param-margin-gene-top);
- left: -var(hb-param-margin-gene-left);
- right: var(hb-param-margin-gene-right);
- text-line-count-max: 2;
- text-line-count-min: 2;
+CalenEventListViewItem::icon-1[layoutName="custom"]{
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-middle-horizontal);
+ fixed-width: var(hb-param-graphic-size-primary-small);
+ fixed-height: var(hb-param-graphic-size-primary-small);
+}
+
+CalenEventListViewItem::icon-2{
+ top: -var(hb-param-margin-gene-top);
+ right: var(hb-param-margin-gene-middle-horizontal);
+ fixed-width: var(hb-param-graphic-size-secondary);
+ fixed-height: var(hb-param-graphic-size-secondary);
}
-CalenEventListViewItem[timeFormat12="false"]::text-1{
- fixed-width: 9.5un;
- text-height: var(hb-param-text-height-secondary);
- text-align: right;
- top: -var(hb-param-margin-gene-top);
- left: -var(hb-param-margin-gene-left);
- right: var(hb-param-margin-gene-right);
- text-line-count-max: 2;
- text-line-count-min: 2;
+CalenEventListViewItem::icon-3{
+ top: -var(hb-param-margin-gene-top);
+ right: var(hb-param-margin-gene-right);
+ fixed-width: var(hb-param-graphic-size-secondary);
+ fixed-height: var(hb-param-graphic-size-secondary);
}
-CalenEventListViewItem::text-2[layoutName="custom"]{
- font-variant: primary;
- text-align: left;
+CalenEventListViewItem::icon-4{
+ right: var(hb-param-margin-gene-right);
+ fixed-width: var(hb-param-graphic-size-secondary);
+ fixed-height: var(hb-param-graphic-size-secondary);
+}
+
+CalenEventListViewItem::text-1{
+ left: -var(hb-param-margin-gene-left);
top: -var(hb-param-margin-gene-top);
- right: var(hb-param-margin-gene-middle-horizontal);
- min-width: 29un;
+ right: var(hb-param-margin-gene-middle-horizontal);
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+
}
-CalenEventListViewItem::text-3[layoutName="custom"]{
- font-variant: secondary;
- text-align: left;
- top: -var(hb-param-margin-gene-middle-vertical);
- bottom: var(hb-param-margin-gene-bottom);
- right: var(hb-param-margin-gene-middle-horizontal);
- min-width: 34un;
+CalenEventListViewItem::text-2{
+ top: -var(hb-param-margin-gene-top);
+ font-variant: primary;
+ text-height: var(hb-param-text-height-secondary);
+ text-align: left;
+ fixed-width: 29un;
}
-CalenEventListViewItem::icon-1[layoutName="custom"]{
- top: -var(hb-param-margin-gene-top);
- left: -var(hb-param-margin-gene-top);
- right: var(hb-param-margin-gene-middle-horizontal);
+CalenEventListViewItem::text-3{
+ top: -var(hb-param-margin-gene-middle-vertical);
+ bottom: var(hb-param-margin-gene-bottom);
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+ text-align: left;
+ fixed-width: 35un;
}
-CalenEventListViewItem::icon-2[layoutName="custom"]{
- top: -var(hb-param-margin-gene-top);
- right: var(hb-param-margin-gene-middle-horizontal);
- text-align: right;
- fixed-width: var(hb-param-graphic-size-secondary);
- fixed-height: var(hb-param-graphic-size-secondary);
+CalenEventListViewItem::text-4{
+ font-variant: secondary;
+ text-height: var(hb-param-text-height-secondary);
+}
+
+CalenEventListViewItem::text-2:landscape[stretchItem="false"]{
+ fixed-width: 70un;
}
-CalenEventListViewItem::icon-3[layoutName="custom"]{
- top: -var(hb-param-margin-gene-top);
- right: var(hb-param-margin-gene-right);
- fixed-width: var(hb-param-graphic-size-secondary);
- fixed-height: var(hb-param-graphic-size-secondary);
+CalenEventListViewItem::text-3:landscape[stretchItem="false"]{
+ fixed-width: 70un;
}
-CalenEventListViewItem::icon-4[layoutName="custom"]{
- top: -var(hb-param-margin-gene-middle-vertical);
- right: var(hb-param-margin-gene-right);
- bottom: var(hb-param-margin-gene-bottom);
- fixed-width: var(hb-param-graphic-size-secondary);
- fixed-height: var(hb-param-graphic-size-secondary);
+CalenEventListViewItem::text-2:landscape[stretchItem="true"]{
+ fixed-width: 35un;
+ bottom: var(hb-param-margin-gene-bottom);
}
-
+CalenEventListViewItem::text-3:landscape[stretchItem="true"]{
+ fixed-width: 40un;
+ top: -var(hb-param-margin-gene-top);
+}
--- a/calendarui/views/resources/caleneventlistviewitem.widgetml Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/resources/caleneventlistviewitem.widgetml Thu Jul 22 16:32:51 2010 +0100
@@ -2,54 +2,52 @@
<layout name="custom" type="mesh">
<meshitem src="text-1" srcEdge="TOP" dst="" dstEdge="TOP"/>
<meshitem src="text-1" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="text-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
+ <meshitem src="text-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
<meshitem src="text-2" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="text-2" srcEdge="RIGHT" dst="icon-2" dstEdge="LEFT"/>
<meshitem src="text-2" srcEdge="BOTTOM" dst="text-3" dstEdge="TOP"/>
- <meshitem src="text-3" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
- <meshitem src="text-3" srcEdge="LEFT" dst="text-2" dstEdge="LEFT"/>
-
- <meshitem src="icon-1" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="icon-1" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="icon-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
-
- <meshitem src="icon-2" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="icon-2" srcEdge="RIGHT" dst="icon-3" dstEdge="LEFT"/>
-
- <meshitem src="icon-3" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="icon-3" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
-
- <meshitem src="icon-4" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
- <meshitem src="icon-4" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
+ <meshitem src="text-3" srcEdge="LEFT" dst="text-2" dstEdge="LEFT"/>
+ <meshitem src="text-3" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
+
+ <meshitem src="text-4" srcEdge="TOP" dst="text-3" dstEdge="TOP"/>
+ <meshitem src="text-4" srcEdge="LEFT" dst="text-1" dstEdge="LEFT"/>
+ <meshitem src="text-4" srcEdge="RIGHT" dst="text-1" dstEdge="RIGHT"/>
+ <meshitem src="text-4" srcEdge="BOTTOM" dst="text-3" dstEdge="BOTTOM"/>
+
+ <meshitem src="icon-1" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
+ <meshitem src="icon-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
+ <meshitem src="icon-1" srcEdge="CENTERV" dst="text-2" dstEdge="CENTERV"/>
+
+ <meshitem src="icon-2" srcEdge="TOP" dst="" dstEdge="TOP"/>
+ <meshitem src="icon-2" srcEdge="RIGHT" dst="icon-3" dstEdge="LEFT"/>
+
+ <meshitem src="icon-3" srcEdge="TOP" dst="" dstEdge="TOP"/>
+ <meshitem src="icon-3" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
+
+ <meshitem src="icon-4" srcEdge="TOP" dst="text-3" dstEdge="TOP"/>
+ <meshitem src="icon-4" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
</layout>
- <layout name="custom-stretch" type="mesh">
- <meshitem src="text-1" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="text-1" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="text-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
-
- <meshitem src="text-2" srcEdge="RIGHT" dst="icon-2" dstEdge="LEFT"/>
- <meshitem src="text-2" srcEdge="CENTERV" dst="icon-1" dstEdge="CENTERV"/>
-
- <meshitem src="text-3" srcEdge="RIGHT" dst="icon-4" dstEdge="LEFT"/>
- <meshitem src="text-3" srcEdge="CENTERV" dst="icon-1" dstEdge="CENTERV"/>
-
- <meshitem src="icon-1" srcEdge="TOP" dst="" dstEdge="TOP"/>
- <meshitem src="icon-1" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
- <meshitem src="icon-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
- <meshitem src="icon-1" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="var(hb-param-margin-gene-bottom)"/>
-
- <meshitem src="icon-2" srcEdge="RIGHT" dst="icon-3" dstEdge="LEFT"/>
- <meshitem src="icon-2" srcEdge="CENTERV" dst="icon-1" dstEdge="CENTERV"/>
-
- <meshitem src="icon-3" srcEdge="RIGHT" dst="text-3" dstEdge="LEFT"/>
- <meshitem src="icon-3" srcEdge="CENTERV" dst="icon-1" dstEdge="CENTERV"/>
-
- <meshitem src="icon-4" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
- <meshitem src="icon-4" srcEdge="CENTERV" dst="icon-1" dstEdge="CENTERV"/>
- </layout>
+ <layout name="custom-stretch" type="mesh">
+ <meshitem src="icon-1" srcEdge="LEFT" dst="" dstEdge="LEFT"/>
+ <meshitem src="icon-1" srcEdge="RIGHT" dst="text-2" dstEdge="LEFT"/>
+ <meshitem src="icon-1" srcEdge="CENTERV" dst="text-2" dstEdge="CENTERV"/>
+
+ <meshitem src="text-2" srcEdge="TOP" dst="" dstEdge="TOP"/>
+ <meshitem src="text-2" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM"/>
-
+ <meshitem src="icon-2" srcEdge="RIGHT" dst="icon-3" dstEdge="LEFT"/>
+ <meshitem src="icon-2" srcEdge="CENTERV" dst="text-2" dstEdge="CENTERV"/>
+
+ <meshitem src="icon-3" srcEdge="RIGHT" dst="text-3" dstEdge="LEFT"/>
+ <meshitem src="icon-3" srcEdge="CENTERV" dst="text-2" dstEdge="CENTERV"/>
+
+ <meshitem src="text-3" srcEdge="CENTERV" dst="text-2" dstEdge="CENTERV"/>
+ <meshitem src="text-3" srcEdge="RIGHT" dst="icon-4" dstEdge="LEFT"/>
+
+ <meshitem src="icon-4" srcEdge="RIGHT" dst="" dstEdge="RIGHT"/>
+ <meshitem src="icon-4" srcEdge="CENTERV" dst="text-2" dstEdge="CENTERV"/>
+
+ </layout>
</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/resources/caleneventlistviewitem_color.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,35 @@
+CalenEventListViewItem::text-4{
+ color: var(qtc_list_item_content_normal);
+}
+
+CalenEventListViewItem::text-4[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+CalenEventListViewItem::text-4[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+CalenEventListViewItem::icon-3{
+ color: var(qtc_list_item_content_normal);
+}
+
+CalenEventListViewItem::icon-3[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+CalenEventListViewItem::icon-3[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+CalenEventListViewItem::icon-4{
+ color: var(qtc_list_item_content_normal);
+}
+
+CalenEventListViewItem::icon-4[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+CalenEventListViewItem::icon-4[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
\ No newline at end of file
--- a/calendarui/views/resources/calengriditemprototype.css Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/resources/calengriditemprototype.css Thu Jul 22 16:32:51 2010 +0100
@@ -36,5 +36,4 @@
left: -0.75un;
right: 0.75un;
fixed-height: 0.75un;
- background-color: red;
}
--- a/calendarui/views/resources/calenresources.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/resources/calenresources.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -4,6 +4,7 @@
<file>calengriditemprototype.css</file>
<file>caleneventlistviewitem.widgetml</file>
<file>caleneventlistviewitem.css</file>
+ <file>caleneventlistviewitem_color.css</file>
<file>qgn_indi_cdr_meeting_layer0.svg</file>
<file>qtg_mono_exception.png</file>
</qresource>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenagendaview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,347 @@
+/*
+* Copyright (c) 2009 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: CalenAgendaView implementation.
+*
+*/
+
+// System includes
+#include <QGraphicsSceneEvent>
+#include <hbmainwindow.h>
+#include <hbaction.h>
+#include <hbpangesture.h>
+#include <hbswipegesture.h>
+#include <hbapplication.h> // hbapplication
+#include <hbactivitymanager.h> // Activity Manager
+
+// User includes
+#include "calenagendaview.h"
+#include "calendocloader.h"
+#include "calenagendaviewwidget.h"
+#include "calenservices.h"
+#include "calencommon.h"
+#include "calencontext.h"
+#include "calendateutils.h"
+#include "calenconstants.h"
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::CalenAgendaView
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+CalenAgendaView::CalenAgendaView(MCalenServices &services):
+CalenNativeView(services),
+mSoftKeyAction(NULL),
+mGoToTodayAction(NULL),
+mSwitchToDayViewAction(NULL),
+mActionTaken(false),
+mIsAboutToQuitEventConnected(false)
+{
+ // No implementation yet
+ grabGesture(Qt::SwipeGesture);
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::~CalenAgendaView
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+CalenAgendaView::~CalenAgendaView()
+{
+ // No implementation yet
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::setupView
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::setupView(CalenDocLoader *docLoader)
+{
+ if (!docLoader) {
+ // Nothing can be done. Simply return
+ return;
+ }
+ // Store the document loader for reference later
+ mDocLoader = docLoader;
+
+ // Listen to orientation change events
+ connect(&(mServices.MainWindow()), SIGNAL(orientationChanged(Qt::Orientation)),
+ this, SLOT(orientationChanged(Qt::Orientation)));
+
+ // Get the pointer to the content widget
+ mAgendaViewWidget = qobject_cast<CalenAgendaViewWidget*>(mDocLoader->findWidget(CALEN_AGENDAVIEW_WIDGET));
+ if (!mAgendaViewWidget) {
+ qFatal("calenagendaview.cpp : Unable to find the content widget");
+ }
+ mAgendaViewWidget->setupWidget(this);
+
+ // Initialize all the menu and toolbar actions
+ setupActions();
+ // get a poitner to activity manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ // clean up any previous versions of this activity, if any, i.e. activityName, from the activity manager.
+ // Ignore return value, first boot would always return False. bool declared
+ // only for debugging purpose.
+ bool ok = activityManager->removeActivity(activityName);
+
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::doPopulation
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::doPopulation()
+ {
+ // The content widget has not been constructed. Don't do anything
+ if (!mAgendaViewWidget) {
+ return;
+ }
+ // Get the day for which this view is being shown from the context
+ mDate = mServices.Context().focusDateAndTime();
+
+ // Check if the current day being shown is "Today"
+ if (mGoToTodayAction) {
+ if (mDate.date() == CalenDateUtils::today().date()) {
+ // Hide the "Go to today" option
+ mGoToTodayAction->setVisible(false);
+ } else {
+ mGoToTodayAction->setVisible(true);
+ }
+ }
+
+ // Set self as the current view
+ // mServices.MainWindow().setCurrentView(this);
+
+ // Dont override the soft key behavior if day view is the first view
+ if (ECalenAgendaView != mServices.getFirstView()) {
+ mSoftKeyAction = new HbAction(Hb::BackNaviAction);
+ setNavigationAction(mSoftKeyAction);
+ // Connect to the signal triggered by clicking on back button.
+ connect(mSoftKeyAction, SIGNAL(triggered()), this,
+ SLOT(launchMonthView()));
+ if (mSwitchToDayViewAction) {
+ mSwitchToDayViewAction->setVisible(true);
+ }
+ } else {
+ if (mSwitchToDayViewAction) {
+ mSwitchToDayViewAction->setVisible(false);
+ }
+ }
+ // Initialize the content widget
+ mAgendaViewWidget->showWidget();
+
+ //set Current Activity as day view
+ mActivityId = ECalenAgendaView;
+
+ // connect to receive a call back on Day View exit. Call back would result in saveActivity
+ // to be called in Native View
+ if (!mIsAboutToQuitEventConnected) // check if already not connected
+ {
+ connect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+ mIsAboutToQuitEventConnected = true;
+ }
+
+
+ // Population is complete, issue a notification
+ populationComplete();
+ }
+
+/*!
+ Funtion to refresh the current view upon selecting a date
+ from GoToDate popup
+ */
+void CalenAgendaView::refreshViewOnGoToDate()
+{
+ // Get the day for which this view is being shown from the context
+ mDate = mServices.Context().focusDateAndTime();
+
+ // Check if the current day being shown is "Today"
+ if (mGoToTodayAction) {
+ if (mDate.date() == CalenDateUtils::today().date()) {
+ // Hide the "Go to today" option
+ mGoToTodayAction->setVisible(false);
+ } else {
+ mGoToTodayAction->setVisible(true);
+ }
+ }
+
+ // Initialize the content widget
+ mAgendaViewWidget->showWidget();
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::HandleNotification
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::HandleNotification(const TCalenNotification notification)
+{
+ Q_UNUSED(notification)
+ // No implementation yet
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::docLoader
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+CalenDocLoader* CalenAgendaView::docLoader()
+{
+ return mDocLoader;
+}
+
+/*
+ Function to listen for gestures
+*/
+void CalenAgendaView::gestureEvent(QGestureEvent *event)
+{
+ if(HbSwipeGesture *gesture = qobject_cast<HbSwipeGesture *>(event->gesture(Qt::SwipeGesture))) {
+ if (gesture->state() == Qt::GestureStarted) {
+ if(QSwipeGesture::Left == gesture->sceneHorizontalDirection()) {
+ mServices.IssueCommandL(ECalenShowNextDay);
+ event->accept(Qt::SwipeGesture);
+ } else if(QSwipeGesture::Right == gesture->sceneHorizontalDirection()) {
+ mServices.IssueCommandL(ECalenShowPrevDay);
+ event->accept(Qt::SwipeGesture);
+ }
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::createToolBar
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::setupActions()
+{
+ // Get the actions associated with this view
+ HbAction *newEventAction = qobject_cast<HbAction *>
+ (mDocLoader->findObject(CALEN_AGENDAVIEW_MENU_NEW_EVENT));
+ if (!newEventAction) {
+ qFatal("calenagendaview.cpp : Unable to find new event action");
+ }
+ // Connect to the signal triggered by new event action
+ connect(newEventAction, SIGNAL(triggered()), mAgendaViewWidget, SLOT(createNewEvent()));
+
+ mGoToTodayAction = qobject_cast<HbAction *>
+ (mDocLoader->findObject(CALEN_AGENDAVIEW_MENU_GO_TO_TODAY));
+ if (!mGoToTodayAction) {
+ qFatal("calenagendaview.cpp : Unable to find go to today action");
+ }
+ // Connect to the signal triggered by go to Today action
+ connect(mGoToTodayAction, SIGNAL(triggered()), mAgendaViewWidget, SLOT(goToToday()));
+
+ HbAction *goToDateAction = qobject_cast<HbAction *>
+ (mDocLoader->findObject(CALEN_AGENDAVIEW_MENU_GO_TO_DATE));
+ if (!goToDateAction) {
+ qFatal("calenagendaview.cpp : Unable to find go to date action");
+ }
+ // Connect to the signal triggered by go to Date action
+ connect(goToDateAction, SIGNAL(triggered()), this, SLOT(goToDate()));
+
+ mSwitchToDayViewAction = qobject_cast<HbAction *>
+ (mDocLoader->findObject(CALEN_AGENDAVIEW_MENU_SWITCH_TO_DAYVIEW));
+ if (!mSwitchToDayViewAction) {
+ qFatal("calenagendaview.cpp : Unable to find go to date action");
+ }
+ // Connect to the signal triggered by switch to dayview action
+ connect(mSwitchToDayViewAction, SIGNAL(triggered()), this, SLOT(launchDayView()));
+
+ HbAction *settingsAction = qobject_cast<HbAction *>
+ (mDocLoader->findObject(CALEN_AGENDAVIEW_MENU_SETTINGS));
+ if (!settingsAction) {
+ qFatal("calenagendaview.cpp : Unable to find settings action");
+ }
+ // Connect to the signal triggered by settings action
+ connect(settingsAction, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::onLocaleChanged
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::onLocaleChanged(int reason)
+{
+ Q_UNUSED(reason)
+ // Notify the content widget about the change
+ if(mAgendaViewWidget) {
+ mAgendaViewWidget->handleLocaleChange();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::orientationChanged
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::orientationChanged(Qt::Orientation orientation)
+{
+ // Notify the content widget about the change
+ if (mAgendaViewWidget) {
+ mAgendaViewWidget->orientationChanged(orientation);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::launchMonthView
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::launchMonthView()
+{
+ // Issue the command to launch the month view
+ mServices.IssueCommandL(ECalenMonthView);
+ // month view launched now, disconnect to get the call backs for saveActivity
+ // on aboutToQuit signal
+ disconnectAboutToQuitEvent();
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaView::launchDayView
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::launchDayView()
+{
+ // Issue the command to launch the day view
+ mServices.IssueCommandL(ECalenDayView);
+}
+
+// ----------------------------------------------------------------------------
+// clears the list model
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::clearListModel()
+ {
+ // day view is removed from the list disconnect for aboutToQuit events
+ disconnectAboutToQuitEvent();
+ mAgendaViewWidget->clearListModel();
+ }
+
+// ----------------------------------------------------------------------------
+// disconnectAboutToQuitEvent disconnects for the aboutToQuit events
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaView::disconnectAboutToQuitEvent()
+ {
+ if (mIsAboutToQuitEventConnected)
+ {
+ disconnect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+ mIsAboutToQuitEventConnected = false;
+ }
+ }
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenagendaviewwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,1142 @@
+/*
+* Copyright (c) 2009 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: CalenAgendaViewWidget implementation
+*
+*/
+
+// System includes
+#include <QStandardItemModel>
+#include <QGraphicsSceneEvent>
+#include <QDir>
+#include <QPluginLoader>
+#include <hbi18ndef.h>
+#include <hbextendedlocale.h>
+#include <hbgroupbox.h>
+#include <hbmenu.h>
+#include <hbaction.h>
+#include <hbmainwindow.h>
+#include <hbstyleloader.h>
+#include <hbdatetimepicker.h>
+#include <hbdialog.h>
+#include <xqsettingsmanager.h>
+#include <agendautil.h>
+#include <NotesEditorInterface>
+
+// User includes
+#include "calenagendaviewwidget.h"
+#include "calencommon.h"
+#include "calenagendaview.h"
+#include "calendocloader.h"
+#include "calenservices.h"
+#include "calencontext.h"
+#include "calendateutils.h"
+#include "CalenUid.h"
+#include "caleneventlistviewitem.h"
+#include "calenpluginlabel.h"
+#include "calendarprivatecrkeys.h"
+
+// Constants
+const QString singleSpace(" ");
+const QString doubleSpace(" ");
+const QString space(" ");
+const QString singleHyphen("-");
+const QString customLayout("custom");
+const char *stretchLayout("stretchItem");
+const QString toDoIcon("qtg_small_todo");
+const QString reminderIcon("qtg_mono_alarm");
+const QString locationIcon("qtg_mono_location");
+const QString repeatIcon("qtg_mono_repeat");
+// TODO: Replace with actual image name once its available
+//const QString allDayIcon("qtg_small_allday");
+const QString allDayIcon(":/qgn_indi_cdr_meeting_layer0.svg");
+const QString exceptionIcon("qtg_mono_repeat_exception");
+const int singleColumn(1);
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::CalenAgendaViewWidget
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CalenAgendaViewWidget::CalenAgendaViewWidget(MCalenServices &services,
+ CalenDocLoader *docLoader) :
+mServices(services),
+mDocLoader(docLoader),
+mRegionalInfoGroupBox(NULL),
+mLongTapEventFlag(false),
+mNotesPluginLoaded(false)
+{
+ // Construct the list view prototype
+ mListViewPrototype = new CalenEventListViewItem(this);
+
+ // Create the list model
+ mListModel = new QStandardItemModel(this);
+
+ // Register the custom docml and css to provide our own style to the list items
+ HbStyleLoader::registerFilePath(":/");
+
+ //Create the setting manager
+ mSettingsManager = new XQSettingsManager(this);
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::~CalenAgendaViewWidget
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+EXPORT_C CalenAgendaViewWidget::~CalenAgendaViewWidget()
+{
+ // Unload notes editor if loaded.
+ if (mNotesEditorPluginLoader) {
+ mNotesEditorPluginLoader->unload();
+ delete mNotesEditorPluginLoader;
+ mNotesEditorPluginLoader = 0;
+ }
+
+ if (mListViewPrototype) {
+ delete mListViewPrototype;
+ mListViewPrototype = NULL;
+ }
+ if (mListModel) {
+ // Do not delete the model since its owned by the view
+ mListModel->clear();
+ }
+ if (mSettingsManager) {
+ delete mSettingsManager;
+ mSettingsManager = NULL;
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::setupWidget
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::setupWidget(CalenAgendaView *view)
+{
+ // Store the view for future reference
+ mView = view;
+
+ if (!mDocLoader) {
+ // Nothing much can be done. Simply return
+ return;
+ }
+
+ // Initialize the child widgets
+ initChildWidgets();
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::showWidget
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::showWidget()
+{
+ // Get the date for which this view has been launched
+ mDate = mServices.Context().focusDateAndTime();
+
+ // Set the heading text
+ setHeadingText();
+
+ // Get the instance list
+ getInstanceList();
+
+ // Check if regional information needs to be shown
+ // and add it or remove it
+ showHideRegionalInformation();
+
+ // Load the appropriate section based on the number of events for the day
+ if (0 == mInstanceArray.count()) {
+ // There are no entries for the day
+ // Load and show the empty list section
+ bool loadSuccess = false;
+
+ // Hide the list which shows the events
+ mEventsList->hide();
+
+ // Show the empty list text
+ mEmptyListLabel->show();
+
+ // Get the current device orientation
+ int orientation = mServices.MainWindow().orientation();
+ if (Qt::Vertical == orientation) {
+ mDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, "emptyList", &loadSuccess);
+ } else {
+ mDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, "emptyLandscape", &loadSuccess);
+ }
+ if (!loadSuccess) {
+ qFatal("calenagendaviewwidget.cpp : Unable to load empty list section");
+ }
+ } else {
+ // Hide the empty view label
+ mEmptyListLabel->hide();
+
+ // Show the events list
+ mEventsList->show();
+
+ // There are one or more events. Load the non-empty section
+ bool loadSuccess = false;
+ mDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, "nonEmptyList", &loadSuccess);
+ if (!loadSuccess) {
+ qFatal("calenagendaviewwidget.cpp : Unable to load non-empty list section");
+ }
+ // Now populate the list with the events
+ populateListWidget();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::orientationChanged
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::orientationChanged(Qt::Orientation orientation)
+{
+ // Load the appropriate section based on the number of events for the day
+ if (0 == mInstanceArray.count()) {
+ // There are no entries for the day
+ // Load and show the empty list section
+ bool loadSuccess = false;
+
+ // Hide the list which shows the events
+ mEventsList->hide();
+
+ // Show the empty list text
+ mEmptyListLabel->show();
+
+ if (Qt::Vertical == orientation) {
+ mDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, "emptyList", &loadSuccess);
+ } else {
+ mDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, "emptyLandscape", &loadSuccess);
+ }
+ if (!loadSuccess) {
+ qFatal("calenagendaviewwidget.cpp : Unable to load empty list section");
+ }
+ } else {
+ // Hide the empty view label
+ mEmptyListLabel->hide();
+
+ // Show the events list
+ mEventsList->show();
+
+ // There are one or more events. Load the non-empty section
+ bool loadSuccess = false;
+ mDocLoader->load(CALEN_AGENDAVIEW_XML_FILE, "nonEmptyList", &loadSuccess);
+ if (!loadSuccess) {
+ qFatal("calenagendaviewwidget.cpp : Unable to load non-empty list section");
+ }
+ handleListItemStretching(orientation);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::handleLocaleChange
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::handleLocaleChange()
+{
+
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::setContextFromHighlight
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::setContextFromHighlight(AgendaEntry entry)
+{
+ if (entry.isTimedEntry()) {
+ // Timed entry.
+ QDateTime start = entry.startTime();
+ // start.setDate(mDate.date());
+ mServices.Context().setFocusDateAndTimeAndInstance(start,
+ TCalenInstanceId::create(entry));
+ } else {
+ // Untimed entry.
+ if (CalenDateUtils::onSameDay(TCalenInstanceId::create(entry).mInstanceTime,
+ mDate)) {
+ mServices.Context().setInstanceId(TCalenInstanceId::create(entry));
+ } else {
+ // Multi-day untimed note (either multi-day day note or weird todo).
+ // Focus on the instance and set the focus time to the highlighted day.
+ mServices.Context().setFocusDateAndTimeAndInstance(mDate,
+ TCalenInstanceId::create(entry));
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::initChildWidgets
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::initChildWidgets()
+{
+ // Get the pointer to the events list
+ mEventsList = static_cast<HbListView*> (mDocLoader->findWidget(CALEN_AGENDAVIEW_LISTWIDGET));
+ if (!mEventsList) {
+ qFatal("calenagendaviewwidget.cpp : Unable to find the events list");
+ }
+ // NOTE: Layout name MUST be same as the name mentioned in the css
+ mEventsList->setLayoutName(customLayout);
+
+ // TODO : remove this line after gestures are available
+ mEventsList->installEventFilter(mView);
+
+ // Connect to the long press and activation signals
+ connect(mEventsList, SIGNAL(longPressed(HbAbstractViewItem*, const QPointF&)),
+ this, SLOT(itemLongPressed(HbAbstractViewItem*, const QPointF&)));
+ connect(mEventsList, SIGNAL(activated(const QModelIndex&)), this,
+ SLOT(itemActivated(const QModelIndex&)));
+
+ // Get the pointer to label from the loader.
+ mHeadingLabel = qobject_cast<HbGroupBox*> (mDocLoader->findWidget(CALEN_AGENDAVIEW_HEADING));
+ if (!mHeadingLabel) {
+ qFatal("calenagendaviewwidget.cpp : Unable to find heading widget");
+ }
+
+ // Get the pointer to the empty view label
+ mEmptyListLabel = qobject_cast<HbLabel*> (mDocLoader->findWidget("noEventsLabel"));
+ if (!mEmptyListLabel) {
+ qFatal("calenagendaviewwidget.cpp : Unable to find empty list label");
+ }
+ HbWidget *headingPluginWidget =
+ qobject_cast<HbWidget*> (mDocLoader->findWidget(CALEN_AGENDAVIEW_HEADING_REGIONALPLUGIN_WIDGET));
+
+ mRegionalPluginLayout = static_cast<QGraphicsLinearLayout*>(headingPluginWidget->layout());
+
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::populateListWidget
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::populateListWidget()
+{
+ // Recycle the list items so that only needed rows
+ // are added or removed
+ if (mInstanceArray.count() == 0) {
+ // Reset the list
+ mEventsList->reset();
+ // Clear the model to ensure it does not have any old items
+ mListModel->clear();
+ return;
+ } else if (mInstanceArray.count() > mListModel->rowCount()) {
+ // There are more events than the number of items
+ // in the list. Add more rows
+ mListModel->insertRows(0, mInstanceArray.count() - mListModel->rowCount());
+ } else if (mInstanceArray.count() < mListModel->rowCount()) {
+ // There are less number of events than the number
+ // of items in the list. Remove the extra rows
+ mListModel->removeRows(0, mListModel->rowCount() - mInstanceArray.count());
+ }
+ mListModel->setColumnCount(singleColumn);
+
+ // Add all the events to the list
+ for (int index = 0; index < mInstanceArray.count(); index++) {
+ // Get each of the entry details
+ AgendaEntry entry = mInstanceArray[index];
+ // Create a list item for each entry
+ createListItem(index, entry);
+ }
+ // Add the item on to the list widget
+ mEventsList->setModel(mListModel, mListViewPrototype);
+
+ // Now get the item to scroll to
+ int scrollToIndex = getIndexToScrollTo();
+ if (mListModel->rowCount() > 0) {
+ // Scroll to the index only if index is valid
+ mEventsList->scrollTo(mListModel->index(scrollToIndex, 0));
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::getInstanceList
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::getInstanceList()
+{
+ // Clear the previous instance list
+ mInstanceArray.clear();
+
+ // Check if the date is valid
+ if (!CalenDateUtils::isValidDay(mDate)) {
+ mDate = CalenDateUtils::today();
+ }
+
+ // Set the filter flags to fetch all relevant entries
+ AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(AgendaUtil::IncludeAnniversaries |
+ AgendaUtil::IncludeAppointments |
+ AgendaUtil::IncludeEvents |
+ AgendaUtil::IncludeReminders |
+ AgendaUtil::IncludeIncompletedTodos);
+
+ // Fetch the instance list from the agenda interface
+ mInstanceArray = mServices.agendaInterface()->createEntryIdListForDay(mDate, filter);
+
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::setDateToLabel
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::setHeadingText()
+ {
+ // Format the date as per the device locale settings
+ HbExtendedLocale systemLocale = HbExtendedLocale::system();
+
+ // Get localised name of the day from locale
+ QString dayString = systemLocale.dayName(mDate.date().dayOfWeek());
+ // Append a single space
+ dayString.append(singleSpace);
+ // Set the heading
+ // Append the date which is formatted as per the locale
+ mHeadingLabel->setHeading(hbTrId(
+ "txt_calendar_subhead_1_2").arg(dayString).arg(
+ systemLocale.format(mDate.date(), r_qtn_date_usual_with_zero)));
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::createListItem
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::createListItem(int index, AgendaEntry entry)
+{
+ if (index < 0 || entry.isNull()) {
+ // Not a valid index or entry. Dont do anything
+ return;
+ }
+ // Check if the entry is a timed entry
+ // TODO: Right now, only appointment/meeting type is being handled
+ // Handle other timed entry types like reminder etc
+ if (entry.isTimedEntry()) {
+ // Get the text and icon data for the entry
+ addTimedEventToList(index, entry);
+ } else {
+ addNonTimedEventToList(index, entry);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::addTimedEventToList
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::addTimedEventToList(int index, AgendaEntry entry)
+{
+ // Create text and icon list to set to the model
+ QVariantList textData;
+ QVariantList iconData;
+ bool twoLines = false;
+
+ /**
+ * IMPORTANT NOTE: All the text and icon items must be
+ * inserted into the variant list in a specific order.
+ * If not, chaos will set it!!!
+ * On a more serious note, the mesh layout depends on the
+ * fact that the icons and text data will be added in a
+ * particular order. If one of the items go missing, the
+ * layout might get messed up. Also in case a particular item
+ * is not required to be added in the middle of the list, an
+ * empty QVariant must be added to indicate to the list view
+ * that the item must be removed from the layout.
+ * Do not mess with the order in case you are not sure what
+ * you are exactly doing.
+ */
+
+ // The first icon to show to-do or all day should not be shown
+ // Append empty data to the icons list
+ iconData << QVariant();
+
+ // Check if alarm is enabled for the entry
+ if (entry.alarm().isNull()) {
+ // Insert a blank icon. Else the next icon
+ // will get replaced in this icon's position
+ iconData << QVariant();
+ } else {
+ iconData << HbIcon(reminderIcon);
+ }
+
+ // Check if the entry is recurring
+ if (entry.isRepeating()) {
+ iconData << HbIcon(repeatIcon);
+ } else if (!entry.recurrenceId().isNull()) {
+ // This is an exceptional entry
+ iconData << HbIcon(exceptionIcon);
+ } else {
+ // Insert a blank icon. Else the next icon
+ // will get replaced in this icon's position
+ iconData << QVariant();
+ }
+
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ // Get the start time and format as per the locale
+ QDateTime startTime = entry.startTime();
+ QTime eventStartTime;
+
+ if (CalenDateUtils::beginningOfDay(startTime)
+ < CalenDateUtils::beginningOfDay(mDate)) {
+ // event is started previous day, show StarTime as 12:00 am in Agendaview,
+ eventStartTime.setHMS(00, 00, 00);
+ } else {
+ eventStartTime = entry.startTime().time();
+ }
+ QString eventTime = locale.format(eventStartTime, r_qtn_time_usual_with_zero);
+
+ // Get the event end time
+ QDateTime endTime = entry.endTime();
+ QTime eventEndTime;
+
+ if (CalenDateUtils::beginningOfDay(endTime)
+ > CalenDateUtils::beginningOfDay(mDate)) {
+ // event has MidNight crossover, show EndTime as 11:59pm in Agendaview,
+ eventEndTime.setHMS(23, 59, 59);
+ } else {
+ eventEndTime = entry.endTime().time();
+ }
+
+ if (eventStartTime < eventEndTime) {
+ // Raise the flag to indicate that the list item
+ // would wrap to two lines
+ twoLines = true;
+ // Append '-' to indicate an end time is present
+ eventTime.append(singleHyphen);
+ } else {
+ // To align the subject properly if the start and endtime are same
+ eventTime.append(doubleSpace);
+ }
+
+ // Add the event time to the text list
+ // This MUST be the first item to be added to the list
+ textData << eventTime;
+
+ // Get the entry subject
+ QString subject = entry.summary();
+ if (subject.isEmpty() || subject.isNull()) {
+ // No subject. Add "(No subject)" text
+ subject.append(hbTrId("txt_calendar_dblist_unnamed"));
+ }
+ // Add the subject to the text list
+ // This MUST be the second item in the list
+ textData << subject;
+
+ // Check if the entry has location
+ // TODO: This must change to check for geo-location
+ // This MUST be the third item in the list
+ if (entry.location().isEmpty()) {
+ // Insert a blank icon. Else the next icon
+ // will get replaced in this icon's position
+ iconData << QVariant();
+ if (twoLines) {
+ /**
+ * NOTE: If the primary text is wrapping to two
+ * lines, then the location must be set as blank
+ * since the bottom of the list item is anchored to
+ * the bottom of the secondary text. Else the bottom
+ * of the list will overlap on the primary text
+ */
+ textData << singleSpace;
+ } else {
+ /**
+ * Else, set the secondary text to empty to indicate
+ * to the list view to remove the item itself and
+ * shrink its size to a single line size
+ */
+ textData << QVariant();
+ }
+ } else {
+ // TODO: Location icon must be shown
+ // only if valid geo-coordinates are present
+ if (!entry.geoValue().isNull()){
+ iconData << HbIcon(locationIcon);
+ }
+ else {
+ iconData << HbIcon();
+ }
+ textData << entry.location();
+ }
+ // Add the end time to the list item
+ if (eventStartTime < eventEndTime) {
+ QString endtime = locale.format(eventEndTime, r_qtn_time_usual_with_zero);
+ endtime.append(singleSpace);
+ textData << endtime;
+ }else {
+ textData<<QString(space);
+ }
+ // Get the list model index and set the text and icon data
+ QModelIndex listIndex = mListModel->index(index, 0);
+ mListModel->setData(listIndex, textData, Qt::DisplayRole);
+ mListModel->setData(listIndex, iconData, Qt::DecorationRole);
+
+ // Disable item stretching by removing the dynamic property
+ HbListViewItem *listViewItem = static_cast<HbListViewItem*>
+ (mEventsList->itemByIndex(mListModel->index(index, 0)));
+ if (listViewItem) {
+ listViewItem->setProperty(stretchLayout, false);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::addNonTimedEventToList
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::addNonTimedEventToList(int index, AgendaEntry entry)
+{
+ QVariantList textData;
+ QVariantList iconData;
+
+ /**
+ * IMPORTANT NOTE: All the text and icon items must be
+ * inserted into the variant list in a specific order.
+ * If not, chaos will set it!!!
+ * On a more serious note, the mesh layout depends on the
+ * fact that the icons and text data will be added in a
+ * particular order. If one of the items go missing, the
+ * layout might get messed up. Also in case a particular item
+ * is not required to be added in the middle of the list, an
+ * empty QVariant must be added to indicate to the list view
+ * that the item must be removed from the layout.
+ * Do not mess with the order in case you are not sure what
+ * you are exactly doing.
+ */
+
+ // The first column text has to be empty
+ textData << QVariant();
+
+ // Get the entry subject
+ QString subject = entry.summary();
+ if (subject.isEmpty() || subject.isNull()) {
+ // No subject. Add "(No subject)" text
+ subject.append(hbTrId("txt_calendar_dblist_unnamed"));
+ }
+ // Add the subject to the text list
+ // This MUST be the second item in the list
+ textData << subject;
+
+ // Get the entry type
+ AgendaEntry::Type entryType = entry.type();
+
+ if (entryType == AgendaEntry::TypeAnniversary) {
+ // Nothing to do as of now as anniversary events
+ // cannot be created
+ // TODO: To be handled in case of sync
+ } else if (entryType == AgendaEntry::TypeEvent) {
+ // This is an all day event
+ // Append the all-day icon
+ iconData << HbIcon(allDayIcon);
+
+ // Check if alarm is enabled for the entry
+ if (entry.alarm().isNull()) {
+ // Insert a blank icon. Else next text item will get shifted to left
+ iconData << HbIcon();
+ } else {
+ // if entry is not repeating in place of reminder icon put a blank
+ // icon and move reminder icon to the place of repeating icon
+ if (!entry.isRepeating()) {
+ iconData << HbIcon();
+ }
+ iconData << HbIcon(reminderIcon);
+ }
+
+ // Check if the entry is recurring
+ if (entry.isRepeating()) {
+ iconData << HbIcon(repeatIcon);
+ } else {
+ // put the blank icon only when both reminder and repeating icons
+ // are not there
+ if (entry.alarm().isNull()) {
+ iconData << HbIcon();
+ }
+ }
+
+ // Append the location
+ if (!entry.location().isEmpty()) {
+ textData << entry.location();
+ // TODO: Location icon must be shown
+ // only if valid geo-coordinates are present
+ if (!entry.geoValue().isNull()){
+ iconData << HbIcon(locationIcon);
+ }else {
+ iconData << HbIcon();
+ }
+ } else {
+ textData << QVariant();
+ }
+ // The fourth text item has to be empty
+ textData << QVariant();
+
+ } else if (entryType == AgendaEntry::TypeTodo) {
+ // Append the to-do icon
+ iconData << HbIcon(toDoIcon);
+
+ // Get the due date
+ QDateTime dueDate = entry.endTime();
+
+ // Append the date first
+ QString dueDateString(hbTrId("txt_calendar_dblist_val_due_on_1"));
+ QString dueText;
+ dueText.setNum(dueDate.date().day());
+ dueText.append(singleSpace);
+
+ // Append the month name next
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ QString month = locale.monthName(dueDate.date().month());
+ dueText.append(month);
+ dueText.append(singleSpace);
+
+ // Append the year
+ QString year;
+ year.setNum(dueDate.date().year());
+ dueText.append(year);
+
+ textData << dueDateString.arg(dueText);
+
+ // The fourth text item has to be empty
+ textData << QVariant();
+
+ // Check if alarm is enabled for the entry
+ if (entry.alarm().isNull()) {
+ // Insert a blank icon. Else next text item will get shifted to left
+ iconData << HbIcon();
+ } else {
+ // if entry is not repeating in place of reminder icon put a blank
+ // icon and move reminder icon to the place of repeating icon
+ if (!entry.isRepeating()) {
+ iconData << HbIcon();
+ }
+ iconData << HbIcon(reminderIcon);
+ }
+
+ // Check if the entry is recurring
+ if (entry.isRepeating()) {
+ iconData << HbIcon(repeatIcon);
+ } else {
+ // Insert the blank icon only when both reminder and repeating icons
+ // are not there
+ if (entry.alarm().isNull()) {
+ iconData << HbIcon();
+ }
+ }
+ }
+
+ // Get the list model index and set the text and icon data
+ QModelIndex listIndex = mListModel->index(index, 0);
+ mListModel->setData(listIndex, textData, Qt::DisplayRole);
+ mListModel->setData(listIndex, iconData, Qt::DecorationRole);
+
+ // Enable item stretching by adding the dynamic property
+ HbListViewItem *listViewItem = static_cast<HbListViewItem*>
+ (mEventsList->itemByIndex(mListModel->index(index, 0)));
+ Qt::Orientation orientation = mServices.MainWindow().orientation();
+ // Apply stretch only for landscape orientation
+ if (listViewItem) {
+ if (Qt::Horizontal == orientation) {
+ listViewItem->setProperty(stretchLayout, true);
+ } else {
+ listViewItem->setProperty(stretchLayout, false);
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::handleListItemStretching
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::handleListItemStretching(Qt::Orientation orientation)
+{
+ if (mInstanceArray.count() == 0) {
+ // Nothing much to do. Simply return
+ return;
+ }
+ for(int index = 0; index < mInstanceArray.count() ; index ++) {
+ AgendaEntry entry = mInstanceArray[index];
+ if (!entry.isNull()) {
+ AgendaEntry::Type eventType = entry.type();
+ switch(eventType) {
+ // Apply the stretching to only to-do's,
+ // anniversary and all-day event types
+ case AgendaEntry::TypeTodo:
+ case AgendaEntry::TypeEvent:
+ case AgendaEntry::TypeAnniversary:
+ {
+ // Get the list view item corresponding to the index
+ HbListViewItem *listItem = static_cast<HbListViewItem*>
+ (mEventsList->itemByIndex(mListModel->index(index, 0)));
+ if (listItem) {
+ if (orientation == Qt::Horizontal) {
+ // Set a dynamic property to indicate that this list item
+ // must be stretched in landscape.
+ // NOTE: Property name MUST match the name specified in
+ // css file, else wierd things might happen
+ listItem->setProperty(stretchLayout, true);
+ }
+ }
+ }
+ break;
+ default:
+ {
+ HbListViewItem *listItem = static_cast<HbListViewItem*>
+ (mEventsList->itemByIndex(mListModel->index(index, 0)));
+ if (listItem) {
+ listItem->setProperty(stretchLayout, false);
+ }
+ break;
+ }
+ }
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::getIndexToScrollTo
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+int CalenAgendaViewWidget::getIndexToScrollTo()
+{
+ int scrollIndex = 0;
+ TCalenInstanceId instanceId = mServices.Context().instanceId();
+ if (instanceId == TCalenInstanceId::nullInstanceId()) {
+ // If the instance is not set, then scroll to zero index
+ return scrollIndex;
+ }
+
+ for (int index = 0 ; index < mInstanceArray.count() ; index++) {
+ AgendaEntry entry = mInstanceArray[index];
+ if (entry.id() == instanceId.mEntryLocalUid) {
+ // Match found.
+ scrollIndex = index;
+ break;
+ }
+ }
+ return scrollIndex;
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::showHideRegionalInformation
+// To Show and hide regional plugin label depends upon settings
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::showHideRegionalInformation()
+{
+ if (mView->pluginEnabled()) {
+ XQSettingsKey regionalInfo(XQSettingsKey::TargetCentralRepository,
+ KCRUidCalendar, KCalendarShowRegionalInfo);
+
+ int showRegionalInfo =
+ mSettingsManager->readItemValue(regionalInfo).toUInt();
+ if (showRegionalInfo) {
+
+ if (!mRegionalInfoGroupBox) {
+ mRegionalInfoGroupBox = new HbGroupBox();
+ CalenPluginLabel *regionalInfo = new CalenPluginLabel(
+ mServices, this);
+ regionalInfo->setFontSpec(HbFontSpec(HbFontSpec::Primary));
+ mRegionalInfoGroupBox->setContentWidget(regionalInfo);
+ mRegionalPluginLayout->insertItem(1, mRegionalInfoGroupBox);
+ }
+ QString *pluginString = mView->pluginText();
+ HbLabel *pluginInfoLabel = qobject_cast <HbLabel *>
+ (mRegionalInfoGroupBox->contentWidget());
+ pluginInfoLabel->setPlainText(*pluginString);
+ }
+ } else {
+ if (mRegionalInfoGroupBox) {
+ mRegionalPluginLayout->removeItem(mRegionalInfoGroupBox);
+ delete mRegionalInfoGroupBox;
+ mRegionalInfoGroupBox = NULL;
+ }
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::createNewEvent
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::createNewEvent()
+{
+ // Issue a command to launch editor to create
+ // a new event
+ mServices.IssueCommandL(ECalenNewMeeting);
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::editEntry
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::editEntry()
+{
+ // Check if the selected index is valid
+ if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
+ return;
+ }
+
+ // Get the entry details first
+ AgendaEntry entry = mInstanceArray[mSelectedIndex];
+ if (AgendaEntry::TypeTodo == entry.type()) {
+ // Load the notes editor plugin if not loaded.
+ if (!mNotesPluginLoaded) {
+ // Launch the to-do editor using notes editor plugin api
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create NotesEditor plugin loader object.
+ mNotesEditorPluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin
+ mNotesPluginLoaded = mNotesEditorPluginLoader->load();
+ }
+
+ QObject *plugin = qobject_cast<QObject*> (
+ mNotesEditorPluginLoader->instance());
+
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ interface->edit(entry, mServices.agendaInterface());
+
+ connect(
+ interface, SIGNAL(editingCompleted(bool)),
+ this, SLOT(noteEditingCompleted(bool)));
+ } else {
+ // Set the context
+ setContextFromHighlight(entry);
+ // Issue a command to launch the editor to edit this entry
+ mServices.IssueCommandL(ECalenEditCurrentEntry);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::viewEntry
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::viewEntry()
+{
+ // Get the entry details first
+ AgendaEntry entry = mInstanceArray[mSelectedIndex];
+
+ // Set the context
+ setContextFromHighlight(entry);
+
+ // Launch the event viewer.
+ mServices.IssueCommandL(ECalenEventView);
+}
+
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::deleteEntry
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::deleteEntry()
+{
+ // Check if the selected index is valid
+ if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
+ return;
+ }
+
+ // Get the entry details
+ AgendaEntry entry = mInstanceArray[mSelectedIndex];
+ // Set the context
+ setContextFromHighlight(entry);
+ // Issue the command to delete the entry
+ mServices.IssueCommandL(ECalenDeleteCurrentEntry);
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::markAsDone
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::markAsDone()
+{
+ // Check if the selected index is valid
+ if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
+ return;
+ }
+
+ // Get the entry details
+ AgendaEntry entry = mInstanceArray[mSelectedIndex];
+
+ // Check again if the event is of type to-to
+ if (AgendaEntry::TypeTodo == entry.type()) {
+ // Set the status of the to-do as completed
+ entry.setStatus(AgendaEntry::TodoCompleted);
+ // Update the completed date and time
+ entry.setCompletedDateTime(mDate);
+
+ // Update the entry in the database
+ mServices.agendaInterface()->setCompleted(entry, true, mDate);
+ mServices.IssueCommandL(ECalenStartActiveStep);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::itemLongPressed
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::itemLongPressed(HbAbstractViewItem* listViewItem,
+ const QPointF& coords)
+{
+ mLongTapEventFlag = true;
+ // Update the selection index first
+ mSelectedIndex = listViewItem->modelIndex().row();
+
+ if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
+ // Invalid index
+ return;
+ }
+
+ AgendaEntry entry = mInstanceArray[mSelectedIndex];
+
+ // Create new menu.
+ HbMenu *contextMenu = new HbMenu();
+
+ // Add the open option
+ HbAction *openAction = contextMenu->addAction(
+ hbTrId("txt_common_menu_open"));
+
+ // Check the type of event
+ if (AgendaEntry::TypeTodo == entry.type()) {
+ // Add an option to mark the note as complete
+ HbAction *completeAction = contextMenu->addAction(
+ hbTrId("txt_calendar_menu_mark_as_done"));
+ }
+
+ // Add the edit option
+ HbAction *editAction = contextMenu->addAction(
+ hbTrId("txt_common_menu_edit"));
+
+ // Add the delete option
+ HbAction *deleteAction = contextMenu->addAction(
+ hbTrId("txt_common_menu_delete"));
+
+ contextMenu->setDismissPolicy(HbMenu::TapAnywhere);
+
+ // Show context sensitive menu.
+ // Param const QPointF& coordinate - is a longpress position.
+ contextMenu->setPreferredPos(coords);
+ connect(contextMenu, SIGNAL(aboutToClose()),
+ this,
+ SLOT(contextMenuClosed()));
+
+ contextMenu->open(this, SLOT(contextManuTriggered(HbAction *)));
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::itemActivated
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::itemActivated(const QModelIndex &index)
+{
+ // Update the selection index first
+ mSelectedIndex = index.row();
+
+ // Check if the selected index is valid
+ if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
+ return;
+ }
+ if( !mLongTapEventFlag ) {
+ // Open the event for viewing
+ viewEntry();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::itemActivated
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::noteEditingCompleted(bool status)
+{
+ // We need to refresh the list since user
+ // might have marked the to-do as complete or
+ // edited it or deleted it. So get the instance
+ // list again
+ if (status) {
+ mServices.IssueCommandL(ECalenStartActiveStep);
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::goToToday
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::goToToday()
+{
+ // First check if we are not already
+ // showing today's agenda
+ if (mDate == CalenDateUtils::today()) {
+ return;
+ }
+
+ // Set the context for the current day
+ mServices.Context().setFocusDate(CalenDateUtils::today());
+
+ mView->refreshViewOnGoToDate();
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::contextMenuClosed
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::contextMenuClosed()
+{
+ mLongTapEventFlag = false;
+}
+
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::contextManuTriggered
+// Rest of the details are commented in the header
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::contextManuTriggered(HbAction *action)
+{
+ if (action->text() == hbTrId("txt_common_menu_open")) {
+ viewEntry();
+ } else if (action->text() == hbTrId("txt_calendar_menu_mark_as_done")) {
+ markAsDone();
+ } else if (action->text() == hbTrId("txt_common_menu_edit")) {
+ editEntry();
+ } else {
+ if (action->text() == hbTrId("txt_common_menu_delete")) {
+ deleteEntry();
+ }
+ }
+}
+// ----------------------------------------------------------------------------
+// CalenAgendaViewWidget::clearListModel
+// clears the list model
+// ----------------------------------------------------------------------------
+//
+void CalenAgendaViewWidget::clearListModel()
+ {
+ mListModel->clear();
+ }
+
+// End of file --Don't remove this.
--- a/calendarui/views/src/calendayview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,321 +0,0 @@
-/*
-* Copyright (c) 2009 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: CalenDayView implementation.
-*
-*/
-
-// System includes
-#include <QGraphicsSceneEvent>
-#include <hbmainwindow.h>
-#include <hbaction.h>
-
-// User includes
-#include "calendayview.h"
-#include "calendocloader.h"
-#include "calendayviewwidget.h"
-#include "calenservices.h"
-#include "calencommon.h"
-#include "calencontext.h"
-#include "calendateutils.h"
-
-// ----------------------------------------------------------------------------
-// CalenDayView::CalenDayView
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-CalenDayView::CalenDayView(MCalenServices &services):
-CalenNativeView(services),
-mSoftKeyAction(NULL),
-mGoToTodayAction(NULL),
-mActionTaken(false)
-{
- // No implementation yet
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::~CalenDayView
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-CalenDayView::~CalenDayView()
-{
- // No implementation yet
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::setupView
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::setupView(CalenDocLoader *docLoader)
-{
- if (!docLoader) {
- // Nothing can be done. Simply return
- return;
- }
- // Store the document loader for reference later
- mDocLoader = docLoader;
-
- // Listen to orientation change events
- connect(&(mServices.MainWindow()), SIGNAL(orientationChanged(Qt::Orientation)),
- this, SLOT(orientationChanged(Qt::Orientation)));
-
- // Get the pointer to the content widget
- mDayViewWidget = qobject_cast<CalenDayViewWidget*>(mDocLoader->findWidget(CALEN_DAYVIEW_WIDGET));
- if (!mDayViewWidget) {
- qFatal("calendayview.cpp : Unable to find the content widget");
- }
- mDayViewWidget->setupWidget(this);
-
- // Initialize all the menu and toolbar actions
- setupActions();
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::doPopulation
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::doPopulation()
- {
- // The content widget has not been constructed. Don't do anything
- if (!mDayViewWidget) {
- return;
- }
- // Get the day for which this view is being shown from the context
- mDate = mServices.Context().focusDateAndTimeL();
-
- // Check if the current day being shown is "Today"
- if (mGoToTodayAction) {
- if (mDate.date() == CalenDateUtils::today().date()) {
- // Hide the "Go to today" option
- mGoToTodayAction->setVisible(false);
- } else {
- mGoToTodayAction->setVisible(true);
- }
- }
-
- // Set self as the current view
- // mServices.MainWindow().setCurrentView(this);
-
- // Dont override the soft key behavior if day view is the first view
- if (ECalenDayView != mServices.getFirstView()) {
- mSoftKeyAction = new HbAction(Hb::BackNaviAction);
- setNavigationAction(mSoftKeyAction);
- // Connect to the signal triggered by clicking on back button.
- connect(mSoftKeyAction, SIGNAL(triggered()), this,
- SLOT(launchMonthView()));
- }
- // Initialize the content widget
- mDayViewWidget->showWidget();
-
- // Population is complete, issue a notification
- populationComplete();
- }
-
-/*!
- Funtion to refresh the current view upon selecting a date
- from GoToDate popup
- */
-void CalenDayView::refreshViewOnGoToDate()
-{
- // Get the day for which this view is being shown from the context
- mDate = mServices.Context().focusDateAndTimeL();
-
- // Check if the current day being shown is "Today"
- if (mGoToTodayAction) {
- if (mDate.date() == CalenDateUtils::today().date()) {
- // Hide the "Go to today" option
- mGoToTodayAction->setVisible(false);
- } else {
- mGoToTodayAction->setVisible(true);
- }
- }
-
- // Initialize the content widget
- mDayViewWidget->showWidget();
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::HandleNotification
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::HandleNotification(const TCalenNotification notification)
-{
- Q_UNUSED(notification)
- // No implementation yet
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::docLoader
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-CalenDocLoader* CalenDayView::docLoader()
-{
- return mDocLoader;
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayView::handleLocaleChange
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::mousePressEvent(QGraphicsSceneMouseEvent *event)
-{
- // TODO: Remove these after gestures are available
- mTapPoint = event->pos();
- event->accept();
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayView::handleLocaleChange
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::mouseMoveEvent(QGraphicsSceneMouseEvent *event)
-{
- // TODO: Remove these after gestures are available
- QPointF curPos = event->pos();
- if (abs(curPos.y() - mTapPoint.y()) > 20) {
- event->accept();
- return;
- }
- if (curPos.x() - mTapPoint.x() > 50) {
- mTapPoint = QPointF(0, 0);
- mServices.IssueCommandL(ECalenShowPrevDay);
- mActionTaken = true;
- } else if (curPos.x() - mTapPoint.x() < -50) {
- mTapPoint = QPointF(0, 0);
- mServices.IssueCommandL(ECalenShowNextDay);
- mActionTaken = true;
- }
- event->accept();
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::eventFilter
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-bool CalenDayView::eventFilter(QObject *source, QEvent *event)
-{
- // TODO : remove this line after gestures are available
- mActionTaken = false;
- Q_UNUSED(source)
- if (event->type() == QEvent::GraphicsSceneMousePress) {
- QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent*>(event);
- mousePressEvent(mouseEvent);
- } else if (event->type() == QEvent::GraphicsSceneMouseMove) {
- QGraphicsSceneMouseEvent *mouseEvent = static_cast<QGraphicsSceneMouseEvent*>(event);
- mouseMoveEvent(mouseEvent);
- }
- if (mActionTaken) {
- // Swipe gesture has been enforced.
- // Do not pass the event to the source
- return true;
- }
- return false;
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::createToolBar
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::setupActions()
-{
- // Get the actions associated with this view
- HbAction *newEventAction = qobject_cast<HbAction *>
- (mDocLoader->findObject(CALEN_DAYVIEW_MENU_NEW_EVENT));
- if (!newEventAction) {
- qFatal("calendayview.cpp : Unable to find new event action");
- }
- // Connect to the signal triggered by new event action
- connect(newEventAction, SIGNAL(triggered()), mDayViewWidget, SLOT(createNewEvent()));
-
- mGoToTodayAction = qobject_cast<HbAction *>
- (mDocLoader->findObject(CALEN_DAYVIEW_MENU_GO_TO_TODAY));
- if (!mGoToTodayAction) {
- qFatal("calendayview.cpp : Unable to find go to today action");
- }
- // Connect to the signal triggered by new event action
- connect(mGoToTodayAction, SIGNAL(triggered()), mDayViewWidget, SLOT(goToToday()));
-
- HbAction *goToDateAction = qobject_cast<HbAction *>
- (mDocLoader->findObject(CALEN_DAYVIEW_MENU_GO_TO_DATE));
- if (!goToDateAction) {
- qFatal("calendayview.cpp : Unable to find go to date action");
- }
- // Connect to the signal triggered by new event action
- connect(goToDateAction, SIGNAL(triggered()), this, SLOT(goToDate()));
-
- HbAction *settingsAction = qobject_cast<HbAction *>
- (mDocLoader->findObject(CALEN_DAYVIEW_MENU_SETTINGS));
- if (!settingsAction) {
- qFatal("calendayview.cpp : Unable to find settings action");
- }
- // Connect to the signal triggered by new event action
- connect(settingsAction, SIGNAL(triggered()), this, SLOT(launchSettingsView()));
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::onLocaleChanged
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::onLocaleChanged(int reason)
-{
- Q_UNUSED(reason)
- // Notify the content widget about the change
- if(mDayViewWidget) {
- mDayViewWidget->handleLocaleChange();
- }
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::orientationChanged
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::orientationChanged(Qt::Orientation orientation)
-{
- // Notify the content widget about the change
- if (mDayViewWidget) {
- mDayViewWidget->orientationChanged(orientation);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::launchMonthView
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::launchMonthView()
-{
- // Issue the command to launch the month view
- mServices.IssueCommandL(ECalenMonthView);
-}
-
-// ----------------------------------------------------------------------------
-// CCalenDayView::clearListModel
-// clears the list model
-// ----------------------------------------------------------------------------
-//
-void CalenDayView::clearListModel()
- {
- mDayViewWidget->clearListModel();
- }
-
-// End of file --Don't remove this.
--- a/calendarui/views/src/calendayviewwidget.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1100 +0,0 @@
-/*
-* Copyright (c) 2009 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: CalenDayViewWidget implementation
-*
-*/
-
-// System includes
-#include <QStandardItemModel>
-#include <QGraphicsSceneEvent>
-#include <hbi18ndef.h>
-#include <hbextendedlocale.h>
-#include <hbgroupbox.h>
-#include <hbmenu.h>
-#include <hbaction.h>
-#include <hbmainwindow.h>
-#include <hbstyleloader.h>
-#include <hbdatetimepicker.h>
-#include <hbdialog.h>
-#include <xqsettingsmanager.h>
-#include <agendautil.h>
-#include <noteseditor.h>
-
-// User includes
-#include "calendayviewwidget.h"
-#include "calencommon.h"
-#include "calendayview.h"
-#include "calendocloader.h"
-#include "calenservices.h"
-#include "calencontext.h"
-#include "calendateutils.h"
-#include "CalenUid.h"
-#include "caleneventlistviewitem.h"
-#include "calenpluginlabel.h"
-#include "CalendarInternalCRKeys.h"
-
-// Constants
-static const QString singleSpace(" ");
-static const QString newLine("\n");
-static const QString customLayout("custom");
-static const char *stretchLayout("stretchItem");
-// TODO: Replace with actual image names later
-static const QString toDoIcon("qtg_small_todo");
-static const QString reminderIcon("qtg_mono_alarm");
-static const QString locationIcon("qtg_mono_location");
-static const QString repeatIcon("qtg_mono_repeat");
-static const QString allDayIcon(":/qgn_indi_cdr_meeting_layer0.svg");
-static const QString exceptionIcon(":/qtg_mono_exception.png");
-static const int singleColumn(1);
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::CalenDayViewWidget
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-EXPORT_C CalenDayViewWidget::CalenDayViewWidget(MCalenServices &services,
- CalenDocLoader *docLoader) :
-mServices(services),
-mDocLoader(docLoader),
-mRegionalInfoGroupBox(NULL),
-mLongTapEventFlag(false)
-{
- // Construct the list view prototype
- mListViewPrototype = new CalenEventListViewItem(this);
-
- // Create the list model
- mListModel = new QStandardItemModel(this);
-
- // Register the custom docml and css to provide our own style to the list items
- HbStyleLoader::registerFilePath(":/");
-
- //Create the setting manager
- mSettingsManager = new XQSettingsManager(this);
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::~CalenDayViewWidget
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-EXPORT_C CalenDayViewWidget::~CalenDayViewWidget()
-{
- if (mListViewPrototype) {
- delete mListViewPrototype;
- mListViewPrototype = NULL;
- }
- if (mListModel) {
- // Do not delete the model since its owned by the view
- mListModel->clear();
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::setupWidget
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::setupWidget(CalenDayView *view)
-{
- // Store the view for future reference
- mView = view;
-
- if (!mDocLoader) {
- // Nothing much can be done. Simply return
- return;
- }
-
- // Initialize the child widgets
- initChildWidgets();
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::showWidget
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::showWidget()
-{
- // Get the date for which this view has been launched
- mDate = mServices.Context().focusDateAndTimeL();
-
- // Set the heading text
- setHeadingText();
-
- // Get the instance list
- getInstanceList();
-
- // Check if regional information needs to be shown
- // and add it or remove it
- showHideRegionalInformation();
-
- // Load the appropriate section based on the number of events for the day
- if (0 == mInstanceArray.count()) {
- // There are no entries for the day
- // Load and show the empty list section
- bool loadSuccess = false;
-
- // Hide the list which shows the events
- mEventsList->hide();
-
- // Show the empty list text
- mEmptyListLabel->show();
-
- // Get the current device orientation
- int orientation = mServices.MainWindow().orientation();
- if (Qt::Vertical == orientation) {
- mDocLoader->load(CALEN_DAYVIEW_XML_FILE, "emptyList", &loadSuccess);
- } else {
- mDocLoader->load(CALEN_DAYVIEW_XML_FILE, "emptyLandscape", &loadSuccess);
- }
- if (!loadSuccess) {
- qFatal("calendayviewwidget.cpp : Unable to load empty list section");
- }
- } else {
- // Hide the empty view label
- mEmptyListLabel->hide();
-
- // Show the events list
- mEventsList->show();
-
- // There are one or more events. Load the non-empty section
- bool loadSuccess = false;
- mDocLoader->load(CALEN_DAYVIEW_XML_FILE, "nonEmptyList", &loadSuccess);
- if (!loadSuccess) {
- qFatal("calendayviewwidget.cpp : Unable to load non-empty list section");
- }
- // Now populate the list with the events
- populateListWidget();
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::orientationChanged
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::orientationChanged(Qt::Orientation orientation)
-{
- // Load the appropriate section based on the number of events for the day
- if (0 == mInstanceArray.count()) {
- // There are no entries for the day
- // Load and show the empty list section
- bool loadSuccess = false;
-
- // Hide the list which shows the events
- mEventsList->hide();
-
- // Show the empty list text
- mEmptyListLabel->show();
-
- if (Qt::Vertical == orientation) {
- mDocLoader->load(CALEN_DAYVIEW_XML_FILE, "emptyList", &loadSuccess);
- } else {
- mDocLoader->load(CALEN_DAYVIEW_XML_FILE, "emptyLandscape", &loadSuccess);
- }
- if (!loadSuccess) {
- qFatal("calendayviewwidget.cpp : Unable to load empty list section");
- }
- } else {
- // Hide the empty view label
- mEmptyListLabel->hide();
-
- // Show the events list
- mEventsList->show();
-
- // There are one or more events. Load the non-empty section
- bool loadSuccess = false;
- mDocLoader->load(CALEN_DAYVIEW_XML_FILE, "nonEmptyList", &loadSuccess);
- if (!loadSuccess) {
- qFatal("calendayviewwidget.cpp : Unable to load non-empty list section");
- }
- handleListItemStretching(orientation);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::handleLocaleChange
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::handleLocaleChange()
-{
- if(mListViewPrototype) {
- HbExtendedLocale locale = HbExtendedLocale::system();
- HbExtendedLocale::TimeStyle timeStyle = locale.timeStyle();
- if (HbExtendedLocale::Time12 == timeStyle) {
- mListViewPrototype->setTimeFormat12Hr(true);
- } else {
- mListViewPrototype->setTimeFormat12Hr(false);
- }
-
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::setContextFromHighlight
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::setContextFromHighlight(AgendaEntry entry)
-{
- if (entry.isTimedEntry()) {
- // Timed entry.
- QDateTime start = entry.startTime();
- // start.setDate(mDate.date());
- mServices.Context().setFocusDateAndTimeAndInstanceL(start,
- TCalenInstanceId::create(entry),
- KCalenDayViewUidValue);
- } else {
- // Untimed entry.
- if (CalenDateUtils::onSameDay(TCalenInstanceId::create(entry).mInstanceTime,
- mDate)) {
- mServices.Context().setInstanceIdL(TCalenInstanceId::create(entry),
- KCalenDayViewUidValue);
- } else {
- // Multi-day untimed note (either multi-day day note or weird todo).
- // Focus on the instance and set the focus time to the highlighted day.
- mServices.Context().setFocusDateAndTimeAndInstanceL(mDate,
- TCalenInstanceId::create(entry),
- KCalenDayViewUidValue);
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::initChildWidgets
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::initChildWidgets()
-{
- // Get the pointer to the events list
- mEventsList = static_cast<HbListView*> (mDocLoader->findWidget(CALEN_DAYVIEW_LISTWIDGET));
- if (!mEventsList) {
- qFatal("calendayviewwidget.cpp : Unable to find the events list");
- }
- // NOTE: Layout name MUST be same as the name mentioned in the css
- mEventsList->setLayoutName(customLayout);
-
- // TODO : remove this line after gestures are available
- mEventsList->installEventFilter(mView);
-
- // Connect to the long press and activation signals
- connect(mEventsList, SIGNAL(longPressed(HbAbstractViewItem*, const QPointF&)),
- this, SLOT(itemLongPressed(HbAbstractViewItem*, const QPointF&)));
- connect(mEventsList, SIGNAL(activated(const QModelIndex&)), this,
- SLOT(itemActivated(const QModelIndex&)));
-
- // Get the pointer to label from the loader.
- mHeadingLabel = qobject_cast<HbGroupBox*> (mDocLoader->findWidget(CALEN_DAYVIEW_HEADING));
- if (!mHeadingLabel) {
- qFatal("calendayviewwidget.cpp : Unable to find heading widget");
- }
-
- // Get the pointer to the empty view label
- mEmptyListLabel = qobject_cast<HbLabel*> (mDocLoader->findWidget("noEventsLabel"));
- if (!mEmptyListLabel) {
- qFatal("calendayviewwidget.cpp : Unable to find empty list label");
- }
- HbWidget *headingPluginWidget =
- qobject_cast<HbWidget*> (mDocLoader->findWidget(CALEN_DAYVIEW_HEADING_REGIONALPLUGIN_WIDGET));
-
- mRegionalPluginLayout = static_cast<QGraphicsLinearLayout*>(headingPluginWidget->layout());
-
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::populateListWidget
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::populateListWidget()
-{
- // Recycle the list items so that only needed rows
- // are added or removed
- if (mInstanceArray.count() == 0) {
- // Reset the list
- mEventsList->reset();
- // Clear the model to ensure it does not have any old items
- mListModel->clear();
- return;
- } else if (mInstanceArray.count() > mListModel->rowCount()) {
- // There are more events than the number of items
- // in the list. Add more rows
- mListModel->insertRows(0, mInstanceArray.count() - mListModel->rowCount());
- } else if (mInstanceArray.count() < mListModel->rowCount()) {
- // There are less number of events than the number
- // of items in the list. Remove the extra rows
- mListModel->removeRows(0, mListModel->rowCount() - mInstanceArray.count());
- }
- mListModel->setColumnCount(singleColumn);
-
- // Add all the events to the list
- for (int index = 0; index < mInstanceArray.count(); index++) {
- // Get each of the entry details
- AgendaEntry entry = mInstanceArray[index];
- // Create a list item for each entry
- createListItem(index, entry);
- }
- // Add the item on to the list widget
- mEventsList->setModel(mListModel, mListViewPrototype);
-
- // Now get the item to scroll to
- int scrollToIndex = getIndexToScrollTo();
- if (mListModel->rowCount() > 0) {
- // Scroll to the index only if index is valid
- mEventsList->scrollTo(mListModel->index(scrollToIndex, 0));
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::getInstanceList
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::getInstanceList()
-{
- // Clear the previous instance list
- mInstanceArray.clear();
-
- // Check if the date is valid
- if (!CalenDateUtils::isValidDay(mDate)) {
- mDate = CalenDateUtils::today();
- }
-
- // Set the filter flags to fetch all relevant entries
- AgendaUtil::FilterFlags filter = AgendaUtil::FilterFlags(AgendaUtil::IncludeAnniversaries |
- AgendaUtil::IncludeAppointments |
- AgendaUtil::IncludeEvents |
- AgendaUtil::IncludeReminders |
- AgendaUtil::IncludeIncompletedTodos);
-
- // Fetch the instance list from the agenda interface
- mInstanceArray = mServices.agendaInterface()->createEntryIdListForDay(mDate, filter);
-
- if (0 == mInstanceArray.count()) {
- // There are no events to populate
- // Hide the events list
- mEventsList->hide();
- // Show the empty list text
- mEmptyListLabel->show();
- return;
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::setDateToLabel
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::setHeadingText()
- {
- // Format the date as per the device locale settings
- HbExtendedLocale systemLocale = HbExtendedLocale::system();
-
- // Get localised name of the day from locale
- QString dayString = systemLocale.dayName(mDate.date().dayOfWeek());
- // Append a single space
- dayString.append(singleSpace);
- // Set the heading
- // Append the date which is formatted as per the locale
- mHeadingLabel->setHeading(hbTrId(
- "txt_calendar_subhead_1_2").arg(dayString).arg(
- systemLocale.format(mDate.date(), r_qtn_date_usual_with_zero)));
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::createListItem
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::createListItem(int index, AgendaEntry entry)
-{
- if (index < 0 || entry.isNull()) {
- // Not a valid index or entry. Dont do anything
- return;
- }
- // Check if the entry is a timed entry
- // TODO: Right now, only appointment/meeting type is being handled
- // Handle other timed entry types like reminder etc
- if (entry.isTimedEntry()) {
- // Get the text and icon data for the entry
- addTimedEventToList(index, entry);
- } else {
- addNonTimedEventToList(index, entry);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::addTimedEventToList
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::addTimedEventToList(int index, AgendaEntry entry)
-{
- // Create text and icon list to set to the model
- QVariantList textData;
- QVariantList iconData;
- bool twoLines = false;
-
- /**
- * IMPORTANT NOTE: All the text and icon items must be
- * inserted into the variant list in a specific order.
- * If not, chaos will set it!!!
- * On a more serious note, the mesh layout depends on the
- * fact that the icons and text data will be added in a
- * particular order. If one of the items go missing, the
- * layout might get messed up. Also in case a particular item
- * is not required to be added in the middle of the list, an
- * empty QVariant must be added to indicate to the list view
- * that the item must be removed from the layout.
- * Do not mess with the order in case you are not sure what
- * you are exactly doing.
- */
-
- // The first icon to show to-do or all day should not be shown
- // Append empty data to the icons list
- iconData << QVariant();
-
- // Check if alarm is enabled for the entry
- if (entry.alarm().isNull()) {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- } else {
- iconData << HbIcon(reminderIcon);
- }
-
- // Check if the entry is recurring
- if (entry.isRepeating()) {
- iconData << HbIcon(repeatIcon);
- } else if (!entry.recurrenceId().isNull()) {
- // This is an exceptional entry
- iconData << HbIcon(exceptionIcon);
- } else {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- }
-
- HbExtendedLocale locale = HbExtendedLocale::system();
- // Get the start time and format as per the locale
- QDateTime startTime = entry.startTime();
- QTime eventStartTime;
-
- if (CalenDateUtils::beginningOfDay(startTime)
- < CalenDateUtils::beginningOfDay(mDate)) {
- // event is started previous day, show StarTime as 12:00 am in Agendaview,
- eventStartTime.setHMS(00, 00, 00);
- } else {
- eventStartTime = entry.startTime().time();
- }
- QString eventTime = locale.format(eventStartTime, r_qtn_time_usual_with_zero);
-
- // Get the event end time
- QDateTime endTime = entry.endTime();
- QTime eventEndTime;
-
- if (CalenDateUtils::beginningOfDay(endTime)
- > CalenDateUtils::beginningOfDay(mDate)) {
- // event has MidNight crossover, show EndTime as 11:59pm in Agendaview,
- eventEndTime.setHMS(23, 59, 59);
- } else {
- eventEndTime = entry.endTime().time();
- }
-
- if (eventStartTime < eventEndTime) {
- // Raise the flag to indicate that the list item
- // would wrap to two lines
- twoLines = true;
- // Append '-' to indicate an end time is present
- eventTime.append("-");
- // Append new line to wrap to next line
- eventTime.append(newLine);
- // Event is a not a zero duration meeting
- // Only in this case, append the end time
- eventTime.append(locale.format(eventEndTime, r_qtn_time_usual_with_zero));
- } else {
- // Append new line to wrap to next line
- eventTime.append(newLine);
- }
- // Add the event time to the text list
- // This MUST be the first item to be added to the list
- textData << eventTime;
-
- // Get the entry subject
- QString subject = entry.summary();
- if (subject.isEmpty() || subject.isNull()) {
- // No subject. Add "(No subject)" text
- subject.append(hbTrId("txt_calendar_dblist_unnamed"));
- }
- // Add the subject to the text list
- // This MUST be the second item in the list
- textData << subject;
-
- // Check if the entry has location
- // TODO: This must change to check for geo-location
- // This MUST be the third item in the list
- if (entry.location().isEmpty()) {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- if (twoLines) {
- /**
- * NOTE: If the primary text is wrapping to two
- * lines, then the location must be set as blank
- * since the bottom of the list item is anchored to
- * the bottom of the secondary text. Else the bottom
- * of the list will overlap on the primary text
- */
- textData << singleSpace;
- } else {
- /**
- * Else, set the secondary text to empty to indicate
- * to the list view to remove the item itself and
- * shrink its size to a single line size
- */
- textData << QVariant();
- }
- } else {
- // TODO: Location icon must be shown
- // only if valid geo-coordinates are present
- // iconData << HbIcon(locationIcon);
- textData << entry.location();
- }
-
- // Get the list model index and set the text and icon data
- QModelIndex listIndex = mListModel->index(index, 0);
- mListModel->setData(listIndex, textData, Qt::DisplayRole);
- mListModel->setData(listIndex, iconData, Qt::DecorationRole);
-
- // Disable item stretching by removing the dynamic property
- HbListViewItem *listViewItem = static_cast<HbListViewItem*>
- (mEventsList->itemByIndex(mListModel->index(index, 0)));
- if (listViewItem) {
- listViewItem->setProperty(stretchLayout, false);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::addNonTimedEventToList
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::addNonTimedEventToList(int index, AgendaEntry entry)
-{
- QVariantList textData;
- QVariantList iconData;
-
- /**
- * IMPORTANT NOTE: All the text and icon items must be
- * inserted into the variant list in a specific order.
- * If not, chaos will set it!!!
- * On a more serious note, the mesh layout depends on the
- * fact that the icons and text data will be added in a
- * particular order. If one of the items go missing, the
- * layout might get messed up. Also in case a particular item
- * is not required to be added in the middle of the list, an
- * empty QVariant must be added to indicate to the list view
- * that the item must be removed from the layout.
- * Do not mess with the order in case you are not sure what
- * you are exactly doing.
- */
-
- // The first column text has to be empty
- textData << QVariant();
-
- // Get the entry subject
- QString subject = entry.summary();
- if (subject.isEmpty() || subject.isNull()) {
- // No subject. Add "(No subject)" text
- subject.append(hbTrId("txt_calendar_dblist_unnamed"));
- }
- // Add the subject to the text list
- // This MUST be the second item in the list
- textData << subject;
-
- // Get the entry type
- AgendaEntry::Type entryType = entry.type();
-
- if (entryType == AgendaEntry::TypeAnniversary) {
- // Nothing to do as of now as anniversary events
- // cannot be created
- // TODO: To be handled in case of sync
- } else if (entryType == AgendaEntry::TypeEvent) {
- // This is an all day event
- // Append the all-day icon
- iconData << HbIcon(allDayIcon);
-
- // Check if alarm is enabled for the entry
- if (entry.alarm().isNull()) {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- } else {
- iconData << HbIcon(reminderIcon);
- }
-
- // Check if the entry is recurring
- if (entry.isRepeating()) {
- iconData << HbIcon(repeatIcon);
- } else {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- }
-
- // Append the location
- if (!entry.location().isEmpty()) {
- textData << entry.location();
- // TODO: Location icon must be shown
- // only if valid geo-coordinates are present
- // iconData << HbIcon(locationIcon);
- } else {
- textData << singleSpace;
- }
-
- } else if (entryType == AgendaEntry::TypeTodo) {
- // Append the to-do icon
- iconData << HbIcon(toDoIcon);
-
- // Get the due date
- QDateTime dueDate = entry.endTime();
-
- // Append the date first
- QString dueDateString(hbTrId("txt_calendar_dblist_val_due_on_1"));
- QString dueText;
- dueText.setNum(dueDate.date().day());
- dueText.append(singleSpace);
-
- // Append the month name next
- HbExtendedLocale locale = HbExtendedLocale::system();
- QString month = locale.monthName(dueDate.date().month());
- dueText.append(month);
- dueText.append(singleSpace);
-
- // Append the year
- QString year;
- year.setNum(dueDate.date().year());
- dueText.append(year);
-
- textData << dueDateString.arg(dueText);
-
- // Check if alarm is enabled for the entry
- if (entry.alarm().isNull()) {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- } else {
- iconData << HbIcon(reminderIcon);
- }
-
- // Check if the entry is recurring
- if (entry.isRepeating()) {
- iconData << HbIcon(repeatIcon);
- } else {
- // Insert a blank icon. Else the next icon
- // will get replaced in this icon's position
- iconData << QVariant();
- }
- }
-
- // Get the list model index and set the text and icon data
- QModelIndex listIndex = mListModel->index(index, 0);
- mListModel->setData(listIndex, textData, Qt::DisplayRole);
- mListModel->setData(listIndex, iconData, Qt::DecorationRole);
-
- // Enable item stretching by adding the dynamic property
- HbListViewItem *listViewItem = static_cast<HbListViewItem*>
- (mEventsList->itemByIndex(mListModel->index(index, 0)));
- Qt::Orientation orientation = mServices.MainWindow().orientation();
- // Apply stretch only for landscape orientation
- if (listViewItem) {
- if (Qt::Horizontal == orientation) {
- listViewItem->setProperty(stretchLayout, true);
- } else {
- listViewItem->setProperty(stretchLayout, false);
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::handleListItemStretching
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::handleListItemStretching(Qt::Orientation orientation)
-{
- if (mInstanceArray.count() == 0) {
- // Nothing much to do. Simply return
- return;
- }
- for(int index = 0; index < mInstanceArray.count() ; index ++) {
- AgendaEntry entry = mInstanceArray[index];
- if (!entry.isNull()) {
- AgendaEntry::Type eventType = entry.type();
- switch(eventType) {
- // Apply the stretching to only to-do's,
- // anniversary and all-day event types
- case AgendaEntry::TypeTodo:
- case AgendaEntry::TypeEvent:
- case AgendaEntry::TypeAnniversary:
- {
- // Get the list view item corresponding to the index
- HbListViewItem *listItem = static_cast<HbListViewItem*>
- (mEventsList->itemByIndex(mListModel->index(index, 0)));
- if (listItem) {
- if (orientation == Qt::Horizontal) {
- // Set a dynamic property to indicate that this list item
- // must be stretched in landscape.
- // NOTE: Property name MUST match the name specified in
- // css file, else wierd things might happen
- listItem->setProperty(stretchLayout, true);
- }
- }
- }
- break;
- default:
- {
- HbListViewItem *listItem = static_cast<HbListViewItem*>
- (mEventsList->itemByIndex(mListModel->index(index, 0)));
- if (listItem) {
- listItem->setProperty(stretchLayout, false);
- }
- break;
- }
- }
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::getIndexToScrollTo
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-int CalenDayViewWidget::getIndexToScrollTo()
-{
- int scrollIndex = 0;
- TCalenInstanceId instanceId = mServices.Context().instanceId();
- if (instanceId == TCalenInstanceId::nullInstanceId()) {
- // If the instance is not set, then scroll to zero index
- return scrollIndex;
- }
-
- for (int index = 0 ; index < mInstanceArray.count() ; index++) {
- AgendaEntry entry = mInstanceArray[index];
- if (entry.id() == instanceId.mEntryLocalUid) {
- // Match found.
- scrollIndex = index;
- break;
- }
- }
- return scrollIndex;
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::showHideRegionalInformation
-// To Show and hide regional plugin label depends upon settings
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::showHideRegionalInformation()
-{
- XQSettingsKey regionalInfo(XQSettingsKey::TargetCentralRepository,
- KCRUidCalendar.iUid, KShowRegionalInformation);
-
- int showRegionalInfo = mSettingsManager->readItemValue(regionalInfo).toUInt();
- if (showRegionalInfo) {
-
- if (!mRegionalInfoGroupBox) {
- mRegionalInfoGroupBox = new HbGroupBox();
- CalenPluginLabel *regionalInfo = new CalenPluginLabel(
- mServices, this);
- mRegionalInfoGroupBox->setContentWidget(regionalInfo);
- mRegionalPluginLayout->insertItem(1, mRegionalInfoGroupBox);
- }
-
- if (mView->pluginEnabled()) {
- QString *pluginString = mView->pluginText();
- HbLabel *pluginInfoLabel = qobject_cast <HbLabel *>
- (mRegionalInfoGroupBox->contentWidget());
- pluginInfoLabel->setPlainText(*pluginString);
- }
- } else {
- if (mRegionalInfoGroupBox) {
- mRegionalPluginLayout->removeItem(mRegionalInfoGroupBox);
- delete mRegionalInfoGroupBox;
- mRegionalInfoGroupBox = NULL;
- }
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::createNewEvent
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::createNewEvent()
-{
- // Issue a command to launch editor to create
- // a new event
- mServices.IssueCommandL(ECalenNewMeeting);
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::editEntry
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::editEntry()
-{
- // Check if the selected index is valid
- if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
- return;
- }
-
- // Get the entry details first
- AgendaEntry entry = mInstanceArray[mSelectedIndex];
- if (AgendaEntry::TypeTodo == entry.type()) {
- // Launch the to-do editor
- mNotesEditor = new NotesEditor(mView);
- mNotesEditor->edit(entry);
- connect(mNotesEditor, SIGNAL(editingCompleted(bool)), this, SLOT(noteEditingCompleted(bool)));
- } else {
- // Set the context
- setContextFromHighlight(entry);
- // Issue a command to launch the editor to edit this entry
- mServices.IssueCommandL(ECalenEditCurrentEntry);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::viewEntry
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::viewEntry()
-{
- // Get the entry details first
- AgendaEntry entry = mInstanceArray[mSelectedIndex];
-
- // Set the context
- setContextFromHighlight(entry);
-
- // Launch the event viewer.
- mServices.IssueCommandL(ECalenEventView);
-}
-
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::deleteEntry
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::deleteEntry()
-{
- // Check if the selected index is valid
- if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
- return;
- }
-
- // Get the entry details
- AgendaEntry entry = mInstanceArray[mSelectedIndex];
- // Set the context
- setContextFromHighlight(entry);
- // Issue the command to delete the entry
- mServices.IssueCommandL(ECalenDeleteCurrentEntry);
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::markAsDone
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::markAsDone()
-{
- // Check if the selected index is valid
- if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
- return;
- }
-
- // Get the entry details
- AgendaEntry entry = mInstanceArray[mSelectedIndex];
-
- // Check again if the event is of type to-to
- if (AgendaEntry::TypeTodo == entry.type()) {
- // Set the status of the to-do as completed
- entry.setStatus(AgendaEntry::TodoCompleted);
- // Update the completed date and time
- entry.setCompletedDateTime(mDate);
-
- // Update the entry in the database
- AgendaUtil agendaUtil;
- agendaUtil.setCompleted(entry, true, mDate);
-
- mServices.IssueCommandL(ECalenStartActiveStep);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::itemLongPressed
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::itemLongPressed(HbAbstractViewItem* listViewItem,
- const QPointF& coords)
-{
- mLongTapEventFlag = true;
- // Update the selection index first
- mSelectedIndex = listViewItem->modelIndex().row();
-
- if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
- // Invalid index
- return;
- }
-
- AgendaEntry entry = mInstanceArray[mSelectedIndex];
-
- // Create new menu.
- HbMenu *contextMenu = new HbMenu();
-
- // Add the open option
- HbAction *openAction = contextMenu->addAction(
- hbTrId("txt_common_menu_open"));
-
- // Check the type of event
- if (AgendaEntry::TypeTodo == entry.type()) {
- // Add an option to mark the note as complete
- HbAction *completeAction = contextMenu->addAction(
- hbTrId("txt_calendar_menu_mark_as_done"));
- }
-
- // Add the edit option
- HbAction *editAction = contextMenu->addAction(
- hbTrId("txt_common_menu_edit"));
-
- // Add the delete option
- HbAction *deleteAction = contextMenu->addAction(
- hbTrId("txt_common_menu_delete"));
-
- contextMenu->setDismissPolicy(HbMenu::TapAnywhere);
-
- // Show context sensitive menu.
- // Param const QPointF& coordinate - is a longpress position.
- contextMenu->setPreferredPos(coords);
- connect(contextMenu, SIGNAL(aboutToClose()),
- this,
- SLOT(contextMenuClosed()));
-
- contextMenu->open(this, SLOT(contextManuTriggered(HbAction *)));
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::itemActivated
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::itemActivated(const QModelIndex &index)
-{
- // Update the selection index first
- mSelectedIndex = index.row();
-
- // Check if the selected index is valid
- if (mSelectedIndex < 0 || mSelectedIndex > mInstanceArray.count()) {
- return;
- }
- if( !mLongTapEventFlag ) {
- // Open the event for viewing
- viewEntry();
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::itemActivated
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::noteEditingCompleted(bool status)
-{
- Q_UNUSED(status);
- // Delete the notes editor instance
- mNotesEditor->deleteLater();
-
- // We need to refresh the list since user
- // might have marked the to-do as complete or
- // edited it or deleted it. So get the instance
- // list again
- if (status) {
- mServices.IssueCommandL(ECalenStartActiveStep);
- }
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::goToToday
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::goToToday()
-{
- // First check if we are not already
- // showing today's agenda
- if (mDate == CalenDateUtils::today()) {
- return;
- }
-
- // Set the context for the current day
- mServices.Context().setFocusDateL(CalenDateUtils::today(), KCalenDayViewUidValue);
-
- mView->refreshViewOnGoToDate();
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::contextMenuClosed
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::contextMenuClosed()
-{
- mLongTapEventFlag = false;
-}
-
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::contextManuTriggered
-// Rest of the details are commented in the header
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::contextManuTriggered(HbAction *action)
-{
- if (action->text() == hbTrId("txt_common_menu_open")) {
- viewEntry();
- } else if (action->text() == hbTrId("txt_calendar_menu_mark_as_done")) {
- markAsDone();
- } else if (action->text() == hbTrId("txt_common_menu_edit")) {
- editEntry();
- } else {
- if (action->text() == hbTrId("txt_common_menu_delete")) {
- deleteEntry();
- }
- }
-}
-// ----------------------------------------------------------------------------
-// CalenDayViewWidget::clearListModel
-// clears the list model
-// ----------------------------------------------------------------------------
-//
-void CalenDayViewWidget::clearListModel()
- {
- mListModel->clear();
- }
-// End of file --Don't remove this.
--- a/calendarui/views/src/caleneventlistviewitem.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/caleneventlistviewitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -24,8 +24,6 @@
CalenEventListViewItem::CalenEventListViewItem(QGraphicsItem *parent) :
HbListViewItem(parent)
{
- HbExtendedLocale locale = HbExtendedLocale::system();
- timeFormat12 = (HbExtendedLocale::Time12 == locale.timeStyle()) ? true : false;
}
CalenEventListViewItem::~CalenEventListViewItem()
@@ -43,15 +41,4 @@
HbListViewItem::updateChildItems();
}
-bool CalenEventListViewItem::timeFormat12Hr()
-{
- return timeFormat12;
-}
-
-void CalenEventListViewItem::setTimeFormat12Hr(bool format)
-{
- timeFormat12 = format;
-}
-
-
// End of file
--- a/calendarui/views/src/calengriditemprototype.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calengriditemprototype.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -16,7 +16,6 @@
*/
// System includes
-#include <QDebug>
#include <QPainter>
#include <QPen>
#include <QGraphicsWidget>
@@ -32,6 +31,7 @@
// User includes
#include "calengriditemprototype.h"
#include "calencommon.h"
+#include "calentodayindicatorlinedrawer.h"
/*!
\class CalenGridItemPrototype
@@ -71,15 +71,25 @@
if (!mFocusIndicatorItem) {
mFocusIndicatorItem = new HbFrameItem(this);
- mFocusIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+ mFocusIndicatorItem->frameDrawer().setFrameType(
+ HbFrameDrawer::NinePieces);
mFocusIndicatorItem->setZValue(-1);
- HbStyle::setItemName(mFocusIndicatorItem, QLatin1String("focusIconItem"));
+ HbStyle::setItemName(
+ mFocusIndicatorItem, QLatin1String("focusIconItem"));
}
if (!mEventIndicatorItem) {
mEventIndicatorItem = new HbIconItem(this);
- HbStyle::setItemName(mEventIndicatorItem, QLatin1String("eventIconItem"));
+ HbStyle::setItemName(
+ mEventIndicatorItem, QLatin1String("eventIconItem"));
}
+
+ if (!mTodayIndicatorItem) {
+ mTodayIndicatorItem = new CalenTodayIndicatorLineDrawer(this);
+ HbStyle::setItemName(
+ mTodayIndicatorItem, QLatin1String("todayIndicatorItem"));
+ }
+
}
/*!
@@ -92,6 +102,13 @@
{
CalenGridItemPrototype* item = new CalenGridItemPrototype(*this);
item->createPrimitives();
+
+ // Set the default frame to NULL so that HbGridView does not add its
+ // default frame for items
+ HbFrameBackground frame;
+ frame.setFrameGraphicsName(QString(""));
+ item->setDefaultFrame(frame);
+
return item;
}
@@ -129,8 +146,14 @@
}
// Get the today indicator role
- underlineEnabled = itemList.at(CalendarNamespace::CalendarMonthUnderlineRole).value<bool>();
- drawUnderline(underlineEnabled);
+ underlineEnabled = itemList.at(
+ CalendarNamespace::CalendarMonthUnderlineRole).
+ value<bool>();
+ if(underlineEnabled) {
+ mTodayIndicatorItem->show();
+ } else {
+ mTodayIndicatorItem->hide();
+ }
// Get the event indicator data
monthEventRole = itemList.at(CalendarNamespace::CalendarMonthEventRole).value<bool>();
@@ -159,29 +182,6 @@
}
/*!
- Function to create the underline icon item
- */
-void CalenGridItemPrototype::drawUnderline(bool underlineEnabled)
-{
- if (underlineEnabled) {
- if (!mTodayIndicatorItem) {
- mTodayIndicatorItem = new HbIconItem(this);
- HbStyle::setItemName(mTodayIndicatorItem,
- QLatin1String("todayIndicatorItem"));
- if (mTodayUnderLineColor.isValid()) {
- mTodayIndicatorItem->setColor(mTodayUnderLineColor);
- }
- }
- } else {
- if (mTodayIndicatorItem) {
- delete mTodayIndicatorItem;
- mTodayIndicatorItem = NULL;
- }
- }
-}
-
-
-/*!
Function overwritten to avoid default behavior
*/
void CalenGridItemPrototype::pressStateChanged(bool pressed,bool animate)
--- a/calendarui/views/src/calenmonthgrid.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calenmonthgrid.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -20,6 +20,9 @@
#include <hbabstractviewitem.h>
#include <hbstyleloader.h>
#include <hbcolorscheme.h>
+#include <hbpangesture.h>
+#include <hbswipegesture.h>
+#include <hbdeviceprofile.h>
// User includes
#include "calenmonthgrid.h"
@@ -28,10 +31,13 @@
#include "calenmonthview.h"
#include "calendateutils.h"
#include "calencommon.h"
+#include "calenconstants.h"
// Constants
-#define SCROLL_SPEEED 2000
+#define SCROLL_SPEEED 3000
#define GRIDLINE_WIDTH 0.075 //units
+#define MAX_PAN_DIRECTION_THRESHOLD 50
+#define MIN_PAN_DIRECTION_THRESHOLD 20
/*!
\class CalenMonthGrid
@@ -49,7 +55,7 @@
mIsPanGesture(false),
mIsAtomicScroll(true),
mView(NULL),
- mCurrentRow(0),
+ mCurrentRow(-100),
mIsNonActiveDayFocused(false),
mIgnoreItemActivated(false),
mGridBorderColor(Qt::gray)
@@ -64,6 +70,8 @@
setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
setClampingStyle(HbScrollArea::StrictClamping);
setEnabledAnimations(HbAbstractItemView::None);
+ setFrictionEnabled(false);
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
resetTransform();
// Get the content widget of the scroll area to draw the grid lines
@@ -84,10 +92,6 @@
// Connect to scrolling finished signal
connect(this, SIGNAL(scrollingEnded()), this,
SLOT(scrollingFinished()));
-
- // Connect to item activated signal
- connect(this, SIGNAL(activated(const QModelIndex &)), this,
- SLOT(itemActivated(const QModelIndex &)));
}
/*!
@@ -270,6 +274,14 @@
indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
mIsAtomicScroll = true;
scrollTo(indexToBeScrolled);
+
+ // Update the sart position of the content widget
+ mStartPos = mContentWidget->pos();
+
+ // Now connect to the signal which gets emitted when any item on the grid
+ // is tapped.
+ connect(this, SIGNAL(activated(const QModelIndex &)), this,
+ SLOT(itemActivated(const QModelIndex &)));
}
/*!
@@ -292,31 +304,42 @@
}
/*!
- Listens for down gesture
+ Scrolls the content dowmwards
*/
-void CalenMonthGrid::downGesture (int value)
+void CalenMonthGrid::downGesture()
{
- Q_UNUSED(value)
- mDirection = down;
- mIsAtomicScroll = false;
- setAttribute(Hb::InteractionDisabled);
-
- // pass it to parent
- HbScrollArea::downGesture(value);
+ // Make sure that content widget is properly placed
+ if (mIsNonActiveDayFocused) {
+ mIsAtomicScroll = true;
+ int itemToBeScrolled = mView->rowsInPrevMonth() * KCalenDaysInWeek;
+ QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ scrollTo(indexToBeScrolled);
+ }
+ mDirection = down;
+ mIsAtomicScroll = false;
+ setAttribute(Hb::InteractionDisabled);
+ QPointF targetPos(0.0, 0.0);
+ scrollContentsTo(targetPos,500);
}
/*!
- Listens for Up gesture
+ Scrolls the content upwards
*/
-void CalenMonthGrid::upGesture (int value)
+void CalenMonthGrid::upGesture()
{
- Q_UNUSED(value)
- mDirection = up;
- mIsAtomicScroll = false;
- setAttribute(Hb::InteractionDisabled);
-
- // pass it to parent
- HbScrollArea::upGesture(value);
+ // Make sure that content widget is properly placed
+ if (mIsNonActiveDayFocused) {
+ mIsAtomicScroll = true;
+ int itemToBeScrolled = mView->rowsInPrevMonth() * KCalenDaysInWeek;
+ itemToBeScrolled += KNumOfVisibleRows * KCalenDaysInWeek;
+ QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ scrollTo(indexToBeScrolled);
+ }
+ mDirection = up;
+ mIsAtomicScroll = false;
+ setAttribute(Hb::InteractionDisabled);
+ QPointF targetPos(0.0, mStartPos.y() - size().height());
+ scrollContentsTo(-targetPos,500);
}
@@ -325,7 +348,6 @@
*/
void CalenMonthGrid::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
- mPressedPos = event->pos();
// Pass it to parent
HbGridView::mousePressEvent(event);
}
@@ -335,38 +357,88 @@
*/
void CalenMonthGrid::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
{
- int posDiff = mPressedPos.y() - event->pos().y();
- if (posDiff < -50) {
- mDirection = down;
- } else if (posDiff > 50){
- mDirection = up;
+ // Pass it grid view if pan gesture is not in progress else pass it to
+ // scrollarea. Problem here is, if we pass to gridview when panning, then
+ // its emitting item activated signal simply becasue of which focus item
+ // is getting changed when you finish the pan / shake
+ if (!mIsPanGesture) {
+ HbGridView::mouseReleaseEvent(event);
+ } else {
+ HbScrollArea::mouseReleaseEvent(event);
}
- // Pass it to parent
- HbGridView::mouseReleaseEvent(event);
}
/*!
- Listens for pan gesture
+ Function to list for all the gesture events
*/
-void CalenMonthGrid::panGesture(const QPointF & delta)
+void CalenMonthGrid::gestureEvent(QGestureEvent *event)
{
- setAttribute(Hb::InteractionDisabled);
- mIsAtomicScroll = false;
- if (!mIsPanGesture) {
- mIsPanGesture = true;
- mIgnoreItemActivated = true;
- mStartPos = mContentWidget->pos();
- // Get to know the direction of the gesture
- if (delta.y() > 0) {
- mDirection = down;
- } else {
- mDirection = up;
- }
- }
-
- // Call the parent class to perform the pan gesture
- // When scrolling finished, month grid will adjust to show the proper month
- HbScrollArea::panGesture(delta);
+ if(HbPanGesture *gesture = qobject_cast<HbPanGesture *>(event->gesture(Qt::PanGesture))) {
+ if (gesture->state() == Qt::GestureStarted) {
+ setAttribute(Hb::InteractionDisabled);
+ mIsAtomicScroll = false;
+ if (!mIsPanGesture) {
+ mDirection = invalid;
+ mStartPos = mContentWidget->pos();
+ // TODO: This work aroung till framework provides an api
+ // to know the direciton of the pan, until then we need
+ // calculate the direction explicitly
+ // Get to know the direction of the gesture
+ // Use our defined threshold temporarily till scrollarea
+ // frm orbit side is made clever enough not to scroll in other direction
+ // apart frm the registered scroll direction
+ QPointF delta = gesture->delta();
+ if (abs(delta.x()) > MAX_PAN_DIRECTION_THRESHOLD) {
+ // Now see if y coord diff has crossed threshold
+ if (delta.y() > MAX_PAN_DIRECTION_THRESHOLD) {
+ mIsPanGesture = true;
+ mIgnoreItemActivated = true;
+ mDirection = down;
+ } else if (delta.y() < -MAX_PAN_DIRECTION_THRESHOLD){
+ mIsPanGesture = true;
+ mIgnoreItemActivated = true;
+ mDirection = up;
+ } else {
+ event->accept(Qt::PanGesture);
+ return;
+ }
+ } else if (abs(delta.x()) < MAX_PAN_DIRECTION_THRESHOLD) {
+ if (delta.y() > MIN_PAN_DIRECTION_THRESHOLD) {
+ mIsPanGesture = true;
+ mIgnoreItemActivated = true;
+ mDirection = down;
+ } else if (delta.y() < -MIN_PAN_DIRECTION_THRESHOLD){
+ mIsPanGesture = true;
+ mIgnoreItemActivated = true;
+ mDirection = up;
+ }else {
+ event->accept(Qt::PanGesture);
+ return;
+ }
+ }
+ }
+ }
+ } else if(HbSwipeGesture *gesture = qobject_cast<HbSwipeGesture *>(event->gesture(Qt::SwipeGesture))) {
+ if (gesture->state() == Qt::GestureStarted) {
+ setAttribute(Hb::InteractionDisabled);
+ mIsAtomicScroll = false;
+ mDirection = invalid;
+ if (gesture->sceneVerticalDirection() == QSwipeGesture::Down) {
+ mDirection = down;
+ } else if (gesture->sceneVerticalDirection() == QSwipeGesture::Up) {
+ mDirection = up;
+ } else {
+ event->accept(Qt::SwipeGesture);
+ return;
+ }
+ }
+ }
+
+ if (mDirection!= invalid) {
+ // Call the parent class to perform the pan gesture
+ // When scrolling finished, month grid will adjust to show the proper month
+ HbScrollArea::gestureEvent(event);
+ }
}
/*!
@@ -374,7 +446,6 @@
*/
void CalenMonthGrid::scrollingFinished()
{
-
if (mIsPanGesture) {
handlePanGestureFinished();
} else if(!mIsAtomicScroll) {
@@ -393,6 +464,7 @@
mDirection = invalid;
} else {
mIsAtomicScroll = false;
+ mDirection = invalid;
}
mIgnoreItemActivated = false;
setAttribute(Hb::InteractionDisabled, false);
@@ -426,11 +498,12 @@
date.addDays(KNumOfVisibleRows*KCalenDaysInWeek).date().day() >=
(prevMonth.date().daysInMonth()) / 2) {
// up gesture to bring the next month
- upGesture(SCROLL_SPEEED);
+ upGesture();
} else {
// we should again show the current month by scrolling downwards
mDirection = down;
mIsAtomicScroll = true;
+ setAttribute(Hb::InteractionDisabled);
scrollContentsTo(-mStartPos,500);
}
} else if (month == prevMonth.date().month()) {
@@ -440,22 +513,32 @@
// we should again show the current month by scrolling upwards
mDirection = up;
mIsAtomicScroll = true;
+ setAttribute(Hb::InteractionDisabled);
scrollContentsTo(-mStartPos,500);
} else {
// down gesture to show the previous month
- downGesture(SCROLL_SPEEED);
+ downGesture();
}
+ } else if (month == prevMonth.addMonths(-1).date().month()) {
+ // first visible date belong to previous to previous month
+ // hence, scroll down to bring the previous month
+ downGesture();
} else if (month == nextMonth.date().month()) {
// first visible item belongs to next month
// Check if the date is more than half of the next month
if (date.date().day() > (nextMonth.date().daysInMonth()) / 2) {
// up gesture to bring the next month
- upGesture(SCROLL_SPEEED);
+ upGesture();
} else {
// we should again show the current month by scrolling upwards
mDirection = invalid;
+ setAttribute(Hb::InteractionDisabled);
scrollContentsTo(-mStartPos,500);
}
+ } else if (month == nextMonth.addMonths(1).date().month()) {
+ // first visible date belongs to next to next month
+ // hence, scroll up to show the next month
+ upGesture();
}
}
@@ -521,6 +604,9 @@
scrollTo(indexToBeScrolled);
// Update the mCurrentRow
mCurrentRow += countToBeAdded;
+
+ // Update the sart position of the content widget
+ mStartPos = mContentWidget->pos();
}
/*!
@@ -641,6 +727,9 @@
indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
mIsAtomicScroll = true;
scrollTo(indexToBeScrolled);
+
+ // Update the sart position of the content widget
+ mStartPos = mContentWidget->pos();
}
/*!
@@ -708,11 +797,15 @@
mIsNonActiveDayFocused = false;
// Check if the same item has been tapped twice
if (mCurrentRow == index.row()) {
- // Launch the agenda view
+ // Launch the Day view
mView->launchDayView();
} else {
// Reset the focus attribute to this item
QModelIndex itemIndex = mModel->index(mCurrentRow,0);
+ if(itemIndex.row() < 0 || itemIndex.row() >= mModel->rowCount() ||
+ itemIndex.column() < 0 || itemIndex.column() > mModel->columnCount()) {
+ return;
+ }
QVariant itemData = itemIndex.data(Qt::UserRole + 1);
QVariantList list = itemData.toList();
list.replace(CalendarNamespace::CalendarMonthFocusRole, false);
@@ -740,12 +833,12 @@
mNonActiveFocusedDay.date().month()) {
mDirection = up;
// up gesture
- upGesture(SCROLL_SPEEED);
+ upGesture();
setActiveDates(activeMonth.date());
} else {
mDirection = down;
// down gesture
- downGesture(SCROLL_SPEEED);
+ downGesture();
setActiveDates(activeMonth.addMonths(-2).date());
}
}
@@ -902,6 +995,29 @@
Q_UNUSED(newOrientation)
// We are overriding this function to avoid the default behavior of
// hbgridview on orientation change as it swaps the row and column counts
+ // Calculate the proper index to be scrolled to
+ int rowsInPrevMonth;
+ int itemToBeScrolled;
+ QModelIndex indexToBeScrolled;
+ if (newOrientation == Qt::Horizontal) {
+ rowsInPrevMonth = mView->rowsInPrevMonth();
+ itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
+ indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ mIsAtomicScroll = true;
+ scrollTo(indexToBeScrolled);
+ } else {
+ rowsInPrevMonth = mView->rowsInPrevMonth();
+ itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
+ indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ mIsAtomicScroll = true;
+ scrollTo(indexToBeScrolled);
+
+ itemToBeScrolled = ((rowsInPrevMonth + KNumOfVisibleRows) *
+ KCalenDaysInWeek) - 1;
+ indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ mIsAtomicScroll = true;
+ scrollTo(indexToBeScrolled);
+ }
}
/*!
@@ -917,14 +1033,19 @@
// Set the required attributes to the pen
QPen pen;
+ HbDeviceProfile deviceProf;
+ qreal unitValue = deviceProf.unitValue();
+ qreal widthInPixels = GRIDLINE_WIDTH * unitValue;
pen.setStyle(Qt::SolidLine);
- pen.setWidth(GRIDLINE_WIDTH);
+ pen.setWidth(widthInPixels);
if (mGridLineColor.isValid()) {
pen.setBrush(mGridLineColor);
} else {
pen.setBrush(mGridBorderColor);
}
- // Set the pen to the painter
+ //store the old pen first
+ QPen oldPen = painter->pen();
+ // Set the new pen to the painter
painter->setPen(pen);
// Get the sizes of content widget
@@ -980,6 +1101,8 @@
// Draw the lines for the points in the vector list
painter->drawLines(pointList);
+ // Set the old pen back
+ painter->setPen(oldPen);
}
// End of File
--- a/calendarui/views/src/calenmonthview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calenmonthview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -29,6 +29,8 @@
#include <hbcolorscheme.h>
#include <agendautil.h>
#include <agendaentry.h>
+#include <hbapplication.h> // hbapplication
+#include <hbactivitymanager.h> //Activity Manager
//user includes
#include "calenmonthview.h"
@@ -46,8 +48,9 @@
#include "calendocloader.h"
#include "calenthicklinesdrawer.h"
#include "calencommon.h"
-#include "CalendarInternalCRKeys.h"
+#include "calendarprivatecrkeys.h"
#include "calenpluginlabel.h"
+#include "calenconstants.h"
/*!
\class CalenMonthView
@@ -62,19 +65,20 @@
mGoToTodayAction(0),
mPrevRegionalInfo(0),
mCurrRegionalInfo(0),
- mNextRegionalInfo(0)
+ mNextRegionalInfo(0),
+ mIsAboutToQuitEventConnected(false)
{
mIsWeekNumbersShown = 0;
mOrientation = mServices.MainWindow().orientation();
// Read the date from the context
- mDate = mServices.Context().focusDateAndTimeL();
+ mDate = mServices.Context().focusDateAndTime();
mCurrentDay = mDate;
// Create the settings manager instance and settings key for week number
mSettingsManager = new XQSettingsManager(this);
mWeekNumberCenrepKey
= new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
- KCRUidCalendar.iUid, KCalendarWeekViewTitle);
+ KCRUidCalendar, KCalendarShowWeekNum);
mLocale = HbExtendedLocale::system();
mFirstWeekLabel = NULL;
@@ -102,7 +106,7 @@
mDocLoader->findWidget(CALEN_MONTH_TITLE));
// Set the title text color
QColor monthTitleColor = HbColorScheme::color("qtc_cal_monthgrid_title");
- if (monthTitleColor.isValid()) {
+ if (mTitleLabel && monthTitleColor.isValid()) {
mTitleLabel->setTextColor(monthTitleColor);
}
@@ -133,18 +137,6 @@
mSeventhDayLabel
= qobject_cast<HbLabel *> (
mDocLoader->findWidget(CALEN_MONTVIEW_SEVENTH_DAY_LABEL));
-
- // Set the short day names to these labels
- // TODO: Need to read start of the week from the locale
- // and update the labels accortdingly
- int startOfDay = mLocale.startOfWeek();
- mFirstDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_mo"));
- mSecondDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_tu"));
- mThirdDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_we"));
- mFourthDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_th"));
- mFifthDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_fr"));
- mSixthDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_sa"));
- mSeventhDayLabel->setPlainText(hbTrId("txt_calendar_grid_day_su"));
// Get the weeknumber widget
mWeekNumberWidget
@@ -214,7 +206,14 @@
mIsFirstTimeLoad = true;
-
+ // get a pointner to activity manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ // clean up any previous versions of this activity, if any, i.e. activityName, from the activity manager.
+ // Ignore return value, first boot would always return False. bool declared
+ // only for debugging purpose.
+ bool ok = activityManager->removeActivity(activityName);
+
}
/*!
@@ -322,7 +321,15 @@
= qobject_cast<HbLabel *> (
mDocLoader->findWidget(CALEN_MONTVIEW_SIXTH_WEEK_LABEL));
}
-
+
+ // Set the text colors well before instead of setting it again and again
+ mFirstWeekLabel->setTextColor(mWeekDaysColor);
+ mSecondWeekLabel->setTextColor(mWeekDaysColor);
+ mThirdWeekLabel->setTextColor(mWeekDaysColor);
+ mFourthWeekLabel->setTextColor(mWeekDaysColor);
+ mFifthWeekLabel->setTextColor(mWeekDaysColor);
+ mSixthWeekLabel->setTextColor(mWeekDaysColor);
+
// Calculate the week numbers and set them to the week labels
updateWeekNumGridModel();
@@ -411,107 +418,121 @@
{
// Set the background items for all the widgets
HbFrameItem* frame = NULL;
+ HbFrameDrawer *drawer = NULL;
HbWidget* monthViewExceptPreviewPane = qobject_cast<HbWidget *> (
mDocLoader->findWidget(CALEN_MONTHVIEW_EXCEPT_PANE));
if (monthViewExceptPreviewPane) {
+ drawer = new HbFrameDrawer("qtg_fr_cal_monthgrid_bg", HbFrameDrawer::NinePieces);
// The grid background
- frame = new HbFrameItem(this);
- frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-
- frame->frameDrawer().setFrameGraphicsName("qtg_fr_cal_monthgrid_bg");
+ frame = new HbFrameItem(drawer, this);
monthViewExceptPreviewPane->setBackgroundItem(frame->graphicsItem(), -2);
}
if (mTitleLabel) {
// The month title
- frame = new HbFrameItem(this);
- frame->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal);
-
- frame->frameDrawer().setFrameGraphicsName("qtg_fr_cal_monthgrid_title_bg");
- mTitleLabel->setBackgroundItem(frame->graphicsItem(), -2);
+ drawer = new HbFrameDrawer("qtg_fr_cal_monthgrid_title_bg", HbFrameDrawer::ThreePiecesHorizontal);
+ if (drawer)
+ frame = new HbFrameItem(drawer, this);
+ if(frame)
+ mTitleLabel->setBackgroundItem(frame->graphicsItem(), -2);
}
// Set the frame to the preview pane
- frame = new HbFrameItem(this);
- frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-
- frame->frameDrawer().setFrameGraphicsName("qtg_fr_cal_preview_bg");
- mPrevPaneLayoutWidget->setBackgroundItem(frame->graphicsItem(), -5);
+ drawer = new HbFrameDrawer("qtg_fr_cal_preview_bg", HbFrameDrawer::NinePieces);
+ if (drawer)
+ frame = new HbFrameItem(drawer, this);
+ if(frame)
+ mPrevPaneLayoutWidget->setBackgroundItem(frame->graphicsItem(), -5);
// Set the frame to the preview pane
- frame = new HbFrameItem(this);
- frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-
- frame->frameDrawer().setFrameGraphicsName("qtg_fr_cal_preview_bg");
+ drawer = new HbFrameDrawer("qtg_fr_cal_preview_bg", HbFrameDrawer::NinePieces);
+ if(drawer)
+ frame = new HbFrameItem(drawer, this);
+ if(frame)
mCurrPaneLayoutWidget->setBackgroundItem(frame->graphicsItem(), -5);
// Set the frame to the preview pane
- frame = new HbFrameItem(this);
- frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
-
- frame->frameDrawer().setFrameGraphicsName("qtg_fr_cal_preview_bg");
- mNextPaneLayoutWidget->setBackgroundItem(frame->graphicsItem(), -5);
+ drawer = new HbFrameDrawer("qtg_fr_cal_preview_bg", HbFrameDrawer::NinePieces);
+ if(drawer)
+ frame = new HbFrameItem(drawer, this);
+ if(frame)
+ mNextPaneLayoutWidget->setBackgroundItem(frame->graphicsItem(), -5);
}
void CalenMonthView::showHideRegionalInformation()
{
- XQSettingsKey regionalInfo(XQSettingsKey::TargetCentralRepository,
- KCRUidCalendar.iUid, KShowRegionalInformation);
-
- int showRegionalInfo = mSettingsManager->readItemValue(regionalInfo).toUInt();
- if (showRegionalInfo) {
-
- // Add the regional information to the preview panes
- if (!mPrevRegionalInfo) {
- mPrevRegionalInfo = new CalenPluginLabel(mServices, this);
- mPrevPaneLayout->insertItem(0, mPrevRegionalInfo);
+ if (pluginEnabled()) {
+ XQSettingsKey regionalInfo(XQSettingsKey::TargetCentralRepository,
+ KCRUidCalendar, KCalendarShowRegionalInfo);
+
+ int showRegionalInfo =
+ mSettingsManager->readItemValue(regionalInfo).toUInt();
+ if (showRegionalInfo) {
+
+ // Add the regional information to the preview panes
+ if (!mPrevRegionalInfo) {
+ mPrevRegionalInfo = qobject_cast<CalenPluginLabel *>
+ (mDocLoader->findWidget(CALEN_PREVREGIONALINFO));
+ mPrevRegionalInfo->show();
+ mPrevPaneLayout->insertItem(0, mPrevRegionalInfo);
- HbFrameItem *frameCurr = new HbFrameItem(this);
- frameCurr->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal);
- frameCurr->frameDrawer().setFrameGraphicsName("qtg_fr_cal_preview_title_bg");
- mPrevRegionalInfo->setBackgroundItem(frameCurr->graphicsItem(), -2);
- }
- if (!mCurrRegionalInfo) {
- mCurrRegionalInfo = new CalenPluginLabel(mServices, this);
- mCurrPaneLayout->insertItem(0, mCurrRegionalInfo);
-
- HbFrameItem *frameCurr = new HbFrameItem(this);
- frameCurr->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal);
- frameCurr->frameDrawer().setFrameGraphicsName("qtg_fr_cal_preview_title_bg");
- mCurrRegionalInfo->setBackgroundItem(frameCurr->graphicsItem(), -2);
- }
- if (!mNextRegionalInfo) {
- mNextRegionalInfo = new CalenPluginLabel(mServices, this);
- mNextPaneLayout->insertItem(0, mNextRegionalInfo);
+ HbFrameItem *frameCurr = new HbFrameItem(this);
+ frameCurr->frameDrawer().setFrameType(
+ HbFrameDrawer::ThreePiecesHorizontal);
+ frameCurr->frameDrawer().setFrameGraphicsName(
+ "qtg_fr_cal_preview_title_bg");
+ mPrevRegionalInfo->setBackgroundItem(
+ frameCurr->graphicsItem(), -2);
+ }
+ if (!mCurrRegionalInfo) {
+ mCurrRegionalInfo = qobject_cast<CalenPluginLabel *>
+ (mDocLoader->findWidget(CALEN_CURRREGIONALINFO));
+ mCurrRegionalInfo->show();
+ mCurrPaneLayout->insertItem(0, mCurrRegionalInfo);
- HbFrameItem *frameCurr = new HbFrameItem(this);
- frameCurr->frameDrawer().setFrameType(HbFrameDrawer::ThreePiecesHorizontal);
- frameCurr->frameDrawer().setFrameGraphicsName("qtg_fr_cal_preview_title_bg");
- mNextRegionalInfo->setBackgroundItem(frameCurr->graphicsItem(), -2);
- }
-
- if (pluginEnabled()) {
+ HbFrameItem *frameCurr = new HbFrameItem(this);
+ frameCurr->frameDrawer().setFrameType(
+ HbFrameDrawer::ThreePiecesHorizontal);
+ frameCurr->frameDrawer().setFrameGraphicsName(
+ "qtg_fr_cal_preview_title_bg");
+ mCurrRegionalInfo->setBackgroundItem(
+ frameCurr->graphicsItem(), -2);
+ }
+ if (!mNextRegionalInfo) {
+ mNextRegionalInfo = qobject_cast<CalenPluginLabel *>
+ (mDocLoader->findWidget(CALEN_NEXTREGIONALINFO));
+ mNextRegionalInfo->show();
+ mNextPaneLayout->insertItem(0, mNextRegionalInfo);
+
+ HbFrameItem *frameCurr = new HbFrameItem(this);
+ frameCurr->frameDrawer().setFrameType(
+ HbFrameDrawer::ThreePiecesHorizontal);
+ frameCurr->frameDrawer().setFrameGraphicsName(
+ "qtg_fr_cal_preview_title_bg");
+ mNextRegionalInfo->setBackgroundItem(
+ frameCurr->graphicsItem(), -2);
+ }
QString *pluginString = pluginText();
mPrevRegionalInfo->setPlainText(*pluginString);
mCurrRegionalInfo->setPlainText(*pluginString);
mNextRegionalInfo->setPlainText(*pluginString);
+ } else {
+ if (mPrevRegionalInfo) {
+ mPrevPaneLayout->removeItem(mPrevRegionalInfo);
+ mPrevRegionalInfo->hide();
+ mPrevRegionalInfo = NULL;
+ }
+ if (mCurrRegionalInfo) {
+ mPrevPaneLayout->removeItem(mCurrRegionalInfo);
+ mCurrRegionalInfo->hide();
+ mCurrRegionalInfo = NULL;
+ }
+ if (mNextRegionalInfo) {
+ mPrevPaneLayout->removeItem(mNextRegionalInfo);
+ mNextRegionalInfo->hide();
+ mNextRegionalInfo = NULL;
+ }
}
- } else {
- if (mPrevRegionalInfo) {
- mPrevPaneLayout->removeItem(mPrevRegionalInfo);
- delete mPrevRegionalInfo;
- mPrevRegionalInfo = NULL;
- }
- if (mCurrRegionalInfo) {
- mPrevPaneLayout->removeItem(mCurrRegionalInfo);
- delete mCurrRegionalInfo;
- mCurrRegionalInfo = NULL;
- }
- if (mNextRegionalInfo) {
- mPrevPaneLayout->removeItem(mNextRegionalInfo);
- delete mNextRegionalInfo;
- mNextRegionalInfo = NULL;
- }
- }
+ }
}
/*!
@@ -552,22 +573,16 @@
// Update the week labels text
QString text = QString::number(mWeekNumbers.at(0));
mFirstWeekLabel->setPlainText(text);
- mFirstWeekLabel->setTextColor(mWeekDaysColor);
text = QString::number(mWeekNumbers.at(1));
mSecondWeekLabel->setPlainText(text);
- mSecondWeekLabel->setTextColor(mWeekDaysColor);
text = QString::number(mWeekNumbers.at(2));
mThirdWeekLabel->setPlainText(text);
- mThirdWeekLabel->setTextColor(mWeekDaysColor);
text = QString::number(mWeekNumbers.at(3));
mFourthWeekLabel->setPlainText(text);
- mFourthWeekLabel->setTextColor(mWeekDaysColor);
text = QString::number(mWeekNumbers.at(4));
mFifthWeekLabel->setPlainText(text);
- mFifthWeekLabel->setTextColor(mWeekDaysColor);
text = QString::number(mWeekNumbers.at(5));
mSixthWeekLabel->setPlainText(text);
- mSixthWeekLabel->setTextColor(mWeekDaysColor);
}
/*!
@@ -576,24 +591,26 @@
void CalenMonthView::goToToday()
{
QDateTime today = CalenDateUtils::today();
+ // Set the context and repopulate the view
+ MCalenContext &context = mServices.Context();
+ context.setFocusDateAndTime(today);
+
// First check if we are not alread
// showing today's month view
if (mDate == today) {
return;
} else if (mActiveMonth.date().year() == today.date().year() &&
mActiveMonth.date().month() == today.date().month()) {
+ mDate = today;
// User is in current month only, so just set the focus to current
// date grid item and refresh the preview pane
int currIndex = mFirstDayOfGrid.daysTo(today);
setCurrGridIndex(currIndex);
- return;
+ // Populate the preview panes
+ populatePreviewPane(mDate);
+ } else {
+ refreshViewOnGoToDate();
}
-
- // Set the context and repopulate the view
- MCalenContext &context = mServices.Context();
- context.setFocusDateAndTimeL(today, KCalenMonthViewUidValue);
-
- refreshViewOnGoToDate();
}
/*
@@ -626,12 +643,14 @@
*/
void CalenMonthView::doPopulation()
{
- if (!mIsFirstTimeLoad) {
- Qt::Orientation orientation = mServices.MainWindow().orientation();
- if (mOrientation != orientation) {
- mOrientation = orientation;
- handleChangeOrientation();
- }
+
+ // Get the layout and add the preview pane layout.
+ QGraphicsLinearLayout* viewLayout = static_cast<QGraphicsLinearLayout *>
+ (widget()->layout());
+ if (viewLayout->count() == 1) {
+ // Count is 1 implies view has only month grid.
+ // Add the preview pane at corresponding position.
+ viewLayout->addItem(mCurrPaneParent);
}
// prepare for the population like reading the date frm the context
@@ -646,19 +665,33 @@
populatePreviewPane(mDate);
}
- // Create the grid items with proper dates
+
+ //update the day label
+ //if changes in locale setting
+ updateDayLabel();
+
+ // Create the grid items with proper dates
createGrid();
// Complete the population
completePopulation();
+ //set Currect Activity to month view
+ mActivityId = ECalenMonthView;
+
+ // connect to receive a call back on Month View exit. Call back would result in saveActivity
+ // to be called in Native View.
+ if (!mIsAboutToQuitEventConnected) // check if not already connected
+ {
+ connect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+ mIsAboutToQuitEventConnected = true;
+ }
+
+
// Population is complete, inform it
populationComplete();
- // Start the auto scroll on current preview pane
- mCurrPreviewPane->startAutoScroll();
-
// Handle regional data here if we are not populating the month view for
// the first time
if (!mIsFirstTimeLoad) {
@@ -683,9 +716,7 @@
*/
void CalenMonthView::refreshViewOnGoToDate()
{
- setActiveDay(dateFromContext(mServices.Context()));
- setDate();
- updateMonthDataArrayWithActiveDates();
+ prepareForPopulation();
setDateToLabel();
// fetch list of required calendar instances
populateWithInstanceView();
@@ -694,9 +725,10 @@
mMonthGrid->updateMonthGridModel(mMonthDataArray, mIndexToBeScrolled,
mIsFirstTimeLoad);
-
- // Start the auto scroll on current preview pane
- mCurrPreviewPane->startAutoScroll();
+ // Update the week Numbers model
+ if (mIsWeekNumbersShown) {
+ updateWeekNumGridModel();
+ }
}
/*!
@@ -707,13 +739,13 @@
QDateTime ret;
if (AgendaEntry::TypeTodo == context.instanceId().mType) {
QDateTime today = CalenDateUtils::today();
- if (context.focusDateAndTimeL() < today) {
+ if (context.focusDateAndTime() < today) {
ret = today;
} else {
- ret = context.focusDateAndTimeL();
+ ret = context.focusDateAndTime();
}
} else {
- ret = context.focusDateAndTimeL();
+ ret = context.focusDateAndTime();
}
return ret;
}
@@ -735,8 +767,6 @@
date.setDate(date.year(), date.month(), 1);
QDateTime firstDayOfPrevMonth(date, day.time());
- // TODO: Need to consider the week start frm the locale object
- TLocale locale;
int offset(firstDayOfPrevMonth.date().dayOfWeek() - (mLocale.startOfWeek()
+ 1));
if (offset < 0) {
@@ -833,10 +863,20 @@
// Update the month grid
mMonthGrid->updateMonthGridModel(mMonthDataArray, mIndexToBeScrolled,
mIsFirstTimeLoad);
-
- // Read the week number setting from cenrep
- QVariant value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
- mIsWeekNumbersShown = value.toUInt();
+ // Get start of week from the locale.
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ int startOfWeek = locale.startOfWeek();
+ if(startOfWeek != HbExtendedLocale::Monday)
+ {
+ //if the start of week is other than Monday, don't show the week number
+ mIsWeekNumbersShown = 0;
+ }
+ else
+ {
+ // Read the week number setting from cenrep
+ QVariant value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
+ mIsWeekNumbersShown = value.toUInt();
+ }
if (mIsWeekNumbersShown) {
// Add week numbers to week grid
addWeekNumbers();
@@ -933,7 +973,7 @@
date.setDate(date.year(), date.month(), 1);
// Get the first day of the future month
QDateTime firstDayOfFutMonth(date, futureMonthDateTime.time());
- TLocale locale;
+
int offset = firstDayOfFutMonth.date().dayOfWeek() - (mLocale.startOfWeek()
+ 1);
if (offset < 0) {
@@ -1030,7 +1070,8 @@
void CalenMonthView::updateMonthDataArrayWithActiveDates()
{
int activeMonth = mActiveMonth.date().month();
- for (int i = 0; i < mMonthDataArray.count(); i++) {
+ int monthDataCount = mMonthDataArray.count();
+ for (int i = 0; i < monthDataCount; i++) {
if (mMonthDataArray[i].Day().date().month() == activeMonth) {
// Set the active flag
mMonthDataArray[i].setActive(true);
@@ -1074,7 +1115,8 @@
getInstanceList(datesWithEvents,gridStart,gridEnd);
// Parse thru the list of dates and set the required flags
- for(int i(0); i < datesWithEvents.count(); i++) {
+ int datesEventsCount = datesWithEvents.count();
+ for(int i(0); i < datesEventsCount; i++) {
int offset = mFirstDayOfGrid.date().daysTo(datesWithEvents.at(i));
mMonthDataArray[offset].SetHasEvents(true);
}
@@ -1101,7 +1143,8 @@
getInstanceList(datesWithEvents,gridStart,gridEnd);
// Parse thru the list of dates and set the required flags
- for(int i(0); i < datesWithEvents.count(); i++) {
+ int datesEventsCount = datesWithEvents.count();
+ for(int i(0); i < datesEventsCount; i++) {
int offset = mFirstDayOfGrid.date().daysTo(datesWithEvents.at(i));
mMonthDataArray[offset].SetHasEvents(true);
}
@@ -1128,7 +1171,8 @@
getInstanceList(datesWithEvents,gridStart,gridEnd);
// Parse thru the list of dates and set the required flags
- for(int i(0); i < datesWithEvents.count(); i++) {
+ int datesEventsCount = datesWithEvents.count();
+ for(int i(0); i < datesEventsCount; i++) {
int offset = mFirstDayOfGrid.date().daysTo(datesWithEvents.at(i));
mMonthDataArray[offset].SetHasEvents(true);
}
@@ -1157,6 +1201,9 @@
mPrevPreviewPane->populateLabel(dateTime.addDays(-1));
mCurrPreviewPane->populateLabel(dateTime);
mNextPreviewPane->populateLabel(dateTime.addDays(1));
+
+ // Start the auto scroll on current preview pane
+ mCurrPreviewPane->startAutoScroll();
}
/*!
@@ -1183,14 +1230,12 @@
{
QDateTime newActiveDay = mFirstDayOfGrid.addDays(index);
// Set the context
- mServices.Context().setFocusDateL(newActiveDay, KCalenMonthViewUidValue);
+ mServices.Context().setFocusDate(newActiveDay);
mDate = newActiveDay;
setDateToLabel();
if(!mIsPrevPaneGesture) {
populatePreviewPane(mDate);
- // Start the auto scroll on current preview pane
- mCurrPreviewPane->startAutoScroll();
} else {
// reset flag
mIsPrevPaneGesture = false;
@@ -1207,11 +1252,18 @@
}
/*!
- Slot to launch the agenda view
+ Slot to launch the Day view
*/
void CalenMonthView::launchDayView()
{
mServices.IssueCommandL(ECalenDayView);
+ // day view launched now, disconnect to get the call backs for saveActivity
+ // on aboutToQuit signal
+ if (mIsAboutToQuitEventConnected)
+ {
+ disconnect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+ mIsAboutToQuitEventConnected = false;
+ }
}
/*!
@@ -1219,13 +1271,11 @@
*/
void CalenMonthView::changeOrientation(Qt::Orientation orientation)
{
- if (this == mServices.MainWindow().currentView()) {
if (mOrientation != orientation) {
// change the orientation here
mOrientation = orientation;
handleChangeOrientation();
}
- }
}
/*!
@@ -1251,16 +1301,11 @@
QGraphicsLinearLayout* viewLayout = static_cast<QGraphicsLinearLayout *>
(widget()->layout());
viewLayout->removeAt(1);
- viewLayout->addItem(mCurrPaneParent);
-
-
- // Check the weeknumber setting and update it accordingly
- if (mIsWeekNumbersShown) {
- // Add week numbers to week grid
- addWeekNumbers();
- } else {
- // remove the weeknumbergrid from the layout
- removeWeekNumbers();
+ // Add this item only when orientaion is changed on month view
+ // if it is changed in other views, adding the preview pane here was
+ // overlapping with the month grid, hence, its been added in dopopulation()
+ if (this == mServices.MainWindow().currentView()) {
+ viewLayout->addItem(mCurrPaneParent);
}
}
@@ -1430,4 +1475,43 @@
mCurrPreviewPane->startAutoScroll();
mPrevPreviewPane->populateLabel(mDate.addDays(-1));
}
+/*!
+ update the Day labels
+ */
+void CalenMonthView::updateDayLabel()
+{
+ // Set the short day names to these labels
+ int startOfWeek = mLocale.startOfWeek();
+ int weekDayIndex = startOfWeek;
+ QStringList weekDayArray ;
+ weekDayArray <<hbTrId("txt_calendar_grid_day_mo")
+ <<hbTrId("txt_calendar_grid_day_tu")
+ <<hbTrId("txt_calendar_grid_day_we")
+ <<hbTrId("txt_calendar_grid_day_th")
+ <<hbTrId("txt_calendar_grid_day_fr")
+ <<hbTrId("txt_calendar_grid_day_sa")
+ <<hbTrId("txt_calendar_grid_day_su");
+
+ QList<HbLabel*> labels;
+ // append seven day labels
+ labels.append(mFirstDayLabel);
+ labels.append(mSecondDayLabel);
+ labels.append(mThirdDayLabel);
+ labels.append(mFourthDayLabel);
+ labels.append(mFifthDayLabel);
+ labels.append(mSixthDayLabel);
+ labels.append(mSeventhDayLabel);
+ for(int i=0;i < KCalenDaysInWeek; i++ )
+ {
+ labels.at(i)->setPlainText(weekDayArray[weekDayIndex]);
+ if(weekDayIndex == KCalenDaysInWeek - 1 )//Sunday
+ {
+ weekDayIndex = 0;//reset to monday
+ continue;
+ }
+ weekDayIndex++;//increase the index for next value
+ }
+ labels.clear();
+ weekDayArray.clear();
+}
// End of file --Don't remove this.
--- a/calendarui/views/src/calennativeview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calennativeview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -24,6 +24,8 @@
#include <hbmainwindow.h>
#include <hbdatetimepicker.h>
#include <vwsdef.h>
+#include <hbactivitymanager.h> //Activity Manager
+#include <hbapplication.h> //hbapplication
//user includes
#include <CalenUid.h>
@@ -32,6 +34,7 @@
#include "calencontext.h"
#include "calensettingsview.h"
#include "calendateutils.h"
+#include "calenconstants.h"
/*!
\class CalenNativeView
@@ -42,12 +45,13 @@
Default constructor.
*/
CalenNativeView::CalenNativeView(MCalenServices &services) :
- mServices(services)
+ mServices(services), mIsCapturedScreenShotValid(false)
{
setTitle(hbTrId("txt_calendar_title_calendar"));
// Create services API and register for notifications
RArray<TCalenNotification> notificationArray;
+ CleanupClosePushL(notificationArray);
notificationArray.Append(ECalenNotifySystemTimeChanged);
notificationArray.Append(ECalenNotifySystemLocaleChanged);
@@ -55,7 +59,7 @@
mServices.RegisterForNotificationsL(this, notificationArray);
- notificationArray.Reset();
+ CleanupStack::PopAndDestroy(¬ificationArray);
}
/*!
@@ -102,17 +106,14 @@
popUp->setAttribute( Qt::WA_DeleteOnClose, true );
popUp->setHeadingWidget(new HbLabel(hbTrId("txt_calendar_opt_go_to_date")));
- // Get the current date.
- QDateTime currentDateTime = CalenDateUtils::today();
- QDate currentDate = currentDateTime.date();
if(mDatePicker) {
mDatePicker = NULL;
}
- mDatePicker = new HbDateTimePicker(currentDate, popUp);
+ mDatePicker = new HbDateTimePicker(QDate::currentDate(), popUp);
// Set the date range.
mDatePicker->setMinimumDate(CalenDateUtils::minTime().date());
mDatePicker->setMaximumDate(CalenDateUtils::maxTime().date());
- mDatePicker->setDate(currentDate);
+ mDatePicker->setDate(QDate::currentDate());
popUp->setContentWidget(mDatePicker);
HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
@@ -134,11 +135,11 @@
selectedDate >= CalenDateUtils::minTime().date() &&
selectedDate <= CalenDateUtils::maxTime().date()) {
MCalenContext& context = mServices.Context();
- QDateTime contextDate = context.focusDateAndTimeL();
+ QDateTime contextDate = context.focusDateAndTime();
//Set the selected date to contextDate.
contextDate.setDate(selectedDate);
- context.setFocusDateAndTimeL(contextDate, KCalenMonthViewUidValue);
+ context.setFocusDateAndTime(contextDate);
}
refreshViewOnGoToDate();
}
@@ -206,4 +207,49 @@
return mServices.InfobarTextL();
}
+// ----------------------------------------------------------------------------
+// captureScreenshot caltures screen shot for the given viewId
+// @param viewId view for which screenshot needs to be captured
+// ----------------------------------------------------------------------------
+//
+void CalenNativeView::captureScreenshot(bool captureScreenShot)
+ {
+ // get a screenshot for saving to the activity manager. It's done for once
+ // to optimize the performance
+ if (captureScreenShot) {
+ mScreenShotMetadata.clear(); // remove any screenshot captured earlier
+ mScreenShotMetadata.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+ mIsCapturedScreenShotValid = captureScreenShot; // set the validity of the screenshot captured
+ }
+
+// ----------------------------------------------------------------------------
+// saveActivity saves the activity for current view
+// ----------------------------------------------------------------------------
+//
+void CalenNativeView::saveActivity()
+ {
+ // Get a pointer to activity manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ // check if alerady a valid screen shot is captured
+ if (!mIsCapturedScreenShotValid) {
+ mScreenShotMetadata.clear(); // remove any screenshot captured earlier
+ mScreenShotMetadata.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+
+ // Save any data necessary to save the state
+ QByteArray serializedActivity;
+ QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+ stream << mActivityId;
+
+ bool ok(false);
+ // Save activity
+ ok = activityManager->addActivity(activityName, serializedActivity, mScreenShotMetadata);
+
+ // Check is activity saved sucessfully
+ if ( !ok ) {
+ qFatal("Add failed" ); // Panic is activity is not saved successfully
+ }
+ }
//End Of File
--- a/calendarui/views/src/calenpluginlabel.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calenpluginlabel.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -16,6 +16,7 @@
*/
// System includes
+#include <hbtapgesture.h>
// User includes
#include "calenservices.h"
@@ -29,31 +30,37 @@
/*!
constructor
*/
-CalenPluginLabel::CalenPluginLabel(MCalenServices& services,
+Q_DECL_EXPORT CalenPluginLabel::CalenPluginLabel(MCalenServices& services,
QGraphicsItem* parent) :
HbLabel(parent),mServices(services)
{
setAlignment(Qt::AlignCenter);
- setFontSpec(HbFontSpec(HbFontSpec::Secondary));
- setPlainText("Reg plugin");
+ grabGesture(Qt::TapGesture);
}
/*!
Destructor
*/
-CalenPluginLabel::~CalenPluginLabel()
+Q_DECL_EXPORT CalenPluginLabel::~CalenPluginLabel()
{
}
+
/*!
- To handle mouse press event.
- \sa QGraphicsItem
- */
-void CalenPluginLabel::mousePressEvent(QGraphicsSceneMouseEvent* event)
+ Functo listen for all gestures
+*/
+void CalenPluginLabel::gestureEvent(QGestureEvent *event)
{
- Q_UNUSED(event);
-
- mServices.IssueCommandL(ECalenRegionalPluginTapEvent);
+ if(HbTapGesture *gesture = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture))) {
+ if (gesture->state() == Qt::GestureFinished) {
+ if (gesture->tapStyleHint() == HbTapGesture::Tap) {
+ // Regional label is tapped
+ mServices.IssueCommandL(ECalenRegionalPluginTapEvent);
+ event->accept(Qt::TapGesture);
+ }
+ }
+ }
}
+
// End of file --Don't remove this.
--- a/calendarui/views/src/calenpreviewpane.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calenpreviewpane.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -27,6 +27,8 @@
#include <hbframedrawer.h>
#include <hbfontspec.h>
#include <hbcolorscheme.h>
+#include <hbtapgesture.h>
+#include <hbpangesture.h>
#include <agendautil.h>
#include <agendaentry.h>
@@ -42,7 +44,9 @@
// Macros
#define TWO_SECONDS_TIMER 2000 // millseconds
-#define SCROLLING_SPEED 50
+#define SCROLLING_SPEED 10
+#define MAX_PAN_DIRECTION_THRESHOLD 50
+#define MIN_PAN_DIRECTION_THRESHOLD 20
static const QString EMPTYSTRING(" ");
@@ -59,6 +63,8 @@
mIsNoEntriesAdded = true;
mIsGestureHandled = false;
mNoEntriesLabel = 0;
+ mHtDiff = 0.0;
+ mScrollDuration = 0;
setAcceptDrops(true);
setScrollDirections(Qt::Vertical);
setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
@@ -101,7 +107,7 @@
GetInstanceListL();
// Get the content of the scroll area
- QGraphicsWidget* content = this->contentWidget();
+ QGraphicsWidget* content = contentWidget();
// Adjust the layout
QGraphicsLinearLayout* layout = static_cast<QGraphicsLinearLayout *>
(content->layout());
@@ -154,11 +160,16 @@
// No summary display "No subject"
summary.append(hbTrId("txt_calendar_dblist_unnamed"));
}
- QDateTime startTime = mInstanceArray[i].startTime();
- HbExtendedLocale systemLocale =HbExtendedLocale::system();
- QString start = systemLocale.format(startTime.time(),
- r_qtn_time_usual_with_zero);
- start.append(EMPTYSTRING);
+ // Chcek the entry type, based on the type display time field in
+ // preview pane.
+ QString start;
+ if(mInstanceArray[i].type() != AgendaEntry::TypeTodo ) {
+ QDateTime startTime = mInstanceArray[i].startTime();
+ HbExtendedLocale systemLocale =HbExtendedLocale::system();
+ start = systemLocale.format(startTime.time(),
+ r_qtn_time_usual_with_zero);
+ start.append(EMPTYSTRING);
+ }
// Append summary to start time
QString text = start.append(summary);
label->setPlainText(text);
@@ -238,9 +249,6 @@
{
if (mIsNoEntriesAdded) {
scrollContentsTo(QPointF(0.0,0.0));
-
- // Call pan gesture with zero delta just to stop the scfrolling
- HbScrollArea::panGesture(QPointF(0.0,0.0));
return;
}
@@ -259,17 +267,30 @@
mTwoSecTimer->stop();
disconnect(mTwoSecTimer, SIGNAL(timeout()),
this, SLOT(onTwoSecondsTimeout()));
- // Start the scrolling in the proper direction
+
+ // Calculate the timer and the height difference of pane and its content
+ if (!mScrollDuration) {
+ qreal contentHeight = contentWidget()->size().height();
+ qreal paneHeight = size().height();
+ mHtDiff = contentHeight - paneHeight;
+ if (mHtDiff > 0) { // content is more than widget height, we need to scroll
+ mScrollDuration = mHtDiff / SCROLLING_SPEED;
+ }
+ }
+
+ // Start the scrolling in the proper direction
if (mScrollDirection == up) {
// Start scrolling upwards
mScrollDirection = down;
mNumOfScrolls++;
- upGesture(SCROLLING_SPEED);
+ QPointF targetPos(0.0, -mHtDiff);
+ scrollContentsTo(-targetPos, mScrollDuration * 1000);
} else if (mScrollDirection == down) {
mScrollDirection = up;
mNumOfScrolls++;
// Start scrolling downwards
- downGesture(SCROLLING_SPEED);
+ QPointF targetPos(0.0, 0.0);
+ scrollContentsTo(targetPos, mScrollDuration * 1000);
}
}
@@ -290,44 +311,59 @@
}
/*!
- Function to listen mouse press events
+ Function to listen for all gestures
*/
-void CalenPreviewPane::mousePressEvent(QGraphicsSceneMouseEvent* event)
-{
- mIsGestureHandled = false;
- mPressedPos = event->pos();
- event->accept();
-}
-
-/*!
- Function to listen mouse release events
- */
-void CalenPreviewPane::mouseReleaseEvent(QGraphicsSceneMouseEvent* event)
+void CalenPreviewPane::gestureEvent(QGestureEvent *event)
{
- qreal posDiff = mPressedPos.x()-event->pos().x();
- if (abs(posDiff) < 50 && !mIsGestureHandled) {
- // Preview pane tapped
- mServices.IssueCommandL(ECalenDayView);
- }
- event->accept();
-}
-
-/*!
- Function to listen mouse move events
- */
-void CalenPreviewPane::mouseMoveEvent(QGraphicsSceneMouseEvent* event)
-{
- qreal posDiff = mPressedPos.x()-event->pos().x();
- if (posDiff < -50) {
- mIsGestureHandled = true;
- // right gesture
- mView->handlePreviewPaneGesture(true);
- } else if (posDiff > 50) {
- mIsGestureHandled = true;
- // left gesture
- mView->handlePreviewPaneGesture(false);
- }
- event->accept();
+ if(HbPanGesture *gesture = qobject_cast<HbPanGesture *>(event->gesture(Qt::PanGesture))) {
+ if (gesture->state() == Qt::GestureStarted) {
+ // TODO: This work aroung till framework provides an api
+ // to know the direciton of the pan, until then we need
+ // calculate the direction explicitly
+ // Get to know the direction of the gesture
+ QPointF delta = gesture->delta();
+ if (abs(delta.y()) > MAX_PAN_DIRECTION_THRESHOLD) {
+ // Now see if y coord diff has crossed threshold
+ if (delta.x() > MAX_PAN_DIRECTION_THRESHOLD) {
+ mIsGestureHandled = true;
+ // right gesture
+ mView->handlePreviewPaneGesture(true);
+ event->accept(Qt::PanGesture);
+ } else if (delta.x() < -MAX_PAN_DIRECTION_THRESHOLD){
+ mIsGestureHandled = true;
+ // left gesture
+ mView->handlePreviewPaneGesture(false);
+ event->accept(Qt::PanGesture);
+ } else {
+ event->accept(Qt::PanGesture);
+ return;
+ }
+ } else if (abs(delta.y()) < MAX_PAN_DIRECTION_THRESHOLD) {
+ if (delta.x() > MIN_PAN_DIRECTION_THRESHOLD) {
+ mIsGestureHandled = true;
+ // right gesture
+ mView->handlePreviewPaneGesture(true);
+ event->accept(Qt::PanGesture);
+ } else if (delta.x() < -MIN_PAN_DIRECTION_THRESHOLD){
+ mIsGestureHandled = true;
+ // left gesture
+ mView->handlePreviewPaneGesture(false);
+ event->accept(Qt::PanGesture);
+ }else {
+ event->accept(Qt::PanGesture);
+ return;
+ }
+ }
+ }
+ } else if(HbTapGesture *gesture = qobject_cast<HbTapGesture *>(event->gesture(Qt::TapGesture))) {
+ if (gesture->state() == Qt::GestureFinished) {
+ if (gesture->tapStyleHint() == HbTapGesture::Tap) {
+ // Preview pane tapped
+ mServices.IssueCommandL(ECalenAgendaView);
+ event->accept(Qt::TapGesture);
+ }
+ }
+ }
}
/*!
--- a/calendarui/views/src/calensettingsview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calensettingsview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -31,7 +31,11 @@
#include "calensettings.h"
CalenSettingsView::CalenSettingsView(MCalenServices& services, QGraphicsItem *parent)
-:HbView(parent), mServices(services)
+:HbView(parent),
+ mServices(services),
+ mCalenSettingsForm(NULL),
+ mCalenSettings(NULL),
+ mSoftKeyAction(NULL)
{
mCalenSettingsForm = new HbDataForm(this);
@@ -40,17 +44,26 @@
setTitle(hbTrId("txt_calendar_title_calendar"));
// Construct the settings utility.
- mCalenSettings = new CalenSettings(mCalenSettingsForm);
- mCalenSettings->createModel();
-
-
- setWidget(mCalenSettingsForm);
+ if(mCalenSettingsForm)
+ {
+ mCalenSettings = new CalenSettings(mServices, mCalenSettingsForm);
+ if(mCalenSettings)
+ {
+ mCalenSettings->createModel();
+ setWidget(mCalenSettingsForm);
+ }
+ }
}
CalenSettingsView::~CalenSettingsView()
{
- // Nothing yet.
+ if (mCalenSettings) {
+ delete mCalenSettings;
+ }
+ if (mSoftKeyAction) {
+ delete mSoftKeyAction;
+ }
}
void CalenSettingsView::launchPreviousView()
@@ -61,30 +74,27 @@
this, SLOT(launchPreviousView()));
mServices.MainWindow().removeView(this);
mServices.IssueNotificationL(ECalenNotifySettingsClosed);
-
- //TODO :: For ART3 we are launching agenda view later we have to use week view
- // GEt the current orientation
- /* Qt::Orientation orientation = mServices.MainWindow().orientation();
- if(orientation == Qt::Vertical)
- {
- mServices.IssueCommandL(ECalenDayView);
- }
- else if(orientation == Qt::Horizontal)
- {
- mServices.IssueCommandL(ECalenLandscapeDayView);
- }*/
}
void CalenSettingsView::initializeForm()
- {
+{
mCalenSettings->populateSettingList();
// Add view on main window and set back softkey
mServices.MainWindow().addView(this);
mSoftKeyAction = new HbAction(Hb::BackNaviAction);
- setNavigationAction(mSoftKeyAction);
- connect(mSoftKeyAction, SIGNAL(triggered()),
+ if(mSoftKeyAction)
+ {
+ setNavigationAction(mSoftKeyAction);
+ connect(mSoftKeyAction, SIGNAL(triggered()),
this, SLOT(launchPreviousView()));
+ }
+}
+
+void CalenSettingsView::refreshView()
+ {
+ //populate the new items
+ mCalenSettings->populateSettingList();
}
// End of file
--- a/calendarui/views/src/calenthicklinesdrawer.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/src/calenthicklinesdrawer.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -20,6 +20,7 @@
#include <QPainter>
#include <QPen>
#include <hbdeviceprofile.h>
+#include <hbcolorscheme.h>
// User includes
#include "calenthicklinesdrawer.h"
@@ -39,10 +40,11 @@
*/
CalenThickLinesDrawer::CalenThickLinesDrawer( CalendarNamespace::WidgetType type,
QGraphicsItem* parent):
- HbWidget(parent),
- mGridBorderColor(Qt::black)
+ HbWidget(parent)
{
typeOfWidget = type;
+ mGridBorderColor = HbColorScheme::color("qtc_cal_grid_line");
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
}
/*!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calentodayindicatorlinedrawer.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,80 @@
+/*
+* Copyright (c) 2009 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: CalenTodayIndicatorLineDrawer implementation.
+*
+*/
+
+// System includes
+#include <QtGui>
+#include <QPainter>
+#include <QPen>
+#include <hbcolorscheme.h>
+#include <hbtheme.h>
+
+// User includes
+#include "CalenTodayIndicatorLineDrawer.h"
+
+/*!
+ \class CalenTodayIndicatorLineDrawer.
+
+ Class to draw the today indicator line.
+ */
+
+/*!
+ Constructor.
+ */
+CalenTodayIndicatorLineDrawer::CalenTodayIndicatorLineDrawer(
+ QGraphicsItem* parent): HbWidgetBase(parent)
+{
+ connect(
+ HbTheme::instance(), SIGNAL(changed()),
+ this, SLOT(handleThemeChange()));
+ setFlag(QGraphicsItem::ItemHasNoContents, false);
+}
+
+/*!
+ Destructor.
+ */
+CalenTodayIndicatorLineDrawer::~CalenTodayIndicatorLineDrawer()
+{
+
+}
+
+/*!
+ To paint the today indicator line.
+ */
+void CalenTodayIndicatorLineDrawer::paint(
+ QPainter* painter, const QStyleOptionGraphicsItem* option,
+ QWidget* widget)
+{
+ Q_UNUSED(option);
+ Q_UNUSED(widget);
+ QPen pen;
+ pen.setStyle(Qt::SolidLine);
+ pen.setBrush(HbColorScheme::color("qtc_cal_month_current_day"));
+ painter->setPen(pen);
+ QRectF controlRect = this->boundingRect();
+ painter->fillRect(
+ controlRect, HbColorScheme::color("qtc_cal_month_current_day"));
+}
+
+/*!
+ To handle the theme change for the today indicator line.
+ */
+void CalenTodayIndicatorLineDrawer::handleThemeChange()
+{
+ update();
+}
+
+// End of file --Don't remove this.
--- a/calendarui/views/views.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/calendarui/views/views.pro Thu Jul 22 16:32:51 2010 +0100
@@ -37,8 +37,8 @@
-lcalencommonutils \
-lcalensettings \
-lagendainterface \
- -lxqsettingsmanager \
- -lnoteseditor
+ -lxqsettingsmanager
+
TARGET.UID3 = 0x10282F26
TARGET.CAPABILITY = CAP_GENERAL_DLL
@@ -52,28 +52,32 @@
calenmonthgrid.h \
calengriditemprototype.h \
calennativeview.h \
- calendayview.h \
+ calenagendaview.h \
caleneventlistviewitem.h \
- calendayviewwidget.h \
+ calenagendaviewwidget.h \
calenpreviewpane.h \
calensettingsview.h \
calenthicklinesdrawer.h \
- calenpluginlabel.h
+ calenpluginlabel.h \
+ calentodayindicatorlinedrawer.h
SOURCES += calenmonthview.cpp \
calenmonthdata.cpp \
calenmonthgrid.cpp \
calengriditemprototype.cpp \
calennativeview.cpp \
- calendayview.cpp \
+ calenagendaview.cpp \
caleneventlistviewitem.cpp \
- calendayviewwidget.cpp \
+ calenagendaviewwidget.cpp \
calenpreviewpane.cpp \
calensettingsview.cpp \
calenthicklinesdrawer.cpp \
- calenpluginlabel.cpp
+ calenpluginlabel.cpp \
+ calentodayindicatorlinedrawer.cpp
RESOURCES += calenresources.qrc
+include(dayview/dayview.pri)
+
# End of file --Don't remove this.
--- a/clock/clock.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clock.pro Thu Jul 22 16:32:51 2010 +0100
@@ -19,8 +19,7 @@
SUBDIRS += \
clockengines \
clockmw \
- clockui \
- ftudatetimewizard
+ clockui
CONFIG += ordered
@@ -28,12 +27,14 @@
BLD_INF_RULES.prj_exports += \
"./rom/clock.iby CORE_APP_LAYER_IBY_EXPORT_PATH(clock.iby)" \
"./rom/clockengines.iby CORE_APP_LAYER_IBY_EXPORT_PATH(clockengines.iby)" \
- "./rom/ftudatetimewizard.iby CORE_APP_LAYER_IBY_EXPORT_PATH(ftudatetimewizard.iby)" \
"./rom/clockresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(clockresources.iby)" \
\
"./conf/clockapp.confml APP_LAYER_CONFML(clockapp.confml)" \
+ "./conf/CI_clockapp.confml APP_LAYER_CONFML(CI_clockapp.confml)" \
"./conf/clockapp_101F874D.crml APP_LAYER_CRML(clockapp_101F874D.crml)" \
"./conf/clockapp_101F8876.crml APP_LAYER_CRML(clockapp_101F8876.crml)" \
+ # stubsis is added to provide IAD
+ "./stubsis/clock_stub.sis /epoc32/data/z/system/install/clock_stub.sis"
}
# End of file --Don't remove this.
--- a/clock/clockengines/clockserver/server/inc/clockprivatecrkeys.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-/*
-* Copyright (c) 2009 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: The file contains the uid of keys used by cenrep sheet
-*
-*/
-
-#ifndef __CLOCKPRIVATECRKEYS_H__
-#define __CLOCKPRIVATECRKEYS_H__
-
-/** Nitz Settings API */
-/** Provides access to the Nitz status.*/
-const TUid KCRUidNitz = { 0x101F8876 };
-
-/** Nitz state key */
-const TUint32 KNitzState = 0x00000000;
-
-/** Active Protocol key */
-const TUint32 KActiveProtocol = 0x00000001;
-
-/** Previous alarm time high */
-const TUint32 KPreviousAlarmTime = 0x00000002;
-
-/** CountDownTimer alert file */
-const TUint32 KCountDownSoundFile = 0x00000003;
-
-/** Valid Nitz Info key */
-const TUint32 KValidNitz = 0x00000004;
-
-/** FTU date time plugin edited date */
-const TUint32 KFtuPluginDate = 0x00000005;
-#endif // __CLOCKPRIVATECRKEYS_H__
-
-// End of file
-
--- a/clock/clockengines/clockserver/server/src/clockserver.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockengines/clockserver/server/src/clockserver.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -216,7 +216,7 @@
CRepository* cenRep( NULL );
// Open the repository.
- TRAPD( errVal, cenRep = CRepository::NewL( KCRUidNitz ) );
+ TRAPD( errVal, cenRep = CRepository::NewL( TUid::Uid(KCRUidNitz ) ) );
if( KErrNone == errVal )
{
// Read the key.
@@ -248,7 +248,7 @@
CRepository* cenRep( NULL );
// Open the repository.
- TRAPD( errVal, cenRep = CRepository::NewL( KCRUidNitz ) );
+ TRAPD( errVal, cenRep = CRepository::NewL( TUid::Uid(KCRUidNitz ) ) );
if( KErrNone == errVal )
{
// Update the key.
--- a/clock/clockengines/clockserver/server/src/clockserverimpl.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockengines/clockserver/server/src/clockserverimpl.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -31,13 +31,11 @@
#include "clockservermccobserver.h"
#include "clockecomlistener.h"
#include "clock_debug.h"
-#include "clockprivatecrkeys.h"
// Constants
const TInt KZeroIndex( 0 );
const TInt KSingleZone( 1 );
const TInt KSinglePlugin( 1 );
-const TInt KSetValidNitz( 1 );
const TUid KTimeSourceInterfaceUID = { 0x200159A7 };
const TInt KNitzPlugin( 0x200159A5 );
@@ -508,6 +506,11 @@
}
}
+ // Initialise the attributes to null.
+ TTime invalidTime( 0 );
+ iTimeAttributes->iDstOffset = TTimeIntervalMinutes( 0 );
+ iTimeAttributes->iTimeZoneOffset = TTimeIntervalMinutes( 0 );
+ iTimeAttributes->iUtcDateTime = invalidTime.DateTime();
// Get all the information related to the plugin.
// The UTC time.
TRAP_IGNORE( aPluginImpl.GetTimeInformationL( EUTCTime, iTimeAttributes ) );
@@ -519,29 +522,14 @@
// Set a flag saying we have plugin data.
iPluginData = ETrue;
- // Get the first boot status from cenrep. If it is the first boot, clockserver will not update the time.
- TBool staleBoot( EFalse );
-
- CRepository* cenRep( NULL );
-
- TRAPD( errorVal, cenRep = CRepository::NewL( KCRUidStartup ) );
-
- if( errorVal == KErrNone )
- {
- errorVal = cenRep->Get( KStartupFirstBoot, staleBoot );
- }
-
- // Cleanup.
- delete cenRep;
- cenRep = NULL;
-
if( iMccReceived )
{
__PRINTS( "We have already recieved the MCC" );
// Try to resolve the timezone id with the data that we have recieved.
TInt timezoneId;
- TRAP_IGNORE( TInt errorVal = iTzResolver->GetTimeZoneL( *iTimeAttributes, iMcc, timezoneId ) );
+ TInt errorVal = 0;
+ TRAP_IGNORE( errorVal = iTzResolver->GetTimeZoneL( *iTimeAttributes, iMcc, timezoneId ) );
__PRINT( "CClkSrvImpl::NotifyTimeChangeL - timeZoneId: %d", timezoneId );
@@ -564,23 +552,6 @@
if( KInvalidTimeZoneId != timezoneId )
{
// A valid new zone was found successfully
-
- // Update the key for ValidNitz for the first boot
- if(!staleBoot)
- {
- TInt validNitz( KSetValidNitz );
- CRepository* cenRep( NULL );
-
- TRAPD( errorVal, cenRep = CRepository::NewL( KCRUidNitz ) );
- if( errorVal == KErrNone )
- {
- errorVal = cenRep->Set( KValidNitz, validNitz );
- }
- // Cleanup.
- delete cenRep;
- cenRep = NULL;
- }
-
CTzId* newTzId = CTzId::NewL( timezoneId );
CleanupStack::PushL( newTzId );
@@ -592,12 +563,9 @@
{
// The new zone is different than the current one
// GOAL 3: Set the DST zone of the device
- //if( staleBoot )
- //{
- __PRINTS( "Not the first boot and the timezone ID is different. Setting the zone." );
+ __PRINTS( "Timezone ID is different. Setting the zone." );
- TRAP_IGNORE( tz.SetTimeZoneL( *newTzId ) );
- // }
+ TRAP_IGNORE( tz.SetTimeZoneL( *newTzId ) );
}
CleanupStack::PopAndDestroy( newTzId );
@@ -612,12 +580,9 @@
// Set the UTC time only. This is being done because with the UTC time,
// before the time is being set, the dst properties for the timezone are being checked.
// If its not the first boot, then set the time.
- //if( staleBoot )
- // {
- __PRINTS( "Not the first boot. Setting the UTC time." );
+ __PRINTS( "Setting the UTC time." );
- TRAP_IGNORE( User::SetUTCTime( nwUtcTime ) );
- // }
+ TRAP_IGNORE( User::SetUTCTime( nwUtcTime ) );
}
// Reset the flags.
@@ -633,8 +598,9 @@
// Try to resolve the timezone id with the data that we have recieved.
TInt timezoneId;
+ TInt errorVal = 0;
const TBuf< 4 > invalidMCC( KInvalidMCC );
- TRAP_IGNORE( TInt errorVal = iTzResolver->GetTimeZoneL( *iTimeAttributes, invalidMCC, timezoneId ) );
+ TRAP_IGNORE( errorVal = iTzResolver->GetTimeZoneL( *iTimeAttributes, invalidMCC, timezoneId ) );
if( KErrNone == errorVal )
{
@@ -649,23 +615,6 @@
if( KInvalidTimeZoneId != timezoneId )
{
// A valid new zone was found successfully
-
- // Update the key for ValidNitz for the first boot
- if(!staleBoot)
- {
- TInt validNitz( KSetValidNitz );
- CRepository* cenRep( NULL );
-
- TRAPD( errorVal, cenRep = CRepository::NewL( KCRUidNitz ) );
- if( errorVal == KErrNone )
- {
- errorVal = cenRep->Set( KValidNitz, validNitz );
- }
- // Cleanup.
- delete cenRep;
- cenRep = NULL;
- }
-
CTzId* newTzId = CTzId::NewL( timezoneId );
CleanupStack::PushL( newTzId );
@@ -674,12 +623,9 @@
// The new zone is different than the current one
// GOAL 3: Set the DST zone of the device
// If firstboot then don't set the time.
- //if( staleBoot )
- // {
- __PRINTS( "Not the first boot and the timezone ID is different. Setting the zone." );
+ __PRINTS( "The timezone ID is different. Setting the zone." );
- TRAP_IGNORE( tz.SetTimeZoneL( *newTzId ) );
- // }
+ TRAP_IGNORE( tz.SetTimeZoneL( *newTzId ) );
}
CleanupStack::PopAndDestroy( newTzId );
}
@@ -693,12 +639,9 @@
// Set the UTC time only. This is being done because with the UTC time,
// before the time is being set, the dst properties for the timezone are being checked.
// Set the time only if its not the first boot.
- //if( staleBoot )
- // {
- __PRINTS( "Not the first boot. Setting the UTC time." );
+ __PRINTS( "Setting the UTC time." );
- TRAP_IGNORE( User::SetUTCTime( nwUtcTime ) );
- // }
+ TRAP_IGNORE( User::SetUTCTime( nwUtcTime ) );
}
}
__PRINTS( "Notifying the timechange to client" );
@@ -733,26 +676,50 @@
// Lets see if we can narrow down to a single timezone with the MCC recieved.
RArray< CTzId > tzIdArray;
- // Try and fetch the timezone ID using the MCC recieved.
- TRAP_IGNORE( iTzResolver->TzIdFromMccL( iMcc, tzIdArray, KInvalidTimeZoneId ) );
+ // This parte of code introduced due to error ID EASH-82DPPC(3G Tests for NITZ and GPRS Interaction)
+ // Fix is bascially to narrowing down to single timezone id if NITZ packet is received prior to MCC.
+ // In first IF state we are trying to narrowdown to single timezone ID, if not possible try to use MCC to get timezone
+ // In second IF , we are using MCC to narrow down to single timezone ID directly as dont have NITZ info.
+ if( iTimeAttributes )
+ {
+ __PRINTS("timeatrrtibutes has value");
- // Code to check if its the first boot.
- // Get the first boot status from cenrep. If it is the first boot, clockserver will not update the time.
- TBool staleBoot( EFalse );
-
- CRepository* cenRep( NULL );
+ TTime invalidTime(0);
+ if( iTimeAttributes->iDstOffset != TTimeIntervalMinutes( 0 ) &&
+ iTimeAttributes->iTimeZoneOffset != TTimeIntervalMinutes( 0 ) &&
+ iTimeAttributes->iUtcDateTime.Year() != invalidTime.DateTime().Year() )
+ {
+ // Try to resolve the timezone id with the data that we have recieved.
+ TInt timezoneId;
+ TRAP_IGNORE( TInt errorVal = iTzResolver->GetTimeZoneL( *iTimeAttributes, iMcc, timezoneId ) );
+
+ __PRINT("TIMEZONE ID %d", timezoneId );
+
+ // Append the timezone id to array.
- TRAPD( errorVal, cenRep = CRepository::NewL( KCRUidStartup ) );
-
- if( errorVal == KErrNone )
- {
- errorVal = cenRep->Get( KStartupFirstBoot, staleBoot );
+ CTzId* matchingDSTZoneId = CTzId::NewL( timezoneId );
+ CleanupStack::PushL( matchingDSTZoneId );
+
+ tzIdArray.AppendL( *matchingDSTZoneId );
+
+ CleanupStack::PopAndDestroy( matchingDSTZoneId );
+
+ matchingDSTZoneId = NULL;
}
+ else
+ {
+ __PRINTS("NOT ABLE TO NARROW DOWN TO TIMEZONE ID WITH RECEIVED NITZ HENCE TRY WITH MCC");
+ // Not able to narrow down to single timezone id with received NITZ packet hence try with MCC.
+ TRAP_IGNORE( iTzResolver->TzIdFromMccL( iMcc, tzIdArray, KInvalidTimeZoneId ) );
+ }
+ }
+ else
+ {
+ __PRINTS("NO NITZ INFO HENCE TRY WITH MCC");
+ // No NITZ info hecne try with MCC to get the time zone Id.
+ TRAP_IGNORE( iTzResolver->TzIdFromMccL( iMcc, tzIdArray, KInvalidTimeZoneId ) );
+ }
- // Cleanup
- delete cenRep;
- cenRep = NULL;
-
// A single matching timezone was found. Set it as the default one.
if( KSingleZone == tzIdArray.Count() )
{
@@ -780,18 +747,41 @@
// The new zone is different than the current one
// Set the DST zone of the device
// Set the zone only for subsequent boots.
- if( staleBoot )
- {
- __PRINTS( "Not the first boot and the timezone ID is different. Setting the zone." );
+ __PRINTS( "The timezone ID is different. Setting the zone." );
- TRAP_IGNORE( tz.SetTimeZoneL( *newTzId ) );
- }
+ TRAP_IGNORE( tz.SetTimeZoneL( *newTzId ) );
}
CleanupStack::PopAndDestroy( newTzId );
}
CleanupStack::PopAndDestroy( currentCTzId );
- CleanupStack::PopAndDestroy( &tz );
- }
+ CleanupStack::PopAndDestroy( &tz );
+
+ }
+
+ // Set the time on device and set the attributes to null so that we avoid setting old value.
+ if( iTimeAttributes )
+ {
+ // Time sent by nw is UTC
+ TTime nwUtcTime( iTimeAttributes->iUtcDateTime);
+
+ // Set the UTC time only. This is being done because with the UTC time,
+ // before the time is being set, the dst properties for the timezone are being checked.
+ // If its not the first boot, then set the time.
+ __PRINTS( "Setting the UTC time." );
+
+ TRAP_IGNORE( User::SetUTCTime( nwUtcTime ) );
+
+ // Setting the attributes to null again as we dont trust on
+ // previous NITZ data recevied by device.If device receive
+ // NITZ data again attributes would get filled with actual value.
+ // Has been kept outside because this statement is valid for
+ // first boot also.
+
+ iTimeAttributes->iDstOffset = TTimeIntervalMinutes( 0 );
+ iTimeAttributes->iTimeZoneOffset = TTimeIntervalMinutes( 0 );
+ TTime invalidTime( 0 );
+ iTimeAttributes->iUtcDateTime = invalidTime.DateTime();
+ }
}
// Notify the sessions about the change in mcc.
--- a/clock/clockmw/bwins/clockalarmclientu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-EXPORTS
- ?setAlarmRepeatType@AlarmClient@@AAEXW4AlarmRepeatType@@AAW4TAlarmRepeatDefinition@@@Z @ 1 NONAME ; void AlarmClient::setAlarmRepeatType(enum AlarmRepeatType, enum TAlarmRepeatDefinition &)
- ?staticMetaObject@AlarmClient@@2UQMetaObject@@B @ 2 NONAME ; struct QMetaObject const AlarmClient::staticMetaObject
- ?metaObject@AlarmClient@@UBEPBUQMetaObject@@XZ @ 3 NONAME ; struct QMetaObject const * AlarmClient::metaObject(void) const
- ?trUtf8@AlarmClient@@SA?AVQString@@PBD0H@Z @ 4 NONAME ; class QString AlarmClient::trUtf8(char const *, char const *, int)
- ?startListener@AlarmClient@@QAEXXZ @ 5 NONAME ; void AlarmClient::startListener(void)
- ?alarmStateChanged@AlarmClient@@IAEXH@Z @ 6 NONAME ; void AlarmClient::alarmStateChanged(int)
- ?toggleAlarmStatus@AlarmClient@@QAEXHH@Z @ 7 NONAME ; void AlarmClient::toggleAlarmStatus(int, int)
- ?notifyChange@AlarmClient@@QAEXH@Z @ 8 NONAME ; void AlarmClient::notifyChange(int)
- ?tr@AlarmClient@@SA?AVQString@@PBD0@Z @ 9 NONAME ; class QString AlarmClient::tr(char const *, char const *)
- ?setAlarmState@AlarmClient@@AAEXW4AlarmState@@AAW4TAlarmState@@@Z @ 10 NONAME ; void AlarmClient::setAlarmState(enum AlarmState, enum TAlarmState &)
- ?getStaticMetaObject@AlarmClient@@SAABUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const & AlarmClient::getStaticMetaObject(void)
- ?trUtf8@AlarmClient@@SA?AVQString@@PBD0@Z @ 12 NONAME ; class QString AlarmClient::trUtf8(char const *, char const *)
- ?qt_metacast@AlarmClient@@UAEPAXPBD@Z @ 13 NONAME ; void * AlarmClient::qt_metacast(char const *)
- ??0AlarmClient@@QAE@PAVQObject@@@Z @ 14 NONAME ; AlarmClient::AlarmClient(class QObject *)
- ??1AlarmClient@@UAE@XZ @ 15 NONAME ; AlarmClient::~AlarmClient(void)
- ?tr@AlarmClient@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString AlarmClient::tr(char const *, char const *, int)
- ?setAlarm@AlarmClient@@QAEXAAUAlarmInfo@@@Z @ 17 NONAME ; void AlarmClient::setAlarm(struct AlarmInfo &)
- ?deleteAlarm@AlarmClient@@QAEXH@Z @ 18 NONAME ; void AlarmClient::deleteAlarm(int)
- ?stopListener@AlarmClient@@QAEXXZ @ 19 NONAME ; void AlarmClient::stopListener(void)
- ??_EAlarmClient@@UAE@I@Z @ 20 NONAME ; AlarmClient::~AlarmClient(unsigned int)
- ?getAlarmList@AlarmClient@@QAEXAAV?$QList@UAlarmInfo@@@@@Z @ 21 NONAME ; void AlarmClient::getAlarmList(class QList<struct AlarmInfo> &)
- ?setAlarmState@AlarmClient@@AAEXW4TAlarmState@@AAW4AlarmState@@@Z @ 22 NONAME ; void AlarmClient::setAlarmState(enum TAlarmState, enum AlarmState &)
- ?setAlarmRepeatType@AlarmClient@@AAEXW4TAlarmRepeatDefinition@@AAW4AlarmRepeatType@@@Z @ 23 NONAME ; void AlarmClient::setAlarmRepeatType(enum TAlarmRepeatDefinition, enum AlarmRepeatType &)
- ?qt_metacall@AlarmClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 24 NONAME ; int AlarmClient::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?getAlarmInfo@AlarmClient@@QAEHHAAUAlarmInfo@@@Z @ 25 NONAME ; int AlarmClient::getAlarmInfo(int, struct AlarmInfo &)
- ?deleteSnoozedAlarm@AlarmClient@@QAEHH@Z @ 26 NONAME ; int AlarmClient::deleteSnoozedAlarm(int)
-
--- a/clock/clockmw/bwins/clocksettingsutilityu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-EXPORTS
- ?timeFormat@SettingsUtility@@QAEHAAVQStringList@@@Z @ 1 NONAME ; int SettingsUtility::timeFormat(class QStringList &)
- ?setSnoozeTime@SettingsUtility@@QAEXH@Z @ 2 NONAME ; void SettingsUtility::setSnoozeTime(int)
- ?workdays@SettingsUtility@@QAEHAAVQStringList@@@Z @ 3 NONAME ; int SettingsUtility::workdays(class QStringList &)
- ?setDateFormat@SettingsUtility@@QAEXABVQString@@@Z @ 4 NONAME ; void SettingsUtility::setDateFormat(class QString const &)
- ?time@SettingsUtility@@QAE?AVQString@@XZ @ 5 NONAME ; class QString SettingsUtility::time(void)
- ?staticMetaObject@SettingsUtility@@2UQMetaObject@@B @ 6 NONAME ; struct QMetaObject const SettingsUtility::staticMetaObject
- ?clockType@SettingsUtility@@QAEHAAVQStringList@@@Z @ 7 NONAME ; int SettingsUtility::clockType(class QStringList &)
- ?setDateSeparator@SettingsUtility@@QAEXABVQString@@@Z @ 8 NONAME ; void SettingsUtility::setDateSeparator(class QString const &)
- ?date@SettingsUtility@@QAE?AVQString@@XZ @ 9 NONAME ; class QString SettingsUtility::date(void)
- ?dateFormat@SettingsUtility@@QAEHAAVQStringList@@@Z @ 10 NONAME ; int SettingsUtility::dateFormat(class QStringList &)
- ?dateSeparator@SettingsUtility@@QAEHAAVQStringList@@@Z @ 11 NONAME ; int SettingsUtility::dateSeparator(class QStringList &)
- ?setTimeSeparator@SettingsUtility@@QAEXABVQString@@@Z @ 12 NONAME ; void SettingsUtility::setTimeSeparator(class QString const &)
- ?snoozeTime@SettingsUtility@@QAEHAAVQStringList@@@Z @ 13 NONAME ; int SettingsUtility::snoozeTime(class QStringList &)
- ?qt_metacast@SettingsUtility@@UAEPAXPBD@Z @ 14 NONAME ; void * SettingsUtility::qt_metacast(char const *)
- ?setWorkdays@SettingsUtility@@QAEXABVQString@@@Z @ 15 NONAME ; void SettingsUtility::setWorkdays(class QString const &)
- ?dateFormatString@SettingsUtility@@QAE?AVQString@@XZ @ 16 NONAME ; class QString SettingsUtility::dateFormatString(void)
- ??_ESettingsUtility@@UAE@I@Z @ 17 NONAME ; SettingsUtility::~SettingsUtility(unsigned int)
- ?metaObject@SettingsUtility@@UBEPBUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const * SettingsUtility::metaObject(void) const
- ??0SettingsUtility@@QAE@PAVQObject@@@Z @ 19 NONAME ; SettingsUtility::SettingsUtility(class QObject *)
- ?qt_metacall@SettingsUtility@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 20 NONAME ; int SettingsUtility::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?timeSeparator@SettingsUtility@@QAEHAAVQStringList@@@Z @ 21 NONAME ; int SettingsUtility::timeSeparator(class QStringList &)
- ?setClockType@SettingsUtility@@QAEXABVQString@@@Z @ 22 NONAME ; void SettingsUtility::setClockType(class QString const &)
- ?setTimeFormat@SettingsUtility@@QAEXABVQString@@@Z @ 23 NONAME ; void SettingsUtility::setTimeFormat(class QString const &)
- ?settingsChanged@SettingsUtility@@IAEXW4SettingsItemChanged@@VQString@@@Z @ 24 NONAME ; void SettingsUtility::settingsChanged(enum SettingsItemChanged, class QString)
- ?timeFormatString@SettingsUtility@@QAE?AVQString@@XZ @ 25 NONAME ; class QString SettingsUtility::timeFormatString(void)
- ?tr@SettingsUtility@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString SettingsUtility::tr(char const *, char const *, int)
- ??1SettingsUtility@@UAE@XZ @ 27 NONAME ; SettingsUtility::~SettingsUtility(void)
- ?setStartOfWeek@SettingsUtility@@QAEXH@Z @ 28 NONAME ; void SettingsUtility::setStartOfWeek(int)
- ?trUtf8@SettingsUtility@@SA?AVQString@@PBD0@Z @ 29 NONAME ; class QString SettingsUtility::trUtf8(char const *, char const *)
- ?tr@SettingsUtility@@SA?AVQString@@PBD0@Z @ 30 NONAME ; class QString SettingsUtility::tr(char const *, char const *)
- ?trUtf8@SettingsUtility@@SA?AVQString@@PBD0H@Z @ 31 NONAME ; class QString SettingsUtility::trUtf8(char const *, char const *, int)
- ?getStaticMetaObject@SettingsUtility@@SAABUQMetaObject@@XZ @ 32 NONAME ; struct QMetaObject const & SettingsUtility::getStaticMetaObject(void)
-
--- a/clock/clockmw/bwins/clockstopwatchengineu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-EXPORTS
- ?startTimer@StopwatchEngine@@QAEXXZ @ 1 NONAME ; void StopwatchEngine::startTimer(void)
- ?stopTimer@StopwatchEngine@@QAEXXZ @ 2 NONAME ; void StopwatchEngine::stopTimer(void)
- ??_EStopwatchEngine@@UAE@I@Z @ 3 NONAME ; StopwatchEngine::~StopwatchEngine(unsigned int)
- ??0StopwatchEngine@@QAE@PAVStopwatchObserver@@@Z @ 4 NONAME ; StopwatchEngine::StopwatchEngine(class StopwatchObserver *)
- ?RunL@StopwatchEngine@@MAEXXZ @ 5 NONAME ; void StopwatchEngine::RunL(void)
- ?DoCancel@StopwatchEngine@@MAEXXZ @ 6 NONAME ; void StopwatchEngine::DoCancel(void)
- ??1StopwatchEngine@@UAE@XZ @ 7 NONAME ; StopwatchEngine::~StopwatchEngine(void)
-
--- a/clock/clockmw/bwins/timezoneclientu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,53 +0,0 @@
-EXPORTS
- ?deleteInstance@TimezoneClient@@QAEXXZ @ 1 NONAME ; void TimezoneClient::deleteInstance(void)
- ?addCity@TimezoneClient@@QAE?AULocationInfo@@HAAVQString@@H@Z @ 2 NONAME ; struct LocationInfo TimezoneClient::addCity(int, class QString &, int)
- ?isNull@TimezoneClient@@QAE_NXZ @ 3 NONAME ; bool TimezoneClient::isNull(void)
- ??_ETimezoneClient@@UAE@I@Z @ 4 NONAME ; TimezoneClient::~TimezoneClient(unsigned int)
- ?getLocations@TimezoneClient@@QAEAAV?$QList@ULocationInfo@@@@XZ @ 5 NONAME ; class QList<struct LocationInfo> & TimezoneClient::getLocations(void)
- ?getDstRulesL@TimezoneClient@@AAEXAAVQDateTime@@0H@Z @ 6 NONAME ; void TimezoneClient::getDstRulesL(class QDateTime &, class QDateTime &, int)
- ?locationSelectorModel@TimezoneClient@@QAEPAVQStandardItemModel@@XZ @ 7 NONAME ; class QStandardItemModel * TimezoneClient::locationSelectorModel(void)
- ?getUtcDstOffsetL@TimezoneClient@@AAE_NAAHABVCTzId@@@Z @ 8 NONAME ; bool TimezoneClient::getUtcDstOffsetL(int &, class CTzId const &)
- ?mReferenceCount@TimezoneClient@@0HA @ 9 NONAME ; int TimezoneClient::mReferenceCount
- ??0TimezoneClient@@AAE@XZ @ 10 NONAME ; TimezoneClient::TimezoneClient(void)
- ?intToMonth@TimezoneClient@@AAE?AW4TMonth@@H@Z @ 11 NONAME ; enum TMonth TimezoneClient::intToMonth(int)
- ?getDstZoneOffset@TimezoneClient@@AAEHH@Z @ 12 NONAME ; int TimezoneClient::getDstZoneOffset(int)
- ?environmentCallback@TimezoneClient@@SAHPAX@Z @ 13 NONAME ; int TimezoneClient::environmentCallback(void *)
- ?trUtf8@TimezoneClient@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString TimezoneClient::trUtf8(char const *, char const *, int)
- ?getStandardOffset@TimezoneClient@@QAEHH@Z @ 15 NONAME ; int TimezoneClient::getStandardOffset(int)
- ?getCurrentZoneInfoL@TimezoneClient@@QAE?AULocationInfo@@XZ @ 16 NONAME ; struct LocationInfo TimezoneClient::getCurrentZoneInfoL(void)
- ?dstOn@TimezoneClient@@QAE_NH@Z @ 17 NONAME ; bool TimezoneClient::dstOn(int)
- ?createWorldClockModel@TimezoneClient@@QAEXXZ @ 18 NONAME ; void TimezoneClient::createWorldClockModel(void)
- ?tr@TimezoneClient@@SA?AVQString@@PBD0H@Z @ 19 NONAME ; class QString TimezoneClient::tr(char const *, char const *, int)
- ?setAsCurrentLocationL@TimezoneClient@@QAEXAAULocationInfo@@@Z @ 20 NONAME ; void TimezoneClient::setAsCurrentLocationL(struct LocationInfo &)
- ?eventMonitor@TimezoneClient@@AAEXABVXQSettingsKey@@ABVQVariant@@@Z @ 21 NONAME ; void TimezoneClient::eventMonitor(class XQSettingsKey const &, class QVariant const &)
- ?getInstance@TimezoneClient@@SAPAV1@XZ @ 22 NONAME ; class TimezoneClient * TimezoneClient::getInstance(void)
- ?getCityGroupIdByName@TimezoneClient@@AAEHABVQString@@@Z @ 23 NONAME ; int TimezoneClient::getCityGroupIdByName(class QString const &)
- ?getCityOffsetByNameAndId@TimezoneClient@@AAEHABVQString@@H@Z @ 24 NONAME ; int TimezoneClient::getCityOffsetByNameAndId(class QString const &, int)
- ?getAllTimeZoneOffsets@TimezoneClient@@QAE?AV?$QList@H@@XZ @ 25 NONAME ; class QList<int> TimezoneClient::getAllTimeZoneOffsets(void)
- ?getCitiesForCountry@TimezoneClient@@AAEXHAAV?$QMap@VQString@@H@@@Z @ 26 NONAME ; void TimezoneClient::getCitiesForCountry(int, class QMap<class QString, int> &)
- ?getCountriesForUTCOffset@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@H@Z @ 27 NONAME ; class QList<struct LocationInfo> TimezoneClient::getCountriesForUTCOffset(int)
- ??1TimezoneClient@@EAE@XZ @ 28 NONAME ; TimezoneClient::~TimezoneClient(void)
- ?timeUpdateOn@TimezoneClient@@QAE_NXZ @ 29 NONAME ; bool TimezoneClient::timeUpdateOn(void)
- ?staticMetaObject@TimezoneClient@@2UQMetaObject@@B @ 30 NONAME ; struct QMetaObject const TimezoneClient::staticMetaObject
- ?qt_metacast@TimezoneClient@@UAEPAXPBD@Z @ 31 NONAME ; void * TimezoneClient::qt_metacast(char const *)
- ?autoTimeUpdateChanged@TimezoneClient@@IAEXH@Z @ 32 NONAME ; void TimezoneClient::autoTimeUpdateChanged(int)
- ?trUtf8@TimezoneClient@@SA?AVQString@@PBD0@Z @ 33 NONAME ; class QString TimezoneClient::trUtf8(char const *, char const *)
- ?listUpdated@TimezoneClient@@IAEXXZ @ 34 NONAME ; void TimezoneClient::listUpdated(void)
- ?getSavedLocations@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@XZ @ 35 NONAME ; class QList<struct LocationInfo> TimezoneClient::getSavedLocations(void)
- ?getLocationInfo@TimezoneClient@@AAEXHHAAULocationInfo@@@Z @ 36 NONAME ; void TimezoneClient::getLocationInfo(int, int, struct LocationInfo &)
- ?getAllTimeZoneIds@TimezoneClient@@QAE?AV?$QList@H@@XZ @ 37 NONAME ; class QList<int> TimezoneClient::getAllTimeZoneIds(void)
- ?populateCities@TimezoneClient@@AAEXXZ @ 38 NONAME ; void TimezoneClient::populateCities(void)
- ?tr@TimezoneClient@@SA?AVQString@@PBD0@Z @ 39 NONAME ; class QString TimezoneClient::tr(char const *, char const *)
- ?setDateTime@TimezoneClient@@QAEXVQDateTime@@@Z @ 40 NONAME ; void TimezoneClient::setDateTime(class QDateTime)
- ?metaObject@TimezoneClient@@UBEPBUQMetaObject@@XZ @ 41 NONAME ; struct QMetaObject const * TimezoneClient::metaObject(void) const
- ?getStaticMetaObject@TimezoneClient@@SAABUQMetaObject@@XZ @ 42 NONAME ; struct QMetaObject const & TimezoneClient::getStaticMetaObject(void)
- ?mTimezoneClient@TimezoneClient@@0PAV1@A @ 43 NONAME ; class TimezoneClient * TimezoneClient::mTimezoneClient
- ?cityUpdated@TimezoneClient@@IAEXXZ @ 44 NONAME ; void TimezoneClient::cityUpdated(void)
- ?setTimeUpdateOn@TimezoneClient@@QAEX_N@Z @ 45 NONAME ; void TimezoneClient::setTimeUpdateOn(bool)
- ?getCountries@TimezoneClient@@QAEXAAV?$QMap@VQString@@H@@@Z @ 46 NONAME ; void TimezoneClient::getCountries(class QMap<class QString, int> &)
- ?checkForDstChange@TimezoneClient@@QAE_NAAUAlarmInfo@@@Z @ 47 NONAME ; bool TimezoneClient::checkForDstChange(struct AlarmInfo &)
- ?isDSTOnL@TimezoneClient@@QAE_NH@Z @ 48 NONAME ; bool TimezoneClient::isDSTOnL(int)
- ?timechanged@TimezoneClient@@IAEXXZ @ 49 NONAME ; void TimezoneClient::timechanged(void)
- ?saveLocations@TimezoneClient@@QAEXABV?$QList@ULocationInfo@@@@@Z @ 50 NONAME ; void TimezoneClient::saveLocations(class QList<struct LocationInfo> const &)
- ?qt_metacall@TimezoneClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 51 NONAME ; int TimezoneClient::qt_metacall(enum QMetaObject::Call, int, void * *)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clockalarms/bwins/clockalarmclientu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+EXPORTS
+ ?deleteSnoozedAlarm@AlarmClient@@QAEHH@Z @ 1 NONAME ; int AlarmClient::deleteSnoozedAlarm(int)
+ ?setAlarmRepeatType@AlarmClient@@AAEXW4AlarmRepeatType@@AAW4TAlarmRepeatDefinition@@@Z @ 2 NONAME ; void AlarmClient::setAlarmRepeatType(enum AlarmRepeatType, enum TAlarmRepeatDefinition &)
+ ?staticMetaObject@AlarmClient@@2UQMetaObject@@B @ 3 NONAME ; struct QMetaObject const AlarmClient::staticMetaObject
+ ?metaObject@AlarmClient@@UBEPBUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const * AlarmClient::metaObject(void) const
+ ?trUtf8@AlarmClient@@SA?AVQString@@PBD0H@Z @ 5 NONAME ; class QString AlarmClient::trUtf8(char const *, char const *, int)
+ ?startListener@AlarmClient@@QAEXXZ @ 6 NONAME ; void AlarmClient::startListener(void)
+ ?alarmStateChanged@AlarmClient@@IAEXH@Z @ 7 NONAME ; void AlarmClient::alarmStateChanged(int)
+ ?toggleAlarmStatus@AlarmClient@@QAEXHH@Z @ 8 NONAME ; void AlarmClient::toggleAlarmStatus(int, int)
+ ?notifyChange@AlarmClient@@QAEXH@Z @ 9 NONAME ; void AlarmClient::notifyChange(int)
+ ?tr@AlarmClient@@SA?AVQString@@PBD0@Z @ 10 NONAME ; class QString AlarmClient::tr(char const *, char const *)
+ ?setAlarmState@AlarmClient@@AAEXW4AlarmState@@AAW4TAlarmState@@@Z @ 11 NONAME ; void AlarmClient::setAlarmState(enum AlarmState, enum TAlarmState &)
+ ?getStaticMetaObject@AlarmClient@@SAABUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const & AlarmClient::getStaticMetaObject(void)
+ ?trUtf8@AlarmClient@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString AlarmClient::trUtf8(char const *, char const *)
+ ?qt_metacast@AlarmClient@@UAEPAXPBD@Z @ 14 NONAME ; void * AlarmClient::qt_metacast(char const *)
+ ??0AlarmClient@@QAE@PAVQObject@@@Z @ 15 NONAME ; AlarmClient::AlarmClient(class QObject *)
+ ??1AlarmClient@@UAE@XZ @ 16 NONAME ; AlarmClient::~AlarmClient(void)
+ ?tr@AlarmClient@@SA?AVQString@@PBD0H@Z @ 17 NONAME ; class QString AlarmClient::tr(char const *, char const *, int)
+ ?setAlarm@AlarmClient@@QAEXAAUAlarmInfo@@@Z @ 18 NONAME ; void AlarmClient::setAlarm(struct AlarmInfo &)
+ ?deleteAlarm@AlarmClient@@QAEXH@Z @ 19 NONAME ; void AlarmClient::deleteAlarm(int)
+ ?stopListener@AlarmClient@@QAEXXZ @ 20 NONAME ; void AlarmClient::stopListener(void)
+ ??_EAlarmClient@@UAE@I@Z @ 21 NONAME ; AlarmClient::~AlarmClient(unsigned int)
+ ?getAlarmList@AlarmClient@@QAEXAAV?$QList@UAlarmInfo@@@@@Z @ 22 NONAME ; void AlarmClient::getAlarmList(class QList<struct AlarmInfo> &)
+ ?setAlarmState@AlarmClient@@AAEXW4TAlarmState@@AAW4AlarmState@@@Z @ 23 NONAME ; void AlarmClient::setAlarmState(enum TAlarmState, enum AlarmState &)
+ ?setAlarmRepeatType@AlarmClient@@AAEXW4TAlarmRepeatDefinition@@AAW4AlarmRepeatType@@@Z @ 24 NONAME ; void AlarmClient::setAlarmRepeatType(enum TAlarmRepeatDefinition, enum AlarmRepeatType &)
+ ?getAlarmInfo@AlarmClient@@QAEHHAAUAlarmInfo@@@Z @ 25 NONAME ; int AlarmClient::getAlarmInfo(int, struct AlarmInfo &)
+ ?qt_metacall@AlarmClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 26 NONAME ; int AlarmClient::qt_metacall(enum QMetaObject::Call, int, void * *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clockalarms/eabi/clockalarmclientu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+EXPORTS
+ _ZN11AlarmClient11deleteAlarmEi @ 1 NONAME
+ _ZN11AlarmClient11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN11AlarmClient11qt_metacastEPKc @ 3 NONAME
+ _ZN11AlarmClient12getAlarmInfoEiR9AlarmInfo @ 4 NONAME
+ _ZN11AlarmClient12getAlarmListER5QListI9AlarmInfoE @ 5 NONAME
+ _ZN11AlarmClient12notifyChangeEi @ 6 NONAME
+ _ZN11AlarmClient12stopListenerEv @ 7 NONAME
+ _ZN11AlarmClient13setAlarmStateE10AlarmStateR11TAlarmState @ 8 NONAME
+ _ZN11AlarmClient13setAlarmStateE11TAlarmStateR10AlarmState @ 9 NONAME
+ _ZN11AlarmClient13startListenerEv @ 10 NONAME
+ _ZN11AlarmClient16staticMetaObjectE @ 11 NONAME DATA 16
+ _ZN11AlarmClient17alarmStateChangedEi @ 12 NONAME
+ _ZN11AlarmClient17toggleAlarmStatusEii @ 13 NONAME
+ _ZN11AlarmClient18deleteSnoozedAlarmEi @ 14 NONAME
+ _ZN11AlarmClient18setAlarmRepeatTypeE15AlarmRepeatTypeR22TAlarmRepeatDefinition @ 15 NONAME
+ _ZN11AlarmClient18setAlarmRepeatTypeE22TAlarmRepeatDefinitionR15AlarmRepeatType @ 16 NONAME
+ _ZN11AlarmClient19getStaticMetaObjectEv @ 17 NONAME
+ _ZN11AlarmClient8setAlarmER9AlarmInfo @ 18 NONAME
+ _ZN11AlarmClientC1EP7QObject @ 19 NONAME
+ _ZN11AlarmClientC2EP7QObject @ 20 NONAME
+ _ZN11AlarmClientD0Ev @ 21 NONAME
+ _ZN11AlarmClientD1Ev @ 22 NONAME
+ _ZN11AlarmClientD2Ev @ 23 NONAME
+ _ZNK11AlarmClient10metaObjectEv @ 24 NONAME
+ _ZTI11AlarmClient @ 25 NONAME
+ _ZTV11AlarmClient @ 26 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocksettingsutility/bwins/clocksettingsutilityu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,34 @@
+EXPORTS
+ ?timeFormat@SettingsUtility@@QAEHAAVQStringList@@@Z @ 1 NONAME ; int SettingsUtility::timeFormat(class QStringList &)
+ ?setSnoozeTime@SettingsUtility@@QAEXH@Z @ 2 NONAME ; void SettingsUtility::setSnoozeTime(int)
+ ?workdays@SettingsUtility@@QAEHAAVQStringList@@@Z @ 3 NONAME ; int SettingsUtility::workdays(class QStringList &)
+ ?setDateFormat@SettingsUtility@@QAEXABVQString@@@Z @ 4 NONAME ; void SettingsUtility::setDateFormat(class QString const &)
+ ?time@SettingsUtility@@QAE?AVQString@@XZ @ 5 NONAME ; class QString SettingsUtility::time(void)
+ ?staticMetaObject@SettingsUtility@@2UQMetaObject@@B @ 6 NONAME ; struct QMetaObject const SettingsUtility::staticMetaObject
+ ?clockType@SettingsUtility@@QAEHAAVQStringList@@@Z @ 7 NONAME ; int SettingsUtility::clockType(class QStringList &)
+ ?setDateSeparator@SettingsUtility@@QAEXABVQString@@@Z @ 8 NONAME ; void SettingsUtility::setDateSeparator(class QString const &)
+ ?date@SettingsUtility@@QAE?AVQString@@XZ @ 9 NONAME ; class QString SettingsUtility::date(void)
+ ?dateFormat@SettingsUtility@@QAEHAAVQStringList@@@Z @ 10 NONAME ; int SettingsUtility::dateFormat(class QStringList &)
+ ?dateSeparator@SettingsUtility@@QAEHAAVQStringList@@@Z @ 11 NONAME ; int SettingsUtility::dateSeparator(class QStringList &)
+ ?setTimeSeparator@SettingsUtility@@QAEXABVQString@@@Z @ 12 NONAME ; void SettingsUtility::setTimeSeparator(class QString const &)
+ ?snoozeTime@SettingsUtility@@QAEHAAVQStringList@@@Z @ 13 NONAME ; int SettingsUtility::snoozeTime(class QStringList &)
+ ?qt_metacast@SettingsUtility@@UAEPAXPBD@Z @ 14 NONAME ; void * SettingsUtility::qt_metacast(char const *)
+ ?setWorkdays@SettingsUtility@@QAEXABVQString@@@Z @ 15 NONAME ; void SettingsUtility::setWorkdays(class QString const &)
+ ?dateFormatString@SettingsUtility@@QAE?AVQString@@XZ @ 16 NONAME ; class QString SettingsUtility::dateFormatString(void)
+ ??_ESettingsUtility@@UAE@I@Z @ 17 NONAME ; SettingsUtility::~SettingsUtility(unsigned int)
+ ?metaObject@SettingsUtility@@UBEPBUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const * SettingsUtility::metaObject(void) const
+ ??0SettingsUtility@@QAE@PAVQObject@@@Z @ 19 NONAME ; SettingsUtility::SettingsUtility(class QObject *)
+ ?qt_metacall@SettingsUtility@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 20 NONAME ; int SettingsUtility::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?timeSeparator@SettingsUtility@@QAEHAAVQStringList@@@Z @ 21 NONAME ; int SettingsUtility::timeSeparator(class QStringList &)
+ ?setClockType@SettingsUtility@@QAEXABVQString@@@Z @ 22 NONAME ; void SettingsUtility::setClockType(class QString const &)
+ ?setTimeFormat@SettingsUtility@@QAEXABVQString@@@Z @ 23 NONAME ; void SettingsUtility::setTimeFormat(class QString const &)
+ ?settingsChanged@SettingsUtility@@IAEXW4SettingsItemChanged@@VQString@@@Z @ 24 NONAME ; void SettingsUtility::settingsChanged(enum SettingsItemChanged, class QString)
+ ?timeFormatString@SettingsUtility@@QAE?AVQString@@XZ @ 25 NONAME ; class QString SettingsUtility::timeFormatString(void)
+ ?tr@SettingsUtility@@SA?AVQString@@PBD0H@Z @ 26 NONAME ; class QString SettingsUtility::tr(char const *, char const *, int)
+ ??1SettingsUtility@@UAE@XZ @ 27 NONAME ; SettingsUtility::~SettingsUtility(void)
+ ?setStartOfWeek@SettingsUtility@@QAEXH@Z @ 28 NONAME ; void SettingsUtility::setStartOfWeek(int)
+ ?trUtf8@SettingsUtility@@SA?AVQString@@PBD0@Z @ 29 NONAME ; class QString SettingsUtility::trUtf8(char const *, char const *)
+ ?tr@SettingsUtility@@SA?AVQString@@PBD0@Z @ 30 NONAME ; class QString SettingsUtility::tr(char const *, char const *)
+ ?trUtf8@SettingsUtility@@SA?AVQString@@PBD0H@Z @ 31 NONAME ; class QString SettingsUtility::trUtf8(char const *, char const *, int)
+ ?getStaticMetaObject@SettingsUtility@@SAABUQMetaObject@@XZ @ 32 NONAME ; struct QMetaObject const & SettingsUtility::getStaticMetaObject(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocksettingsutility/eabi/clocksettingsutilityu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,34 @@
+EXPORTS
+ _ZN15SettingsUtility10dateFormatER11QStringList @ 1 NONAME
+ _ZN15SettingsUtility10snoozeTimeER11QStringList @ 2 NONAME
+ _ZN15SettingsUtility10timeFormatER11QStringList @ 3 NONAME
+ _ZN15SettingsUtility11qt_metacallEN11QMetaObject4CallEiPPv @ 4 NONAME
+ _ZN15SettingsUtility11qt_metacastEPKc @ 5 NONAME
+ _ZN15SettingsUtility11setWorkdaysERK7QString @ 6 NONAME
+ _ZN15SettingsUtility12setClockTypeERK7QString @ 7 NONAME
+ _ZN15SettingsUtility13dateSeparatorER11QStringList @ 8 NONAME
+ _ZN15SettingsUtility13setDateFormatERK7QString @ 9 NONAME
+ _ZN15SettingsUtility13setSnoozeTimeEi @ 10 NONAME
+ _ZN15SettingsUtility13setTimeFormatERK7QString @ 11 NONAME
+ _ZN15SettingsUtility13timeSeparatorER11QStringList @ 12 NONAME
+ _ZN15SettingsUtility14setStartOfWeekEi @ 13 NONAME
+ _ZN15SettingsUtility15settingsChangedE19SettingsItemChanged7QString @ 14 NONAME
+ _ZN15SettingsUtility16dateFormatStringEv @ 15 NONAME
+ _ZN15SettingsUtility16setDateSeparatorERK7QString @ 16 NONAME
+ _ZN15SettingsUtility16setTimeSeparatorERK7QString @ 17 NONAME
+ _ZN15SettingsUtility16staticMetaObjectE @ 18 NONAME DATA 16
+ _ZN15SettingsUtility16timeFormatStringEv @ 19 NONAME
+ _ZN15SettingsUtility19getStaticMetaObjectEv @ 20 NONAME
+ _ZN15SettingsUtility4dateEv @ 21 NONAME
+ _ZN15SettingsUtility4timeEv @ 22 NONAME
+ _ZN15SettingsUtility8workdaysER11QStringList @ 23 NONAME
+ _ZN15SettingsUtility9clockTypeER11QStringList @ 24 NONAME
+ _ZN15SettingsUtilityC1EP7QObject @ 25 NONAME
+ _ZN15SettingsUtilityC2EP7QObject @ 26 NONAME
+ _ZN15SettingsUtilityD0Ev @ 27 NONAME
+ _ZN15SettingsUtilityD1Ev @ 28 NONAME
+ _ZN15SettingsUtilityD2Ev @ 29 NONAME
+ _ZNK15SettingsUtility10metaObjectEv @ 30 NONAME
+ _ZTI15SettingsUtility @ 31 NONAME
+ _ZTV15SettingsUtility @ 32 NONAME
+
--- a/clock/clockmw/clocksettingsutility/src/settingsutility.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockmw/clocksettingsutility/src/settingsutility.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -38,7 +38,7 @@
:QObject(parent)
{
mTimeSeparatorList << tr(".") << tr(":");
- mClockTypeList << tr("Analog") << tr("Digital");
+ mClockTypeList << hbTrId("txt_clock_button_digital") << hbTrId("txt_clock_button_analog");
mTimeFormatList << hbTrId("txt_clk_setlabel_val_24_hour") << hbTrId("txt_clk_setlabel_val_12_hour");
mDateFormatList << hbTrId("txt_clk_setlabel_val_dd_mm_yyyy") << hbTrId("txt_clk_setlabel_val_mm_dd_yyyy") << hbTrId("txt_clk_setlabel_val_yyyy_mm_dd");
mDateSeparatorList << tr(".") << tr(":") << tr("/") << tr("-");
@@ -320,9 +320,9 @@
QStringList dummyList;
if (ETime24 == locale.TimeFormat()) {
- format = QString("h:mm");
+ format = QString("hh:mm");
} else if (ETime12 == locale.TimeFormat()) {
- format = QString("h:mm ap");
+ format = QString("hh:mm ap");
}
QString separator = mTimeSeparatorList.at(timeSeparator(dummyList));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocktimezone/bwins/timezoneclientu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,53 @@
+EXPORTS
+ ?deleteInstance@TimezoneClient@@QAEXXZ @ 1 NONAME ; void TimezoneClient::deleteInstance(void)
+ ?addCity@TimezoneClient@@QAE?AULocationInfo@@HAAVQString@@H@Z @ 2 NONAME ; struct LocationInfo TimezoneClient::addCity(int, class QString &, int)
+ ?isNull@TimezoneClient@@QAE_NXZ @ 3 NONAME ; bool TimezoneClient::isNull(void)
+ ??_ETimezoneClient@@UAE@I@Z @ 4 NONAME ; TimezoneClient::~TimezoneClient(unsigned int)
+ ?getLocations@TimezoneClient@@QAEAAV?$QList@ULocationInfo@@@@XZ @ 5 NONAME ; class QList<struct LocationInfo> & TimezoneClient::getLocations(void)
+ ?getDstRulesL@TimezoneClient@@AAEXAAVQDateTime@@0H@Z @ 6 NONAME ; void TimezoneClient::getDstRulesL(class QDateTime &, class QDateTime &, int)
+ ?locationSelectorModel@TimezoneClient@@QAEPAVQStandardItemModel@@XZ @ 7 NONAME ; class QStandardItemModel * TimezoneClient::locationSelectorModel(void)
+ ?getUtcDstOffsetL@TimezoneClient@@AAE_NAAHABVCTzId@@@Z @ 8 NONAME ; bool TimezoneClient::getUtcDstOffsetL(int &, class CTzId const &)
+ ??0TimezoneClient@@AAE@XZ @ 9 NONAME ; TimezoneClient::TimezoneClient(void)
+ ?intToMonth@TimezoneClient@@AAE?AW4TMonth@@H@Z @ 10 NONAME ; enum TMonth TimezoneClient::intToMonth(int)
+ ?getDstZoneOffset@TimezoneClient@@AAEHH@Z @ 11 NONAME ; int TimezoneClient::getDstZoneOffset(int)
+ ?environmentCallback@TimezoneClient@@SAHPAX@Z @ 12 NONAME ; int TimezoneClient::environmentCallback(void *)
+ ?trUtf8@TimezoneClient@@SA?AVQString@@PBD0H@Z @ 13 NONAME ; class QString TimezoneClient::trUtf8(char const *, char const *, int)
+ ?getStandardOffset@TimezoneClient@@QAEHH@Z @ 14 NONAME ; int TimezoneClient::getStandardOffset(int)
+ ?getCurrentZoneInfoL@TimezoneClient@@QAE?AULocationInfo@@XZ @ 15 NONAME ; struct LocationInfo TimezoneClient::getCurrentZoneInfoL(void)
+ ?dstOn@TimezoneClient@@QAE_NH@Z @ 16 NONAME ; bool TimezoneClient::dstOn(int)
+ ?createWorldClockModel@TimezoneClient@@QAEXXZ @ 17 NONAME ; void TimezoneClient::createWorldClockModel(void)
+ ?tr@TimezoneClient@@SA?AVQString@@PBD0H@Z @ 18 NONAME ; class QString TimezoneClient::tr(char const *, char const *, int)
+ ?setAsCurrentLocationL@TimezoneClient@@QAEXAAULocationInfo@@@Z @ 19 NONAME ; void TimezoneClient::setAsCurrentLocationL(struct LocationInfo &)
+ ?eventMonitor@TimezoneClient@@AAEXABVXQSettingsKey@@ABVQVariant@@@Z @ 20 NONAME ; void TimezoneClient::eventMonitor(class XQSettingsKey const &, class QVariant const &)
+ ?getInstance@TimezoneClient@@SAPAV1@XZ @ 21 NONAME ; class TimezoneClient * TimezoneClient::getInstance(void)
+ ?getCityGroupIdByName@TimezoneClient@@AAEHABVQString@@@Z @ 22 NONAME ; int TimezoneClient::getCityGroupIdByName(class QString const &)
+ ?getCityOffsetByNameAndId@TimezoneClient@@AAEHABVQString@@H@Z @ 23 NONAME ; int TimezoneClient::getCityOffsetByNameAndId(class QString const &, int)
+ ?getAllTimeZoneOffsets@TimezoneClient@@QAE?AV?$QList@H@@XZ @ 24 NONAME ; class QList<int> TimezoneClient::getAllTimeZoneOffsets(void)
+ ?getCitiesForCountry@TimezoneClient@@AAEXHAAV?$QMap@VQString@@H@@@Z @ 25 NONAME ; void TimezoneClient::getCitiesForCountry(int, class QMap<class QString, int> &)
+ ?getCountriesForUTCOffset@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@H@Z @ 26 NONAME ; class QList<struct LocationInfo> TimezoneClient::getCountriesForUTCOffset(int)
+ ??1TimezoneClient@@EAE@XZ @ 27 NONAME ; TimezoneClient::~TimezoneClient(void)
+ ?timeUpdateOn@TimezoneClient@@QAE_NXZ @ 28 NONAME ; bool TimezoneClient::timeUpdateOn(void)
+ ?staticMetaObject@TimezoneClient@@2UQMetaObject@@B @ 29 NONAME ; struct QMetaObject const TimezoneClient::staticMetaObject
+ ?qt_metacast@TimezoneClient@@UAEPAXPBD@Z @ 30 NONAME ; void * TimezoneClient::qt_metacast(char const *)
+ ?autoTimeUpdateChanged@TimezoneClient@@IAEXH@Z @ 31 NONAME ; void TimezoneClient::autoTimeUpdateChanged(int)
+ ?trUtf8@TimezoneClient@@SA?AVQString@@PBD0@Z @ 32 NONAME ; class QString TimezoneClient::trUtf8(char const *, char const *)
+ ?listUpdated@TimezoneClient@@IAEXXZ @ 33 NONAME ; void TimezoneClient::listUpdated(void)
+ ?getSavedLocations@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@XZ @ 34 NONAME ; class QList<struct LocationInfo> TimezoneClient::getSavedLocations(void)
+ ?getLocationInfo@TimezoneClient@@AAEXHHAAULocationInfo@@@Z @ 35 NONAME ; void TimezoneClient::getLocationInfo(int, int, struct LocationInfo &)
+ ?getAllTimeZoneIds@TimezoneClient@@QAE?AV?$QList@H@@XZ @ 36 NONAME ; class QList<int> TimezoneClient::getAllTimeZoneIds(void)
+ ?populateCities@TimezoneClient@@AAEXXZ @ 37 NONAME ; void TimezoneClient::populateCities(void)
+ ?tr@TimezoneClient@@SA?AVQString@@PBD0@Z @ 38 NONAME ; class QString TimezoneClient::tr(char const *, char const *)
+ ?setDateTime@TimezoneClient@@QAEXVQDateTime@@@Z @ 39 NONAME ; void TimezoneClient::setDateTime(class QDateTime)
+ ?metaObject@TimezoneClient@@UBEPBUQMetaObject@@XZ @ 40 NONAME ; struct QMetaObject const * TimezoneClient::metaObject(void) const
+ ?getStaticMetaObject@TimezoneClient@@SAABUQMetaObject@@XZ @ 41 NONAME ; struct QMetaObject const & TimezoneClient::getStaticMetaObject(void)
+ ?mTimezoneClient@TimezoneClient@@0PAV1@A @ 42 NONAME ; class TimezoneClient * TimezoneClient::mTimezoneClient
+ ?cityUpdated@TimezoneClient@@IAEXXZ @ 43 NONAME ; void TimezoneClient::cityUpdated(void)
+ ?setTimeUpdateOn@TimezoneClient@@QAEX_N@Z @ 44 NONAME ; void TimezoneClient::setTimeUpdateOn(bool)
+ ?mReferenceCount@TimezoneClient@@0_NA @ 45 NONAME ; bool TimezoneClient::mReferenceCount
+ ?getCountries@TimezoneClient@@QAEXAAV?$QMap@VQString@@H@@@Z @ 46 NONAME ; void TimezoneClient::getCountries(class QMap<class QString, int> &)
+ ?checkForDstChange@TimezoneClient@@QAE_NAAUAlarmInfo@@@Z @ 47 NONAME ; bool TimezoneClient::checkForDstChange(struct AlarmInfo &)
+ ?isDSTOnL@TimezoneClient@@QAE_NH@Z @ 48 NONAME ; bool TimezoneClient::isDSTOnL(int)
+ ?timechanged@TimezoneClient@@IAEXXZ @ 49 NONAME ; void TimezoneClient::timechanged(void)
+ ?saveLocations@TimezoneClient@@QAEXABV?$QList@ULocationInfo@@@@@Z @ 50 NONAME ; void TimezoneClient::saveLocations(class QList<struct LocationInfo> const &)
+ ?qt_metacall@TimezoneClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 51 NONAME ; int TimezoneClient::qt_metacall(enum QMetaObject::Call, int, void * *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocktimezone/eabi/timezoneclientu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,55 @@
+EXPORTS
+ _ZN14TimezoneClient10intToMonthEi @ 1 NONAME
+ _ZN14TimezoneClient11cityUpdatedEv @ 2 NONAME
+ _ZN14TimezoneClient11getInstanceEv @ 3 NONAME
+ _ZN14TimezoneClient11listUpdatedEv @ 4 NONAME
+ _ZN14TimezoneClient11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
+ _ZN14TimezoneClient11qt_metacastEPKc @ 6 NONAME
+ _ZN14TimezoneClient11setDateTimeE9QDateTime @ 7 NONAME
+ _ZN14TimezoneClient11timechangedEv @ 8 NONAME
+ _ZN14TimezoneClient12eventMonitorERK13XQSettingsKeyRK8QVariant @ 9 NONAME
+ _ZN14TimezoneClient12getCountriesER4QMapI7QStringiE @ 10 NONAME
+ _ZN14TimezoneClient12getDstRulesLER9QDateTimeS1_i @ 11 NONAME
+ _ZN14TimezoneClient12getLocationsEv @ 12 NONAME
+ _ZN14TimezoneClient12timeUpdateOnEv @ 13 NONAME
+ _ZN14TimezoneClient13saveLocationsERK5QListI12LocationInfoE @ 14 NONAME
+ _ZN14TimezoneClient14deleteInstanceEv @ 15 NONAME
+ _ZN14TimezoneClient14populateCitiesEv @ 16 NONAME
+ _ZN14TimezoneClient15getLocationInfoEiiR12LocationInfo @ 17 NONAME
+ _ZN14TimezoneClient15mReferenceCountE @ 18 NONAME DATA 1
+ _ZN14TimezoneClient15mTimezoneClientE @ 19 NONAME DATA 4
+ _ZN14TimezoneClient15setTimeUpdateOnEb @ 20 NONAME
+ _ZN14TimezoneClient16getDstZoneOffsetEi @ 21 NONAME
+ _ZN14TimezoneClient16getUtcDstOffsetLERiRK5CTzId @ 22 NONAME
+ _ZN14TimezoneClient16staticMetaObjectE @ 23 NONAME DATA 16
+ _ZN14TimezoneClient17checkForDstChangeER9AlarmInfo @ 24 NONAME
+ _ZN14TimezoneClient17getAllTimeZoneIdsEv @ 25 NONAME
+ _ZN14TimezoneClient17getSavedLocationsEv @ 26 NONAME
+ _ZN14TimezoneClient17getStandardOffsetEi @ 27 NONAME
+ _ZN14TimezoneClient19environmentCallbackEPv @ 28 NONAME
+ _ZN14TimezoneClient19getCitiesForCountryEiR4QMapI7QStringiE @ 29 NONAME
+ _ZN14TimezoneClient19getCurrentZoneInfoLEv @ 30 NONAME
+ _ZN14TimezoneClient19getStaticMetaObjectEv @ 31 NONAME
+ _ZN14TimezoneClient20getCityGroupIdByNameERK7QString @ 32 NONAME
+ _ZN14TimezoneClient21autoTimeUpdateChangedEi @ 33 NONAME
+ _ZN14TimezoneClient21createWorldClockModelEv @ 34 NONAME
+ _ZN14TimezoneClient21getAllTimeZoneOffsetsEv @ 35 NONAME
+ _ZN14TimezoneClient21locationSelectorModelEv @ 36 NONAME
+ _ZN14TimezoneClient21setAsCurrentLocationLER12LocationInfo @ 37 NONAME
+ _ZN14TimezoneClient24getCityOffsetByNameAndIdERK7QStringi @ 38 NONAME
+ _ZN14TimezoneClient24getCountriesForUTCOffsetEi @ 39 NONAME
+ _ZN14TimezoneClient5dstOnEi @ 40 NONAME
+ _ZN14TimezoneClient6isNullEv @ 41 NONAME
+ _ZN14TimezoneClient7addCityEiR7QStringi @ 42 NONAME
+ _ZN14TimezoneClient8isDSTOnLEi @ 43 NONAME
+ _ZN14TimezoneClientC1Ev @ 44 NONAME
+ _ZN14TimezoneClientC2Ev @ 45 NONAME
+ _ZN14TimezoneClientD0Ev @ 46 NONAME
+ _ZN14TimezoneClientD1Ev @ 47 NONAME
+ _ZN14TimezoneClientD2Ev @ 48 NONAME
+ _ZNK14TimezoneClient10metaObjectEv @ 49 NONAME
+ _ZTI14TimezoneClient @ 50 NONAME
+ _ZTV14TimezoneClient @ 51 NONAME
+ _ZThn8_N14TimezoneClientD0Ev @ 52 NONAME
+ _ZThn8_N14TimezoneClientD1Ev @ 53 NONAME
+
--- a/clock/clockmw/clocktimezone/inc/timezoneclient.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockmw/clocktimezone/inc/timezoneclient.h Thu Jul 22 16:32:51 2010 +0100
@@ -70,7 +70,7 @@
private:
static TimezoneClient *mTimezoneClient;
- static int mReferenceCount;
+ static bool mReferenceCount;
// TODO: still refatoring
public:
--- a/clock/clockmw/clocktimezone/src/timezoneclient.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockmw/clocktimezone/src/timezoneclient.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -31,6 +31,7 @@
#include "timezoneclient.h"
#include "clockcommon.h"
#include "clockserverclt.h"
+#include "clockprivatecrkeys.h"
const int KDaysInWeek(7);
const int KZerothRule(0);
@@ -45,7 +46,7 @@
*/
TimezoneClient* TimezoneClient::mTimezoneClient = 0;
-int TimezoneClient::mReferenceCount = 0;
+bool TimezoneClient::mReferenceCount = false;
/*!
Call this funtion to instantiate the TimezoneClient class.
*/
@@ -53,9 +54,9 @@
{
if (!mTimezoneClient) {
mTimezoneClient = new TimezoneClient();
+ mReferenceCount = true;
}
- mReferenceCount++;
return mTimezoneClient;
}
@@ -64,9 +65,7 @@
*/
void TimezoneClient::deleteInstance()
{
- mReferenceCount--;
-
- if (0 == mReferenceCount) {
+ if (mReferenceCount) {
delete mTimezoneClient;
mTimezoneClient = 0;
}
@@ -77,11 +76,7 @@
*/
bool TimezoneClient::isNull()
{
- bool deleted = false;
- if (0 == mReferenceCount) {
- deleted = true;
- }
- return deleted;
+ return !mReferenceCount;
}
/*!
--- a/clock/clockmw/eabi/clockalarmclientu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,28 +0,0 @@
-EXPORTS
- _ZN11AlarmClient11deleteAlarmEi @ 1 NONAME
- _ZN11AlarmClient11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
- _ZN11AlarmClient11qt_metacastEPKc @ 3 NONAME
- _ZN11AlarmClient12getAlarmInfoEiR9AlarmInfo @ 4 NONAME
- _ZN11AlarmClient12getAlarmListER5QListI9AlarmInfoE @ 5 NONAME
- _ZN11AlarmClient12notifyChangeEi @ 6 NONAME
- _ZN11AlarmClient12stopListenerEv @ 7 NONAME
- _ZN11AlarmClient13setAlarmStateE10AlarmStateR11TAlarmState @ 8 NONAME
- _ZN11AlarmClient13setAlarmStateE11TAlarmStateR10AlarmState @ 9 NONAME
- _ZN11AlarmClient13startListenerEv @ 10 NONAME
- _ZN11AlarmClient16staticMetaObjectE @ 11 NONAME DATA 16
- _ZN11AlarmClient17alarmStateChangedEi @ 12 NONAME
- _ZN11AlarmClient17toggleAlarmStatusEii @ 13 NONAME
- _ZN11AlarmClient18setAlarmRepeatTypeE15AlarmRepeatTypeR22TAlarmRepeatDefinition @ 14 NONAME
- _ZN11AlarmClient18setAlarmRepeatTypeE22TAlarmRepeatDefinitionR15AlarmRepeatType @ 15 NONAME
- _ZN11AlarmClient19getStaticMetaObjectEv @ 16 NONAME
- _ZN11AlarmClient8setAlarmER9AlarmInfo @ 17 NONAME
- _ZN11AlarmClientC1EP7QObject @ 18 NONAME
- _ZN11AlarmClientC2EP7QObject @ 19 NONAME
- _ZN11AlarmClientD0Ev @ 20 NONAME
- _ZN11AlarmClientD1Ev @ 21 NONAME
- _ZN11AlarmClientD2Ev @ 22 NONAME
- _ZNK11AlarmClient10metaObjectEv @ 23 NONAME
- _ZTI11AlarmClient @ 24 NONAME
- _ZTV11AlarmClient @ 25 NONAME
- _ZN11AlarmClient18deleteSnoozedAlarmEi @ 26 NONAME
-
--- a/clock/clockmw/eabi/clocksettingsutilityu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-EXPORTS
- _ZN15SettingsUtility10dateFormatER11QStringList @ 1 NONAME
- _ZN15SettingsUtility10snoozeTimeER11QStringList @ 2 NONAME
- _ZN15SettingsUtility10timeFormatER11QStringList @ 3 NONAME
- _ZN15SettingsUtility11qt_metacallEN11QMetaObject4CallEiPPv @ 4 NONAME
- _ZN15SettingsUtility11qt_metacastEPKc @ 5 NONAME
- _ZN15SettingsUtility11setWorkdaysERK7QString @ 6 NONAME
- _ZN15SettingsUtility12setClockTypeERK7QString @ 7 NONAME
- _ZN15SettingsUtility13dateSeparatorER11QStringList @ 8 NONAME
- _ZN15SettingsUtility13setDateFormatERK7QString @ 9 NONAME
- _ZN15SettingsUtility13setSnoozeTimeEi @ 10 NONAME
- _ZN15SettingsUtility13setTimeFormatERK7QString @ 11 NONAME
- _ZN15SettingsUtility13timeSeparatorER11QStringList @ 12 NONAME
- _ZN15SettingsUtility14setStartOfWeekEi @ 13 NONAME
- _ZN15SettingsUtility15settingsChangedE19SettingsItemChanged7QString @ 14 NONAME
- _ZN15SettingsUtility16dateFormatStringEv @ 15 NONAME
- _ZN15SettingsUtility16setDateSeparatorERK7QString @ 16 NONAME
- _ZN15SettingsUtility16setTimeSeparatorERK7QString @ 17 NONAME
- _ZN15SettingsUtility16staticMetaObjectE @ 18 NONAME DATA 16
- _ZN15SettingsUtility16timeFormatStringEv @ 19 NONAME
- _ZN15SettingsUtility19getStaticMetaObjectEv @ 20 NONAME
- _ZN15SettingsUtility4dateEv @ 21 NONAME
- _ZN15SettingsUtility4timeEv @ 22 NONAME
- _ZN15SettingsUtility8workdaysER11QStringList @ 23 NONAME
- _ZN15SettingsUtility9clockTypeER11QStringList @ 24 NONAME
- _ZN15SettingsUtilityC1EP7QObject @ 25 NONAME
- _ZN15SettingsUtilityC2EP7QObject @ 26 NONAME
- _ZN15SettingsUtilityD0Ev @ 27 NONAME
- _ZN15SettingsUtilityD1Ev @ 28 NONAME
- _ZN15SettingsUtilityD2Ev @ 29 NONAME
- _ZNK15SettingsUtility10metaObjectEv @ 30 NONAME
- _ZTI15SettingsUtility @ 31 NONAME
- _ZTV15SettingsUtility @ 32 NONAME
-
--- a/clock/clockmw/eabi/clockstopwatchengineu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-EXPORTS
- _ZN15StopwatchEngine10startTimerEv @ 1 NONAME
- _ZN15StopwatchEngine4RunLEv @ 2 NONAME
- _ZN15StopwatchEngine8DoCancelEv @ 3 NONAME
- _ZN15StopwatchEngine9stopTimerEv @ 4 NONAME
- _ZN15StopwatchEngineC1EP17StopwatchObserver @ 5 NONAME
- _ZN15StopwatchEngineC2EP17StopwatchObserver @ 6 NONAME
- _ZN15StopwatchEngineD0Ev @ 7 NONAME
- _ZN15StopwatchEngineD1Ev @ 8 NONAME
- _ZN15StopwatchEngineD2Ev @ 9 NONAME
- _ZTI15StopwatchEngine @ 10 NONAME
- _ZTV15StopwatchEngine @ 11 NONAME
-
--- a/clock/clockmw/eabi/timezoneclientu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,55 +0,0 @@
-EXPORTS
- _ZN14TimezoneClient10intToMonthEi @ 1 NONAME
- _ZN14TimezoneClient11cityUpdatedEv @ 2 NONAME
- _ZN14TimezoneClient11getInstanceEv @ 3 NONAME
- _ZN14TimezoneClient11listUpdatedEv @ 4 NONAME
- _ZN14TimezoneClient11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
- _ZN14TimezoneClient11qt_metacastEPKc @ 6 NONAME
- _ZN14TimezoneClient11setDateTimeE9QDateTime @ 7 NONAME
- _ZN14TimezoneClient11timechangedEv @ 8 NONAME
- _ZN14TimezoneClient12eventMonitorERK13XQSettingsKeyRK8QVariant @ 9 NONAME
- _ZN14TimezoneClient12getCountriesER4QMapI7QStringiE @ 10 NONAME
- _ZN14TimezoneClient12getDstRulesLER9QDateTimeS1_i @ 11 NONAME
- _ZN14TimezoneClient12getLocationsEv @ 12 NONAME
- _ZN14TimezoneClient12timeUpdateOnEv @ 13 NONAME
- _ZN14TimezoneClient13saveLocationsERK5QListI12LocationInfoE @ 14 NONAME
- _ZN14TimezoneClient14deleteInstanceEv @ 15 NONAME
- _ZN14TimezoneClient14populateCitiesEv @ 16 NONAME
- _ZN14TimezoneClient15getLocationInfoEiiR12LocationInfo @ 17 NONAME
- _ZN14TimezoneClient15mReferenceCountE @ 18 NONAME DATA 4
- _ZN14TimezoneClient15mTimezoneClientE @ 19 NONAME DATA 4
- _ZN14TimezoneClient15setTimeUpdateOnEb @ 20 NONAME
- _ZN14TimezoneClient16getDstZoneOffsetEi @ 21 NONAME
- _ZN14TimezoneClient16getUtcDstOffsetLERiRK5CTzId @ 22 NONAME
- _ZN14TimezoneClient16staticMetaObjectE @ 23 NONAME DATA 16
- _ZN14TimezoneClient17checkForDstChangeER9AlarmInfo @ 24 NONAME
- _ZN14TimezoneClient17getAllTimeZoneIdsEv @ 25 NONAME
- _ZN14TimezoneClient17getSavedLocationsEv @ 26 NONAME
- _ZN14TimezoneClient17getStandardOffsetEi @ 27 NONAME
- _ZN14TimezoneClient19environmentCallbackEPv @ 28 NONAME
- _ZN14TimezoneClient19getCitiesForCountryEiR4QMapI7QStringiE @ 29 NONAME
- _ZN14TimezoneClient19getCurrentZoneInfoLEv @ 30 NONAME
- _ZN14TimezoneClient19getStaticMetaObjectEv @ 31 NONAME
- _ZN14TimezoneClient20getCityGroupIdByNameERK7QString @ 32 NONAME
- _ZN14TimezoneClient21autoTimeUpdateChangedEi @ 33 NONAME
- _ZN14TimezoneClient21createWorldClockModelEv @ 34 NONAME
- _ZN14TimezoneClient21getAllTimeZoneOffsetsEv @ 35 NONAME
- _ZN14TimezoneClient21locationSelectorModelEv @ 36 NONAME
- _ZN14TimezoneClient21setAsCurrentLocationLER12LocationInfo @ 37 NONAME
- _ZN14TimezoneClient24getCityOffsetByNameAndIdERK7QStringi @ 38 NONAME
- _ZN14TimezoneClient24getCountriesForUTCOffsetEi @ 39 NONAME
- _ZN14TimezoneClient5dstOnEi @ 40 NONAME
- _ZN14TimezoneClient6isNullEv @ 41 NONAME
- _ZN14TimezoneClient7addCityEiR7QStringi @ 42 NONAME
- _ZN14TimezoneClient8isDSTOnLEi @ 43 NONAME
- _ZN14TimezoneClientC1Ev @ 44 NONAME
- _ZN14TimezoneClientC2Ev @ 45 NONAME
- _ZN14TimezoneClientD0Ev @ 46 NONAME
- _ZN14TimezoneClientD1Ev @ 47 NONAME
- _ZN14TimezoneClientD2Ev @ 48 NONAME
- _ZNK14TimezoneClient10metaObjectEv @ 49 NONAME
- _ZTI14TimezoneClient @ 50 NONAME
- _ZTV14TimezoneClient @ 51 NONAME
- _ZThn8_N14TimezoneClientD0Ev @ 52 NONAME
- _ZThn8_N14TimezoneClientD1Ev @ 53 NONAME
-
--- a/clock/clockui/bwins/clockalarmeditoru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ??1ClockAlarmEditor@@UAE@XZ @ 1 NONAME ; ClockAlarmEditor::~ClockAlarmEditor(void)
- ?showAlarmEditor@ClockAlarmEditor@@QAEXXZ @ 2 NONAME ; void ClockAlarmEditor::showAlarmEditor(void)
- ??0ClockAlarmEditor@@QAE@AAVAlarmClient@@HPAVQObject@@@Z @ 3 NONAME ; ClockAlarmEditor::ClockAlarmEditor(class AlarmClient &, int, class QObject *)
-
--- a/clock/clockui/bwins/clockappcontrolleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,4 +0,0 @@
-EXPORTS
- ??1ClockAppController@@UAE@XZ @ 1 NONAME ; ClockAppController::~ClockAppController(void)
- ??0ClockAppController@@QAE@PAVQObject@@@Z @ 2 NONAME ; ClockAppController::ClockAppController(class QObject *)
-
--- a/clock/clockui/bwins/clockcityselectionlistu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-EXPORTS
- ??_EClockCitySelectionList@@UAE@I@Z @ 1 NONAME ; ClockCitySelectionList::~ClockCitySelectionList(unsigned int)
- ??1ClockCitySelectionList@@UAE@XZ @ 2 NONAME ; ClockCitySelectionList::~ClockCitySelectionList(void)
- ?d_func@ClockCitySelectionList@@ABEPBVClockCitySelectionListPrivate@@XZ @ 3 NONAME ; class ClockCitySelectionListPrivate const * ClockCitySelectionList::d_func(void) const
- ?citySelected@ClockCitySelectionList@@IAEXULocationInfo@@@Z @ 4 NONAME ; void ClockCitySelectionList::citySelected(struct LocationInfo)
- ?trUtf8@ClockCitySelectionList@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString ClockCitySelectionList::trUtf8(char const *, char const *)
- ?qt_metacast@ClockCitySelectionList@@UAEPAXPBD@Z @ 6 NONAME ; void * ClockCitySelectionList::qt_metacast(char const *)
- ??0ClockCitySelectionList@@QAE@PAVQObject@@@Z @ 7 NONAME ; ClockCitySelectionList::ClockCitySelectionList(class QObject *)
- ?closeCityList@ClockCitySelectionList@@QAEXXZ @ 8 NONAME ; void ClockCitySelectionList::closeCityList(void)
- ?trUtf8@ClockCitySelectionList@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString ClockCitySelectionList::trUtf8(char const *, char const *, int)
- ?qt_metacall@ClockCitySelectionList@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int ClockCitySelectionList::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??0ClockCitySelectionList@@QAE@PAVTimezoneClient@@PAVQObject@@@Z @ 11 NONAME ; ClockCitySelectionList::ClockCitySelectionList(class TimezoneClient *, class QObject *)
- ?metaObject@ClockCitySelectionList@@UBEPBUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const * ClockCitySelectionList::metaObject(void) const
- ?d_func@ClockCitySelectionList@@AAEPAVClockCitySelectionListPrivate@@XZ @ 13 NONAME ; class ClockCitySelectionListPrivate * ClockCitySelectionList::d_func(void)
- ?showCityList@ClockCitySelectionList@@QAEXXZ @ 14 NONAME ; void ClockCitySelectionList::showCityList(void)
- ?staticMetaObject@ClockCitySelectionList@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const ClockCitySelectionList::staticMetaObject
- ?tr@ClockCitySelectionList@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString ClockCitySelectionList::tr(char const *, char const *, int)
- ?tr@ClockCitySelectionList@@SA?AVQString@@PBD0@Z @ 17 NONAME ; class QString ClockCitySelectionList::tr(char const *, char const *)
- ?getStaticMetaObject@ClockCitySelectionList@@SAABUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const & ClockCitySelectionList::getStaticMetaObject(void)
-
--- a/clock/clockui/bwins/clocksettingsviewu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ??0ClockSettingsView@@QAE@PAVQObject@@@Z @ 1 NONAME ; ClockSettingsView::ClockSettingsView(class QObject *)
- ?loadSettingsView@ClockSettingsView@@QAEXXZ @ 2 NONAME ; void ClockSettingsView::loadSettingsView(void)
- ??1ClockSettingsView@@UAE@XZ @ 3 NONAME ; ClockSettingsView::~ClockSettingsView(void)
-
--- a/clock/clockui/bwins/clockviewmanageru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ?showView@ClockViewManager@@QAEXW4ClockViews@@@Z @ 1 NONAME ; void ClockViewManager::showView(enum ClockViews)
- ??1ClockViewManager@@UAE@XZ @ 2 NONAME ; ClockViewManager::~ClockViewManager(void)
- ??0ClockViewManager@@QAE@AAVClockAppControllerIf@@PAVQObject@@@Z @ 3 NONAME ; ClockViewManager::ClockViewManager(class ClockAppControllerIf &, class QObject *)
-
--- a/clock/clockui/bwins/clockviewsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-EXPORTS
- ??1ClockWorldView@@UAE@XZ @ 1 NONAME ; ClockWorldView::~ClockWorldView(void)
- ??1ClockMainView@@UAE@XZ @ 2 NONAME ; ClockMainView::~ClockMainView(void)
- ?setupView@ClockWorldView@@QAEXAAVClockAppControllerIf@@PAVClockDocLoader@@@Z @ 3 NONAME ; void ClockWorldView::setupView(class ClockAppControllerIf &, class ClockDocLoader *)
- ??0ClockMainView@@QAE@PAVQGraphicsItem@@@Z @ 4 NONAME ; ClockMainView::ClockMainView(class QGraphicsItem *)
- ??0ClockWorldView@@QAE@PAVQGraphicsItem@@@Z @ 5 NONAME ; ClockWorldView::ClockWorldView(class QGraphicsItem *)
- ?setupView@ClockMainView@@QAEXAAVClockAppControllerIf@@PAVClockDocLoader@@@Z @ 6 NONAME ; void ClockMainView::setupView(class ClockAppControllerIf &, class ClockDocLoader *)
- ??0ClockHomeCityItem@@QAE@PAVQGraphicsItem@@@Z @ 7 NONAME ; ClockHomeCityItem::ClockHomeCityItem(class QGraphicsItem *)
- ??1ClockHomeCityItem@@UAE@XZ @ 8 NONAME ; ClockHomeCityItem::~ClockHomeCityItem(void)
- ?setupAfterViewReady@ClockMainView@@QAEXXZ @ 9 NONAME ; void ClockMainView::setupAfterViewReady(void)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockalarmeditor/bwins/clockalarmeditoru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ??1ClockAlarmEditor@@UAE@XZ @ 1 NONAME ; ClockAlarmEditor::~ClockAlarmEditor(void)
+ ?showAlarmEditor@ClockAlarmEditor@@QAEXXZ @ 2 NONAME ; void ClockAlarmEditor::showAlarmEditor(void)
+ ??0ClockAlarmEditor@@QAE@AAVAlarmClient@@HPAVQObject@@@Z @ 3 NONAME ; ClockAlarmEditor::ClockAlarmEditor(class AlarmClient &, int, class QObject *)
+
--- a/clock/clockui/clockalarmeditor/clockalarmeditor.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockalarmeditor/clockalarmeditor.pro Thu Jul 22 16:32:51 2010 +0100
@@ -51,7 +51,8 @@
clockalarmcustomitem.h \
clockalarmeditordefines.h
-RESOURCES += \
- clockalarmeditor.qrc
+RESOURCES += clockalarmeditor.qrc
+
+TRANSLATIONS += clockalarmeditor.ts
# End of file --Don't remove this.
--- a/clock/clockui/clockalarmeditor/data/clockalarmeditor.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockalarmeditor/data/clockalarmeditor.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -1,8 +1,4 @@
<!DOCTYPE RCC><RCC version="1.0">
- <qresource prefix="/translations">
- <file alias="clockalarmeditor" >translations/clockalarmeditor.qm</file>
- </qresource>
-
<qresource prefix="/xml">
<file alias="clockalarmeditor.docml">xml/clockalarmeditor.docml</file>
</qresource>
Binary file clock/clockui/clockalarmeditor/data/translations/clockalarmeditor.qm has changed
--- a/clock/clockui/clockalarmeditor/data/translations/clockalarmeditor.ts Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,376 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
-<context>
-<message numerus="no" id="txt_common_common_clock">
- <comment>Title for Date and time settings view</comment>
- <source>Clock</source>
- <translation variants="no">Clock</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_note_alarm_occurs_every_week_on_1_at_2">
- <comment>Note displayed after alarm is set (every week)</comment>
- <source>Alarm occurs every week on %1 at %2</source>
- <translation variants="no">Alarm occurs every week on %1 at %2</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_formlabel_val_alarm">
- <comment>Default value for Description label in Alarm editor view</comment>
- <source>Alarm</source>
- <translation variants="no">Alarm</translation>
- <extra-loc-layout_id>qtl_dataform_description_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_occurence">
- <comment>Label for Occurence in Alarm editor</comment>
- <source>Occurence</source>
- <translation variants="no">Occurence</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_tumbler_title_alarm_time">
- <comment>Title for the time picker tumbler widget </comment>
- <source>Alarm time</source>
- <translation variants="no">Alarm time</translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Tumbler</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>Tu</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_opt_discard_changes">
- <comment>When user edits an already existed alarm in Alarm editor form, he can "Discard changes" from Options menu and the prevoius values are saved.</comment>
- <source>Discard changes</source>
- <translation variants="no">Discard changes</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dpopinfo_time_to_alarm_1_hrs_and_2_min">
- <comment>Note displayed after alarm is set (time remaining) (hrs, min)</comment>
- <source>Time to alarm %1 hours and %2 minute</source>
- <translation variants="no">Time to alarm %1 hours and %2 minute</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dpopinfo_alarm_will_occur_at_1_after_au">
- <comment>Popup Information which comes after setting the alarm.</comment>
- <source>Alarm will occur at %1 after automatic daylight saving update</source>
- <translation variants="no">Alarm will occur at %1 after automatic daylight saving update</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_new_alarm">
- <comment>When user taps on "New alarm" toolbar button in Clock main view, alarm editor opens with the subtitle "New alarm".</comment>
- <source>New alarm</source>
- <translation variants="no">New alarm</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_alarm">
- <comment>When user taps on already existed alarm in the alarm list, the alarm editor opens with subtitle "Alarm"</comment>
- <source>Alarm</source>
- <translation variants="no">Alarm</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_repeat_daily">
- <comment>2nd dropdown list value for Occurence label in Alarm editor view</comment>
- <source>Repeat daily</source>
- <translation variants="no">Repeat daily</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_2_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_tumbler_title_time">
- <comment></comment>
- <source>Time</source>
- <translation variants="no">Time</translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Tumbler</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>Tu</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_setlabel_dst">
- <comment></comment>
- <source>DST</source>
- <translation variants="no">DST</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_time">
- <comment>Label for Time in Alarm editor view</comment>
- <source>Time</source>
- <translation variants="no">Time</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_once">
- <comment>1st dropdown list value for Occurence label in Alarm editor view</comment>
- <source>Once</source>
- <translation variants="no">Once</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_alarm_sound">
- <comment>Label for Alarm sound in Alarm editor view</comment>
- <source>Alarm sound</source>
- <translation variants="no">Alarm sound</translation>
- <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_monday">
- <comment>1st dropdown list value for Day label in Alarm editor view</comment>
- <source>Monday</source>
- <translation variants="no">Monday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dpopinfo_alarm_occurs_every_day_at_1">
- <comment>Note displayed after alarm is set (Everyday Time)</comment>
- <source>Alarm occurs every day at %1</source>
- <translation variants="no">Alarm occurs every day at %1</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_thursday">
- <comment>4th dropdown list value for Day label in Alarm editor view</comment>
- <source>Thursday</source>
- <translation variants="no">Thursday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_friday">
- <comment>5th dropdown list value for Day label in Alarm editor view</comment>
- <source>Friday</source>
- <translation variants="no">Friday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_5_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_repeat_on_workdays">
- <comment>4th dropdown list value for Occurence label in Alarm editor view</comment>
- <source>Repeat on workdays</source>
- <translation variants="no">Repeat on workdays</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_sunday">
- <comment>7th dropdown list value for Day label in Alarm editor view</comment>
- <source>Sunday</source>
- <translation variants="no">Sunday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_7_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dpopinfo_time_to_alarm_1_hr_and_2_min">
- <comment>Note displayed after alarm is set (time remaining)</comment>
- <source>Time to alarm %1 hour and %2 minute</source>
- <translation variants="no">Time to alarm %1 hour and %2 minute</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_tuesday">
- <comment>2nd dropdown list value for Day label in Alarm editor view</comment>
- <source>Tuesday</source>
- <translation variants="no">Tuesday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_2_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_note_alarm_occurs_once_only_on_next_1_a">
- <comment>Note displayed after alarm is set (only once)</comment>
- <source>Alarm occurs once only on next %1 at %2</source>
- <translation variants="no">Alarm occurs once only on next %1 at %2</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dpopinfo_time_to_alarm_1_hr_and_2_mins">
- <comment>Note displayed after alarm is set (time remaining) (hr, mins)</comment>
- <source>Time to alarm %1 hour and %2 minutes</source>
- <translation variants="no">Time to alarm %1 hour and %2 minutes</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_tumbler_title_alarm_date">
- <comment>Title for the date picker tumbler widget </comment>
- <source>Alarm date</source>
- <translation variants="no">Alarm date</translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Tumbler</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>Tu</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_tumbler_title_date">
- <comment></comment>
- <source>Date</source>
- <translation variants="no">Date</translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Tumbler</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>Tu</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_common_gmt">
- <comment></comment>
- <source>GMT</source>
- <translation variants="no">GMT</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_day">
- <comment>Label for Day in Alarm editor view</comment>
- <source>Day</source>
- <translation variants="no">Day</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_repeat_weekly">
- <comment>3rd dropdown list value for Occurence label in Alarm editor view</comment>
- <source>Repeat weekly</source>
- <translation variants="no">Repeat weekly</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_3_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dpopinfo_time_to_alarm_1_hrs_and_2_mins">
- <comment>Note displayed after alarm is set (time remaining) (hrs, mins)</comment>
- <source>Time to alarm %1 hours and %2 minutes</source>
- <translation variants="no">Time to alarm %1 hours and %2 minutes</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_note_alarm_occurs_workdays_at_1">
- <comment>Note displayed after alarm is set (workdays)</comment>
- <source>Alarm occurs workdays at %1</source>
- <translation variants="no">Alarm occurs workdays at %1</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_opt_delete">
- <comment>When user creates a new alarm in Alarm editor form, he can "Delete" this alarm via Options menu.</comment>
- <source>Delete</source>
- <translation variants="no">Delete</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_saturday">
- <comment>6th dropdown list value for Day label in Alarm editor view</comment>
- <source>Saturday</source>
- <translation variants="no">Saturday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_6_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_wednesday">
- <comment>3rd dropdown list value for Day label in Alarm editor view</comment>
- <source>Wednesday</source>
- <translation variants="no">Wednesday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_3_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_formlabel_description">
- <comment>Label for Description in Alarm editor view</comment>
- <source>Description</source>
- <translation variants="no">Description</translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-</context>
-</TS>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockalarmeditor/eabi/clockalarmeditoru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,8 @@
+EXPORTS
+ _ZN16ClockAlarmEditor15showAlarmEditorEv @ 1 NONAME
+ _ZN16ClockAlarmEditorC1ER11AlarmClientiP7QObject @ 2 NONAME
+ _ZN16ClockAlarmEditorC2ER11AlarmClientiP7QObject @ 3 NONAME
+ _ZN16ClockAlarmEditorD0Ev @ 4 NONAME
+ _ZN16ClockAlarmEditorD1Ev @ 5 NONAME
+ _ZN16ClockAlarmEditorD2Ev @ 6 NONAME
+
--- a/clock/clockui/clockalarmeditor/inc/clockalarmeditor.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockalarmeditor/inc/clockalarmeditor.h Thu Jul 22 16:32:51 2010 +0100
@@ -36,12 +36,13 @@
class HbAction;
class HbDateTimePicker;
class HbDialog;
+class HbTranslator;
class XQSettingsManager;
class XQSettingsKey;
class AlarmClient;
class TimezoneClient;
class ClockAlarmCustomItem;
-class QTranslator;
+
class ClockAlarmEditor : public QObject
{
@@ -118,7 +119,7 @@
AlarmClient &mAlarmClient;
AlarmInfo mAlarmInfo;
TimezoneClient *mTimezoneClient;
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
};
#endif // CLOCKALARMEDITOR_H
--- a/clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -32,13 +32,13 @@
#include <HbExtendedLocale>
#include <HbGroupBox>
#include <HbDocumentLoader>
-#include <HbApplication>
+#include <HbTranslator>
#include <xqsettingsmanager.h>
#include <xqsettingskey.h>
-#include <QTranslator>
+
// User includes
-#include "clockcommon.h"
+#include "clockprivatecrkeys.h"
#include "clockalarmeditor.h"
#include "alarmclient.h"
#include "settingsutility.h"
@@ -85,14 +85,9 @@
mAlarmClient(alarmClient)
{
// Load the translation file and install the alarmeditor specific translator
- mTranslator = new QTranslator;
- //QString lang = QLocale::system().name();
- //QString path = "Z:/resource/qt/translations/";
- mTranslator->load("clockalarmeditor",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneditor_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
-
+ mTranslator = new HbTranslator("clockalarmeditor");
+ mTranslator->loadCommon();
+
// create the timezone client object
mTimezoneClient = TimezoneClient::getInstance();
// Create the settings manager.
@@ -107,7 +102,7 @@
// TODO: do i need to delete this object ??
SettingsUtility *settingsUtil = new SettingsUtility(this);
mTimeFormat = settingsUtil->timeFormatString();
-
+
// Get start of week from the locale.
HbExtendedLocale locale = HbExtendedLocale::system();
mStartOfWeek = locale.startOfWeek();
@@ -176,11 +171,7 @@
*/
ClockAlarmEditor::~ClockAlarmEditor()
{
- if(!mTimezoneClient->isNull()) {
- mTimezoneClient->deleteInstance();
- }
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -398,7 +389,7 @@
mTimePickerDialog = new HbDialog;
mTimePickerDialog->setTimeout(HbDialog::NoTimeout);
mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
-
+ mTimePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true);
// Set the heading for the dialog.
HbLabel * timeLabel =
new HbLabel(hbTrId("txt_tumbler_title_alarm_time"),
@@ -408,6 +399,7 @@
SettingsUtility *settingsUtil = new SettingsUtility(this);
QStringList timeSeparator;
int index = settingsUtil->timeFormat(timeSeparator);
+
QString tumblerDisplayFormat =
mTimeFormat.replace(timeSeparator.at(index), QString("."));
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockappcontroller/bwins/clockappcontrolleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,4 @@
+EXPORTS
+ ??1ClockAppController@@UAE@XZ @ 1 NONAME ; ClockAppController::~ClockAppController(void)
+ ??0ClockAppController@@QAE@PAVQObject@@@Z @ 2 NONAME ; ClockAppController::ClockAppController(class QObject *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockappcontroller/eabi/clockappcontrolleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ _ZN18ClockAppControllerC1EP7QObject @ 1 NONAME
+ _ZN18ClockAppControllerC2EP7QObject @ 2 NONAME
+ _ZN18ClockAppControllerD0Ev @ 3 NONAME
+ _ZN18ClockAppControllerD1Ev @ 4 NONAME
+ _ZN18ClockAppControllerD2Ev @ 5 NONAME
+
--- a/clock/clockui/clockapplication/clockapplication.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockapplication/clockapplication.pro Thu Jul 22 16:32:51 2010 +0100
@@ -34,6 +34,8 @@
LIBS += \
-lclockappcontroller
+
+ SKINICON = qtg_large_clock
}
SOURCES += main.cpp
--- a/clock/clockui/clockapplication/src/main.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockapplication/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -18,7 +18,7 @@
// System includes
#include <QtGui>
#include <QScopedPointer>
-#include <QTranslator>
+#include <HbTranslator>
#include <HbApplication>
#include <HbMainWindow>
@@ -43,10 +43,9 @@
window.setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
// Load the translation file.
- QTranslator translator;
- translator.load("clock", ":/translations");
- app.installTranslator(&translator);
-
+ HbTranslator translator("clock");
+ translator.loadCommon();
+
// Construct the application controller.
QScopedPointer<ClockAppController> controller(new ClockAppController);
Q_UNUSED(controller)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockcityselectionlist/bwins/clockcityselectionlistu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+EXPORTS
+ ??_EClockCitySelectionList@@UAE@I@Z @ 1 NONAME ; ClockCitySelectionList::~ClockCitySelectionList(unsigned int)
+ ??1ClockCitySelectionList@@UAE@XZ @ 2 NONAME ; ClockCitySelectionList::~ClockCitySelectionList(void)
+ ?d_func@ClockCitySelectionList@@ABEPBVClockCitySelectionListPrivate@@XZ @ 3 NONAME ; class ClockCitySelectionListPrivate const * ClockCitySelectionList::d_func(void) const
+ ?citySelected@ClockCitySelectionList@@IAEXULocationInfo@@@Z @ 4 NONAME ; void ClockCitySelectionList::citySelected(struct LocationInfo)
+ ?trUtf8@ClockCitySelectionList@@SA?AVQString@@PBD0@Z @ 5 NONAME ; class QString ClockCitySelectionList::trUtf8(char const *, char const *)
+ ?qt_metacast@ClockCitySelectionList@@UAEPAXPBD@Z @ 6 NONAME ; void * ClockCitySelectionList::qt_metacast(char const *)
+ ??0ClockCitySelectionList@@QAE@PAVQObject@@@Z @ 7 NONAME ; ClockCitySelectionList::ClockCitySelectionList(class QObject *)
+ ?closeCityList@ClockCitySelectionList@@QAEXXZ @ 8 NONAME ; void ClockCitySelectionList::closeCityList(void)
+ ?trUtf8@ClockCitySelectionList@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString ClockCitySelectionList::trUtf8(char const *, char const *, int)
+ ?qt_metacall@ClockCitySelectionList@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int ClockCitySelectionList::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ??0ClockCitySelectionList@@QAE@PAVTimezoneClient@@PAVQObject@@@Z @ 11 NONAME ; ClockCitySelectionList::ClockCitySelectionList(class TimezoneClient *, class QObject *)
+ ?metaObject@ClockCitySelectionList@@UBEPBUQMetaObject@@XZ @ 12 NONAME ; struct QMetaObject const * ClockCitySelectionList::metaObject(void) const
+ ?d_func@ClockCitySelectionList@@AAEPAVClockCitySelectionListPrivate@@XZ @ 13 NONAME ; class ClockCitySelectionListPrivate * ClockCitySelectionList::d_func(void)
+ ?showCityList@ClockCitySelectionList@@QAEXXZ @ 14 NONAME ; void ClockCitySelectionList::showCityList(void)
+ ?staticMetaObject@ClockCitySelectionList@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const ClockCitySelectionList::staticMetaObject
+ ?tr@ClockCitySelectionList@@SA?AVQString@@PBD0H@Z @ 16 NONAME ; class QString ClockCitySelectionList::tr(char const *, char const *, int)
+ ?tr@ClockCitySelectionList@@SA?AVQString@@PBD0@Z @ 17 NONAME ; class QString ClockCitySelectionList::tr(char const *, char const *)
+ ?getStaticMetaObject@ClockCitySelectionList@@SAABUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const & ClockCitySelectionList::getStaticMetaObject(void)
+
--- a/clock/clockui/clockcityselectionlist/clockcityselectionlist.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockcityselectionlist/clockcityselectionlist.pro Thu Jul 22 16:32:51 2010 +0100
@@ -43,7 +43,7 @@
clockcityselectionlist.cpp \
clockcityselectionlist_p.cpp \
clockcitylistproxymodel.cpp \
- clockcityselectionlistprototype.cpp
+
HEADERS += \
clockcityselectionlist.h \
@@ -51,9 +51,10 @@
clockcitylistproxymodel.h \
clockcityselectionlistdefines.h \
clockcityselectionlistcommon.h \
- clockcityselectionlistprototype.h
RESOURCES += \
clockcityselectionlist.qrc
+
+TRANSLATIONS += clockcityselectionlist.ts
# End of file --Don't remove this.
--- a/clock/clockui/clockcityselectionlist/data/clockcityselectionlist.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockcityselectionlist/data/clockcityselectionlist.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -2,12 +2,4 @@
<qresource prefix="/xml">
<file alias="clockcityselectionlist.docml">xml/clockcityselectionlist.docml</file>
</qresource>
- <qresource prefix= "/style">
- <file alias="clockcityselectionlistprototype.css">style/clockcityselectionlistprototype.css</file>
- <file alias="clockcityselectionlistprototype.widgetml">style/clockcityselectionlistprototype.widgetml</file>
- </qresource>
- <qresource prefix="/translations">
- <file alias="clockcityselectionlist" >translations/clockcityselectionlist.qm</file>
- </qresource>
-
</RCC>
--- a/clock/clockui/clockcityselectionlist/data/style/clockcityselectionlistprototype.css Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
-ClockCitySelectionListPrototype[layoutName="cityselectionlist-default"]{
- layout: cityselectionlist-default;
-}
-
-ClockCitySelectionListPrototype::cityNameItem[layoutName="cityselectionlist-default"]{
- font-variant: secondary;
- text-height: var(hb-param-text-height-secondary);
- text-line-count-min: 1;
- text-line-count-max: 2;
- text-align: left;
- left: -var(hb-param-margin-gene-left);
- top: -var(hb-param-margin-gene-top);
- right: var(hb-param-margin-gene-right);
- bottom: var(hb-param-margin-gene-bottom);
-}
--- a/clock/clockui/clockcityselectionlist/data/style/clockcityselectionlistprototype.widgetml Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-<hbwidget version="0.1" type="ClockCitySelectionListPrototype">
- <layout name="cityselectionlist-default" type="mesh">
- <meshitem src="cityNameItem" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="cityNameItem" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="cityNameItem" srcEdge="LEFT" dst="" dstEdge="LEFT" />
- <meshitem src="cityNameItem" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
- </layout>
-</hbwidget>
Binary file clock/clockui/clockcityselectionlist/data/translations/clockcityselectionlist.qm has changed
--- a/clock/clockui/clockcityselectionlist/data/translations/clockcityselectionlist.ts Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,86 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
-<context>
-<message numerus="no" id="txt_common_common_clock">
- <comment>Title for Date and time settings view</comment>
- <source>Clock</source>
- <translation variants="no">Clock</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_formlabel_city_name">
- <comment>Form label for city name in add own city (popup) data entry form</comment>
- <source>City name</source>
- <translation variants="no">City name</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_City list_P07</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_formlabel_timezone">
- <comment>Form label for timezone in add own city (popup) data entry form</comment>
- <source>Timezone</source>
- <translation variants="no">Timezone</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_City list_P07</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_formlabel_country">
- <comment>Form label for country in add own city (popup) data entry form</comment>
- <source>Country</source>
- <translation variants="no">Country</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_City list_P07</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_setlabel_dst">
- <comment></comment>
- <source>DST</source>
- <translation variants="no">DST</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_city_list">
- <comment>Subtitle for City list</comment>
- <source>City list</source>
- <translation variants="no">City list</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_City list_P07</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_common_gmt">
- <comment></comment>
- <source>GMT</source>
- <translation variants="no">GMT</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_opt_add_own_city">
- <comment>"Add own city" from Options menu in City list </comment>
- <source>Add own city</source>
- <translation variants="no">Add own city</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_City list_P07</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-</context>
-</TS>
--- a/clock/clockui/clockcityselectionlist/data/xml/clockcityselectionlist.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockcityselectionlist/data/xml/clockcityselectionlist.docml Thu Jul 22 16:32:51 2010 +0100
@@ -6,7 +6,7 @@
<widget name="clockCitySelectionView" type="HbView">
<widget name="clockCitySelectionWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string locid="txt_clock_subhead_city_list" name="titleText" value="City list"/>
+ <string locid="txt_clock_subhead_city_list" name="heading" value="City list"/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
</widget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockcityselectionlist/eabi/clockcityselectionlistu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,19 @@
+EXPORTS
+ _ZN22ClockCitySelectionList11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+ _ZN22ClockCitySelectionList11qt_metacastEPKc @ 2 NONAME
+ _ZN22ClockCitySelectionList12citySelectedE12LocationInfo @ 3 NONAME
+ _ZN22ClockCitySelectionList12showCityListEv @ 4 NONAME
+ _ZN22ClockCitySelectionList13closeCityListEv @ 5 NONAME
+ _ZN22ClockCitySelectionList16staticMetaObjectE @ 6 NONAME DATA 16
+ _ZN22ClockCitySelectionList19getStaticMetaObjectEv @ 7 NONAME
+ _ZN22ClockCitySelectionListC1EP14TimezoneClientP7QObject @ 8 NONAME
+ _ZN22ClockCitySelectionListC1EP7QObject @ 9 NONAME
+ _ZN22ClockCitySelectionListC2EP14TimezoneClientP7QObject @ 10 NONAME
+ _ZN22ClockCitySelectionListC2EP7QObject @ 11 NONAME
+ _ZN22ClockCitySelectionListD0Ev @ 12 NONAME
+ _ZN22ClockCitySelectionListD1Ev @ 13 NONAME
+ _ZN22ClockCitySelectionListD2Ev @ 14 NONAME
+ _ZNK22ClockCitySelectionList10metaObjectEv @ 15 NONAME
+ _ZTI22ClockCitySelectionList @ 16 NONAME
+ _ZTV22ClockCitySelectionList @ 17 NONAME
+
--- a/clock/clockui/clockcityselectionlist/inc/clockcityselectionlist.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockcityselectionlist/inc/clockcityselectionlist.h Thu Jul 22 16:32:51 2010 +0100
@@ -27,10 +27,9 @@
#include "clockdatatypes.h"
// Forward declarations
+class HbTranslator;
class ClockCitySelectionListPrivate;
class TimezoneClient;
-class QTranslator;
-
class CLOCKCITYSELECTIONLIST_EXPORT ClockCitySelectionList : public QObject
{
@@ -52,7 +51,7 @@
ClockCitySelectionListPrivate *d_ptr;
Q_DECLARE_PRIVATE_D(d_ptr, ClockCitySelectionList)
Q_DISABLE_COPY(ClockCitySelectionList)
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
};
#endif // CLOCKCITYSELECTIONLIST_H
--- a/clock/clockui/clockcityselectionlist/inc/clockcityselectionlistprototype.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-* The header file for class ClockCitySelectionListPrototype.
-*
-*/
-
-#ifndef CLOCKCITYSELECTIONLISTPROTOTYPE_H
-#define CLOCKCITYSELECTIONLISTPROTOTYPE_H
-
-// System includes
-#include <HbListViewItem>
-
-// Forward declarations
-class QGraphicsItem;
-class HbAbstractViewItem;
-class HbTextItem;
-
-class ClockCitySelectionListPrototype : public HbListViewItem
-{
- Q_OBJECT
-
-public:
- explicit ClockCitySelectionListPrototype(QGraphicsItem *parent = 0);
- virtual ~ClockCitySelectionListPrototype();
-
-public:
- HbAbstractViewItem *createItem();
- void updateChildItems();
-
-private:
- HbTextItem *mCityNameItem;
-};
-
-#endif // CLOCKCITYSELECTIONLISTPROTOTYPE_H
-
-// End of file --Don't remove this.
--- a/clock/clockui/clockcityselectionlist/src/clockcityselectionlist.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockcityselectionlist/src/clockcityselectionlist.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -17,8 +17,7 @@
*/
//System Include
-#include<HbApplication>
-#include<QTranslator>
+#include<HbTranslator>
// User includes
@@ -55,13 +54,8 @@
d_ptr(new ClockCitySelectionListPrivate(client, this))
{
// Load the translation file and install the editor specific translator
- mTranslator = new QTranslator;
- //QString lang = QLocale::system().name();
- //QString path = "Z:/resource/qt/translations/";
- mTranslator->load("clockcityselectionlist",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneditor_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
+ mTranslator = new HbTranslator("clockcityselectionlist");
+ mTranslator->loadCommon();
}
/*!
@@ -74,20 +68,13 @@
d_ptr(new ClockCitySelectionListPrivate(0, this))
{
// Load the translation file and install the editor specific translator
- mTranslator = new QTranslator;
- //QString lang = QLocale::system().name();
- //QString path = "Z:/resource/qt/translations/";
- mTranslator->load("clockcityselectionlist",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneditor_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
-
+ mTranslator = new HbTranslator("clockcityselectionlist");
+ mTranslator->loadCommon();
}
ClockCitySelectionList::~ClockCitySelectionList()
{
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
--- a/clock/clockui/clockcityselectionlist/src/clockcityselectionlist_p.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockcityselectionlist/src/clockcityselectionlist_p.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -40,7 +40,7 @@
#include "clockcityselectionlist.h"
#include "clockcitylistproxymodel.h"
#include "clockcityselectionlistcommon.h"
-#include "clockcityselectionlistprototype.h"
+
#include "timezoneclient.h"
#include "clockdatatypes.h"
@@ -77,7 +77,7 @@
*/
ClockCitySelectionListPrivate::~ClockCitySelectionListPrivate()
{
- if (mOwnsClient && !mClient->isNull()) {
+ if (mOwnsClient) {
mClient->deleteInstance();
}
if (mLoader) {
@@ -123,6 +123,7 @@
displayString += info.cityName;
displayString += ", ";
displayString += info.countryName;
+ mListModel->setData(index, displayString, Qt::DisplayRole);
mListModel->setData(index, displayString, Qt::UserRole + 100);
// Now save the timezone and city group ids.
@@ -244,6 +245,7 @@
mAddOwnCityDialog = new HbDialog;
mAddOwnCityDialog->setTimeout(HbDialog::NoTimeout);
mAddOwnCityDialog->setDismissPolicy(HbDialog::NoDismiss);
+ mAddOwnCityDialog->setAttribute(Qt::WA_DeleteOnClose, true);
// Set the heading text
HbLabel *titlelabel = new HbLabel(hbTrId("txt_clk_opt_add_own_city"));
@@ -401,15 +403,6 @@
mProxyModel->setSourceModel(mListModel);
mProxyModel->setFilterRole(Qt::UserRole + 100);
- // Construct the custom list item prototype.
- ClockCitySelectionListPrototype *prototype =
- new ClockCitySelectionListPrototype;
-
- // Loader the custom list view layout.
- HbStyleLoader::registerFilePath(":/style/");
- mListView->setLayoutName("cityselectionlist-default");
- mListView->setItemPrototype(prototype);
-
// Construct the model for the list.
QTimer::singleShot(1, this, SLOT(populateListModel()));
--- a/clock/clockui/clockcityselectionlist/src/clockcityselectionlistprototype.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,90 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-* The definition file for class ClockCitySelectionListPrototype.
-*
-*/
-
-// System includes
-#include <QGraphicsItem>
-#include <HbTextItem>
-
-// User includes
-#include "clockcityselectionlistprototype.h"
-
-/*!
- \class ClockCitySelectionListPrototype
-
- This is the custom prototype class for HbListView. It sub-classes
- HbListViewItem and re-implements HbListViewItem::createItem() and
- HbListViewItem::updateChildItems().
-
- \sa HbListViewItem, HbAbstractViewItem.
- */
-
-/*!
- Default constructor.
-
- \param parent of type QGraphicsItem.
- */
-ClockCitySelectionListPrototype::ClockCitySelectionListPrototype(
- QGraphicsItem *parent)
-:HbListViewItem(parent),
- mCityNameItem(0)
-{
- // Nothing yet.
-}
-
-/*!
- Destructor.
- */
-ClockCitySelectionListPrototype::~ClockCitySelectionListPrototype()
-{
- if (mCityNameItem) {
- delete mCityNameItem;
- mCityNameItem = 0;
- }
-}
-
-/*!
- From HbListViewItem.
- Constructs the custom list view item.
-
- \sa HbListViewItem, HbAbstractViewItem.
- */
-HbAbstractViewItem *ClockCitySelectionListPrototype::createItem()
-{
- return new ClockCitySelectionListPrototype(*this);
-}
-
-/*!
- From HbListViewItem.
- Updates the child items of the cutsom prototype.
-
- \sa HbListViewItem, HbAbstractViewItem.
- */
-void ClockCitySelectionListPrototype::updateChildItems()
-{
- HbListViewItem::updateChildItems();
-
- if (!mCityNameItem) {
- mCityNameItem = new HbTextItem(this);
- style()->setItemName(mCityNameItem, "cityNameItem");
- mCityNameItem->setTextWrapping(Hb::TextWordWrap);
- }
- mCityNameItem->setText(
- modelIndex().data(Qt::UserRole + 100).value<QString>());
-}
-
-// End of file --Don't remove this.
--- a/clock/clockui/clockplugins/clockplugins.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockplugins/clockplugins.pro Thu Jul 22 16:32:51 2010 +0100
@@ -17,7 +17,8 @@
TEMPLATE = subdirs
SUBDIRS += \
- datetimesettingsplugin
+ datetimesettingsplugin \
+ clocksettingsviewplugin
CONFIG += ordered
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockplugins/clocksettingsviewplugin/clocksettingsviewplugin.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,59 @@
+#
+# Copyright (c) 2009 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:
+# Project specification file for clocksettingsviewplugin.
+#
+
+TEMPLATE = lib
+TARGET = clocksettingsviewplugin
+CONFIG += hb plugin
+
+DEPENDPATH += . \
+ ./inc \
+ ./src
+
+INCLUDEPATH += . \
+ ../../../inc \
+ ../../clocksettingsview/inc \
+ ../../../clockmw/clocksettingsutility/inc
+
+LIBS += \
+ -lclocksettingsview
+
+HEADERS += \
+ clocksettingsviewplugin.h \
+ ../../../../organizer_plat/clock_settingsview_plugin_api/inc/clocksettingsviewinterface.h
+
+SOURCES += \
+ clocksettingsviewplugin.cpp
+
+symbian: {
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.UID3 = 0x2003157C
+
+ load(data_caging_paths)
+ # plugin stub deployment
+
+ plugin.sources = $${TARGET}.dll
+ plugin.path = $$QT_PLUGINS_BASE_DIR/clock
+ DEPLOYMENT += plugin
+
+ # for target
+ BLD_INF_RULES.prj_exports += \
+ "./qmakepluginstubs/clocksettingsviewplugin.qtplugin /$$HW_ZDIR$$RESOURCE_FILES_DIR/qt/plugins/clock/clocksettingsviewplugin.qtplugin"
+}
+
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockplugins/clocksettingsviewplugin/inc/clocksettingsviewplugin.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,42 @@
+/*
+* Copyright (c) 2009 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:
+* Header file for ClockSettingsViewPlugin class.
+*
+*/
+
+
+#ifndef CLOCKSETTINGSVIEWPLUGIN_H_
+#define CLOCKSETTINGSVIEWPLUGIN_H_
+
+// System includes
+#include <QObject>
+#include <clocksettingsviewinterface.h>
+
+class ClockSettingsViewPlugin : public QObject, public ClockSettingsViewInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(ClockSettingsViewInterface)
+
+public:
+ ClockSettingsViewPlugin();
+ ~ClockSettingsViewPlugin();
+
+ void launchRegionalSettingsView();
+
+};
+
+#endif /* CLOCKSETTINGSVIEWPLUGIN_H_ */
+
+// End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockplugins/clocksettingsviewplugin/src/clocksettingsviewplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2009 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:
+* Definition file for class ClockSettingsViewPlugin.
+*
+*/
+// System includes
+#include <QtPlugin>
+
+// User includes
+#include "clockregionalsettingsview.h"
+#include "clocksettingsviewplugin.h"
+
+/*!
+ \class ClockSettingsViewPlugin
+
+ \brief The class ClockSettingsViewPlugin is a plugin to show
+ clock settings View
+*/
+
+/*!
+ Constructor.
+ */
+ClockSettingsViewPlugin::ClockSettingsViewPlugin()
+{
+}
+
+/*!
+ Destructor.
+ */
+ClockSettingsViewPlugin::~ClockSettingsViewPlugin()
+{
+}
+
+/*!
+ Launch the clock regional settings view.
+ */
+void ClockSettingsViewPlugin::launchRegionalSettingsView()
+{
+ //The view is removed from main window and deleted once you select back on view
+ ClockRegionalSettingsView *view = new ClockRegionalSettingsView();
+ view->showView();
+}
+
+Q_EXPORT_PLUGIN2(clocksettingsviewplugin, ClockSettingsViewPlugin)
+
+// End of file --Don't remove this
--- a/clock/clockui/clockplugins/datetimesettingsplugin/src/datetimesettingsplugin.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockplugins/datetimesettingsplugin/src/datetimesettingsplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -54,7 +54,7 @@
createSettingFormItemData(
CpItemDataHelper &itemDataHelper) const
{
- HbIcon* icon = new HbIcon();
+ HbIcon icon ;
HbExtendedLocale locale = HbExtendedLocale::system();
QString timeInfo = locale.format(
QTime::currentTime(), r_qtn_time_usual_with_zero);
@@ -68,7 +68,7 @@
QList<CpSettingFormItemData*> entryItemList;
CpSettingFormItemData *entryItem = new DateTimeSettingsView(
itemDataHelper,hbTrId("txt_cp_main_view_list_time_date"),
- displayString,*icon);
+ displayString,icon);
entryItemList.append(entryItem);
return entryItemList;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/bwins/clocksettingsviewu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,8 @@
+EXPORTS
+ ??0ClockSettingsView@@QAE@PAVQObject@@@Z @ 1 NONAME ; ClockSettingsView::ClockSettingsView(class QObject *)
+ ??1ClockRegionalSettingsView@@UAE@XZ @ 2 NONAME ; ClockRegionalSettingsView::~ClockRegionalSettingsView(void)
+ ?loadSettingsView@ClockSettingsView@@QAEXXZ @ 3 NONAME ; void ClockSettingsView::loadSettingsView(void)
+ ??1ClockSettingsView@@UAE@XZ @ 4 NONAME ; ClockSettingsView::~ClockSettingsView(void)
+ ?showView@ClockRegionalSettingsView@@QAEXXZ @ 5 NONAME ; void ClockRegionalSettingsView::showView(void)
+ ??0ClockRegionalSettingsView@@QAE@PAVQObject@@@Z @ 6 NONAME ; ClockRegionalSettingsView::ClockRegionalSettingsView(class QObject *)
+
--- a/clock/clockui/clocksettingsview/clocksettingsview.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/clocksettingsview.pro Thu Jul 22 16:32:51 2010 +0100
@@ -28,6 +28,7 @@
../clockcityselectionlist/inc \
../../inc
+
DEPENDPATH += \
./inc \
./src \
@@ -37,6 +38,7 @@
TARGET.CAPABILITY += ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
TARGET.UID3 = 0x10005906
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
LIBS += \
-ltimezoneclient \
@@ -60,5 +62,7 @@
RESOURCES += \
clocksettingsview.qrc
+
+TRANSLATIONS += clocksettingsview.ts
# End of file --Don't remove this.
--- a/clock/clockui/clocksettingsview/data/clocksettingsview.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/data/clocksettingsview.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -3,7 +3,4 @@
<file alias="clocksettingsview.docml">xml/clocksettingsview.docml</file>
<file alias="clockregionalsettingsview.docml">xml/clockregionalsettingsview.docml</file>
</qresource>
- <qresource prefix="/translations">
- <file alias="clocksettingsview" >translations/clocksettingsview.qm</file>
- </qresource>
</RCC>
Binary file clock/clockui/clocksettingsview/data/translations/clocksettingsview.qm has changed
--- a/clock/clockui/clocksettingsview/data/translations/clocksettingsview.ts Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,369 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
-<context>
-<message numerus="no" id="txt_common_common_clock">
- <comment>Title for Date and time settings view</comment>
- <source>Clock</source>
- <translation variants="no">Clock</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_time_format">
- <comment>1st label in Regional date & time settings view</comment>
- <source>Time format</source>
- <translation variants="no">Time format</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_cp_main_view_list_time_info_date_info">
- <comment>The time and date information will be displayed in 2nd row</comment>
- <source>%1, %2</source>
- <translation variants="no">%1, %2</translation>
- <extra-loc-layout_id>qtl_list_sec_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>CP main view_time & date plugin_P11</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>CP</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_button_digital">
- <comment>Setting item to clock display type. Tap to toggle values.</comment>
- <source>Digital</source>
- <translation variants="no">Digital</translation>
- <extra-loc-layout_id>qtl_dataform_button_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_cp_main_view_list_time_date">
- <comment>This text is displayed in 1st row</comment>
- <source>Time & date</source>
- <translation variants="no">Time & date</translation>
- <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>CP main view_time & date plugin_P11</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>CP</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_mm_dd_yyyy">
- <comment>2nd value in combo box list for Date format label</comment>
- <source>mm dd yyyy</source>
- <translation variants="no">mm dd yyyy</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_2_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_date_format">
- <comment>3rd field in Regional date & time settings view</comment>
- <source>Date format</source>
- <translation variants="no">Date format</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_button_regional_date_time_settings">
- <comment>Tapping on this button opens advanced date and time view</comment>
- <source>Regional date & time settings</source>
- <translation variants="no">Regional date & time settings</translation>
- <extra-loc-layout_id>qtl_dataform_button_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_regional_date_time_settings">
- <comment>Sub-title for Regiional date & time settings</comment>
- <source>Regional date & time settings</source>
- <translation variants="no">Regional date & time settings</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_formlabel_place">
- <comment>5th label for Place in Clock settings view</comment>
- <source>Place</source>
- <translation variants="no">Place</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_24_hour">
- <comment>1st Value in combo box list for Time format label</comment>
- <source>24 hour</source>
- <translation variants="no">24 hour</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_setlabel_dst">
- <comment></comment>
- <source>DST</source>
- <translation variants="no">DST</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_monday">
- <comment>1st dropdown list value for Day label in Alarm editor view</comment>
- <source>Monday</source>
- <translation variants="no">Monday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_thursday">
- <comment>4th dropdown list value for Day label in Alarm editor view</comment>
- <source>Thursday</source>
- <translation variants="no">Thursday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_friday">
- <comment>5th dropdown list value for Day label in Alarm editor view</comment>
- <source>Friday</source>
- <translation variants="no">Friday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_5_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_button_analog">
- <comment>Setting item to clock display type. Tap to toggle values.</comment>
- <source>Analog</source>
- <translation variants="no">Analog</translation>
- <extra-loc-layout_id>qtl_dataform_button_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_week_starts_on">
- <comment>6th field in Regional date & time settings view</comment>
- <source>Week starts on</source>
- <translation variants="no">Week starts on</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_sunday">
- <comment>7th dropdown list value for Day label in Alarm editor view</comment>
- <source>Sunday</source>
- <translation variants="no">Sunday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_7_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_yyyy_mm_dd">
- <comment>3rd value in combo box list for Date format label</comment>
- <source>yyyy mm dd</source>
- <translation variants="no">yyyy mm dd</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_3_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_tuesday">
- <comment>2nd dropdown list value for Day label in Alarm editor view</comment>
- <source>Tuesday</source>
- <translation variants="no">Tuesday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_2_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_common_gmt">
- <comment></comment>
- <source>GMT</source>
- <translation variants="no">GMT</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_use_network_date_time">
- <comment>1st label in Date and time settings view</comment>
- <source>Use network date & time</source>
- <translation variants="no">Use network date & time</translation>
- <extra-loc-layout_id>qtl_checkbox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_time_separator">
- <comment>Subtitle for the time seperator drop down list</comment>
- <source>Time separator</source>
- <translation variants="no">Time separator</translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_settings">
- <comment>Sub-title for Settings view</comment>
- <source>Settings</source>
- <translation variants="no">Settings</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_date_separator">
- <comment>Subtitle for the date seperator drop down list</comment>
- <source>Date separator</source>
- <translation variants="no">Date separator</translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_workdays">
- <comment>Label for Workdays in Alarm editor</comment>
- <source>Workdays</source>
- <translation variants="no">Workdays</translation>
- <extra-loc-layout_id>qtl_dataform_heading_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_date">
- <comment>Label to the date field (picker) in the settings view</comment>
- <source>Date</source>
- <translation variants="no">Date</translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_time">
- <comment>Label to the time field (picker) in the settings view</comment>
- <source>Time</source>
- <translation variants="no">Time</translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_12_hour">
- <comment>2nd value in combo box list for Time format label</comment>
- <source>12 hour</source>
- <translation variants="no">12 hour</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_2_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_alarm_snooze_time">
- <comment>Primary text label for Clock Type</comment>
- <source>Alarm snooze time</source>
- <translation variants="no">Alarm snooze time</translation>
- <extra-loc-layout_id>qtl_dataform_pri_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="yes" id="txt_clock_set_ln_mins">
- <comment>Alarm snooze time details in the list box (5mins, 10mins, 15mins, 30mins)</comment>
- <source>%Ln mins</source>
- <translation>
- <numerusform variants = "no">%Ln mins</numerusform>
- <numerusform variants = "no">%Ln mins</numerusform>
- </translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>set</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_setlabel_clock_type">
- <comment>Primary text label for Clock Type</comment>
- <source>Clock Type</source>
- <translation variants="no">Clock Type</translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>setlabel_5</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_date_time">
- <comment>Sub-title for Date & time settings view</comment>
- <source>Date & time</source>
- <translation variants="no">Date & time</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_1</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_saturday">
- <comment>6th dropdown list value for Day label in Alarm editor view</comment>
- <source>Saturday</source>
- <translation variants="no">Saturday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_6_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_wednesday">
- <comment>3rd dropdown list value for Day label in Alarm editor view</comment>
- <source>Wednesday</source>
- <translation variants="no">Wednesday</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Alarm editor_P03</extra-loc-viewid>
- <extra-loc-positionid>setlabel_3_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_dd_mm_yyyy">
- <comment>1st value in combo box list for Date format label</comment>
- <source>dd mm yyyy</source>
- <translation variants="no">dd mm yyyy</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_Date & time settings_P04_3</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-</context>
-</TS>
--- a/clock/clockui/clocksettingsview/data/xml/clockregionalsettingsview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/data/xml/clockregionalsettingsview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -3,7 +3,7 @@
<widget name="regionalSettingsView" type="HbView">
<widget name="regionalSettingsWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string locid="txt_clock_subhead_regional_date_time_settings" name="titleText" value="Regional date & time setting"/>
+ <string locid="txt_clock_subhead_regional_date_time_settings" name="heading" value="Regional date & time setting"/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
</widget>
--- a/clock/clockui/clocksettingsview/data/xml/clocksettingsview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/data/xml/clocksettingsview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -3,7 +3,7 @@
<widget name="clockSettingsView" type="HbView">
<widget name="clockSettingsViewWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string locid="txt_clock_subhead_settings" name="titleText" value="Settings"/>
+ <string locid="txt_clock_subhead_settings" name="heading" value="Settings"/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
</widget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/eabi/clocksettingsviewu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,14 @@
+EXPORTS
+ _ZN17ClockSettingsView16loadSettingsViewEv @ 1 NONAME
+ _ZN17ClockSettingsViewC1EP7QObject @ 2 NONAME
+ _ZN17ClockSettingsViewC2EP7QObject @ 3 NONAME
+ _ZN17ClockSettingsViewD0Ev @ 4 NONAME
+ _ZN17ClockSettingsViewD1Ev @ 5 NONAME
+ _ZN17ClockSettingsViewD2Ev @ 6 NONAME
+ _ZN25ClockRegionalSettingsView8showViewEv @ 7 NONAME
+ _ZN25ClockRegionalSettingsViewC1EP7QObject @ 8 NONAME
+ _ZN25ClockRegionalSettingsViewC2EP7QObject @ 9 NONAME
+ _ZN25ClockRegionalSettingsViewD0Ev @ 10 NONAME
+ _ZN25ClockRegionalSettingsViewD1Ev @ 11 NONAME
+ _ZN25ClockRegionalSettingsViewD2Ev @ 12 NONAME
+
--- a/clock/clockui/clocksettingsview/inc/clockregionalsettingsview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/inc/clockregionalsettingsview.h Thu Jul 22 16:32:51 2010 +0100
@@ -23,9 +23,9 @@
#include <QObject>
#include <QPointer>
#include <QModelIndex>
-
// User includes
#include "settingsutility.h"
+#include "clocksettingsdefines.h"
// Forward declarations
class HbView;
@@ -35,21 +35,23 @@
class HbDataFormModelItem;
class HbListWidget;
class HbComboBox;
-class QTranslator;
+class HbTranslator;
class ClockSettingsDocLoader;
class SettingsCustomItem;
+
class ClockRegionalSettingsView : public QObject
{
Q_OBJECT
public:
- ClockRegionalSettingsView(SettingsUtility &utility, QObject *parent = 0);
- virtual ~ClockRegionalSettingsView();
+ CLOCKSETTINGSVIEW_EXPORT ClockRegionalSettingsView(QObject *parent = 0);
+ CLOCKSETTINGSVIEW_EXPORT virtual ~ClockRegionalSettingsView();
public:
- void showView();
-
+ CLOCKSETTINGSVIEW_EXPORT void showView();
+public slots:
+ void updateWeekStartOn();
private slots:
void handleBackAction();
void handleItemDisplayed(const QModelIndex &index);
@@ -65,6 +67,8 @@
void createModel();
void populateFormModel();
QStringList weekdayList();
+ void updateWeekDays();
+
private:
QStringList mTimeFormatStringList;
@@ -73,8 +77,6 @@
QStringList mDateSeparatorStringList;
HbView *mView;
- HbAction *mBackAction;
-
QPointer<HbDataForm> mForm;
QPointer<HbDataFormModel> mFormModel;
@@ -86,9 +88,9 @@
QPointer<HbListWidget> mWorkdaysItem;
ClockSettingsDocLoader *mLoader;
- SettingsUtility &mSettingsUtility;
+ SettingsUtility *mSettingsUtility;
SettingsCustomItem *mCustomPrototype;
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
};
#endif // CLOCKREGIONALSETTINGSVIEW_H
--- a/clock/clockui/clocksettingsview/inc/clocksettingsview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/inc/clocksettingsview.h Thu Jul 22 16:32:51 2010 +0100
@@ -37,7 +37,7 @@
class SettingsUtility;
class ClockSettingsDocLoader;
class ClockSettingsView;
-class QTranslator;
+class HbTranslator;
class XQSettingsManager;
class XQSettingsKey;
@@ -61,6 +61,7 @@
void handleNetworkTimeStateChange(int state);
void handleAutoTimeUpdateChange(int value);
void handleAlarmSnoozeTimeChanged(int index);
+ void handleClockTypeChanged();
void eventMonitor(const XQSettingsKey& key, const QVariant& value);
private:
@@ -82,15 +83,15 @@
HbDataFormModelItem *mTimeDataFormItem;
HbDataFormModelItem *mDateDataFormItem;
HbDataFormModelItem *mPlaceDataFormItem;
+ HbDataFormModelItem *mClockTypeItem;
HbDataFormModelItem *mAlarmSnoozeItem;
-
ClockSettingsDocLoader *mDocLoader;
SettingsUtility *mSettingsUtility;
TimezoneClient *mTimezoneClient;
XQSettingsManager *mSettingsManager;
XQSettingsKey *mAlarmSnoozeTimeKey;
QHash<int, int> mAlarmSnoozeTimeHash;
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
};
#endif // CLOCKSETTINGSVIEW_H
--- a/clock/clockui/clocksettingsview/src/clockregionalsettingsview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/src/clockregionalsettingsview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -21,17 +21,16 @@
#include <HbAction>
#include <HbDataForm>
#include <HbDataFormModel>
+#include <HbExtendedLocale>
#include <HbDataFormModelItem>
#include <HbDataFormViewItem>
#include <HbMainWindow>
#include <HbInstance>
#include <HbPushButton>
-#include <HbExtendedLocale>
#include <HbListWidget>
#include <HbComboBox>
#include <HbListWidgetItem>
-#include <HbApplication>
-#include <QTranslator>
+#include <HbTranslator>
// User includes
#include "clockregionalsettingsview.h"
@@ -49,25 +48,21 @@
/*!
Default constructor.
*/
-ClockRegionalSettingsView::ClockRegionalSettingsView(
- SettingsUtility &utility, QObject *parent)
+ClockRegionalSettingsView::ClockRegionalSettingsView(QObject *parent)
:QObject(parent),
mView(0),
- mBackAction(0),
- mLoader(0),
- mSettingsUtility(utility)
+ mLoader(0)
{
// Construct the document loader.
mLoader = new ClockSettingsDocLoader;
+ // Construct the settignsutility.
+ mSettingsUtility = new SettingsUtility();
+
// Load the translation file and install the editor specific translator
- mTranslator = new QTranslator;
- //QString lang = QLocale::system().name();
- //QString path = "Z:/resource/qt/translations/";
- mTranslator->load("clocksettingsview",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneditor_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
+ mTranslator = new HbTranslator("clocksettingsview");
+ mTranslator->loadCommon();
+
// Create the custom prototype.
mCustomPrototype = new SettingsCustomItem();
}
@@ -81,8 +76,15 @@
delete mLoader;
mLoader = 0;
}
+
+ if (mSettingsUtility) {
+ delete mSettingsUtility;
+ mSettingsUtility = 0;
+ }
+ if(mFormModel){
+ delete mFormModel;
+ }
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -134,10 +136,10 @@
window->setCurrentView(mView);
// Add the back softkey.
- mBackAction = new HbAction(Hb::BackNaviAction);
- mView->setNavigationAction(mBackAction);
+ HbAction *backAction = new HbAction(Hb::BackNaviAction);
+ mView->setNavigationAction(backAction);
connect(
- mBackAction, SIGNAL(triggered()),
+ backAction, SIGNAL(triggered()),
this, SLOT(handleBackAction()));
}
@@ -233,8 +235,8 @@
*/
void ClockRegionalSettingsView::handleTimeFormatChange()
{
-// mSettingsUtility.setTimeFormat(mTimeFormatItem->text());
- mSettingsUtility.setTimeFormat(
+// mSettingsUtility->setTimeFormat(mTimeFormatItem->text());
+ mSettingsUtility->setTimeFormat(
mTimeFormatItem->contentWidgetData("text").toString());
}
@@ -244,8 +246,8 @@
*/
void ClockRegionalSettingsView::handleTimeSeparatorChange()
{
-// mSettingsUtility.setTimeSeparator(mTimeSeparatorItem->text());
- mSettingsUtility.setTimeSeparator(
+// mSettingsUtility->setTimeSeparator(mTimeSeparatorItem->text());
+ mSettingsUtility->setTimeSeparator(
mTimeSeparatorItem->contentWidgetData("text").toString());
}
@@ -253,7 +255,7 @@
*/
void ClockRegionalSettingsView::handleDateFormatChange(QString text)
{
- mSettingsUtility.setDateFormat(text);
+ mSettingsUtility->setDateFormat(text);
}
/*!
@@ -262,7 +264,7 @@
*/
void ClockRegionalSettingsView::handleDateSeparatorChange(QString text)
{
- mSettingsUtility.setDateSeparator(text);
+ mSettingsUtility->setDateSeparator(text);
}
/*!
@@ -278,34 +280,13 @@
case 5:
{
// The Start of week item.
- if (mStartOfWeekItem != 0) {
+ if (mStartOfWeekItem != 0)
+ {
int index = mStartOfWeekItem->currentIndex();
- mSettingsUtility.setStartOfWeek(index);
-
- QStringList weekdays = weekdayList();
- QString workdays = mCustomPrototype->workdaysSetting();
- QItemSelectionModel *model = 0;
- model = mWorkdaysItem->selectionModel();
-
- for (int i = 0, index = workdays.size() - 1;
- i < mWorkdaysItem->count(); ++i, index--) {
- QString str = weekdays[i];
- mWorkdaysItem->item(i)->setText(str);
-
- QChar ch = workdays.at(index);
- if ( ch == QChar('0')) {
- // Not a workday.
- model->select(
- model->model()->index(i,0),
- QItemSelectionModel::Deselect);
- } else {
- // Workday.
- model->select(
- model->model()->index(i,0),
- QItemSelectionModel::Select);
- }
- }
- }
+ mSettingsUtility->setStartOfWeek(index);
+ //update the week days
+ updateWeekDays();
+ }
}
break;
@@ -348,13 +329,13 @@
}
// Get the locale.
- HbExtendedLocale locale = HbExtendedLocale::system();
+ HbExtendedLocale locale = HbExtendedLocale::system();
// Time format item.
mTimeFormatItem = mFormModel->appendDataFormItem(
HbDataFormModelItem::ToggleValueItem,
hbTrId("txt_clock_setlabel_time_format"));
- int index = mSettingsUtility.timeFormat(mTimeFormatStringList);
+ int index = mSettingsUtility->timeFormat(mTimeFormatStringList);
if (0 == index) {
mTimeFormatItem->setContentWidgetData("text", mTimeFormatStringList[0]);
mTimeFormatItem->setContentWidgetData("additionalText", mTimeFormatStringList[1]);
@@ -370,7 +351,7 @@
mTimeSeparatorItem = mFormModel->appendDataFormItem(
HbDataFormModelItem::ToggleValueItem,
hbTrId("txt_clock_setlabel_time_separator"));
- index = mSettingsUtility.timeSeparator(mTimeSeparatorStringList);
+ index = mSettingsUtility->timeSeparator(mTimeSeparatorStringList);
if (0 == index) {
mTimeSeparatorItem->setContentWidgetData("text", mTimeSeparatorStringList[0]);
mTimeSeparatorItem->setContentWidgetData(
@@ -388,7 +369,7 @@
mDateFormatItem = mFormModel->appendDataFormItem(
HbDataFormModelItem::ComboBoxItem,
hbTrId("txt_clock_setlabel_date_format"));
- index = mSettingsUtility.dateFormat(mDateFormatStringList);
+ index = mSettingsUtility->dateFormat(mDateFormatStringList);
mDateFormatItem->setContentWidgetData("items", mDateFormatStringList);
mDateFormatItem->setContentWidgetData("currentIndex",index);
@@ -400,7 +381,7 @@
mDateSeparatorItem = mFormModel->appendDataFormItem(
HbDataFormModelItem::ComboBoxItem,
hbTrId("txt_clock_setlabel_date_separator"));
- index = mSettingsUtility.dateSeparator(mDateSeparatorStringList);
+ index = mSettingsUtility->dateSeparator(mDateSeparatorStringList);
mDateSeparatorItem->setContentWidgetData("items", mDateSeparatorStringList);
mDateSeparatorItem->setContentWidgetData("currentIndex",index);
@@ -469,4 +450,60 @@
return weekDays;
}
+
+/*!
+ update the start week on .
+ */
+
+void ClockRegionalSettingsView::updateWeekStartOn()
+{
+if (mStartOfWeekItem != 0)
+ {
+ HbExtendedLocale locale;
+ HbExtendedLocale::WeekDay weekdDayStart = locale.startOfWeek();
+ int currentDay = mStartOfWeekItem->currentIndex();
+ if(currentDay == weekdDayStart )
+ {
+ return;
+ }
+ else
+ {
+ mStartOfWeekItem->setCurrentIndex(weekdDayStart);
+ updateWeekDays();
+ }
+ }
+}
+
+/*!
+ update the week days .
+ */
+void ClockRegionalSettingsView::updateWeekDays()
+{
+QStringList weekdays = weekdayList();
+QString workdays = mCustomPrototype->workdaysSetting();
+QItemSelectionModel *model = 0;
+model = mWorkdaysItem->selectionModel();
+
+for (int i = 0, index = workdays.size() - 1;
+ i < mWorkdaysItem->count(); ++i, index--)
+ {
+ QString str = weekdays[i];
+ mWorkdaysItem->item(i)->setText(str);
+
+ QChar ch = workdays.at(index);
+ if ( ch == QChar('0'))
+ {
+ // Not a workday.
+ model->select(
+ model->model()->index(i,0),
+ QItemSelectionModel::Deselect);
+ }
+ else
+ {
+ // Workday.
+ model->select(
+ model->model()->index(i,0),
+ QItemSelectionModel::Select);}
+ }
+}
// End of file --Don't remove this.
--- a/clock/clockui/clocksettingsview/src/clocksettingsview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/src/clocksettingsview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -25,10 +25,10 @@
#include <HbLabel>
#include <HbPushButton>
#include <HbCheckBox>
-#include <HbApplication>
-#include <QTranslator>
+#include <HbTranslator>
#include <xqsettingsmanager.h>
#include <xqsettingskey.h>
+#include <clockdomaincrkeys.h>
// User includes
#include "clocksettingsview.h"
@@ -38,7 +38,6 @@
#include "timezoneclient.h"
#include "settingsdatatypes.h"
#include "settingscustomitem.h"
-#include "clockcommon.h"
/*!
\class ClockSettingsView
@@ -55,16 +54,10 @@
ClockSettingsView::ClockSettingsView(QObject *parent)
:QObject(parent)
{
- qDebug("clock: ClockSettingsView::ClockSettingsView() -->");
// Load the translation file and install the editor specific translator
- mTranslator = new QTranslator;
- //QString lang = QLocale::system().name();
- //QString path = "Z:/resource/qt/translations/";
- mTranslator->load("clocksettingsview",":/translations");
- // TODO: Load the appropriate .qm file based on locale
- //bool loaded = mTranslator->load("caleneditor_" + lang, path);
- HbApplication::instance()->installTranslator(mTranslator);
+ mTranslator = new HbTranslator("clocksettingsview");
+ mTranslator->loadCommon();
// Construct the settings utility.
mSettingsUtility = new SettingsUtility();
@@ -121,15 +114,18 @@
}
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
}
-
- if (!mTimezoneClient->isNull()) {
- mTimezoneClient->deleteInstance();
+ if(mSettingsUtility){
+ delete mSettingsUtility;
}
+
+ if(mSettingsModel){
+ delete mSettingsModel;
+ }
+
}
@@ -289,7 +285,7 @@
// Create the custom prototype.
QList <HbAbstractViewItem*> prototypes = mSettingsForm->itemPrototypes();
- SettingsCustomItem *customPrototype = new SettingsCustomItem();
+ SettingsCustomItem *customPrototype = new SettingsCustomItem(mSettingsForm);
prototypes.append(customPrototype);
mSettingsForm->setItemPrototypes(prototypes);
@@ -392,8 +388,28 @@
static_cast<HbDataFormModelItem::DataItemType>
(HbDataFormModelItem::CustomItemBase + RegionalSettingsItem);
mSettingsModel->appendDataFormItem(regionalSettingsItem);
-
- // Add the alarm snooze time item.
+
+ // Add the clock type item.
+ HbDataFormModelItem::DataItemType clockTypeSettingsItem =
+ static_cast<HbDataFormModelItem::DataItemType>
+ (HbDataFormModelItem::ToggleValueItem);
+ mClockTypeItem = mSettingsModel->appendDataFormItem(
+ clockTypeSettingsItem,hbTrId("txt_clock_setlabel_clock_type"));
+ QStringList clockTypeList;
+ int clockType = mSettingsUtility->clockType(clockTypeList);
+ int zeroIndex(0);
+ if( zeroIndex == clockType ){
+ mClockTypeItem->setContentWidgetData("text", clockTypeList[0]);
+ mClockTypeItem->setContentWidgetData("additionalText", clockTypeList[1]);
+ } else {
+ mClockTypeItem->setContentWidgetData("text", clockTypeList[1]);
+ mClockTypeItem->setContentWidgetData("additionalText", clockTypeList[0]);
+ }
+ mSettingsForm->addConnection(
+ mClockTypeItem, SIGNAL(clicked()),
+ this, SLOT(handleClockTypeChanged()));
+
+ // Add the alarm snooze time item.
mAlarmSnoozeItem = mSettingsModel->appendDataFormItem(
HbDataFormModelItem::ComboBoxItem,
hbTrId("txt_clock_setlabel_alarm_snooze_time"));
@@ -483,6 +499,15 @@
}
/*!
+ Slot which handles the clock type change..
+ */
+void ClockSettingsView::handleClockTypeChanged()
+{
+ mSettingsUtility->setClockType(
+ mClockTypeItem->contentWidgetData("text").toString());
+}
+
+/*!
Slot which is called when the value changes in cenrep.
\param key The key which got changed in cenrep.
--- a/clock/clockui/clocksettingsview/src/settingscustomitem.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clocksettingsview/src/settingscustomitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -63,9 +63,7 @@
*/
SettingsCustomItem::~SettingsCustomItem()
{
- if (!mTimezoneClient->isNull()) {
- mTimezoneClient->deleteInstance();
- }
+ // Nothing yet.
}
/*!
@@ -228,6 +226,7 @@
mTimePickerDialog = new HbDialog;
mTimePickerDialog->setTimeout(HbDialog::NoTimeout);
mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+ mTimePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true );
// Set the heading for the dialog.
HbLabel * timeLabel =
@@ -274,7 +273,8 @@
// Update the display text on form item.
mTimeWidget->setText(newTime.toString(timeFormatString));
// Update the system time.
- mTimezoneClient->setDateTime(QDateTime(QDate::currentDate(), newTime));
+ mTimezoneClient->setDateTime(
+ QDateTime(QDate::currentDate(), newTime));
}
} else if(mDatePickerDialog) {
// Get the time from the time picker.
@@ -288,7 +288,8 @@
// Update the display text on form item.
mDateWidget->setText(newDate.toString(dateFormatString));
// Update the system date.
- mTimezoneClient->setDateTime(QDateTime(newDate, QTime::currentTime()));
+ mTimezoneClient->setDateTime(
+ QDateTime(newDate, QTime::currentTime()));
}
}
}
@@ -306,6 +307,7 @@
mDatePickerDialog = new HbDialog;
mDatePickerDialog->setTimeout(HbDialog::NoTimeout);
mDatePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+ mDatePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true );
// Set the heading for the dialog.
HbLabel * timeLabel =
@@ -363,8 +365,11 @@
void SettingsCustomItem::launchRegSettingsView()
{
ClockRegionalSettingsView *view =
- new ClockRegionalSettingsView(*mSettingsUtility);
+ new ClockRegionalSettingsView();
+ connect(mTimezoneClient, SIGNAL(timechanged()),
+ view, SLOT(updateWeekStartOn()));
view->showView();
+
}
/*!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviewmanager/bwins/clockviewmanageru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ?showView@ClockViewManager@@QAEXW4ClockViews@@@Z @ 1 NONAME ; void ClockViewManager::showView(enum ClockViews)
+ ??1ClockViewManager@@UAE@XZ @ 2 NONAME ; ClockViewManager::~ClockViewManager(void)
+ ??0ClockViewManager@@QAE@AAVClockAppControllerIf@@PAVQObject@@@Z @ 3 NONAME ; ClockViewManager::ClockViewManager(class ClockAppControllerIf &, class QObject *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviewmanager/eabi/clockviewmanageru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,8 @@
+EXPORTS
+ _ZN16ClockViewManager8showViewE10ClockViews @ 1 NONAME
+ _ZN16ClockViewManagerC1ER20ClockAppControllerIfP7QObject @ 2 NONAME
+ _ZN16ClockViewManagerC2ER20ClockAppControllerIfP7QObject @ 3 NONAME
+ _ZN16ClockViewManagerD0Ev @ 4 NONAME
+ _ZN16ClockViewManagerD1Ev @ 5 NONAME
+ _ZN16ClockViewManagerD2Ev @ 6 NONAME
+
--- a/clock/clockui/clockviewmanager/src/clockviewmanager.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviewmanager/src/clockviewmanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -19,6 +19,8 @@
// System includes
#include <HbMainWindow>
#include <HbInstance>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // hbactivitymanager
// User includes
#include "clockviewmanager.h"
@@ -46,14 +48,44 @@
mAppControllerIf(controllerIf),
mWorldClockView(0)
{
- // Load the main view at the start up.
- loadMainView();
+ // Activity Reason from Activity Manager
+ int activityReason = qobject_cast<HbApplication*>(qApp)->activateReason();
+
+ if (Hb::ActivationReasonActivity == activityReason) {
+ // Application is started from an activity
+ // extract activity data
+ QVariant data = qobject_cast<HbApplication*>(qApp)->activateData();
+ // restore state from activity data
+ QByteArray serializedModel = data.toByteArray();
+ QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+ int activityId;
+ stream >> activityId;
+
+ if (MainView == activityId) {
+ // Load the main view at the start up.
+ loadMainView();
+ // Delay loading of other views till main view is loaded.
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ connect(
+ window, SIGNAL(viewReady()),
+ this, SLOT(loadOtherViews()));
- // Delay loading of other views till main view is loaded.
- HbMainWindow *window = hbInstance->allMainWindows().first();
- connect(
- window, SIGNAL(viewReady()),
- this, SLOT(loadOtherViews()));
+ }
+ else if (WorldClock == activityId) {
+ //no implentation yet, UI specs are not clear
+ }
+
+ }
+ else {
+ // Load the main view at the start up.
+ loadMainView();
+ // Delay loading of other views till main view is loaded.
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ connect(
+ window, SIGNAL(viewReady()),
+ this, SLOT(loadOtherViews()));
+ }
+
}
/*!
@@ -75,12 +107,21 @@
switch (view) {
case MainView:
+ // set captured screenshot as invalid as main view
+ // is the current view
+ mMainView->captureScreenShot(false);
window->removeView(window->currentView());
window->addView(mMainView);
window->setCurrentView(mMainView);
break;
case WorldClock:
+ if (mMainView) {
+ // capture main view as the screenshot for future use
+ // to save the main view as an activity, if application is
+ // exited/Quit from world view
+ mMainView->captureScreenShot(true);
+ }
window->removeView(window->currentView());
window->addView(mWorldClockView);
window->setCurrentView(mWorldClockView);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/bwins/clockviewsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,12 @@
+EXPORTS
+ ??1ClockWorldView@@UAE@XZ @ 1 NONAME ; ClockWorldView::~ClockWorldView(void)
+ ??1ClockMainView@@UAE@XZ @ 2 NONAME ; ClockMainView::~ClockMainView(void)
+ ?setupView@ClockWorldView@@QAEXAAVClockAppControllerIf@@PAVClockDocLoader@@@Z @ 3 NONAME ; void ClockWorldView::setupView(class ClockAppControllerIf &, class ClockDocLoader *)
+ ??0ClockMainView@@QAE@PAVQGraphicsItem@@@Z @ 4 NONAME ; ClockMainView::ClockMainView(class QGraphicsItem *)
+ ??0ClockWorldView@@QAE@PAVQGraphicsItem@@@Z @ 5 NONAME ; ClockWorldView::ClockWorldView(class QGraphicsItem *)
+ ?setupView@ClockMainView@@QAEXAAVClockAppControllerIf@@PAVClockDocLoader@@@Z @ 6 NONAME ; void ClockMainView::setupView(class ClockAppControllerIf &, class ClockDocLoader *)
+ ??0ClockHomeCityItem@@QAE@PAVQGraphicsItem@@@Z @ 7 NONAME ; ClockHomeCityItem::ClockHomeCityItem(class QGraphicsItem *)
+ ??1ClockHomeCityItem@@UAE@XZ @ 8 NONAME ; ClockHomeCityItem::~ClockHomeCityItem(void)
+ ?setupAfterViewReady@ClockMainView@@QAEXXZ @ 9 NONAME ; void ClockMainView::setupAfterViewReady(void)
+ ?captureScreenShot@ClockMainView@@QAEX_N@Z @ 10 NONAME ; void ClockMainView::captureScreenShot(bool)
+
--- a/clock/clockui/clockviews/data/clockviews.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/data/clockviews.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -2,10 +2,13 @@
<qresource prefix="/style">
<file alias="clockalarmlistitemprototype.css">style/clockalarmlistitemprototype.css</file>
<file alias="clockalarmlistitemprototype.widgetml">style/clockalarmlistitemprototype.widgetml</file>
- <file alias="clockhomecityitem.css">style/clockhomecityitem.css</file>
- <file alias="clockhomecityitem.widgetml">style/clockhomecityitem.widgetml</file>
- <file alias="hblistviewitem.css">style/hblistviewitem.css</file>
- <file alias="hblistviewitem.widgetml">style/hblistviewitem.widgetml</file>
+ <file alias="clockalarmlistitemprototype_color.css">style/clockalarmlistitemprototype_color.css</file>
+ <file alias="clockhomecityitem.css">style/clockhomecityitem.css</file>
+ <file alias="clockhomecityitem.widgetml">style/clockhomecityitem.widgetml</file>
+ <file alias="clockhomecityitem_color.css">style/clockhomecityitem_color.css</file>
+ <file alias="hblistviewitem.css">style/hblistviewitem.css</file>
+ <file alias="hblistviewitem.widgetml">style/hblistviewitem.widgetml</file>
+ <file alias="hblistviewitem_color.css">style/hblistviewitem_color.css</file>
</qresource>
<qresource prefix="/xml">
<file alias="clockmainview.docml">xml/clockmainview.docml</file>
--- a/clock/clockui/clockviews/data/style/clockalarmlistitemprototype.css Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/data/style/clockalarmlistitemprototype.css Thu Jul 22 16:32:51 2010 +0100
@@ -13,6 +13,7 @@
top: -var(hb-param-margin-gene-top);
right: var(hb-param-margin-gene-right);
text-height: var(hb-param-text-height-secondary);
+ font-variant: secondary;
fixed-width: 8.2un;
text-align: right;
text-line-count-min: 2;
@@ -22,21 +23,24 @@
top: -var(hb-param-margin-gene-top);
right: var(hb-param-margin-gene-right);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
fixed-width: 28.7un;
text-align: left;
}
ClockAlarmListItemPrototype::text-3{
text-height: var(hb-param-text-height-primary);
+ font-variant: primary;
top: -var(hb-param-margin-gene-middle-vertical);
right: var(hb-param-margin-gene-right);
fixed-width: 28.7un;
text-align: left;
}
ClockAlarmListItemPrototype::text-4{
- text-height: var(hb-param-text-height-primary-small);
+ text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
top: -var(hb-param-margin-gene-middle-vertical);
bottom: var(hb-param-margin-gene-bottom);
- fixed-width: 28.7un;
+ fixed-width: 28.7un;
text-align: left;
}
ClockAlarmListItemPrototype::alarmIconItem{
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/clockalarmlistitemprototype_color.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,47 @@
+ClockAlarmListItemPrototype::text-4{
+ color: var(qtc_list_item_content_normal);
+}
+
+ClockAlarmListItemPrototype::text-4[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockAlarmListItemPrototype::text-4[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+ClockAlarmListItemPrototype::alarmIconItem{
+ color: var(qtc_list_item_content_normal);
+}
+
+ClockAlarmListItemPrototype::alarmIconItem[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockAlarmListItemPrototype::alarmIconItem[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+ClockAlarmListItemPrototype::text-3{
+ color: var(qtc_list_item_title_normal);
+}
+
+ClockAlarmListItemPrototype::text-3[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockAlarmListItemPrototype::text-3[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+ClockAlarmListItemPrototype::text-1{
+ color: var(qtc_list_item_content_normal);
+}
+
+ClockAlarmListItemPrototype::text-1[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockAlarmListItemPrototype::text-1[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
\ No newline at end of file
--- a/clock/clockui/clockviews/data/style/clockhomecityitem.css Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/data/style/clockhomecityitem.css Thu Jul 22 16:32:51 2010 +0100
@@ -18,6 +18,7 @@
top: -var(hb-param-margin-gene-top);
right: var(hb-param-margin-gene-middle-horizontal);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
text-align: left;
}
@@ -25,6 +26,7 @@
top: -var(hb-param-margin-gene-middle-vertical);
right: var(hb-param-margin-gene-middle-horizontal);
text-height: var(hb-param-text-height-primary);
+ font-variant: primary;
text-align: left;
}
@@ -39,6 +41,7 @@
ClockHomeCityItem::timeText{
right: var(hb-param-margin-gene-right);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
text-align: right;
fixed-width: 16un;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/clockhomecityitem_color.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,47 @@
+ClockHomeCityItem::dateText{
+ color: var(qtc_list_item_content_normal);
+}
+
+ClockHomeCityItem::dateText[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockHomeCityItem::dateText[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+ClockHomeCityItem::cityText{
+ color: var(qtc_list_item_title_normal);
+}
+
+ClockHomeCityItem::cityText[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockHomeCityItem::cityText[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+ClockHomeCityItem::dstIcon{
+ color: var(qtc_list_item_title_normal);
+}
+
+ClockHomeCityItem::dstIcon[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockHomeCityItem::dstIcon[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+ClockHomeCityItem::timeText{
+ color: var(qtc_list_item_content_normal);
+}
+
+ClockHomeCityItem::timeText[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+ClockHomeCityItem::timeText[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
\ No newline at end of file
--- a/clock/clockui/clockviews/data/style/hblistviewitem.css Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/data/style/hblistviewitem.css Thu Jul 22 16:32:51 2010 +0100
@@ -7,7 +7,7 @@
layout: citylist-landscape;
}
-HbListViewItem::icon-1{
+HbListViewItem[layoutName="citylist-portrait"]::icon-1{
top: -var(hb-param-margin-gene-top);
left: -var(hb-param-margin-gene-left);
right: var(hb-param-margin-gene-middle-horizontal);
@@ -17,38 +17,42 @@
fixed-width: var(hb-param-graphic-size-primary-large);
}
-HbListViewItem::text-1{
+HbListViewItem[layoutName="citylist-portrait"]::text-1{
top: -var(hb-param-margin-gene-top);
right: var(hb-param-margin-gene-middle-horizontal);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
text-align: left;
}
-HbListViewItem::text-2{
+HbListViewItem[layoutName="citylist-portrait"]::text-2{
top: -var(hb-param-margin-gene-middle-vertical);
right: var(hb-param-margin-gene-middle-horizontal);
text-height: var(hb-param-text-height-primary);
+ font-variant: primary;
text-align: left;
}
-HbListViewItem::text-3:portrait{
+HbListViewItem[layoutName="citylist-portrait"]::text-3{
top: -var(hb-param-margin-gene-middle-vertical);
right: var(hb-param-margin-gene-right);
bottom: var(hb-param-margin-gene-bottom);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
text-align: left;
}
-HbListViewItem::text-3:landscape{
+HbListViewItem[layoutName="citylist-landscape"]::text-3{
right: var(hb-param-margin-gene-right);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
text-align: right;
fixed-width: 24un;
}
-HbListViewItem::icon-2{
+HbListViewItem[layoutName="citylist-portrait"]::icon-2{
top: -var(hb-param-margin-gene-top);
right: var(hb-param-margin-gene-right);
@@ -56,9 +60,10 @@
fixed-width: var(hb-param-graphic-size-secondary);
}
-HbListViewItem::text-4{
+HbListViewItem[layoutName="citylist-portrait"]::text-4{
right: var(hb-param-margin-gene-right);
text-height: var(hb-param-text-height-tiny);
+ font-variant: secondary;
text-align: right;
fixed-width: 16un;
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/hblistviewitem_color.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,35 @@
+HbListViewItem[layoutName="citylist-portrait"]::text-4{
+ color: var(qtc_list_item_content_normal);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-4[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-4[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-2{
+ color: var(qtc_list_item_title_normal);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-2[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-2[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-1{
+ color: var(qtc_list_item_content_normal);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-1[state="pressed"]{
+ color: var(qtc_list_item_pressed);
+}
+
+HbListViewItem[layoutName="citylist-portrait"]::text-1[state="disabled"]{
+ color: var(qtc_list_item_disabled);
+}
\ No newline at end of file
--- a/clock/clockui/clockviews/data/xml/clockmainview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/data/xml/clockmainview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
<object name="alarmsAction" type="HbAction">
<icon iconName="qtg_mono_alarm" name="icon"/>
</object>
@@ -15,133 +15,173 @@
<widget name="clockMainView" type="HbView">
<widget name="clockMainViewWidget" role="HbView:widget" type="HbWidget">
<widget name="clockWidget" plugin="clockwidgetplugin" type="ClockWidget">
- <real name="z" value="8"/>
- </widget>
- <widget name="dateLabel" type="HbLabel">
- <real name="z" value="9"/>
- <sizehint height="var(hb-param-text-height-tiny)" type="PREFERRED"/>
- <string name="plainText" value="Mon 18.05.2009"/>
- </widget>
- <widget name="placeLabel" type="HbLabel">
<real name="z" value="10"/>
- <sizehint height="var(hb-param-text-height-primary)" type="PREFERRED"/>
- <string name="plainText" value="Helsinki, Finland +2 GMT"/>
- </widget>
- <widget name="alarmListView" type="HbListView">
- <widget name="prototype" role="HbListView:prototype" type="HbListViewItem">
- <string name="state" value="normal"/>
- </widget>
- <real name="z" value="11"/>
- <sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
+ <sizehint height="22.55un" type="PREFERRED" width="22.55un"/>
</widget>
<widget name="noAlarmLabel" type="HbLabel">
- <real name="z" value="12"/>
- <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
- <sizehint height="3.9un" type="FIXED"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="16"/>
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="PREFERRED" width="49.7un"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="MINIMUM" width="37.7un"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="MAXIMUM" width="49.7un"/>
<string locid="txt_clk_main_view_list_no_alarms_set" name="plainText" value="No alarm set"/>
</widget>
+ <widget name="dateLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="19"/>
+ <sizehint height="var(hb-param-text-height-tiny)" type="PREFERRED" width="expr(var(hb-param-screen-width)-53.73un-4un)"/>
+ <string name="plainText" value="Mon 18.05.2009"/>
+ </widget>
+ <widget name="alarmListView" type="HbListView">
+ <widget name="prototype" role="HbAbstractView:prototype" type="HbListViewItem">
+ <string name="state" value="normal"/>
+ </widget>
+ <real name="z" value="21"/>
+ <sizepolicy horizontalPolicy="Expanding" horizontalStretch="0" verticalPolicy="Expanding" verticalStretch="0"/>
+ <sizehint height="47.7612un" type="PREFERRED" width="expr(var(hb-param-screen-short-edge) )"/>
+ </widget>
+ <widget name="horizontalDivider" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <icon iconName="qtg_graf_input_v_swipe" name="icon"/>
+ <real name="z" value="1"/>
+ <sizehint height="3.58209un" type="PREFERRED" width="21.49254un"/>
+ </widget>
+ <widget name="verticalDivider" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <icon iconName="qtg_graf_input_h_swipe" name="icon"/>
+ <real name="z" value="2"/>
+ </widget>
+ <widget name="placeLabel" type="HbLabel">
+ <enums name="alignment" value="AlignAbsolute|AlignRight|AlignTrailing"/>
+ <enums name="layoutDirection" value="LeftToRight"/>
+ <real name="z" value="2"/>
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="expr(var(hb-param-text-height-tiny) )" type="PREFERRED" width="18.58295un"/>
+ <string name="plainText" value="united kingdom 0:00 GMT"/>
+ </widget>
<layout type="anchor">
- <anchoritem dst="clockWidget" dstEdge="CENTERH" spacing="0un" src="" srcEdge="CENTERH"/>
- <anchoritem dst="dateLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="dateLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="dateLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="clockWidget" srcEdge="BOTTOM"/>
- <anchoritem dst="placeLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="placeLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="placeLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="dateLabel" srcEdge="BOTTOM"/>
+ <anchoritem dst="clockWidget" dstEdge="TOP" spacing="2un" src="" srcEdge="TOP"/>
+ <anchoritem dst="clockWidget" dstEdge="RIGHT" spacing="-10.91567un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="noAlarmLabel" dstEdge="LEFT" spacing="2un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="noAlarmLabel" dstEdge="BOTTOM" spacing="-35.26739un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="dateLabel" dstEdge="LEFT" spacing="2un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dateLabel" dstEdge="TOP" spacing="29.73761un" src="" srcEdge="TOP"/>
<anchoritem dst="alarmListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
- <anchoritem dst="alarmListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="alarmListView" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="placeLabel" srcEdge="BOTTOM"/>
- <anchoritem dst="alarmListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
- <anchoritem dst="clockWidget" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
- <anchoritem dst="noAlarmLabel" dstEdge="LEFT" spacing="3.58209un" src="" srcEdge="LEFT"/>
- <anchoritem dst="noAlarmLabel" dstEdge="TOP" spacing="23.43284un" src="" srcEdge="TOP"/>
+ <anchoritem dst="alarmListView" dstEdge="BOTTOM" spacing="-18un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="horizontalDivider" dstEdge="LEFT" spacing="6.1194un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="horizontalDivider" dstEdge="BOTTOM" spacing="-9.70896un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="verticalDivider" dstEdge="RIGHT" spacing="-8.80597un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="verticalDivider" dstEdge="BOTTOM" spacing="-2.84328un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="placeLabel" dstEdge="TOP" spacing="35.07463un" src="" srcEdge="TOP"/>
+ <anchoritem dst="placeLabel" dstEdge="RIGHT" spacing="-16.04392un" src="" srcEdge="RIGHT"/>
</layout>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
- <enums name="orientation" value="Horizontal"/>
- <ref object="alarmsAction" role="HbToolBar:addAction"/>
- <ref object="worldClockAction" role="HbToolBar:addAction"/>
- <ref object="newAlarmAction" role="HbToolBar:addAction"/>
+ <ref object="alarmsAction" role="HbWidget:addAction"/>
+ <ref object="worldClockAction" role="HbWidget:addAction"/>
+ <ref object="newAlarmAction" role="HbWidget:addAction"/>
</widget>
<widget name="viewMenu" role="HbView:menu" type="HbMenu">
- <ref object="settingsAction" role="HbMenu:addAction"/>
+ <ref object="settingsAction" role="HbWidget:addAction"/>
</widget>
<string locid="txt_common_common_clock" name="title" value="Clock"/>
</widget>
- <section name="landscape">
- <widget name="noAlarmLabel" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
- <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
- <sizehint height="var(hb-param-text-height-primary)" type="PREFERRED" width="37.7un"/>
- <sizehint height="var(hb-param-text-height-primary)" type="MINIMUM" width="37.7un"/>
- <sizehint height="var(hb-param-text-height-primary)" type="MAXIMUM" width="37.7un"/>
+ <section name="portrait">
+ <widget name="alarmListView" type="HbListView">
+ <sizehint height="27.61194un" type="PREFERRED" width="expr(var(hb-param-screen-short-edge) )"/>
+ </widget>
+ <widget name="dateLabel" type="HbLabel">
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
</widget>
<widget name="clockMainViewWidget" role="HbView:widget" type="HbWidget">
<layout type="anchor">
- <anchoritem dst="dateLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="clockWidget" srcEdge="BOTTOM"/>
- <anchoritem dst="placeLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="placeLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="dateLabel" srcEdge="BOTTOM"/>
- <anchoritem dst="alarmListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
- <anchoritem dst="clockWidget" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
- <anchoritem dst="clockWidget" dstEdge="LEFT" spacing="9.5un" src="" srcEdge="LEFT"/>
- <anchoritem dst="alarmListView" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="clockWidget" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-top) )" src="" srcEdge="TOP"/>
+ <anchoritem dst="clockWidget" dstEdge="CENTERH" spacing="0un" src="" srcEdge="CENTERH"/>
+ <anchoritem dst="dateLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dateLabel" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-top) )" src="clockWidget" srcEdge="BOTTOM"/>
+ <anchoritem dst="dateLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="noAlarmLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="" srcEdge="LEFT"/>
+ <anchoritem dst="noAlarmLabel" dstEdge="CENTERV" spacing="0un" src="alarmListView" srcEdge="CENTERV"/>
+ <anchoritem dst="alarmListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmListView" dstEdge="TOP" spacing="0un" src="horizontalDivider" srcEdge="BOTTOM"/>
<anchoritem dst="alarmListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="alarmListView" dstEdge="LEFT" spacing="9.5un" src="clockWidget" srcEdge="RIGHT"/>
- <anchoritem dst="dateLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="dateLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="alarmListView" srcEdge="LEFT"/>
- <anchoritem dst="placeLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="alarmListView" srcEdge="LEFT"/>
- <anchoritem dst="noAlarmLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="noAlarmLabel" dstEdge="TOP" spacing="15.8un" src="" srcEdge="TOP"/>
- <anchoritem dst="noAlarmLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="alarmListView" srcEdge="LEFT"/>
+ <anchoritem dst="alarmListView" dstEdge="BOTTOM" spacing="-0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="verticalDivider" dstEdge="RIGHT" spacing="-8.80597un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="verticalDivider" dstEdge="BOTTOM" spacing="-2.84328un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="horizontalDivider" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="horizontalDivider" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-bottom) )" src="placeLabel" srcEdge="BOTTOM"/>
+ <anchoritem dst="horizontalDivider" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="placeLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="" srcEdge="LEFT"/>
+ <anchoritem dst="placeLabel" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-middle-vertical) )" src="dateLabel" srcEdge="BOTTOM"/>
+ <anchoritem dst="placeLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="" srcEdge="RIGHT"/>
</layout>
</widget>
- <widget name="dateLabel" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
- </widget>
<widget name="placeLabel" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizehint height="expr(var(hb-param-text-height-tiny) )" type="PREFERRED" width="expr(var(hb-param-screen-short-edge) - 4un )"/>
+ <enums name="alignment" value="AlignAbsolute|AlignVCenter|AlignHCenter"/>
</widget>
<widget name="clockWidget" plugin="clockwidgetplugin" type="ClockWidget">
- <sizehint height="22.3un" type="PREFERRED" width="22.3un"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="31.9un" type="FIXED" width="31.9un"/>
+ </widget>
+ <widget name="horizontalDivider" type="HbLabel">
+ <icon iconName="qtg_graf_divider_h_thin" name="icon"/>
+ <enums name="aspectRatioMode" value="IgnoreAspectRatio"/>
+ <sizepolicy horizontalPolicy="Minimum" horizontalStretch="1" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="0.5un" type="PREFERRED" width="21.49254un"/>
+ </widget>
+ <widget name="verticalDivider" type="HbLabel">
+ <bool name="visible" value="TRUE"/>
</widget>
</section>
- <section name="portrait">
- <widget name="noAlarmLabel" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
- <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
- <sizehint height="var(hb-param-text-height-primary)" type="PREFERRED" width="49.7un"/>
- <sizehint height="var(hb-param-text-height-primary)" type="MINIMUM" width="37.7un"/>
- <sizehint height="var(hb-param-text-height-primary)" type="MAXIMUM" width="49.7un"/>
+ <section name="landscape">
+ <widget name="alarmListView" type="HbListView">
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Expanding" verticalStretch="0"/>
+ <sizehint type="MAXIMUM" width="53.73un"/>
</widget>
<widget name="clockMainViewWidget" role="HbView:widget" type="HbWidget">
<layout type="anchor">
- <anchoritem dst="clockWidget" dstEdge="CENTERH" spacing="0un" src="" srcEdge="CENTERH"/>
- <anchoritem dst="dateLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="dateLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="dateLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="clockWidget" srcEdge="BOTTOM"/>
- <anchoritem dst="placeLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="placeLabel" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="placeLabel" dstEdge="TOP" spacing="var(hb-param-margin-gene-middle-vertical)" src="dateLabel" srcEdge="BOTTOM"/>
- <anchoritem dst="alarmListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmListView" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
<anchoritem dst="alarmListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="alarmListView" dstEdge="TOP" spacing="var(hb-param-margin-gene-bottom)" src="placeLabel" srcEdge="BOTTOM"/>
<anchoritem dst="alarmListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
- <anchoritem dst="clockWidget" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="" srcEdge="TOP"/>
- <anchoritem dst="noAlarmLabel" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="noAlarmLabel" dstEdge="TOP" spacing="17.8un" src="placeLabel" srcEdge="BOTTOM"/>
+ <anchoritem dst="noAlarmLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="alarmListView" srcEdge="LEFT"/>
+ <anchoritem dst="noAlarmLabel" dstEdge="CENTERV" spacing="0un" src="alarmListView" srcEdge="CENTERV"/>
+ <anchoritem dst="clockWidget" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-top) )" src="" srcEdge="TOP"/>
+ <anchoritem dst="clockWidget" dstEdge="CENTERH" spacing="0un" src="dateLabel" srcEdge="CENTERH"/>
+ <anchoritem dst="dateLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dateLabel" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-bottom) )" src="clockWidget" srcEdge="BOTTOM"/>
+ <anchoritem dst="dateLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="verticalDivider" srcEdge="LEFT"/>
+ <anchoritem dst="verticalDivider" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="verticalDivider" dstEdge="RIGHT" spacing="0un" src="alarmListView" srcEdge="LEFT"/>
+ <anchoritem dst="verticalDivider" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="horizontalDivider" dstEdge="RIGHT" spacing="-17.16418un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="horizontalDivider" dstEdge="BOTTOM" spacing="-7.17164un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="placeLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="" srcEdge="LEFT"/>
+ <anchoritem dst="placeLabel" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-middle-vertical) )" src="dateLabel" srcEdge="BOTTOM"/>
+ <anchoritem dst="placeLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="alarmListView" srcEdge="LEFT"/>
+ <anchoritem dst="placeLabel" dstEdge="BOTTOM" spacing="expr(-var(hb-param-margin-gene-bottom) )" src="" srcEdge="BOTTOM"/>
</layout>
</widget>
- <widget name="dateLabel" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
- </widget>
<widget name="placeLabel" type="HbLabel">
- <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizepolicy horizontalPolicy="Preferred" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <enums name="alignment" value="AlignAbsolute|AlignVCenter|AlignHCenter"/>
</widget>
<widget name="clockWidget" plugin="clockwidgetplugin" type="ClockWidget">
- <sizehint height="31.9un" type="PREFERRED" width="31.9un"/>
+ <sizehint height="expr(var(hb-param-screen-short-edge) - var(hb-param-widget-chrome-height) - var(hb-param-widget-toolbar-height) - 12.75un )" type="PREFERRED" width="expr(var(hb-param-screen-short-edge) - var(hb-param-widget-chrome-height) - var(hb-param-widget-toolbar-height) - 12.75un )"/>
+ </widget>
+ <widget name="horizontalDivider" type="HbLabel">
+ <sizehint height="0.5un" type="PREFERRED" width="21.49254un"/>
+ <bool name="visible" value="TRUE"/>
+ </widget>
+ <widget name="verticalDivider" type="HbLabel">
+ <icon iconName="qtg_graf_divider_v_thin" name="icon"/>
+ <enums name="aspectRatioMode" value="IgnoreAspectRatio"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Preferred" verticalStretch="0"/>
+ <sizehint type="PREFERRED" width="0.1un"/>
</widget>
</section>
- <metadata activeUIState="landscape" display="NHD landscape" unit="un">
+ <metadata activeUIState="portrait" display="NHD-3.2-inch_portrait" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="portrait" sections="#common portrait"/>
<uistate name="landscape" sections="#common landscape"/>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/eabi/clockviewsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,33 @@
+EXPORTS
+ _ZN13ClockMainView19setupAfterViewReadyEv @ 1 NONAME
+ _ZN13ClockMainView9setupViewER20ClockAppControllerIfP14ClockDocLoader @ 2 NONAME
+ _ZN13ClockMainViewC1EP13QGraphicsItem @ 3 NONAME
+ _ZN13ClockMainViewC2EP13QGraphicsItem @ 4 NONAME
+ _ZN13ClockMainViewD0Ev @ 5 NONAME
+ _ZN13ClockMainViewD1Ev @ 6 NONAME
+ _ZN13ClockMainViewD2Ev @ 7 NONAME
+ _ZN14ClockWorldView9setupViewER20ClockAppControllerIfP14ClockDocLoader @ 8 NONAME
+ _ZN14ClockWorldViewC1EP13QGraphicsItem @ 9 NONAME
+ _ZN14ClockWorldViewC2EP13QGraphicsItem @ 10 NONAME
+ _ZN14ClockWorldViewD0Ev @ 11 NONAME
+ _ZN14ClockWorldViewD1Ev @ 12 NONAME
+ _ZN14ClockWorldViewD2Ev @ 13 NONAME
+ _ZN17ClockHomeCityItemC1EP13QGraphicsItem @ 14 NONAME
+ _ZN17ClockHomeCityItemC2EP13QGraphicsItem @ 15 NONAME
+ _ZN17ClockHomeCityItemD0Ev @ 16 NONAME
+ _ZN17ClockHomeCityItemD1Ev @ 17 NONAME
+ _ZN17ClockHomeCityItemD2Ev @ 18 NONAME
+ _ZThn16_N13ClockMainViewD0Ev @ 19 NONAME
+ _ZThn16_N13ClockMainViewD1Ev @ 20 NONAME
+ _ZThn16_N14ClockWorldViewD0Ev @ 21 NONAME
+ _ZThn16_N14ClockWorldViewD1Ev @ 22 NONAME
+ _ZThn16_N17ClockHomeCityItemD0Ev @ 23 NONAME
+ _ZThn16_N17ClockHomeCityItemD1Ev @ 24 NONAME
+ _ZThn8_N13ClockMainViewD0Ev @ 25 NONAME
+ _ZThn8_N13ClockMainViewD1Ev @ 26 NONAME
+ _ZThn8_N14ClockWorldViewD0Ev @ 27 NONAME
+ _ZThn8_N14ClockWorldViewD1Ev @ 28 NONAME
+ _ZThn8_N17ClockHomeCityItemD0Ev @ 29 NONAME
+ _ZThn8_N17ClockHomeCityItemD1Ev @ 30 NONAME
+ _ZN13ClockMainView17captureScreenShotEb @ 31 NONAME
+
--- a/clock/clockui/clockviews/inc/clockmainview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/inc/clockmainview.h Thu Jul 22 16:32:51 2010 +0100
@@ -53,6 +53,7 @@
CLOCKVIEWS_EXPORT void setupView(
ClockAppControllerIf &controllerIf, ClockDocLoader *docLoader);
CLOCKVIEWS_EXPORT void setupAfterViewReady();
+ CLOCKVIEWS_EXPORT void captureScreenShot(bool captureScreenShot = false);
private slots:
void handleAlarmStatusChanged(int row);
@@ -69,6 +70,7 @@
void checkOrientationAndLoadSection(Qt::Orientation orientation);
void selectedMenuAction(HbAction *action);
void handleMenuClosed();
+ void saveActivity();
private:
void setmodel();
@@ -88,6 +90,8 @@
HbLabel *mDayLabel;
HbLabel *mPlaceLabel;
+ HbLabel *mHorizontalDivider;
+ HbLabel *mVerticalDivider;
ClockWidget *mClockWidget;
HbLabel *mNoAlarmLabel;
HbListView *mAlarmList;
@@ -99,9 +103,11 @@
ClockAppControllerIf *mAppControllerIf;
ClockAlarmListModel *mAlarmListModel;
- int mSelectedItem;
- bool mHideAlarmList;
- bool mIsLongTop;
+ int mSelectedItem;
+ bool mHideAlarmList;
+ bool mIsLongTop;
+ bool mIsScreenShotCapruted; // check if the screenshot captured is valid
+ QVariantHash mScreenShot; // screenshot
};
#endif // CLOCKMAINVIEW_H
--- a/clock/clockui/clockviews/inc/clockviewsdefines.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/inc/clockviewsdefines.h Thu Jul 22 16:32:51 2010 +0100
@@ -28,6 +28,9 @@
# define CLOCKVIEWS_EXPORT Q_DECL_IMPORT
#endif
+const QString clockMainView = "ClockMainView"; // Activity Id for clock activity to be save
+// in Activity Manager DB
+
#endif // CLOCKVIEWSDEFINES_H
// End of file --Don't remove this.
--- a/clock/clockui/clockviews/src/clockhomecityitem.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/src/clockhomecityitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -44,9 +44,10 @@
// Path for widgetml and css files.
HbStyleLoader::registerFilePath(":/style/clockhomecityitem.css");
HbStyleLoader::registerFilePath(":/style/clockhomecityitem.widgetml");
+ HbStyleLoader::registerFilePath(":/style/clockhomecityitem_color.css");
// Set the frame to the homecity widget.
- HbFrameItem *frame = new HbFrameItem();
+ HbFrameItem *frame = new HbFrameItem(this);
frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
frame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox");
setBackgroundItem(frame->graphicsItem(), -2);
@@ -60,6 +61,7 @@
{
HbStyleLoader::unregisterFilePath(":/style/clockhomecityitem.css");
HbStyleLoader::unregisterFilePath(":/style/clockhomecityitem.widgetml");
+ HbStyleLoader::unregisterFilePath(":/style/clockhomecityitem_color.css");
}
/*!
--- a/clock/clockui/clockviews/src/clockmainview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/src/clockmainview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -26,6 +26,8 @@
#include <HbListView>
#include <HbNotificationDialog>
#include <HbStyleLoader>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // activity manager
// User includes
#include "clockmainview.h"
@@ -56,7 +58,8 @@
:HbView(parent),
mAlarmList(0),
mSelectedItem(-1),
- mIsLongTop(false)
+ mIsLongTop(false),
+ mIsScreenShotCapruted(false)
{
// Nothing yet.
}
@@ -78,6 +81,8 @@
":/style/clockalarmlistitemprototype.css");
HbStyleLoader::unregisterFilePath(
":/style/clockalarmlistitemprototype.widgetml");
+ HbStyleLoader::unregisterFilePath(
+ ":/style/clockalarmlistitemprototype_color.css");
}
@@ -122,6 +127,12 @@
bool loadSuccess = false;
Qt::Orientation currentOrienation = window->orientation();
+
+ // Get the dividers.
+ mHorizontalDivider = static_cast<HbLabel *> (
+ mDocLoader->findObject("horizontalDivider"));
+ mVerticalDivider = static_cast<HbLabel *> (
+ mDocLoader->findObject("verticalDivider"));
// Get the "No alarm set" label.
mNoAlarmLabel = qobject_cast<HbLabel *> (
@@ -144,6 +155,8 @@
HbStyleLoader::registerFilePath(":/style/clockalarmlistitemprototype.css");
HbStyleLoader::registerFilePath(
":/style/clockalarmlistitemprototype.widgetml");
+ HbStyleLoader::registerFilePath(
+ ":/style/clockalarmlistitemprototype_color.css");
setmodel();
// Load the correct section based on orientation.
@@ -152,11 +165,15 @@
CLOCK_MAIN_VIEW_DOCML,
CLOCK_MAIN_VIEW_PORTRAIT_SECTION,
&loadSuccess);
+ mHorizontalDivider->setVisible(true);
+ mVerticalDivider->setVisible(false);
} else {
mDocLoader->load(
CLOCK_MAIN_VIEW_DOCML,
CLOCK_MAIN_VIEW_LANDSCAPE_SECTION,
&loadSuccess);
+ mHorizontalDivider->setVisible(false);
+ mVerticalDivider->setVisible(true);
}
if (loadSuccess) {
if (0 == alarmCount) {
@@ -167,14 +184,8 @@
}
}
- mDayLabel = static_cast<HbLabel *> (
- mDocLoader->findObject("dateLabel"));
-
- mPlaceLabel = static_cast<HbLabel *> (
- mDocLoader->findObject("placeLabel"));
-
-
-
+ mDayLabel = static_cast<HbLabel *> (mDocLoader->findObject("dateLabel"));
+ mPlaceLabel = static_cast<HbLabel *> (mDocLoader->findObject("placeLabel"));
mClockWidget = static_cast<ClockWidget*> (
mDocLoader->findObject(CLOCK_WIDGET));
@@ -189,6 +200,18 @@
connect(
window, SIGNAL(orientationChanged(Qt::Orientation)),
this, SLOT(checkOrientationAndLoadSection(Qt::Orientation)));
+
+ // Get a pointer to activity Manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ // clean up any previous versions of this activity from the activity manager.
+ // ignore return value as the first boot would always return a false
+ // bool declared on for debugging purpose
+ bool ok = activityManager->removeActivity(clockMainView);
+
+ // connect for the aboutToQuit events on application Exit as to call saveActivity
+ connect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+
}
/*!
@@ -307,6 +330,7 @@
void ClockMainView::displayWorldClockView()
{
mAppControllerIf->switchToView(WorldClock);
+ // no need to capture the screenshot here as it's done in ClockViewManager::showView
}
@@ -318,6 +342,9 @@
{
ClockAlarmEditor *alarmEditor = new ClockAlarmEditor(*mAlarmClient);
alarmEditor->showAlarmEditor();
+ // capture screenshot for future use, if application
+ // is exited/Quit from alarmEditor
+ captureScreenShot(true);
}
/*!
@@ -329,6 +356,9 @@
// Create the settings view.
ClockSettingsView *settingsView = new ClockSettingsView(this);
settingsView->loadSettingsView();
+ // capture screenshot for future use, if application
+ // is exited/Quit from alarmEditor
+ captureScreenShot(true);
}
/*!
@@ -349,6 +379,9 @@
ClockAlarmEditor *alarmEditor = new ClockAlarmEditor(
*mAlarmClient, alarmId);
alarmEditor->showAlarmEditor();
+ // capture screenshot for future use, if application
+ // is exited/Quit from alarmEditor
+ captureScreenShot(true);
}
}
@@ -389,6 +422,8 @@
// Show the menu.
itemContextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
itemContextMenu->setPreferredPos(coords);
+ itemContextMenu->setAttribute(Qt::WA_DeleteOnClose, true );
+
}
/*!
@@ -512,6 +547,8 @@
*/
void ClockMainView::handleAlarmListDisplay()
{
+ // alarmEditor closed reset the captured screenshot, current view is main view now
+ captureScreenShot(false);
// Get the list of pending clock alarms from server.
QList<AlarmInfo> alarmInfoList;
QList<AlarmInfo> displayInfoList;
@@ -549,10 +586,14 @@
mDocLoader->load(
CLOCK_MAIN_VIEW_DOCML, CLOCK_MAIN_VIEW_LANDSCAPE_SECTION,
&success);
+ mHorizontalDivider->setVisible(false);
+ mVerticalDivider->setVisible(true);
} else {
mDocLoader->load(
CLOCK_MAIN_VIEW_DOCML, CLOCK_MAIN_VIEW_PORTRAIT_SECTION,
&success);
+ mHorizontalDivider->setVisible(true);
+ mVerticalDivider->setVisible(false);
}
if(success) {
@@ -654,7 +695,62 @@
*/
void ClockMainView::updateClockWidget()
{
+ QStringList clockType;
+ int index = mSettingsUtility->clockType(clockType);
+ int zeroIndex(0);
+ if(zeroIndex == index){
+ mClockWidget->setClockType(ClockWidget::ClockTypeDigital);
+ } else {
+ mClockWidget->setClockType(ClockWidget::ClockTypeAnalog);
+ }
+
+ QStringList timeFormat;
+
+ if (zeroIndex == mSettingsUtility->timeFormat(timeFormat)) {
+ mClockWidget->setTimeFormat(ClockWidget::TimeFormat24Hrs);
+ } else {
+ mClockWidget->setTimeFormat(ClockWidget::TimeFormat12Hrs);
+ }
+
mClockWidget->updateTime();
}
+/*!
+ CaptureScreenShot captures screen shot
+ \param captureScreenShot bool to indicate if screenshot needs to be captured
+*/
+void ClockMainView::captureScreenShot(bool captureScreenShot)
+{
+ // check if screen shot needs to be captured
+ if (captureScreenShot) {
+ mScreenShot.clear();
+ mScreenShot.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+ mIsScreenShotCapruted = captureScreenShot; // set mIsScreenShotCapruted set validity of screenshot
+}
+
+/*!
+ saveActivity saves main view as an activity
+*/
+void ClockMainView::saveActivity()
+{
+ // Get a pointer to activity Manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+ // check if a valid screenshot is already captured
+ if (!mIsScreenShotCapruted) {
+ mScreenShot.clear();
+ mScreenShot.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+
+ // save any data necessary to save the state
+ QByteArray serializedActivity;
+ QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+ stream << MainView;
+
+ // add the activity to the activity manager
+ bool ok = activityManager->addActivity(clockMainView, serializedActivity, mScreenShot);
+ if ( !ok ) {
+ qFatal("Add failed" );
+ }
+}
// End of file --Don't remove.
--- a/clock/clockui/clockviews/src/clockworldview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockviews/src/clockworldview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -71,9 +71,13 @@
delete mDocLoader;
mDocLoader = 0;
}
+ if(mCityListModel){
+ delete mCityListModel;
+ }
+
HbStyleLoader::unregisterFilePath(":/style/hblistviewitem.css");
- HbStyleLoader::unregisterFilePath(
- ":/style/hblistviewitem.widgetml");
+ HbStyleLoader::unregisterFilePath(":/style/hblistviewitem.widgetml");
+ HbStyleLoader::unregisterFilePath(":/style/hblistviewitem_color.css");
}
/*!
@@ -125,8 +129,8 @@
mCityListView = qobject_cast<HbListView *> (
mDocLoader->findWidget(CLOCK_WORLD_CITYLIST));
HbStyleLoader::registerFilePath(":/style/hblistviewitem.css");
- HbStyleLoader::registerFilePath(
- ":/style/hblistviewitem.widgetml");
+ HbStyleLoader::registerFilePath(":/style/hblistviewitem.widgetml");
+ HbStyleLoader::registerFilePath(":/style/hblistviewitem_color.css");
mCityListView->setLayoutName("citylist-portrait");
mCityListView->setModel(mCityListModel);
@@ -244,13 +248,13 @@
mSettingsUtility->timeFormatString());
itemList.insert(value.setNum(ClockHomeCityItem::Time), timeInfo);
- // TODO: Use the home city specific icons.
+ //Use the home city specific icons.
// Display day/night indicators.
QString dayNightIconPath = "";
if (isDay(dateTime)) {
- dayNightIconPath = "qtg_large_clock";
+ dayNightIconPath = "qtg_large_clock_home";
} else {
- dayNightIconPath = "qtg_large_clock";
+ dayNightIconPath = "qtg_large_clock_night_home";
}
itemList.insert(value.setNum(
ClockHomeCityItem::DayNightIndicator), dayNightIconPath);
@@ -289,6 +293,7 @@
// Show the menu.
itemContextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
itemContextMenu->setPreferredPos(coords);
+ itemContextMenu->setAttribute( Qt::WA_DeleteOnClose,true);
}
/*!
@@ -660,7 +665,7 @@
if (isDay(dateTime)) {
dayNightIconPath = "qtg_large_clock";
} else {
- dayNightIconPath = "qtg_large_clock";
+ dayNightIconPath = "qtg_large_clock_night";
}
decorationString.append(HbIcon(dayNightIconPath));
--- a/clock/clockui/clockwidget/bwins/clockwidgetu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-EXPORTS
- ?tr@ClockWidget@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString ClockWidget::tr(char const *, char const *, int)
- ?staticMetaObject@ClockWidget@@2UQMetaObject@@B @ 2 NONAME ; struct QMetaObject const ClockWidget::staticMetaObject
- ??1ClockWidget@@UAE@XZ @ 3 NONAME ; ClockWidget::~ClockWidget(void)
- ??0ClockWidget@@QAE@PAVQGraphicsItem@@V?$QFlags@W4WindowType@Qt@@@@@Z @ 4 NONAME ; ClockWidget::ClockWidget(class QGraphicsItem *, class QFlags<enum Qt::WindowType>)
- ?qt_metacast@ClockWidget@@UAEPAXPBD@Z @ 5 NONAME ; void * ClockWidget::qt_metacast(char const *)
- ?updateTime@ClockWidget@@QAEXXZ @ 6 NONAME ; void ClockWidget::updateTime(void)
- ?setClockType@ClockWidget@@QAEXABW4ClockType@1@@Z @ 7 NONAME ; void ClockWidget::setClockType(enum ClockWidget::ClockType const &)
- ?metaObject@ClockWidget@@UBEPBUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const * ClockWidget::metaObject(void) const
- ?loadClockWidget@ClockWidget@@QAEXXZ @ 9 NONAME ; void ClockWidget::loadClockWidget(void)
- ?trUtf8@ClockWidget@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString ClockWidget::trUtf8(char const *, char const *, int)
- ?tr@ClockWidget@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString ClockWidget::tr(char const *, char const *)
- ??_EClockWidget@@UAE@I@Z @ 12 NONAME ; ClockWidget::~ClockWidget(unsigned int)
- ?trUtf8@ClockWidget@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString ClockWidget::trUtf8(char const *, char const *)
- ?getStaticMetaObject@ClockWidget@@SAABUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const & ClockWidget::getStaticMetaObject(void)
- ?qt_metacall@ClockWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int ClockWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?clockType@ClockWidget@@QBE?AW4ClockType@1@XZ @ 16 NONAME ; enum ClockWidget::ClockType ClockWidget::clockType(void) const
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/bwins/clockwidgetu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,21 @@
+EXPORTS
+ ?tr@ClockWidget@@SA?AVQString@@PBD0H@Z @ 1 NONAME ; class QString ClockWidget::tr(char const *, char const *, int)
+ ?staticMetaObject@ClockWidget@@2UQMetaObject@@B @ 2 NONAME ; struct QMetaObject const ClockWidget::staticMetaObject
+ ??1ClockWidget@@UAE@XZ @ 3 NONAME ; ClockWidget::~ClockWidget(void)
+ ??0ClockWidget@@QAE@PAVQGraphicsItem@@V?$QFlags@W4WindowType@Qt@@@@@Z @ 4 NONAME ; ClockWidget::ClockWidget(class QGraphicsItem *, class QFlags<enum Qt::WindowType>)
+ ?qt_metacast@ClockWidget@@UAEPAXPBD@Z @ 5 NONAME ; void * ClockWidget::qt_metacast(char const *)
+ ?updateTime@ClockWidget@@QAEXXZ @ 6 NONAME ; void ClockWidget::updateTime(void)
+ ?setClockType@ClockWidget@@QAEXABW4ClockType@1@@Z @ 7 NONAME ; void ClockWidget::setClockType(enum ClockWidget::ClockType const &)
+ ?metaObject@ClockWidget@@UBEPBUQMetaObject@@XZ @ 8 NONAME ; struct QMetaObject const * ClockWidget::metaObject(void) const
+ ?loadClockWidget@ClockWidget@@QAEXXZ @ 9 NONAME ; void ClockWidget::loadClockWidget(void)
+ ?trUtf8@ClockWidget@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString ClockWidget::trUtf8(char const *, char const *, int)
+ ?tr@ClockWidget@@SA?AVQString@@PBD0@Z @ 11 NONAME ; class QString ClockWidget::tr(char const *, char const *)
+ ??_EClockWidget@@UAE@I@Z @ 12 NONAME ; ClockWidget::~ClockWidget(unsigned int)
+ ?trUtf8@ClockWidget@@SA?AVQString@@PBD0@Z @ 13 NONAME ; class QString ClockWidget::trUtf8(char const *, char const *)
+ ?getStaticMetaObject@ClockWidget@@SAABUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const & ClockWidget::getStaticMetaObject(void)
+ ?qt_metacall@ClockWidget@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int ClockWidget::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?clockType@ClockWidget@@QBE?AW4ClockType@1@XZ @ 16 NONAME ; enum ClockWidget::ClockType ClockWidget::clockType(void) const
+ ?updateClockWidget@ClockWidget@@AAEXXZ @ 17 NONAME ; void ClockWidget::updateClockWidget(void)
+ ?timeFormat@ClockWidget@@QBE?AW4TimeFormat@1@XZ @ 18 NONAME ; enum ClockWidget::TimeFormat ClockWidget::timeFormat(void) const
+ ?setTimeFormat@ClockWidget@@QAEXABW4TimeFormat@1@@Z @ 19 NONAME ; void ClockWidget::setTimeFormat(enum ClockWidget::TimeFormat const &)
+
--- a/clock/clockui/clockwidget/clockwidgetimpl/clockwidgetimpl.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockwidget/clockwidgetimpl/clockwidgetimpl.pro Thu Jul 22 16:32:51 2010 +0100
@@ -40,12 +40,14 @@
SOURCES += \
clockwidget.cpp \
- analogclockwidget.cpp
+ analogclockwidget.cpp \
+ digitalclockwidget.cpp
HEADERS += \
clockwidgetdefines.h \
clockwidget.h \
- analogclockwidget.h
+ analogclockwidget.h \
+ digitalclockwidget.h
symbian {
TARGET.UID3 = 0x2002E715
--- a/clock/clockui/clockwidget/clockwidgetimpl/clockwidgetimpl.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockwidget/clockwidgetimpl/clockwidgetimpl.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -2,5 +2,9 @@
<qresource prefix="/resource" >
<file alias="analogclockwidget.widgetml">resource/analogclockwidget.widgetml</file>
<file alias="analogclockwidget.css">resource/analogclockwidget.css</file>
+ <file alias="digitalclockwidget.widgetml">resource/digitalclockwidget.widgetml</file>
+ <file alias="digitalclockwidget.css">resource/digitalclockwidget.css</file>
+ <file alias="digitalclockwidget_color.css">resource/digitalclockwidget_color.css</file>
+
</qresource>
</RCC>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/eabi/clockwidgetu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,25 @@
+EXPORTS
+ _ZN11ClockWidget10updateTimeEv @ 1 NONAME
+ _ZN11ClockWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
+ _ZN11ClockWidget11qt_metacastEPKc @ 3 NONAME
+ _ZN11ClockWidget12setClockTypeERKNS_9ClockTypeE @ 4 NONAME
+ _ZN11ClockWidget15loadClockWidgetEv @ 5 NONAME
+ _ZN11ClockWidget16staticMetaObjectE @ 6 NONAME DATA 16
+ _ZN11ClockWidget19getStaticMetaObjectEv @ 7 NONAME
+ _ZN11ClockWidgetC1EP13QGraphicsItem6QFlagsIN2Qt10WindowTypeEE @ 8 NONAME
+ _ZN11ClockWidgetC2EP13QGraphicsItem6QFlagsIN2Qt10WindowTypeEE @ 9 NONAME
+ _ZN11ClockWidgetD0Ev @ 10 NONAME
+ _ZN11ClockWidgetD1Ev @ 11 NONAME
+ _ZN11ClockWidgetD2Ev @ 12 NONAME
+ _ZNK11ClockWidget10metaObjectEv @ 13 NONAME
+ _ZNK11ClockWidget9clockTypeEv @ 14 NONAME
+ _ZTI11ClockWidget @ 15 NONAME
+ _ZTV11ClockWidget @ 16 NONAME
+ _ZThn16_N11ClockWidgetD0Ev @ 17 NONAME
+ _ZThn16_N11ClockWidgetD1Ev @ 18 NONAME
+ _ZThn8_N11ClockWidgetD0Ev @ 19 NONAME
+ _ZThn8_N11ClockWidgetD1Ev @ 20 NONAME
+ _ZN11ClockWidget13setTimeFormatERKNS_10TimeFormatE @ 21 NONAME
+ _ZN11ClockWidget17updateClockWidgetEv @ 22 NONAME
+ _ZNK11ClockWidget10timeFormatEv @ 23 NONAME
+
--- a/clock/clockui/clockwidget/clockwidgetimpl/inc/clockwidget.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockwidget/clockwidgetimpl/inc/clockwidget.h Thu Jul 22 16:32:51 2010 +0100
@@ -20,7 +20,7 @@
// System includes
#include <hbwidget.h>
-
+#include <QPointer>
// User includes
#include "clockwidgetdefines.h"
@@ -28,11 +28,13 @@
class QGraphicsLinearLayout;
class AnalogClockWidget;
+class DigitalClockWidget;
class CLOCKWIDGET_EXPORT ClockWidget : public HbWidget
{
Q_OBJECT
Q_PROPERTY(ClockType clockType READ clockType WRITE setClockType)
+ Q_PROPERTY(TimeFormat timeFormat READ timeFormat WRITE setTimeFormat)
public:
enum ClockType
@@ -40,20 +42,31 @@
ClockTypeAnalog,
ClockTypeDigital
};
+ enum TimeFormat
+ {
+ TimeFormat12Hrs,
+ TimeFormat24Hrs
+ };
ClockWidget(QGraphicsItem *parent = 0, Qt::WindowFlags flags = 0);
~ClockWidget();
ClockType clockType() const;
void setClockType(const ClockType &type);
void loadClockWidget();
+ TimeFormat timeFormat() const;
+ void setTimeFormat(const TimeFormat &timeFormat);
public slots:
void updateTime();
private:
- ClockType mClockType;
- AnalogClockWidget *mAnalogClock;
- QGraphicsLinearLayout *mLayout;
+ void updateClockWidget();
+private:
+ ClockType mClockType;
+ TimeFormat mTimeFormat;
+ QPointer<AnalogClockWidget> mAnalogClock;
+ QPointer<DigitalClockWidget> mDigitalClock;
+ QGraphicsLinearLayout *mLayout;
};
#endif // CLOCKWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/inc/digitalclockwidget.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2010 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: DigitalClockWidget
+*
+*/
+
+#ifndef DIGITALCLOCKWIDGET_H
+#define DIGITALCLOCKWIDGET_H
+
+// System includes
+#include <HbWidget>
+#include <QPointer>
+
+// User includes
+#include "clockwidgetdefines.h"
+
+// Forward declarations
+class QTimer;
+class HbLabel;
+class HbTextItem;
+
+class DigitalClockWidget : public HbWidget
+{
+ Q_OBJECT
+
+public:
+ DigitalClockWidget(bool useAmPm = true, QGraphicsItem *parent = 0);
+ ~DigitalClockWidget();
+
+signals:
+ void clockTapped();
+
+public slots:
+ void tick();
+ void setAmPm(bool useAmPm);
+
+protected:
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+
+private:
+ void createPrimitives();
+
+public:
+ void updatePrimitives();
+
+private:
+ QPointer<QTimer> mTimer;
+ QPointer<HbTextItem> mClockLabel;
+ QPointer<HbTextItem> mAmPmLabel;
+ bool mUseAmPm;
+};
+
+#endif // DIGITALCLOCKWIDGET_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/resource/digitalclockwidget.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,25 @@
+DigitalClockWidget {
+ layout: digital_clock_layout;
+}
+
+DigitalClockWidget::clockLabel {
+ size-policy: expanding expanding;
+ text-align: center center;
+ font-variant:primary;
+ text-height: 14.7un;
+}
+
+DigitalClockWidget::clockLabel:landscape {
+ text-height: 9.8un;
+}
+
+DigitalClockWidget::amPmLabel {
+ size-policy: expanding expanding;
+ text-align: left;
+ font-variant:primary;
+ bottom: -var(hb-param-margin-gene-middle-vertical);
+ text-height: var(hb-param-text-height-primary);
+}
+DigitalClockWidget::amPmLabel:landscape {
+ font-variant:secondary;
+}
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/resource/digitalclockwidget.widgetml Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,11 @@
+<hbwidget version="0.1" type="DigitalClockWidget">
+ <layout name="digital_clock_layout" type="mesh">
+
+ <meshitem src="clockLabel" srcEdge="CENTERV" dst="" dstEdge="CENTERV" />
+ <meshitem src="clockLabel" srcEdge="CENTERH" dst="" dstEdge="CENTERH" />
+
+ <meshitem src="amPmLabel" srcEdge="BOTTOM" dst="clockLabel" dstEdge="TOP" />
+ <meshitem src="amPmLabel" srcEdge="LEFT" dst="clockLabel" dstEdge="LEFT" />
+
+ </layout>
+</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/resource/digitalclockwidget_color.css Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,9 @@
+
+
+DigitalClockWidget::clockLabel{
+ color: var(qtc_list_item_content_normal);
+}
+
+DigitalClockWidget::amPmLabel{
+ color: var(qtc_list_item_content_normal);
+}
\ No newline at end of file
--- a/clock/clockui/clockwidget/clockwidgetimpl/src/analogclockwidget.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockwidget/clockwidgetimpl/src/analogclockwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -41,7 +41,9 @@
AnalogClockWidget::AnalogClockWidget(QGraphicsItem *parent)
: HbWidget(parent)
{
- HbStyleLoader::registerFilePath(":/resource");
+ bool result = HbStyleLoader::registerFilePath(":/resource/analogclockwidget.widgetml");
+ result = HbStyleLoader::registerFilePath(":/resource/analogclockwidget.css");
+
updatePrimitives();
mTimer = new QTimer(this);
connect(mTimer, SIGNAL(timeout()), SLOT(tick()));
--- a/clock/clockui/clockwidget/clockwidgetimpl/src/clockwidget.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/clockui/clockwidget/clockwidgetimpl/src/clockwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -21,6 +21,7 @@
// User includes
#include "clockwidget.h"
#include "analogclockwidget.h"
+#include "digitalclockwidget.h"
/*!
\class ClockWidget
@@ -33,7 +34,7 @@
*/
ClockWidget::ClockWidget(QGraphicsItem *parent, Qt::WindowFlags flags)
: HbWidget(parent, flags),
- mClockType(ClockTypeAnalog)
+ mClockType(ClockTypeDigital)
{
loadClockWidget();
}
@@ -59,10 +60,16 @@
*/
void ClockWidget::setClockType(const ClockType &type)
{
- if (type == ClockTypeDigital) {
- mClockType = ClockTypeDigital;
+ if (type == ClockTypeAnalog) {
+ if(type != mClockType){
+ mClockType = ClockTypeAnalog;
+ updateClockWidget();
+ }
} else {
- mClockType = ClockTypeAnalog;
+ if(type != mClockType){
+ mClockType = ClockTypeDigital;
+ updateClockWidget();
+ }
}
}
@@ -73,6 +80,8 @@
{
if (mClockType == ClockTypeAnalog) {
mAnalogClock->tick();
+ } else {
+ mDigitalClock->updatePrimitives();
}
}
@@ -81,13 +90,57 @@
*/
void ClockWidget::loadClockWidget()
{
+ mLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ mLayout->setContentsMargins(0,0,0,0);
+
if (mClockType == ClockTypeAnalog) {
- mAnalogClock = new AnalogClockWidget(this);
- mLayout = new QGraphicsLinearLayout(Qt::Vertical);
- mLayout->setContentsMargins(0,0,0,0);
+ mAnalogClock = new AnalogClockWidget(this);
+ mLayout->addItem(mAnalogClock);
+ } else {
+ bool useAmPm = false;
+ mDigitalClock = new DigitalClockWidget(useAmPm, this);
+ mLayout->addItem(mDigitalClock);
+ }
+ setLayout(mLayout);
+}
+
+/*!
+ Constructs the clockwidget based upon its type.
+*/
+void ClockWidget::updateClockWidget()
+{
+ if (mClockType == ClockTypeAnalog) {
+ mLayout->removeItem(mDigitalClock);
+ delete mDigitalClock;
+ if (!mAnalogClock) {
+ mAnalogClock = new AnalogClockWidget(this);
+ }
mLayout->addItem(mAnalogClock);
- setLayout(mLayout);
+ } else {
+ mLayout->removeItem(mAnalogClock);
+ delete mAnalogClock;
+ if(!mDigitalClock){
+ bool useAmPm = false; // find out this fronm the settings utility
+ mDigitalClock = new DigitalClockWidget(useAmPm, this);
+ }
+ mLayout->addItem(mDigitalClock);
+ }
+}
+
+ClockWidget::TimeFormat ClockWidget::timeFormat() const
+{
+ return mTimeFormat;
+}
+
+void ClockWidget::setTimeFormat(const TimeFormat &timeFormat)
+{
+ if(mDigitalClock){
+ mTimeFormat = timeFormat;
+ if (timeFormat == ClockWidget::TimeFormat12Hrs) {
+ mDigitalClock->setAmPm(true);
+ } else {
+ mDigitalClock->setAmPm(false);
+ }
}
}
-
// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/src/digitalclockwidget.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,157 @@
+/*
+* Copyright (c) 2010 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: DigitalClockWidget
+*
+*/
+
+// System includes
+#include <HbStyleLoader>
+#include <HbLabel>
+#include <HbTextItem>
+#include <hbextendedlocale>
+#include <QGraphicsSceneMouseEvent>
+#include <QSizePolicy>
+#include <QTimer>
+#include <QTime>
+
+// User includes
+#include "digitalclockwidget.h"
+
+// Constants
+const int clockUpdateInterval (60000); // msec
+
+/*!
+ \class DigitalClockWidget
+
+ This class implements the digitalclock widget which gets displayed
+ in the clockmainview when the clocktype is set to digital type.
+*/
+
+/*!
+ Constructor.
+ \param useAmPm bool for setting 12 hour format
+ \param parent The parent of type QGraphicsItem.
+*/
+DigitalClockWidget::DigitalClockWidget(bool useAmPm, QGraphicsItem *parent)
+ : HbWidget(parent),
+ mUseAmPm(useAmPm)
+{
+ bool result = HbStyleLoader::registerFilePath(":/resource/digitalclockwidget.widgetml");
+ result = HbStyleLoader::registerFilePath(":/resource/digitalclockwidget.css");
+ result = HbStyleLoader::registerFilePath(":/resource/digitalclockwidget_color.css");
+
+ createPrimitives();
+
+ mTimer = new QTimer(this);
+ connect(mTimer, SIGNAL(timeout()), SLOT(tick()));
+
+ QTime time = QTime::currentTime();
+ int initialIntervalTime = (clockUpdateInterval - ( time.msec() + (time.second() * 1000)));
+ mTimer->start(initialIntervalTime);
+
+}
+
+/*!
+ Destructor.
+*/
+DigitalClockWidget::~DigitalClockWidget()
+{
+ mTimer->stop();
+ HbStyleLoader::unregisterFilePath(":/resource/digitalclockwidget.widgetml");
+ HbStyleLoader::unregisterFilePath(":/resource/digitalclockwidget.css");
+ HbStyleLoader::unregisterFilePath(":/resource/digitalclockwidget_color.css");
+
+}
+
+/*!
+ Updates clock visualization according to current time
+ */
+void DigitalClockWidget::tick()
+{
+ mTimer->setInterval(clockUpdateInterval);
+ updatePrimitives();
+ update();
+}
+
+/*!
+ Toggles time format
+ */
+void DigitalClockWidget::setAmPm(bool useAmPm)
+{
+
+ bool old = mUseAmPm;
+ mUseAmPm = useAmPm;
+
+ if (mUseAmPm != old) { // change am/pm label
+ QTime time = QTime::currentTime();
+ QString timeString;
+ if (mUseAmPm) {
+ mAmPmLabel->setText(time.toString("ap")); // set am/pm label
+ } else {
+ mAmPmLabel->setText(""); // set am/pm label as null
+ }
+ }
+
+}
+
+/*!
+ @copydoc HbWidget::resizeEvent()
+ */
+void DigitalClockWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ HbWidget::resizeEvent(event);
+}
+
+/*!
+ Creates all widget primitives.
+ */
+void DigitalClockWidget::createPrimitives()
+{
+ mClockLabel = new HbTextItem(this);
+ mClockLabel->setTextWrapping( Hb::TextNoWrap );
+ HbStyle::setItemName(mClockLabel, QLatin1String("clockLabel"));
+
+ mAmPmLabel = new HbTextItem(this);
+ mClockLabel->setTextWrapping( Hb::TextNoWrap );
+ HbStyle::setItemName(mAmPmLabel, QLatin1String("amPmLabel"));
+}
+
+/*!
+ @copydoc HbWidget::updatePrimitives()
+ updates all widget primitives
+ */
+void DigitalClockWidget::updatePrimitives()
+{
+
+ QTime time = QTime::currentTime();
+ QString timeString;
+
+ if (mUseAmPm) {
+ timeString = time.toString("hh:ap"); // covert time in 12 hours format
+ timeString = timeString.section(":", 0, 0); // it would remove :ap section from timeString
+ mAmPmLabel->setText(time.toString("ap")); // set am/pm label
+ } else {
+ mAmPmLabel->setText(""); // set am/pm label as null
+ timeString = time.toString("hh"); // append hour part
+ }
+
+ int index(1);
+ HbExtendedLocale locale;
+ QChar timeSeparator(locale.timeSeparator(index)) ;
+ timeString.append(timeSeparator); // append time separator
+ timeString.append(time.toString("mm")); //append minute part
+
+ mClockLabel->setText(timeString);
+
+}
--- a/clock/clockui/clockwidget/eabi/clockwidgetu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-EXPORTS
- _ZN11ClockWidget10updateTimeEv @ 1 NONAME
- _ZN11ClockWidget11qt_metacallEN11QMetaObject4CallEiPPv @ 2 NONAME
- _ZN11ClockWidget11qt_metacastEPKc @ 3 NONAME
- _ZN11ClockWidget12setClockTypeERKNS_9ClockTypeE @ 4 NONAME
- _ZN11ClockWidget15loadClockWidgetEv @ 5 NONAME
- _ZN11ClockWidget16staticMetaObjectE @ 6 NONAME DATA 16
- _ZN11ClockWidget19getStaticMetaObjectEv @ 7 NONAME
- _ZN11ClockWidgetC1EP13QGraphicsItem6QFlagsIN2Qt10WindowTypeEE @ 8 NONAME
- _ZN11ClockWidgetC2EP13QGraphicsItem6QFlagsIN2Qt10WindowTypeEE @ 9 NONAME
- _ZN11ClockWidgetD0Ev @ 10 NONAME
- _ZN11ClockWidgetD1Ev @ 11 NONAME
- _ZN11ClockWidgetD2Ev @ 12 NONAME
- _ZNK11ClockWidget10metaObjectEv @ 13 NONAME
- _ZNK11ClockWidget9clockTypeEv @ 14 NONAME
- _ZTI11ClockWidget @ 15 NONAME
- _ZTV11ClockWidget @ 16 NONAME
- _ZThn16_N11ClockWidgetD0Ev @ 17 NONAME
- _ZThn16_N11ClockWidgetD1Ev @ 18 NONAME
- _ZThn8_N11ClockWidgetD0Ev @ 19 NONAME
- _ZThn8_N11ClockWidgetD1Ev @ 20 NONAME
-
--- a/clock/clockui/eabi/clockalarmeditoru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- _ZN16ClockAlarmEditor15showAlarmEditorEv @ 1 NONAME
- _ZN16ClockAlarmEditorC1ER11AlarmClientiP7QObject @ 2 NONAME
- _ZN16ClockAlarmEditorC2ER11AlarmClientiP7QObject @ 3 NONAME
- _ZN16ClockAlarmEditorD0Ev @ 4 NONAME
- _ZN16ClockAlarmEditorD1Ev @ 5 NONAME
- _ZN16ClockAlarmEditorD2Ev @ 6 NONAME
-
--- a/clock/clockui/eabi/clockappcontrolleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-EXPORTS
- _ZN18ClockAppControllerC1EP7QObject @ 1 NONAME
- _ZN18ClockAppControllerC2EP7QObject @ 2 NONAME
- _ZN18ClockAppControllerD0Ev @ 3 NONAME
- _ZN18ClockAppControllerD1Ev @ 4 NONAME
- _ZN18ClockAppControllerD2Ev @ 5 NONAME
-
--- a/clock/clockui/eabi/clockcityselectionlistu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-EXPORTS
- _ZN22ClockCitySelectionList11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
- _ZN22ClockCitySelectionList11qt_metacastEPKc @ 2 NONAME
- _ZN22ClockCitySelectionList12citySelectedE12LocationInfo @ 3 NONAME
- _ZN22ClockCitySelectionList12showCityListEv @ 4 NONAME
- _ZN22ClockCitySelectionList13closeCityListEv @ 5 NONAME
- _ZN22ClockCitySelectionList16staticMetaObjectE @ 6 NONAME DATA 16
- _ZN22ClockCitySelectionList19getStaticMetaObjectEv @ 7 NONAME
- _ZN22ClockCitySelectionListC1EP14TimezoneClientP7QObject @ 8 NONAME
- _ZN22ClockCitySelectionListC1EP7QObject @ 9 NONAME
- _ZN22ClockCitySelectionListC2EP14TimezoneClientP7QObject @ 10 NONAME
- _ZN22ClockCitySelectionListC2EP7QObject @ 11 NONAME
- _ZNK22ClockCitySelectionList10metaObjectEv @ 12 NONAME
- _ZTI22ClockCitySelectionList @ 13 NONAME
- _ZTV22ClockCitySelectionList @ 14 NONAME
-
--- a/clock/clockui/eabi/clocksettingsviewu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- _ZN17ClockSettingsView16loadSettingsViewEv @ 1 NONAME
- _ZN17ClockSettingsViewC1EP7QObject @ 2 NONAME
- _ZN17ClockSettingsViewC2EP7QObject @ 3 NONAME
- _ZN17ClockSettingsViewD0Ev @ 4 NONAME
- _ZN17ClockSettingsViewD1Ev @ 5 NONAME
- _ZN17ClockSettingsViewD2Ev @ 6 NONAME
-
--- a/clock/clockui/eabi/clockviewmanageru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- _ZN16ClockViewManager8showViewE10ClockViews @ 1 NONAME
- _ZN16ClockViewManagerC1ER20ClockAppControllerIfP7QObject @ 2 NONAME
- _ZN16ClockViewManagerC2ER20ClockAppControllerIfP7QObject @ 3 NONAME
- _ZN16ClockViewManagerD0Ev @ 4 NONAME
- _ZN16ClockViewManagerD1Ev @ 5 NONAME
- _ZN16ClockViewManagerD2Ev @ 6 NONAME
-
--- a/clock/clockui/eabi/clockviewsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,32 +0,0 @@
-EXPORTS
- _ZN13ClockMainView19setupAfterViewReadyEv @ 1 NONAME
- _ZN13ClockMainView9setupViewER20ClockAppControllerIfP14ClockDocLoader @ 2 NONAME
- _ZN13ClockMainViewC1EP13QGraphicsItem @ 3 NONAME
- _ZN13ClockMainViewC2EP13QGraphicsItem @ 4 NONAME
- _ZN13ClockMainViewD0Ev @ 5 NONAME
- _ZN13ClockMainViewD1Ev @ 6 NONAME
- _ZN13ClockMainViewD2Ev @ 7 NONAME
- _ZN14ClockWorldView9setupViewER20ClockAppControllerIfP14ClockDocLoader @ 8 NONAME
- _ZN14ClockWorldViewC1EP13QGraphicsItem @ 9 NONAME
- _ZN14ClockWorldViewC2EP13QGraphicsItem @ 10 NONAME
- _ZN14ClockWorldViewD0Ev @ 11 NONAME
- _ZN14ClockWorldViewD1Ev @ 12 NONAME
- _ZN14ClockWorldViewD2Ev @ 13 NONAME
- _ZN17ClockHomeCityItemC1EP13QGraphicsItem @ 14 NONAME
- _ZN17ClockHomeCityItemC2EP13QGraphicsItem @ 15 NONAME
- _ZN17ClockHomeCityItemD0Ev @ 16 NONAME
- _ZN17ClockHomeCityItemD1Ev @ 17 NONAME
- _ZN17ClockHomeCityItemD2Ev @ 18 NONAME
- _ZThn16_N13ClockMainViewD0Ev @ 19 NONAME
- _ZThn16_N13ClockMainViewD1Ev @ 20 NONAME
- _ZThn16_N14ClockWorldViewD0Ev @ 21 NONAME
- _ZThn16_N14ClockWorldViewD1Ev @ 22 NONAME
- _ZThn16_N17ClockHomeCityItemD0Ev @ 23 NONAME
- _ZThn16_N17ClockHomeCityItemD1Ev @ 24 NONAME
- _ZThn8_N13ClockMainViewD0Ev @ 25 NONAME
- _ZThn8_N13ClockMainViewD1Ev @ 26 NONAME
- _ZThn8_N14ClockWorldViewD0Ev @ 27 NONAME
- _ZThn8_N14ClockWorldViewD1Ev @ 28 NONAME
- _ZThn8_N17ClockHomeCityItemD0Ev @ 29 NONAME
- _ZThn8_N17ClockHomeCityItemD1Ev @ 30 NONAME
-
Binary file clock/conf/CI_clockapp.confml has changed
Binary file clock/conf/clockapp.confml has changed
Binary file clock/conf/clockapp_101F874D.crml has changed
Binary file clock/conf/clockapp_101F8876.crml has changed
--- a/clock/data/clock.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/data/clock.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -11,8 +11,5 @@
<file alias="fade_out.fxml">effects/fade_out.fxml</file>
<file alias="fade_in.fxml">effects/fade_in.fxml</file>
- </qresource>
- <qresource prefix="/translations">
- <file alias="clock" >translations/clock.qm</file>
- </qresource>
+ </qresource>
</RCC>
\ No newline at end of file
Binary file clock/data/translations/clock.qm has changed
--- a/clock/data/translations/clock.ts Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,376 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="3.0" language="en_GB" sourcelanguage="en_GB">
-<context>
-<message numerus="no" id="txt_common_common_clock">
- <comment>Title for Date and time settings view</comment>
- <source>Clock</source>
- <translation variants="no">Clock</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dblist_val_1_hr">
- <comment>LayoutID Parent. Custom. When a city is added to the World Clock list view, its relative time offset is displayed with respect to Homecity. (Hour)</comment>
- <source>%1 hr</source>
- <translation variants="no">%1 hr</translation>
- <extra-loc-layout_id>txt_clock_dblist_val_l1_hr</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dblist_daily_val_1_hr_2_mins">
- <comment>When a city is added to the World Clock list view, its relative time offset is displayed with respect to Homecity. (Hour and Mins)</comment>
- <source>%1 hr %2 mins</source>
- <translation variants="no">%1 hr %2 mins</translation>
- <extra-loc-layout_id>txt_clock_dblist_val_l1_hr</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dblist_val_1_mins">
- <comment>When a city is added to the World Clock list view, its relative time offset is displayed with respect to Homecity. (Mins)</comment>
- <source>%1 mins</source>
- <translation variants="no">%1 mins</translation>
- <extra-loc-layout_id>txt_clock_dblist_val_l1_hr</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_mm_dd_yyyy">
- <comment>2nd value in combo box list for Date format label</comment>
- <source>mm dd yyyy</source>
- <translation variants="no">mm dd yyyy</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_2_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_in_1hr_2min">
- <comment>Secondary text displaying the time remaining for the alarm (hour, min)</comment>
- <source>In %1hr %2min</source>
- <translation variants="no">In %1hr %2min</translation>
- <extra-loc-layout_id>txt_clock_main_view_setlabel_in_1hr_2min</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_opt_add_city">
- <comment></comment>
- <source>Add city</source>
- <translation variants="no">Add city</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_menu_show_on_homescreen">
- <comment>Long tap menu on an added city in World clock view (both portrait and landscape)</comment>
- <source>Show on homescreen</source>
- <translation variants="no">Show on homescreen</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_menu_delete">
- <comment>Long tap menu on an added city in World Clock view (both portrait and landscape)</comment>
- <source>Delete</source>
- <translation variants="no">Delete</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_in_1hr_2mins">
- <comment>Secondary text displaying the time remaining for the alarm (hour, mins)</comment>
- <source>In %1hr %2mins</source>
- <translation variants="no">In %1hr %2mins</translation>
- <extra-loc-layout_id>txt_clock_main_view_setlabel_in_1hr_2mins</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_setlabel_dst">
- <comment></comment>
- <source>DST</source>
- <translation variants="no">DST</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_in_1hrs_2mins">
- <comment>Secondary text displaying the time remaining for the alarm (hours, mins)</comment>
- <source>In %1hrs %2mins</source>
- <translation variants="no">In %1hrs %2mins</translation>
- <extra-loc-layout_id>txt_clock_main_view_setlabel_in_1hrs_2mins</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_button_alarms">
- <comment></comment>
- <source>Alarms</source>
- <translation variants="no">Alarms</translation>
- <extra-loc-layout_id>qtl_toolbar_tiny1_3</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_button_world_clock">
- <comment></comment>
- <source>World clock</source>
- <translation variants="no">World clock</translation>
- <extra-loc-layout_id>qtl_toolbar_tiny1_3</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_dblist_daily_val_workdays">
- <comment>Layout ID Parent. Custom Layout. Text to show the alarm occurance.</comment>
- <source>Workdays</source>
- <translation variants="no">Workdays</translation>
- <extra-loc-layout_id>txt_clock_main_view_dblist_daily_val_today</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_yyyy_mm_dd">
- <comment>3rd value in combo box list for Date format label</comment>
- <source>yyyy mm dd</source>
- <translation variants="no">yyyy mm dd</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_3_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_dblist_daily">
- <comment>Layout ID Parent. Custom Layout. Text to show the alarm occurance.</comment>
- <source>Daily</source>
- <translation variants="no">Daily</translation>
- <extra-loc-layout_id>txt_clock_main_view_dblist_daily_val_today</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>dblist_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_subhead_world_clock">
- <comment>Subtitle for World Clock view</comment>
- <source>World Clock</source>
- <translation variants="no">World Clock</translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_button_new_alarm">
- <comment></comment>
- <source>New alarm</source>
- <translation variants="no">New alarm</translation>
- <extra-loc-layout_id>qtl_toolbar_tiny1_3</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_button_add_city">
- <comment></comment>
- <source>Add city</source>
- <translation variants="no">Add city</translation>
- <extra-loc-layout_id>qtl_toolbar_tiny1_3</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_gmt_1">
- <comment>Layout ID Parent. Custom. Text to display the GMT info for that city.</comment>
- <source>GMT %1</source>
- <translation variants="no">GMT %1</translation>
- <extra-loc-layout_id>txt_clock_main_view_label_gmt_1</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_in_1hrs_2min">
- <comment>Secondary text displaying the time remaining for the alarm (hours, min)</comment>
- <source>In %1hrs %2min</source>
- <translation variants="no">In %1hrs %2min</translation>
- <extra-loc-layout_id>txt_clock_main_view_setlabel_in_1hrs_2min</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_common_common_gmt">
- <comment></comment>
- <source>GMT</source>
- <translation variants="no">GMT</translation>
- <extra-loc-layout_id></extra-loc-layout_id>
- <extra-loc-viewid>Common</extra-loc-viewid>
- <extra-loc-positionid>Common</extra-loc-positionid>
- <extra-loc-feature>Co</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_short_caption_clock">
- <comment>Clock application in Application library grid</comment>
- <source>Clock</source>
- <translation variants="no">Clock</translation>
- <extra-loc-layout_id>qtl_grid_applications_sec</extra-loc-layout_id>
- <extra-loc-viewid>Clock</extra-loc-viewid>
- <extra-loc-positionid>grid</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_in_1days">
- <comment>Layout ID Parent. Custom layout. Days remaining for the alarm</comment>
- <source>In %1days</source>
- <translation variants="no">In %1days</translation>
- <extra-loc-layout_id>txt_clock_main_view_setlabel_in_1days</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dblist_val_1_hrs">
- <comment>When a city is added to the World Clock list view, its relative time offset is displayed with respect to Homecity. (Hours)</comment>
- <source>%1 hrs</source>
- <translation variants="no">%1 hrs</translation>
- <extra-loc-layout_id>txt_clock_dblist_val_l1_hr</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_main_view_menu_delete_alarm">
- <comment>Long tap on an alarm in Alarm list opens the item specific menu displaying text "Delete alarm"</comment>
- <source>Delete alarm</source>
- <translation variants="no">Delete alarm</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_setlabel_every_1">
- <comment>Layout ID Parent. Custom. Alarm Occurance detail.</comment>
- <source>Every %1</source>
- <translation variants="no">Every %1</translation>
- <extra-loc-layout_id>txt_clock_main_view_label_every_1</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_dblist_daily_val_today">
- <comment>Layout ID Parent. Custom Layout. Text to show the alarm occurance.</comment>
- <source>Today</source>
- <translation variants="no">Today</translation>
- <extra-loc-layout_id>txt_clock_main_view_dblist_daily_val_today</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_long_caption_clock">
- <comment>Clock application in Application library list</comment>
- <source>Clock</source>
- <translation variants="no">Clock</translation>
- <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Clock</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_main_view_opt_settings">
- <comment>Item in Options menu from Clock main vew</comment>
- <source>Settings</source>
- <translation variants="no">Settings</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_menu_set_as_current_location">
- <comment>Long tap menu on an added city in the World clock view (both portrait and landscape)</comment>
- <source>Set as current location</source>
- <translation variants="no">Set as current location</translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_dpopinfo_alarm_deactivated">
- <comment>Information shown in a popup once the alarm is deactivated</comment>
- <source>Alarm Deactivated</source>
- <translation variants="no">Alarm Deactivated</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_main_view_list_no_alarms_set">
- <comment>When there are no alarms set in Clock main view, the text "No alarms set" is displayed in list.</comment>
- <source>No alarms set</source>
- <translation variants="no">No alarms set</translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_with no alarms set_P02</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_main_view_dpopinfo_alarm_activated">
- <comment>Information shown in a popup once the alarm is activated</comment>
- <source>Alarm Activated</source>
- <translation variants="no">Alarm Activated</translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clk_setlabel_val_dd_mm_yyyy">
- <comment>1st value in combo box list for Date format label</comment>
- <source>dd mm yyyy</source>
- <translation variants="no">dd mm yyyy</translation>
- <extra-loc-layout_id>qtl_dataform_group_pri</extra-loc-layout_id>
- <extra-loc-viewid>Clock main view_P01</extra-loc-viewid>
- <extra-loc-positionid>setlabel_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_clock_dblist_daily_val_1_hrs_2_mins">
- <comment>When a city is added to the World Clock list view, its relative time offset is displayed with respect to Homecity. (Hours and Mins)</comment>
- <source>%1 hrs %2 mins</source>
- <translation variants="no">%1 hrs %2 mins</translation>
- <extra-loc-layout_id>txt_clock_dblist_val_l1_hr</extra-loc-layout_id>
- <extra-loc-viewid>Clock_World clock_P05</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>Cl</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-</context>
-</TS>
--- a/clock/ftudatetimewizard/ftudatetimewizard.pro Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,77 +0,0 @@
-#
-# Copyright (c) 2009 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: FTU datetime wizard project file
-#
-
-TEMPLATE = lib
-
-CONFIG += plugin hb
-TARGET = ftudatetimewizard
-
-HEADERS += ./inc/*.h
-SOURCES += ./src/*.cpp
-
-RESOURCES += resources/ftudatetimewizard.qrc
-
-plugin.sources = ftudatetimewizard.dll
-plugin.path = \resource\qt\plugins\FTU
-
-pluginstub.sources = resource/*.manifest
-pluginstub.path = /fturesources/plugins/wizardproviders
-
-DEPLOYMENT += plugin pluginstub
-
-CONFIG(debug, debug|release) {
- DESTDIR = debug
- LIBS += -lftuwizardmodel
-} else {
- DESTDIR = release
- LIBS += -lftuwizardmodel
-}
-
-CONFIG += plugin debug_and_release
-
-QT += xml sql
-
-DEFINES += FTUDATETIMEWIZARD_LIB
-
-coverage:DEFINES += COVERAGE_MEASUREMENT
-
-DEPENDPATH += ./inc \
- ./src
-
-INCLUDEPATH += ./inc/ \
- ../clockmw/clocksettingsutility/inc \
- ../clockmw/clocktimezone/inc \
- ../clockengines/inc \
- ../clockengines/clockserver/server/inc \
- ../clockui/clockcityselectionlist/inc \
- ../inc
-symbian: {
- TARGET.UID3 = 0x2002C30C
- TARGET.EPOCALLOWDLLDATA=1
- TARGET.CAPABILITY = ALL -TCB
- TARGET.CAPABILITY = CAP_GENERAL_DLL
- INCLUDEPATH += $$MW_LAYER_SYSTEMINCLUDE
-
- LIBS += -leuser \
- -lclocksettingsutility \
- -lclockserverclient \
- -ltimezoneclient \
- -lxqsettingsmanager \
- -lclockcityselectionlist
-
-}
-
-# End of file --Don't remove this.
\ No newline at end of file
--- a/clock/ftudatetimewizard/inc/ftudatetimecustomitem.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
- * Copyright (c) 2009 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: Definition for the FtuDateTimeCustomItem class
- *
- */
-
-#ifndef FTUDATETIMECUSTOMITEM_H_
-#define FTUDATETIMECUSTOMITEM_H_
-
-// System includes
-#include <QObject>
-#include <hbdataformviewitem.h>
-
-// Forward declarations
-class HbDataFormModel;
-class HbPushButton;
-
-class FtuDateTimeCustomItem : public HbDataFormViewItem
-{
- Q_OBJECT
-
-public:
- FtuDateTimeCustomItem(QGraphicsItem *parent);
- ~FtuDateTimeCustomItem();
- virtual HbAbstractViewItem* createItem();
- bool canSetModelIndex(const QModelIndex &index) const;
- void restore();
-
-protected:
- virtual HbWidget* createCustomWidget();
- HbPushButton* mPushButton;
-};
-
-#endif /* FTUDATETIMECUSTOMITEM_H_ */
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/inc/ftudatetimeprivatecrkeys.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,46 +0,0 @@
-/*
- * Copyright (c) 2009 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: The file contains the uid of keys used by cenrep sheet
- *
- */
-
-#ifndef FTUDATETIMEPRIVATECRKEYS_H_
-#define FTUDATETIMEPRIVATECRKEYS_H_
-
-/*!
- Clock App Settings
- Provides access to the plugin completed date.
- */
-const long int KCRUidClockApp = { 0x101F874D };
-
-/*!
- FTU date time plugin edited date
- */
-const long int KFtuPluginDate = 0x00000003;
-
-
-/*!
- Nitz Settings API
- Provides access to the Nitz status.
- */
-const long int KCRUidNitz = { 0x101F8876 };
-
-/*!
- Valid Nitz Info key
- */
-const long int KValidNitz = 0x00000004;
-
-#endif /* FTUDATETIMEPRIVATECRKEYS_H_ */
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/inc/ftudatetimeview.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,96 +0,0 @@
-/*
- * Copyright (c) 2009 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: The view class for the FTU wizard plugin
- *
- */
-
-#ifndef FTUDATETIMEVIEW_H
-#define FTUDATETIMEVIEW_H
-
-// System includes
-#include <QPointer>
-#include <QDateTime>
-#include <HbWidget>
-#include <HbView>
-#include <HbDialog>
-#include "clockcityselectionlist.h"
-
-// Forward declarations.
-class HbDataForm;
-class HbDataFormModel;
-class HbDataFormModelItem;
-class HbDateTimePicker;
-class HbPushButton;
-class SettingsUtility;
-class QDate;
-class TimezoneClient;
-
-class FtuDateTimeView : public HbView
-{
- Q_OBJECT
-
-public:
- FtuDateTimeView();
- ~FtuDateTimeView();
- void constructView();
- QDate getWizardCompletedDate();
- void setAutomaticTimeUpdateOff(bool value);
-
-public slots:
- void populateDatePicker();
- void populateTimePicker();
- void setAutoTimeupDate();
- void populateCitySelectionList();
-
-private slots:
- void updateDate();
- void updateTime();
- void HandleLocationChange(LocationInfo);
- void selectedAction(HbAction *action);
-
-private:
- void createMainLayout();
- void setItemDisplayed();
- void populateDateTimeGroup();
- void populatePlaceGroup();
- void wizardEditedDate(const QDate &date);
-
-private:
- HbDataForm* mDateTimePlaceForm;
- HbDataFormModel* mDateTimePlaceModel;
-
- HbDataFormModelItem *mDateItem;
- HbDataFormModelItem *mTimeItem;
- HbDataFormModelItem *mAutoTimeUpdateItem;
- HbDataFormModelItem *mPlaceGroup;
- HbDataFormModelItem *mCountryItem;
- HbDataFormModelItem *mCityItem;
-
- HbDateTimePicker* mDatePicker;
- HbDateTimePicker* mTimePicker;
- QPointer<HbDialog> mDatePickerDialog;
- QPointer<HbDialog> mTimePickerDialog;
-
- HbAction *mOkAction;
- HbAction *mCancelAction;
- SettingsUtility *mSettingsUtility;
-
- TimezoneClient *mTimeZoneClient;
- ClockCitySelectionList* mCitySelectionList;
- bool mTimeAutoUpdate;
-};
-
-#endif // FTUDATETIMEVIEW_H
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/inc/ftudatetimewizard.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-/*
- * Copyright (c) 2009 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: Implementation of the plugin wizard class FtuDateTimeWizard
- *
- */
-
-#ifndef FTUDATETIMEWIZARD_H
-#define FTUDATETIMEWIZARD_H
-
-// System includes
-#include <QPointer>
-#include <QDate>
-
-// User includes
-#include "ftuwizard.h"
-
-// Forward declarations
-class FtuDateTimeView;
-
-class FtuDateTimeWizard : public FtuWizard
-{
- Q_OBJECT
-
-public:
- FtuDateTimeWizard();
- ~FtuDateTimeWizard();
-
-protected:
- void initializeWizard(qint32 cenrepOwnerId, int wizardIdx);
- void activateWizard();
- void deactivateWizard();
- bool shutdownWizard(ShutdownReason reason);
- void resizeWizard(const QRectF& geometry);
- const FtuWizardSetting& wizardSettings();
- bool handleBackEvent();
- QDate wizardCompletedDate();
-
-private:
- QPointer<FtuDateTimeView> mFtuDateTimeView;
- FtuWizardSetting mWizardSettings;
-};
-
-#endif // FTUDATETIMEWIZARD_H
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/inc/ftudatetimewizardfactory.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-/*
- * Copyright (c) 2009 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: Definition file for FtuDateTimeWizardFactory class
- *
- */
-
-#ifndef FTUDATETIMEWIZARDFACTORY_H
-#define FTUDATETIMEWIZARDFACTORY_H
-
-// System includes
-#include <QObject>
-
-// User includes
-#include "ftuwizardfactory.h"
-
-class FtuWizard;
-
-class FtuDateTimeWizardFactory : public QObject, public FtuWizardFactory
-{
- Q_OBJECT
- Q_INTERFACES(FtuWizardFactory)
-
-public:
- FtuWizard* createWizard() const;
-};
-
-#endif // FTUDATETIMEWIZARDFACTORY_H
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/resource/ftudatetimewizard.manifest Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<plugin>
- <runtime library="ftudatetimewizard.dll"
- uri="ftu.nokia.com/plugin/ftudatetimewizard"/>
-</plugin>
--- a/clock/ftudatetimewizard/resources/ftudatetimewizard.qrc Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,6 +0,0 @@
-<RCC>
- <qresource prefix="/images" >
- <file>ftudatetimewizard_toc_icon.svg</file>
- <file>ftudatetimewizard_menustrip_icon.svg</file>
- </qresource>
-</RCC>
--- a/clock/ftudatetimewizard/resources/ftudatetimewizard_menustrip_icon.svg Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
- x="0px" y="0px" width="98px" height="98px" viewBox="0 0 98 98" enable-background="new 0 0 98 98" xml:space="preserve">
-<defs>
-</defs>
-<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="48.9995" y1="12.501" x2="48.9995" y2="83.6684">
- <stop offset="0" style="stop-color:#BDC2C4"/>
- <stop offset="1" style="stop-color:#454B4D"/>
-</linearGradient>
-<path fill="url(#SVGID_1_)" d="M48.999,84C29.148,84,13,67.852,13,48c0-19.85,16.148-36,35.999-36C68.852,12,85,28.15,85,48
- C85,67.852,68.852,84,48.999,84L48.999,84z"/>
-<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="48.9995" y1="13.501" x2="48.9995" y2="82.8443">
- <stop offset="0" style="stop-color:#D1D7D9"/>
- <stop offset="0.2364" style="stop-color:#BDC2C4"/>
- <stop offset="1" style="stop-color:#697173"/>
-</linearGradient>
-<circle fill="url(#SVGID_2_)" cx="49" cy="48" r="35"/>
-<path opacity="0.35" fill="#F1F1F2" d="M50.22,49.221c11.722,0,23.042-0.732,33.759-2.079C83.521,28.211,68.043,13,48.999,13
- c-18.932,0-34.345,15.035-34.97,33.816C25.461,48.368,37.606,49.221,50.22,49.221z"/>
-<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="14.3335" y1="30.75" x2="84.1678" y2="30.75">
- <stop offset="0" style="stop-color:#C0C5C7"/>
- <stop offset="0.2" style="stop-color:#F7FDFF"/>
- <stop offset="0.8" style="stop-color:#F7FDFF"/>
- <stop offset="1" style="stop-color:#CDD3D5"/>
-</linearGradient>
-<path fill="url(#SVGID_3_)" d="M48.999,14c19.163,0,34.72,15.402,34.989,34.5C83.99,48.334,84,48.168,84,48
- c0-19.33-15.67-35-35.001-35C29.669,13,14,28.67,14,48c0,0.168,0.01,0.334,0.012,0.5C14.281,29.402,29.837,14,48.999,14z"/>
-<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="49.0005" y1="79.5" x2="49.0005" y2="17.1192">
- <stop offset="0" style="stop-color:#BDC2C4"/>
- <stop offset="1" style="stop-color:#454B4D"/>
-</linearGradient>
-<path fill="url(#SVGID_4_)" d="M48.999,79C31.905,79,18,65.094,18,48s13.905-31,30.999-31C66.094,17,80,30.906,80,48
- S66.094,79,48.999,79L48.999,79z"/>
-<radialGradient id="SVGID_5_" cx="49" cy="102" r="109.0004" gradientUnits="userSpaceOnUse">
- <stop offset="0.4" style="stop-color:#FAF9F9"/>
- <stop offset="1" style="stop-color:#808184"/>
-</radialGradient>
-<path fill="url(#SVGID_5_)" d="M48.999,78C32.458,78,19,64.543,19,48c0-16.541,13.458-30,29.999-30C65.543,18,79,31.459,79,48
- C79,64.543,65.543,78,48.999,78L48.999,78z"/>
-<path opacity="0.7" fill="#FFFFFF" d="M48.999,50.143c9.896,0,19.341-0.832,27.997-2.332C76.893,32.459,64.377,20,48.999,20
- c-15.375,0-27.892,12.459-27.995,27.811C29.661,49.311,39.104,50.143,48.999,50.143z"/>
-<rect x="47.999" y="20.736" fill="#404041" width="2" height="6"/>
-<rect x="47.999" y="70.736" fill="#404041" width="2" height="6"/>
-<rect x="71" y="47.736" fill="#404041" width="6" height="2"/>
-<rect x="21" y="47.736" fill="#404041" width="6" height="2"/>
-<rect x="69.844" y="33.817" transform="matrix(0.5006 0.8657 -0.8657 0.5006 66.6569 -43.0647)" fill="#404041" width="1.615" height="4.842"/>
-<rect x="26.542" y="58.817" transform="matrix(0.4997 0.8662 -0.8662 0.4997 66.7294 6.9494)" fill="#404041" width="1.614" height="4.841"/>
-<rect x="60.694" y="24.665" transform="matrix(0.8659 0.5002 -0.5002 0.8659 21.7935 -27.1293)" fill="#404041" width="1.613" height="4.842"/>
-<rect x="35.693" y="67.966" transform="matrix(0.8659 0.5002 -0.5002 0.8659 40.0995 -8.8187)" fill="#404041" width="1.613" height="4.842"/>
-<rect x="35.693" y="24.665" transform="matrix(0.8662 -0.4997 0.4997 0.8662 -8.6508 21.8607)" fill="#404041" width="1.614" height="4.842"/>
-<rect x="60.694" y="67.966" transform="matrix(0.8662 -0.4997 0.4997 0.8662 -26.9417 40.1451)" fill="#404041" width="1.614" height="4.842"/>
-<rect x="26.542" y="33.815" transform="matrix(0.4992 -0.8665 0.8665 0.4992 -17.7019 41.8449)" fill="#404041" width="1.614" height="4.842"/>
-<rect x="69.843" y="58.815" transform="matrix(0.4997 -0.8662 0.8662 0.4997 -17.6948 91.8386)" fill="#404041" width="1.614" height="4.842"/>
-<path opacity="0.2" fill="#231F20" d="M51.449,49.418c-0.098-0.48-0.339-0.906-0.669-1.242l3.445-11.358l-2.87-0.871l-3.579,11.791
- c-0.622,0.352-1.08,0.958-1.226,1.68H40v1h6.551c0.026,0.131,0.066,0.26,0.113,0.383L31.232,66.232l1.297,1.299l15.376-15.375
- c0.331,0.162,0.7,0.262,1.095,0.262c1.209,0,2.217-0.857,2.449-2H75v-1H51.449z"/>
-<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-237.3208" y1="41.0786" x2="-237.3208" y2="56.5028" gradientTransform="matrix(0.9569 0.2903 -0.2903 0.9569 291.9271 64.1554)">
- <stop offset="0" style="stop-color:#58595B"/>
- <stop offset="1" style="stop-color:#231F20"/>
-</linearGradient>
-<polygon fill="url(#SVGID_6_)" points="54.226,35.402 51.355,34.531 46.999,48.885 49.871,49.756 "/>
-<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="31.9766" y1="65.3701" x2="49.5665" y2="47.7802">
- <stop offset="0" style="stop-color:#58595B"/>
- <stop offset="1" style="stop-color:#231F20"/>
-</linearGradient>
-<polygon fill="url(#SVGID_7_)" points="50.232,48.413 48.934,47.113 31.232,64.814 32.529,66.113 "/>
-<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="57.5" y1="47.8579" x2="57.5" y2="49.318">
- <stop offset="0" style="stop-color:#FF0000"/>
- <stop offset="1" style="stop-color:#A8000B"/>
-</linearGradient>
-<path fill="url(#SVGID_8_)" d="M75,48H51.449c-0.232-1.141-1.24-2-2.449-2c-1.211,0-2.219,0.859-2.449,2H40v1h6.551
- c0.23,1.142,1.238,2,2.449,2c1.209,0,2.217-0.857,2.449-2H75V48z"/>
-<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="48.9995" y1="46.917" x2="48.9995" y2="50.0016">
- <stop offset="0" style="stop-color:#FFE2D9"/>
- <stop offset="1" style="stop-color:#F23D3D"/>
-</linearGradient>
-<circle fill="url(#SVGID_9_)" cx="49" cy="48.5" r="1.5"/>
-<rect fill="none" width="98" height="98"/>
-</svg>
--- a/clock/ftudatetimewizard/resources/ftudatetimewizard_toc_icon.svg Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,84 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 14.0.0, SVG Export Plug-In -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
- <!ENTITY ns_flows "http://ns.adobe.com/Flows/1.0/">
-]>
-<svg version="1.1"
- xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:a="http://ns.adobe.com/AdobeSVGViewerExtensions/3.0/"
- x="0px" y="0px" width="98px" height="98px" viewBox="0 0 98 98" enable-background="new 0 0 98 98" xml:space="preserve">
-<defs>
-</defs>
-<linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="48.9995" y1="12.501" x2="48.9995" y2="83.6684">
- <stop offset="0" style="stop-color:#BDC2C4"/>
- <stop offset="1" style="stop-color:#454B4D"/>
-</linearGradient>
-<path fill="url(#SVGID_1_)" d="M48.999,84C29.148,84,13,67.852,13,48c0-19.85,16.148-36,35.999-36C68.852,12,85,28.15,85,48
- C85,67.852,68.852,84,48.999,84L48.999,84z"/>
-<linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="48.9995" y1="13.501" x2="48.9995" y2="82.8443">
- <stop offset="0" style="stop-color:#D1D7D9"/>
- <stop offset="0.2364" style="stop-color:#BDC2C4"/>
- <stop offset="1" style="stop-color:#697173"/>
-</linearGradient>
-<circle fill="url(#SVGID_2_)" cx="49" cy="48" r="35"/>
-<path opacity="0.35" fill="#F1F1F2" d="M50.22,49.221c11.722,0,23.042-0.732,33.759-2.079C83.521,28.211,68.043,13,48.999,13
- c-18.932,0-34.345,15.035-34.97,33.816C25.461,48.368,37.606,49.221,50.22,49.221z"/>
-<linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="14.3335" y1="30.75" x2="84.1678" y2="30.75">
- <stop offset="0" style="stop-color:#C0C5C7"/>
- <stop offset="0.2" style="stop-color:#F7FDFF"/>
- <stop offset="0.8" style="stop-color:#F7FDFF"/>
- <stop offset="1" style="stop-color:#CDD3D5"/>
-</linearGradient>
-<path fill="url(#SVGID_3_)" d="M48.999,14c19.163,0,34.72,15.402,34.989,34.5C83.99,48.334,84,48.168,84,48
- c0-19.33-15.67-35-35.001-35C29.669,13,14,28.67,14,48c0,0.168,0.01,0.334,0.012,0.5C14.281,29.402,29.837,14,48.999,14z"/>
-<linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="49.0005" y1="79.5" x2="49.0005" y2="17.1192">
- <stop offset="0" style="stop-color:#BDC2C4"/>
- <stop offset="1" style="stop-color:#454B4D"/>
-</linearGradient>
-<path fill="url(#SVGID_4_)" d="M48.999,79C31.905,79,18,65.094,18,48s13.905-31,30.999-31C66.094,17,80,30.906,80,48
- S66.094,79,48.999,79L48.999,79z"/>
-<radialGradient id="SVGID_5_" cx="49" cy="102" r="109.0004" gradientUnits="userSpaceOnUse">
- <stop offset="0.4" style="stop-color:#FAF9F9"/>
- <stop offset="1" style="stop-color:#808184"/>
-</radialGradient>
-<path fill="url(#SVGID_5_)" d="M48.999,78C32.458,78,19,64.543,19,48c0-16.541,13.458-30,29.999-30C65.543,18,79,31.459,79,48
- C79,64.543,65.543,78,48.999,78L48.999,78z"/>
-<path opacity="0.7" fill="#FFFFFF" d="M48.999,50.143c9.896,0,19.341-0.832,27.997-2.332C76.893,32.459,64.377,20,48.999,20
- c-15.375,0-27.892,12.459-27.995,27.811C29.661,49.311,39.104,50.143,48.999,50.143z"/>
-<rect x="47.999" y="20.736" fill="#404041" width="2" height="6"/>
-<rect x="47.999" y="70.736" fill="#404041" width="2" height="6"/>
-<rect x="71" y="47.736" fill="#404041" width="6" height="2"/>
-<rect x="21" y="47.736" fill="#404041" width="6" height="2"/>
-<rect x="69.844" y="33.817" transform="matrix(0.5006 0.8657 -0.8657 0.5006 66.6569 -43.0647)" fill="#404041" width="1.615" height="4.842"/>
-<rect x="26.542" y="58.817" transform="matrix(0.4997 0.8662 -0.8662 0.4997 66.7294 6.9494)" fill="#404041" width="1.614" height="4.841"/>
-<rect x="60.694" y="24.665" transform="matrix(0.8659 0.5002 -0.5002 0.8659 21.7935 -27.1293)" fill="#404041" width="1.613" height="4.842"/>
-<rect x="35.693" y="67.966" transform="matrix(0.8659 0.5002 -0.5002 0.8659 40.0995 -8.8187)" fill="#404041" width="1.613" height="4.842"/>
-<rect x="35.693" y="24.665" transform="matrix(0.8662 -0.4997 0.4997 0.8662 -8.6508 21.8607)" fill="#404041" width="1.614" height="4.842"/>
-<rect x="60.694" y="67.966" transform="matrix(0.8662 -0.4997 0.4997 0.8662 -26.9417 40.1451)" fill="#404041" width="1.614" height="4.842"/>
-<rect x="26.542" y="33.815" transform="matrix(0.4992 -0.8665 0.8665 0.4992 -17.7019 41.8449)" fill="#404041" width="1.614" height="4.842"/>
-<rect x="69.843" y="58.815" transform="matrix(0.4997 -0.8662 0.8662 0.4997 -17.6948 91.8386)" fill="#404041" width="1.614" height="4.842"/>
-<path opacity="0.2" fill="#231F20" d="M51.449,49.418c-0.098-0.48-0.339-0.906-0.669-1.242l3.445-11.358l-2.87-0.871l-3.579,11.791
- c-0.622,0.352-1.08,0.958-1.226,1.68H40v1h6.551c0.026,0.131,0.066,0.26,0.113,0.383L31.232,66.232l1.297,1.299l15.376-15.375
- c0.331,0.162,0.7,0.262,1.095,0.262c1.209,0,2.217-0.857,2.449-2H75v-1H51.449z"/>
-<linearGradient id="SVGID_6_" gradientUnits="userSpaceOnUse" x1="-237.3208" y1="41.0786" x2="-237.3208" y2="56.5028" gradientTransform="matrix(0.9569 0.2903 -0.2903 0.9569 291.9271 64.1554)">
- <stop offset="0" style="stop-color:#58595B"/>
- <stop offset="1" style="stop-color:#231F20"/>
-</linearGradient>
-<polygon fill="url(#SVGID_6_)" points="54.226,35.402 51.355,34.531 46.999,48.885 49.871,49.756 "/>
-<linearGradient id="SVGID_7_" gradientUnits="userSpaceOnUse" x1="31.9766" y1="65.3701" x2="49.5665" y2="47.7802">
- <stop offset="0" style="stop-color:#58595B"/>
- <stop offset="1" style="stop-color:#231F20"/>
-</linearGradient>
-<polygon fill="url(#SVGID_7_)" points="50.232,48.413 48.934,47.113 31.232,64.814 32.529,66.113 "/>
-<linearGradient id="SVGID_8_" gradientUnits="userSpaceOnUse" x1="57.5" y1="47.8579" x2="57.5" y2="49.318">
- <stop offset="0" style="stop-color:#FF0000"/>
- <stop offset="1" style="stop-color:#A8000B"/>
-</linearGradient>
-<path fill="url(#SVGID_8_)" d="M75,48H51.449c-0.232-1.141-1.24-2-2.449-2c-1.211,0-2.219,0.859-2.449,2H40v1h6.551
- c0.23,1.142,1.238,2,2.449,2c1.209,0,2.217-0.857,2.449-2H75V48z"/>
-<linearGradient id="SVGID_9_" gradientUnits="userSpaceOnUse" x1="48.9995" y1="46.917" x2="48.9995" y2="50.0016">
- <stop offset="0" style="stop-color:#FFE2D9"/>
- <stop offset="1" style="stop-color:#F23D3D"/>
-</linearGradient>
-<circle fill="url(#SVGID_9_)" cx="49" cy="48.5" r="1.5"/>
-<rect fill="none" width="98" height="98"/>
-</svg>
--- a/clock/ftudatetimewizard/src/ftudatetimecustomitem.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,102 +0,0 @@
-/*
- * Copyright (c) 2009 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: Implementation for the FtuDateTimeCustomItem class
- *
- */
-
-// System includes
-#include <QObject>
-#include <hblistwidget.h>
-#include <hblistwidgetitem.h>
-#include <hbpushbutton.h>
-#include <hbdataformmodelitem.h>
-#include <hbdataformmodel.h>
-
-
-// User includes
-#include "ftudatetimecustomitem.h"
-
-/*!
- \class FtuDateTimeCustomItem
- This object creates the Custom item
- */
-
-/*!
- Constructor.
- */
-FtuDateTimeCustomItem::FtuDateTimeCustomItem(QGraphicsItem *parent) :
-HbDataFormViewItem(parent)
-{
-}
-
-/*!
- Destructor.
- */
-FtuDateTimeCustomItem::~FtuDateTimeCustomItem()
-{
- // Nothing yet.
-}
-
-/*!
- Creates the custom item.
- */
-HbAbstractViewItem* FtuDateTimeCustomItem::createItem()
-{
- return new FtuDateTimeCustomItem(*this);
-}
-
-/*!
- Checks if model index can be set or not
- */
-bool FtuDateTimeCustomItem::canSetModelIndex(const QModelIndex &index) const
-{
- HbDataFormModelItem::DataItemType itemType =
- static_cast<HbDataFormModelItem::DataItemType>(
- index.data(HbDataFormModelItem::ItemTypeRole).toInt());
-
- if(itemType == (HbDataFormModelItem::CustomItemBase)) {
- return true;
- } else {
- return false;
- }
-
-}
-
-/*!
-
- */
-void FtuDateTimeCustomItem::restore()
-{
- HbDataFormModelItem::DataItemType itemType =
- static_cast<HbDataFormModelItem::DataItemType>(
- modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
- if(itemType == (HbDataFormModelItem::CustomItemBase)) {
- HbDataFormModel* model = static_cast<HbDataFormModel*>(
- static_cast<HbAbstractViewItem*>(this)->itemView()->model());
- HbDataFormModelItem* modlItem = model->itemFromIndex(modelIndex());
- mPushButton->setProperty("text", modlItem->contentWidgetData("text"));
- }
-}
-/*!
- Creates and returns the custom item.
- */
-HbWidget* FtuDateTimeCustomItem::createCustomWidget()
-{
- /*HbPushButton* pushButton = new HbPushButton(this);
- return pushButton;*/
- mPushButton = new HbPushButton(this);
- return mPushButton;
-}
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/src/ftudatetimeview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,436 +0,0 @@
-/*
- * Copyright (c) 2009 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: FTU wizard plugin view implementaion
- *
- */
-
-// System includes
-#include <QObject>
-#include <QDate>
-#include <QTime>
-#include <qabstractitemmodel.h>
-#include <hbdataform.h>
-#include <hbview.h>
-#include <hbdataformmodel.h>
-#include <hbpushbutton.h>
-#include <hbdataformviewitem.h>
-#include <hbdatetimepicker.h>
-#include <hbaction.h>
-#include <xqsettingsmanager.h>
-#include <xqsettingskey.h>
-
-// User includes
-#include "settingsutility.h"
-#include "timezoneclient.h"
-#include "ftudatetimeview.h"
-#include "ftudatetimecustomitem.h"
-#include "ftudatetimeprivatecrkeys.h"
-
-/*!
- \class FtuDateTimeView
- This is the view class for the FTU plugin
- */
-/*!
- \enum FtuDateTimeView::dateTimePicker
- This enum defines different pickers to be launched(date picker/time picker)
- */
-/*!
- \var FtuDateTimeView::datePicker
- Date picker.
- */
-/*!
- \var FtuDateTimeView::timePicker
- Time picker.
- */
-
-/*!
- Constructor.
- */
-FtuDateTimeView::FtuDateTimeView() :
-HbView(),
-mDatePicker(NULL),
-mTimePicker(NULL)
-{
- //TODO: Localisation has to be done
- // set title for wizard
- setTitle("Date and Time");
- mDateTimePlaceForm = new HbDataForm();
-
- QList <HbAbstractViewItem*> prototypes = mDateTimePlaceForm->itemPrototypes();
- FtuDateTimeCustomItem *customItem =
- new FtuDateTimeCustomItem(mDateTimePlaceForm);
- prototypes.append(customItem);
- mDateTimePlaceForm->setItemPrototypes(prototypes);
-
- // Construct the settings utility.
- mSettingsUtility = new SettingsUtility();
- mTimeZoneClient = TimezoneClient::getInstance();
- mTimeAutoUpdate = mTimeZoneClient->timeUpdateOn();
-}
-
-/*!
- Destructor.
- */
-FtuDateTimeView::~FtuDateTimeView()
-{
- delete mDateTimePlaceForm;
- delete mDateTimePlaceModel;
- delete mSettingsUtility;
-
- if (!mTimeZoneClient->isNull()) {
- mTimeZoneClient->deleteInstance();
- }
-}
-/*!
- Creates the main view.
- */
-void FtuDateTimeView::constructView()
-{
- createMainLayout();
- setWidget(mDateTimePlaceForm);
-}
-
-/*!
- Implemantation to create the main layout using the dataform.
- */
-void FtuDateTimeView::createMainLayout()
-{
- if (mDateTimePlaceForm->model()) {
- delete mDateTimePlaceForm->model();
- mDateTimePlaceForm->setModel(0);
- }
-
- mDateTimePlaceModel = new HbDataFormModel();
-
- // Populates the datetime and place groups
- populateDateTimeGroup();
- populatePlaceGroup();
-
- setItemDisplayed();
- mDateTimePlaceForm->setModel(mDateTimePlaceModel);
-}
-
-/*!
- Populates the Date and Time Group.
- */
-void FtuDateTimeView::populateDateTimeGroup()
-{
- HbDataFormModelItem *dateTimeGroup =
- mDateTimePlaceModel->appendDataFormGroup
- (QString(tr("Date and Time")),
- mDateTimePlaceModel->invisibleRootItem());
-
- //Custom Date item
- mDateItem = mDateTimePlaceModel->appendDataFormItem(
- HbDataFormModelItem::CustomItemBase,
- QString(tr("Date")), dateTimeGroup);
- // Custom Time item
- mTimeItem = mDateTimePlaceModel->appendDataFormItem(
- HbDataFormModelItem::CustomItemBase,
- QString(tr("Time")), dateTimeGroup);
- // Auto TimeUpdate item
- mAutoTimeUpdateItem = mDateTimePlaceModel->appendDataFormItem(
- HbDataFormModelItem::CustomItemBase,
- QString(tr("Time Autoupdate")), dateTimeGroup);
-
- // Connect the items to the proper slots
- mDateTimePlaceForm->addConnection(mDateItem, SIGNAL(clicked()), this,
- SLOT(populateDatePicker()));
- mDateTimePlaceForm->addConnection(mTimeItem, SIGNAL(clicked()), this,
- SLOT(populateTimePicker()));
- mDateTimePlaceForm->addConnection(mAutoTimeUpdateItem, SIGNAL(clicked()),
- this, SLOT(setAutoTimeupDate()));
-}
-
-/*!
- Populates the Place Group.
- */
-void FtuDateTimeView::populatePlaceGroup()
-{
- mPlaceGroup = mDateTimePlaceModel->appendDataFormGroup(QString(tr("Place")),
- mDateTimePlaceModel->invisibleRootItem());
- // Custom country item
- mCountryItem = mDateTimePlaceModel->appendDataFormItem(
- HbDataFormModelItem::CustomItemBase,
- QString(tr("Country")), mPlaceGroup);
- // Custom city item
- mCityItem = mDateTimePlaceModel->appendDataFormItem(
- HbDataFormModelItem::CustomItemBase,
- QString(tr("City")), mPlaceGroup);
-
- // Connect the items to the proper slots
- mDateTimePlaceForm->addConnection(mCountryItem, SIGNAL(clicked()), this,
- SLOT(populateCitySelectionList()));
- mDateTimePlaceForm->addConnection(mCityItem, SIGNAL(clicked()), this,
- SLOT(populateCitySelectionList()));
-
-
-}
-
-/*!
- Sets the item index.
- */
-void FtuDateTimeView::setItemDisplayed()
-{
- // Display the items with proper data
- mDateItem->setContentWidgetData("text", mSettingsUtility->date());
- mTimeItem->setContentWidgetData("text", mSettingsUtility->time());
-
- if (mTimeAutoUpdate) {
- mAutoTimeUpdateItem->setContentWidgetData("text", tr("ON"));
- } else {
- mAutoTimeUpdateItem->setContentWidgetData("text", tr("OFF"));
- }
- mCountryItem->setContentWidgetData("text",
- mTimeZoneClient->getCurrentZoneInfoL().countryName);
- mCityItem->setContentWidgetData("text",
- mTimeZoneClient->getCurrentZoneInfoL().cityName);
-
- // Set the date,time,country and city fields disable
- // if auto time update is ON
- if (mTimeAutoUpdate) {
- mDateItem->setEnabled(false);
- mTimeItem->setEnabled(false);
- mCountryItem->setEnabled(false);
- mCityItem->setEnabled(false);
- }
-}
-
-/*!
- Populates the Date Picker.
- */
-void FtuDateTimeView::populateDatePicker()
-{
- if (mDatePickerDialog) {
- delete mDatePickerDialog;
- }
- mDatePickerDialog = new HbDialog();
-
- mDatePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
- mDatePickerDialog->setTimeout(HbDialog::NoDismiss);
-
- if(mDatePicker) {
- mDatePicker = NULL;
- }
- mDatePicker = new HbDateTimePicker(QDate::currentDate(),
- this);
- mDatePicker->setMinimumDate(QDate::fromString("01/01/1900", "dd/MM/yyyy"));
- mDatePicker->setMaximumDate(QDate::fromString("31/12/2100", "dd/MM/yyyy"));
-
- mDatePickerDialog->setContentWidget(mDatePicker);
-
- // Add ok and cancel actions.
- mOkAction = new HbAction(
- hbTrId("txt_common_button_ok"), mDatePickerDialog);
- mCancelAction = new HbAction(
- hbTrId("txt_common_button_cancel"), mDatePickerDialog);
-
- mDatePickerDialog->addAction(mOkAction);
- mDatePickerDialog->addAction(mCancelAction);
-
- mDatePickerDialog->open(this, SLOT(selectedAction(HbAction *)));
-}
-
-/*!
- Populates the Time Picker.
- */
-void FtuDateTimeView::populateTimePicker()
-{
- if (mTimePickerDialog) {
- delete mTimePickerDialog;
- }
- mTimePickerDialog = new HbDialog();
- mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
- mTimePickerDialog->setTimeout(HbDialog::NoDismiss);
-
- if(mTimePicker) {
- mTimePicker = NULL;
- }
- mTimePicker = new HbDateTimePicker(
- QTime().currentTime(), this);
- mTimePicker->setDisplayFormat(mSettingsUtility->timeFormatString());
-
- mTimePickerDialog->setContentWidget(mTimePicker);
-
- // Add ok and cancel actions.
- mOkAction = new HbAction(
- hbTrId("txt_common_button_ok"), mTimePickerDialog);
-
- mCancelAction = new HbAction(
- hbTrId("txt_common_button_cancel"), mTimePickerDialog);
-
- mTimePickerDialog->addAction(mOkAction);
- mTimePickerDialog->addAction(mCancelAction);
-
- mTimePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
-}
-
-/*!
- Sets the Auto Time update.
- */
-void FtuDateTimeView::setAutoTimeupDate()
-{
- if (mTimeAutoUpdate) {
- mAutoTimeUpdateItem->setContentWidgetData("text", "OFF");
- // Set the fields enabled if auto time update is OFF
- mDateItem->setEnabled(true);
- mTimeItem->setEnabled(true);
- mCountryItem->setEnabled(true);
- mCityItem->setEnabled(true);
- // SetAutomaticTimeUpdate OFF, UnLoad the Plugins
- setAutomaticTimeUpdateOff(false);
- } else {
- mAutoTimeUpdateItem->setContentWidgetData("text", "ON");
- // Set the fields disabled if auto time update is ON
- mDateItem->setEnabled(false);
- mTimeItem->setEnabled(false);
- mCountryItem->setEnabled(false);
- mCityItem->setEnabled(false);
- // SetAutomaticTimeUpdate ON, Load the Plugins
- setAutomaticTimeUpdateOff(true);
- }
- wizardEditedDate(QDate::currentDate());
-}
-
-/*!
- Populates the City Selection List.
- */
-void FtuDateTimeView::populateCitySelectionList()
-{
- if(mCitySelectionList) {
- mCitySelectionList = NULL;
- }
- mCitySelectionList = new ClockCitySelectionList(mTimeZoneClient, this);
- connect(mCitySelectionList,SIGNAL(citySelected(LocationInfo)),
- SLOT(HandleLocationChange(LocationInfo)));
- mCitySelectionList->showCityList();
-}
-
-/*!
- Slot to handle the case when a city has been selected from the city.
- \param info of type LocationInfo which contains the city selected.
- */
-void FtuDateTimeView::HandleLocationChange(LocationInfo location)
-{
- // Check if the location is valid. If its not valid the timezoneId will be -1
- if(location.timezoneId != -1) {
- // Set the location
- mTimeZoneClient->setAsCurrentLocationL(location);
- mCountryItem->setContentWidgetData("text", location.countryName);
- mCityItem->setContentWidgetData("text", location.cityName);
- }
- // Cleanup
- mCitySelectionList->deleteLater();
-}
-
-/*!
- Slot to handle the selected action.
- */
-void FtuDateTimeView::selectedAction(HbAction *action)
-{
- // Update time/date based on the picker selected.
- if (action == mOkAction) {
- if (mTimePickerDialog) {
- updateTime();
- } else if(mDatePickerDialog) {
- updateDate();
- }
- }else {
- if(mTimePickerDialog) {
- mTimePickerDialog->deleteLater();
- } else if(mDatePickerDialog) {
- mDatePickerDialog->deleteLater();
- }
- }
-}
-
-/*!
- Sets the device date.
- */
-void FtuDateTimeView::updateDate()
-{
- QDate date = mDatePicker->date();
- // Set device Date
- if (date.isValid()) {
- mDateItem->setContentWidgetData("text",
- date.toString(mSettingsUtility->dateFormatString()));
- mTimeZoneClient->setDateTime(QDateTime(date, QTime::currentTime()));
- wizardEditedDate(date);
- }
-}
-
-/*!
- Sets the device time.
- */
-void FtuDateTimeView::updateTime()
-{
- QTime time = mTimePicker->time();
- // Set device Time
- if (time.isValid()) {
- mTimeItem->setContentWidgetData("text",
- time.toString(mSettingsUtility->timeFormatString()));
- mTimeZoneClient->setDateTime(QDateTime(QDate::currentDate(), time));
- wizardEditedDate(QDate::currentDate());
- }
-
-}
-
-/*!
- Gets the wizard completed status.
- */
-QDate FtuDateTimeView::getWizardCompletedDate()
-{
- XQSettingsManager *settingsManager = new XQSettingsManager();
- XQSettingsKey *ftuPluginDateCenrepKey =
- new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
- KCRUidClockApp, KFtuPluginDate);
- // Read the initial values from the cenrep
- QString dateString = settingsManager->readItemValue(*ftuPluginDateCenrepKey,
- XQSettingsManager::TypeString).toString();
- QDate completedDate = QDate::fromString(dateString,
- mSettingsUtility->dateFormatString());
-
- // Cleanup.
- delete ftuPluginDateCenrepKey;
- delete settingsManager;
-
- return completedDate;
-}
-
-/*!
- Gets the wizard Edited date.
- */
-void FtuDateTimeView::wizardEditedDate(const QDate &date)
-{
- XQSettingsManager *settingsManager = new XQSettingsManager();
- XQSettingsKey *ftuPluginDateCenrepKey =
- new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
- KCRUidClockApp, KFtuPluginDate);
- QString dateString = date.toString(mSettingsUtility->dateFormatString());
- settingsManager->writeItemValue(*ftuPluginDateCenrepKey,dateString);
-
- // Cleanup.
- delete ftuPluginDateCenrepKey;
- delete settingsManager;
-}
-
-/*!
- To set AutomaticTimeUpdate
- */
-void FtuDateTimeView::setAutomaticTimeUpdateOff(bool value)
-{
- mTimeZoneClient->setTimeUpdateOn(value);
- mTimeAutoUpdate = value;
-}
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/src/ftudatetimewizard.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,169 +0,0 @@
-/*
- * Copyright (c) 2009 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:
- *
- */
-
-// System includes
-#include <QGraphicsLayout>
-#include <centralrepository.h>
-#include <xqsettingsmanager.h>
-#include <xqsettingskey.h>
-// User includes
-#include "ftudatetimewizard.h"
-#include "ftudatetimeview.h"
-#include "ftudatetimeprivatecrkeys.h"
-
-static const char* dateTimeTitle = "Date and Time";
-static const char* dateTimeInfoText = "Set your Date Time and Location";
-static const char* dateTimeStripIcon =
- ":/images/ftudatetimewizard_menustrip_icon.svg";
-static const char* dateTimeTocIcon = ":/images/ftudatetimewizard_toc_icon.svg";
-
-/*!
- \class FtuDateTimeWizard
- This is the FTU Date time plugin wizard
- */
-
-/*!
- Constructor.
- */
-FtuDateTimeWizard::FtuDateTimeWizard()
-{
- // Set up wizard settings
- mWizardSettings.mMenustripDefaultIcon = QFileInfo(dateTimeStripIcon);
- mWizardSettings.mMenustripPressedIcon = QFileInfo(dateTimeStripIcon);
- mWizardSettings.mMenustripFocussedIcon = QFileInfo(dateTimeStripIcon);
- mWizardSettings.mMenustripLabel = tr(dateTimeTitle);
-
- mWizardSettings.mTocDefaultIcon = QFileInfo(dateTimeTocIcon);
- mWizardSettings.mTocPressedIcon = QFileInfo(dateTimeTocIcon);
- mWizardSettings.mTocFocussedIcon = QFileInfo(dateTimeTocIcon);
- mWizardSettings.mTocLabel = tr(dateTimeTitle);
-}
-
-/*!
- Destructor.
- */
-FtuDateTimeWizard::~FtuDateTimeWizard()
-{
- //delete mWizardSettings;
-}
-
-/*!
- Initialises the wizard.This is called by the FTU framework
- */
-void FtuDateTimeWizard::initializeWizard(qint32 cenrepOwnerId, int wizardIdx)
-{
- Q_UNUSED(cenrepOwnerId)
- Q_UNUSED(wizardIdx)
-
- //Check if valid Nitz info is received
- XQSettingsManager *settingsManager = new XQSettingsManager();
- XQSettingsKey *validNitzCenrepKey =
- new XQSettingsKey(XQSettingsKey::TargetCentralRepository, KCRUidNitz, KValidNitz);
- // Read the initial values from the cenrep
- int validNitz = settingsManager->readItemValue(*validNitzCenrepKey).toInt();
-
- //Clean up
- delete validNitzCenrepKey;
- delete settingsManager;
-
- // The plugin will be loaded only if valid Nitz info is not received
- if(validNitz == 0) {
- // Set up view
- if (mFtuDateTimeView == NULL) {
- mFtuDateTimeView = new FtuDateTimeView();
- mFtuDateTimeView->setAutomaticTimeUpdateOff(false);
- }
- // If our main view is not created, signal with false.
- emit wizardInitialized(this, ((mFtuDateTimeView) ? true: false));
- }
- else {
- emit wizardInitialized(this, false);
- }
-}
-
-/*!
- Activates the wizard.
- Is called by the FTU framework when wizard becomes the current wizard
- */
-void FtuDateTimeWizard::activateWizard()
-{
- mFtuDateTimeView->constructView();
- // Signal info text to FTU framework
- emit
- infoTextUpdated(this, tr(dateTimeInfoText));
-
- // Signal view change
- emit viewChanged(this, mFtuDateTimeView);
-}
-
-/*!
- Deactivates the wizard.Is called by FTU framework when wizard is no longer displayed.
- Frees up resources that need not persist between wizard plugin activations.
- */
-void FtuDateTimeWizard::deactivateWizard()
-{
- // Destroy everything but the initial view and data that takes a long time
- // to reacquire when the plugin is later re-activated.
-}
-
-/*!
- Notifies the FTU FW how the wizard is been shutdown.
- Its called by FTU framework before the wizard plugin destructor is called.
- /param reason for the ShutDown
- */
-bool FtuDateTimeWizard::shutdownWizard(FtuWizard::ShutdownReason reason)
-{
- // Destroy all views
- Q_UNUSED(reason);
- return true;
-}
-
-/*!
- Relayoutes the views for new size.
- /param geometry
- */
-void FtuDateTimeWizard::resizeWizard(const QRectF& geometry)
-{
- Q_UNUSED(geometry)
- // Relayout view for new size
-}
-
-/*!
- Returns the settings for FTU framework.
- */
-const FtuWizardSetting& FtuDateTimeWizard::wizardSettings()
-{
- return mWizardSettings;
-}
-
-/*!
- Handles the back event.
- */
-bool FtuDateTimeWizard::handleBackEvent()
-{
- return false;
-}
-
-/*!
- Returns the wizard completed date.
- */
-QDate FtuDateTimeWizard::wizardCompletedDate()
-{
- return (mFtuDateTimeView->getWizardCompletedDate());
-}
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/src/ftudatetimewizardfactory.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-/*
- * Copyright (c) 2009 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: Wizard plugin factory class to instantiate the wizard plugin
- *
- */
-
-// System includes
-#include <QtGui> // For Q_EXPORT_PLUGIN2
-
-// User includes
-#include "ftudatetimewizardfactory.h"
-#include "ftudatetimewizard.h"
-
-/*!
- Returns the FTU plugin wizard instance.
- */
-FtuWizard* FtuDateTimeWizardFactory::createWizard() const
-{
- return new FtuDateTimeWizard();
-}
-
-Q_EXPORT_PLUGIN2(ftudatetimeplugin, FtuDateTimeWizardFactory)
-
-// End of file --Don't remove this.
--- a/clock/inc/clockcommon.h Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/inc/clockcommon.h Thu Jul 22 16:32:51 2010 +0100
@@ -27,16 +27,6 @@
const QString PATH_TEXT("C:/");
const int KMaximumCityListCount(50);
-const long int KCRUidNitz = { 0x101F8876 };
-/** Active Protocol key */
-const long int KActiveProtocol = 0x00000001;
-/** Previous alarm time high */
-const long int KPreviousAlarmTime = 0x00000002;
-
-const long int KCRUidClockApp = { 0x101F874D };
-/** Alarm snooze time key */
-const long int KClockAppSnoozeTime = 0x00000002;
-
// Common definitions for docml.
#define CLOCK_MAIN_VIEW_DOCML ":/xml/clockmainview.docml"
#define CLOCK_MAIN_VIEW_PORTRAIT_SECTION "portrait"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/inc/clockprivatecrkeys.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,32 @@
+/*
+* Copyright (c) 2009 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: The file contains the uid of keys used by application.
+*
+*/
+
+#ifndef CLOCKPRIVATECRKEYS_H
+#define CLOCKPRIVATECRKEYS_H
+
+/** Nitz Settings */
+/** Provides access to the Nitz status.*/
+const long int KCRUidNitz = { 0x101F8876 };
+/** Active Protocol key */
+const long int KActiveProtocol = 0x00000000;
+/** Previous alarm time high */
+const long int KPreviousAlarmTime = 0x00000001;
+
+#endif // CLOCKPRIVATECRKEYS_H
+
+// End of file --Don't remove this.
+
--- a/clock/rom/clock.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/rom/clock.iby Thu Jul 22 16:32:51 2010 +0100
@@ -41,6 +41,9 @@
data=DATAZ_\resource\mcc\mcc.rsc RESOURCE_FILES_DIR\mcc\mcc.rsc
+// Stub sis
+data=DATAZ_\system\install\clock_stub.sis \System\Install\clock_stub.sis
+
// Binaries.
file=ABI_DIR\BUILD_DIR\clockalarmclient.dll SHARED_LIB_DIR\clockalarmclient.dll
file=ABI_DIR\BUILD_DIR\timezoneclient.dll SHARED_LIB_DIR\timezoneclient.dll
@@ -52,11 +55,14 @@
file=ABI_DIR\BUILD_DIR\clockviewmanager.dll SHARED_LIB_DIR\clockviewmanager.dll
file=ABI_DIR\BUILD_DIR\clockviews.dll SHARED_LIB_DIR\clockviews.dll
file=ABI_DIR\BUILD_DIR\clockwidget.dll SHARED_LIB_DIR\clockwidget.dll
-file=ABI_DIR\BUILD_DIR\clockwidgetplugin.dll SHARED_LIB_DIR\clockwidgetplugin.dll
+file=ABI_DIR\BUILD_DIR\clockwidgetplugin.dll SHARED_LIB_DIR\clockwidgetplugin.dll
file=ABI_DIR\BUILD_DIR\datetimesettingsplugin.dll SHARED_LIB_DIR\datetimesettingsplugin.dll
data=\epoc32\data\c\resource\qt\plugins\controlpanel\datetimesettingsplugin.qtplugin resource\qt\plugins\controlpanel\datetimesettingsplugin.qtplugin
+file=ABI_DIR\BUILD_DIR\clocksettingsviewplugin.dll SHARED_LIB_DIR\clocksettingsviewplugin.dll
+data=\epoc32\data\z\resource\qt\plugins\clock\clocksettingsviewplugin.qtplugin resource\qt\plugins\clock\clocksettingsviewplugin.qtplugin
+
#endif // CLOCK_IBY
// End of file --Don't remove this.
--- a/clock/rom/clockengines.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/clock/rom/clockengines.iby Thu Jul 22 16:32:51 2010 +0100
@@ -34,10 +34,11 @@
// ECOM plugins
ECOM_PLUGIN( clocknitzplugin.dll, clocknitzplugin.rsc )
+// TODO : The following will be uncommented once implemented.
// Backup registration files
-data=DATAZ_\private\10005906\backup_registration.xml private\10005906\backup_registration.xml
-data=DATAZ_\private\10005903\backup_registration.xml private\10005903\backup_registration.xml
-data=DATAZ_\private\200159A2\backup_registration.xml private\200159A2\backup_registration.xml
+// data=DATAZ_\private\10005906\backup_registration.xml private\10005906\backup_registration.xml
+// data=DATAZ_\private\10005903\backup_registration.xml private\10005903\backup_registration.xml
+// data=DATAZ_\private\200159A2\backup_registration.xml private\200159A2\backup_registration.xml
#endif // __CLOCKENGINES_IBY__
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/sis/clock.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,75 @@
+;
+; Copyright (c) 2009 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: pkg file of Clock Application for IAD.
+;
+
+; Language
+&EN
+
+; standard SIS file header
+#{"Clock"}, (0x10005903), 1, 0, 0, TYPE=SA, RU
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
+
+; Clock engine components
+"/epoc32/release/armv5/urel/clockserver.exe" - "!:/sys/bin/clockserver.exe"
+"/epoc32/release/armv5/urel/clockserverclient.dll" - "!:/sys/bin/clockserverclient.dll"
+"/epoc32/release/armv5/urel/clocktimezoneresolver.dll" - "!:/sys/bin/clocktimezoneresolver.dll"
+"/epoc32/release/armv5/urel/clocktimesourceinterface.dll" - "!:/sys/bin/clocktimesourceinterface.dll"
+"/epoc32/release/armv5/urel/clockecomlistener.dll" - "!:/sys/bin/clockecomlistener.dll"
+
+; Clock nitz Ecom plugin
+"/epoc32/release/armv5/urel/clocknitzplugin.dll" - "!:/sys/bin/clocknitzplugin.dll"
+"/epoc32/data/z/resource/plugins/clocknitzplugin.rsc" - "!:/resource/plugins/clocknitzplugin.rsc"
+
+; Clock executable and default resource files
+
+"/epoc32/release/armv5/urel/clock.exe" - "!:/sys/bin/clock.exe"
+"/epoc32/data/Z/private/10003a3f/import/apps/clock_reg.rsc" - "!:/private/10003a3f/import/apps/clock_reg.rsc"
+"/epoc32/data/z/resource/apps/clock.rsc" - "!:/resource/apps/clock.rsc"
+"/epoc32/data/z/resource/qt/translations/clock_en.qm" - "!:/resource/qt/translations/clock_en.qm"
+
+
+"/epoc32/release/armv5/urel/clockalarmclient.dll" - "!:/sys/bin/clockalarmclient.dll"
+"/epoc32/release/armv5/urel/timezoneclient.dll" - "!:/sys/bin/timezoneclient.dll"
+"/epoc32/release/armv5/urel/clocksettingsutility.dll" - "!:/sys/bin/clocksettingsutility.dll"
+"/epoc32/release/armv5/urel/clocksettingsview.dll" - "!:/sys/bin/clocksettingsview.dll"
+"/epoc32/release/armv5/urel/clockcityselectionlist.dll" - "!:/sys/bin/clockcityselectionlist.dll"
+"/epoc32/release/armv5/urel/clockalarmeditor.dll" - "!:/sys/bin/clockalarmeditor.dll"
+"/epoc32/release/armv5/urel/clockappcontroller.dll" - "!:/sys/bin/clockappcontroller.dll"
+"/epoc32/release/armv5/urel/clockviewmanager.dll" - "!:/sys/bin/clockviewmanager.dll"
+"/epoc32/release/armv5/urel/clockviews.dll" - "!:/sys/bin/clockviews.dll"
+"/epoc32/release/armv5/urel/clockwidget.dll" - "!:/sys/bin/clockwidget.dll"
+"/epoc32/release/armv5/urel/clockwidgetplugin.dll" - "!:/sys/bin/clockwidgetplugin.dll"
+
+"/epoc32/data/Z/resource/mcc/mcc.rsc" -"!:/resource/mcc/mcc.rsc"
+"/epoc32/data/Z/resource/timezonelocalization/timezones.rsc" -"!:/resource/timezonelocalization/timezones.rsc"
+"/epoc32/data/Z/resource/timezonelocalization/timezonegroups.rsc" -"!:/resource/timezonelocalization/timezonegroups.rsc"
+
+;Qt plugin files to be installed
+"/epoc32/release/armv5/urel/datetimesettingsplugin.dll" - "!:/sys/bin/datetimesettingsplugin.dll"
+"/epoc32/data/c/resource/qt/plugins/controlpanel/datetimesettingsplugin.qtplugin" - "!:/resource/qt/plugins/controlpanel/datetimesettingsplugin.qtplugin"
+
+"/epoc32/release/armv5/urel/clocksettingsviewplugin.dll" - "!:/sys/bin/clocksettingsviewplugin.dll"
+"/epoc32/data/z/resource/qt/plugins/clock/clocksettingsviewplugin.qtplugin" - "!:/resource/qt/plugins/clock/clocksettingsviewplugin.qtplugin"
+
+"/epoc32/release/armv5/urel/ftudatetimewizard.dll" - "!:/sys/bin/ftudatetimewizard.dll"
+"/epoc32/data/z/resource/qt/plugins/FTU/ftudatetimewizard.qtplugin" - "!:/resource/qt/plugins/FTU/ftudatetimewizard.qtplugin"
+"/epoc32/data/z/fturesources/plugins/wizardproviders/ftudatetimewizard.manifest" - "!:/fturesources/plugins/wizardproviders/ftudatetimewizard.manifest"
+
+;END OF FILE
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/sis/createandsign.bat Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,22 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Bat file to create Clock Application's sisx.
+rem
+
+@echo -------- Create sis packages ---------
+makesis clock.pkg
+
+@echo -------- Sign and rename sis packages -----------
+signsis clock.sis clock.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
+
Binary file clock/sis/nokia_rndcert_02.der has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/sis/nokia_rndcert_02.key Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn
+uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO
+vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB
+AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo
+REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss
+/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J
+s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut
+sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/
+pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp
+VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ
+P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK
+1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT
+1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x
+-----END RSA PRIVATE KEY-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/stubsis/clock_stub.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2009 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: pkg file of Clock Application for IAD.
+;
+
+; Language
+&EN
+
+; Header
+#{"Clock"}, (0x10005903), 1, 0, 0, TYPE=SA
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
\ No newline at end of file
Binary file clock/stubsis/clock_stub.sis has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file clock test code
+#
+
+# include test components here
+
+# End of file --Don't remove this
--- a/notes/data/notes.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/data/notes.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -1,1 +1,1 @@
-<!DOCTYPE RCC><RCC version="1.0"> <qresource prefix="/translations"> <file alias="notes">translations/notes.qm</file> </qresource> <qresource prefix="/xml"> <file alias="notesmainview.docml">xml/notesmainview.docml</file> <file alias="notescollectionsview.docml">xml/notescollectionsview.docml</file> <file alias="notestodoview.docml">xml/notestodoview.docml</file> <file alias="notesfavoriteview.docml">xml/notesfavoriteview.docml</file> <file alias="notesnoteview.docml">xml/notesnoteview.docml</file> </qresource> <qresource prefix= "/style"> <file alias="hblistviewitem.css">style/hblistviewitem.css</file> <file alias="hblistviewitem.widgetml">style/hblistviewitem.widgetml</file> </qresource></RCC>
\ No newline at end of file
+<!DOCTYPE RCC><RCC version="1.0"> <qresource prefix="/xml"> <file alias="notesmainview.docml">xml/notesmainview.docml</file> <file alias="notescollectionsview.docml">xml/notescollectionsview.docml</file> <file alias="notestodoview.docml">xml/notestodoview.docml</file> <file alias="notesfavoriteview.docml">xml/notesfavoriteview.docml</file> <file alias="notesnoteview.docml">xml/notesnoteview.docml</file> </qresource> <qresource prefix= "/style"> <file alias="hblistviewitem.css">style/hblistviewitem.css</file> <file alias="hblistviewitem.widgetml">style/hblistviewitem.widgetml</file> </qresource></RCC>
\ No newline at end of file
Binary file notes/data/translations/notes.qm has changed
--- a/notes/data/translations/notes.ts Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,856 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="3.0" sourcelanguage="en_GB">
-<context>
-<message numerus="no" id="txt_notes_list_due_date">
- <comment>Due date for To-do note</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_new_todo">
- <comment>Toolbar button to create new To-do note</comment>
- <source>New To-do </source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L7</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_val_description">
- <comment>Default texxt value for Description field in a dataform</comment>
- <source>Description</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_editor_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>formlabel_5_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_val_subject">
- <comment>Default text value for Subject field in a dataform</comment>
- <source>Subject</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_editor_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>formlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_make_it_as_todo_note">
- <comment>Item specific menu item . This action launchs the To-Do editor to add due date and remainder for the selected note</comment>
- <source>Make it as To-do note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_find">
- <comment>toolbar button text in landscape mode . If user taps on this button, Find functionality is enabled in all notes view</comment>
- <source>Find</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_todo">
- <comment>Sub title in To-do Editor</comment>
- <source>To-do</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_new_note">
- <comment>Option menu item to create new note</comment>
- <source>New note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_modified_at_time">
- <comment>Secondary text item to mention modification time for a note</comment>
- <source>Modified at %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_14_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority_val_low">
- <comment>Priority value in Combo Box used in a dataform</comment>
- <source>Low</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_created_on_1_2">
- <comment>Secondary text item to mention creation date and time for a task</comment>
- <source>Created on %1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_alarm_time">
- <comment>Message dialog header text . Time picker component embedded</comment>
- <source>Alarm time</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P9</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_due_date">
- <comment>Label item in Data form </comment>
- <source>Due date</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_remove_description">
- <comment>Options menu item to remove description from the To-do editor</comment>
- <source>Remove description</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_alarm_date">
- <comment>Message dialog header text . Date picker component embedded</comment>
- <source>Alarm date</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P9</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_mark_as_not_done">
- <comment>Item specific menu item to mark a task as not done</comment>
- <source>Mark as not done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once the note is modified and saved</comment>
- <source>Note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_new_note">
- <comment>toolbar button text in landscape mode . If user taps on this button, Notes editor is launched to add note</comment>
- <source>New note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_created_at_time">
- <comment>Secondary text item to mention creation time for a note</comment>
- <source>Created at %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_12_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="yes" id="txt_notes_subhead_ln_notes">
- <comment>Sub title for All Notes view</comment>
- <source>%Ln Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_description">
- <comment>Primary text label in To-do Viewer</comment>
- <source>Description:</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_7</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_subject">
- <comment>Primary text label in To-do viewer</comment>
- <source>Subject:</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic_add</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_5</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_add_description">
- <comment>Options menu item to add description field in To-do note editor</comment>
- <source>Add description</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_note_count">
- <comment>List item to show the number<Count> of items (To-Dos, Recent notes, Favourites) - Right side of the list item</comment>
- <source>[ %1 ]</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_due_date">
- <comment>Date push button in Data Form to set due date for a To-do note. This action opens the date picker component</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_button_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority_val_high">
- <comment>Priority value in Combo Box used in a dataform</comment>
- <source>High</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_completed_date_val_1">
- <comment>Completed date value (Secondary text ) in To-do viewer</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_6_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_discard_changes">
- <comment>Option menu item to discard the changes done in the notes editor</comment>
- <source>Discard changes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_short_caption_notes">
- <comment>Notes application in application library grid view</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_grid_applications_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_dialog_delete">
- <comment>Delete - Confirmation dialog softkey button </comment>
- <source>Delete</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_softkey_2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_mark_as_not_done">
- <comment>Options menu item to change the completed to-do status to not-completed</comment>
- <source>Mark as not done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_completed_date">
- <comment>Primary text label in To-do viewer</comment>
- <source>Completed date:</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_6</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority_val_normal">
- <comment>Priority value in Combo Box used in a dataform</comment>
- <source>Normal</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_plain_notes">
- <comment>Sub title in Recent notes list view</comment>
- <source>Plain notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P6</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_delete">
- <comment>Toolbar button item to delete the note</comment>
- <source>Delete</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L4</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_favorites">
- <comment>Collections name in the list widget (Left Side)</comment>
- <source>Favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_note">
- <comment>Confirmation dialog text for deleting a note</comment>
- <source>Delete note?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_edit_time">
- <comment>Creation & Modification time and date will be shown in the groupBox. Custom groupBox label . Text shown on the right side of the widget</comment>
- <source>%1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_subhead_1_2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_all_notes">
- <comment>One of the toolbar button text in landscape mode . If user taps on this button, All notes view is displayed</comment>
- <source>All notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_todo_note">
- <comment>Confirmation dialog text for deleting a To-do note</comment>
- <source>Delete To-do note?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_remove_from_favorites">
- <comment>Item specific menu item to remove the note from favorites</comment>
- <source>Remove from favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_add_to_calendar">
- <comment>Toolbar button to launch calendar editor and add content in the subject and description field</comment>
- <source>Add to Calendar</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L4</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_long_caption_notes">
- <comment>Notes application in application library list view</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_no_notes_available">
- <comment>Custom layout ID. No parent . If the view is empty, this text should be displayed in the All notes empy list view. Same text is used in landscape as well</comment>
- <source>No notes available</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_list_no_notes_available</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_send">
- <comment>Tool bar button used to send the note to other user</comment>
- <source>Send</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L4</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_plain_notes">
- <comment>Collections name in the list widget (Left Side)</comment>
- <source>Plain notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_alarm_date">
- <comment>Alarm time and date for To-do note</comment>
- <source>%1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_created_on_date">
- <comment>Secondary text item to mention creation date for a note</comment>
- <source>Created on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_11_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_due_date">
- <comment>Message dialog header text . Date picker component embedded</comment>
- <source>Due date</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P9</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_todos">
- <comment>Collections name in the list widget (Left Side)</comment>
- <source>To-do's</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_note">
- <comment>Layout ID Parent. Custom GroupBox. Sub title in Notes editor (Left Side)</comment>
- <source>Note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_subhead_note</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_todo_notes">
- <comment>Confirmation dialog text for deleting multiple to-do notes</comment>
- <source>Delete To-do notes?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_new_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once the new note is saved</comment>
- <source>New note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_alarm_date">
- <comment>Layout ID Parent. Date Push Button in Dataform to set alarm date for a To-do note. This action opens the date picker component</comment>
- <source>%2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_button_2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_make_it_as_todo_note">
- <comment>Options menu item to convert a note to To-Do item. This action launchs To-Do editor to add due date and reminder</comment>
- <source>Make it as To-do note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P4</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_remove_from_favorites">
- <comment>Options menu item to remove the note from favorites item</comment>
- <source>Remove from favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_new_note">
- <comment>Layout ID Parent. Custom GroupBox. Sub title in Notes editor (Creating new note) - Left side text</comment>
- <source>New note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_subhead_new_note</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P4</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_new_todo">
- <comment>Sub title in New To-do note editor</comment>
- <source>New To-do</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_notes">
- <comment>Title bar text for Notes application+</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_titlebar</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_mark_as_favorite">
- <comment>Options menu item to mark the note as favorite item</comment>
- <source>Mark as favorite</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P4</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_tsw_caption_notes">
- <comment>Notes application name in Task Switcher</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_tsw_caption_notes</extra-loc-layout_id>
- <extra-loc-viewid>tsw01</extra-loc-viewid>
- <extra-loc-positionid>caption</extra-loc-positionid>
- <extra-loc-feature>ts</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_collections">
- <comment>Sub title for Collections view</comment>
- <source>Collections</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_alarm_date_and_time">
- <comment>Label item in Data form</comment>
- <source>Alarm date and time</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>formlabel_3</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_collections">
- <comment>toolbar button text in landscape mode . If user taps on this button, Collections view is displayed</comment>
- <source>Collections</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_edit">
- <comment>One of 3 buttons in Toolbar . Toolbar button item to edit the To-do note </comment>
- <source>Edit</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_modified_on_1_2">
- <comment>Secondary text item to mention modified date & time for a note</comment>
- <source>Modified on %1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_2_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_alarm_time">
- <comment>Layout ID Parent. Custom Widget . Time Push Button in Dataform to set alarm time for a To-do note. This action opens the time picker component</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_button_1</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_notes">
- <comment>Confirmation dialog text for deleting multiple notes</comment>
- <source>Delete notes?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_favorites">
- <comment>Sub title in Favorite notes list view</comment>
- <source>Favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P3</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_due_on_1">
- <comment>Secondary text item in the list to show due date for a task</comment>
- <source>Due on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_3_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_mark_as_favorite">
- <comment>Item specific menu item to mark a note as favorite </comment>
- <source>Mark as favorite</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_unnamed">
- <comment>Secondary text in the list item. If subject is not mentioned for a note, this text is displayed as secondary text in the All notes list view</comment>
- <source>Unnamed</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_5_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_completed_on_1">
- <comment>Secondary text item in the list to show completed date for To-do note</comment>
- <source>Completed on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_mark_as_done">
- <comment>Options menu item to change the non-completed to-do status to completed</comment>
- <source>Mark as done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_new_todo_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once the new to-do note is saved</comment>
- <source>New To-do note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P10</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority">
- <comment>Label item in Data form</comment>
- <source>Priority</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_todo_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once to-do note is modified and saved</comment>
- <source>To-do note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P10</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="yes" id="txt_notes_subhead_todos_ln_pending">
- <comment>Sub title in To-do notes list view</comment>
- <source>To-do's (%Ln Pending )</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P7</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_task_switcher_caption_notes">
- <comment>Notes application name in Task Switcher</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>cell_tport_appsw_pane_t1</extra-loc-layout_id>
- <extra-loc-viewid>Task Switcher</extra-loc-viewid>
- <extra-loc-positionid>caption</extra-loc-positionid>
- <extra-loc-feature>Ta</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_modified_on_date">
- <comment>Secondary text item to mention modification date for a note</comment>
- <source>Modified on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_13_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_unnamed">
- <comment>Primary text in all notes list view if the subject is not mentioned for a To-do note</comment>
- <source>Unnamed</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic_add</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_11</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_add_to_calendar">
- <comment>Item specific menu item. This action launches the event editor and adds the notes content to the subject & description field</comment>
- <source>Add to Calendar</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_note_moved_to_todos">
- <comment>If a plain note is marked as To-do note in the list view, the marked item disappears from the current view with a notification dialog </comment>
- <source>Note moved to To-do's</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_mark_as_done">
- <comment>Item specific menu item to mark a task as completed</comment>
- <source>Mark as done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_alarm">
- <comment>Checkbox label item to enable/disable alarm</comment>
- <source>Alarm</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_checkbox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>formlabel_2</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-</context>
-</TS>
--- a/notes/data/xml/notescollectionsview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/data/xml/notescollectionsview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
<object name="allNotesAction" type="HbAction">
- <icon iconName="qtg_mono_notes_all" name="icon"/>
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
</object>
<object name="collectionsViewAction" type="HbAction">
- <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
</object>
<object name="newNoteAction" type="HbAction">
<icon iconName="qtg_mono_create_event" name="icon"/>
@@ -12,38 +12,38 @@
<widget name="notesCollectionView" type="HbView">
<widget name="notesCollectionWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string locid="txt_notes_subhead_collections" name="heading" value="Collections"/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
+ <string locid="txt_notes_subhead_collections" name="heading" value="Collections"/>
</widget>
<widget name="listView" type="HbListView">
- <widget name="listItemPrototype" role="HbListView:prototype" type="HbListViewItem"/>
+ <widget name="listItemPrototype_1" role="HbAbstractView:prototype" type="HbListViewItem"/>
<real name="z" value="2"/>
-
+ <sizehint height="85.52239un" type="PREFERRED" width="45.8209un"/>
</widget>
<layout type="anchor">
<anchoritem dst="subtitleGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
<anchoritem dst="subtitleGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="listView" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="listView" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="listView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="listView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="listView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="listView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
- <anchoritem dst="listView" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="subtitleGroupBox" srcEdge="BOTTOM"/>
</layout>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
<enums name="orientation" value="Horizontal"/>
- <ref object="allNotesAction" role="HbToolBar:addAction"/>
- <ref object="collectionsViewAction" role="HbToolBar:addAction"/>
- <ref object="newNoteAction" role="HbToolBar:addAction"/>
+ <ref object="allNotesAction" role="HbWidget:addAction"/>
+ <ref object="collectionsViewAction" role="HbWidget:addAction"/>
+ <ref object="newNoteAction" role="HbWidget:addAction"/>
</widget>
<widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
<string locid="txt_notes_title_notes" name="title" value="Notes"/>
</widget>
- <metadata activeUIState="portrait" display="NHD portrait" unit="un">
+ <metadata activeUIState="portrait" display="NHD-3.2-inch_portrait" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="portrait" sections="#common"/>
<uistate name="landscape" sections="#common"/>
- <dummydata objectName="listView" section="#common" value="0"/>
+ <dummydata objectName="listView" section="#common" value="app_list_template5"/>
</metadata>
</hbdocument>
--- a/notes/data/xml/notesfavoriteview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/data/xml/notesfavoriteview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
<object name="allNotesAction" type="HbAction">
- <icon iconName="qtg_mono_notes_all" name="icon"/>
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
</object>
<object name="displayCollectionsAction" type="HbAction">
- <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
</object>
<object name="newNoteAction" type="HbAction">
<icon iconName="qtg_mono_create_event" name="icon"/>
@@ -15,42 +15,48 @@
<widget name="notesFavoriteView" type="HbView">
<widget name="notesFavoriteViewWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string locid="txt_notes_subhead_favorites" name="heading" value="Favorites"/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
+ <string locid="txt_notes_subhead_favorites" name="heading" value="Favorites"/>
</widget>
<widget name="favoritesListView" type="HbListView">
- <widget name="prototype" role="HbListView:prototype" type="HbListViewItem">
- <string name="state" value="normal"/>
- </widget>
+ <widget name="listItemPrototype" role="HbAbstractView:prototype" type="HbListViewItem"/>
<real name="z" value="2"/>
<sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
</widget>
+ <widget name="emptyListLabel" type="HbLabel">
+ <real name="z" value="1"/>
+ <string locid="txt_notes_list_no_notes_available" name="plainText" value="No notes available"/> <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizehint height="expr(var(hb-param-text-height-primary) )" type="PREFERRED"/>
+ </widget>
<layout type="anchor">
<anchoritem dst="subtitleGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="favoritesListView" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="favoritesListView" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="favoritesListView" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="favoritesListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="favoritesListView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="favoritesListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="favoritesListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="emptyListLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="favoritesListView" srcEdge="LEFT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="favoritesListView" srcEdge="RIGHT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="CENTERV" spacing="0un" src="favoritesListView" srcEdge="CENTERV"/>
</layout>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
<enums name="orientation" value="Horizontal"/>
- <ref object="allNotesAction" role="HbToolBar:addAction"/>
- <ref object="displayCollectionsAction" role="HbToolBar:addAction"/>
- <ref object="newNoteAction" role="HbToolBar:addAction"/>
+ <ref object="allNotesAction" role="HbWidget:addAction"/>
+ <ref object="displayCollectionsAction" role="HbWidget:addAction"/>
+ <ref object="newNoteAction" role="HbWidget:addAction"/>
</widget>
- <widget name="viewMenu" role="HbView:menu" type="HbMenu">
- <!-- uncomment for multiple delete <ref object="deleteAction" role="HbMenu:addAction"/> -->
- </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
<string locid="txt_notes_title_notes" name="title" value="Notes"/>
</widget>
- <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="portrait" sections="#common"/>
<uistate name="landscape" sections="#common"/>
- <dummydata objectName="favoritesListView" section="#common" value="0"/>
+ <dummydata objectName="favoritesListView" section="#common" value="app_list_template5"/>
</metadata>
</hbdocument>
--- a/notes/data/xml/notesmainview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/data/xml/notesmainview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -1,53 +1,61 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
<object name="allNotesAction" type="HbAction">
- <icon iconName="qtg_mono_notes_all" name="icon"/>
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
</object>
<object name="collectionsViewAction" type="HbAction">
- <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
</object>
<object name="newNoteAction" type="HbAction">
<icon iconName="qtg_mono_create_event" name="icon"/>
</object>
- <object name="deleteAction" type="HbAction">
+ <object name="deleteAction" type="HbAction">
<string locid="txt_common_opt_delete" name="text" value="Delete"/>
</object>
<widget name="notesMainView" type="HbView">
<widget name="notesMainViewWidget" role="HbView:widget" type="HbWidget">
<widget name="viewHeading" type="HbGroupBox">
- <string name="heading" value=" "/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
+ <string name="heading" value=" "/>
</widget>
<widget name="listView" type="HbListView">
- <widget name="prototype" role="HbListView:prototype" type="HbListViewItem"/>
+ <widget name="prototype" role="HbAbstractView:prototype" type="HbListViewItem"/>
<real name="z" value="2"/>
<sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
</widget>
+ <widget name="emptyListLabel" type="HbLabel">
+ <real name="z" value="1"/>
+ <string locid="txt_notes_list_no_notes_available" name="plainText" value="No notes available"/> <enums name="textWrapping" value="TextWordWrap"/>
+ <sizehint height="expr(var(hb-param-text-height-primary) )" type="PREFERRED"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ </widget>
<layout type="anchor">
<anchoritem dst="viewHeading" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="viewHeading" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
<anchoritem dst="viewHeading" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
- <anchoritem dst="listView" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="listView" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="viewHeading" srcEdge="BOTTOM"/>
- <anchoritem dst="listView" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="listView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="listView" dstEdge="TOP" spacing="0un" src="viewHeading" srcEdge="BOTTOM"/>
+ <anchoritem dst="listView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="listView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="emptyListLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="listView" srcEdge="LEFT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="listView" srcEdge="RIGHT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="CENTERV" spacing="0un" src="listView" srcEdge="CENTERV"/>
</layout>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
- <enums name="orientation" value="Horizontal"/>
- <ref object="allNotesAction" role="HbToolBar:addAction"/>
- <ref object="collectionsViewAction" role="HbToolBar:addAction"/>
- <ref object="newNoteAction" role="HbToolBar:addAction"/>
+ <enums name="orientation" value="Horizontal"/>
+ <ref object="allNotesAction" role="HbWidget:addAction"/>
+ <ref object="collectionsViewAction" role="HbWidget:addAction"/>
+ <ref object="newNoteAction" role="HbWidget:addAction"/>
</widget>
- <widget name="viewMenu" role="HbView:menu" type="HbMenu">
- <!-- uncomment for multiple delete <ref object="deleteAction" role="HbMenu:addAction"/> -->
- </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
<string locid="txt_notes_title_notes" name="title" value="Notes"/>
</widget>
- <metadata activeUIState="portrait" display="QHD portrait" unit="un">
+ <metadata activeUIState="portrait" display="NHD-3.2-inch_portrait" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="portrait" sections="#common"/>
<uistate name="landscape" sections="#common"/>
+ <dummydata objectName="listView" section="#common" value="app_list_template5"/>
</metadata>
</hbdocument>
--- a/notes/data/xml/notesnoteview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/data/xml/notesnoteview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -1,10 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
<object name="allNotesAction" type="HbAction">
- <icon iconName="qtg_mono_notes_all" name="icon"/>
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
</object>
<object name="displayCollectionsAction" type="HbAction">
- <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
</object>
<object name="newNoteAction" type="HbAction">
<icon iconName="qtg_mono_create_event" name="icon"/>
@@ -15,42 +15,48 @@
<widget name="notesNoteView" type="HbView">
<widget name="notesNoteViewWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string locid="txt_notes_list_plain_notes" name="heading" value="Recent notes"/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
+ <string locid="txt_notes_list_plain_notes" name="heading" value="Recent notes"/>
</widget>
<widget name="noteListView" type="HbListView">
- <widget name="prototype" role="HbListView:prototype" type="HbListViewItem">
- <string name="state" value="normal"/>
- </widget>
+ <widget name="listItemPrototype" role="HbAbstractView:prototype" type="HbListViewItem"/>
<real name="z" value="2"/>
<sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
</widget>
+ <widget name="emptyListLabel" type="HbLabel">
+ <real name="z" value="1"/>
+ <string locid="txt_notes_list_no_notes_available" name="plainText" value="No notes available"/> <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizehint height="expr(var(hb-param-text-height-primary) )" type="PREFERRED"/>
+ </widget>
<layout type="anchor">
<anchoritem dst="subtitleGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="noteListView" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="noteListView" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="noteListView" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="noteListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="noteListView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="noteListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="noteListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="emptyListLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="noteListView" srcEdge="LEFT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="noteListView" srcEdge="RIGHT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="CENTERV" spacing="0un" src="noteListView" srcEdge="CENTERV"/>
</layout>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
<enums name="orientation" value="Horizontal"/>
- <ref object="allNotesAction" role="HbToolBar:addAction"/>
- <ref object="displayCollectionsAction" role="HbToolBar:addAction"/>
- <ref object="newNoteAction" role="HbToolBar:addAction"/>
+ <ref object="allNotesAction" role="HbWidget:addAction"/>
+ <ref object="displayCollectionsAction" role="HbWidget:addAction"/>
+ <ref object="newNoteAction" role="HbWidget:addAction"/>
</widget>
- <widget name="viewMenu" role="HbView:menu" type="HbMenu">
- <!-- uncomment for multiple delete <ref object="deleteAction" role="HbMenu:addAction"/> -->
- </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
<string locid="txt_notes_title_notes" name="title" value="Notes"/>
</widget>
- <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="portrait" sections="#common"/>
<uistate name="landscape" sections="#common"/>
- <dummydata objectName="noteListView" section="#common" value="0"/>
+ <dummydata objectName="noteListView" section="#common" value="app_list_template5"/>
</metadata>
</hbdocument>
--- a/notes/data/xml/notestodoview.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/data/xml/notestodoview.docml Thu Jul 22 16:32:51 2010 +0100
@@ -1,56 +1,62 @@
<?xml version="1.0" encoding="UTF-8"?>
-<hbdocument version="0.9">
+<hbdocument version="1.1">
<object name="allNotesAction" type="HbAction">
- <icon iconName="qtg_mono_notes_all" name="icon"/>
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
</object>
<object name="displayCollectionsAction" type="HbAction">
- <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
</object>
<object name="newTodoAction" type="HbAction">
<icon iconName="qtg_mono_create_event" name="icon"/>
- </object>
+ </object>
<object name="deleteAction" type="HbAction">
<string locid="txt_common_opt_delete" name="text" value="Delete"/>
</object>
<widget name="notesTodoView" type="HbView">
<widget name="notesTodoViewWidget" role="HbView:widget" type="HbWidget">
<widget name="subtitleGroupBox" type="HbGroupBox">
- <string name="heading" value=" "/>
<real name="z" value="1"/>
<bool name="collapsable" value="FALSE"/>
+ <string name="heading" value=" "/>
</widget>
<widget name="todoListView" type="HbListView">
- <widget name="prototype" role="HbListView:prototype" type="HbListViewItem">
- <string name="state" value="normal"/>
- </widget>
+ <widget name="listItemPrototype" role="HbAbstractView:prototype" type="HbListViewItem"/>
<real name="z" value="2"/>
<sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
</widget>
+ <widget name="emptyListLabel" type="HbLabel">
+ <real name="z" value="1"/>
+ <string locid="txt_notes_list_no_notes_available" name="plainText" value="No notes available"/> <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <sizehint height="expr(var(hb-param-text-height-primary) )" type="PREFERRED"/>
+ </widget>
<layout type="anchor">
<anchoritem dst="subtitleGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
<anchoritem dst="subtitleGroupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
- <anchoritem dst="todoListView" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
- <anchoritem dst="todoListView" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
- <anchoritem dst="todoListView" dstEdge="TOP" spacing="var(hb-param-margin-gene-top)" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="todoListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="todoListView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="todoListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
<anchoritem dst="todoListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="emptyListLabel" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-left) )" src="todoListView" srcEdge="LEFT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-right) )" src="todoListView" srcEdge="RIGHT"/>
+ <anchoritem dst="emptyListLabel" dstEdge="CENTERV" spacing="0un" src="todoListView" srcEdge="CENTERV"/>
</layout>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
<enums name="orientation" value="Horizontal"/>
- <ref object="allNotesAction" role="HbToolBar:addAction"/>
- <ref object="displayCollectionsAction" role="HbToolBar:addAction"/>
- <ref object="newTodoAction" role="HbToolBar:addAction"/>
+ <ref object="allNotesAction" role="HbWidget:addAction"/>
+ <ref object="displayCollectionsAction" role="HbWidget:addAction"/>
+ <ref object="newTodoAction" role="HbWidget:addAction"/>
</widget>
- <widget name="viewMenu" role="HbView:menu" type="HbMenu">
- <!-- uncomment for multiple delete <ref object="deleteAction" role="HbMenu:addAction"/> -->
- </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
<string locid="txt_notes_title_notes" name="title" value="Notes"/>
</widget>
- <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <metadata activeUIState="Common ui state" display="NHD-3.2-inch_portrait" unit="un">
<uistate name="Common ui state" sections="#common"/>
<uistate name="portrait" sections="#common"/>
<uistate name="landscape" sections="#common"/>
- <dummydata objectName="todoListView" section="#common" value="0"/>
+ <dummydata objectName="todoListView" section="#common" value="app_list_template5"/>
</metadata>
</hbdocument>
--- a/notes/notes.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notes.pro Thu Jul 22 16:32:51 2010 +0100
@@ -21,7 +21,9 @@
symbian: {
BLD_INF_RULES.prj_exports += \
"./rom/notes.iby CORE_APP_LAYER_IBY_EXPORT_PATH(notes.iby)" \
- "./rom/notesresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(notesresources.iby)"
+ "./rom/notesresources.iby LANGUAGE_APP_LAYER_IBY_EXPORT_PATH(notesresources.iby)" \
+ # stubsis is added to provide IAD
+ "./stubsis/notes_stub.sis /epoc32/data/z/system/install/notes_stub.sis"
}
# End of file --Don't remove this.
--- a/notes/notesui/bwins/notesappcontrolleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ??1NotesAppController@@UAE@XZ @ 1 NONAME ; NotesAppController::~NotesAppController(void)
- ??_ENotesAppController@@UAE@I@Z @ 2 NONAME ; NotesAppController::~NotesAppController(unsigned int)
- ??0NotesAppController@@QAE@PAVQObject@@@Z @ 3 NONAME ; NotesAppController::NotesAppController(class QObject *)
-
--- a/notes/notesui/bwins/noteseditoru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-EXPORTS
- ?edit@NotesEditor@@QAEXVAgendaEntry@@@Z @ 1 NONAME ; void NotesEditor::edit(class AgendaEntry)
- ?tr@NotesEditor@@SA?AVQString@@PBD0H@Z @ 2 NONAME ; class QString NotesEditor::tr(char const *, char const *, int)
- ?edit@NotesEditor@@QAEXK@Z @ 3 NONAME ; void NotesEditor::edit(unsigned long)
- ?edit@NotesEditor@@QAEXABVQFile@@@Z @ 4 NONAME ; void NotesEditor::edit(class QFile const &)
- ?d_func@NotesEditor@@ABEPBVNotesEditorPrivate@@XZ @ 5 NONAME ; class NotesEditorPrivate const * NotesEditor::d_func(void) const
- ?qt_metacast@NotesEditor@@UAEPAXPBD@Z @ 6 NONAME ; void * NotesEditor::qt_metacast(char const *)
- ?trUtf8@NotesEditor@@SA?AVQString@@PBD0H@Z @ 7 NONAME ; class QString NotesEditor::trUtf8(char const *, char const *, int)
- ??_ENotesEditor@@UAE@I@Z @ 8 NONAME ; NotesEditor::~NotesEditor(unsigned int)
- ?edit@NotesEditor@@QAEXABVQString@@@Z @ 9 NONAME ; void NotesEditor::edit(class QString const &)
- ?qt_metacall@NotesEditor@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int NotesEditor::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?create@NotesEditor@@QAEXW4CreateType@1@@Z @ 11 NONAME ; void NotesEditor::create(enum NotesEditor::CreateType)
- ?d_func@NotesEditor@@AAEPAVNotesEditorPrivate@@XZ @ 12 NONAME ; class NotesEditorPrivate * NotesEditor::d_func(void)
- ??1NotesEditor@@UAE@XZ @ 13 NONAME ; NotesEditor::~NotesEditor(void)
- ??0NotesEditor@@QAE@PAVQObject@@@Z @ 14 NONAME ; NotesEditor::NotesEditor(class QObject *)
- ?staticMetaObject@NotesEditor@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const NotesEditor::staticMetaObject
- ??0NotesEditor@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 16 NONAME ; NotesEditor::NotesEditor(class AgendaUtil *, class QObject *)
- ?editingCompleted@NotesEditor@@IAEX_N@Z @ 17 NONAME ; void NotesEditor::editingCompleted(bool)
- ?metaObject@NotesEditor@@UBEPBUQMetaObject@@XZ @ 18 NONAME ; struct QMetaObject const * NotesEditor::metaObject(void) const
- ?tr@NotesEditor@@SA?AVQString@@PBD0@Z @ 19 NONAME ; class QString NotesEditor::tr(char const *, char const *)
- ?trUtf8@NotesEditor@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString NotesEditor::trUtf8(char const *, char const *)
- ?getStaticMetaObject@NotesEditor@@SAABUQMetaObject@@XZ @ 21 NONAME ; struct QMetaObject const & NotesEditor::getStaticMetaObject(void)
- ?close@NotesEditor@@QAEKW4CloseType@1@@Z @ 22 NONAME ; unsigned long NotesEditor::close(enum NotesEditor::CloseType)
-
--- a/notes/notesui/bwins/notesmodelhandleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,7 +0,0 @@
-EXPORTS
- ?agendaInterface@NotesModelHandler@@QAEPAVAgendaUtil@@XZ @ 1 NONAME ; class AgendaUtil * NotesModelHandler::agendaInterface(void)
- ??_ENotesModelHandler@@UAE@I@Z @ 2 NONAME ; NotesModelHandler::~NotesModelHandler(unsigned int)
- ??1NotesModelHandler@@UAE@XZ @ 3 NONAME ; NotesModelHandler::~NotesModelHandler(void)
- ??0NotesModelHandler@@QAE@PAVQObject@@@Z @ 4 NONAME ; NotesModelHandler::NotesModelHandler(class QObject *)
- ?notesModel@NotesModelHandler@@QAEPAVNotesModel@@XZ @ 5 NONAME ; class NotesModel * NotesModelHandler::notesModel(void)
-
--- a/notes/notesui/bwins/notesmodelu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-EXPORTS
- ?sourceModel@NotesModel@@QAEPAVQAbstractItemModel@@XZ @ 1 NONAME ; class QAbstractItemModel * NotesModel::sourceModel(void)
- ?filterAcceptsRow@NotesSortFilterProxyModel@@MBE_NHABVQModelIndex@@@Z @ 2 NONAME ; bool NotesSortFilterProxyModel::filterAcceptsRow(int, class QModelIndex const &) const
- ?modifyEntryInModel@NotesModel@@AAEXKH@Z @ 3 NONAME ; void NotesModel::modifyEntryInModel(unsigned long, int)
- ?getStaticMetaObject@NotesSortFilterProxyModel@@SAABUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const & NotesSortFilterProxyModel::getStaticMetaObject(void)
- ?appendCompTodosToModel@NotesModel@@AAEXAAV?$QList@VAgendaEntry@@@@@Z @ 5 NONAME ; void NotesModel::appendCompTodosToModel(class QList<class AgendaEntry> &)
- ?tr@NotesSortFilterProxyModel@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString NotesSortFilterProxyModel::tr(char const *, char const *, int)
- ?rowAdded@NotesModel@@IAEXVQModelIndex@@@Z @ 7 NONAME ; void NotesModel::rowAdded(class QModelIndex)
- ?qt_metacast@NotesModel@@UAEPAXPBD@Z @ 8 NONAME ; void * NotesModel::qt_metacast(char const *)
- ?trUtf8@NotesSortFilterProxyModel@@SA?AVQString@@PBD0@Z @ 9 NONAME ; class QString NotesSortFilterProxyModel::trUtf8(char const *, char const *)
- ?lessThan@NotesSortFilterProxyModel@@MBE_NABVQModelIndex@@0@Z @ 10 NONAME ; bool NotesSortFilterProxyModel::lessThan(class QModelIndex const &, class QModelIndex const &) const
- ?metaObject@NotesSortFilterProxyModel@@UBEPBUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const * NotesSortFilterProxyModel::metaObject(void) const
- ?trUtf8@NotesSortFilterProxyModel@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString NotesSortFilterProxyModel::trUtf8(char const *, char const *, int)
- ?metaObject@NotesModel@@UBEPBUQMetaObject@@XZ @ 13 NONAME ; struct QMetaObject const * NotesModel::metaObject(void) const
- ?tr@NotesModel@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString NotesModel::tr(char const *, char const *, int)
- ?staticMetaObject@NotesModel@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const NotesModel::staticMetaObject
- ?staticMetaObject@NotesSortFilterProxyModel@@2UQMetaObject@@B @ 16 NONAME ; struct QMetaObject const NotesSortFilterProxyModel::staticMetaObject
- ??0NotesModel@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 17 NONAME ; NotesModel::NotesModel(class AgendaUtil *, class QObject *)
- ??_ENotesSortFilterProxyModel@@UAE@I@Z @ 18 NONAME ; NotesSortFilterProxyModel::~NotesSortFilterProxyModel(unsigned int)
- ??1NotesSortFilterProxyModel@@UAE@XZ @ 19 NONAME ; NotesSortFilterProxyModel::~NotesSortFilterProxyModel(void)
- ?qt_metacall@NotesSortFilterProxyModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 20 NONAME ; int NotesSortFilterProxyModel::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?tr@NotesModel@@SA?AVQString@@PBD0@Z @ 21 NONAME ; class QString NotesModel::tr(char const *, char const *)
- ?getStaticMetaObject@NotesModel@@SAABUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const & NotesModel::getStaticMetaObject(void)
- ?tr@NotesSortFilterProxyModel@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString NotesSortFilterProxyModel::tr(char const *, char const *)
- ?addEntryToModel@NotesModel@@AAEXK@Z @ 24 NONAME ; void NotesModel::addEntryToModel(unsigned long)
- ??1NotesModel@@UAE@XZ @ 25 NONAME ; NotesModel::~NotesModel(void)
- ?removeEntryFromModel@NotesModel@@AAEXK@Z @ 26 NONAME ; void NotesModel::removeEntryFromModel(unsigned long)
- ?qt_metacast@NotesSortFilterProxyModel@@UAEPAXPBD@Z @ 27 NONAME ; void * NotesSortFilterProxyModel::qt_metacast(char const *)
- ?appendInCompTodosToModel@NotesModel@@AAEXAAV?$QList@VAgendaEntry@@@@@Z @ 28 NONAME ; void NotesModel::appendInCompTodosToModel(class QList<class AgendaEntry> &)
- ?insertNoteToModel@NotesModel@@AAE_NAAVQModelIndex@@K@Z @ 29 NONAME ; bool NotesModel::insertNoteToModel(class QModelIndex &, unsigned long)
- ?qt_metacall@NotesModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 30 NONAME ; int NotesModel::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?populateSourceModel@NotesModel@@AAEXV?$QList@K@@@Z @ 31 NONAME ; void NotesModel::populateSourceModel(class QList<unsigned long>)
- ?appendNotesToModel@NotesModel@@AAEXAAV?$QList@VAgendaEntry@@@@@Z @ 32 NONAME ; void NotesModel::appendNotesToModel(class QList<class AgendaEntry> &)
- ?updateSourceModel@NotesModel@@AAEXK@Z @ 33 NONAME ; void NotesModel::updateSourceModel(unsigned long)
- ??_ENotesModel@@UAE@I@Z @ 34 NONAME ; NotesModel::~NotesModel(unsigned int)
- ?trUtf8@NotesModel@@SA?AVQString@@PBD0H@Z @ 35 NONAME ; class QString NotesModel::trUtf8(char const *, char const *, int)
- ?insertInCompTodoToModel@NotesModel@@AAE_NAAVQModelIndex@@K@Z @ 36 NONAME ; bool NotesModel::insertInCompTodoToModel(class QModelIndex &, unsigned long)
- ?trUtf8@NotesModel@@SA?AVQString@@PBD0@Z @ 37 NONAME ; class QString NotesModel::trUtf8(char const *, char const *)
- ?insertCompTodoToModel@NotesModel@@AAE_NAAVQModelIndex@@K@Z @ 38 NONAME ; bool NotesModel::insertCompTodoToModel(class QModelIndex &, unsigned long)
- ??0NotesSortFilterProxyModel@@QAE@AAVAgendaUtil@@PAVQObject@@@Z @ 39 NONAME ; NotesSortFilterProxyModel::NotesSortFilterProxyModel(class AgendaUtil &, class QObject *)
- ?populateSourceModel@NotesModel@@AAEXXZ @ 40 NONAME ; void NotesModel::populateSourceModel(void)
- ?dateFormatString@NotesModel@@AAE?AVQString@@XZ @ 41 NONAME ; class QString NotesModel::dateFormatString(void)
- ?timeFormatString@NotesModel@@AAE?AVQString@@XZ @ 42 NONAME ; class QString NotesModel::timeFormatString(void)
- ?handleInstanceViewCreationCompleted@NotesModel@@AAEXH@Z @ 43 NONAME ; void NotesModel::handleInstanceViewCreationCompleted(int)
-
--- a/notes/notesui/bwins/notesviewmanageru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ??1NotesViewManager@@UAE@XZ @ 1 NONAME ; NotesViewManager::~NotesViewManager(void)
- ?switchToView@NotesViewManager@@QAEXW4NotesViewIds@NotesNamespace@@@Z @ 2 NONAME ; void NotesViewManager::switchToView(enum NotesNamespace::NotesViewIds)
- ??0NotesViewManager@@QAE@AAVNotesAppControllerIf@@PAVQObject@@@Z @ 3 NONAME ; NotesViewManager::NotesViewManager(class NotesAppControllerIf &, class QObject *)
-
--- a/notes/notesui/bwins/notesviewsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,21 +0,0 @@
-EXPORTS
- ??1NotesCollectionView@@UAE@XZ @ 1 NONAME ; NotesCollectionView::~NotesCollectionView(void)
- ?setupView@NotesCollectionView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 2 NONAME ; void NotesCollectionView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ??1NotesMainView@@UAE@XZ @ 3 NONAME ; NotesMainView::~NotesMainView(void)
- ??0NotesFavoriteView@@QAE@PAVQGraphicsWidget@@@Z @ 4 NONAME ; NotesFavoriteView::NotesFavoriteView(class QGraphicsWidget *)
- ??1NotesFavoriteView@@UAE@XZ @ 5 NONAME ; NotesFavoriteView::~NotesFavoriteView(void)
- ??0NotesNoteView@@QAE@PAVQGraphicsWidget@@@Z @ 6 NONAME ; NotesNoteView::NotesNoteView(class QGraphicsWidget *)
- ?setupView@NotesMainView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 7 NONAME ; void NotesMainView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ??0NotesTodoView@@QAE@PAVQGraphicsWidget@@@Z @ 8 NONAME ; NotesTodoView::NotesTodoView(class QGraphicsWidget *)
- ??0NotesMainView@@QAE@PAVQGraphicsWidget@@@Z @ 9 NONAME ; NotesMainView::NotesMainView(class QGraphicsWidget *)
- ??1NotesNoteView@@UAE@XZ @ 10 NONAME ; NotesNoteView::~NotesNoteView(void)
- ?setupAfterViewReady@NotesMainView@@QAEXXZ @ 11 NONAME ; void NotesMainView::setupAfterViewReady(void)
- ?setupView@NotesNoteView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 12 NONAME ; void NotesNoteView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ??1NotesTodoView@@UAE@XZ @ 13 NONAME ; NotesTodoView::~NotesTodoView(void)
- ?setupView@NotesFavoriteView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 14 NONAME ; void NotesFavoriteView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ?setupView@NotesTodoView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 15 NONAME ; void NotesTodoView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ??0NotesCollectionView@@QAE@PAVQGraphicsWidget@@@Z @ 16 NONAME ; NotesCollectionView::NotesCollectionView(class QGraphicsWidget *)
- ?updateTitle@NotesMainView@@QAEXXZ @ 17 NONAME ; void NotesMainView::updateTitle(void)
- ?populateListView@NotesCollectionView@@QAEXXZ @ 18 NONAME ; void NotesCollectionView::populateListView(void)
- ?updateTitle@NotesTodoView@@QAEXXZ @ 19 NONAME ; void NotesTodoView::updateTitle(void)
-
--- a/notes/notesui/eabi/notesappcontrolleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,9 +0,0 @@
-EXPORTS
- _ZN18NotesAppControllerC1EP7QObject @ 1 NONAME
- _ZN18NotesAppControllerC2EP7QObject @ 2 NONAME
- _ZN18NotesAppControllerD0Ev @ 3 NONAME
- _ZN18NotesAppControllerD1Ev @ 4 NONAME
- _ZN18NotesAppControllerD2Ev @ 5 NONAME
- _ZTI18NotesAppController @ 6 NONAME
- _ZTV18NotesAppController @ 7 NONAME
-
--- a/notes/notesui/eabi/noteseditoru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-EXPORTS
- _ZN11NotesEditor11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
- _ZN11NotesEditor11qt_metacastEPKc @ 2 NONAME
- _ZN11NotesEditor16editingCompletedEb @ 3 NONAME
- _ZN11NotesEditor16staticMetaObjectE @ 4 NONAME DATA 16
- _ZN11NotesEditor19getStaticMetaObjectEv @ 5 NONAME
- _ZN11NotesEditor4editE11AgendaEntry @ 6 NONAME
- _ZN11NotesEditor4editERK5QFile @ 7 NONAME
- _ZN11NotesEditor4editERK7QString @ 8 NONAME
- _ZN11NotesEditor4editEm @ 9 NONAME
- _ZN11NotesEditor6createENS_10CreateTypeE @ 10 NONAME
- _ZN11NotesEditorC1EP10AgendaUtilP7QObject @ 11 NONAME
- _ZN11NotesEditorC1EP7QObject @ 12 NONAME
- _ZN11NotesEditorC2EP10AgendaUtilP7QObject @ 13 NONAME
- _ZN11NotesEditorC2EP7QObject @ 14 NONAME
- _ZN11NotesEditorD0Ev @ 15 NONAME
- _ZN11NotesEditorD1Ev @ 16 NONAME
- _ZN11NotesEditorD2Ev @ 17 NONAME
- _ZNK11NotesEditor10metaObjectEv @ 18 NONAME
- _ZTI11NotesEditor @ 19 NONAME
- _ZTV11NotesEditor @ 20 NONAME
- _ZN11NotesEditor5closeENS_9CloseTypeE @ 21 NONAME
-
--- a/notes/notesui/eabi/notesmodelhandleru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,11 +0,0 @@
-EXPORTS
- _ZN17NotesModelHandler10notesModelEv @ 1 NONAME
- _ZN17NotesModelHandler15agendaInterfaceEv @ 2 NONAME
- _ZN17NotesModelHandlerC1EP7QObject @ 3 NONAME
- _ZN17NotesModelHandlerC2EP7QObject @ 4 NONAME
- _ZN17NotesModelHandlerD0Ev @ 5 NONAME
- _ZN17NotesModelHandlerD1Ev @ 6 NONAME
- _ZN17NotesModelHandlerD2Ev @ 7 NONAME
- _ZTI17NotesModelHandler @ 8 NONAME
- _ZTV17NotesModelHandler @ 9 NONAME
-
--- a/notes/notesui/eabi/notesmodelu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-EXPORTS
- _ZN10NotesModel11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
- _ZN10NotesModel11qt_metacastEPKc @ 2 NONAME
- _ZN10NotesModel11sourceModelEv @ 3 NONAME
- _ZN10NotesModel15addEntryToModelEm @ 4 NONAME
- _ZN10NotesModel16staticMetaObjectE @ 5 NONAME DATA 16
- _ZN10NotesModel17insertNoteToModelER11QModelIndexm @ 6 NONAME
- _ZN10NotesModel17updateSourceModelEm @ 7 NONAME
- _ZN10NotesModel18appendNotesToModelER5QListI11AgendaEntryE @ 8 NONAME
- _ZN10NotesModel18modifyEntryInModelEmi @ 9 NONAME
- _ZN10NotesModel19getStaticMetaObjectEv @ 10 NONAME
- _ZN10NotesModel19populateSourceModelE5QListImE @ 11 NONAME
- _ZN10NotesModel19populateSourceModelEv @ 12 NONAME
- _ZN10NotesModel20removeEntryFromModelEm @ 13 NONAME
- _ZN10NotesModel21insertCompTodoToModelER11QModelIndexm @ 14 NONAME
- _ZN10NotesModel22appendCompTodosToModelER5QListI11AgendaEntryE @ 15 NONAME
- _ZN10NotesModel23insertInCompTodoToModelER11QModelIndexm @ 16 NONAME
- _ZN10NotesModel24appendInCompTodosToModelER5QListI11AgendaEntryE @ 17 NONAME
- _ZN10NotesModel8rowAddedE11QModelIndex @ 18 NONAME
- _ZN10NotesModelC1EP10AgendaUtilP7QObject @ 19 NONAME
- _ZN10NotesModelC2EP10AgendaUtilP7QObject @ 20 NONAME
- _ZN10NotesModelD0Ev @ 21 NONAME
- _ZN10NotesModelD1Ev @ 22 NONAME
- _ZN10NotesModelD2Ev @ 23 NONAME
- _ZN25NotesSortFilterProxyModel11qt_metacallEN11QMetaObject4CallEiPPv @ 24 NONAME
- _ZN25NotesSortFilterProxyModel11qt_metacastEPKc @ 25 NONAME
- _ZN25NotesSortFilterProxyModel16staticMetaObjectE @ 26 NONAME DATA 16
- _ZN25NotesSortFilterProxyModel19getStaticMetaObjectEv @ 27 NONAME
- _ZN25NotesSortFilterProxyModelC1ER10AgendaUtilP7QObject @ 28 NONAME
- _ZN25NotesSortFilterProxyModelC2ER10AgendaUtilP7QObject @ 29 NONAME
- _ZN25NotesSortFilterProxyModelD0Ev @ 30 NONAME
- _ZN25NotesSortFilterProxyModelD1Ev @ 31 NONAME
- _ZN25NotesSortFilterProxyModelD2Ev @ 32 NONAME
- _ZNK10NotesModel10metaObjectEv @ 33 NONAME
- _ZNK25NotesSortFilterProxyModel10metaObjectEv @ 34 NONAME
- _ZNK25NotesSortFilterProxyModel16filterAcceptsRowEiRK11QModelIndex @ 35 NONAME
- _ZNK25NotesSortFilterProxyModel8lessThanERK11QModelIndexS2_ @ 36 NONAME
- _ZTI10NotesModel @ 37 NONAME
- _ZTI25NotesSortFilterProxyModel @ 38 NONAME
- _ZTV10NotesModel @ 39 NONAME
- _ZTV25NotesSortFilterProxyModel @ 40 NONAME
- _ZN10NotesModel16dateFormatStringEv @ 41 NONAME
- _ZN10NotesModel16timeFormatStringEv @ 42 NONAME
- _ZN10NotesModel35handleInstanceViewCreationCompletedEi @ 43 NONAME
-
--- a/notes/notesui/eabi/notesviewmanageru.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- _ZN16NotesViewManager12switchToViewEN14NotesNamespace12NotesViewIdsE @ 1 NONAME
- _ZN16NotesViewManagerC1ER20NotesAppControllerIfP7QObject @ 2 NONAME
- _ZN16NotesViewManagerC2ER20NotesAppControllerIfP7QObject @ 3 NONAME
- _ZN16NotesViewManagerD0Ev @ 4 NONAME
- _ZN16NotesViewManagerD1Ev @ 5 NONAME
- _ZN16NotesViewManagerD2Ev @ 6 NONAME
-
--- a/notes/notesui/eabi/notesviewsu.def Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,56 +0,0 @@
-EXPORTS
- _ZN13NotesMainView19setupAfterViewReadyEv @ 1 NONAME
- _ZN13NotesMainView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 2 NONAME
- _ZN13NotesMainViewC1EP15QGraphicsWidget @ 3 NONAME
- _ZN13NotesMainViewC2EP15QGraphicsWidget @ 4 NONAME
- _ZN13NotesMainViewD0Ev @ 5 NONAME
- _ZN13NotesMainViewD1Ev @ 6 NONAME
- _ZN13NotesMainViewD2Ev @ 7 NONAME
- _ZN13NotesNoteView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 8 NONAME
- _ZN13NotesNoteViewC1EP15QGraphicsWidget @ 9 NONAME
- _ZN13NotesNoteViewC2EP15QGraphicsWidget @ 10 NONAME
- _ZN13NotesNoteViewD0Ev @ 11 NONAME
- _ZN13NotesNoteViewD1Ev @ 12 NONAME
- _ZN13NotesNoteViewD2Ev @ 13 NONAME
- _ZN13NotesTodoView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 14 NONAME
- _ZN13NotesTodoViewC1EP15QGraphicsWidget @ 15 NONAME
- _ZN13NotesTodoViewC2EP15QGraphicsWidget @ 16 NONAME
- _ZN13NotesTodoViewD0Ev @ 17 NONAME
- _ZN13NotesTodoViewD1Ev @ 18 NONAME
- _ZN13NotesTodoViewD2Ev @ 19 NONAME
- _ZN17NotesFavoriteView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 20 NONAME
- _ZN17NotesFavoriteViewC1EP15QGraphicsWidget @ 21 NONAME
- _ZN17NotesFavoriteViewC2EP15QGraphicsWidget @ 22 NONAME
- _ZN17NotesFavoriteViewD0Ev @ 23 NONAME
- _ZN17NotesFavoriteViewD1Ev @ 24 NONAME
- _ZN17NotesFavoriteViewD2Ev @ 25 NONAME
- _ZN19NotesCollectionView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 26 NONAME
- _ZN19NotesCollectionViewC1EP15QGraphicsWidget @ 27 NONAME
- _ZN19NotesCollectionViewC2EP15QGraphicsWidget @ 28 NONAME
- _ZN19NotesCollectionViewD0Ev @ 29 NONAME
- _ZN19NotesCollectionViewD1Ev @ 30 NONAME
- _ZN19NotesCollectionViewD2Ev @ 31 NONAME
- _ZThn16_N13NotesMainViewD0Ev @ 32 NONAME
- _ZThn16_N13NotesMainViewD1Ev @ 33 NONAME
- _ZThn16_N13NotesNoteViewD0Ev @ 34 NONAME
- _ZThn16_N13NotesNoteViewD1Ev @ 35 NONAME
- _ZThn16_N13NotesTodoViewD0Ev @ 36 NONAME
- _ZThn16_N13NotesTodoViewD1Ev @ 37 NONAME
- _ZThn16_N17NotesFavoriteViewD0Ev @ 38 NONAME
- _ZThn16_N17NotesFavoriteViewD1Ev @ 39 NONAME
- _ZThn16_N19NotesCollectionViewD0Ev @ 40 NONAME
- _ZThn16_N19NotesCollectionViewD1Ev @ 41 NONAME
- _ZThn8_N13NotesMainViewD0Ev @ 42 NONAME
- _ZThn8_N13NotesMainViewD1Ev @ 43 NONAME
- _ZThn8_N13NotesNoteViewD0Ev @ 44 NONAME
- _ZThn8_N13NotesNoteViewD1Ev @ 45 NONAME
- _ZThn8_N13NotesTodoViewD0Ev @ 46 NONAME
- _ZThn8_N13NotesTodoViewD1Ev @ 47 NONAME
- _ZThn8_N17NotesFavoriteViewD0Ev @ 48 NONAME
- _ZThn8_N17NotesFavoriteViewD1Ev @ 49 NONAME
- _ZThn8_N19NotesCollectionViewD0Ev @ 50 NONAME
- _ZThn8_N19NotesCollectionViewD1Ev @ 51 NONAME
- _ZN13NotesMainView11updateTitleEv @ 52 NONAME
- _ZN13NotesTodoView11updateTitleEv @ 53 NONAME
- _ZN19NotesCollectionView16populateListViewEv @ 54 NONAME
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesappcontroller/bwins/notesappcontrolleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ??1NotesAppController@@UAE@XZ @ 1 NONAME ; NotesAppController::~NotesAppController(void)
+ ??_ENotesAppController@@UAE@I@Z @ 2 NONAME ; NotesAppController::~NotesAppController(unsigned int)
+ ??0NotesAppController@@QAE@PAVQObject@@@Z @ 3 NONAME ; NotesAppController::NotesAppController(class QObject *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesappcontroller/eabi/notesappcontrolleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,9 @@
+EXPORTS
+ _ZN18NotesAppControllerC1EP7QObject @ 1 NONAME
+ _ZN18NotesAppControllerC2EP7QObject @ 2 NONAME
+ _ZN18NotesAppControllerD0Ev @ 3 NONAME
+ _ZN18NotesAppControllerD1Ev @ 4 NONAME
+ _ZN18NotesAppControllerD2Ev @ 5 NONAME
+ _ZTI18NotesAppController @ 6 NONAME
+ _ZTV18NotesAppController @ 7 NONAME
+
--- a/notes/notesui/notesappcontroller/src/notesappcontroller.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesappcontroller/src/notesappcontroller.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -38,7 +38,7 @@
mIfImpl(0)
{
// Construct the interface implementation.
- mIfImpl = new NotesAppControllerIfImpl(this, this);
+ mIfImpl = new NotesAppControllerIfImpl(this);
// Construct the model handler.
mNotesModelHandler = new NotesModelHandler(this);
--- a/notes/notesui/notesappcontroller/src/notesappcontrollerifimpl.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesappcontroller/src/notesappcontrollerifimpl.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -38,7 +38,7 @@
*/
NotesAppControllerIfImpl::NotesAppControllerIfImpl(
NotesAppController *controller, QObject *parent)
-:QObject(parent),
+:QObject(controller),
mAppController(controller)
{
// Nothing yet.
--- a/notes/notesui/notesapplication/notesapplication.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesapplication/notesapplication.pro Thu Jul 22 16:32:51 2010 +0100
@@ -47,6 +47,8 @@
notes.path = /sys/bin
DEPLOYMENT += notes
+
+ SKINICON = qtg_large_notes
}
SOURCES += main.cpp
Binary file notes/notesui/notesapplication/rndcert.der has changed
--- a/notes/notesui/notesapplication/rndcert.key Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,15 +0,0 @@
------BEGIN RSA PRIVATE KEY-----
-MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn
-uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO
-vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB
-AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo
-REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss
-/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J
-s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut
-sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/
-pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp
-VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ
-P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK
-1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT
-1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x
------END RSA PRIVATE KEY-----
--- a/notes/notesui/notesapplication/src/main.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesapplication/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -17,10 +17,9 @@
// System includes
#include <QScopedPointer>
-#include <QTranslator>
#include <hbapplication.h>
#include <hbmainwindow.h>
-
+#include <hbtranslator.h>
// User includes
#include "notesappcontroller.h"
@@ -42,9 +41,8 @@
window.setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
// Load the translation file.
- QTranslator notesViewsTranslator;
- notesViewsTranslator.load("notes",":/translations");
- app.installTranslator(¬esViewsTranslator);
+ HbTranslator notesViewsTranslator("notes");
+ notesViewsTranslator.loadCommon();
// Construct the application controller.
QScopedPointer<NotesAppController> controller(new NotesAppController);
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/bwins/noteseditoru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+ ?edit@NotesEditor@@QAEXVAgendaEntry@@@Z @ 1 NONAME ; void NotesEditor::edit(class AgendaEntry)
+ ?tr@NotesEditor@@SA?AVQString@@PBD0H@Z @ 2 NONAME ; class QString NotesEditor::tr(char const *, char const *, int)
+ ?edit@NotesEditor@@QAEXK@Z @ 3 NONAME ; void NotesEditor::edit(unsigned long)
+ ?edit@NotesEditor@@QAEXABVQFile@@@Z @ 4 NONAME ; void NotesEditor::edit(class QFile const &)
+ ?d_func@NotesEditor@@ABEPBVNotesEditorPrivate@@XZ @ 5 NONAME ; class NotesEditorPrivate const * NotesEditor::d_func(void) const
+ ?qt_metacast@NotesEditor@@UAEPAXPBD@Z @ 6 NONAME ; void * NotesEditor::qt_metacast(char const *)
+ ?trUtf8@NotesEditor@@SA?AVQString@@PBD0H@Z @ 7 NONAME ; class QString NotesEditor::trUtf8(char const *, char const *, int)
+ ??_ENotesEditor@@UAE@I@Z @ 8 NONAME ; NotesEditor::~NotesEditor(unsigned int)
+ ?edit@NotesEditor@@QAEXABVQString@@@Z @ 9 NONAME ; void NotesEditor::edit(class QString const &)
+ ?qt_metacall@NotesEditor@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 10 NONAME ; int NotesEditor::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?create@NotesEditor@@QAEXW4CreateType@1@@Z @ 11 NONAME ; void NotesEditor::create(enum NotesEditor::CreateType)
+ ?d_func@NotesEditor@@AAEPAVNotesEditorPrivate@@XZ @ 12 NONAME ; class NotesEditorPrivate * NotesEditor::d_func(void)
+ ??1NotesEditor@@UAE@XZ @ 13 NONAME ; NotesEditor::~NotesEditor(void)
+ ??0NotesEditor@@QAE@PAVQObject@@@Z @ 14 NONAME ; NotesEditor::NotesEditor(class QObject *)
+ ?staticMetaObject@NotesEditor@@2UQMetaObject@@B @ 15 NONAME ; struct QMetaObject const NotesEditor::staticMetaObject
+ ??0NotesEditor@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 16 NONAME ; NotesEditor::NotesEditor(class AgendaUtil *, class QObject *)
+ ?close@NotesEditor@@QAEKW4CloseType@1@@Z @ 17 NONAME ; unsigned long NotesEditor::close(enum NotesEditor::CloseType)
+ ?editingCompleted@NotesEditor@@IAEX_N@Z @ 18 NONAME ; void NotesEditor::editingCompleted(bool)
+ ?metaObject@NotesEditor@@UBEPBUQMetaObject@@XZ @ 19 NONAME ; struct QMetaObject const * NotesEditor::metaObject(void) const
+ ?tr@NotesEditor@@SA?AVQString@@PBD0@Z @ 20 NONAME ; class QString NotesEditor::tr(char const *, char const *)
+ ?trUtf8@NotesEditor@@SA?AVQString@@PBD0@Z @ 21 NONAME ; class QString NotesEditor::trUtf8(char const *, char const *)
+ ?getStaticMetaObject@NotesEditor@@SAABUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const & NotesEditor::getStaticMetaObject(void)
+
--- a/notes/notesui/noteseditor/data/noteseditor.qrc Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/data/noteseditor.qrc Thu Jul 22 16:32:51 2010 +0100
@@ -1,1 +1,1 @@
-<!DOCTYPE RCC><RCC version="1.0"> <qresource prefix="/translations"> <file alias="notes">translations/notes.qm</file> </qresource> <qresource prefix="/docml"> <file alias="notesnoteeditor.docml">xml/notesnoteeditor.docml</file> <file alias="todoeditor.docml">xml/todoeditor.docml</file> </qresource></RCC>
\ No newline at end of file
+<!DOCTYPE RCC><RCC version="1.0"> <qresource prefix="/docml"> <file alias="notesnoteeditor.docml">xml/notesnoteeditor.docml</file> <file alias="todoeditor.docml">xml/todoeditor.docml</file> </qresource></RCC>
\ No newline at end of file
Binary file notes/notesui/noteseditor/data/translations/notes.qm has changed
--- a/notes/notesui/noteseditor/data/translations/notes.ts Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,856 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!DOCTYPE TS>
-<TS version="3.0" sourcelanguage="en_GB">
-<context>
-<message numerus="no" id="txt_notes_list_due_date">
- <comment>Due date for To-do note</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_new_todo">
- <comment>Toolbar button to create new To-do note</comment>
- <source>New To-do </source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L7</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_val_description">
- <comment>Default texxt value for Description field in a dataform</comment>
- <source>Description</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_editor_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>formlabel_5_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_val_subject">
- <comment>Default text value for Subject field in a dataform</comment>
- <source>Subject</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_editor_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>formlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_make_it_as_todo_note">
- <comment>Item specific menu item . This action launchs the To-Do editor to add due date and remainder for the selected note</comment>
- <source>Make it as To-do note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_find">
- <comment>toolbar button text in landscape mode . If user taps on this button, Find functionality is enabled in all notes view</comment>
- <source>Find</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_todo">
- <comment>Sub title in To-do Editor</comment>
- <source>To-do</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_new_note">
- <comment>Option menu item to create new note</comment>
- <source>New note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_modified_at_time">
- <comment>Secondary text item to mention modification time for a note</comment>
- <source>Modified at %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_14_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority_val_low">
- <comment>Priority value in Combo Box used in a dataform</comment>
- <source>Low</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_created_on_1_2">
- <comment>Secondary text item to mention creation date and time for a task</comment>
- <source>Created on %1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_1_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_alarm_time">
- <comment>Message dialog header text . Time picker component embedded</comment>
- <source>Alarm time</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P9</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_due_date">
- <comment>Label item in Data form </comment>
- <source>Due date</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>formlabel_1</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_remove_description">
- <comment>Options menu item to remove description from the To-do editor</comment>
- <source>Remove description</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_alarm_date">
- <comment>Message dialog header text . Date picker component embedded</comment>
- <source>Alarm date</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P9</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_mark_as_not_done">
- <comment>Item specific menu item to mark a task as not done</comment>
- <source>Mark as not done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once the note is modified and saved</comment>
- <source>Note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_new_note">
- <comment>toolbar button text in landscape mode . If user taps on this button, Notes editor is launched to add note</comment>
- <source>New note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_created_at_time">
- <comment>Secondary text item to mention creation time for a note</comment>
- <source>Created at %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_12_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="yes" id="txt_notes_subhead_ln_notes">
- <comment>Sub title for All Notes view</comment>
- <source>%Ln Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_description">
- <comment>Primary text label in To-do Viewer</comment>
- <source>Description:</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_7</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_subject">
- <comment>Primary text label in To-do viewer</comment>
- <source>Subject:</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic_add</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_5</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_add_description">
- <comment>Options menu item to add description field in To-do note editor</comment>
- <source>Add description</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_note_count">
- <comment>List item to show the number<Count> of items (To-Dos, Recent notes, Favourites) - Right side of the list item</comment>
- <source>[ %1 ]</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_due_date">
- <comment>Date push button in Data Form to set due date for a To-do note. This action opens the date picker component</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_button_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority_val_high">
- <comment>Priority value in Combo Box used in a dataform</comment>
- <source>High</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_completed_date_val_1">
- <comment>Completed date value (Secondary text ) in To-do viewer</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_6_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_discard_changes">
- <comment>Option menu item to discard the changes done in the notes editor</comment>
- <source>Discard changes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_short_caption_notes">
- <comment>Notes application in application library grid view</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_grid_applications_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_dialog_delete">
- <comment>Delete - Confirmation dialog softkey button </comment>
- <source>Delete</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_softkey_2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_mark_as_not_done">
- <comment>Options menu item to change the completed to-do status to not-completed</comment>
- <source>Mark as not done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_completed_date">
- <comment>Primary text label in To-do viewer</comment>
- <source>Completed date:</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_6</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority_val_normal">
- <comment>Priority value in Combo Box used in a dataform</comment>
- <source>Normal</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_combobox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_plain_notes">
- <comment>Sub title in Recent notes list view</comment>
- <source>Plain notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P6</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_delete">
- <comment>Toolbar button item to delete the note</comment>
- <source>Delete</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L4</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_favorites">
- <comment>Collections name in the list widget (Left Side)</comment>
- <source>Favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_note">
- <comment>Confirmation dialog text for deleting a note</comment>
- <source>Delete note?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_edit_time">
- <comment>Creation & Modification time and date will be shown in the groupBox. Custom groupBox label . Text shown on the right side of the widget</comment>
- <source>%1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_subhead_1_2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_all_notes">
- <comment>One of the toolbar button text in landscape mode . If user taps on this button, All notes view is displayed</comment>
- <source>All notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_todo_note">
- <comment>Confirmation dialog text for deleting a To-do note</comment>
- <source>Delete To-do note?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_remove_from_favorites">
- <comment>Item specific menu item to remove the note from favorites</comment>
- <source>Remove from favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_add_to_calendar">
- <comment>Toolbar button to launch calendar editor and add content in the subject and description field</comment>
- <source>Add to Calendar</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L4</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_long_caption_notes">
- <comment>Notes application in application library list view</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_no_notes_available">
- <comment>Custom layout ID. No parent . If the view is empty, this text should be displayed in the All notes empy list view. Same text is used in landscape as well</comment>
- <source>No notes available</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_list_no_notes_available</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_send">
- <comment>Tool bar button used to send the note to other user</comment>
- <source>Send</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L4</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_plain_notes">
- <comment>Collections name in the list widget (Left Side)</comment>
- <source>Plain notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_alarm_date">
- <comment>Alarm time and date for To-do note</comment>
- <source>%1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_created_on_date">
- <comment>Secondary text item to mention creation date for a note</comment>
- <source>Created on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_11_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_due_date">
- <comment>Message dialog header text . Date picker component embedded</comment>
- <source>Due date</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri_heading</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P9</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_list_todos">
- <comment>Collections name in the list widget (Left Side)</comment>
- <source>To-do's</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>list</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_note">
- <comment>Layout ID Parent. Custom GroupBox. Sub title in Notes editor (Left Side)</comment>
- <source>Note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_subhead_note</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_todo_notes">
- <comment>Confirmation dialog text for deleting multiple to-do notes</comment>
- <source>Delete To-do notes?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_new_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once the new note is saved</comment>
- <source>New note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_alarm_date">
- <comment>Layout ID Parent. Date Push Button in Dataform to set alarm date for a To-do note. This action opens the date picker component</comment>
- <source>%2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_button_2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_make_it_as_todo_note">
- <comment>Options menu item to convert a note to To-Do item. This action launchs To-Do editor to add due date and reminder</comment>
- <source>Make it as To-do note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P4</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_remove_from_favorites">
- <comment>Options menu item to remove the note from favorites item</comment>
- <source>Remove from favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P5</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_new_note">
- <comment>Layout ID Parent. Custom GroupBox. Sub title in Notes editor (Creating new note) - Left side text</comment>
- <source>New note</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_subhead_new_note</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P4</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_new_todo">
- <comment>Sub title in New To-do note editor</comment>
- <source>New To-do</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P12</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_title_notes">
- <comment>Title bar text for Notes application+</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_titlebar</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>title</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_mark_as_favorite">
- <comment>Options menu item to mark the note as favorite item</comment>
- <source>Mark as favorite</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P4</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_tsw_caption_notes">
- <comment>Notes application name in Task Switcher</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_tsw_caption_notes</extra-loc-layout_id>
- <extra-loc-viewid>tsw01</extra-loc-viewid>
- <extra-loc-positionid>caption</extra-loc-positionid>
- <extra-loc-feature>ts</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_collections">
- <comment>Sub title for Collections view</comment>
- <source>Collections</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P2</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_alarm_date_and_time">
- <comment>Label item in Data form</comment>
- <source>Alarm date and time</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>formlabel_3</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_collections">
- <comment>toolbar button text in landscape mode . If user taps on this button, Collections view is displayed</comment>
- <source>Collections</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_4</extra-loc-layout_id>
- <extra-loc-viewid>Notes_L1</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_edit">
- <comment>One of 3 buttons in Toolbar . Toolbar button item to edit the To-do note </comment>
- <source>Edit</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_toolbar_tiny_3</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_modified_on_1_2">
- <comment>Secondary text item to mention modified date & time for a note</comment>
- <source>Modified on %1 %2</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_2_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_button_alarm_time">
- <comment>Layout ID Parent. Custom Widget . Time Push Button in Dataform to set alarm time for a To-do note. This action opens the time picker component</comment>
- <source>%1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>txt_notes_button_1</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>button</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_info_delete_notes">
- <comment>Confirmation dialog text for deleting multiple notes</comment>
- <source>Delete notes?</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dialog_pri5_large_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P19</extra-loc-viewid>
- <extra-loc-positionid>info</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_subhead_favorites">
- <comment>Sub title in Favorite notes list view</comment>
- <source>Favorites</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P3</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_due_on_1">
- <comment>Secondary text item in the list to show due date for a task</comment>
- <source>Due on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_3_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_mark_as_favorite">
- <comment>Item specific menu item to mark a note as favorite </comment>
- <source>Mark as favorite</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_unnamed">
- <comment>Secondary text in the list item. If subject is not mentioned for a note, this text is displayed as secondary text in the All notes list view</comment>
- <source>Unnamed</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>dblist_5_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_val_completed_on_1">
- <comment>Secondary text item in the list to show completed date for To-do note</comment>
- <source>Completed on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_4_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_opt_mark_as_done">
- <comment>Options menu item to change the non-completed to-do status to completed</comment>
- <source>Mark as done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P11</extra-loc-viewid>
- <extra-loc-positionid>opt</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_new_todo_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once the new to-do note is saved</comment>
- <source>New To-do note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P10</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_setlabel_priority">
- <comment>Label item in Data form</comment>
- <source>Priority</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_pri</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>setlabel_4</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_todo_note_saved">
- <comment>Soft notification dialog info text. This dialog is displayed once to-do note is modified and saved</comment>
- <source>To-do note saved</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P10</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="yes" id="txt_notes_subhead_todos_ln_pending">
- <comment>Sub title in To-do notes list view</comment>
- <source>To-do's (%Ln Pending )</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_groupbox_simple_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P7</extra-loc-viewid>
- <extra-loc-positionid>subhead</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_task_switcher_caption_notes">
- <comment>Notes application name in Task Switcher</comment>
- <source>Notes</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>cell_tport_appsw_pane_t1</extra-loc-layout_id>
- <extra-loc-viewid>Task Switcher</extra-loc-viewid>
- <extra-loc-positionid>caption</extra-loc-positionid>
- <extra-loc-feature>Ta</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_note_modified_on_date">
- <comment>Secondary text item to mention modification date for a note</comment>
- <source>Modified on %1</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_sec_graphic</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_13_val</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dblist_unnamed">
- <comment>Primary text in all notes list view if the subject is not mentioned for a To-do note</comment>
- <source>Unnamed</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_list_pri_graphic_add</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>dblist_11</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_add_to_calendar">
- <comment>Item specific menu item. This action launches the event editor and adds the notes content to the subject & description field</comment>
- <source>Add to Calendar</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_dpopinfo_note_moved_to_todos">
- <comment>If a plain note is marked as To-do note in the list view, the marked item disappears from the current view with a notification dialog </comment>
- <source>Note moved to To-do's</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_notifdialog_pri2</extra-loc-layout_id>
- <extra-loc-viewid>Notes</extra-loc-viewid>
- <extra-loc-positionid>dpopinfo</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_menu_mark_as_done">
- <comment>Item specific menu item to mark a task as completed</comment>
- <source>Mark as done</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_menu_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P1</extra-loc-viewid>
- <extra-loc-positionid>menu</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-<message numerus="no" id="txt_notes_formlabel_alarm">
- <comment>Checkbox label item to enable/disable alarm</comment>
- <source>Alarm</source>
- <translation variants="no" type="unfinished"></translation>
- <extra-loc-layout_id>qtl_dataform_checkbox_sec</extra-loc-layout_id>
- <extra-loc-viewid>Notes_P8</extra-loc-viewid>
- <extra-loc-positionid>formlabel_2</extra-loc-positionid>
- <extra-loc-feature>No</extra-loc-feature>
- <extra-loc-blank>False</extra-loc-blank>
-</message>
-</context>
-</TS>
--- a/notes/notesui/noteseditor/data/xml/notesnoteeditor.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/data/xml/notesnoteeditor.docml Thu Jul 22 16:32:51 2010 +0100
@@ -21,7 +21,7 @@
<widget name="notesEditorView" type="HbView">
<widget name="noteEditorWidget" role="HbView:widget" type="HbWidget">
<widget name="notesEditorSubHeading" type="HbGroupBox">
- <string name="titleText" value=" "/>
+ <string name="heading" value=" "/>
<bool name="collapsable" value="FALSE"/>
</widget>
<widget name="editorHeading" type="HbLabel">
@@ -52,8 +52,8 @@
</layout>
</widget>
<widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="makeFavoriteAction" role="HbMenu:addAction"/>
<ref object="makeAsTodoAction" role="HbMenu:addAction"/>
- <ref object="makeFavoriteAction" role="HbMenu:addAction"/>
</widget>
<widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
<enums name="orientation" value="Horizontal"/>
--- a/notes/notesui/noteseditor/data/xml/todoeditor.docml Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/data/xml/todoeditor.docml Thu Jul 22 16:32:51 2010 +0100
@@ -3,7 +3,7 @@
<widget name="todoEditorview" type="HbView">
<widget name="todoEditorwidget" role="HbView:widget" type="HbWidget">
<widget name="subHeading" type="HbGroupBox">
- <string locid="txt_notes_subhead_new_todo" name="titleText" value="New To-do"/>
+ <string locid="txt_notes_subhead_new_todo" name="heading" value="New To-do"/>
<bool name="collapsable" value="FALSE"/>
</widget>
<widget name="todoEditorDataForm" type="HbDataForm">
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/eabi/noteseditoru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,23 @@
+EXPORTS
+ _ZN11NotesEditor11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+ _ZN11NotesEditor11qt_metacastEPKc @ 2 NONAME
+ _ZN11NotesEditor16editingCompletedEb @ 3 NONAME
+ _ZN11NotesEditor16staticMetaObjectE @ 4 NONAME DATA 16
+ _ZN11NotesEditor19getStaticMetaObjectEv @ 5 NONAME
+ _ZN11NotesEditor4editE11AgendaEntry @ 6 NONAME
+ _ZN11NotesEditor4editERK5QFile @ 7 NONAME
+ _ZN11NotesEditor4editERK7QString @ 8 NONAME
+ _ZN11NotesEditor4editEm @ 9 NONAME
+ _ZN11NotesEditor5closeENS_9CloseTypeE @ 10 NONAME
+ _ZN11NotesEditor6createENS_10CreateTypeE @ 11 NONAME
+ _ZN11NotesEditorC1EP10AgendaUtilP7QObject @ 12 NONAME
+ _ZN11NotesEditorC1EP7QObject @ 13 NONAME
+ _ZN11NotesEditorC2EP10AgendaUtilP7QObject @ 14 NONAME
+ _ZN11NotesEditorC2EP7QObject @ 15 NONAME
+ _ZN11NotesEditorD0Ev @ 16 NONAME
+ _ZN11NotesEditorD1Ev @ 17 NONAME
+ _ZN11NotesEditorD2Ev @ 18 NONAME
+ _ZNK11NotesEditor10metaObjectEv @ 19 NONAME
+ _ZTI11NotesEditor @ 20 NONAME
+ _ZTV11NotesEditor @ 21 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/inc/noteseditor.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,75 @@
+/*
+* Copyright (c) 2009 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:
+* The header file for NotesEditor class.
+*
+*/
+
+#ifndef NOTESEDITOR_H
+#define NOTESEDITOR_H
+
+// System includes
+#include <QObject>
+#include <qglobal.h>
+
+// User includes
+#include "noteseditordefines.h"
+
+// Forward declarations
+class QFile;
+class QString;
+class AgendaUtil;
+class AgendaEntry;
+class NotesEditorPrivate;
+
+class NOTESEDITOR_EXPORT NotesEditor : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum CreateType{
+ CreateNote = 0,
+ CreateTodo,
+ CreateTypeUnKnown = -1
+ };
+ enum CloseType{
+ CloseWithSave = 0,
+ CloseWithoutSave,
+ CloseTypeUnKnown = -1
+ };
+
+ explicit NotesEditor(QObject *parent = 0);
+ explicit NotesEditor(AgendaUtil *agendaUtil, QObject *parent = 0);
+ virtual ~NotesEditor();
+
+public:
+ void edit(const QString &string);
+ void edit(const QFile &handle);
+ void edit(AgendaEntry entry);
+ void edit(ulong id);
+ void create(CreateType type);
+ ulong close(CloseType type);
+
+signals:
+ void editingCompleted(bool status = true);
+
+private:
+ NotesEditorPrivate *d_ptr;
+ Q_DECLARE_PRIVATE_D(d_ptr, NotesEditor)
+ Q_DISABLE_COPY(NotesEditor)
+};
+
+#endif // NOTESEDITOR_H
+
+// End of file --Don't remove this.
--- a/notes/notesui/noteseditor/inc/noteseditor_p.h Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/inc/noteseditor_p.h Thu Jul 22 16:32:51 2010 +0100
@@ -31,7 +31,7 @@
// Forward declarations
class QFile;
class QString;
-class QTranslator;
+class HbTranslator;
class HbView;
class AgendaUtil;
class NotesEditor;
@@ -85,7 +85,7 @@
bool mOwnsAgendaUtil;
bool mSaveEntry;
- QPointer<QTranslator> mTranslator;
+ HbTranslator *mTranslator;
ulong mNoteId;
private:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/inc/noteseditordefines.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,33 @@
+/*
+* Copyright (c) 2009 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:
+* This is the common definition file for the notes editor.
+*
+*/
+
+#ifndef NOTESEDITORDEFINES_H
+#define NOTESEDITORDEFINES_H
+
+// System includes
+#include <qglobal.h>
+
+#ifdef NOTESEDITOR_LIB
+# define NOTESEDITOR_EXPORT Q_DECL_EXPORT
+#else
+# define NOTESEDITOR_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // NOTESEDITORDEFINES_H
+
+// End of file --Don't remove this.
--- a/notes/notesui/noteseditor/noteseditor.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/noteseditor.pro Thu Jul 22 16:32:51 2010 +0100
@@ -42,6 +42,10 @@
LIBS += -lagendainterface \
-lcaleneditor
+
+ BLD_INF_RULES.prj_exports += \
+ "./inc/noteseditor.h |../../inc/noteseditor.h" \
+ "./inc/noteseditordefines.h |../../inc/noteseditordefines.h
}
SOURCES += \
@@ -53,8 +57,8 @@
notestodoeditorcustomitem.cpp
HEADERS += \
- ../../../inc/noteseditor.h \
- ../../../inc/noteseditordefines.h \
+ noteseditor.h \
+ noteseditordefines.h \
noteseditor_p.h \
noteseditordocloader.h \
noteseditorcommon.h \
@@ -64,5 +68,7 @@
RESOURCES += \
noteseditor.qrc
+# TODO :need to use noteseditor.ts once it is released to platform
+TRANSLATIONS += notes.ts
# End of file --Don't remove this.
--- a/notes/notesui/noteseditor/src/noteseditor.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/src/noteseditor.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -44,7 +44,7 @@
\param parent QObject pointer.
*/
NotesEditor::NotesEditor(QObject *parent)
-:QObject(parent),d_ptr(new NotesEditorPrivate(0, parent))
+:QObject(parent),d_ptr(new NotesEditorPrivate(0, this))
{
// Nothing yet.
}
@@ -57,7 +57,7 @@
\param parent QObject pointer.
*/
NotesEditor::NotesEditor(AgendaUtil *agendaUtil, QObject *parent)
-:QObject(parent), d_ptr(new NotesEditorPrivate(agendaUtil, parent))
+:QObject(parent), d_ptr(new NotesEditorPrivate(agendaUtil, this))
{
// Nothing yet.
}
--- a/notes/notesui/noteseditor/src/noteseditor_p.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/src/noteseditor_p.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -18,13 +18,12 @@
// System includes
#include <QDateTime>
-#include <QTranslator>
-#include <HbApplication>
#include <HbInstance>
#include <HbMainWindow>
#include <HbView>
#include <HbNotificationDialog>
#include <HbExtendedLocale>
+#include <HbTranslator>
// User includes
#include "noteseditor.h"
@@ -49,10 +48,14 @@
NotesEditorPrivate::NotesEditorPrivate(AgendaUtil *agendaUtil, QObject *parent)
:QObject(parent),
mSaveEntry(true),
+ mTranslator(0),
mNoteId(0)
{
// First get the q-pointer.
q_ptr = static_cast<NotesEditor *> (parent);
+
+ mTranslator = new HbTranslator("notes");
+ mTranslator->loadCommon();
// Here we check if the agendautil passed by the client is 0. If so, then we
// construct our own.
@@ -69,11 +72,6 @@
mAgendaUtil, SIGNAL(entriesChanged(QList<ulong> )),
this, SLOT(handleEntriesChanged(QList<ulong> )));
-
- mTranslator = new QTranslator;
- int success=mTranslator->load("notes",":/translations");
-
- HbApplication::instance()->installTranslator(mTranslator);
}
/*!
@@ -86,7 +84,6 @@
mAgendaUtil = 0;
}
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -565,12 +562,12 @@
if (isTodoEdited()) {
status = mAgendaUtil->updateEntry(mModifiedNote);
mNoteId = mModifiedNote.id();
- if (status) {
- showNotification(
- hbTrId("txt_notes_dpopinfo_todo_note_saved"));
- }
}
}
+ if (status) {
+ showNotification(
+ hbTrId("txt_notes_dpopinfo_todo_note_saved"));
+ }
}
return status;
--- a/notes/notesui/noteseditor/src/notestodoeditorcustomitem.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/noteseditor/src/notestodoeditorcustomitem.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -181,6 +181,7 @@
mTimePickerDialog = new HbDialog;
mTimePickerDialog->setTimeout(HbDialog::NoTimeout);
mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+ mTimePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true);
// Set the heading for the dialog.
HbLabel * timeLabel = new HbLabel("Time", mTimePickerDialog);
@@ -221,7 +222,8 @@
mDatePickerDialog = new HbDialog;
mDatePickerDialog->setTimeout(HbDialog::NoTimeout);
mDatePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
-
+ mDatePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+
// Set the heading for the dialog.
HbLabel * timeLabel = new HbLabel("Date", mDatePickerDialog);
mDatePickerDialog->setHeadingWidget(timeLabel);
@@ -274,7 +276,8 @@
mDatePickerDialog = new HbDialog;
mDatePickerDialog->setTimeout(HbDialog::NoTimeout);
mDatePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
-
+ mDatePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true);
+
// Create date picker
HbDateTimePicker *datePicker = new HbDateTimePicker(mDatePickerDialog);
// Set the min/max date for the editor.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesmodel/bwins/notesmodelu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,45 @@
+EXPORTS
+ ?sourceModel@NotesModel@@QAEPAVQAbstractItemModel@@XZ @ 1 NONAME ; class QAbstractItemModel * NotesModel::sourceModel(void)
+ ?filterAcceptsRow@NotesSortFilterProxyModel@@MBE_NHABVQModelIndex@@@Z @ 2 NONAME ; bool NotesSortFilterProxyModel::filterAcceptsRow(int, class QModelIndex const &) const
+ ?modifyEntryInModel@NotesModel@@AAEXKH@Z @ 3 NONAME ; void NotesModel::modifyEntryInModel(unsigned long, int)
+ ?getStaticMetaObject@NotesSortFilterProxyModel@@SAABUQMetaObject@@XZ @ 4 NONAME ; struct QMetaObject const & NotesSortFilterProxyModel::getStaticMetaObject(void)
+ ?appendCompTodosToModel@NotesModel@@AAEXAAV?$QList@VAgendaEntry@@@@@Z @ 5 NONAME ; void NotesModel::appendCompTodosToModel(class QList<class AgendaEntry> &)
+ ?tr@NotesSortFilterProxyModel@@SA?AVQString@@PBD0H@Z @ 6 NONAME ; class QString NotesSortFilterProxyModel::tr(char const *, char const *, int)
+ ?rowAdded@NotesModel@@IAEXVQModelIndex@@@Z @ 7 NONAME ; void NotesModel::rowAdded(class QModelIndex)
+ ?qt_metacast@NotesModel@@UAEPAXPBD@Z @ 8 NONAME ; void * NotesModel::qt_metacast(char const *)
+ ?trUtf8@NotesSortFilterProxyModel@@SA?AVQString@@PBD0@Z @ 9 NONAME ; class QString NotesSortFilterProxyModel::trUtf8(char const *, char const *)
+ ?lessThan@NotesSortFilterProxyModel@@MBE_NABVQModelIndex@@0@Z @ 10 NONAME ; bool NotesSortFilterProxyModel::lessThan(class QModelIndex const &, class QModelIndex const &) const
+ ?metaObject@NotesSortFilterProxyModel@@UBEPBUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const * NotesSortFilterProxyModel::metaObject(void) const
+ ?dateFormatString@NotesModel@@AAE?AVQString@@XZ @ 12 NONAME ; class QString NotesModel::dateFormatString(void)
+ ?trUtf8@NotesSortFilterProxyModel@@SA?AVQString@@PBD0H@Z @ 13 NONAME ; class QString NotesSortFilterProxyModel::trUtf8(char const *, char const *, int)
+ ?metaObject@NotesModel@@UBEPBUQMetaObject@@XZ @ 14 NONAME ; struct QMetaObject const * NotesModel::metaObject(void) const
+ ?tr@NotesModel@@SA?AVQString@@PBD0H@Z @ 15 NONAME ; class QString NotesModel::tr(char const *, char const *, int)
+ ?staticMetaObject@NotesModel@@2UQMetaObject@@B @ 16 NONAME ; struct QMetaObject const NotesModel::staticMetaObject
+ ?staticMetaObject@NotesSortFilterProxyModel@@2UQMetaObject@@B @ 17 NONAME ; struct QMetaObject const NotesSortFilterProxyModel::staticMetaObject
+ ??0NotesModel@@QAE@PAVAgendaUtil@@PAVQObject@@@Z @ 18 NONAME ; NotesModel::NotesModel(class AgendaUtil *, class QObject *)
+ ??_ENotesSortFilterProxyModel@@UAE@I@Z @ 19 NONAME ; NotesSortFilterProxyModel::~NotesSortFilterProxyModel(unsigned int)
+ ??1NotesSortFilterProxyModel@@UAE@XZ @ 20 NONAME ; NotesSortFilterProxyModel::~NotesSortFilterProxyModel(void)
+ ?qt_metacall@NotesSortFilterProxyModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 21 NONAME ; int NotesSortFilterProxyModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?timeFormatString@NotesModel@@AAE?AVQString@@XZ @ 22 NONAME ; class QString NotesModel::timeFormatString(void)
+ ?tr@NotesModel@@SA?AVQString@@PBD0@Z @ 23 NONAME ; class QString NotesModel::tr(char const *, char const *)
+ ?getStaticMetaObject@NotesModel@@SAABUQMetaObject@@XZ @ 24 NONAME ; struct QMetaObject const & NotesModel::getStaticMetaObject(void)
+ ?tr@NotesSortFilterProxyModel@@SA?AVQString@@PBD0@Z @ 25 NONAME ; class QString NotesSortFilterProxyModel::tr(char const *, char const *)
+ ?addEntryToModel@NotesModel@@AAEXK@Z @ 26 NONAME ; void NotesModel::addEntryToModel(unsigned long)
+ ??1NotesModel@@UAE@XZ @ 27 NONAME ; NotesModel::~NotesModel(void)
+ ?handleInstanceViewCreationCompleted@NotesModel@@AAEXH@Z @ 28 NONAME ; void NotesModel::handleInstanceViewCreationCompleted(int)
+ ?removeEntryFromModel@NotesModel@@AAEXK@Z @ 29 NONAME ; void NotesModel::removeEntryFromModel(unsigned long)
+ ?qt_metacast@NotesSortFilterProxyModel@@UAEPAXPBD@Z @ 30 NONAME ; void * NotesSortFilterProxyModel::qt_metacast(char const *)
+ ?appendInCompTodosToModel@NotesModel@@AAEXAAV?$QList@VAgendaEntry@@@@@Z @ 31 NONAME ; void NotesModel::appendInCompTodosToModel(class QList<class AgendaEntry> &)
+ ?insertNoteToModel@NotesModel@@AAE_NAAVQModelIndex@@K@Z @ 32 NONAME ; bool NotesModel::insertNoteToModel(class QModelIndex &, unsigned long)
+ ?qt_metacall@NotesModel@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 33 NONAME ; int NotesModel::qt_metacall(enum QMetaObject::Call, int, void * *)
+ ?populateSourceModel@NotesModel@@AAEXV?$QList@K@@@Z @ 34 NONAME ; void NotesModel::populateSourceModel(class QList<unsigned long>)
+ ?appendNotesToModel@NotesModel@@AAEXAAV?$QList@VAgendaEntry@@@@@Z @ 35 NONAME ; void NotesModel::appendNotesToModel(class QList<class AgendaEntry> &)
+ ?updateSourceModel@NotesModel@@AAEXK@Z @ 36 NONAME ; void NotesModel::updateSourceModel(unsigned long)
+ ??_ENotesModel@@UAE@I@Z @ 37 NONAME ; NotesModel::~NotesModel(unsigned int)
+ ?trUtf8@NotesModel@@SA?AVQString@@PBD0H@Z @ 38 NONAME ; class QString NotesModel::trUtf8(char const *, char const *, int)
+ ?insertInCompTodoToModel@NotesModel@@AAE_NAAVQModelIndex@@K@Z @ 39 NONAME ; bool NotesModel::insertInCompTodoToModel(class QModelIndex &, unsigned long)
+ ?trUtf8@NotesModel@@SA?AVQString@@PBD0@Z @ 40 NONAME ; class QString NotesModel::trUtf8(char const *, char const *)
+ ?insertCompTodoToModel@NotesModel@@AAE_NAAVQModelIndex@@K@Z @ 41 NONAME ; bool NotesModel::insertCompTodoToModel(class QModelIndex &, unsigned long)
+ ??0NotesSortFilterProxyModel@@QAE@AAVAgendaUtil@@PAVQObject@@@Z @ 42 NONAME ; NotesSortFilterProxyModel::NotesSortFilterProxyModel(class AgendaUtil &, class QObject *)
+ ?populateSourceModel@NotesModel@@AAEXXZ @ 43 NONAME ; void NotesModel::populateSourceModel(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesmodel/eabi/notesmodelu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,45 @@
+EXPORTS
+ _ZN10NotesModel11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
+ _ZN10NotesModel11qt_metacastEPKc @ 2 NONAME
+ _ZN10NotesModel11sourceModelEv @ 3 NONAME
+ _ZN10NotesModel15addEntryToModelEm @ 4 NONAME
+ _ZN10NotesModel16dateFormatStringEv @ 5 NONAME
+ _ZN10NotesModel16staticMetaObjectE @ 6 NONAME DATA 16
+ _ZN10NotesModel16timeFormatStringEv @ 7 NONAME
+ _ZN10NotesModel17insertNoteToModelER11QModelIndexm @ 8 NONAME
+ _ZN10NotesModel17updateSourceModelEm @ 9 NONAME
+ _ZN10NotesModel18appendNotesToModelER5QListI11AgendaEntryE @ 10 NONAME
+ _ZN10NotesModel18modifyEntryInModelEmi @ 11 NONAME
+ _ZN10NotesModel19getStaticMetaObjectEv @ 12 NONAME
+ _ZN10NotesModel19populateSourceModelE5QListImE @ 13 NONAME
+ _ZN10NotesModel19populateSourceModelEv @ 14 NONAME
+ _ZN10NotesModel20removeEntryFromModelEm @ 15 NONAME
+ _ZN10NotesModel21insertCompTodoToModelER11QModelIndexm @ 16 NONAME
+ _ZN10NotesModel22appendCompTodosToModelER5QListI11AgendaEntryE @ 17 NONAME
+ _ZN10NotesModel23insertInCompTodoToModelER11QModelIndexm @ 18 NONAME
+ _ZN10NotesModel24appendInCompTodosToModelER5QListI11AgendaEntryE @ 19 NONAME
+ _ZN10NotesModel35handleInstanceViewCreationCompletedEi @ 20 NONAME
+ _ZN10NotesModel8rowAddedE11QModelIndex @ 21 NONAME
+ _ZN10NotesModelC1EP10AgendaUtilP7QObject @ 22 NONAME
+ _ZN10NotesModelC2EP10AgendaUtilP7QObject @ 23 NONAME
+ _ZN10NotesModelD0Ev @ 24 NONAME
+ _ZN10NotesModelD1Ev @ 25 NONAME
+ _ZN10NotesModelD2Ev @ 26 NONAME
+ _ZN25NotesSortFilterProxyModel11qt_metacallEN11QMetaObject4CallEiPPv @ 27 NONAME
+ _ZN25NotesSortFilterProxyModel11qt_metacastEPKc @ 28 NONAME
+ _ZN25NotesSortFilterProxyModel16staticMetaObjectE @ 29 NONAME DATA 16
+ _ZN25NotesSortFilterProxyModel19getStaticMetaObjectEv @ 30 NONAME
+ _ZN25NotesSortFilterProxyModelC1ER10AgendaUtilP7QObject @ 31 NONAME
+ _ZN25NotesSortFilterProxyModelC2ER10AgendaUtilP7QObject @ 32 NONAME
+ _ZN25NotesSortFilterProxyModelD0Ev @ 33 NONAME
+ _ZN25NotesSortFilterProxyModelD1Ev @ 34 NONAME
+ _ZN25NotesSortFilterProxyModelD2Ev @ 35 NONAME
+ _ZNK10NotesModel10metaObjectEv @ 36 NONAME
+ _ZNK25NotesSortFilterProxyModel10metaObjectEv @ 37 NONAME
+ _ZNK25NotesSortFilterProxyModel16filterAcceptsRowEiRK11QModelIndex @ 38 NONAME
+ _ZNK25NotesSortFilterProxyModel8lessThanERK11QModelIndexS2_ @ 39 NONAME
+ _ZTI10NotesModel @ 40 NONAME
+ _ZTI25NotesSortFilterProxyModel @ 41 NONAME
+ _ZTV10NotesModel @ 42 NONAME
+ _ZTV25NotesSortFilterProxyModel @ 43 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesmodelhandler/bwins/notesmodelhandleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,7 @@
+EXPORTS
+ ?agendaInterface@NotesModelHandler@@QAEPAVAgendaUtil@@XZ @ 1 NONAME ; class AgendaUtil * NotesModelHandler::agendaInterface(void)
+ ??_ENotesModelHandler@@UAE@I@Z @ 2 NONAME ; NotesModelHandler::~NotesModelHandler(unsigned int)
+ ??1NotesModelHandler@@UAE@XZ @ 3 NONAME ; NotesModelHandler::~NotesModelHandler(void)
+ ??0NotesModelHandler@@QAE@PAVQObject@@@Z @ 4 NONAME ; NotesModelHandler::NotesModelHandler(class QObject *)
+ ?notesModel@NotesModelHandler@@QAEPAVNotesModel@@XZ @ 5 NONAME ; class NotesModel * NotesModelHandler::notesModel(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesmodelhandler/eabi/notesmodelhandleru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,11 @@
+EXPORTS
+ _ZN17NotesModelHandler10notesModelEv @ 1 NONAME
+ _ZN17NotesModelHandler15agendaInterfaceEv @ 2 NONAME
+ _ZN17NotesModelHandlerC1EP7QObject @ 3 NONAME
+ _ZN17NotesModelHandlerC2EP7QObject @ 4 NONAME
+ _ZN17NotesModelHandlerD0Ev @ 5 NONAME
+ _ZN17NotesModelHandlerD1Ev @ 6 NONAME
+ _ZN17NotesModelHandlerD2Ev @ 7 NONAME
+ _ZTI17NotesModelHandler @ 8 NONAME
+ _ZTV17NotesModelHandler @ 9 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesplugins/noteseditorplugin/inc/noteseditorplugin.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2009 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:
+* The header file for NotesEditorPlugin class.
+*
+*/
+
+#ifndef NOTESEDITORPLUGIN_H
+#define NOTESEDITORPLUGIN_H
+
+// System includes
+#include <QObject>
+#include <QPointer>
+#include <noteseditorinterface.h>
+
+#include "noteseditor.h"
+
+// Forward declarations
+class QFile;
+class QString;
+class AgendaUtil;
+class AgendaEntry;
+
+class NotesEditorPlugin: public NotesEditorInterface
+{
+ Q_OBJECT
+ Q_INTERFACES(NotesEditorInterface)
+
+public:
+ NotesEditorPlugin(QObject *parent = 0);
+ ~NotesEditorPlugin();
+
+public:
+ void edit(const QString &string, AgendaUtil *agendaUtil=0);
+ void edit(const QFile &handle, AgendaUtil *agendaUtil=0);
+ void edit(AgendaEntry entry, AgendaUtil *agendaUtil=0);
+ void edit(ulong id, AgendaUtil *agendaUtil=0);
+ void create(CreateType type, AgendaUtil *agendaUtil=0);
+ ulong close(CloseType type, AgendaUtil *agendaUtil=0);
+
+private:
+ void createNotesEditor(AgendaUtil *agendaUtil);
+
+private slots:
+ void handleEditingCompleted(bool status);
+
+private:
+ QPointer<NotesEditor> mNotesEditor;
+};
+
+#endif //NOTESEDITORPLUGIN_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesplugins/noteseditorplugin/noteseditorplugin.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,60 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for the notes editor plugin.
+#
+
+TEMPLATE = lib
+CONFIG += hb plugin
+TARGET = noteseditorplugin
+
+INCLUDEPATH += \
+ . \
+ ./src \
+ ./inc \
+ ../../../inc
+
+DEPENDPATH += \
+ . \
+ ./src \
+ ./inc
+
+symbian: {
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.UID3 = 0x2002FF88
+
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += \
+ -lagendainterface \
+ -lnoteseditor
+
+load(data_caging_paths)
+
+plugin.sources = $${TARGET}.dll
+plugin.path = $$QT_PLUGINS_BASE_DIR/notes
+DEPLOYMENT += plugin
+
+BLD_INF_RULES.prj_exports += \
+"./qmakepluginstubs/noteseditorplugin.qtplugin /$$HW_ZDIR$$RESOURCE_FILES_DIR/qt/plugins/notes/noteseditorplugin.qtplugin"
+}
+
+HEADERS += \
+ ../../../../organizer_plat/notes_editor_api/inc/noteseditorinterface.h \
+ noteseditorplugin.h
+
+SOURCES += noteseditorplugin.cpp
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesplugins/noteseditorplugin/src/noteseditorplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,188 @@
+/*
+* Copyright (c) 2009 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:
+* Definition of NotesEditorPlugin class.
+*
+*/
+
+// System includes.
+#include <noteseditorinterface.h>
+#include <AgendaUtil>
+#include <AgendaEntry>
+
+// User includes.
+#include "noteseditorplugin.h"
+#include "noteseditor.h"
+
+/*!
+ \class NotesEditorPlugin
+
+ NotesEditorPlugin provides QT plugin implementation of NotesEditorInterface.
+ */
+
+/*!
+ \fn void NotesEditorPlugin::editingCompleted(bool status = true)
+
+ This signal is emitted when editing/creation of a note/to-do is completed.
+
+ \param status This indicates whether the note/to-do was saved or not.
+ This will be `true' if the note was saved by the user.
+ false' otherwise.
+ */
+
+
+/*!
+ Constructor.
+
+ \param parent QObject pointer.
+ */
+NotesEditorPlugin::NotesEditorPlugin(QObject *parent)
+{
+ Q_UNUSED(parent)
+}
+
+/*!
+ Destructor.
+ */
+NotesEditorPlugin::~NotesEditorPlugin()
+{
+}
+
+
+/*!
+ Shows the noteseditor. The argument acts as the description for the note.
+
+ \param string reference to file string/buffer.
+ */
+void NotesEditorPlugin::edit(const QString &string, AgendaUtil *agendaUtil)
+{
+ if (!mNotesEditor) {
+ createNotesEditor(agendaUtil);
+ }
+
+ mNotesEditor->edit(string);
+}
+
+/*!
+ Shows the noteseditor by parsing a .vcs which could be of a To-do or a plain
+ .txt file which will be edited as a note.
+
+ \param handle reference to QFile handle.
+ */
+void NotesEditorPlugin::edit(const QFile &handle, AgendaUtil *agendaUtil)
+{
+ if (!mNotesEditor) {
+ createNotesEditor(agendaUtil);
+ }
+
+ mNotesEditor->edit(handle);
+}
+
+/*!
+ Shows the noteseditor, by parsing an AgendaEntry.
+
+ \param entry An object of AgendaEntry.
+ */
+void NotesEditorPlugin::edit(AgendaEntry entry, AgendaUtil *agendaUtil)
+{
+ if (!mNotesEditor) {
+ createNotesEditor(agendaUtil);
+ }
+
+ mNotesEditor->edit(entry);
+}
+
+/*!
+ Shows the noteseditor, by fetching the note using the entry id provided.
+
+ \param id entry id of the note.
+ */
+void NotesEditorPlugin::edit(ulong id, AgendaUtil *agendaUtil)
+{
+ if (!mNotesEditor) {
+ createNotesEditor(agendaUtil);
+ }
+
+ mNotesEditor->edit(id);
+}
+
+/*!
+ Creates a new note or to-do based on the create type.It lanuches the
+ respective editors for editing
+
+ \type type of the editor to be shown for creating new note and new to-do
+ */
+void NotesEditorPlugin::create( NotesEditorInterface::CreateType type,
+ AgendaUtil *agendaUtil)
+{
+ if (!mNotesEditor) {
+ createNotesEditor(agendaUtil);
+ }
+
+ mNotesEditor->create(static_cast<NotesEditor::CreateType>(type));
+}
+
+/*!
+ Closes the notes editor
+
+ \param type Type of the close required.
+ */
+ulong NotesEditorPlugin::close( NotesEditorInterface::CloseType type,
+ AgendaUtil *agendaUtil)
+{
+ if (!mNotesEditor) {
+ createNotesEditor(agendaUtil);
+ }
+
+ return mNotesEditor->close(static_cast<NotesEditor::CloseType>(type));
+}
+
+/*!
+ Creates notes Editor.
+ */
+void NotesEditorPlugin::createNotesEditor(AgendaUtil *agendaUtil)
+{
+ if (agendaUtil) {
+ mNotesEditor = new NotesEditor(agendaUtil, this);
+ } else {
+ mNotesEditor = new NotesEditor(this);
+ }
+
+ if (mNotesEditor) {
+ connect(
+ mNotesEditor, SIGNAL(editingCompleted(bool)),
+ this, SLOT(handleEditingCompleted(bool)));
+ }
+}
+
+/*!
+ Slot to handle editing completed
+ */
+void NotesEditorPlugin::handleEditingCompleted(bool status)
+{
+ // Emits the signal.
+ emit editingCompleted(status);
+
+ // Cleanup.
+ if (mNotesEditor) {
+ mNotesEditor->deleteLater();
+ }
+}
+
+// Exports plugin class NotesEditorPlugin for the target
+// plugin noteseditorplugin.
+Q_EXPORT_PLUGIN2(noteseditorplugin, NotesEditorPlugin)
+
+// End of file --Don't remove this.
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesplugins/notesplugins.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,23 @@
+#
+# Copyright (c) 2009 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: pro file for notes plugins.
+#
+
+
+TEMPLATE = subdirs
+
+SUBDIRS += noteseditorplugin
+CONFIG += ordered
+
+# End of file --Don't remove this.
--- a/notes/notesui/notesui.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesui.pro Thu Jul 22 16:32:51 2010 +0100
@@ -18,6 +18,8 @@
SUBDIRS += \
notesmodel \
+ noteseditor \
+ notesplugins \
notesviews \
notesviewmanager \
notesmodelhandler \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesviewmanager/bwins/notesviewmanageru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,5 @@
+EXPORTS
+ ??1NotesViewManager@@UAE@XZ @ 1 NONAME ; NotesViewManager::~NotesViewManager(void)
+ ?switchToView@NotesViewManager@@QAEXW4NotesViewIds@NotesNamespace@@@Z @ 2 NONAME ; void NotesViewManager::switchToView(enum NotesNamespace::NotesViewIds)
+ ??0NotesViewManager@@QAE@AAVNotesAppControllerIf@@PAVQObject@@@Z @ 3 NONAME ; NotesViewManager::NotesViewManager(class NotesAppControllerIf &, class QObject *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesviewmanager/eabi/notesviewmanageru.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,8 @@
+EXPORTS
+ _ZN16NotesViewManager12switchToViewEN14NotesNamespace12NotesViewIdsE @ 1 NONAME
+ _ZN16NotesViewManagerC1ER20NotesAppControllerIfP7QObject @ 2 NONAME
+ _ZN16NotesViewManagerC2ER20NotesAppControllerIfP7QObject @ 3 NONAME
+ _ZN16NotesViewManagerD0Ev @ 4 NONAME
+ _ZN16NotesViewManagerD1Ev @ 5 NONAME
+ _ZN16NotesViewManagerD2Ev @ 6 NONAME
+
--- a/notes/notesui/notesviewmanager/src/notesviewmanager.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviewmanager/src/notesviewmanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -24,6 +24,8 @@
#include <HbListView>
#include <HbMessageBox>
#include <HbAction>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // hbactivitymanager
// User includes
#include "notesviewmanager.h"
@@ -59,13 +61,41 @@
mAgendaUtil = mAppControllerIf.agendaUtil();
+ // Check the Application Startup reason from Activity Manager
+ int activityReason = qobject_cast<HbApplication*>(qApp)->activateReason();
+
+ if (Hb::ActivationReasonActivity == activityReason) // Check if application is started
+ // from an application
+ {
+ // Application is started from an activity
+ // extract activity data
+ QVariant data = qobject_cast<HbApplication*>(qApp)->activateData();
+ // Restore state from activity data
+ QByteArray serializedModel = data.toByteArray();
+ QDataStream stream(&serializedModel, QIODevice::ReadOnly);
+ int viewId;
+ stream >> viewId; // read stream into an int
+
+ if (NotesNamespace::NotesMainViewId == viewId) // Check if viewId is main view
+ {
+ // Load MainView
+ loadNotesMainView();
+ }
+ else if (NotesNamespace::NotesCollectionViewId == viewId) // Check if the viewId is collective view
+ {
+ //no implementation yet, UI Specs not available
+ }
+ }
+ else // application started by either service framework or normally
+ {
+ // Load the main view at the start up.
+ loadNotesMainView();
+ }
+
connect(
mAgendaUtil, SIGNAL(instanceViewCreationCompleted(int)),
this,SLOT(handleInstanceViewCreationCompleted(int)));
- // Load the main view at the start up.
- loadNotesMainView();
-
// Delay loading of other views till main view is loaded.
connect(
window, SIGNAL(viewReady()),
@@ -94,27 +124,59 @@
window->removeView(window->currentView());
window->addView(mMainView);
window->setCurrentView(mMainView);
+ mMainView->captureScreenShot(false);
break;
case NotesNamespace::NotesCollectionViewId:
+ if (mMainView)
+ {
+ if (mMainView == window->currentView())
+ {
+ mMainView->captureScreenShot(true);
+ }
+ }
window->removeView(window->currentView());
window->addView(mCollectionView);
window->setCurrentView(mCollectionView);
break;
case NotesNamespace::NotesTodoViewId:
+ if (mMainView)
+ {
+ if (mMainView == window->currentView())
+ {
+ mMainView->captureScreenShot(true);
+ }
+ }
+
window->removeView(window->currentView());
window->addView(mTodoView);
window->setCurrentView(mTodoView);
break;
case NotesNamespace::NotesFavoritesViewId:
+ if (mMainView)
+ {
+ if (mMainView == window->currentView())
+ {
+ mMainView->captureScreenShot(true);
+ }
+ }
+
window->removeView(window->currentView());
window->addView(mFavoriteView);
window->setCurrentView(mFavoriteView);
break;
case NotesNamespace::NotesNoteViewId:
+ if (mMainView)
+ {
+ if (mMainView == window->currentView())
+ {
+ mMainView->captureScreenShot(true);
+ }
+ }
+
window->removeView(window->currentView());
window->addView(mNoteView);
window->setCurrentView(mNoteView);
@@ -341,5 +403,11 @@
// Update the title for to-do view.
mTodoView->updateTitle();
+
+ // Update the plain notes view.
+ mNoteView->updateNoteView();
+
+ // Update the favorites view.
+ mFavoriteView->updateFavoriteView();
}
// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesviews/bwins/notesviewsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,24 @@
+EXPORTS
+ ??1NotesFavoriteView@@UAE@XZ @ 1 NONAME ; NotesFavoriteView::~NotesFavoriteView(void)
+ ??0NotesNoteView@@QAE@PAVQGraphicsWidget@@@Z @ 2 NONAME ; NotesNoteView::NotesNoteView(class QGraphicsWidget *)
+ ??0NotesTodoView@@QAE@PAVQGraphicsWidget@@@Z @ 3 NONAME ; NotesTodoView::NotesTodoView(class QGraphicsWidget *)
+ ?updateTitle@NotesMainView@@QAEXXZ @ 4 NONAME ; void NotesMainView::updateTitle(void)
+ ??0NotesMainView@@QAE@PAVQGraphicsWidget@@@Z @ 5 NONAME ; NotesMainView::NotesMainView(class QGraphicsWidget *)
+ ?setupAfterViewReady@NotesMainView@@QAEXXZ @ 6 NONAME ; void NotesMainView::setupAfterViewReady(void)
+ ?setupView@NotesNoteView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 7 NONAME ; void NotesNoteView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
+ ?setupView@NotesTodoView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 8 NONAME ; void NotesTodoView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
+ ??0NotesCollectionView@@QAE@PAVQGraphicsWidget@@@Z @ 9 NONAME ; NotesCollectionView::NotesCollectionView(class QGraphicsWidget *)
+ ?populateListView@NotesCollectionView@@QAEXXZ @ 10 NONAME ; void NotesCollectionView::populateListView(void)
+ ??1NotesCollectionView@@UAE@XZ @ 11 NONAME ; NotesCollectionView::~NotesCollectionView(void)
+ ?updateTitle@NotesTodoView@@QAEXXZ @ 12 NONAME ; void NotesTodoView::updateTitle(void)
+ ?setupView@NotesCollectionView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 13 NONAME ; void NotesCollectionView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
+ ??0NotesFavoriteView@@QAE@PAVQGraphicsWidget@@@Z @ 14 NONAME ; NotesFavoriteView::NotesFavoriteView(class QGraphicsWidget *)
+ ??1NotesMainView@@UAE@XZ @ 15 NONAME ; NotesMainView::~NotesMainView(void)
+ ?setupView@NotesMainView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 16 NONAME ; void NotesMainView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
+ ??1NotesNoteView@@UAE@XZ @ 17 NONAME ; NotesNoteView::~NotesNoteView(void)
+ ??1NotesTodoView@@UAE@XZ @ 18 NONAME ; NotesTodoView::~NotesTodoView(void)
+ ?setupView@NotesFavoriteView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 19 NONAME ; void NotesFavoriteView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
+ ?captureScreenShot@NotesMainView@@QAEX_N@Z @ 20 NONAME ; void NotesMainView::captureScreenShot(bool)
+ ?updateFavoriteView@NotesFavoriteView@@QAEXXZ @ 21 NONAME ; void NotesFavoriteView::updateFavoriteView(void)
+ ?updateNoteView@NotesNoteView@@QAEXXZ @ 22 NONAME ; void NotesNoteView::updateNoteView(void)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesviews/eabi/notesviewsu.def Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,59 @@
+EXPORTS
+ _ZN13NotesMainView11updateTitleEv @ 1 NONAME
+ _ZN13NotesMainView19setupAfterViewReadyEv @ 2 NONAME
+ _ZN13NotesMainView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 3 NONAME
+ _ZN13NotesMainViewC1EP15QGraphicsWidget @ 4 NONAME
+ _ZN13NotesMainViewC2EP15QGraphicsWidget @ 5 NONAME
+ _ZN13NotesMainViewD0Ev @ 6 NONAME
+ _ZN13NotesMainViewD1Ev @ 7 NONAME
+ _ZN13NotesMainViewD2Ev @ 8 NONAME
+ _ZN13NotesNoteView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 9 NONAME
+ _ZN13NotesNoteViewC1EP15QGraphicsWidget @ 10 NONAME
+ _ZN13NotesNoteViewC2EP15QGraphicsWidget @ 11 NONAME
+ _ZN13NotesNoteViewD0Ev @ 12 NONAME
+ _ZN13NotesNoteViewD1Ev @ 13 NONAME
+ _ZN13NotesNoteViewD2Ev @ 14 NONAME
+ _ZN13NotesTodoView11updateTitleEv @ 15 NONAME
+ _ZN13NotesTodoView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 16 NONAME
+ _ZN13NotesTodoViewC1EP15QGraphicsWidget @ 17 NONAME
+ _ZN13NotesTodoViewC2EP15QGraphicsWidget @ 18 NONAME
+ _ZN13NotesTodoViewD0Ev @ 19 NONAME
+ _ZN13NotesTodoViewD1Ev @ 20 NONAME
+ _ZN13NotesTodoViewD2Ev @ 21 NONAME
+ _ZN17NotesFavoriteView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 22 NONAME
+ _ZN17NotesFavoriteViewC1EP15QGraphicsWidget @ 23 NONAME
+ _ZN17NotesFavoriteViewC2EP15QGraphicsWidget @ 24 NONAME
+ _ZN17NotesFavoriteViewD0Ev @ 25 NONAME
+ _ZN17NotesFavoriteViewD1Ev @ 26 NONAME
+ _ZN17NotesFavoriteViewD2Ev @ 27 NONAME
+ _ZN19NotesCollectionView16populateListViewEv @ 28 NONAME
+ _ZN19NotesCollectionView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 29 NONAME
+ _ZN19NotesCollectionViewC1EP15QGraphicsWidget @ 30 NONAME
+ _ZN19NotesCollectionViewC2EP15QGraphicsWidget @ 31 NONAME
+ _ZN19NotesCollectionViewD0Ev @ 32 NONAME
+ _ZN19NotesCollectionViewD1Ev @ 33 NONAME
+ _ZN19NotesCollectionViewD2Ev @ 34 NONAME
+ _ZThn16_N13NotesMainViewD0Ev @ 35 NONAME
+ _ZThn16_N13NotesMainViewD1Ev @ 36 NONAME
+ _ZThn16_N13NotesNoteViewD0Ev @ 37 NONAME
+ _ZThn16_N13NotesNoteViewD1Ev @ 38 NONAME
+ _ZThn16_N13NotesTodoViewD0Ev @ 39 NONAME
+ _ZThn16_N13NotesTodoViewD1Ev @ 40 NONAME
+ _ZThn16_N17NotesFavoriteViewD0Ev @ 41 NONAME
+ _ZThn16_N17NotesFavoriteViewD1Ev @ 42 NONAME
+ _ZThn16_N19NotesCollectionViewD0Ev @ 43 NONAME
+ _ZThn16_N19NotesCollectionViewD1Ev @ 44 NONAME
+ _ZThn8_N13NotesMainViewD0Ev @ 45 NONAME
+ _ZThn8_N13NotesMainViewD1Ev @ 46 NONAME
+ _ZThn8_N13NotesNoteViewD0Ev @ 47 NONAME
+ _ZThn8_N13NotesNoteViewD1Ev @ 48 NONAME
+ _ZThn8_N13NotesTodoViewD0Ev @ 49 NONAME
+ _ZThn8_N13NotesTodoViewD1Ev @ 50 NONAME
+ _ZThn8_N17NotesFavoriteViewD0Ev @ 51 NONAME
+ _ZThn8_N17NotesFavoriteViewD1Ev @ 52 NONAME
+ _ZThn8_N19NotesCollectionViewD0Ev @ 53 NONAME
+ _ZThn8_N19NotesCollectionViewD1Ev @ 54 NONAME
+ _ZN13NotesMainView17captureScreenShotEb @ 55 NONAME
+ _ZN13NotesNoteView14updateNoteViewEv @ 56 NONAME
+ _ZN17NotesFavoriteView18updateFavoriteViewEv @ 57 NONAME
+
--- a/notes/notesui/notesviews/inc/notesfavoriteview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/inc/notesfavoriteview.h Thu Jul 22 16:32:51 2010 +0100
@@ -32,6 +32,7 @@
class HbListView;
class HbAction;
class HbAbstractViewItem;
+class HbLabel;
class NotesModel;
class NotesDocLoader;
class AgendaUtil;
@@ -49,6 +50,7 @@
public:
NOTESVIEWS_EXPORT void setupView(
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
+ NOTESVIEWS_EXPORT void updateFavoriteView();
signals:
void deleteEntry(ulong entryId);
@@ -69,7 +71,8 @@
void openNote();
void selectedMenuAction(HbAction *action);
void handleMenuClosed();
-
+ void updateView(ulong id=0);
+
private:
HbListView *mListView;
HbAbstractViewItem *mSelectedItem;
@@ -81,7 +84,9 @@
HbAction *mRemoveFavoriteAction;
HbAction *mMarkTodoAction;
HbAction *mOpenAction;
-
+
+ HbLabel *mEmptyListLabel;
+
AgendaUtil *mAgendaUtil;
NotesAppControllerIf *mAppControllerIf;
--- a/notes/notesui/notesviews/inc/notesmainview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/inc/notesmainview.h Thu Jul 22 16:32:51 2010 +0100
@@ -55,6 +55,7 @@
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
NOTESVIEWS_EXPORT void setupAfterViewReady();
NOTESVIEWS_EXPORT void updateTitle();
+ NOTESVIEWS_EXPORT void captureScreenShot(bool captureScreenShot = false);
signals:
void deleteEntry(ulong entryId);
@@ -79,7 +80,8 @@
void openNote();
void selectedMenuAction(HbAction *action);
void handleMenuClosed();
-
+ void saveActivity();
+
private:
HbListView *mListView;
HbAbstractViewItem *mSelectedItem;
@@ -98,6 +100,7 @@
HbAction *mOpenAction;
HbGroupBox *mSubTitle;
+ HbLabel *mEmptyListLabel;
AgendaUtil *mAgendaUtil;
@@ -107,7 +110,9 @@
NotesSortFilterProxyModel *mProxyModel;
NotesEditor *mNotesEditor;
AgendaEventViewer *mAgendaEventViewer;
- bool mIsLongTop;
+ bool mIsLongTop;
+ bool mIsScreenShotCapruted; // check if the screenshot captured is valid
+ QVariantHash mScreenShot; // screenshot
};
#endif // NOTESMAINVIEW_H
--- a/notes/notesui/notesviews/inc/notesnoteview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/inc/notesnoteview.h Thu Jul 22 16:32:51 2010 +0100
@@ -32,6 +32,7 @@
class HbListView;
class HbAction;
class HbAbstractViewItem;
+class HbLabel;
class NotesModel;
class NotesDocLoader;
class AgendaUtil;
@@ -49,6 +50,8 @@
public:
NOTESVIEWS_EXPORT void setupView(
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
+ NOTESVIEWS_EXPORT void updateNoteView();
+
signals:
void deleteEntry(ulong entryId);
@@ -69,6 +72,7 @@
void openNote();
void selectedMenuAction(HbAction *action);
void handleMenuClosed();
+ void updateView(ulong id=0);
private:
HbListView *mListView;
@@ -83,6 +87,8 @@
HbAction *mMarkTodoAction;
HbAction *mOpenAction;
+ HbLabel *mEmptyListLabel;
+
AgendaUtil *mAgendaUtil;
NotesAppControllerIf *mAppControllerIf;
--- a/notes/notesui/notesviews/inc/notestodoview.h Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/inc/notestodoview.h Thu Jul 22 16:32:51 2010 +0100
@@ -32,6 +32,7 @@
class HbAction;
class HbAbstractViewItem;
class HbGroupBox;
+class HbLabel;
class NotesModel;
class NotesDocLoader;
class AgendaUtil;
@@ -88,7 +89,8 @@
HbAction *mOpenAction;
HbGroupBox *mSubTitle;
-
+ HbLabel *mEmptyListLabel;
+
AgendaUtil *mAgendaUtil;
NotesAppControllerIf *mAppControllerIf;
--- a/notes/notesui/notesviews/inc/notesviewsdefines.h Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/inc/notesviewsdefines.h Thu Jul 22 16:32:51 2010 +0100
@@ -27,6 +27,7 @@
# define NOTESVIEWS_EXPORT Q_DECL_IMPORT
#endif
+const QString notes = "NotesAllList"; // Activity Id to be stored in Activity Manager DB
#endif // NOTESVIEWSDEFINES_H
// End of file --Don't remove this.
--- a/notes/notesui/notesviews/src/notescollectionview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/src/notescollectionview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -252,6 +252,8 @@
// Cleanup.
mNotesEditor->deleteLater();
+
+ mAppControllerIf->switchToView(NotesNamespace::NotesMainViewId);
}
/*!
@@ -334,14 +336,18 @@
Q_UNUSED(index)
Q_UNUSED(start)
Q_UNUSED(end)
-
- // Update the count of notes in the view.
- QString countString(hbTrId("txt_notes_list_note_count"));
- QModelIndex mdlIndex = mListView->model()->index(1, 0);
- QStringList favStringList;
- favStringList.append(hbTrId("txt_notes_list_favorites"));
- favStringList.append(countString.arg(mFavouriteModel->rowCount()));
- mListView->model()->setData(mdlIndex, favStringList, Qt::DisplayRole);
+
+ // Check model is set for mListView before update
+ if( mListView->model())
+ {
+ // Update the count of notes in the view.
+ QString countString(hbTrId("txt_notes_list_note_count"));
+ QModelIndex mdlIndex = mListView->model()->index(1, 0);
+ QStringList favStringList;
+ favStringList.append(hbTrId("txt_notes_list_favorites"));
+ favStringList.append(countString.arg(mFavouriteModel->rowCount()));
+ mListView->model()->setData(mdlIndex, favStringList, Qt::DisplayRole);
+ }
}
/*!
--- a/notes/notesui/notesviews/src/notesfavoriteview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/src/notesfavoriteview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -118,6 +118,10 @@
this,
SLOT(handleItemLongPressed(HbAbstractViewItem *, const QPointF &)));
+ // Get the empty list label.
+ mEmptyListLabel = static_cast<HbLabel *> (
+ mDocLoader->findWidget("emptyListLabel"));
+
// Get the toolbar/menu actions.
mAddNoteAction = static_cast<HbAction *> (
mDocLoader->findObject("newNoteAction"));
@@ -133,8 +137,7 @@
mViewCollectionAction = static_cast<HbAction *> (
mDocLoader->findObject("displayCollectionsAction"));
- mViewCollectionAction->setCheckable(true);
- mViewCollectionAction->setChecked(true);
+
connect(
mViewCollectionAction, SIGNAL(changed()),
this, SLOT(handleActionStateChanged()));
@@ -149,11 +152,29 @@
window, SIGNAL(orientationChanged(Qt::Orientation)),
this, SLOT(handleOrientationChanged(Qt::Orientation)));
+ connect(
+ mAgendaUtil, SIGNAL(entryAdded(ulong)),
+ this,SLOT(updateView(ulong)));
+ connect(
+ mAgendaUtil, SIGNAL(entryDeleted(ulong)),
+ this,SLOT(updateView(ulong)));
+ connect(
+ mAgendaUtil, SIGNAL(entryUpdated(ulong)),
+ this, SLOT(updateView(ulong)));
+
// Set the graphics size for the icons.
HbListViewItem *prototype = mListView->listItemPrototype();
prototype->setGraphicsSize(HbListViewItem::SmallIcon);
}
+/*
+ Updates the favorite view either to show notes or emptyListLabel.
+ */
+void NotesFavoriteView::updateFavoriteView()
+{
+ updateView();
+}
+
/*!
Slot which gets called when `+ New note' action is triggered from the view
toolbar. This is responsible for launching the editor to create a new note.
@@ -458,5 +479,23 @@
{
mIsLongTop = false;
}
+
+/*!
+ Handles the visibility of empty list label.
+ */
+void NotesFavoriteView::updateView(ulong id)
+{
+ Q_UNUSED(id)
+
+ // Get the numbers of favorite notes.
+ if (0 >= mListView->model()->rowCount()) {
+ mEmptyListLabel->show();
+ mListView->hide();
+ } else {
+ mEmptyListLabel->hide();
+ mListView->show();
+ }
+}
+
// End of file --Don't remove this.
--- a/notes/notesui/notesviews/src/notesmainview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/src/notesmainview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -30,6 +30,8 @@
#include <HbAbstractItemView>
#include <HbGroupBox>
#include <HbListViewItem>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // hbactivitymanager
// User includes
#include "agendaeventviewer.h"
@@ -40,6 +42,7 @@
#include "notesmodel.h"
#include "notessortfilterproxymodel.h"
#include "noteseditor.h"
+#include "notescommon.h" // NotesNamespace
/*!
\class NotesMainView
@@ -58,7 +61,8 @@
:HbView(parent),
mSelectedItem(0),
mDeleteAction(0),
- mIsLongTop(false)
+ mIsLongTop(false),
+ mIsScreenShotCapruted(false)
{
// Nothing yet.
}
@@ -122,10 +126,12 @@
mNotesModel, SIGNAL(rowAdded(QModelIndex)),
this, SLOT(scrollTo(QModelIndex)));
+ // Get the empty list label.
+ mEmptyListLabel = static_cast<HbLabel *> (
+ mDocLoader->findWidget("emptyListLabel"));
+ mEmptyListLabel->hide();
+
// Get the view heading label
-/* mViewHeading = static_cast<HbLabel *> (
- mDocLoader->findWidget("viewHeading"));*/
-
mSubTitle = static_cast<HbGroupBox *>(
mDocLoader->findWidget("viewHeading"));
@@ -139,7 +145,19 @@
// Set the graphics size for the icons.
HbListViewItem *prototype = mListView->listItemPrototype();
prototype->setGraphicsSize(HbListViewItem::SmallIcon);
-}
+
+ // Get a pointer to activity Manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ // clean up any previous versions of this activity from the activity manager.
+ // ignore return value as the first boot would always return a false
+ // bool declared on for debugging purpose
+ bool ok = activityManager->removeActivity(notes);
+
+ // connect main view for the first time to recieve aboutToQuit signal
+ connect(qobject_cast<HbApplication*>(qApp), SIGNAL(aboutToQuit()), this, SLOT(saveActivity()));
+
+ }
void NotesMainView::setupAfterViewReady()
{
@@ -209,6 +227,9 @@
mNotesEditor, SIGNAL(editingCompleted(bool)),
this, SLOT(handleEditingCompleted(bool)));
mNotesEditor->create(NotesEditor::CreateNote);
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor
+ captureScreenShot(true);
}
/*!
@@ -263,6 +284,9 @@
// Launch the notes editor with the obtained info.
mNotesEditor->edit(entry);
}
+ // capture screenshot for future use, if application
+ // is exited/Quit from eventViewer/notesEditor
+ captureScreenShot(true);
}
}
@@ -408,7 +432,9 @@
// Cleanup.
mNotesEditor->deleteLater();
-
+ // set captured screenshot as invalid as the control is returned back
+ // to the main view
+ captureScreenShot(false);
}
/*!
@@ -416,7 +442,8 @@
*/
void NotesMainView::displayCollectionView()
{
-
+ // no need to capture the screen shot for future use as
+ // NotesViewManager::switchToView takes care of it
// Switch to collections view.
mAppControllerIf->switchToView(NotesNamespace::NotesCollectionViewId);
@@ -440,6 +467,9 @@
void NotesMainView::handleViewingCompleted()
{
mAgendaEventViewer->deleteLater();
+ // set captured screenshot as invalid as the control is returned back
+ // to the main view
+ captureScreenShot(false);
}
/*!
@@ -476,6 +506,9 @@
// Launch the to-do editor with the obtained info.
mNotesEditor->edit(todoId);
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor
+ captureScreenShot(true);
}
@@ -509,7 +542,15 @@
(AgendaUtil::IncludeNotes
| AgendaUtil::IncludeCompletedTodos
| AgendaUtil::IncludeIncompletedTodos));
- int c= entries.count();
+
+ if (0 >= entries.count()) {
+ mEmptyListLabel->show();
+ mListView->hide();
+ } else {
+ mEmptyListLabel->hide();
+ mListView->show();
+ }
+
mSubTitle->setHeading(
hbTrId("txt_notes_subhead_ln_notes",entries.count()));
}
@@ -600,6 +641,9 @@
mAgendaEventViewer->view(
entry, AgendaEventViewer::ActionEditDelete);
}
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor/eventViewer
+ captureScreenShot(true);
}
/*!
@@ -630,4 +674,44 @@
mIsLongTop = false;
}
+/*!
+ CaptureScreenShot captures screen shot
+ \param captureScreenShot bool to indicate if screenshot needs to be captured
+*/
+void NotesMainView::captureScreenShot(bool captureScreenShot)
+ {
+ if (captureScreenShot) // check if screen shot needs to be captured
+ {
+ mScreenShot.clear();
+ mScreenShot.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+ mIsScreenShotCapruted = captureScreenShot; // set mIsScreenShotCapruted set validity of screenshot
+ }
+
+/*!
+ saveActivity saves main view as an activity
+*/
+void NotesMainView::saveActivity()
+ {
+ // Get a pointer to activity Manager
+ HbActivityManager* activityManager = qobject_cast<HbApplication*>(qApp)->activityManager();
+
+ if (!mIsScreenShotCapruted) // check if a valid screenshot is already captured
+ {
+ mScreenShot.clear();
+ mScreenShot.insert("screenshot", QPixmap::grabWidget(mainWindow(), mainWindow()->rect()));
+ }
+
+ // save any data necessary to save the state
+ QByteArray serializedActivity;
+ QDataStream stream(&serializedActivity, QIODevice::WriteOnly | QIODevice::Append);
+ stream << NotesNamespace::NotesMainViewId;
+
+ // add the activity to the activity manager
+ bool ok = activityManager->addActivity(notes, serializedActivity, mScreenShot);
+ if ( !ok )
+ {
+ qFatal("Add failed" );
+ }
+ }
// End of file --Don't remove this.
--- a/notes/notesui/notesviews/src/notesnoteview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/src/notesnoteview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -27,6 +27,7 @@
#include <HbListViewItem>
#include <HbInstance>
#include <HbNotificationDialog>
+#include <HbLabel>
// User includes
#include "notesnoteview.h"
@@ -99,8 +100,9 @@
subModel->setSourceModel(mProxyModel);
// Get the list object from the document and update the model.
- mListView = static_cast<HbListView *>
- (mDocLoader->findWidget("noteListView"));
+ mListView = static_cast<HbListView *> (
+ mDocLoader->findWidget("noteListView"));
+
// Update the list view model.
mListView->setModel(subModel);
// Setup the operations that can be done with a list view.
@@ -113,6 +115,10 @@
this,
SLOT(handleItemLongPressed(HbAbstractViewItem *, const QPointF &)));
+ // Get the empty list label.
+ mEmptyListLabel = static_cast<HbLabel *> (
+ mDocLoader->findWidget("emptyListLabel"));
+
// Get the toolbar/menu actions.
mAddNoteAction = static_cast<HbAction *> (
mDocLoader->findObject("newNoteAction"));
@@ -128,8 +134,7 @@
mViewCollectionAction = static_cast<HbAction *> (
mDocLoader->findObject("displayCollectionsAction"));
- mViewCollectionAction->setCheckable(true);
- mViewCollectionAction->setChecked(true);
+
connect(
mViewCollectionAction, SIGNAL(changed()),
this, SLOT(handleActionStateChanged()));
@@ -144,11 +149,31 @@
window, SIGNAL(orientationChanged(Qt::Orientation)),
this, SLOT(handleOrientationChanged(Qt::Orientation)));
+
+ connect(
+ mAgendaUtil, SIGNAL(entryAdded(ulong)),
+ this,SLOT(updateView(ulong)));
+ connect(
+ mAgendaUtil, SIGNAL(entryDeleted(ulong)),
+ this,SLOT(updateView(ulong)));
+ connect(
+ mAgendaUtil, SIGNAL(entryUpdated(ulong)),
+ this, SLOT(updateView(ulong)));
+
+
// Set the graphics size for the icons.
HbListViewItem *prototype = mListView->listItemPrototype();
prototype->setGraphicsSize(HbListViewItem::SmallIcon);
}
+/*
+ Updates the note view either to show notes or emptyListLabel.
+ */
+void NotesNoteView::updateNoteView()
+{
+ updateView();
+}
+
/*!
Opens the note editor to create a new note.
*/
@@ -457,5 +482,23 @@
{
mIsLongTop = false;
}
+
+/*!
+ Handles the visibility of empty list label.
+ */
+void NotesNoteView::updateView(ulong id)
+{
+ Q_UNUSED(id)
+
+ // Get the numbers of notes.
+ if (0 >= mListView->model()->rowCount()) {
+ mEmptyListLabel->show();
+ mListView->hide();
+ } else {
+ mEmptyListLabel->hide();
+ mListView->show();
+ }
+}
+
// End of file --Don't remove this.
--- a/notes/notesui/notesviews/src/notestodoview.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/notesui/notesviews/src/notestodoview.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -115,7 +115,11 @@
SIGNAL(longPressed(HbAbstractViewItem *, const QPointF &)),
this,
SLOT(handleItemLongPressed(HbAbstractViewItem *, const QPointF &)));
-
+
+ // Get the empty list string.
+ mEmptyListLabel = static_cast<HbLabel *> (
+ mDocLoader->findWidget("emptyListLabel"));
+
// Get the toolbar/menu actions.
mAddTodoAction = static_cast<HbAction *> (
mDocLoader->findObject("newTodoAction"));
@@ -131,8 +135,7 @@
mViewCollectionAction = static_cast<HbAction *> (
mDocLoader->findObject("displayCollectionsAction"));
- mViewCollectionAction->setCheckable(true);
- mViewCollectionAction->setChecked(true);
+
connect(
mViewCollectionAction, SIGNAL(changed()),
this, SLOT(handleActionStateChanged()));
@@ -439,6 +442,14 @@
AgendaUtil::IncludeIncompletedTodos);
mSubTitle->setHeading(
hbTrId("txt_notes_subhead_todos_ln_pending",entries.count()));
+
+ if (0 >= entries.count()) {
+ mEmptyListLabel->show();
+ mListView->hide();
+ } else {
+ mEmptyListLabel->hide();
+ mListView->show();
+ }
}
/*
--- a/notes/rom/notes.iby Tue Jun 15 15:22:54 2010 +0100
+++ b/notes/rom/notes.iby Thu Jul 22 16:32:51 2010 +0100
@@ -12,7 +12,7 @@
* Contributors:
*
* Description:
- * The iby file for agendainterface component
+ * The iby file for Notes component
*
*/
@@ -22,6 +22,10 @@
S60_APP_EXE(notes)
data=DATAZ_\private\10003a3f\import\apps\notes_reg.rsc \private\10003a3f\import\apps\notes_reg.rsc
+data=\epoc32\data\z\resource\qt\plugins\notes\noteseditorplugin.qtplugin resource\qt\plugins\notes\noteseditorplugin.qtplugin
+
+// Stub sis
+data=DATAZ_\system\install\notes_stub.sis \System\Install\notes_stub.sis
file=ABI_DIR\BUILD_DIR\notesmodel.dll SHARED_LIB_DIR\notesmodel.dll
file=ABI_DIR\BUILD_DIR\noteseditor.dll SHARED_LIB_DIR\noteseditor.dll
@@ -29,6 +33,7 @@
file=ABI_DIR\BUILD_DIR\notesviewmanager.dll SHARED_LIB_DIR\notesviewmanager.dll
file=ABI_DIR\BUILD_DIR\notesappcontroller.dll SHARED_LIB_DIR\notesappcontroller.dll
file=ABI_DIR\BUILD_DIR\notesmodelhandler.dll SHARED_LIB_DIR\notesmodelhandler.dll
+file=ABI_DIR\BUILD_DIR\noteseditorplugin.dll SHARED_LIB_DIR\noteseditorplugin.dll
#endif // NOTES_IBY
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/sis/createandsign.bat Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,22 @@
+rem
+rem Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+rem All rights reserved.
+rem This component and the accompanying materials are made available
+rem under the terms of "Eclipse Public License v1.0"
+rem which accompanies this distribution, and is available
+rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
+rem
+rem Initial Contributors:
+rem Nokia Corporation - initial contribution.
+rem
+rem Contributors:
+rem
+rem Description: Bat file to create Notes Application's sisx.
+rem
+
+@echo -------- Create sis packages ---------
+makesis notes.pkg
+
+@echo -------- Sign and rename sis packages -----------
+signsis notes.sis notes.sisx Nokia_RnDCert_02.der Nokia_RnDCert_02.key
+
Binary file notes/sis/nokia_rndcert_02.der has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/sis/nokia_rndcert_02.key Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,15 @@
+-----BEGIN RSA PRIVATE KEY-----
+MIICXQIBAAKBgQC/TDP7KKIaf5+uW4OD2iVZuUMC2a+SeQTjf6srlKcOm+CpPNXn
+uLNm/8fdEnyOIuRXPRKmqhs1n0JkxEGHynELWMTuKXbQx9SRAGUXzyneGn+IJNnO
+vOKHWgKCouX2hfI8rtkdqJpqmO460gGsMgw+lsbeyWyW9lnfLxq+ZC7sqQIDAQAB
+AoGBALmUWZE8GBaQ3P4u9WUCSd3DJkkrmXIFSULSZeH/chlwCwDjbbhArHothVzo
+REE3hEFFlERvHbplZ+mNouzy7boduvgUzbksGrbGMLJ2qO1GzWWVwV+GzOWKd3ss
+/98Gwoy5R8pjnkqUE2wP1iJFw0FjvUTKcYv/z6t3LLJ0CsoBAkEA+c7ixvsviQ3J
+s0INytCKU2bf8fqFQJi1VI82ukxNsujGTQ9upVSjuvqPvWyDvvTdrUBHqO+3qPut
+sEh01Q8aiQJBAMQKDJPVRu4ud3mwUfEavzL5EjqwG1k9VCNGYsT4FwtrHcxu1oP/
+pk6M3rIZukqomoEEnHWPMwhrK3fhBqi0OSECQQDr40VXege4FnH5OI2Hj4afHMyp
+VdQQXGMWFyopnzXblFz0lXb43cTCIiorR9XcMqNFHybLypkWE5o+lRzlt55pAkBQ
+P/zeF5Sts//cpL0mgdh7OVKpC6ZmZaCnwAx2rUhhuDu+kDDoYCLoTOps5fNI1LRK
+1GRoC3LMo3Jr5IYhUYWBAkBpCpN6k4JU/mszq98EojHerQNxk8sPqvQKUzTutohT
+1gLX9yepGayB/TtT2EEJDkWOlnTy/dvN6W3vzbJYz97x
+-----END RSA PRIVATE KEY-----
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/sis/notes.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,49 @@
+;
+; Copyright (c) 2009 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: pkg file of Notes Application for IAD.
+;
+
+; Language
+&EN
+
+; standard SIS file header
+#{"Notes"}, (0x20029F80), 1, 0, 0, TYPE=SA, RU
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
+
+
+; Notes executable and default resource files
+
+"/epoc32/release/armv5/urel/notes.exe" - "!:/sys/bin/notes.exe"
+"/epoc32/data/Z/private/10003a3f/import/apps/notes_reg.rsc" - "!:/private/10003a3f/import/apps/notes_reg.rsc"
+"/epoc32/data/z/resource/apps/notes.rsc" - "!:/resource/apps/notes.rsc"
+"/epoc32/data/z/resource/qt/translations/notes_en.qm" - "!:/resource/qt/translations/notes_en.qm"
+
+
+"/epoc32/release/armv5/urel/notesmodel.dll" - "!:/sys/bin/notesmodel.dll"
+"/epoc32/release/armv5/urel/noteseditor.dll" - "!:/sys/bin/noteseditor.dll"
+"/epoc32/release/armv5/urel/notesviews.dll" - "!:/sys/bin/notesviews.dll"
+"/epoc32/release/armv5/urel/notesviewmanager.dll" - "!:/sys/bin/notesviewmanager.dll"
+"/epoc32/release/armv5/urel/notesappcontroller.dll" - "!:/sys/bin/notesappcontroller.dll"
+"/epoc32/release/armv5/urel/notesmodelhandler.dll" - "!:/sys/bin/notesmodelhandler.dll"
+
+;Qt plugin files to be installed
+"/epoc32/release/armv5/urel/noteseditorplugin.dll" - "!:/sys/bin/noteseditorplugin.dll"
+"/epoc32/data/z/resource/qt/plugins/notes/noteseditorplugin.qtplugin" - "!:/resource/qt/plugins/notes/noteseditorplugin.qtplugin"
+
+;END OF FILE
--- a/notes/siscreate.bat Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,20 +0,0 @@
-@rem
-@rem Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
-@rem All rights reserved.
-@rem This component and the accompanying materials are made available
-@rem under the terms of "Eclipse Public License v1.0"
-@rem which accompanies this distribution, and is available
-@rem at the URL "http://www.eclipse.org/legal/epl-v10.html".
-@rem
-@rem Initial Contributors:
-@rem Nokia Corporation - initial contribution.
-@rem
-@rem Contributors:
-@rem
-@rem Description:
-@rem
-
-cd notesui\notesapplication
-call makesis notesapplication_armv5_urel.pkg
-call signsis notesapplication_armv5_urel.sis notes.sisx rndcert.der rndcert.key
-cd ..\..
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/stubsis/notes_stub.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+;
+; Copyright (c) 2009 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: pkg file of Notes Application for IAD.
+;
+
+; Language
+&EN
+
+; Header
+#{"Notes"}, (0x20029F80), 1, 0, 0, TYPE=SA
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
\ No newline at end of file
Binary file notes/stubsis/notes_stub.sis has changed
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/rom/unit_notes.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,28 @@
+/*
+* Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "Symbian Foundation License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:
+* The iby file for notes application unit tests.
+*
+*/
+
+#ifndef UNIT_NOTES_IBY
+#define UNIT_NOTES_IBY
+
+S60_APP_EXE(utnotesmodel)
+S60_APP_RESOURCE(utnotesmodel)
+data=DATAZ_\private\10003a3f\import\apps\utnotesmodel_reg.rsc \private\10003a3f\import\apps\utnotesmodel_reg.rsc
+
+#endif // UNIT_NOTES_IBY
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/rom/unit_noteseditor.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 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:
+* The iby file for noteseditor unit tests.
+*
+*/
+
+#ifndef UNIT_NOTESEDITOR_IBY
+#define UNIT_NOTESEDITOR_IBY
+
+S60_APP_EXE(utnoteseditor)
+S60_APP_RESOURCE(utnoteseditor)
+
+data=DATAZ_\private\10003a3f\import\apps\utnoteseditor_reg.rsc \private\10003a3f\import\apps\utnoteseditor_reg.rsc
+
+#endif // UNIT_NOTESEDITOR_IBY
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,32 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Symbian Foundation License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# This is the project specification file notes test code
+#
+
+TEMPLATE = subdirs
+SUBDIRS += \
+ unittest_notesmodel \
+ unittest_noteseditor
+CONFIG += qtestlib
+CONFIG += symbian_test
+CONFIG += ordered
+
+symbian: {
+ BLD_INF_RULES.prj_testexports += \
+ "./rom/unit_notes.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_notes.iby)" \
+ "./rom/unit_noteseditor.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_noteseditor.iby)"
+}
+
+# End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_noteseditor/inc/unittest_noteseditor.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,64 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+#ifndef UNITTEST_NOTESEDITOR_H
+#define UNITTEST_NOTESEDITOR_H
+
+// System includes
+#include <QObject>
+
+// Forward declarations.
+class NotesEditor;
+
+class TestNotesEditor : public QObject
+{
+ Q_OBJECT
+
+public:
+ TestNotesEditor();
+ virtual ~TestNotesEditor();
+
+private slots:
+ // Test case setup.
+ void init();
+ void cleanup();
+
+ // Test cases go here.
+ void testConstructionWithoutAgendaUtil();
+ void testConstructionWithAgendaUtil();
+ void testDestruction();
+ void testEditingNoteWithText();
+ void testEditingNoteWithFileHandle();
+ void testEditingNoteWithAgendaEntry();
+ void testEditingNoteWithId();
+ void testEditingTodoWithFileHandle();
+ void testEditingTodoWithAgendaEntry();
+ void testEditingTodoWithId();
+ void testCreationOfNote();
+ void testCreationofTodo();
+ void testClosingOfNotesEditorWithSave();
+ void testClosingOfNotesEditorWithoutSave();
+ void testClosingOfTodoEditorWithSave();
+ void testClosingOfTodoEditorWithoutSave();
+
+private:
+ NotesEditor *mEditor;
+};
+
+#endif // UNITTEST_NOTESEDITOR_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_noteseditor/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System includes
+#include <QTest>
+#include <HbApplication>
+
+// User includes
+#include "unittest_noteseditor.h"
+
+int main(int argc, char *argv[])
+{
+ HbApplication app(argc, argv);
+ TestNotesEditor tc;
+ int ret = QTest::qExec(&tc, argc, argv);
+ // Core dump if HbIconLoader instance is not destroyed before the
+ // application instance. HbIconLoader uses QCoreApplication::aboutToQuit()
+ // signal to destroy itself. app.exec() where the signal is normally emitted
+ // is not called here. So, invoking the signal explicitly.
+ QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
+ return ret;
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_noteseditor/src/unittest_noteseditor.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,511 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System include
+#include <QtTest/QtTest>
+#include <HbMainWindow>
+#include <NotesEditor>
+#include <AgendaUtil>
+#include <AgendaEntry>
+
+// User includes
+#include "unittest_noteseditor.h"
+
+
+/*!
+ \class TestNotesEditor
+
+ Unit test clas for Notes Editor apis
+ */
+
+
+/*!
+ Constructor
+ */
+
+TestNotesEditor::TestNotesEditor()
+{
+
+}
+
+/*!
+ Destructor
+ */
+TestNotesEditor::~TestNotesEditor()
+{
+}
+
+/*!
+ Initialise before calling the test case
+ */
+void TestNotesEditor::init()
+{
+}
+
+/*!
+ Do cleanup after each test case
+ */
+void TestNotesEditor::cleanup()
+{
+}
+
+/*!
+ Test the api NotesEditor::NotesEditor()
+ */
+
+void TestNotesEditor::testConstructionWithoutAgendaUtil()
+{
+ // Create NotesEditor object
+ NotesEditor *notesEditor = new NotesEditor(this);
+ QVERIFY(notesEditor!=0);
+
+ // Cleanup
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::NotesEditor()
+ */
+void TestNotesEditor::testConstructionWithAgendaUtil()
+{
+ // Create AgendaUtil object.
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Create NotesEditor object.
+ NotesEditor *notesEditor = new NotesEditor(agendaUtil);
+
+ QVERIFY(notesEditor!=0);
+
+ // Cleanup.
+ delete notesEditor;
+ delete agendaUtil;
+}
+
+/*!
+ Test the api NotesEditor::~NotesEditor
+ */
+void TestNotesEditor::testDestruction()
+{
+ // Create NotesEditor object.
+ QPointer<NotesEditor> notesEditor = new NotesEditor();
+ delete notesEditor;
+
+ QVERIFY(!notesEditor);
+
+ // Create AgendaUtil object.
+ QPointer<AgendaUtil> agendaUtil = new AgendaUtil();
+ QPointer<NotesEditor> notesEditorWithAgendaUtil =
+ new NotesEditor(agendaUtil);
+
+ delete notesEditorWithAgendaUtil;
+ delete agendaUtil;
+
+ QVERIFY(!notesEditorWithAgendaUtil);
+}
+
+/*!
+ Test the api NotesEditor::edit(const QString &string)
+ */
+void TestNotesEditor::testEditingNoteWithText()
+{
+ HbMainWindow window;
+ window.show();
+ // Create NotesEditor object.
+ NotesEditor *notesEditor = new NotesEditor(this);
+ QVERIFY(notesEditor);
+
+ QString noteText("This is test note");
+ // Call edit using the text.
+ notesEditor->edit(QString("This is test note"));
+
+ QTest::qWait(1000);
+
+ // Call close on editor by saving the note
+ ulong id = notesEditor->close(NotesEditor::CloseWithSave);
+ QVERIFY(id);
+
+ // Create agenda Utility.
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Fetch the entry using the id
+ AgendaEntry entry = agendaUtil->fetchById(id);
+
+ int compareResult = noteText.compare(entry.description());
+ QVERIFY(!compareResult);
+
+ delete agendaUtil;
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::edit(const QFile &handle)
+ */
+void TestNotesEditor::testEditingNoteWithFileHandle()
+{
+ // Nothing yet
+}
+
+/*!
+ Test the api NotesEditor::edit(AgendaEntry entry)
+ */
+void TestNotesEditor::testEditingNoteWithAgendaEntry()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription(QString("A simple note"));
+
+ // Call edit on agenda entry
+ notesEditor->edit(entry);
+
+ QTest::qWait(1000);
+
+ ulong id = notesEditor->close(NotesEditor::CloseWithSave);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.description(), entry.description());
+
+ delete agendaUtil;
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::edit(ulong id)
+ */
+void TestNotesEditor::testEditingNoteWithId()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("A simple note");
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ notesEditor->edit(id);
+
+ QTest::qWait(1000);
+
+ ulong savedId = notesEditor->close(NotesEditor::CloseWithSave);
+
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.description(), entry.description());
+
+ delete agendaUtil;
+ delete notesEditor;
+
+}
+
+
+/*!
+ Test the api NotesEditor::edit(const QFile &handle)
+ */
+void TestNotesEditor::testEditingTodoWithFileHandle()
+{
+ // Nothing yet.
+}
+
+/*!
+ Test the api NotesEditor::edit(AgendaEntry entry)
+ */
+void TestNotesEditor::testEditingTodoWithAgendaEntry()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(QString("Buy Books"));
+ entry.setDescription(QString("@Landmarks"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ // Call edit on agenda entry
+ notesEditor->edit(entry);
+
+ QTest::qWait(3000);
+
+ ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
+
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.id(),id);
+ QCOMPARE(afterSave.type(),entry.type());
+ QCOMPARE(afterSave.summary(), entry.summary());
+ QCOMPARE(afterSave.description(), entry.description());
+
+ delete agendaUtil;
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::edit(ulong id)
+ */
+void TestNotesEditor::testEditingTodoWithId()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(QString("Buy Books"));
+ entry.setDescription(QString("@Landmarks"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ // Call edit using the id
+ notesEditor->edit(id);
+
+ QTest::qWait(3000);
+
+ ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
+
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.id(),id);
+ QCOMPARE(afterSave.type(),entry.type());
+ QCOMPARE(afterSave.summary(), entry.summary());
+ QCOMPARE(afterSave.description(), entry.description());
+
+ delete agendaUtil;
+ delete notesEditor;
+
+}
+
+/*!
+ Test the api NotesEditor::create(CreateType type)
+ */
+void TestNotesEditor::testCreationOfNote()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ notesEditor->create(NotesEditor::CreateNote);
+
+ QTest::qWait(3000);
+
+ ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
+
+ // Note is not saved since description is empty
+ // TODO use key press events here
+
+ QVERIFY(!afterSaveId);
+
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::create(CreateType type)
+ */
+void TestNotesEditor::testCreationofTodo()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ notesEditor->create(NotesEditor::CreateTodo);
+
+ // TODO
+ // Needs key interaction to edit the fields in to-do editor.
+
+ QTest::qWait(3000);
+
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+
+void TestNotesEditor::testClosingOfNotesEditorWithSave()
+{
+ HbMainWindow window;
+ window.show();
+ // Create NotesEditor object.
+ NotesEditor *notesEditor = new NotesEditor(this);
+ QVERIFY(notesEditor);
+
+ QString noteText("This is test note");
+ // Call edit using the text.
+ notesEditor->edit(QString("This is test note"));
+
+ QTest::qWait(1000);
+
+ // Call close on editor by saving the note
+ ulong id = notesEditor->close(NotesEditor::CloseWithSave);
+ QVERIFY(id);
+
+ // Create agenda Utility.
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Fetch the entry using the id
+ AgendaEntry entry = agendaUtil->fetchById(id);
+
+ QCOMPARE(noteText,entry.description());
+
+ delete agendaUtil;
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+void TestNotesEditor::testClosingOfNotesEditorWithoutSave()
+{
+ HbMainWindow window;
+ window.show();
+ // Create NotesEditor object.
+ NotesEditor *notesEditor = new NotesEditor(this);
+ QVERIFY(notesEditor);
+
+ QString noteText("This is test note");
+ // Call edit using the text.
+ notesEditor->edit(QString("This is test note"));
+
+ QTest::qWait(1000);
+
+ // Call close on editor by saving the note
+ ulong id = notesEditor->close(NotesEditor::CloseWithoutSave);
+ QVERIFY(!id);
+
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+void TestNotesEditor::testClosingOfTodoEditorWithSave()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(QString("Buy Books"));
+ entry.setDescription(QString("@Landmarks"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ // Call edit on agenda entry
+ notesEditor->edit(entry);
+
+ QTest::qWait(3000);
+
+ ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
+
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.id(),id);
+ QCOMPARE(afterSave.type(),entry.type());
+ QCOMPARE(afterSave.summary(), entry.summary());
+ QCOMPARE(afterSave.description(), entry.description());
+
+ delete agendaUtil;
+ delete notesEditor;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+void TestNotesEditor::testClosingOfTodoEditorWithoutSave()
+{
+ HbMainWindow window;
+ window.show();
+
+ NotesEditor *notesEditor = new NotesEditor();
+ QVERIFY(notesEditor);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(QString("Buy Books"));
+ entry.setDescription(QString("@Landmarks"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ // Call edit on agenda entry
+ notesEditor->edit(entry);
+
+ QTest::qWait(3000);
+
+ ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithoutSave);
+ QVERIFY(!afterSaveId);
+
+ delete agendaUtil;
+ delete notesEditor;
+}
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_noteseditor/unittest_noteseditor.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2009 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: Pkg file for the unitest_noteseditor component.
+;
+
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"utnoteseditor"}, (0xEc226a1e), 1, 0, 0
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Executable and default resource files
+"/epoc32/release/armv5/urel/utnoteseditor.exe" - "!:\sys\bin\utnoteseditor.exe"
+"/epoc32/data/z/resource/apps/utnoteseditor.rsc" - "!:\resource\apps\utnoteseditor.rsc"
+"/epoc32/data/z/private/10003a3f/import/apps/utnoteseditor_reg.rsc" - "!:\private\10003a3f\import\apps\utnoteseditor_reg.rsc"
+
+; End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_noteseditor/unittest_noteseditor.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,49 @@
+#
+# Copyright (c) 2009 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:
+# Project specification file for noteseditor unit test.
+#
+
+TEMPLATE = app
+TARGET = utnoteseditor
+CONFIG += \
+ qtestlib \
+ symbian_test \
+ hb
+
+DEPENDPATH += \
+ . \
+ ./src
+
+INCLUDEPATH += .
+
+
+symbian: {
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.EPOCALLOWDLLDATA = 1
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += \
+ -lnoteseditor \
+ -lagendainterface
+}
+
+SOURCES += \
+ unittest_noteseditor.cpp \
+ main.cpp
+
+HEADERS += \
+ ./inc/unittest_noteseditor.h
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_notesmodel/src/unittest_notesmodel.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,272 @@
+/*
+* Copyright (c) 2009 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:
+* NotesModel unit-test class.
+*
+*/
+
+// System includes
+#include <QtTest/QtTest>
+#include <QtGui>
+#include <QPointer>
+#include <e32base.h>
+
+// User includes
+#include "notesmodel.h"
+#include "agendautil.h"
+
+class TestNotesModel : public QObject
+{
+ Q_OBJECT
+
+public slots:
+ void handleEntriesDeletion(int var);
+
+private slots:
+ // Test case setup.
+ void initTestCase();
+ void cleanupTestCase();
+
+ // Test cases.
+ void test_construction();
+ void test_sourceModelAddNote();
+ void test_sourceModelDeleteNote();
+ void test_sourceModelUpdateNote();
+
+private:
+ QPointer<NotesModel> mNotesModel;
+ QPointer<AgendaUtil> mAgendaUtil;
+
+ QDateTime mStart;
+ QDateTime mEnd;
+
+ CActiveSchedulerWait *mWait;
+};
+
+/*!
+ \class TestNotesModel
+
+ This is unittest class for NotesModel apis.
+ */
+
+/*!
+ Slot called when all the entries have been deleted.
+ */
+void TestNotesModel::handleEntriesDeletion(int var)
+{
+ Q_UNUSED(var)
+
+ if (mWait && mWait->IsStarted()) {
+ mWait->AsyncStop();
+ }
+}
+
+/*!
+ This function is called to init the testcase.
+ Called for every test case execution.
+ */
+void TestNotesModel::initTestCase()
+{
+ QT_TRAP_THROWING(mAgendaUtil = new AgendaUtil(this););
+ QVERIFY(mAgendaUtil != 0);
+
+ // Connect to the required signals
+ connect(
+ mAgendaUtil, SIGNAL(entriesDeleted(int)),
+ this, SLOT(handleEntriesDeletion(int)));
+
+ mWait = 0;
+
+ mStart.setDate(QDate(1900, 1, 1));
+ mStart.setTime(QTime(0, 0, 0));
+ mEnd.setDate(QDate(2100, 30, 12));
+ mEnd.setTime(QTime(23, 59, 0));
+}
+
+/*!
+ This function is called when the testcase execution is
+ completed, for cleaning up.
+ */
+void TestNotesModel::cleanupTestCase()
+{
+ if (mAgendaUtil) {
+ delete mAgendaUtil;
+ }
+ if (mNotesModel) {
+ delete mNotesModel;
+ }
+ if (mWait && mWait->IsStarted()) {
+ mWait->AsyncStop();
+ }
+ if (mWait) {
+ delete mWait;
+ }
+}
+
+/*!
+ This test functions tests the construction of NotesModel object.
+ */
+void TestNotesModel::test_construction()
+{
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ if (mNotesModel) {
+ delete mNotesModel;
+ QVERIFY(!mNotesModel);
+ }
+}
+
+/*!
+ This test function tests if the source model is updated when a note is
+ added.
+ */
+void TestNotesModel::test_sourceModelAddNote()
+{
+ mAgendaUtil->deleteEntries(mStart, mEnd, AgendaUtil::IncludeAll);
+ if (!mWait) {
+ mWait = new CActiveSchedulerWait;
+ }
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ QAbstractItemModel *model = 0;
+ model = mNotesModel->sourceModel();
+ QVERIFY(model);
+ QVERIFY(!model->rowCount());
+
+ // Now save a note.
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("Hello");
+ entry.setLastModifiedDateTime(
+ QDateTime(QDate::currentDate(), QTime::currentTime()));
+ QVERIFY(mAgendaUtil->addEntry(entry));
+
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(model->rowCount());
+ QVERIFY(model->rowCount() == 1);
+}
+
+/*!
+ This test function tests if the source model is updated when a note is
+ deleted.
+ */
+void TestNotesModel::test_sourceModelDeleteNote()
+{
+ mAgendaUtil->deleteEntries(mStart, mEnd, AgendaUtil::IncludeAll);
+ if (!mWait) {
+ mWait = new CActiveSchedulerWait;
+ }
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ QAbstractItemModel *model = 0;
+ model = mNotesModel->sourceModel();
+ QVERIFY(model);
+ QVERIFY(!model->rowCount());
+
+ // Now save a note.
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("Hello");
+ entry.setLastModifiedDateTime(
+ QDateTime(QDate::currentDate(), QTime::currentTime()));
+ ulong id;
+ QVERIFY(id = mAgendaUtil->addEntry(entry));
+
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(model->rowCount());
+ QVERIFY(model->rowCount() == 1);
+
+ // Verify if the model has the updated content.
+ startTimer(1000);
+ QModelIndex index = model->index(0, 0);
+ QVERIFY(index.isValid());
+ QStringList list = index.data(Qt::DisplayRole).value<QStringList>();
+ QCOMPARE(entry.description(), list.at(0));
+
+ // Delete the note saved above.
+ QVERIFY(mAgendaUtil->deleteEntry(id));
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(!model->rowCount());
+}
+
+/*!
+ This test function tests if the source model is updated when a note is
+ modified.
+ */
+void TestNotesModel::test_sourceModelUpdateNote()
+{
+ mAgendaUtil->deleteEntries(mStart, mEnd, AgendaUtil::IncludeAll);
+ if (!mWait) {
+ mWait = new CActiveSchedulerWait;
+ }
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+ mNotesModel = new NotesModel(mAgendaUtil, this);
+ QVERIFY(mNotesModel);
+
+ QAbstractItemModel *model = 0;
+ model = mNotesModel->sourceModel();
+ QVERIFY(model);
+ QVERIFY(!model->rowCount());
+
+ // Now save a note.
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription("Hello");
+ entry.setLastModifiedDateTime(
+ QDateTime(QDate::currentDate(), QTime::currentTime()));
+ ulong id;
+ QVERIFY(id = mAgendaUtil->addEntry(entry));
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(model->rowCount());
+ QVERIFY(model->rowCount() == 1);
+
+ // Now update the content on of the note created above.
+ entry = mAgendaUtil->fetchById(id);
+ QVERIFY(!entry.isNull());
+ entry.setDescription("Hello world");
+ QVERIFY(mAgendaUtil->updateEntry(entry));
+
+ // Verify if the model has the updated content.
+ startTimer(1000);
+ QModelIndex index = model->index(0, 0);
+ QVERIFY(index.isValid());
+ QStringList list = index.data(Qt::DisplayRole).value<QStringList>();
+ QCOMPARE(entry.description(), list.at(0));
+
+ // Delete the note saved above.
+ QVERIFY(mAgendaUtil->deleteEntry(id));
+ // Now check the count in the model.
+ startTimer(1000);
+ QVERIFY(!model->rowCount());
+}
+
+QTEST_MAIN(TestNotesModel)
+#include "unittest_notesmodel.moc"
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_notesmodel/unittest_notesmodel.pkg Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,35 @@
+;
+; Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+; All rights reserved.
+; This component and the accompanying materials are made available
+; under the terms of the License "Symbian Foundation License v1.0"
+; which accompanies this distribution, and is available
+; at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+;
+; Initial Contributors:
+; Nokia Corporation - initial contribution.
+;
+; Contributors:
+;
+; Description:
+; Pkg file for the unittest_notesmodel component.
+;
+
+; Language
+&EN
+
+; SIS header: name, uid, version
+#{"utnotesmodel"}, (0xEADA6E32), 1, 0, 0
+
+; Localised Vendor name
+%{"Nokia"}
+
+; Unique Vendor name
+:"Nokia"
+
+; Executable and default resource files
+"/epoc32/release/armv5/urel/utnotesmodel.exe" - "!:\sys\bin\utnotesmodel.exe"
+"/epoc32/data/z/resource/apps/utnotesmodel.rsc" - "!:\resource\apps\utnotesmodel.rsc"
+"/epoc32/data/z/private/10003a3f/import/apps/utnotesmodel_reg.rsc" - "!:\private\10003a3f\import\apps\utnotesmodel_reg.rsc"
+
+; End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/tsrc/unittest_notesmodel/unittest_notesmodel.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,45 @@
+#
+# Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+# All rights reserved.
+# This component and the accompanying materials are made available
+# under the terms of the License "Symbian Foundation License v1.0"
+# which accompanies this distribution, and is available
+# at the URL "http://www.symbianfoundation.org/legal/sfl-v10.html".
+#
+# Initial Contributors:
+# Nokia Corporation - initial contribution.
+#
+# Contributors:
+#
+# Description:
+# This is the project specification file for unittest_notesmodel.
+#
+
+TEMPLATE = app
+TARGET = utnotesmodel
+CONFIG += qtestlib
+CONFIG += symbian_test
+DEPENDPATH += \
+ . \
+ ./src
+INCLUDEPATH += \
+ . \
+ ../../notesui/notesmodel/inc \
+ ../../../agendainterface/agendautil/inc \
+ ../../inc
+
+symbian: {
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.UID3 = 0xEADA6E32
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += \
+ -lnotesmodel \
+ -lagendainterface
+}
+
+SOURCES += \
+ unittest_notesmodel.cpp
+
+# End of file --Don't remove this
--- a/organizer.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer.pro Thu Jul 22 16:32:51 2010 +0100
@@ -17,12 +17,8 @@
TEMPLATE = subdirs
CONFIG += ordered
SUBDIRS += organizer_pub \
- organizer_plat \
+ organizer_plat \
agendainterface \
- calendarui/commonutils \
- calendarui/calenlauncher \
- calendarui/caleneditor \
- notes/notesui/noteseditor \
calendarui \
clock \
notes \
--- a/organizer_info/organizer_metadata/organizer_metadata.mrp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_info/organizer_metadata/organizer_metadata.mrp Thu Jul 22 16:32:51 2010 +0100
@@ -1,19 +1,3 @@
-#
-# Copyright (c) 2009 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:
-#
-
component organizer_metadata
source \sf\app\organizer\organizer_info\organizer_metadata
source \sf\app\organizer\package_definition.xml
--- a/organizer_plat/agenda_interface_api/inc/agendaentry.h Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_interface_api/inc/agendaentry.h Thu Jul 22 16:32:51 2010 +0100
@@ -238,7 +238,7 @@
void setUntil(const QDateTime& date);
QDateTime until() const;
- void setRepeatRuleStart(const QDateTime& date);
+ void setRepeatRuleStart(const QDateTime& dateTime);
QDateTime repeatRuleStart() const;
void setWeekStart(Day day);
@@ -380,6 +380,7 @@
void setGeoValue(const AgendaGeoValue& geoValue);
AgendaGeoValue geoValue() const;
+ void clearGeoValue() const;
int durationInSecs() const;
AgendaEntry& operator=(const AgendaEntry& other);
--- a/organizer_plat/agenda_interface_api/inc/agendautil.h Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_interface_api/inc/agendautil.h Thu Jul 22 16:32:51 2010 +0100
@@ -79,7 +79,7 @@
AgendaEntry& entry, AgendaUtil::RecurrenceRange range);
bool updateEntry(const AgendaEntry& entry, bool isChild = false);
bool storeRepeatingEntry(const AgendaEntry& entry, bool copyToChildren);
- bool createException(const AgendaEntry& entry);
+ bool createException(const AgendaEntry& entry,QDateTime instanceOriginalDateTime);
QList<ulong> entryIds(
AgendaUtil::FilterFlags filter = AgendaUtil::IncludeAll);
QList<AgendaEntry> fetchAllEntries(
--- a/organizer_plat/agenda_interface_api/tsrc/tsrc.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_interface_api/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -17,11 +17,7 @@
TEMPLATE = subdirs
SUBDIRS += unittest_agendautil
+
CONFIG += ordered
-symbian: {
- BLD_INF_RULES.prj_exports += \
- "./rom/unit_agendainterface.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_agendainterface.iby)"
-}
-
# End of file --Don't remove this
--- a/organizer_plat/agenda_interface_api/tsrc/unittest_agendautil/src/unittest_agendautil.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_interface_api/tsrc/unittest_agendautil/src/unittest_agendautil.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * Copyright (c) 2009 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"
@@ -9,7 +9,7 @@
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
- * Contributors:
+ * Contributors:
*
* Description: AgendaUtil unit test class.
*
@@ -26,20 +26,18 @@
class TestAgendaUtil : public QObject
{
Q_OBJECT
-
+
public slots:
void handleEntriesDeletion(int error);
+ void handleEntryViewCreationCompleted(int status);
-private:
- int createMultipleEntries();
-
private slots:
// Test case setup.
void init();
void cleanup();
void initTestCase();
void cleanupTestCase();
-
+
// Test cases.
void test_addEntry();
void test_deleteEntry();
@@ -51,6 +49,19 @@
void test_fetchAllEntries();
void test_deleteEntries();
void test_fetchEntriesInRange();
+ void test_cloneEntry();
+ void test_todoCompleted();
+
+private:
+ int createMultipleEntries();
+ void cloneNoteToTodo();
+ void cloneNoteToMeeting();
+ void cloneTodoToNote();
+ void cloneTodoToMeeting();
+ void cloneMeetingToNote();
+ void cloneMeetingToTodo();
+ void completeTodo();
+ void unCompletedTodo();
private:
AgendaUtil *mAgendaUtil;
@@ -59,7 +70,7 @@
/*!
\class TestAgendaUtil
-
+
This is unittest class for AgendaUtil apis.
*/
@@ -71,7 +82,7 @@
/*QT_TRAP_THROWING(mAgendaUtil = new AgendaUtil);
Q_ASSERT_X(mAgendaUtil, "TestAgendaUtil::test_addEntry", "No agendautil");
-
+
// Connect to the required signals
connect(
mAgendaUtil, SIGNAL(entriesDeleted(int)), this,
@@ -85,7 +96,7 @@
*/
void TestAgendaUtil::cleanup()
{
-
+
//User::Exit(0);
if (mWait && mWait->IsStarted()) {
mWait->AsyncStop();
@@ -99,24 +110,34 @@
void TestAgendaUtil::initTestCase()
{
QT_TRAP_THROWING(mAgendaUtil = new AgendaUtil);
-
+
+ connect(
+ mAgendaUtil, SIGNAL(entryViewCreationCompleted(int)),
+ this, SLOT(handleEntryViewCreationCompleted(int)));
+
+ // Start the timer as the instanceview/entryview creation
+ // operation is asynchronous
+ QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
+ if (!mWait->IsStarted()) {
+ mWait->Start();
+ }
+
Q_ASSERT_X(mAgendaUtil, "TestAgendaUtil::test_addEntry", "No agendautil");
-
+
// Connect to the required signals
connect(
mAgendaUtil, SIGNAL(entriesDeleted(int)), this,
SLOT(handleEntriesDeletion(int)));
-
+
mWait = NULL;
}
void TestAgendaUtil::cleanupTestCase()
{
- //User::Exit(0);
- QCoreApplication::processEvents();
- if (mAgendaUtil) {
- delete mAgendaUtil;
- }
+ QCoreApplication::processEvents();
+ if (mAgendaUtil) {
+ delete mAgendaUtil;
+ }
}
/*
Tests the AgendaUtil::addEntry.
@@ -131,10 +152,10 @@
entry.setType(AgendaEntry::TypeEvent);
entry.setSummary("Test case");
entry.setStartAndEndTime(dateTimeSet, dateTimeSet);
-
+
// Run the case.
ulong id = mAgendaUtil->addEntry(entry);
-
+
// Verify.
AgendaEntry newEntry = mAgendaUtil->fetchById(id);
QDateTime dateTimeRetrieved = newEntry.startTime();
@@ -157,13 +178,13 @@
entry.setType(AgendaEntry::TypeEvent);
entry.setSummary("Test case");
entry.setStartAndEndTime(
- QDateTime::currentDateTime(),
+ QDateTime::currentDateTime(),
QDateTime::currentDateTime());
ulong id = mAgendaUtil->addEntry(entry);
-
+
// Run the case.
QVERIFY(mAgendaUtil->deleteEntry(id));
-
+
// Verify.
QVERIFY(mAgendaUtil->fetchById(id).isNull());
}
@@ -178,7 +199,7 @@
entry.setType(AgendaEntry::TypeAppoinment);
entry.setSummary("Test case");
entry.setStartAndEndTime(
- QDateTime::currentDateTime(),
+ QDateTime::currentDateTime(),
QDateTime::currentDateTime());
AgendaRepeatRule repeatRule;
repeatRule.setType(AgendaRepeatRule::DailyRule);
@@ -188,15 +209,15 @@
repeatRule.setUntil(until);
repeatRule.setInterval(1);
entry.setRepeatRule(repeatRule);
-
+
ulong id = mAgendaUtil->addEntry(entry);
AgendaEntry savedEntry = mAgendaUtil->fetchById(id);
QVERIFY(!savedEntry.isNull());
QVERIFY(savedEntry.isRepeating());
-
+
// Run the case.
mAgendaUtil->deleteRepeatedEntry(savedEntry, AgendaUtil::ThisAndAll);
-
+
// Verify.
QVERIFY(mAgendaUtil->fetchById(id).isNull());
}
@@ -220,7 +241,7 @@
// Verify.
AgendaEntry retrievedEntry = mAgendaUtil->fetchById(id);
-
+
// Check if the fetched entry is same st the added entry
QDateTime dateTimeRetrieved = retrievedEntry.startTime();
QDate dateRetrieved = dateTimeRetrieved.date();
@@ -229,7 +250,7 @@
QVERIFY(entry.type() == retrievedEntry.type());
QVERIFY(entry.summary() == retrievedEntry.summary());
mAgendaUtil->deleteEntry(id);
-
+
// Fetch the same again and check if its null.
AgendaEntry checkEntryIsNull = mAgendaUtil->fetchById(id);
QVERIFY(checkEntryIsNull.isNull());
@@ -247,19 +268,19 @@
entry.setDescription("Entry to test the updateEntry API");
entry.setLocation("Nokia");
entry.setStartAndEndTime(
- QDateTime::currentDateTime(),
+ QDateTime::currentDateTime(),
QDateTime::currentDateTime());
// Save the entry
ulong id = mAgendaUtil->addEntry(entry);
- // Fetch the same entry
+ // Fetch the same entry
AgendaEntry savedEntry = mAgendaUtil->fetchById(id);
QVERIFY(!savedEntry.isNull());
savedEntry.setSummary("Fetced Entry");
savedEntry.setLocation("India");
savedEntry.setStartAndEndTime(
- QDateTime::currentDateTime().addDays(1),
+ QDateTime::currentDateTime().addDays(1),
QDateTime::currentDateTime().addDays(1));
// Update the entry
@@ -267,7 +288,7 @@
QVERIFY(success);
// Fetch the updated entry again
- AgendaEntry updatedEntry = mAgendaUtil->fetchById(id);
+ AgendaEntry updatedEntry = mAgendaUtil->fetchById(id);
// Verify
QVERIFY(savedEntry.summary() == updatedEntry.summary());
@@ -286,7 +307,7 @@
QDateTime startRange(QDate(1900, 01, 1), QTime(0, 0, 0, 0));
QDateTime endRange(QDate(2100, 01, 01), QTime(23, 59, 59, 0));
mAgendaUtil->deleteEntries(startRange, endRange);
- // Start the timer as the above operation is asynchronous
+ // Start the timer as the above operation is asynchronous
if (!mWait) {
QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
if (!mWait->IsStarted()) {
@@ -328,7 +349,7 @@
qDebug("Request for deletion made.");
- // Start the timer as the above operation is asynchronous
+ // Start the timer as the above operation is asynchronous
if (!mWait) {
QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
if (!mWait->IsStarted()) {
@@ -392,7 +413,7 @@
qDebug("Request for deletion made.");
- // Start the timer as the above operation is asynchronous
+ // Start the timer as the above operation is asynchronous
if (!mWait) {
QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
if (!mWait->IsStarted()) {
@@ -413,7 +434,7 @@
qDebug("Request for deletion made.");
- // Start the timer as the above operation is asynchronous
+ // Start the timer as the above operation is asynchronous
if (!mWait) {
QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
if (!mWait->IsStarted()) {
@@ -453,7 +474,7 @@
// Verfiy
numOfEntriesRetrieved = entries.count();
- QVERIFY(numOfEntries == numOfEntriesRetrieved);
+ QCOMPARE(numOfEntries,numOfEntriesRetrieved);
}
/*!
@@ -471,32 +492,32 @@
int numOfEntriesRetrieved = entriesRetrieved.count();
QList<ulong> checkList = mAgendaUtil->entryIds();
int checkNum = checkList.count();
-
+
// Create the required entries.
int numOfEntries = createMultipleEntries();
-
+
entriesRetrieved = mAgendaUtil->fetchEntriesInRange(startRange, endRange);
numOfEntriesRetrieved = entriesRetrieved.count();
checkList = mAgendaUtil->entryIds();
checkNum = checkList.count();
Q_ASSERT(numOfEntries);
-
+
qDebug("Entries have been created");
// Execute the case.
mAgendaUtil->deleteEntries(startRange, endRange);
-
+
qDebug("Request for deletion made.");
- // Start the timer as the above operation is asynchronous
+ // Start the timer as the above operation is asynchronous
if (!mWait) {
QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
if (!mWait->IsStarted()) {
mWait->Start();
}
}
-
+
qDebug("Waiting for confirmation.");
entriesRetrieved = mAgendaUtil->fetchEntriesInRange(startRange, endRange);
numOfEntriesRetrieved = entriesRetrieved.count();
@@ -514,10 +535,10 @@
QDateTime startRange(QDate(1900, 01, 1), QTime(0, 0, 0, 0));
QDateTime endRange(QDate(2100, 12, 30), QTime(23, 59, 59, 0));
mAgendaUtil->deleteEntries(startRange,endRange);
-
+
//qDebug("Request for deletion made.");
- // Start the timer as the above operation is asynchronous
+ // Start the timer as the above operation is asynchronous
if (!mWait) {
QT_TRAP_THROWING(mWait = new (ELeave) CActiveSchedulerWait;);
if (!mWait->IsStarted()) {
@@ -526,13 +547,13 @@
}
//qDebug("Waiting for confirmation.");
-
+
QList<AgendaEntry> entriesRetrieved =
mAgendaUtil->fetchEntriesInRange(startRange, endRange);
int numOfEntriesRetrieved = entriesRetrieved.count();
QList<ulong> checkList = mAgendaUtil->entryIds();
int checkNum = checkList.count();
-
+
// Appointment.
AgendaEntry firstEntry;
firstEntry.setType(AgendaEntry::TypeAppoinment);
@@ -543,7 +564,7 @@
QDate(2020, 05, 01), QTime(10, 0, 0, 0));
firstEntry.setStartAndEndTime(firstEntryStart, firstEntryEnd);
ulong id = mAgendaUtil->addEntry(firstEntry);
-
+
// Create the range for which entries are needed
QDateTime fromRange(
QDate(2020, 01, 01), QTime(0, 0, 0, 0));
@@ -554,15 +575,37 @@
fromRange, toRange);
// Verify
- int num = entries.count();
+ int num = entries.count();
QVERIFY( 1 == entries.count());
-
+
//cleanup();
-
+
//User::Exit(0);
}
/*!
+ Test the api AgendaUtil::cloneEntry
+ */
+void TestAgendaUtil::test_cloneEntry()
+{
+ cloneNoteToTodo();
+ cloneNoteToMeeting();
+ cloneTodoToNote();
+ cloneTodoToMeeting();
+ cloneMeetingToNote();
+ cloneMeetingToTodo();
+}
+
+/*
+ Test the api AgendaUtil::setCompleted
+ */
+void TestAgendaUtil::test_todoCompleted()
+{
+ completeTodo();
+ unCompletedTodo();
+}
+
+/*!
Slot to listen for the completion of deleting the entries asynchronously.
*/
void TestAgendaUtil::handleEntriesDeletion(int error)
@@ -575,6 +618,18 @@
}
/*!
+ Slot to handle the entry view creation.
+ */
+void TestAgendaUtil::handleEntryViewCreationCompleted(int status)
+{
+ // Stop the wait timer.
+ if (mWait && mWait->IsStarted()) {
+ mWait->AsyncStop();
+ }
+ QVERIFY(!status);
+}
+
+/*!
Private function to create entries needed for some of the test cases.
*/
int TestAgendaUtil::createMultipleEntries()
@@ -621,7 +676,248 @@
return numOfEntries;
}
-QTEST_MAIN(TestAgendaUtil)
+/*!
+ Test Cloning of Note to To-do
+ */
+void TestAgendaUtil::cloneNoteToTodo()
+{
+ // Create an agenda entry(TypeNote) and save it.
+ AgendaEntry noteEntry(AgendaEntry::TypeNote);
+ noteEntry.setDescription(QString("test cloning of note to todo"));
+
+ // Clone the entry type TypeNote to TypeTodo
+ long notSavedEntryId = mAgendaUtil->cloneEntry(
+ noteEntry, AgendaEntry::TypeTodo);
+ // Shouldn't clone the entry as AgendaEntry is not yet saved.
+ QVERIFY(!notSavedEntryId);
+
+ long noteId = mAgendaUtil->addEntry(noteEntry);
+ QVERIFY(noteId);
+
+ // Fetch the saved note entry for cloning
+ AgendaEntry fetchedNoteEntry = mAgendaUtil->fetchById(noteId);
+
+ // Clone the entry type ENote to ETodo
+ long clonedTodoEntryId = mAgendaUtil->cloneEntry(
+ fetchedNoteEntry, AgendaEntry::TypeTodo);
+ QVERIFY(clonedTodoEntryId);
+
+ AgendaEntry clonedTodoEntry = mAgendaUtil->fetchById(clonedTodoEntryId);
+ // Compare the attributes.
+ QCOMPARE(AgendaEntry::TypeTodo,clonedTodoEntry.type());
+ QCOMPARE(fetchedNoteEntry.description(),clonedTodoEntry.description());
+}
+
+/*!
+ Test Cloning of Note to Meeting
+ */
+
+void TestAgendaUtil::cloneNoteToMeeting()
+{
+ // Create an agenda entry(TypeNote) and save it.
+ AgendaEntry noteEntry(AgendaEntry::TypeNote);
+ noteEntry.setDescription(QString("test cloning of note to meeting"));
+
+ long noteId = mAgendaUtil->addEntry(noteEntry);
+ QVERIFY(noteId);
+
+ // Fetch the saved note entry for cloning
+ AgendaEntry fetchedNoteEntry = mAgendaUtil->fetchById(noteId);
+
+ // Clone the entry type TypeNote to TypeTodo
+ long clonedMeetingEntryId = mAgendaUtil->cloneEntry(
+ fetchedNoteEntry, AgendaEntry::TypeAppoinment);
+ QVERIFY(clonedMeetingEntryId);
+
+ AgendaEntry clonedMeetingEntry = mAgendaUtil->fetchById(clonedMeetingEntryId);
+ // Compare the attributes.
+ QCOMPARE(AgendaEntry::TypeAppoinment,clonedMeetingEntry.type());
+ QCOMPARE(fetchedNoteEntry.description(),clonedMeetingEntry.description());
+}
+
+/*!
+ Test Cloning of To-do to Note
+ */
+void TestAgendaUtil::cloneTodoToNote()
+{
+ // Create an agenda entry(TypeTodo) and save it.
+ AgendaEntry todoEntry(AgendaEntry::TypeTodo);
+ todoEntry.setDescription(QString("test cloning of todo to note"));
+ QDateTime dueDate(QDate(2011, 06, 01), QTime(10, 0, 0, 0));
+ todoEntry.setStartAndEndTime(dueDate, dueDate);
+ long todoId = mAgendaUtil->addEntry(todoEntry);
+ QVERIFY(todoId);
+
+ // Fetch the saved note entry for cloning
+ AgendaEntry fetchedTodoEntry = mAgendaUtil->fetchById(todoId);
+
+ // Clone the entry type ETodo to EANote
+ ulong clonedNoteId = mAgendaUtil->cloneEntry(
+ fetchedTodoEntry, AgendaEntry::TypeNote);
+ QVERIFY(clonedNoteId);
+ AgendaEntry clonedNoteEntry =
+ mAgendaUtil->fetchById(clonedNoteId);
+
+ // Compare the attributes.
+ QCOMPARE(AgendaEntry::TypeNote,clonedNoteEntry.type());
+ QCOMPARE(fetchedTodoEntry.description(),clonedNoteEntry.description());
+ QCOMPARE(fetchedTodoEntry.favourite(),clonedNoteEntry.favourite());
+}
+
+/*!
+ Test Cloning of To-do to Meeting
+ */
+void TestAgendaUtil::cloneTodoToMeeting()
+{
+ // Create an agenda entry(TypeTodo) and save it.
+ AgendaEntry todoEntry(AgendaEntry::TypeTodo);
+ todoEntry.setSummary(QString("test cloning of todo to meeting"));
+ QDateTime dueDate(QDate(2011, 06, 01), QTime(10, 0, 0, 0));
+ todoEntry.setStartAndEndTime(dueDate, dueDate);
+ long todoId = mAgendaUtil->addEntry(todoEntry);
+ QVERIFY(todoId);
+
+ // Fetch the saved note entry for cloning
+ AgendaEntry fetchedTodoEntry = mAgendaUtil->fetchById(todoId);
+
+ // Clone the entry type TypeTodo to TypeAppointment
+ ulong clonedAppointmentId = mAgendaUtil->cloneEntry(
+ fetchedTodoEntry, AgendaEntry::TypeAppoinment);
+ QVERIFY(clonedAppointmentId);
+ AgendaEntry clonedAppointmentEntry =
+ mAgendaUtil->fetchById(clonedAppointmentId);
+
+ // Compare the attributes.
+ QCOMPARE(AgendaEntry::TypeAppoinment,clonedAppointmentEntry.type());
+ QCOMPARE(fetchedTodoEntry.summary(),clonedAppointmentEntry.summary());
+ QCOMPARE(fetchedTodoEntry.startTime(),clonedAppointmentEntry.startTime());
+ QCOMPARE(fetchedTodoEntry.endTime(),clonedAppointmentEntry.endTime());
+}
+
+/*!
+ Test Cloning of Meeting to Note
+ */
+void TestAgendaUtil::cloneMeetingToNote()
+{
+ // Create an agenda entry(TypeAppointment) and save it.
+ AgendaEntry appointment(AgendaEntry::TypeAppoinment);
+ appointment.setSummary(QString("test cloning of meeting to note"));
+ QDateTime startDate(QDate(2011, 06, 01), QTime(10, 0, 0, 0));
+ QDateTime endDate(QDate(2011, 06, 01), QTime(12, 0, 0, 0));
+ appointment.setStartAndEndTime(startDate, endDate);
+ long appointmentId = mAgendaUtil->addEntry(appointment);
+ QVERIFY(appointmentId);
+
+ // Fetch the saved note entry for cloning
+ AgendaEntry fetchedAppointment = mAgendaUtil->fetchById(appointmentId);
+
+ // Clone the entry type TypeAppointment to TypeNote
+ ulong clonedNoteId = mAgendaUtil->cloneEntry(
+ fetchedAppointment, AgendaEntry::TypeNote);
+ QVERIFY(clonedNoteId);
+
+ AgendaEntry clonedNote = mAgendaUtil->fetchById(clonedNoteId);
+ // Compare the attributes.
+ QCOMPARE(AgendaEntry::TypeNote,clonedNote.type());
+ QCOMPARE(fetchedAppointment.description(),clonedNote.description());
+ QCOMPARE(fetchedAppointment.favourite(),clonedNote.favourite());
+}
+
+/*!
+ Test Cloning of Meeting to To-do
+ */
+void TestAgendaUtil::cloneMeetingToTodo()
+{
+ // Create an agenda entry(TypeAppointment) and save it.
+ AgendaEntry appointment(AgendaEntry::TypeAppoinment);
+ appointment.setSummary(QString("test cloning of meeting to todo"));
+ QDateTime startDate(QDate(2011, 06, 01), QTime(10, 0, 0, 0));
+ QDateTime endDate(QDate(2011, 06, 01), QTime(12, 0, 0, 0));
+ appointment.setStartAndEndTime(startDate, endDate);
+ long appointmentId = mAgendaUtil->addEntry(appointment);
+ QVERIFY(appointmentId);
+
+ // Fetch the saved note entry for cloning
+ AgendaEntry fetchedAppointment = mAgendaUtil->fetchById(appointmentId);
+
+ // Clone the entry type EAppointment to TypeNote
+ ulong clonedTodoId = mAgendaUtil->cloneEntry(
+ fetchedAppointment, AgendaEntry::TypeTodo);
+ QVERIFY(clonedTodoId);
+
+ AgendaEntry clonedTodo = mAgendaUtil->fetchById(clonedTodoId);
+ // Compare the attributes.
+ QCOMPARE(AgendaEntry::TypeTodo,clonedTodo.type());
+ QCOMPARE(fetchedAppointment.summary(),clonedTodo.summary());
+ QCOMPARE(fetchedAppointment.startTime(),clonedTodo.startTime());
+ QCOMPARE(fetchedAppointment.endTime(),clonedTodo.endTime());
+}
+
+/*!
+ test making To-do as completed
+ */
+void TestAgendaUtil::completeTodo()
+{
+ // Create and Save a To-do event.
+ AgendaEntry todoEntry(AgendaEntry::TypeTodo);
+ todoEntry.setSummary(QString("Test making To-do event as Completed"));
+ QDateTime dueDate(QDate(2011, 06, 01), QTime(0, 0, 0, 0));
+ todoEntry.setStartAndEndTime(dueDate, dueDate);
+
+ ulong todoId = mAgendaUtil->addEntry(todoEntry);
+ QVERIFY(todoId);
+
+ // Complete the to-do.
+ AgendaEntry fetchedTodoEntry = mAgendaUtil->fetchById(todoId);
+ QDateTime completedTime(QDate(2011, 07, 01),QTime(0, 0, 0, 0));
+ mAgendaUtil->setCompleted(fetchedTodoEntry, true, completedTime);
+
+ // Compare the completed time.
+ AgendaEntry completedTodo = mAgendaUtil->fetchById(todoId);
+ QCOMPARE(completedTime,completedTodo.completedDateTime());
+}
+
+/*!
+ test making To-do as uncompleted
+ */
+void TestAgendaUtil::unCompletedTodo()
+{
+ // Create and Save a To-do event.
+ AgendaEntry todoEntry(AgendaEntry::TypeTodo);
+ todoEntry.setSummary(QString("Test making To-do event as Completed"));
+ QDateTime dueDate(QDate(2011, 06, 01), QTime(0, 0, 0, 0));
+ todoEntry.setStartAndEndTime(dueDate, dueDate);
+
+ ulong todoId = mAgendaUtil->addEntry(todoEntry);
+ QVERIFY(todoId);
+
+ // Complete the to-do.
+ AgendaEntry fetchedTodoEntry = mAgendaUtil->fetchById(todoId);
+ QDateTime completedTime(QDate(2011, 07, 01),QTime(0, 0, 0, 0));
+ mAgendaUtil->setCompleted(fetchedTodoEntry, true, completedTime);
+
+ // Compare the completed time.
+ AgendaEntry unCompletedTodo = mAgendaUtil->fetchById(todoId);
+ // make to-do as uncompleted.
+ mAgendaUtil->setCompleted(fetchedTodoEntry, false, completedTime);
+
+ QCOMPARE(completedTime, unCompletedTodo.completedDateTime());
+}
+
+int main(int argc, char *argv[])
+{
+ QApplication app(argc, argv);
+ TestAgendaUtil tc;
+
+ char *pass[3];
+ pass[0] = argv[0];
+ pass[1] = "-o";
+ pass[2] = "c:\\data\\TestAgendaUtil.txt";
+
+ int res = QTest::qExec(&tc, 3, pass);
+ return res;
+}
+
#include "unittest_agendautil.moc"
// End of file --Don't remove this.
--- a/organizer_plat/agenda_interface_api/tsrc/unittest_agendautil/unittest_agendautil.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_interface_api/tsrc/unittest_agendautil/unittest_agendautil.pro Thu Jul 22 16:32:51 2010 +0100
@@ -21,14 +21,19 @@
DEPENDPATH += . \
./src
INCLUDEPATH += .
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
symbian: {
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
LIBS += -lagendainterface
-}
+
+ BLD_INF_RULES.prj_testexports += \
+ "../rom/unit_agendainterface.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_agendainterface.iby)"
+ }
+
SOURCES += unittest_agendautil.cpp
--- a/organizer_plat/agenda_versit_2_api/tsrc/group/testagnversit2.mmp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_versit_2_api/tsrc/group/testagnversit2.mmp Thu Jul 22 16:32:51 2010 +0100
@@ -37,10 +37,13 @@
APP_LAYER_SYSTEMINCLUDE
SYSTEMINCLUDE ../../../../inc
SYSTEMINCLUDE ../../../../calendarui/inc
-SYSTEMINCLUDE ../../../../calendarengines/inc
-SYSTEMINCLUDE /epoc32/include/Digia/EUnit
+SYSTEMINCLUDE ../../../../calendarengines/inc
+SYSTEMINCLUDE /epoc32/include/platform/Digia/EUnit
SYSTEMINCLUDE /epoc32/include/ecom
SYSTEMINCLUDE /epoc32/include/test
+SYSTEMINCLUDE /epoc32/include/mw/Qt
+SYSTEMINCLUDE /epoc32/include/stdapis
+SYSTEMINCLUDE /epoc32/include/stdapis/sys
LIBRARY agnmodel.lib
LIBRARY CalInterimApi.lib
@@ -54,9 +57,9 @@
LIBRARY CalenGlobalData.lib
LIBRARY eikcore.lib
LIBRARY cone.lib
-LIBRARY bafl.lib
-LIBRARY tzclient.lib
-LIBRARY timezonelocalization.lib
-LIBRARY swinstcli.lib
+LIBRARY bafl.lib
+LIBRARY tzclient.lib
+LIBRARY timezonelocalization.lib
+LIBRARY swinstcli.lib
// End of file
--- a/organizer_plat/agenda_versit_2_api/tsrc/src/testagnversit2.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/agenda_versit_2_api/tsrc/src/testagnversit2.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -861,15 +861,14 @@
}
// 13. Clean DB totally. This is a MUST for the next test
- TBool databaseHasEntries;
+ TBool databaseHasEntries(EFalse);
TRAP(err, databaseHasEntries = CleanDatabaseL() );
- /* if(err) || databaseHasEntries)
+ if(err || databaseHasEntries)
{
EUNIT_PRINT(_L( "13. Clean DB totally fails" ) );
EUNIT_ASSERT( EFalse );
}
- */
-
+
// test passed..
}
--- a/organizer_plat/calendar_editor_api/tsrc/unittest_caleneditor/src/unittest_caleneditor.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/calendar_editor_api/tsrc/unittest_caleneditor/src/unittest_caleneditor.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -2,7 +2,7 @@
* Copyright (c) 2009 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"
+ * under the terms of the License "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
--- a/organizer_plat/calendar_editor_api/tsrc/unittest_caleneditor/unittest_caleneditor.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/calendar_editor_api/tsrc/unittest_caleneditor/unittest_caleneditor.pro Thu Jul 22 16:32:51 2010 +0100
@@ -2,7 +2,7 @@
# Copyright (c) 2009 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"
+# under the terms of the License "Eclipse Public License v1.0"
# which accompanies this distribution, and is available
# at the URL "http://www.eclipse.org/legal/epl-v10.html".
#
@@ -20,6 +20,7 @@
TARGET = ut_caleneditor
CONFIG += qtestlib \
hb
+CONFIG += symbian_test
DEPENDPATH += . \
./src/ \
../../../../calendarui/caleneditor/inc \
@@ -46,7 +47,10 @@
TARGET.EPOCHEAPSIZE = 0x200000 0x4000000
TARGET.CAPABILITY = CAP_GENERAL_DLL
- INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ BLD_INF_RULES.prj_testexports += \
+ "../rom/unit_caleneditor.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_caleneditor.iby)"
}
SOURCES += unittest_caleneditor.cpp \
--- a/organizer_plat/calendar_importer_api/tsrc/src/calenimportertestblocks.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/calendar_importer_api/tsrc/src/calenimportertestblocks.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -64,7 +64,7 @@
{
int error = iFs.Connect();
- TRAPD(error, iCalSession = CCalSession::NewL(););
+ iCalSession = CCalSession::NewL();
iCalSession->OpenL( iCalSession->DefaultFileNameL() );
iCalenImporter = CCalenImporter::NewL( *iCalSession );
--- a/organizer_plat/calendar_launcher_api/tsrc/tsrc.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/calendar_launcher_api/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -19,9 +19,4 @@
SUBDIRS += unittest_calenlauncher
CONFIG += ordered
-symbian: {
- BLD_INF_RULES.prj_exports += \
- "./rom/unit_calenlauncher.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_calenlauncher.iby)"
-}
-
# End of file --Don't remove this
--- a/organizer_plat/calendar_launcher_api/tsrc/unittest_calenlauncher/src/unittest_calenlauncher.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/calendar_launcher_api/tsrc/unittest_calenlauncher/src/unittest_calenlauncher.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -83,7 +83,8 @@
This slot is called on failure of calendar launch.
*/
void TestCalenLauncher::launcherFailed(int error)
-{
+{
+ Q_UNUSED(error)
// Indicate launching failed.
QVERIFY(true == false);
}
--- a/organizer_plat/calendar_launcher_api/tsrc/unittest_calenlauncher/unittest_calenlauncher.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/calendar_launcher_api/tsrc/unittest_calenlauncher/unittest_calenlauncher.pro Thu Jul 22 16:32:51 2010 +0100
@@ -24,13 +24,17 @@
../../../../calendarui/calenlauncher/src \
../../../../calendarui/calenlauncher/inc
INCLUDEPATH += .
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
symbian: {
TARGET.CAPABILITY = ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
LIBS += -lcalenlauncher
+
+ BLD_INF_RULES.prj_testexports += \
+ "../rom/unit_calenlauncher.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_calenlauncher.iby)"
}
SOURCES += unittest_calenlauncher.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/calendar_settings_keys_api/calendar_settings_keys_api.pri Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,16 @@
+# Copyright (c) 2009 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: Project specification file for clock_settings_keys_api
+#
+
+PUBLIC_HEADERS += calendar_settings_keys_api/inc/calendardomaincrkeys.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/calendar_settings_keys_api/inc/calendardomaincrkeys.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,39 @@
+/*
+* Copyright (c) 2009 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: The file contains the uid of domain keys.
+*
+*/
+
+#ifndef CALENDARDOMAINCRKEYS_H
+#define CALENDARDOMAINCRKEYS_H
+
+/** Calendar UI Settings keys*/
+/** Provides access to the Calendar application's settings keys */
+const long int KCRUidCalendar = { 0x101F874B };
+
+/**
+* Defines the time between alarm snoozes, in minutes.
+* Default value: 5
+**/
+const long int KCalendarSnoozeTime = 0x00000001;
+
+/**
+* Default Calendar alarm sound file.
+* Default value : "z:\data\sounds\digital\alarm.aac"
+**/
+const long int KCalendarDefaultSoundFile = 0x00000003;
+
+#endif // CALENDARDOMAINCRKEYS_H
+
+// End of file --Don't remove this.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settings_keys_api/clock_settings_keys_api.pri Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,16 @@
+# Copyright (c) 2009 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: Project specification file for clock_settings_keys_api
+#
+
+PUBLIC_HEADERS += clock_settings_keys_api/inc/clockdomaincrkeys.h
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settings_keys_api/inc/clockdomaincrkeys.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,31 @@
+/*
+* Copyright (c) 2009 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: The file contains the uid of domain keys.
+*
+*/
+
+#ifndef CLOCKDOMAINCRKEYS_H
+#define CLOCKDOMAINCRKEYS_H
+
+/**Clock Settings keys*/
+/**Provides access to the ClockSettings keys*/
+const long int KCRUidClockApp = { 0x101F874D };
+/**Default clock alarm sound file*/
+const long int KClockAppDefaultSoundFile = 0x00000000;
+/** Alarm snooze time key */
+const long int KClockAppSnoozeTime = 0x00000001;
+
+#endif // CLOCKDOMAINCRKEYS_H
+
+// End of file --Don't remove this.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/clock_settingsview_plugin_api.pri Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,17 @@
+# Copyright (c) 2005-2010 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: Project specification file for clock_settingsview_plugin_api
+#
+
+PUBLIC_HEADERS += clock_settingsview_plugin_api/inc/clocksettingsviewinterface.h
+PUBLIC_HEADERS += clock_settingsview_plugin_api/inc/ClockSettingsViewInterface
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/inc/ClockSettingsViewInterface Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,1 @@
+#include <clocksettingsviewinterface.h>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/inc/clocksettingsviewinterface.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,56 @@
+/*
+* Copyright (c) 2010 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: Header file for clock settings view Interface
+*
+*/
+
+#ifndef CLOCKSETTINGSVIEWINTERFACE_H
+#define CLOCKSETTINGSVIEWINTERFACE_H
+
+// System includes
+#include <qglobal.h>
+
+/*!
+ \class ClockSettingsViewInterface
+
+ \brief The class ClockSettingsViewInterface is an interface for the plugin to show clock settings view
+ */
+
+
+#define CLOCK_SETTINGSVIEW_PLUGIN_PATH QString("z:/resource/qt/plugins/clock")
+#define CLOCK_SETTINGSVIEW_PLUGIN_NAME QString("clocksettingsviewplugin.qtplugin")
+
+class ClockSettingsViewInterface
+{
+
+public:
+
+ /*!
+ Destructor
+ */
+ virtual ~ClockSettingsViewInterface() {}
+
+ /*!
+ To launch the Clock Regional Settings View
+ */
+ virtual void launchRegionalSettingsView() = 0;
+
+};
+
+Q_DECLARE_INTERFACE(ClockSettingsViewInterface,
+ "org.nokia.clock.ClockSettingsViewInterface/1.0")
+
+#endif // CLOCKSETTINGSVIEWINTERFACE_H
+
+// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/tsrc/rom/unit_clocksettingsviewplugin.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 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:
+* The iby file for clock settingsview plugin unit tests.
+*
+*/
+
+#ifndef UNIT_CLOCKSETTINGSVIEWPLUGIN_IBY
+#define UNIT_CLOCKSETTINGSVIEWPLUGIN_IBY
+
+S60_APP_EXE(utclocksettingsviewplugin)
+S60_APP_RESOURCE(utclocksettingsviewplugin)
+
+data=DATAZ_\private\10003a3f\import\apps\utclocksettingsviewplugin_reg.rsc \private\10003a3f\import\apps\utclocksettingsviewplugin_reg.rsc
+
+#endif // UNIT_CLOCKSETTINGSVIEWPLUGIN_IBY
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/tsrc/unittest_clocksettingsviewplugin/inc/unittest_clocksettingsviewplugin.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,43 @@
+/*
+* Copyright (c) 2009 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: Declaration of the class TestClockSettingsViewPlugin.
+*
+*/
+
+#ifndef UNITTEST_CLOCKSETTINGSVIEWPLUGIN_H
+#define UNITTEST_CLOCKSETTINGSVIEWPLUGIN_H
+
+// System includes
+#include <QObject>
+
+class TestClockSettingsViewPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ TestClockSettingsViewPlugin();
+ virtual ~TestClockSettingsViewPlugin();
+
+private slots:
+ // Test case setup.
+ void init();
+ void cleanup();
+
+ // Test cases go here.
+ void testPluginLoadUnLoad();
+};
+
+#endif // UNITTEST_CLOCKSETTINGSVIEWPLUGIN_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/tsrc/unittest_clocksettingsviewplugin/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,44 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System includes
+#include <QTest>
+#include <HbApplication>
+
+// User includes
+#include "unittest_clocksettingsviewplugin.h"
+
+int main(int argc, char *argv[])
+{
+ HbApplication app(argc, argv);
+ TestClockSettingsViewPlugin tc;
+
+ char *inParam[3];
+ inParam[0] = argv[0];
+ inParam[1] = "-o";
+ inParam[2] = "c:\\data\\TestClockSettingsViewPlugin.txt";
+
+ int ret = QTest::qExec(&tc, 3, inParam);
+ // Core dump if HbIconLoader instance is not destroyed before the
+ // application instance. HbIconLoader uses QCoreApplication::aboutToQuit()
+ // signal to destroy itself. app.exec() where the signal is normally emitted
+ // is not called here. So, invoking the signal explicitly.
+ QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
+ return ret;
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/tsrc/unittest_clocksettingsviewplugin/src/unittest_clocksettingsviewplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,89 @@
+/*
+* Copyright (c) 2009 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: Definition file for class TestClockSettingsViewPlugin.
+*
+*/
+
+// System include
+#include <QtTest/QtTest>
+#include <ClockSettingsViewInterface>
+
+// User includes
+#include "unittest_clocksettingsviewplugin.h"
+
+
+/*!
+ \class TestClockSettingsViewPlugin
+
+ Unit test class for Clock settings view Plugin apis
+ */
+
+
+/*!
+ Constructor
+ */
+
+TestClockSettingsViewPlugin::TestClockSettingsViewPlugin()
+{
+}
+
+/*!
+ Destructor
+ */
+TestClockSettingsViewPlugin::~TestClockSettingsViewPlugin()
+{
+}
+
+/*!
+ Initialise before calling the test case
+ */
+void TestClockSettingsViewPlugin::init()
+{
+}
+
+/*!
+ Do cleanup after each test case
+ */
+void TestClockSettingsViewPlugin::cleanup()
+{
+}
+
+/*!
+ Test the api of clock setting plugin
+ */
+
+void TestClockSettingsViewPlugin::testPluginLoadUnLoad()
+{
+ QDir dir(CLOCK_SETTINGSVIEW_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(CLOCK_SETTINGSVIEW_PLUGIN_NAME);
+
+ // Create Clock setting view object
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+
+ ClockSettingsViewInterface* interface =
+ qobject_cast<ClockSettingsViewInterface*>(plugin);
+
+ QVERIFY(interface);
+
+ // Unload the plugin
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/clock_settingsview_plugin_api/tsrc/unittest_clocksettingsviewplugin/unittest_clocksettingsviewplugin.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,52 @@
+#
+# Copyright (c) 2009 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:
+# Project specification file for clocksettings view plugin unit test.
+#
+
+TEMPLATE = app
+TARGET = utclocksettingsviewplugin
+CONFIG += \
+ qtestlib \
+ symbian_test \
+ hb
+
+DEPENDPATH += \
+ . \
+ ./inc \
+ ./src
+
+INCLUDEPATH += .
+
+
+symbian: {
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.UID3 = 0x2003157D
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ BLD_INF_RULES.prj_testexports += \
+ "../rom/unit_clocksettingsviewplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_clocksettingsviewplugin.iby)"
+}
+
+
+
+SOURCES += \
+ unittest_clocksettingsviewplugin.cpp \
+ main.cpp
+
+HEADERS += \
+ unittest_clocksettingsviewplugin.h
+
+# End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/inc/NotesEditor Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1 +0,0 @@
-#include <noteseditor.h>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/inc/NotesEditorInterface Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,1 @@
+#include <noteseditorinterface.h>
\ No newline at end of file
--- a/organizer_plat/notes_editor_api/inc/noteseditor.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,78 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-* The header file for NotesEditor class.
-*
-*/
-
-#ifndef NOTESEDITOR_H
-#define NOTESEDITOR_H
-
-// System includes
-#include <QObject>
-#include <qglobal.h>
-
-// Forward declarations
-class QFile;
-class QString;
-class AgendaUtil;
-class AgendaEntry;
-class NotesEditorPrivate;
-
-#ifdef NOTESEDITOR_LIB
-# define NOTESEDITOR_EXPORT Q_DECL_EXPORT
-#else
-# define NOTESEDITOR_EXPORT Q_DECL_IMPORT
-#endif
-
-class NOTESEDITOR_EXPORT NotesEditor : public QObject
-{
- Q_OBJECT
-
-public:
- enum CreateType{
- CreateNote = 0,
- CreateTodo,
- CreateTypeUnKnown = -1
- };
- enum CloseType{
- CloseWithSave = 0,
- CloseWithoutSave,
- CloseTypeUnKnown = -1
- };
-
- explicit NotesEditor(QObject *parent = 0);
- explicit NotesEditor(AgendaUtil *agendaUtil, QObject *parent = 0);
- virtual ~NotesEditor();
-
-public:
- void edit(const QString &string);
- void edit(const QFile &handle);
- void edit(AgendaEntry entry);
- void edit(ulong id);
- void create(CreateType type);
- ulong close(CloseType type);
-
-signals:
- void editingCompleted(bool status = true);
-
-private:
- NotesEditorPrivate *d_ptr;
- Q_DECLARE_PRIVATE_D(d_ptr, NotesEditor)
- Q_DISABLE_COPY(NotesEditor)
-};
-
-#endif // NOTESEDITOR_H
-
-// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/inc/noteseditorinterface.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,71 @@
+/*
+* Copyright (c) 2009 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:
+* The header file for Notes Editor Plugin Interface.
+*
+*/
+
+#ifndef NOTESEDITORINTERFACE_H
+#define NOTESEDITORINTERFACE_H
+
+// System includes
+#include <QObject>
+#include <QtPlugin>
+#include <qglobal.h>
+
+// Forward declarations
+class QFile;
+class QString;
+class AgendaUtil;
+class AgendaEntry;
+
+#define NOTES_EDITOR_PLUGIN_PATH QString("z:/resource/qt/plugins/notes")
+#define NOTES_EDITOR_PLUGIN_NAME QString("noteseditorplugin.qtplugin")
+
+class NotesEditorInterface : public QObject
+{
+ Q_OBJECT
+
+public:
+ enum CreateType{
+ CreateNote = 0,
+ CreateTodo,
+ CreateTypeUnKnown = -1
+ };
+ enum CloseType{
+ CloseWithSave = 0,
+ CloseWithoutSave,
+ CloseTypeUnKnown = -1
+ };
+
+ virtual ~NotesEditorInterface(){}
+
+public:
+ virtual void edit(const QString &string, AgendaUtil *agendaUtil=0) = 0;
+ virtual void edit(const QFile &handle, AgendaUtil *agendaUtil=0) = 0;
+ virtual void edit(AgendaEntry entry, AgendaUtil *agendaUtil=0) = 0;
+ virtual void edit(ulong id, AgendaUtil *agendaUtil=0) = 0;
+ virtual void create(CreateType type, AgendaUtil *agendaUtil=0) = 0;
+ virtual ulong close(CloseType type, AgendaUtil *agendaUtil=0) = 0;
+
+signals:
+ void editingCompleted(bool status = true);
+};
+
+Q_DECLARE_INTERFACE(NotesEditorInterface,
+ "org.nokia.notes.NotesEditorInterface/1.0")
+
+#endif // NOTESEDITORINTERFACE_H
+
+// End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/notes_editor_api.pri Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/notes_editor_api/notes_editor_api.pri Thu Jul 22 16:32:51 2010 +0100
@@ -13,5 +13,5 @@
# Description: Project specification file for notes_editor_api
#
-PUBLIC_HEADERS += notes_editor_api/inc/noteseditor.h
-PUBLIC_HEADERS += notes_editor_api/inc/NotesEditor
\ No newline at end of file
+PUBLIC_HEADERS += notes_editor_api/inc/noteseditorinterface.h
+PUBLIC_HEADERS += notes_editor_api/inc/NotesEditorInterface
\ No newline at end of file
--- a/organizer_plat/notes_editor_api/tsrc/rom/unit_noteseditor.iby Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,29 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-* The iby file for noteseditor unit tests.
-*
-*/
-
-#ifndef UNIT_NOTESEDITOR_IBY
-#define UNIT_NOTESEDITOR_IBY
-
-S60_APP_EXE(utnoteseditor)
-S60_APP_RESOURCE(utnoteseditor)
-
-data=DATAZ_\private\10003a3f\import\apps\utnoteseditor_reg.rsc \private\10003a3f\import\apps\utnoteseditor_reg.rsc
-
-#endif // UNIT_NOTESEDITOR_IBY
-
-// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/tsrc/rom/unit_noteseditorplugin.iby Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,29 @@
+/*
+* Copyright (c) 2009 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:
+* The iby file for noteseditor plugin unit tests.
+*
+*/
+
+#ifndef UNIT_NOTESEDITORPLUGIN_IBY
+#define UNIT_NOTESEDITORPLUGIN_IBY
+
+S60_APP_EXE(utnoteseditorplugin)
+S60_APP_RESOURCE(utnoteseditorplugin)
+
+data=DATAZ_\private\10003a3f\import\apps\utnoteseditorplugin_reg.rsc \private\10003a3f\import\apps\utnoteseditorplugin_reg.rsc
+
+#endif // UNIT_NOTESEDITORPLUGIN_IBY
+
+// End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/tsrc/unittest_noteseditor/inc/unittest_noteseditor.h Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,64 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-*
-*/
-
-#ifndef UNITTEST_NOTESEDITOR_H
-#define UNITTEST_NOTESEDITOR_H
-
-// System includes
-#include <QObject>
-
-// Forward declarations.
-class NotesEditor;
-
-class TestNotesEditor : public QObject
-{
- Q_OBJECT
-
-public:
- TestNotesEditor();
- virtual ~TestNotesEditor();
-
-private slots:
- // Test case setup.
- void init();
- void cleanup();
-
- // Test cases go here.
- void testConstructionWithoutAgendaUtil();
- void testConstructionWithAgendaUtil();
- void testDestruction();
- void testEditingNoteWithText();
- void testEditingNoteWithFileHandle();
- void testEditingNoteWithAgendaEntry();
- void testEditingNoteWithId();
- void testEditingTodoWithFileHandle();
- void testEditingTodoWithAgendaEntry();
- void testEditingTodoWithId();
- void testCreationOfNote();
- void testCreationofTodo();
- void testClosingOfNotesEditorWithSave();
- void testClosingOfNotesEditorWithoutSave();
- void testClosingOfTodoEditorWithSave();
- void testClosingOfTodoEditorWithoutSave();
-
-private:
- NotesEditor *mEditor;
-};
-
-#endif // UNITTEST_NOTESEDITOR_H
-
-// End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/tsrc/unittest_noteseditor/src/main.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,38 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-*
-*/
-
-// System includes
-#include <QTest>
-#include <HbApplication>
-
-// User includes
-#include "unittest_noteseditor.h"
-
-int main(int argc, char *argv[])
-{
- HbApplication app(argc, argv);
- TestNotesEditor tc;
- int ret = QTest::qExec(&tc, argc, argv);
- // Core dump if HbIconLoader instance is not destroyed before the
- // application instance. HbIconLoader uses QCoreApplication::aboutToQuit()
- // signal to destroy itself. app.exec() where the signal is normally emitted
- // is not called here. So, invoking the signal explicitly.
- QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
- return ret;
-}
-
-// End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/tsrc/unittest_noteseditor/src/unittest_noteseditor.cpp Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,511 +0,0 @@
-/*
-* Copyright (c) 2009 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:
-*
-*/
-
-// System include
-#include <QtTest/QtTest>
-#include <HbMainWindow>
-#include <NotesEditor>
-#include <AgendaUtil>
-#include <AgendaEntry>
-
-// User includes
-#include "unittest_noteseditor.h"
-
-
-/*!
- \class TestNotesEditor
-
- Unit test clas for Notes Editor apis
- */
-
-
-/*!
- Constructor
- */
-
-TestNotesEditor::TestNotesEditor()
-{
-
-}
-
-/*!
- Destructor
- */
-TestNotesEditor::~TestNotesEditor()
-{
-}
-
-/*!
- Initialise before calling the test case
- */
-void TestNotesEditor::init()
-{
-}
-
-/*!
- Do cleanup after each test case
- */
-void TestNotesEditor::cleanup()
-{
-}
-
-/*!
- Test the api NotesEditor::NotesEditor()
- */
-
-void TestNotesEditor::testConstructionWithoutAgendaUtil()
-{
- // Create NotesEditor object
- NotesEditor *notesEditor = new NotesEditor(this);
- QVERIFY(notesEditor!=0);
-
- // Cleanup
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::NotesEditor()
- */
-void TestNotesEditor::testConstructionWithAgendaUtil()
-{
- // Create AgendaUtil object.
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Create NotesEditor object.
- NotesEditor *notesEditor = new NotesEditor(agendaUtil);
-
- QVERIFY(notesEditor!=0);
-
- // Cleanup.
- delete notesEditor;
- delete agendaUtil;
-}
-
-/*!
- Test the api NotesEditor::~NotesEditor
- */
-void TestNotesEditor::testDestruction()
-{
- // Create NotesEditor object.
- QPointer<NotesEditor> notesEditor = new NotesEditor();
- delete notesEditor;
-
- QVERIFY(!notesEditor);
-
- // Create AgendaUtil object.
- QPointer<AgendaUtil> agendaUtil = new AgendaUtil();
- QPointer<NotesEditor> notesEditorWithAgendaUtil =
- new NotesEditor(agendaUtil);
-
- delete notesEditorWithAgendaUtil;
- delete agendaUtil;
-
- QVERIFY(!notesEditorWithAgendaUtil);
-}
-
-/*!
- Test the api NotesEditor::edit(const QString &string)
- */
-void TestNotesEditor::testEditingNoteWithText()
-{
- HbMainWindow window;
- window.show();
- // Create NotesEditor object.
- NotesEditor *notesEditor = new NotesEditor(this);
- QVERIFY(notesEditor);
-
- QString noteText("This is test note");
- // Call edit using the text.
- notesEditor->edit(QString("This is test note"));
-
- QTest::qWait(1000);
-
- // Call close on editor by saving the note
- ulong id = notesEditor->close(NotesEditor::CloseWithSave);
- QVERIFY(id);
-
- // Create agenda Utility.
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Fetch the entry using the id
- AgendaEntry entry = agendaUtil->fetchById(id);
-
- int compareResult = noteText.compare(entry.description());
- QVERIFY(!compareResult);
-
- delete agendaUtil;
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::edit(const QFile &handle)
- */
-void TestNotesEditor::testEditingNoteWithFileHandle()
-{
- // Nothing yet
-}
-
-/*!
- Test the api NotesEditor::edit(AgendaEntry entry)
- */
-void TestNotesEditor::testEditingNoteWithAgendaEntry()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- AgendaEntry entry;
- entry.setType(AgendaEntry::TypeNote);
- entry.setDescription(QString("A simple note"));
-
- // Call edit on agenda entry
- notesEditor->edit(entry);
-
- QTest::qWait(1000);
-
- ulong id = notesEditor->close(NotesEditor::CloseWithSave);
-
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- AgendaEntry afterSave = agendaUtil->fetchById(id);
- QCOMPARE(afterSave.description(), entry.description());
-
- delete agendaUtil;
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::edit(ulong id)
- */
-void TestNotesEditor::testEditingNoteWithId()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- AgendaEntry entry;
- entry.setType(AgendaEntry::TypeNote);
- entry.setDescription("A simple note");
-
- ulong id = agendaUtil->addEntry(entry);
-
- notesEditor->edit(id);
-
- QTest::qWait(1000);
-
- ulong savedId = notesEditor->close(NotesEditor::CloseWithSave);
-
- AgendaEntry afterSave = agendaUtil->fetchById(id);
- QCOMPARE(afterSave.description(), entry.description());
-
- delete agendaUtil;
- delete notesEditor;
-
-}
-
-
-/*!
- Test the api NotesEditor::edit(const QFile &handle)
- */
-void TestNotesEditor::testEditingTodoWithFileHandle()
-{
- // Nothing yet.
-}
-
-/*!
- Test the api NotesEditor::edit(AgendaEntry entry)
- */
-void TestNotesEditor::testEditingTodoWithAgendaEntry()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Create a agenda entry with type to-do
- AgendaEntry entry;
- entry.setType(AgendaEntry::TypeTodo);
- entry.setSummary(QString("Buy Books"));
- entry.setDescription(QString("@Landmarks"));
- entry.setStartAndEndTime(
- QDateTime::currentDateTime(),QDateTime::currentDateTime());
- entry.setStatus(AgendaEntry::TodoNeedsAction);
- entry.setPriority(2);
-
- ulong id = agendaUtil->addEntry(entry);
-
- // Call edit on agenda entry
- notesEditor->edit(entry);
-
- QTest::qWait(3000);
-
- ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
-
- AgendaEntry afterSave = agendaUtil->fetchById(id);
- QCOMPARE(afterSave.id(),id);
- QCOMPARE(afterSave.type(),entry.type());
- QCOMPARE(afterSave.summary(), entry.summary());
- QCOMPARE(afterSave.description(), entry.description());
-
- delete agendaUtil;
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::edit(ulong id)
- */
-void TestNotesEditor::testEditingTodoWithId()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Create a agenda entry with type to-do
- AgendaEntry entry;
- entry.setType(AgendaEntry::TypeTodo);
- entry.setSummary(QString("Buy Books"));
- entry.setDescription(QString("@Landmarks"));
- entry.setStartAndEndTime(
- QDateTime::currentDateTime(),QDateTime::currentDateTime());
- entry.setStatus(AgendaEntry::TodoNeedsAction);
- entry.setPriority(2);
-
- ulong id = agendaUtil->addEntry(entry);
-
- // Call edit using the id
- notesEditor->edit(id);
-
- QTest::qWait(3000);
-
- ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
-
- AgendaEntry afterSave = agendaUtil->fetchById(id);
- QCOMPARE(afterSave.id(),id);
- QCOMPARE(afterSave.type(),entry.type());
- QCOMPARE(afterSave.summary(), entry.summary());
- QCOMPARE(afterSave.description(), entry.description());
-
- delete agendaUtil;
- delete notesEditor;
-
-}
-
-/*!
- Test the api NotesEditor::create(CreateType type)
- */
-void TestNotesEditor::testCreationOfNote()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- notesEditor->create(NotesEditor::CreateNote);
-
- QTest::qWait(3000);
-
- ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
-
- // Note is not saved since description is empty
- // TODO use key press events here
-
- QVERIFY(!afterSaveId);
-
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::create(CreateType type)
- */
-void TestNotesEditor::testCreationofTodo()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- notesEditor->create(NotesEditor::CreateTodo);
-
- // TODO
- // Needs key interaction to edit the fields in to-do editor.
-
- QTest::qWait(3000);
-
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::close(CloseType type);
- */
-
-void TestNotesEditor::testClosingOfNotesEditorWithSave()
-{
- HbMainWindow window;
- window.show();
- // Create NotesEditor object.
- NotesEditor *notesEditor = new NotesEditor(this);
- QVERIFY(notesEditor);
-
- QString noteText("This is test note");
- // Call edit using the text.
- notesEditor->edit(QString("This is test note"));
-
- QTest::qWait(1000);
-
- // Call close on editor by saving the note
- ulong id = notesEditor->close(NotesEditor::CloseWithSave);
- QVERIFY(id);
-
- // Create agenda Utility.
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Fetch the entry using the id
- AgendaEntry entry = agendaUtil->fetchById(id);
-
- QCOMPARE(noteText,entry.description());
-
- delete agendaUtil;
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::close(CloseType type);
- */
-void TestNotesEditor::testClosingOfNotesEditorWithoutSave()
-{
- HbMainWindow window;
- window.show();
- // Create NotesEditor object.
- NotesEditor *notesEditor = new NotesEditor(this);
- QVERIFY(notesEditor);
-
- QString noteText("This is test note");
- // Call edit using the text.
- notesEditor->edit(QString("This is test note"));
-
- QTest::qWait(1000);
-
- // Call close on editor by saving the note
- ulong id = notesEditor->close(NotesEditor::CloseWithoutSave);
- QVERIFY(!id);
-
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::close(CloseType type);
- */
-void TestNotesEditor::testClosingOfTodoEditorWithSave()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Create a agenda entry with type to-do
- AgendaEntry entry;
- entry.setType(AgendaEntry::TypeTodo);
- entry.setSummary(QString("Buy Books"));
- entry.setDescription(QString("@Landmarks"));
- entry.setStartAndEndTime(
- QDateTime::currentDateTime(),QDateTime::currentDateTime());
- entry.setStatus(AgendaEntry::TodoNeedsAction);
- entry.setPriority(2);
-
- ulong id = agendaUtil->addEntry(entry);
-
- // Call edit on agenda entry
- notesEditor->edit(entry);
-
- QTest::qWait(3000);
-
- ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithSave);
-
- AgendaEntry afterSave = agendaUtil->fetchById(id);
- QCOMPARE(afterSave.id(),id);
- QCOMPARE(afterSave.type(),entry.type());
- QCOMPARE(afterSave.summary(), entry.summary());
- QCOMPARE(afterSave.description(), entry.description());
-
- delete agendaUtil;
- delete notesEditor;
-}
-
-/*!
- Test the api NotesEditor::close(CloseType type);
- */
-void TestNotesEditor::testClosingOfTodoEditorWithoutSave()
-{
- HbMainWindow window;
- window.show();
-
- NotesEditor *notesEditor = new NotesEditor();
- QVERIFY(notesEditor);
-
- AgendaUtil *agendaUtil = new AgendaUtil();
- QVERIFY(agendaUtil);
-
- // Create a agenda entry with type to-do
- AgendaEntry entry;
- entry.setType(AgendaEntry::TypeTodo);
- entry.setSummary(QString("Buy Books"));
- entry.setDescription(QString("@Landmarks"));
- entry.setStartAndEndTime(
- QDateTime::currentDateTime(),QDateTime::currentDateTime());
- entry.setStatus(AgendaEntry::TodoNeedsAction);
- entry.setPriority(2);
-
- ulong id = agendaUtil->addEntry(entry);
-
- // Call edit on agenda entry
- notesEditor->edit(entry);
-
- QTest::qWait(3000);
-
- ulong afterSaveId = notesEditor->close(NotesEditor::CloseWithoutSave);
- QVERIFY(!afterSaveId);
-
- delete agendaUtil;
- delete notesEditor;
-}
-// End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/tsrc/unittest_noteseditor/unittest_noteseditor.pkg Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,35 +0,0 @@
-;
-; Copyright (c) 2009 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: Pkg file for the unitest_noteseditor component.
-;
-
-
-; Language
-&EN
-
-; SIS header: name, uid, version
-#{"utnoteseditor"}, (0xEc226a1e), 1, 0, 0
-
-; Localised Vendor name
-%{"Nokia"}
-
-; Unique Vendor name
-:"Nokia"
-
-; Executable and default resource files
-"/epoc32/release/armv5/urel/utnoteseditor.exe" - "!:\sys\bin\utnoteseditor.exe"
-"/epoc32/data/z/resource/apps/utnoteseditor.rsc" - "!:\resource\apps\utnoteseditor.rsc"
-"/epoc32/data/z/private/10003a3f/import/apps/utnoteseditor_reg.rsc" - "!:\private\10003a3f\import\apps\utnoteseditor_reg.rsc"
-
-; End of file --Don't remove this.
--- a/organizer_plat/notes_editor_api/tsrc/unittest_noteseditor/unittest_noteseditor.pro Tue Jun 15 15:22:54 2010 +0100
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,48 +0,0 @@
-#
-# Copyright (c) 2009 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:
-# Project specification file for noteseditor unit test.
-#
-
-TEMPLATE = app
-TARGET = utnoteseditor
-CONFIG += \
- qtestlib \
- symbian_test \
- hb
-
-DEPENDPATH += \
- . \
- ./src
-
-INCLUDEPATH += .
-INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
-
-symbian: {
- TARGET.CAPABILITY = ALL -TCB
- TARGET.EPOCALLOWDLLDATA = 1
-
- LIBS += \
- -lnoteseditor \
- -lagendainterface
-}
-
-SOURCES += \
- unittest_noteseditor.cpp \
- main.cpp
-
-HEADERS += \
- ./inc/unittest_noteseditor.h
-
-# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/tsrc/unittest_noteseditorplugin/inc/unittest_noteseditorplugin.h Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,58 @@
+/*
+* Copyright (c) 2009 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: Declaration of the class TestNotesEditorPlugin.
+*
+*/
+
+#ifndef UNITTEST_NOTESEDITORPLUGIN_H
+#define UNITTEST_NOTESEDITORPLUGIN_H
+
+// System includes
+#include <QObject>
+
+class TestNotesEditorPlugin : public QObject
+{
+ Q_OBJECT
+
+public:
+ TestNotesEditorPlugin();
+ virtual ~TestNotesEditorPlugin();
+
+private slots:
+ // Test case setup.
+ void init();
+ void cleanup();
+
+ // Test cases go here.
+ void testPluginLoadUnLoad();
+ void testEditingNoteWithText();
+ void testEditingNoteWithFileHandle();
+ void testEditingNoteWithAgendaEntry();
+ void testEditingNoteWithId();
+ void testEditingTodoWithFileHandle();
+ void testEditingTodoWithAgendaEntry();
+ void testEditingTodoWithId();
+ void testCreationOfNote();
+ void testCreationofTodo();
+ void testClosingOfNotesEditorWithSave();
+ void testClosingOfNotesEditorWithoutSave();
+ void testClosingOfTodoEditorWithSave();
+ void testClosingOfTodoEditorWithoutSave();
+ void testAgendaUtilEditingNoteWithText();
+ void testAgendaUtilEditingTodoWithId();
+};
+
+#endif // UNITTEST_NOTESEDITORPLUGIN_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/tsrc/unittest_noteseditorplugin/src/main.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,38 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System includes
+#include <QTest>
+#include <HbApplication>
+
+// User includes
+#include "unittest_noteseditorplugin.h"
+
+int main(int argc, char *argv[])
+{
+ HbApplication app(argc, argv);
+ TestNotesEditorPlugin tc;
+ int ret = QTest::qExec(&tc, argc, argv);
+ // Core dump if HbIconLoader instance is not destroyed before the
+ // application instance. HbIconLoader uses QCoreApplication::aboutToQuit()
+ // signal to destroy itself. app.exec() where the signal is normally emitted
+ // is not called here. So, invoking the signal explicitly.
+ QMetaObject::invokeMethod(&app, "aboutToQuit", Qt::DirectConnection);
+ return ret;
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/tsrc/unittest_noteseditorplugin/src/unittest_noteseditorplugin.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,782 @@
+/*
+* Copyright (c) 2009 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:
+*
+*/
+
+// System include
+#include <QtTest/QtTest>
+#include <HbMainWindow>
+#include <NotesEditorInterface>
+#include <AgendaUtil>
+#include <AgendaEntry>
+
+// User includes
+#include "unittest_noteseditorplugin.h"
+
+
+/*!
+ \class TestNotesEditorPlugin
+
+ Unit test clas for Notes Editor Plugin apis
+ */
+
+
+/*!
+ Constructor
+ */
+
+TestNotesEditorPlugin::TestNotesEditorPlugin()
+{
+}
+
+/*!
+ Destructor
+ */
+TestNotesEditorPlugin::~TestNotesEditorPlugin()
+{
+}
+
+/*!
+ Initialise before calling the test case
+ */
+void TestNotesEditorPlugin::init()
+{
+}
+
+/*!
+ Do cleanup after each test case
+ */
+void TestNotesEditorPlugin::cleanup()
+{
+}
+
+/*!
+ Test the api NotesEditor::NotesEditor()
+ */
+
+void TestNotesEditorPlugin::testPluginLoadUnLoad()
+{
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create NotesEditor object
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ QVERIFY(interface);
+
+ // Unload the plugin
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditorInterface::edit(const QString &string)
+ */
+void TestNotesEditorPlugin::testEditingNoteWithText()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ QString noteText("Test editing of Note by providing text(QString)");
+ // Call edit using the text.
+ interface->edit(noteText);
+
+ // Wait for Editor to launch.
+ QTest::qWait(2000);
+
+ // Call close on editor by saving the note
+ ulong id = interface->close(NotesEditorInterface::CloseWithSave);
+ QVERIFY(id);
+
+ // Create agenda Utility.
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Fetch the entry using the id.
+ AgendaEntry entry = agendaUtil->fetchById(id);
+
+ QString entryDescription = entry.description();
+ int compareResult = noteText.compare(entryDescription);
+
+ QVERIFY(!compareResult);
+
+ // cleanup
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::edit(const QFile &handle)
+ */
+void TestNotesEditorPlugin::testEditingNoteWithFileHandle()
+{
+ // Nothing yet
+}
+
+/*!
+ Test the api NotesEditor::edit(AgendaEntry entry)
+ */
+void TestNotesEditorPlugin::testEditingNoteWithAgendaEntry()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription(QString("Test Editing Note by providing Agenda Entry"));
+
+ // Call edit on agenda entry
+ interface->edit(entry);
+
+ // Wait for Editor to launch.
+ QTest::qWait(2000);
+
+ ulong id = interface->close(NotesEditorInterface::CloseWithSave);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Compare the description after saving.
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.description(), entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::edit(ulong id)
+ */
+void TestNotesEditorPlugin::testEditingNoteWithId()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+
+ QVERIFY(agendaUtil);
+
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription(
+ QString("Test Editing of Note by providing entry local Id"));
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ interface->edit(id);
+
+ // Wait for Editor to launch.
+ QTest::qWait(1000);
+
+ ulong savedId = interface->close(NotesEditorInterface::CloseWithSave);
+
+ // Compare the entry after saving. Using the old entry id since
+ // text is not modified in the editor. Wait can be increased to allow user
+ // to modify the text.
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.description(), entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+
+/*!
+ Test the api NotesEditor::edit(const QFile &handle)
+ */
+void TestNotesEditorPlugin::testEditingTodoWithFileHandle()
+{
+ // Nothing yet.
+}
+
+/*!
+ Test the api NotesEditor::edit(AgendaEntry entry)
+ */
+void TestNotesEditorPlugin::testEditingTodoWithAgendaEntry()
+{
+ HbMainWindow mainWindow;
+ mainWindow.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(QString("Test Editing of Todo by providing AgendaEntry"));
+ entry.setDescription(QString("@QTest Framework."));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ AgendaEntry storedEntry = agendaUtil->fetchById(id);
+
+ // Call edit on agenda entry
+ interface->edit(storedEntry);
+
+ // Wait for Editor to launch.
+ QTest::qWait(3000);
+
+ ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);
+
+ // Compare the entry after saving.
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.id(),id);
+ QCOMPARE(afterSave.type(),entry.type());
+ QCOMPARE(afterSave.summary(), entry.summary());
+ QCOMPARE(afterSave.description(), entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::edit(ulong id)
+ */
+void TestNotesEditorPlugin::testEditingTodoWithId()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(
+ QString("Test Editing of Todo by providing entry local Id"));
+ entry.setDescription(QString("@QTest Framework"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+ AgendaEntry storedEntry = agendaUtil->fetchById(id);
+
+ // Call edit on agenda entry
+ interface->edit(storedEntry);
+
+ // Wait for Editor to launch.
+ QTest::qWait(3000);
+
+ ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);
+
+ // Compare the entry after saving.
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.id(),id);
+ QCOMPARE(afterSave.type(),entry.type());
+ QCOMPARE(afterSave.summary(), entry.summary());
+ QCOMPARE(afterSave.description(), entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::create(CreateType type)
+ */
+void TestNotesEditorPlugin::testCreationOfNote()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ interface->create(NotesEditorInterface::CreateNote);
+
+ // Wait for Editor to launch.
+ QTest::qWait(3000);
+
+ ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);
+
+ // Note is not saved since description is empty
+ // TODO use key press events here
+
+ QVERIFY(!afterSaveId);
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::create(CreateType type)
+ */
+void TestNotesEditorPlugin::testCreationofTodo()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ interface->create(NotesEditorInterface::CreateTodo);
+
+ // TODO
+ // Needs key interaction to edit the fields in to-do editor.
+
+ // Wait for Editor to launch.
+ QTest::qWait(3000);
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+
+void TestNotesEditorPlugin::testClosingOfNotesEditorWithSave()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ QString noteText("Test Closing Of NotesEditor With Save");
+ // Call edit using the text.
+ interface->edit(noteText);
+
+ // Wait for Editor to launch.
+ QTest::qWait(1000);
+
+ // Call close on editor by saving the note
+ ulong id = interface->close(NotesEditorInterface::CloseWithSave);
+ QVERIFY(id);
+
+ // Create agenda Utility.
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Fetch the entry using the id
+ AgendaEntry entry = agendaUtil->fetchById(id);
+
+ QCOMPARE(noteText,entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+void TestNotesEditorPlugin::testClosingOfNotesEditorWithoutSave()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ QString noteText("Test Closing Of Notes Editor Without Save");
+ // Call edit using the text.
+ interface->edit(noteText);
+
+ // Wait for Editor to launch.
+ QTest::qWait(1000);
+
+ // Call close on editor by saving the note
+ ulong id = interface->close(NotesEditorInterface::CloseWithoutSave);
+ QVERIFY(!id);
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+void TestNotesEditorPlugin::testClosingOfTodoEditorWithSave()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(
+ QString("Test Closing Of Todo Editor With Save"));
+ entry.setDescription(QString("@QTest Framework"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ AgendaEntry storedEntry = agendaUtil->fetchById(id);
+ // Call edit on agenda entry
+ interface->edit(storedEntry);
+
+ // Wait for Editor to launch.
+ QTest::qWait(1000);
+
+ ulong afterSaveId = interface->close(NotesEditorInterface::CloseWithSave);
+
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.id(),id);
+ QCOMPARE(afterSave.type(),entry.type());
+ QCOMPARE(afterSave.summary(), entry.summary());
+ QCOMPARE(afterSave.description(), entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test the api NotesEditor::close(CloseType type);
+ */
+void TestNotesEditorPlugin::testClosingOfTodoEditorWithoutSave()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ // Create a agenda entry with type to-do
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeTodo);
+ entry.setSummary(
+ QString("Test Closing Of Todo Editor Without Save"));
+ entry.setDescription(QString("@QTest framework"));
+ entry.setStartAndEndTime(
+ QDateTime::currentDateTime(),QDateTime::currentDateTime());
+ entry.setStatus(AgendaEntry::TodoNeedsAction);
+ entry.setPriority(2);
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ AgendaEntry storedEntry = agendaUtil->fetchById(id);
+ // Call edit on agenda entry
+ interface->edit(storedEntry);
+
+ // Wait for Editor to launch.
+ QTest::qWait(3000);
+
+ ulong afterSaveId = interface->close(
+ NotesEditorInterface::CloseWithoutSave);
+ QVERIFY(!afterSaveId);
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test editing of note by owning agenda util.
+ */
+void TestNotesEditorPlugin::testAgendaUtilEditingNoteWithText()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ // Create agenda Utility.
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+ QVERIFY(agendaUtil);
+
+ QString noteText("Test Editing of Note With Text by passing created "
+ "agenda util to notes editor plugin");
+ // Call edit using the text.
+ interface->edit(noteText, agendaUtil);
+
+ // Call close on editor by saving the note
+ ulong id = interface->close(NotesEditorInterface::CloseWithSave);
+ QVERIFY(id);
+
+ // Fetch the entry using the id
+ AgendaEntry entry = agendaUtil->fetchById(id);
+
+ QString entryDescription = entry.description();
+ int compareResult = noteText.compare(entryDescription);
+
+ QVERIFY(!compareResult);
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+
+/*!
+ Test editing to-do entry by owning agenda util.
+ */
+void TestNotesEditorPlugin::testAgendaUtilEditingTodoWithId()
+{
+ HbMainWindow window;
+ window.show();
+
+ QDir dir(NOTES_EDITOR_PLUGIN_PATH);
+ QString pluginName = dir.absoluteFilePath(NOTES_EDITOR_PLUGIN_NAME);
+
+ // Create plugin loader.
+ QPluginLoader *pluginLoader = new QPluginLoader(pluginName);
+
+ // Load the plugin.
+ QVERIFY(pluginLoader->load());
+
+ QObject *plugin = qobject_cast<QObject*> (pluginLoader->instance());
+ NotesEditorInterface* interface =
+ qobject_cast<NotesEditorInterface*>(plugin);
+
+ AgendaUtil *agendaUtil = new AgendaUtil();
+ // Wait for completion of instance view/entryview creation.
+ QTest::qWait(1);
+
+ QVERIFY(agendaUtil);
+
+ AgendaEntry entry;
+ entry.setType(AgendaEntry::TypeNote);
+ entry.setDescription(
+ QString("Test Editing of Note by providing entry local Id"));
+
+ ulong id = agendaUtil->addEntry(entry);
+
+ // Edits to-do entry by providing entry id and agendautil.
+ interface->edit(id, agendaUtil);
+
+ // Wait for Editor to launch.
+ QTest::qWait(1000);
+
+ ulong savedId = interface->close(NotesEditorInterface::CloseWithSave);
+
+ // Compare the entry after saving. Using the old entry id since
+ // text is not modified in the editor. Wait can be increased to allow user
+ // to modify the text.
+ AgendaEntry afterSave = agendaUtil->fetchById(id);
+ QCOMPARE(afterSave.description(), entry.description());
+
+ // cleanup.
+ delete agendaUtil;
+
+ // Unload the plugin.
+ QVERIFY(pluginLoader->unload());
+ delete pluginLoader;
+}
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/notes_editor_api/tsrc/unittest_noteseditorplugin/unittest_noteseditorplugin.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,51 @@
+#
+# Copyright (c) 2009 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:
+# Project specification file for noteseditor unit test.
+#
+
+TEMPLATE = app
+TARGET = utnoteseditorplugin
+CONFIG += \
+ qtestlib \
+ symbian_test \
+ hb
+
+DEPENDPATH += \
+ . \
+ ./src
+
+INCLUDEPATH += .
+
+symbian: {
+ TARGET.CAPABILITY = ALL -TCB
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.UID3 = 0xE3883256
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
+
+ LIBS += \
+ -lagendainterface
+
+ BLD_INF_RULES.prj_testexports += \
+ "../rom/unit_noteseditorplugin.iby CORE_APP_LAYER_IBY_EXPORT_PATH(unit_noteseditorplugin.iby)"
+}
+
+SOURCES += \
+ unittest_noteseditorplugin.cpp \
+ main.cpp
+
+HEADERS += \
+ ./inc/unittest_noteseditorplugin.h
+
+# End of file --Don't remove this.
--- a/organizer_plat/organizer_plat.pro Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_plat/organizer_plat.pro Thu Jul 22 16:32:51 2010 +0100
@@ -24,6 +24,9 @@
include(calendar_editor_api/calendar_editor_api.pri)
include(notes_editor_api/notes_editor_api.pri)
include(eventviewer_plugin_api/eventviewer_plugin_api.pri)
+include(clock_settings_keys_api/clock_settings_keys_api.pri)
+include(calendar_settings_keys_api/calendar_settings_keys_api.pri)
+include(clock_settingsview_plugin_api/clock_settingsview_plugin_api.pri)
symbian {
headers.sources = $$PUBLIC_HEADERS
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/tsrc/group/bld.inf Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,23 @@
+/*
+* Copyright (c) 2010 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: Includes organizer_plat test code
+*
+*/
+
+
+#include "../../agenda_versit_2_api/tsrc/group/bld.inf"
+#include "../../calendar_exporter_api/tsrc/group/bld.inf"
+#include "../../calendar_importer_api/tsrc/group/bld.inf"
+
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,27 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for test code under organizer_plat.
+#
+
+TEMPLATE = subdirs
+SUBDIRS += ../agenda_interface_api/tsrc \
+ #../calendar_editor_api/tsrc \ TODO : uncomment after fixing build issues
+ ../calendar_launcher_api/tsrc \
+ ../notes_editor_api/tsrc \
+ ../clock_settingsview_plugin_api/tsrc
+
+CONFIG += ordered
+
+# End of file --Don't remove this
--- a/organizer_pub/calendar_interim_utils2_api/tsrc/bc/calendar/group/BCTestCalendar2.mmp Tue Jun 15 15:22:54 2010 +0100
+++ b/organizer_pub/calendar_interim_utils2_api/tsrc/bc/calendar/group/BCTestCalendar2.mmp Thu Jul 22 16:32:51 2010 +0100
@@ -43,8 +43,7 @@
#if defined(__S60_)
OS_LAYER_SYSTEMINCLUDE
#else // __S60_ not defined
- SYSTEMINCLUDE /epoc32/include
- SYSTEMINCLUDE /epoc32/include/internal
+ SYSTEMINCLUDE /epoc32/include
#endif // __S60_
SOURCEPATH ../src
@@ -54,20 +53,19 @@
#if defined(__S60_)
OS_LAYER_SYSTEMINCLUDE
#else // __S60_ not defined
- SYSTEMINCLUDE /epoc32/include
- SYSTEMINCLUDE /epoc32/include/internal
+ SYSTEMINCLUDE /epoc32/include
#endif // __S60_
SOURCEPATH ../src
#endif // SBSV2
+APP_LAYER_SYSTEMINCLUDE
SYSTEMINCLUDE /epoc32/include
SYSTEMINCLUDE /epoc32/include/middleware
SYSTEMINCLUDE /epoc32/include/domain/middleware
SYSTEMINCLUDE /epoc32/include/osextensions
SYSTEMINCLUDE /epoc32/include/domain/osextensions
SYSTEMINCLUDE /epoc32/include/applications
-SYSTEMINCLUDE /epoc32/include/internal
SOURCE BCTestCalendar2.cpp
SOURCE BCTestCalendar2Blocks.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_pub/tsrc/group/bld.inf Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,20 @@
+/*
+* Copyright (c) 2010 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: Includes organizer_pub test code
+*
+*/
+
+#include "../../calendar_interim_utils2_api/tsrc/stiff/group/bld.inf"
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_pub/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,18 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for organizer_pub test code.
+#
+
+# End of file --Don't remove this
--- a/pimappservices/calendar/bwins/caltestlibu.def Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/bwins/caltestlibu.def Thu Jul 22 16:32:51 2010 +0100
@@ -45,4 +45,5 @@
?RegisterCalFileL@CCalTestLibrary@@QAEXABVTDesC16@@@Z @ 44 NONAME ; void CCalTestLibrary::RegisterCalFileL(class TDesC16 const &)
?WaitForAgendaServerClose@CCalTestLibrary@@SAXXZ @ 45 NONAME ; void CCalTestLibrary::WaitForAgendaServerClose(void)
?WaitForAlarmEvent@CCalTestLibrary@@QAEHHW4TAlarmChangeEvent@@W4TAlarmState@@H@Z @ 46 NONAME ; int CCalTestLibrary::WaitForAlarmEvent(int, enum TAlarmChangeEvent, enum TAlarmState, int)
+ ?CreateCalSubSessionL@CCalTestLibrary@@QAEAAV?$RPointerArray@VCCalSession@@@@ABVTDesC16@@@Z @ 47 NONAME ; class RPointerArray<class CCalSession> & CCalTestLibrary::CreateCalSubSessionL(class TDesC16 const &)
--- a/pimappservices/calendar/client/src/calattachment.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/client/src/calattachment.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -554,12 +554,23 @@
*/
EXPORT_C void CCalAttachmentFile::FetchFileHandleL(RFile& aFileHandle) const
{
- if (iAttachmentImpl->IsFileHandleSet() || ! iCalSessionImpl)
- {
- User::Leave(KErrArgument);
- }
-
- iCalSessionImpl->Server().FetchFileHandleL(aFileHandle, iAttachmentImpl->Uid(), iCalSessionImpl->FileId());
+ if ( iAttachmentImpl->IsFileHandleSet() )
+ {
+ aFileHandle.Close();
+ User::LeaveIfError(
+ aFileHandle.Duplicate( iAttachmentImpl->FileHandle() ) );
+ }
+ else if ( iCalSessionImpl )
+ {
+ iCalSessionImpl->Server().FetchFileHandleL(
+ aFileHandle,
+ iAttachmentImpl->Uid(),
+ iCalSessionImpl->FileId() );
+ }
+ else
+ {
+ User::Leave( KErrArgument );
+ }
}
/** Load the binary data into the attachment object to be accessed through the CCalAttachment::Value function.
--- a/pimappservices/calendar/client/src/calcalendarinfoimpl.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/client/src/calcalendarinfoimpl.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -69,9 +69,9 @@
{
if (iProperties[position]->Value().Compare(KNullDesC8) == 0)
{
- __ASSERT_DEBUG(iProperties[position]->StreamId() != KNullStreamId, CalUtils::Panic(ECalendarInfoNullStreamId));
+ __ASSERT_DEBUG(iFileName && iProperties[position]->StreamId() != KNullStreamId, CalUtils::Panic(ECalendarInfoNullStreamId));
// Get the property
- HBufC8* value = iSessionImpl->Server().GetPropertyValueL(iSessionImpl->FileName(), iProperties[position]->StreamId());
+ HBufC8* value = iSessionImpl->Server().GetPropertyValueL(iFileName->Des(), iProperties[position]->StreamId());
iProperties[position]->SetValue(value);
}
else if (iProperties[position]->State() == CAgnCalendarInfoProperty::EDeleted)
--- a/pimappservices/calendar/client/src/calclient.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/client/src/calclient.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -35,8 +35,6 @@
#include "calcalendarinfoimpl.h"
#include "agmfilechangenotification.h"
-const TUint KDefaultMessageSlots = 3;
-
_LIT(KAgendaMutex, "AgnMutex");
//
@@ -205,7 +203,7 @@
TInt RAgendaServ::DoConnect()
{
- return CreateSession(KAgendaServerName,Version(), KDefaultMessageSlots);
+ return CreateSession(KAgendaServerName,Version());
}
@@ -1808,11 +1806,18 @@
{
if (type == CCalEntry::ETodo)
{
- changeItem.iEntryType = MCalChangeCallBack2::EChangeEntryTodo;
+ changeItem.iEntryType =
+ MCalChangeCallBack2::EChangeEntryTodo;
+ }
+ else if (type == CCalEntry::ENote)
+ {
+ changeItem.iEntryType =
+ MCalChangeCallBack2::EChangeEntryNote;
}
else
{
- changeItem.iEntryType = MCalChangeCallBack2::EChangeEntryEvent;
+ changeItem.iEntryType =
+ MCalChangeCallBack2::EChangeEntryEvent;
}
}
aChangeItems.AppendL(changeItem);
--- a/pimappservices/calendar/client/src/calentryimpl.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/client/src/calentryimpl.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -636,11 +636,11 @@
const TAgnRpt* KRpt = KRptDef->RRule();
// get the DTSTART property
- if (SimpleEntry()->Type() == CCalEntry::ETodo)
- {
- aRule.SetDtStart(EndTimeL());
- }
- else
+// if (SimpleEntry()->Type() == CCalEntry::ETodo)
+// {
+// aRule.SetDtStart(EndTimeL());
+// }
+// else
{
aRule.SetDtStart(StartTimeL());
}
--- a/pimappservices/calendar/eabi/caltestlibu.def Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/eabi/caltestlibu.def Thu Jul 22 16:32:51 2010 +0100
@@ -52,4 +52,5 @@
_ZTV15CCalTestLibrary @ 51 NONAME
_ZN15CCalTestLibrary24WaitForAgendaServerCloseEv @ 52 NONAME
_ZN15CCalTestLibrary17WaitForAlarmEventEi17TAlarmChangeEvent11TAlarmStatei @ 53 NONAME
+ _ZN15CCalTestLibrary20CreateCalSubSessionLERK7TDesC16 @ 54 NONAME
--- a/pimappservices/calendar/inc/calchangecallback.h Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/inc/calchangecallback.h Thu Jul 22 16:32:51 2010 +0100
@@ -145,7 +145,9 @@
/** Entry type is event. */
EChangeEntryEvent,
/** All entry types. */
- EChangeEntryAll
+ EChangeEntryAll,
+ /** Entry type is note */
+ EChangeEntryNote
};
/**
--- a/pimappservices/calendar/server/inc/agsentrymodel.h Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/inc/agsentrymodel.h Thu Jul 22 16:32:51 2010 +0100
@@ -212,6 +212,7 @@
TTime TzRulesLastModifiedDateL();
void CheckTzDbModificationL();
void HandleTzRulesChangeL(const TTime& aTime);
+ TBool IsIndexFileAvailableL();
// Calendar file conversion operations
void LoadNewStreamStoreL(CStreamStore& aStore, const TStreamId& aModelStreamId, CAgnEntryManager& aEntryManager, CAgnTzRuleIndex& aTzRuleIndex);
@@ -229,7 +230,7 @@
TBool GenerateIndexFileName(TFileName& aFileName);
TCalCollectionId CollectionId() const;
const CAgnServFile& AgnServFile();
-
+ void ResetDeleteRollbackArray();
private:
void ConstructL(CAgnServFile* aAgnServerFile);
--- a/pimappservices/calendar/server/src/agsalarm.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsalarm.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -680,8 +680,15 @@
else
{
aAlarmInfo.iRecurrenceId = entry->RecurrenceId().UtcL();
- }
- aAlarmInfo.iGlobalIdentifier = iModel->GetEntryGuidL(*entry);
+ }
+
+ // Check the length of the Uid from the entry if it is less than the
+ // the supported length assign it to the aAlarmInfo.
+ // as per the RFC we are supporting 256 chars most of app UID is within this range
+ // in future if anyone supports more than this length we need to handle this here .
+ if (iModel->GetEntryGuidL(*entry).Length() <= KAgnEntryMaxGuidLength)
+ aAlarmInfo.iGlobalIdentifier = iModel->GetEntryGuidL(*entry);
+
CleanupStack::PopAndDestroy(entry);
}
--- a/pimappservices/calendar/server/src/agsasyncdelete.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsasyncdelete.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -246,7 +246,7 @@
CleanupStack::PopAndDestroy(entry);
}
}
-
+ iModel.ResetDeleteRollbackArray();
iTidyDeleteArray->Reset();
iModel.FlushL();
}
@@ -288,7 +288,11 @@
for (TInt i = 0; i < KCount && todelete; ++i)
{
const CAgnSimpleEntry* KChildEntry = iModel.GetSimpleEntryFromIndexes(KChildIds[i].ChildId());
- todelete = FallInTimeRangeL(*KChildEntry);
+ if(KChildEntry != NULL)
+ {
+ todelete = FallInTimeRangeL(*KChildEntry);
+ }
+
}
}
--- a/pimappservices/calendar/server/src/agsattachmentindex.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsattachmentindex.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -281,7 +281,8 @@
{
// check every attachment
const CAgnAttachmentIndexItem* KAttachmentItem = iIndex[i];
- for (TInt j = 0; j < KAttachmentItem->Entries().Count(); ++j)
+ const TInt entryCount = KAttachmentItem->Entries().Count();
+ for (TInt j = 0; j < entryCount; ++j)
{
// check every entry associated with each attachment
if (KEntryLocalUid == (KAttachmentItem->Entries())[j])
--- a/pimappservices/calendar/server/src/agsentrymanager.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsentrymanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -574,7 +574,7 @@
}
CleanupStack::PopAndDestroy();
iLastRestored = type;
- return (count);
+ return (buffer->Count());
}
CAgnEntry* CAgnEntryManager::SearchBuffers(const TAgnEntryId& aEntryId, TInt& aPos)
--- a/pimappservices/calendar/server/src/agsentrymodel.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsentrymodel.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -85,6 +85,10 @@
iAttachmentIndex = new (ELeave) CAgnAttachmentIndex;
CreateAlarmForServerL();
}
+
+ User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError( iFs.ShareProtected() );
+
iIndexFileIsDirty = ETrue; // for safety assume that the index
// file is out of date. We can correct this
// when we read the file
@@ -113,6 +117,7 @@
delete iModelStreamIdSet;
delete iEntryManager;
delete iCalConverter;
+ iFs.Close();
}
const CAgnServFile& CAgnEntryModel::AgnServFile()
@@ -120,6 +125,14 @@
return *iAgnServerFile;
}
+/**
+ * Resets delete rollback array before the callback
+ */
+void CAgnEntryModel::ResetDeleteRollbackArray()
+ {
+ iDeleteRollbackArray.ResetAndDestroy();
+ }
+
/** Load up the stream network
*/
void CAgnEntryModel::DoOpenL(const TStreamId& aModelStreamId)
@@ -503,9 +516,11 @@
_DBGLOG_VERBOSE(AgmDebug::DebugLog("StoreL: Existing entry types is different to incoming entry's type");)
_DBGLOG_VERBOSE(AgmDebug::DebugLog("StoreL: Delete the existing entry and add the incoming entry as a new one");)
- // if the entry is a different type, delete the old entry and add the new one
+ // if the entry is a different type, add the new one first and delete only later
+ // This change is needed if the entry having attachments, it will be shared by two
+ //entries, so that attachments will not be deleted, while deleting it later.
+ returnId = AddEntryL(aEntry);
DeleteEntryL(*existingEntryToReplace, ETrue, iChangeFilter);
- returnId = AddEntryL(aEntry);
}
CleanupStack::PopAndDestroy(existingEntryToReplace);
@@ -1398,22 +1413,16 @@
// file needs to be rebuilt and to no try to delete the file more than once.
void CAgnEntryModel::MarkIndexFileAsDirtyL()
{
- if (iIndexFileIsDirty)
- {
- return; // the file is already marked as dirty
- }
-
- TFileName idxfilename;
- if (!GenerateIndexFileName(idxfilename))
- {
- User::Leave(KErrBadName);
- }
-
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
- iFs.Delete(idxfilename); // ignore return as there is nothing we can do with it
-
+
+ if(IsIndexFileAvailableL())
+ {
+ TFileName idxfilename;
+ if (!GenerateIndexFileName(idxfilename))
+ {
+ User::Leave(KErrBadName);
+ }
+ iFs.Delete(idxfilename); // ignore return as there is nothing we can do with it
+ }
iIndexFileIsDirty = ETrue;
}
@@ -1447,9 +1456,6 @@
User::Leave(KErrBadName);
}
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
RFile idxFile;
TInt errReadIdx = idxFile.Open(iFs, idxfilename, EFileRead);
CleanupClosePushL(idxFile);
@@ -1512,6 +1518,29 @@
return EFalse;
}
+// This method check the index file is exist.
+// It returns:
+// ETrue - File is already exist
+// EFalse - File is not available
+TBool CAgnEntryModel::IsIndexFileAvailableL()
+ {
+ TFileName idxfilename;
+ if (!GenerateIndexFileName(idxfilename))
+ {
+ User::Leave(KErrBadName);
+ }
+
+ RFile idxFile;
+ TInt errReadIdx = idxFile.Open(iFs, idxfilename, EFileRead);
+ CleanupClosePushL(idxFile);
+ if((errReadIdx == KErrNotFound))
+ {
+ CleanupStack::PopAndDestroy();
+ return EFalse;
+ }
+ CleanupStack::PopAndDestroy(&idxFile);
+ return ETrue;
+}
// This method attempts to save all indices to the index file.
// If any errors are encountered it will Leave.
@@ -1524,9 +1553,7 @@
{
User::Leave(KErrBadName);
}
- TInt connectErr = iFs.Connect();
- User::LeaveIfError(connectErr);
-
+
RFile idxFile;
TInt errWriteIdx = idxFile.Replace(iFs, idxfilename, EFileWrite);
User::LeaveIfError(errWriteIdx);
@@ -2678,6 +2705,15 @@
NotifyingL(MCalChangeCallBack2::EChangeModify, aEntry, instanceInfoBefore);
+ if(iChangeFilter && iTzRuleIndex)
+ {
+ //Remove the tz rule from tz rule index
+ //we have to do it after CAgnEntryModel::NotifyingL that is indirectly using the
+ //tz rule in oldEntry.
+ iTzRuleIndex->RemoveTzRuleL(*oldEntry);
+ }
+
+
CleanupStack::PopAndDestroy(instanceInfoBefore);
CleanupStack::PopAndDestroy(oldEntry);
--- a/pimappservices/calendar/server/src/agsfilemanager.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsfilemanager.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -1243,7 +1243,7 @@
}
else
{
- iAgnServer.AlarmServer().SetAlarmStatusForCalendarFile(fileName, EAlarmStatusEnabled);
+ QueueAlarmsImmediately();
}
User::LeaveIfError(iStore->Commit());
--- a/pimappservices/calendar/server/src/agsmain.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agsmain.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -260,6 +260,7 @@
iProxy = CAgnTlsProxy::CreateL(CAgnTlsProxy::TAgnTlsTzRulesType_Server);
User::LeaveIfError(iFs.Connect());
+ User::LeaveIfError( iFs.ShareProtected() );
User::LeaveIfError(iAlarmServer.Connect());
iFileMgr = CAgnServFileMgr::NewL(iFs, *this);
iFileMgr->CreatePermanentDataL();
--- a/pimappservices/calendar/server/src/agssess.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agssess.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -142,7 +142,24 @@
{
return EFalse;
}
-
+
+ // Check for the requested entry type and the change type.
+ // Don't notify clients which are listening for event and
+ // to-do notifictaions when note event is modified.
+ if ( ((iEntryType == MCalChangeCallBack2::EChangeEntryEvent) ||
+ (iEntryType == MCalChangeCallBack2::EChangeEntryTodo)) &&
+ (aChange.iEntryType == CCalEntry::ENote))
+ {
+ return EFalse;
+ }
+
+ // Notify clients which are listening for event type note modifications.
+ if (iEntryType == MCalChangeCallBack2::EChangeEntryNote &&
+ aChange.iEntryType == CCalEntry::ENote)
+ {
+ return ETrue;
+ }
+
// Check the entry is within the time range specified by the filter
// aChange.iRepeatRule gives the repeat data for the newly stored entry. If this operation is an update,
// then aChange.iOriginalRepeatRule gives the repeat data for the old entry.
--- a/pimappservices/calendar/server/src/agstzruleindex.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/server/src/agstzruleindex.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -592,7 +592,7 @@
@param aOldEntry reference to the original entry to be updated.
@param aNewEntry reference to the entry containing updated content.
*/
-void CAgnTzRuleIndex::UpdateTzRuleL(CAgnEntry& aOldEntry, CAgnEntry& aNewEntry)
+void CAgnTzRuleIndex::UpdateTzRuleL(CAgnEntry& /*aOldEntry*/, CAgnEntry& aNewEntry)
{
CAgnTzRules* newTzZone = GetTzRulesFromEntry(aNewEntry);
if (newTzZone != NULL && newTzZone->HasValidTzZoneStreamId())
@@ -620,7 +620,6 @@
AddTzRuleL(aNewEntry);
}
- RemoveTzRuleL(aOldEntry);
}
void CAgnTzRuleIndex::UpdateItemsInStoreL(
--- a/pimappservices/calendar/shared/src/agmcalendarinfo.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/shared/src/agmcalendarinfo.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -121,8 +121,9 @@
EXPORT_C CDesC8Array* CAgnCalendarInfo::PropertyKeysL() const
{
const TInt KPropertyCount(iProperties.Count());
+ const TInt propertyCount = KPropertyCount==0 ? 1 : KPropertyCount;
- CDesC8Array* propertyKeys = new(ELeave) CDesC8ArrayFlat(KPropertyCount);
+ CDesC8Array* propertyKeys = new(ELeave) CDesC8ArrayFlat(propertyCount);
CleanupStack::PushL(propertyKeys);
for (TInt i(0) ; i < KPropertyCount ; ++i)
--- a/pimappservices/calendar/shared/src/agmcalendartime.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/shared/src/agmcalendartime.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -101,6 +101,14 @@
iTime = AgnDateTime::MaxDate();
}
iLocalOffsetInMinutes = KOffsetUnspecified;
+ if ( ! aFloating)
+ {
+ SetFloatingFlag(EFalse);
+ }
+ else
+ {
+ SetFloatingFlag(ETrue);
+ }
}
else
{
--- a/pimappservices/calendar/shared/src/agmrptdef.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/shared/src/agmrptdef.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -2700,8 +2700,16 @@
@internalComponent
*/
{
- delete iRRule;
- delete iTimeZone;
+ if (iRRule)
+ {
+ delete iRRule;
+ iRRule = NULL;
+ }
+ if (iTimeZone)
+ {
+ delete iTimeZone;
+ iTimeZone = NULL;
+ }
ClearTimeArray(iSporadicDates);
ClearTimeArray(iExceptions);
@@ -3885,7 +3893,14 @@
@return The start date expressed as Current System Local Time.
*/
{
- return iOwningEntry.EntryTime();
+ if (iOwningEntry.Type() == CCalEntry::ETodo)
+ {
+ return iOwningEntry.StartTime();
+ }
+ else
+ {
+ return iOwningEntry.EntryTime();
+ }
}
EXPORT_C void CAgnRptDef::SetUntilTime(const TAgnCalendarTime& aUntilTime)
--- a/pimappservices/calendar/shared/src/agmsimpleentry.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/shared/src/agmsimpleentry.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -67,7 +67,11 @@
@internalComponent
*/
{
- delete iRptDef;
+ if (iRptDef)
+ {
+ delete iRptDef;
+ iRptDef = NULL;
+ }
}
@@ -394,8 +398,15 @@
// Ensure that the start date actually falls on a repeating instance. For example,
// if the repeat rule is every Wednesday, and the DtStart is a Monday, it should be
// nudged forwards to the Wednesday of that week.
-
- TTime startTimeUtc = EntryTime().UtcL();
+ TTime startTimeUtc;
+ if (Type() == CCalEntry::ETodo)
+ {
+ startTimeUtc = StartTime().UtcL();
+ }
+ else
+ {
+ startTimeUtc = EntryTime().UtcL();
+ }
startTimeUtc -= TTimeIntervalMicroSeconds(1);
TTime firstInstanceUtc;
@@ -428,7 +439,7 @@
TTime startTime = aNewEntryTimeLocal;
if (Type() == CCalEntry::ETodo)
{
- startTime = DurationMinusL(startTime);
+ //startTime = DurationMinusL(startTime);
}
TAgnCalendarTime startAgnTime;
TAgnCalendarTime endAgnTime;
--- a/pimappservices/calendar/tsrc/caltestlib.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/tsrc/caltestlib.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -21,6 +21,7 @@
#include <caldataexchange.h>
#include <caldataformat.h>
#include <calsession.h>
+#include <calcalendarinfo.h>
#include <calprogresscallback.h>
#include <e32test.h>
#include <consolealarmalertservermain.h>
@@ -120,6 +121,7 @@
void CCalTestLibrary::CloseCalendarSession(TBool aWaitForAgendaToClose)
{
iChunkMutex.Wait();
+ iSubCalSessions.ResetAndDestroy();
delete iSession;
iSession = NULL;
if (iRefCount && (--*iRefCount <= 0) && aWaitForAgendaToClose)
@@ -399,6 +401,16 @@
if (aIsCalFile)
{
+
+ for(TInt i = 0; i < iSubCalSessions.Count();i++)
+ {
+ CCalCalendarInfo* info = iSubCalSessions[i]->CalendarInfoL();
+ HBufC* fileName = info->FileNameL().AllocLC();
+ delete info;
+ iSubCalSessions[i]->DeleteCalFileL(*fileName);
+ CleanupStack::PopAndDestroy(fileName);
+ }
+
iSession->DeleteCalFileL(aFileName);
TInt indx=-1;
if(iDelFileFlag)
@@ -948,4 +960,24 @@
return tickPeriod * durationInTicks;
}
+EXPORT_C RPointerArray<CCalSession>& CCalTestLibrary::CreateCalSubSessionL(const TDesC& aFileName)
+ {
+ CCalSession* session = CCalSession::NewL(*iSession);
+ CCalCalendarInfo* calendarInfo = CCalCalendarInfo::NewL();
+ calendarInfo->SetColor(KRgbRed);
+ calendarInfo->SetNameL(_L("test"));
+ calendarInfo->SetEnabled(ETrue);
+
+ TRAPD(err,session->CreateCalFileL(aFileName,*calendarInfo));
+ if(err == KErrAlreadyExists)
+ {
+ session->DeleteCalFileL(aFileName);
+ session->CreateCalFileL(aFileName,*calendarInfo);
+ }
+ session->OpenL(aFileName);
+ iSubCalSessions.Append(session);
+
+ delete calendarInfo;
+ return iSubCalSessions;
+ }
--- a/pimappservices/calendar/tsrc/caltestlib.h Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/tsrc/caltestlib.h Thu Jul 22 16:32:51 2010 +0100
@@ -105,6 +105,9 @@
// Used to append the file to the delete list
IMPORT_C void RegisterCalFileL(const TDesC& aFileName);
+
+ // Create a calendar file. It leaves if the file exists.
+ IMPORT_C RPointerArray<CCalSession>& CreateCalSubSessionL(const TDesC& aFileName);
// Session and Views handling
@@ -220,6 +223,7 @@
TBool iDelFileFlag;
RMutex iChunkMutex;
RASCliSession iAlarmServer;
+ RPointerArray<CCalSession> iSubCalSessions;
};
--- a/pimappservices/calendar/tsrc/instance_iterator/tcal_fetchinstance.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/tsrc/instance_iterator/tcal_fetchinstance.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -435,8 +435,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance1->Time().TimeLocalL() == instanceTime1.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance1->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance1->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance1->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ TTime newEndTime(endTime.TimeLocalL());
+ TTimeIntervalMinutes deltaMinutes;
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ TTimeIntervalMicroSeconds deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance1->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance1->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance1);
@@ -448,8 +464,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance2->Time().TimeLocalL() == instanceTime2.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance2->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance2->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance2->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance2->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance2->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance2);
@@ -461,8 +493,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance3->Time().TimeLocalL() == instanceTime3.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance3->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance3->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance3->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance3->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance3->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance3);
@@ -474,8 +522,24 @@
test.Printf(_L("test the instance time"));
test(repeatingTodoInstance4->Time().TimeLocalL() == instanceTime4.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(repeatingTodoInstance4->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(repeatingTodoInstance4->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(repeatingTodoInstance4->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(repeatingTodoInstance4->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(repeatingTodoInstance4->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(repeatingTodoInstance4);
@@ -486,8 +550,24 @@
test.Printf(_L("test the instance time"));
test(rDateInstance->Time().TimeLocalL() == rDateTime.TimeLocalL());
test.Printf(_L("test the entry start and end times"));
- test(rDateInstance->Entry().StartTimeL().TimeLocalL() == startTime.TimeLocalL());
- test(rDateInstance->Entry().EndTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ // Modified Start-> if DtStart date is equal to end date then align start date with DtStart date and
+ // end date = end date + duration of the entry.
+ // Thus moving the time window based on DtStart date
+ test(rDateInstance->Entry().StartTimeL().TimeLocalL() == endTime.TimeLocalL());
+
+ newEndTime = endTime.TimeLocalL();
+
+ endTime.TimeLocalL().MinutesFrom(startTime.TimeLocalL(), deltaMinutes);
+ newEndTime += deltaMinutes;
+
+ deltaMicroSeconds =
+ endTime.TimeLocalL().MicroSecondsFrom(startTime.TimeLocalL() + deltaMinutes);
+ newEndTime += deltaMicroSeconds;
+
+ test(rDateInstance->Entry().EndTimeL().TimeLocalL() == newEndTime);
+ //Modified End<-
+
test.Printf(_L("fetch the description"));
test(rDateInstance->Entry().DescriptionL().Compare(KEntryDescription) == 0);
CleanupStack::PopAndDestroy(rDateInstance);
--- a/pimappservices/calendar/tsrc/tcal_dataexchange.cpp Tue Jun 15 15:22:54 2010 +0100
+++ b/pimappservices/calendar/tsrc/tcal_dataexchange.cpp Thu Jul 22 16:32:51 2010 +0100
@@ -133,7 +133,7 @@
_LIT(KSUMMARY, "First Entry");
_LIT(KAttachmentFile, "tcal_datax_attachment.vcs");
_LIT(KAttachmentCidFile, "c:\\calendar_attachments\\tcal_attach.jpg");
-
+_LIT(KCalendarAttachmentsDir, "c:\\private\\10003a5b\\attachments");
_LIT8(KTzEuropeHelsinki, "Europe/Helsinki");
_LIT8(KTzAmericaVancouver, "America/Vancouver");
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/group/bld.inf Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,21 @@
+/*
+* Copyright (c) 2010 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: Includes organizer test code
+*
+*/
+
+#include "../../organizer_plat/tsrc/group/bld.inf"
+#include "../../organizer_pub/tsrc/group/bld.inf"
+
+// End of File.
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/tsrc.pro Thu Jul 22 16:32:51 2010 +0100
@@ -0,0 +1,30 @@
+#
+# Copyright (c) 2009 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:
+# This is the project specification file for organizer test code.
+#
+
+TEMPLATE = subdirs
+SUBDIRS += ../agendainterface/tsrc \
+ ../alarmui/tsrc \
+ ../calendarui/tsrc \
+ ../clock/tsrc \
+ ../notes/tsrc \
+ ../organizer_plat/tsrc \
+ ../organizer_pub/tsrc \
+ ../pimappsupport/tsrc
+
+CONFIG += ordered
+
+# End of file --Don't remove this