--- a/agendainterface/agendautil/agendautil.pro Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/agendautil.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/inc/agendaentry.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/inc/agendautil.h Mon Jun 28 15:22:02 2010 +0530
@@ -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(
@@ -120,6 +120,8 @@
void entryDeleted(ulong id);
void entryUpdated(ulong id);
void entriesDeleted(int status);
+ void entryViewCreationCompleted(int status);
+ void instanceViewCreationCompleted(int status);
private:
friend class AgendaUtilPrivate;
--- a/agendainterface/agendautil/inc/agendautil_p.h Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/inc/agendautil_p.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/src/agendaentry.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/src/agendautil.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/agendautil/src/agendautil_p.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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};
@@ -108,70 +109,24 @@
delete filter;
}
- /*
- // If view creation is in progress, then wait till it gets completed
- if((iCalEntryView && !mEntryViewCreated)
- || (iCalInstanceView && !mInstanceViewCreated))
- {
- if(!iWait)
- {
- TRAP(iError, iWait = new (ELeave) CActiveSchedulerWait;);
- if(!iWait->IsStarted())
- {
- iWait->Start();
- }
- }
+ // First construct the CCalInstanceView if not already available.
+ // The CCalEntryView is constructed in CompletedL. Instance view
+ // is created before entry view since entry view is required only
+ // when editing/saving any entry. So we will construct it later
+ if (!iCalInstanceView) {
+ TRAP (iError, iCalInstanceView = CCalInstanceView::NewL(*iCalSession,
+ *this);)
}
- */
-
- // First construct the CCalEntryView if not already available.
- // The CCalInstanceView is constructed in ::CompletedL. We block the
- // thread here until everything is setup.
- if (!iCalEntryView)
- {
- TRAP(
- iError,
- iCalEntryView = CCalEntryView::NewL(*iCalSession, *this);
- );
- if (!iWait)
- {
- TRAP(
- iError,
- iWait = new (ELeave) CActiveSchedulerWait;
- )
- if (!iWait->IsStarted())
- {
- iWait->Start();
- }
- }
- }
-
- // Comes here only when timer is expired, hence one more
- // check is needed here.
- if (iCalSession && mEntryViewCreated && mInstanceViewCreated)
- {
- // Everything is ready.
- return true;
- }
-
- else
- {
- return false;
- }
+
+ // All the requests have been made
+ return true;
}
AgendaUtilPrivate::~AgendaUtilPrivate()
{
delete iCalEntryView;
delete iCalInstanceView;
- if (iWait && iWait->IsStarted())
- {
- iWait->AsyncStop();
- }
-
- delete iWait;
- if (iCalSession)
- {
+ if (iCalSession) {
iCalSession->StopChangeNotification();
}
delete iCalSession;
@@ -180,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
@@ -188,39 +145,35 @@
emit q->entriesDeleted(iError);
}
- if(KErrNone != iError)
- {
+ if (KErrNone != iError) {
// Something has gone wrong, return
+ if (iCalEntryView && !isEntryViewDeleted) {
+ isEntryViewDeleted = true;
delete iCalEntryView;
iCalEntryView = NULL;
+ }
+ if (iCalInstanceView && !isInstanceViewDeleted) {
+ isInstanceViewDeleted = true;
delete iCalInstanceView;
iCalInstanceView = NULL;
+ }
return;
}
- if(iCalEntryView && !mEntryViewCreated)
- {
- mEntryViewCreated = true;
-
- // Start creating the instance view.
- if(!iCalInstanceView)
- {
- TRAP(iError, iCalInstanceView = CCalInstanceView::NewL(
- *iCalSession, *this);)
+ if (iCalInstanceView && !mInstanceViewCreated) {
+ // Instance view is now created.
+ mInstanceViewCreated = true;
+ emit q->instanceViewCreationCompleted(iError);
+ // Start with the construction of entry view
+ if (!iCalEntryView) {
+ TRAP (iError,
+ iCalEntryView = CCalEntryView::NewL(*iCalSession, *this);
+ );
}
- }
- else if(iCalInstanceView && !mInstanceViewCreated)
- {
- mInstanceViewCreated = true;
- }
-
- // Stop the wait timer
- if( iWait && iWait->IsStarted())
- {
- if(mEntryViewCreated && mInstanceViewCreated)
- {
- iWait->AsyncStop();
- }
+ } else if(iCalEntryView && !mEntryViewCreated) {
+ // Entry view is now constructed
+ mEntryViewCreated = true;
+ emit q->entryViewCreationCompleted(iError);
}
}
@@ -248,25 +201,21 @@
int success = 0;
// First check if the session to the calendar database is prepared or not.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong
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;
@@ -277,7 +226,6 @@
0);
CleanupStack::Pop(globalUid);
- CleanupStack::PushL(newEntry);
// Add description.
TPtrC description(reinterpret_cast<const TUint16*>(
@@ -309,7 +257,7 @@
dtStamp.time().minute(), 0, 0);
TTime creationTTime(creationDateTime);
creationCalTime.SetTimeLocalL(creationTTime);
- //newEntry->SetDTStampL(creationCalTime);
+ newEntry->SetDTStampL(creationCalTime);
// Finally set the entry to the database using the entry view.
entryArray.AppendL(newEntry);
@@ -317,7 +265,6 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
} else {
@@ -325,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(
@@ -344,7 +283,6 @@
0);
CleanupStack::Pop(globalUid);
- CleanupStack::PushL(newEntry);
// Add the summary.
if (!entry.summary().isNull()) {
@@ -443,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);
@@ -467,7 +407,7 @@
const AgendaEntry &entry, AgendaEntry::Type type)
{
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong.
return 0;
}
@@ -497,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;
@@ -519,7 +457,6 @@
globalUid,
static_cast<CCalEntry::TMethod>(entry.method()),
0);
- CleanupStack::PushL(newEntry);
// Add description.
TPtrC description(reinterpret_cast<const TUint16*>(
@@ -535,7 +472,6 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
} else {
@@ -552,7 +488,6 @@
globalUid,
static_cast<CCalEntry::TMethod>(entry.method()),
0);
- CleanupStack::PushL(newEntry);
// Add the summary.
if (!entry.summary().isNull()) {
@@ -651,7 +586,6 @@
localUid = newEntry->LocalUidL();
// Cleanup.
- CleanupStack::PopAndDestroy(newEntry);
CleanupStack::PopAndDestroy(&entryArray);
)
}
@@ -671,7 +605,7 @@
bool AgendaUtilPrivate::deleteEntry(ulong id)
{
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong.
return false;
}
@@ -706,10 +640,9 @@
AgendaEntry& entry,
AgendaUtil::RecurrenceRange range)
{
- qDebug("AgendaUtilPrivate::deleteRepeatedEntry");
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong.
return;
}
@@ -736,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();
}
@@ -766,7 +693,7 @@
bool AgendaUtilPrivate::updateEntry(const AgendaEntry& entry, bool isChild)
{
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong.
return false;
}
@@ -785,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()
@@ -839,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(
@@ -853,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);
}
@@ -878,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);
}
@@ -994,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;
@@ -1006,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);
@@ -1018,7 +940,7 @@
iCalEntryView->StoreL(entryArray, success);
}
// Cleanup.
- CleanupStack::PopAndDestroy(2, calEntry);
+ CleanupStack::PopAndDestroy( &entryArray );
)
}
@@ -1033,7 +955,7 @@
bool copyToChildren)
{
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong.
return false;
}
@@ -1054,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);
@@ -1092,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;
@@ -1122,6 +1045,9 @@
// set it to CCalentry
calEntry->SetGeoValueL(*geoValue);
delete geoValue;
+ } else {
+ // Clear the geo values
+ calEntry->ClearGeoValueL();
}
// set the description
@@ -1199,11 +1125,11 @@
return success;
}
-bool AgendaUtilPrivate::createException(const AgendaEntry& entry)
-{
-
+bool AgendaUtilPrivate::createException(const AgendaEntry& entry,
+ QDateTime instanceOriginalDateTime)
+{
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Something went wrong.
return false;
}
@@ -1226,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,
@@ -1248,7 +1168,6 @@
CleanupStack::Pop(guid);
CleanupStack::PopAndDestroy(calEntry);
- CleanupStack::PushL(newEntry);
// Update the description.
if (!entry.description().isNull()) {
@@ -1285,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(
@@ -1303,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,
@@ -1327,7 +1238,6 @@
CleanupStack::Pop(guid);
CleanupStack::PopAndDestroy(calEntry);
- CleanupStack::PushL(newEntry);
// Store the attendees.
if (!entry.isNull()) {
addAttendeesToEntry(entry.d->m_attendees, *newEntry);
@@ -1435,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);
)
}
@@ -1464,7 +1373,7 @@
AgendaEntry entry;
// First check if the session with the calendar exists.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Return empty AgendaEntry.
return entry;
}
@@ -1500,7 +1409,7 @@
QList<ulong> listOfIds;
// First check if the session with agenda server exists.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Return empty list.
return listOfIds;
}
@@ -1509,7 +1418,7 @@
iError,
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1536,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;
@@ -1561,7 +1464,7 @@
QList<AgendaEntry> entryList;
// First check if the session with agenda server exists.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Return empty list.
return entryList;
}
@@ -1570,7 +1473,7 @@
iError,
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1601,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;
@@ -1619,7 +1516,7 @@
AgendaUtil::FilterFlags filter)
{
QList<AgendaEntry> entryList;
- if(!prepareSession())
+ if(!mInstanceViewCreated)
{
// return empty list
return entryList;
@@ -1628,7 +1525,7 @@
TRAP(iError,
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1661,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;
@@ -1676,7 +1568,13 @@
QDateTime rangeEnd,AgendaUtil::FilterFlags filter, QList<QDate>& dates)
{
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+
+ if(!mInstanceViewCreated) {
+ // return empty list
+ return;
+ }
+
+ CleanupResetAndDestroyPushL(instanceList);
CalCommon::TCalViewFilter filters = filter;
TCalTime startDateForInstanceSearch;
TCalTime endDateForInstanceSearch;
@@ -1704,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();
@@ -1712,52 +1610,106 @@
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,
AgendaUtil::FilterFlags filter )
{
QList<AgendaEntry> entryList;
- if(!prepareSession()) {
+ if(!mInstanceViewCreated) {
// return empty list
return entryList;
}
@@ -1766,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)
@@ -1809,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++)
@@ -1816,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;
@@ -1833,7 +1800,7 @@
int success = -1 ;
// First prepare the session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
return success;
}
@@ -1886,7 +1853,7 @@
const QString& fileName, ulong calendarEntryId)
{
// First prepare session with agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
return false;
}
TRAP(
@@ -1953,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) {
@@ -2022,7 +1987,7 @@
{
AgendaEntry parentEntry;
// First check if the session with the calendar exists.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
// Return empty AgendaEntry.
return entry;
}
@@ -2036,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);
@@ -2064,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);
@@ -2083,7 +2048,7 @@
QDateTime& endTime)
{
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
TCalTime previousStartTime;
TCalTime previousEndTime;
TTime zero(TInt64(0));
@@ -2200,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 {
@@ -2242,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);
}
@@ -2273,7 +2249,7 @@
QDateTime& endTime)
{
RPointerArray<CCalEntry> entries;
- CleanupClosePushL(entries);
+ CleanupResetAndDestroyPushL(entries);
TCalTime nextStartTime;
TCalTime nextEndTime;
TTime zero(TInt64(0));
@@ -2387,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 {
@@ -2432,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);
}
@@ -2458,10 +2446,15 @@
*/
bool AgendaUtilPrivate::areNoEntriesInCalendar()
{
+ // First prepare the session with the agenda server.
+ if (!mInstanceViewCreated) {
+ return false;
+ }
+
bool isEmpty;
// Query for the entries for entire range
RPointerArray<CCalInstance> instanceList;
- CleanupClosePushL(instanceList);
+ CleanupResetAndDestroyPushL(instanceList);
// Create the filter
CalCommon::TCalViewFilter filters = AgendaUtil::IncludeAnniversaries
@@ -2498,7 +2491,9 @@
} else {
isEmpty = true;
}
- CleanupStack::PopAndDestroy();
+
+ // Cleanup
+ CleanupStack::PopAndDestroy( &instanceList );
return isEmpty;
}
@@ -2662,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;
@@ -2690,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;
@@ -2710,7 +2702,6 @@
static_cast<AgendaCategory::CategoryType>(categoryType));
entry.addCategory(category);
}
- CleanupStack::PopAndDestroy(&calCategories);
// Id.
entry.d->m_id = calEntry.LocalUidL();
@@ -2846,7 +2837,7 @@
const QList<AgendaAttendee>& attendees, CCalEntry& entry)
{
// First prepare the session with the agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
return false;
}
@@ -2878,7 +2869,7 @@
const QList<AgendaCategory>& categories, CCalEntry& entry)
{
// First prepare the session with the agenda server.
- if (!prepareSession()) {
+ if (!mInstanceViewCreated) {
return false;
}
TRAP(
@@ -2984,7 +2975,7 @@
CCalInstance* AgendaUtilPrivate::findPossibleInstance(AgendaEntry& entry)
{
- if(!prepareSession()) {
+ if(!mInstanceViewCreated) {
// return empty list
return NULL;
}
@@ -2992,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());
@@ -3412,7 +3403,7 @@
const CalCommon::TCalTimeRange& timeRange)
{
RPointerArray<CCalInstance> allInstances;
- CleanupClosePushL( allInstances );
+ CleanupResetAndDestroyPushL(allInstances);
TInt filter;
// Get the entry type to be filtered
@@ -3461,7 +3452,7 @@
const CalCommon::TCalTimeRange& timeRange)
{
RPointerArray<CCalInstance> allInstances;
- CleanupClosePushL( allInstances );
+ CleanupResetAndDestroyPushL(allInstances);
TInt filter;
// Get the entry type to be filtered
@@ -3702,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
{
@@ -3724,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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,181 +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)
-
--- a/agendainterface/eabi/agendainterfaceu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,209 +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
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/inc/CleanupResetAndDestroy.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- a/agendainterface/inc/agendautil.h Mon May 03 12:30:32 2010 +0300
+++ b/agendainterface/inc/agendautil.h Mon Jun 28 15:22:02 2010 +0530
@@ -106,18 +106,22 @@
QDateTime& endTime);
void getNextInstanceTimes(AgendaEntry& entry, QDateTime& startTime,
QDateTime& endTime);
-
+ void markDatesWithEvents(QDateTime rangeStart, QDateTime rangeEnd,
+ AgendaUtil::FilterFlags filter, QList<QDate>& dates);
+ bool areNoEntriesInCalendar();
static QDateTime minTime();
static QDateTime maxTime();
-
+
static bool isWorkdaysRepeatingEntry(const AgendaRepeatRule& repeatRule);
-
+
Q_SIGNALS:
void entriesChanged(QList<ulong> ids);
void entryAdded(ulong id);
void entryDeleted(ulong id);
void entryUpdated(ulong id);
void entriesDeleted(int status);
+ void entryViewCreationCompleted(int status);
+ void instanceViewCreationCompleted(int status);
private:
friend class AgendaUtilPrivate;
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/agendainterface/tsrc/tsrc.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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/BWINS/ALMALERTU.DEF Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+ ?NewAlarm@@YAPAVMAlarmObserver@@XZ @ 1 NONAME ; class MAlarmObserver * NewAlarm(void)
+
--- a/alarmui/BWINS/ALMALERTu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
- ?NewAlarm@@YAPAVMAlarmObserver@@XZ @ 1 NONAME ; class MAlarmObserver * NewAlarm(void)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/BWINS/AknAlarmServiceU.DEF Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+ ?Entry@@YAPAVMAknAlarmServiceStartup@@XZ @ 1 NONAME ; class MAknAlarmServiceStartup * Entry(void)
+
--- a/alarmui/BWINS/AknAlarmServiceu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
- ?Entry@@YAPAVMAknAlarmServiceStartup@@XZ @ 1 NONAME ; class MAknAlarmServiceStartup * Entry(void)
-
--- a/alarmui/DataSrc/AlmAlert.rss Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/DataSrc/AlmAlert.rss Mon Jun 28 15:22:02 2010 +0530
@@ -21,7 +21,7 @@
NAME ALRT
#include <eikon.rh>
-#include <almalert.loc>
+#include <AlmAlert.loc>
#include "AlmAlertVariant.hrh"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/EABI/AknAlarmServiceU.DEF Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z5Entryv @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/EABI/AlmAlertU.DEF Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z8NewAlarmv @ 1 NONAME
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/alarmalertwidget/alarmalertinterface/bwins/alarmalertwidgetu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertinterface/inc/alarmalertwidget.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertinterface/inc/alarmalertwrapper.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwidget.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertinterface/src/alarmalertwrapper.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertplugin/alarmalertplugin.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertplugin/data/alarmalert.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/alarmalertwidget/alarmalertplugin/data/xml/alarmalert_calendar_unlocked.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,115 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.0">
+ <object name="snoozeAction" type="HbAction">
+ <string name="role" value="HbDialog:primaryAction"/>
+ <string locid="txt_calendar_button_alarm_snooze" name="text" value="Snooze"/>
+ </object>
+ <object name="stopAction" type="HbAction">
+ <string name="role" value="HbDialog:secondaryAction"/>
+ <string locid="txt_calendar_button_alarm_dialog_snooze" name="text" value="Stop"/>
+ </object>
+ <widget name="dialog" type="HbDialog">
+ <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
+ <enums name="alignment" value="AlignLeft|AlignLeading"/>
+ <string locid="txt_calendar_title_calendar_alarm" name="plainText" value="Calendar alarm"/>
+ </widget>
+ <widget name="container" role="HbDialog:contentWidget" type="HbWidget">
+ <widget name="alarmTime" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="1"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="MINIMUM"/>
+ <string locid="txt_calendar_info_alarm_start_time" name="plainText" value="9:00 am"/>
+ </widget>
+ <widget name="alarmDate" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="2"/>
+ <sizehint height="var(hb-param-text-height-secondary)" type="PREFERRED"/>
+ <string locid="txt_calendar_info_alarm_start_date" name="plainText" value="01/01/2010"/>
+ </widget>
+ <widget name="alarmDescription" type="HbLabel">
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="3"/>
+ <sizehint height="8un" type="PREFERRED"/>
+ <sizehint height="8un" type="MINIMUM"/>
+ <sizehint height="8un" type="MAXIMUM"/>
+ <string name="textFormat" value="PlainText"/>
+ </widget>
+ <widget name="alarmLocation" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="4"/>
+ <sizehint height="var(hb-param-text-height-secondary)" type="PREFERRED"/>
+ </widget>
+ <widget name="alarmIcon" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <icon iconName="qtg_large_calendar_alarm" name="icon"/>
+ <real name="z" value="5"/>
+ <sizehint height="15un" type="PREFERRED" width="15un"/>
+ </widget>
+ <widget name="nonTimedAlarmDate" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="1"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="MINIMUM"/>
+ <string locid="txt_calendar_info_alarm_start_date" name="plainText" value="01/01/2010"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="alarmTime" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmTime" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="TOP"/>
+ <anchoritem dst="alarmTime" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmDate" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDate" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmTime" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmDate" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmDescription" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDescription" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmDate" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmDescription" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmLocation" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmLocation" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmDescription" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmLocation" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmIcon" dstEdge="LEFT" spacing="17.5un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmIcon" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmLocation" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmIcon" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <ref object="snoozeAction" role="HbDialog:primaryAction"/>
+ <ref object="stopAction" role="HbDialog:secondaryAction"/>
+ </widget>
+ <section name="calendarTimed"/>
+ <section name="nonTimedAlarm">
+ <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
+ <string locid="txt_calendar_title_calendar_alarm" name="plainText" value="Calendar alarm"/>
+ </widget>
+ <widget name="nonTimedAlarmDate" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="1"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="MINIMUM"/>
+ <string locid="txt_calendar_info_alarm_start_date" name="plainText" value="01/01/2010"/>
+ </widget>
+ <widget name="container" role="HbDialog:contentWidget" type="HbWidget">
+ <layout type="anchor">
+ <anchoritem dst="alarmTime" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmTime" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="TOP"/>
+ <anchoritem dst="alarmTime" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmDate" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDate" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmTime" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmDate" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmDescription" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDescription" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="nonTimedAlarmDate" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmDescription" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmLocation" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmLocation" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmDescription" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmLocation" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="nonTimedAlarmDate" dstEdge="LEFT" spacing="expr(var(hb-param-margin-gene-popup) )" src="" srcEdge="LEFT"/>
+ <anchoritem dst="nonTimedAlarmDate" dstEdge="TOP" spacing="expr(var(hb-param-margin-gene-popup) )" src="" srcEdge="TOP"/>
+ <anchoritem dst="nonTimedAlarmDate" dstEdge="RIGHT" spacing="expr(-var(hb-param-margin-gene-popup) )" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmIcon" dstEdge="LEFT" spacing="17.5un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmIcon" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmLocation" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmIcon" dstEdge="BOTTOM" spacing="expr(-var(hb-param-margin-gene-popup) )" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ </section>
+ <metadata activeUIState="nonTimedAlarm" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="calendarTimed" sections="#common calendarTimed"/>
+ <uistate name="nonTimedAlarm" sections="#common nonTimedAlarm"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/alarmalertwidget/alarmalertplugin/data/xml/alarmalert_clock_unlocked.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,57 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.0">
+ <object name="snoozeAction" type="HbAction">
+ <string name="role" value="HbDialog:primaryAction"/>
+ <string locid="txt_calendar_button_alarm_snooze" name="text" value="Snooze"/>
+ </object>
+ <object name="stopAction" type="HbAction">
+ <string name="role" value="HbDialog:secondaryAction"/>
+ <string locid="txt_calendar_button_alarm_dialog_snooze" name="text" value="Stop"/>
+ </object>
+ <widget name="dialog" type="HbDialog">
+ <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
+ <enums name="alignment" value="AlignLeft|AlignLeading"/>
+ <string locid="txt_calendar_title_clock_alarm" name="plainText" value="Clock alarm"/>
+ </widget>
+ <widget name="container" role="HbDialog:contentWidget" type="HbWidget">
+ <widget name="alarmTime" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="1"/>
+ <sizehint height="10un" type="MINIMUM"/>
+ <fontspec name="fontSpec" role="Primary" textheight="9.8un"/>
+ <string locid="txt_calendar_info_alarm_start_time" name="plainText" value="9:00 am"/>
+ </widget>
+ <widget name="alarmDescription" type="HbLabel">
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="3"/>
+ <sizehint height="7un" type="PREFERRED"/>
+ <sizehint height="7un" type="MINIMUM"/>
+ <sizehint height="7un" type="MAXIMUM"/>
+ <string name="textFormat" value="PlainText"/>
+ </widget>
+ <widget name="alarmIcon" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <icon iconName=":/image/clockAlarm.svg" name="icon"/>
+ <real name="z" value="5"/>
+ <sizehint height="15un" type="PREFERRED" width="15un"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="alarmTime" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmTime" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="TOP"/>
+ <anchoritem dst="alarmTime" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmDescription" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDescription" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmTime" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmDescription" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmIcon" dstEdge="LEFT" spacing="17.5un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmIcon" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmDescription" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmIcon" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <ref object="snoozeAction" role="HbDialog:primaryAction"/>
+ <ref object="stopAction" role="HbDialog:secondaryAction"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/alarmalertwidget/alarmalertplugin/data/xml/alarmalert_todo_unlocked.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,56 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.0">
+ <object name="snoozeAction" type="HbAction">
+ <string name="role" value="HbDialog:primaryAction"/>
+ <string locid="txt_calendar_button_alarm_snooze" name="text" value="Snooze"/>
+ </object>
+ <object name="stopAction" type="HbAction">
+ <string name="role" value="HbDialog:secondaryAction"/>
+ <string locid="txt_calendar_button_alarm_dialog_snooze" name="text" value="Stop"/>
+ </object>
+ <widget name="dialog" type="HbDialog">
+ <widget name="heading" role="HbDialog:headingWidget" type="HbLabel">
+ <enums name="alignment" value="AlignLeft|AlignLeading"/>
+ <string locid="txt_calendar_title_todo_note_alarm" name="plainText" value="To-do note"/>
+ </widget>
+ <widget name="container" role="HbDialog:contentWidget" type="HbWidget">
+ <widget name="alarmDate" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="2"/>
+ <sizehint height="var(hb-param-text-height-primary)" type="PREFERRED"/>
+ <string locid="txt_calendar_info_alarm_start_date" name="plainText" value="01/01/2010"/>
+ </widget>
+ <widget name="alarmDescription" type="HbLabel">
+ <enums name="textWrapping" value="TextWordWrap"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="3"/>
+ <sizehint height="16un" type="PREFERRED"/>
+ <sizehint height="16un" type="MINIMUM"/>
+ <sizehint height="16un" type="MAXIMUM"/>
+ <string name="textFormat" value="PlainText"/>
+ </widget>
+ <widget name="alarmIcon" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <icon iconName="qtg_large_todo_alarm" name="icon"/>
+ <real name="z" value="5"/>
+ <sizehint height="15un" type="PREFERRED" width="15un"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="alarmDate" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDate" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="TOP"/>
+ <anchoritem dst="alarmDate" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmDescription" dstEdge="LEFT" spacing="var(hb-param-margin-gene-popup)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmDescription" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmDate" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmDescription" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmIcon" dstEdge="LEFT" spacing="17.5un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="alarmIcon" dstEdge="TOP" spacing="var(hb-param-margin-gene-popup)" src="alarmDescription" srcEdge="BOTTOM"/>
+ <anchoritem dst="alarmIcon" dstEdge="BOTTOM" spacing="-var(hb-param-margin-gene-popup)" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <ref object="snoozeAction" role="HbDialog:primaryAction"/>
+ <ref object="stopAction" role="HbDialog:secondaryAction"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- a/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalert.h Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalert.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertplugin/inc/alarmalertwidget_p.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertplugin/src/alarmalertplugin.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/alarmalertwidget/alarmalertplugin/src/alarmalertwidget_p.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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/eabi/AknAlarmServiceu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
- _Z5Entryv @ 1 NONAME
-
--- a/alarmui/eabi/AlmAlertu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
- _Z8NewAlarmv @ 1 NONAME
-
--- a/alarmui/src/AlmAlarmControl.cpp Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/src/AlmAlarmControl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/src/alarmutils.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 )
{
--- a/alarmui/stubsis/alarmui_stub.pkg Mon May 03 12:30:32 2010 +0300
+++ b/alarmui/stubsis/alarmui_stub.pkg Mon Jun 28 15:22:02 2010 +0530
@@ -1,27 +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 Alarm UIfor IAD.
-;
-
-; Language
-&EN
-
-; Header
-#{"AlarmUI"}, (0x1000599E), 1, 0, 0, TYPE=SA
-
-; Localised vendor name
-%{"Nokia"}
-
-; Unique vendor name
-:"Nokia"
+;
+; 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 Alarm UIfor IAD.
+;
+
+; Language
+&EN
+
+; Header
+#{"AlarmUI"}, (0x1000599E), 1, 0, 0, TYPE=SA
+
+; Localised vendor name
+%{"Nokia"}
+
+; Unique vendor name
+:"Nokia"
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/alarmui/tsrc/tsrc.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/agendaeventviewer.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 *)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/agendaeventviewer/data/agendaeventviewer.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,54 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <widget name="eventViewer" type="HbView">
+ <widget name="content" role="HbView:widget" type="HbWidget">
+ <widget name="groupBox" type="HbGroupBox">
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ <string locid="txt_calendar_subhead_event" name="heading" value="Event"/>
+ </widget>
+ <widget name="scrollArea" type="HbScrollArea">
+ <widget name="scrollAreaContents" role="HbScrollArea:contents" type="HbWidget">
+ <widget name="subjectWidget" type="HbWidget"/>
+ <widget name="dateTimeWidget" type="HbWidget"/>
+ <widget name="locationWidget" type="HbWidget"/>
+ <widget name="reminderWidget" type="HbWidget"/>
+ <widget name="repeatWidget" type="HbWidget"/>
+ <widget name="descriptionWidget" type="HbWidget"/>
+ <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"/>
+ <linearitem itemname="dateTimeWidget"/>
+ <linearitem itemname="locationWidget"/>
+ <linearitem itemname="maptileWidget"/>
+ <linearitem itemname="reminderWidget"/>
+ <linearitem itemname="repeatWidget"/>
+ <linearitem itemname="descriptionWidget"/>
+ </layout>
+ </widget>
+ <enums name="verticalScrollBarPolicy" value="ScrollBarAutoHide"/>
+ <enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <real name="z" value="1"/>
+ <enums name="clampingStyle" value="StrictClamping"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="groupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="groupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="groupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="scrollArea" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="scrollArea" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="scrollArea" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="scrollArea" dstEdge="TOP" spacing="0un" src="groupBox" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <widget name="viewerMenu" role="HbView:menu" type="HbMenu"/>
+ <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar"/>
+ <string locid="txt_calendar_title_calendar" name="title" value="Calendar"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="QHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- a/calendarui/agendaeventviewer/data/agendaeventviewer.qrc Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/data/agendaeventviewer.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/data/agendaeventvieweritem.css Mon Jun 28 15:22:02 2010 +0530
@@ -1,3 +1,14 @@
+
+AgendaEventViewerItem[leftPrimaryIconItem="true"]:portrait {
+ layout: layout-eventvieweritem-stretch;
+ fixed-width: var(hb-param-screen-width);
+}
+
+AgendaEventViewerItem[leftPrimaryIconItem="true"]:landscape {
+ layout: layout-eventvieweritem-stretch;
+ fixed-width: var(hb-param-screen-width);
+}
+
AgendaEventViewerItem:portrait {
layout: layout-eventvieweritem;
@@ -9,7 +20,17 @@
fixed-width: var(hb-param-screen-width);
}
-AgendaEventViewerItem::primaryIconItem {
+
+AgendaEventViewerItem::primaryLeftIconItem {
+ fixed-width:var(hb-param-graphic-size-primary-small);
+ fixed-height:var(hb-param-graphic-size-primary-small);
+ top: -var(hb-param-margin-gene-top);
+ left: -var(hb-param-margin-gene-left);
+
+
+}
+
+AgendaEventViewerItem::primaryRightIconItem {
fixed-width:var(hb-param-graphic-size-secondary);
fixed-height:var(hb-param-graphic-size-secondary);
top: -var(hb-param-margin-gene-top);
@@ -20,24 +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);
+
}
-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::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 {
+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);
- left: -var(hb-param-margin-gene-middle-horizontal);
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);
+}
--- a/calendarui/agendaeventviewer/data/agendaeventvieweritem.widgetml Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/data/agendaeventvieweritem.widgetml Mon Jun 28 15:22:02 2010 +0530
@@ -16,4 +16,26 @@
<meshitem src="secondaryTextItem" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
</layout>
-</hbwidget>
+
+ <layout name="layout-eventvieweritem-stretch" type="mesh">
+
+
+ <meshitem src="primaryLeftIconItem" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="primaryLeftIconItem" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+
+ <meshitem src="primaryTextItem" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="primaryTextItem" srcEdge="LEFT" dst="primaryLeftIconItem" dstEdge="RIGHT" />
+
+ <meshitem src="primaryRightIconItem" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="primaryRightIconItem" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="secondaryIconItem" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="secondaryIconItem" srcEdge="TOP" dst="secondaryTextItem" dstEdge="TOP" />
+
+ <meshitem src="secondaryTextItem" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
+ <meshitem src="secondaryTextItem" srcEdge="TOP" dst="primaryTextItem" dstEdge="BOTTOM" />
+ <meshitem src="secondaryTextItem" srcEdge="LEFT" dst="primaryTextItem" dstEdge="LEFT" />
+ <meshitem src="secondaryTextItem" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ </layout>
+</hbwidget>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/agendaeventviewer/data/agendaeventvieweritem_color.css Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/inc/agendaeventview.h Mon Jun 28 15:22:02 2010 +0530
@@ -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
@@ -71,8 +73,9 @@
void removeAllWidgets();
void addAllWidgets();
void showDeleteOccurencePopup();
- int showDeleteConfirmationQuery();
-
+ void showDeleteConfirmationQuery();
+ void getSubjectIcon(AgendaEntry::Type type, QString &subjectIcon);
+ void getProgressIndicatorstatus(QString &progressIcon);
private slots:
void markTodoStatus();
void edit();
@@ -84,9 +87,13 @@
void handleNoteEditorClosed(bool status);
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;
@@ -102,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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/inc/agendaeventviewer_p.h Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/agendaeventvieweritem.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/inc/agendaeventvieweritem.h Mon Jun 28 15:22:02 2010 +0530
@@ -43,6 +43,8 @@
HbTextItem *mSecondaryText;
HbIconItem *mPrimaryIcon;
HbIconItem *mSecondaryIcon;
+ HbIconItem *mPrimaryRightIcon;
+ HbIconItem *mPrimaryLeftIcon;
};
--- a/calendarui/agendaeventviewer/src/agendaeventview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/src/agendaeventview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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,18 +52,14 @@
#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");
+
/*!
\class AgendaEventView.
@@ -81,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;
@@ -113,6 +106,9 @@
mSubjectWidget = qobject_cast<AgendaEventViewerItem *> (
mDocLoader->findWidget(AGENDA_EVENT_VIEWER_SUBJECT_WIDGET));
+ //load layout that supports icon before subject label
+ mSubjectWidget->setProperty(primaryLeftIconItem,true);
+
mDateTimeWidget = qobject_cast<AgendaEventViewerItem *> (
mDocLoader->findWidget(AGENDA_EVENT_VIEWER_DATE_TIME_WIDGET));
@@ -139,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 <--";
}
@@ -153,10 +155,8 @@
*/
AgendaEventView::~AgendaEventView()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::~AgendaEventView -->";
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -164,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;
+ }
+
}
/*!
@@ -182,7 +198,6 @@
void AgendaEventView::execute(AgendaEntry entry,
AgendaEventViewer::Actions action)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::execute -->";
mOriginalAgendaEntry = entry;
mAgendaEntry = entry;
@@ -198,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.
@@ -222,18 +234,19 @@
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
- mBackAction = new HbAction(Hb::BackAction);
+ mBackAction = new HbAction(Hb::BackNaviAction);
mViewer->setNavigationAction(mBackAction);
connect(mBackAction, SIGNAL(triggered()), this, SLOT(close()));
- qDebug() << "AgendaEventViewer: AgendaEventView::execute <--";
}
/*!
@@ -241,7 +254,9 @@
*/
void AgendaEventView::addViewerData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addViewerData -->";
+
+ // Add the title to event viewer.
+ addGroupBoxData();
// Set the summary & priority to viewer.
addSubjectAndPriorityData();
@@ -274,7 +289,6 @@
// Set the description.
addDescriptionData();
- qDebug() << "AgendaEventViewer: AgendaEventView::addViewerData <--";
}
/*!
@@ -282,7 +296,6 @@
*/
void AgendaEventView::addMenuItem()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addMenuItem -->";
if (mAgendaEntry.type() == AgendaEntry::TypeTodo) {
@@ -300,7 +313,6 @@
SLOT(markTodoStatus()));
menu->addAction(mMarkTodoAction);
}
- qDebug() << "AgendaEventViewer: AgendaEventView::addMenuItem <--";
}
/*!
@@ -308,7 +320,6 @@
*/
void AgendaEventView::addToolBarItem(AgendaEventViewer::Actions action)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addToolBarItem -->";
HbToolBar *toolBar = qobject_cast<HbToolBar *> (
mDocLoader->findWidget(AGENDA_EVENT_VIEWER_TOOLBAR));
@@ -339,7 +350,6 @@
toolBar->addAction(saveAction);
}
- qDebug() << "AgendaEventViewer: AgendaEventView::addToolBarItem <--";
}
/*!
@@ -347,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 <--";
+
}
/*!
@@ -369,8 +378,6 @@
*/
void AgendaEventView::addSubjectAndPriorityData()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addSubjectAndPriorityData -->";
QStringList itemList;
itemList.append(hbTrId("txt_calendar_dblist_subject"));
@@ -383,16 +390,17 @@
mSubjectWidget->setEventViewerItemData(itemList, Qt::DisplayRole);
- itemList.clear();
- QString priorityIcon(QString::null);
- getPriorityIcon(mAgendaEntry.priority(), priorityIcon);
- itemList.append(priorityIcon);
- itemList.append(QString::null);
+ itemList.clear();
+ QString priorityIcon(QString::null);
+ QString subjectIcon(QString::null);
+ getPriorityIcon(mAgendaEntry.priority(), priorityIcon);
+ getSubjectIcon(mAgendaEntry.type(),subjectIcon);
+ itemList.append(subjectIcon);
+ itemList.append(priorityIcon);
+ itemList.append(QString::null);
mSubjectWidget->setEventViewerItemData(itemList, Qt::DecorationRole);
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addSubjectAndPriorityData <--";
}
/*!
@@ -400,9 +408,6 @@
*/
void AgendaEventView::addDateTimeData()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addDateTimeData -->";
-
QStringList itemData;
HbExtendedLocale systemLocale = HbExtendedLocale::system();
@@ -410,7 +415,11 @@
QDateTime endDateTime = mAgendaEntry.endTime();
itemData.append(QString::null);
+ itemData.append(QString::null);
itemData.append("qtg_small_calendar");
+
+ mDateTimeWidget->setProperty(primaryLeftIconItem, false);
+
mDateTimeWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
itemData.clear();
itemData.append(QString::null);
@@ -461,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));
@@ -480,8 +488,6 @@
itemData.append(data);
mDateTimeWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug()
- << "AgendaEventViewer: AgendaEventView::addDateTimeData <--";
}
/*!
@@ -489,16 +495,28 @@
*/
void AgendaEventView::addLocationData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addLocationData -->";
QStringList itemData;
- itemData.append(QString::null);
- itemData.append("qtg_small_location");
+ 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 <--";
}
/*!
@@ -506,70 +524,42 @@
*/
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.svg").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("qtg_small_reminder");
+ itemData.append(QString::null);
+ itemData.append("qtg_small_reminder");
+ mReminderWidget->setProperty(primaryLeftIconItem, false);
mReminderWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
itemData.clear();
itemData.append(QString::null);
itemData.append(alarmTimeText());
mReminderWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addReminderData <--";
-}
+ }
/*!
Add completed to-do data to Event viewer
*/
void AgendaEventView::addCompletedTodoData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addCompletedTodoData -->";
QStringList itemData;
QString completedText;
- HbExtendedLocale systemLocale = HbExtendedLocale::system();;
-
+ HbExtendedLocale systemLocale = HbExtendedLocale::system();;
+ itemData.append(QString::null);
itemData.append(QString::null);
itemData.append(QString::null);
+ mReminderWidget->setProperty(primaryLeftIconItem, false);
mReminderWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
itemData.clear();
completedText = systemLocale.format(mAgendaEntry.completedDateTime().date(),
@@ -577,7 +567,6 @@
itemData.append(hbTrId("txt_calendar_dblist_completed_date"));
itemData.append(completedText);
mReminderWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addCompletedTodoData <--";
}
/*!
@@ -585,16 +574,16 @@
*/
void AgendaEventView::addRepeatData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addRepeatData -->";
QStringList itemData;
itemData.append(QString::null);
- itemData.append("qtg_mono_repeat.svg");
+ itemData.append(QString::null);
+ 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 <--";
}
/*!
@@ -602,16 +591,16 @@
*/
void AgendaEventView::addDescriptionData()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addDiscriptionData -->";
QStringList itemData;
itemData.append(QString::null);
itemData.append(QString::null);
+ itemData.append(QString::null);
+ mDescriptionWidget->setProperty(primaryLeftIconItem, false);
mDescriptionWidget->setEventViewerItemData(itemData, Qt::DecorationRole);
itemData.clear();
itemData.append(hbTrId("txt_calendar_dblist_description"));
itemData.append(mAgendaEntry.description());
mDescriptionWidget->setEventViewerItemData(itemData, Qt::DisplayRole);
- qDebug() << "AgendaEventViewer: AgendaEventView::addDiscriptionData <--";
}
/*!
@@ -619,7 +608,6 @@
*/
void AgendaEventView::getPriorityIcon(int priority, QString &priorityIcon)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::getPriorityIcon -->";
switch(priority) {
case 1:priorityIcon.append("qtg_small_priority_high");
@@ -630,7 +618,6 @@
break;
}
- qDebug() << "AgendaEventViewer: AgendaEventView::getPriorityIcon <--";
}
/*!
@@ -638,7 +625,6 @@
*/
QString AgendaEventView::repeatRule() const
{
- qDebug() << "AgendaEventViewer: AgendaEventView::repeatRule -->";
QString repeatRule;
AgendaRepeatRule agendaRepeatRule = mAgendaEntry.repeatRule();
@@ -650,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(
@@ -682,7 +667,6 @@
hbTrId("txt_calendar_dblist_repeats_daily_val_until_1").
arg(untilDateString));
}
- qDebug() << "AgendaEventViewer: AgendaEventView::repeatRule <--";
return repeatRule;
}
@@ -694,7 +678,6 @@
*/
QString AgendaEventView::alarmTimeText() const
{
- qDebug() << "AgendaEventViewer: AgendaEventView::alarmTimeText -->";
QString alarmDateTimeText;
QDateTime startTime;
@@ -719,7 +702,6 @@
r_qtn_date_usual_with_zero)));
}
- qDebug() << "AgendaEventViewer: AgendaEventView::alarmTimeText <--";
return alarmDateTimeText;
}
@@ -728,7 +710,6 @@
*/
void AgendaEventView::removeWidget()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::removeWidget -->";
if (mAgendaEntry.location().isEmpty()) {
mLocationWidget->hide();
@@ -742,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;
@@ -770,7 +752,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug() << "AgendaEventViewer: AgendaEventView::removeWidget <--";
}
/*!
@@ -778,8 +759,6 @@
*/
void AgendaEventView::updateCompletedReminderData()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::updateCompletedReminderData -->";
if (AgendaEntry::TodoCompleted == mAgendaEntry.status()) {
addCompletedTodoData();
@@ -809,8 +788,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug()
- << "AgendaEventViewer: AgendaEventView::updateCompletedReminderData <--";
}
/*!
@@ -818,7 +795,6 @@
*/
void AgendaEventView::removeAllWidgets()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::removeAllWidgets -->";
for (int i = 2; i < mLinearLayout->count(); i++) {
mLinearLayout->removeAt(i);
@@ -826,7 +802,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug() << "AgendaEventViewer: AgendaEventView::removeAllWidgets <--";
}
/*!
@@ -834,7 +809,6 @@
*/
void AgendaEventView::addAllWidgets()
{
- qDebug() << "AgendaEventViewer: AgendaEventView::addAllWidgets -->";
mLinearLayout->addItem(mLocationWidget);
mLocationWidget->show();
@@ -850,7 +824,6 @@
mLinearLayout->invalidate();
mLinearLayout->activate();
- qDebug() << "AgendaEventViewer: AgendaEventView::addAllWidgets <--";
}
/*!
@@ -858,11 +831,10 @@
*/
void AgendaEventView::showDeleteOccurencePopup()
{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteOccurencePopup -->";
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
HbWidget *deleteWidget = new HbWidget(mViewer);
@@ -872,84 +844,88 @@
QStringList list;
list << hbTrId("txt_calendar_info_this_occurrence_only")
- << hbTrId("txt_calendar_info_all_occurences");
+ << hbTrId("txt_calendar_info_all_occurences");
deleteButtonList->setItems(list);
layout->addItem(deleteButtonList);
- popUp.setContentWidget(deleteWidget);
- popUp.setHeadingWidget(new HbLabel(
- hbTrId("txt_calendar_title_delete_repeated_entry")));
+ popUp->setContentWidget(deleteWidget);
+ popUp->setHeadingWidget(new HbLabel(
+ hbTrId("txt_calendar_title_delete_repeated_entry")));
connect(deleteButtonList, SIGNAL(itemSelected(int)), this,
- SLOT(handleDeleteOccurence(int)));
- connect(deleteButtonList, SIGNAL(itemSelected(int)), &popUp, SLOT(close()));
+ SLOT(handleDeleteOccurence(int)));
+ connect(deleteButtonList, SIGNAL(itemSelected(int)), popUp, SLOT(close()));
- // Create secondary action
- HbAction *cancelAction = new HbAction(
- hbTrId("txt_calendar_button_softkey1_cancel"));
- popUp.setSecondaryAction(cancelAction);
- connect(cancelAction, SIGNAL(triggered()), &popUp, SLOT(close()));
+ popUp->addAction(new HbAction(
+ hbTrId("txt_calendar_button_softkey1_cancel")));
// Show the popup
- popUp.exec();
+ popUp->open();
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteOccurencePopup <--";
}
-
/*!
- * Show delete confirmation query
+ Show delete confirmation query
*/
-int AgendaEventView::showDeleteConfirmationQuery()
-{
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteConfirmationQuery -->";
- int retStatus = 0;
+void AgendaEventView::showDeleteConfirmationQuery()
+ {
+
+ HbMessageBox *popup = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+ popup->setDismissPolicy(HbDialog::NoDismiss);
+ popup->setTimeout(HbDialog::NoTimeout);
+ popup->setAttribute( Qt::WA_DeleteOnClose, true );
- HbMessageBox popup(HbMessageBox::MessageTypeQuestion);
- popup.setDismissPolicy(HbDialog::NoDismiss);
- popup.setTimeout(HbDialog::NoTimeout);
- popup.setIconVisible(true);
-
- QString text = 0;
+ QString text = 0;
- switch (mAgendaEntry.type()) {
- case AgendaEntry::TypeAppoinment:
- case AgendaEntry::TypeEvent: {
- text.append(hbTrId("txt_calendar_info_delete_meeting"));
- break;
- }
- case AgendaEntry::TypeAnniversary: {
- text.append(hbTrId("txt_calendar_info_delete_anniversary"));
- break;
- }
- case AgendaEntry::TypeTodo: {
- text.append(hbTrId("txt_calendar_info_delete_todo_note"));
- break;
- }
- case AgendaEntry::TypeNote: {
- text.append(hbTrId("txt_calendar_info_delete_anniversary"));
- break;
- }
- }
+ switch (mAgendaEntry.type()) {
+ case AgendaEntry::TypeAppoinment:
+ case AgendaEntry::TypeEvent: {
+ text.append(hbTrId("txt_calendar_info_delete_meeting"));
+ break;
+ }
+ case AgendaEntry::TypeAnniversary: {
+ text.append(hbTrId("txt_calendar_info_delete_anniversary"));
+ break;
+ }
+ case AgendaEntry::TypeTodo: {
+ text.append(hbTrId("txt_calendar_info_delete_todo_note"));
+ break;
+ }
+ case AgendaEntry::TypeNote: {
+ text.append(hbTrId("txt_calendar_info_delete_anniversary"));
+ break;
+ }
+ }
+ popup->setText(text);
+
+ QList<QAction*> list = popup->actions();
+ for(int i=0; i < list.count(); i++)
+ {
+ popup->removeAction(list[i]);
+ }
+ HbAction *deleteAction =
+ new HbAction(hbTrId("txt_calendar_button_delete"), popup);
+ popup->addAction(deleteAction);
+ connect(deleteAction, SIGNAL(triggered()), this ,
+ SLOT(handleDeleteAction()));
+ popup->addAction(new HbAction(hbTrId("txt_calendar_button_cancel"), popup));
+ popup->open();
+}
- popup.setText(text);
-
- popup.setPrimaryAction(new HbAction(
- hbTrId("txt_calendar_button_delete"), &popup));
- popup.setSecondaryAction(new HbAction(
- hbTrId("txt_calendar_button_cancel"), &popup));
- HbAction *selected = popup.exec();
- if (selected == popup.primaryAction()) {
- retStatus = 1;
- }
+/*!
+ Handles the delete action
+ */
+void AgendaEventView::handleDeleteAction()
+ {
+ // If delete button is pressed delete the entry
+ // To notify client that deleting Started
+ // Calendar Application changing state from viewing to deleting.
+ mOwner->deletingStarted();
- qDebug()
- << "AgendaEventViewer: AgendaEventView::showDeleteConfirmationQuery <--";
- return retStatus;
+ // Delete the entry.
+ mOwner->mAgendaUtil->deleteEntry(mAgendaEntry.id());
}
/*!
@@ -957,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 <--";
}
/*!
@@ -994,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)));
@@ -1018,7 +998,6 @@
}
- qDebug() << "AgendaEventViewer: AgendaEventView::edit <--";
}
/*!
@@ -1026,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
@@ -1038,18 +1016,9 @@
// Query user if he wants to delete whole series or just this occurence
showDeleteOccurencePopup();
} else {
- if (showDeleteConfirmationQuery()) {
-
- // To notify client that deleting Started
- // Calendar Application changing state from viewing to deleting.
- mOwner->deletingStarted();
-
- // Delete the entry.
- mOwner->mAgendaUtil->deleteEntry(mAgendaEntry.id());
- }
+ showDeleteConfirmationQuery();
}
- qDebug() << "AgendaEventViewer: AgendaEventView::deleteAgendaEntry <--";
}
/*!
@@ -1057,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();
@@ -1084,7 +1050,6 @@
window->removeView(mViewer);
mOwner->viewingCompleted(mAgendaEntry.startTime().date());
- qDebug() << "AgendaEventViewer: AgendaEventView::close <--";
}
/*!
@@ -1092,7 +1057,6 @@
*/
void AgendaEventView::handleEntryUpdation(ulong id)
{
- qDebug() << "AgendaEventViewer: AgendaEventView::handleEntryUpdation -->";
AgendaEntry updatedEntry = mOwner->mAgendaUtil->fetchById(id);
@@ -1138,7 +1102,6 @@
close();
}
- qDebug() << "AgendaEventViewer: AgendaEventView::handleEntryUpdation <--";
}
/*!
@@ -1146,7 +1109,6 @@
*/
void AgendaEventView::handleEntryDeletion(ulong id)
{
- qDebug() <<"AgendaEventViewer: AgendaEventView::handleEntryDeletion -->";
if (id == mAgendaEntry.id()) {
// Close the agenda entry viewer
@@ -1154,7 +1116,6 @@
mOwner->deletingCompleted();
}
- qDebug() <<"AgendaEventViewer: AgendaEventView::handleEntryDeletion <--";
}
/*!
@@ -1163,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 <--";
}
/*!
@@ -1177,15 +1137,11 @@
*/
void AgendaEventView::handleCalendarEditorClosed()
{
- qDebug()
- <<"AgendaEventViewer: AgendaEventView::handleCalendarEditorClosed -->";
// Cleanup.
mCalenEditor->deleteLater();
mOwner->editingCompleted();
- qDebug()
- <<"AgendaEventViewer: AgendaEventView::handleCalendarEditorClosed <--";
}
/*!
@@ -1193,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.
@@ -1213,7 +1168,154 @@
break;
}
- qDebug() << "AgendaEventViewer: AgendaEventView::handleDeleteOccurence <--";
+}
+
+/*!
+ Returns subject icon
+ */
+void AgendaEventView::getSubjectIcon(AgendaEntry::Type type, QString &subjectIcon)
+ {
+ switch(type) {
+ case AgendaEntry::TypeAppoinment:
+ {
+ subjectIcon.append("qtg_small_meeting");
+ }
+ break;
+ case AgendaEntry::TypeTodo:
+ {
+ subjectIcon.append("qtg_small_todo");
+ }
+ break;
+ case AgendaEntry::TypeEvent:
+ {
+ subjectIcon.append("qtg_small_day");
+ }
+ break;
+ case AgendaEntry::TypeAnniversary:
+ {
+ subjectIcon.append("qtg_small_anniversary");
+ }
+ break;
+ default:
+ break;
+ }
+
+ }
+
+/*!
+ 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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/src/agendaeventviewer_p.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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/agendaeventviewer/src/agendaeventvieweritem.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/agendaeventviewer/src/agendaeventvieweritem.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -40,7 +40,8 @@
*/
AgendaEventViewerItem::AgendaEventViewerItem(QGraphicsItem *parent) :
HbWidget(parent), mPrimaryText(NULL), mSecondaryText(NULL),
- mPrimaryIcon(NULL), mSecondaryIcon(NULL)
+ mPrimaryIcon(NULL), mSecondaryIcon(NULL),mPrimaryRightIcon(NULL),
+ mPrimaryLeftIcon(NULL)
{
// Path for widgetml and css files.
@@ -70,10 +71,15 @@
if (!itemData.isEmpty()) {
QString firstItemData(QString::null);
QString secondItemData(QString::null);
-
- if (itemData.count() == 2) {
+ QString thirdItemData(QString::null);
+ if (itemData.count() == 2) {
+ firstItemData = itemData.at(0);
+ secondItemData = itemData.at(1);
+ }
+ else if (itemData.count() == 3) {
firstItemData = itemData.at(0);
secondItemData = itemData.at(1);
+ thirdItemData = itemData.at(2);
} else {
firstItemData = itemData.at(0);
}
@@ -107,28 +113,43 @@
}
} else {
if (role == Qt::DecorationRole) {
- if (!firstItemData.isEmpty()) {
- if (!mPrimaryIcon) {
- mPrimaryIcon = new HbIconItem(this);
+ if (!firstItemData.isEmpty()) {
+ if (!mPrimaryLeftIcon) {
+ mPrimaryLeftIcon = new HbIconItem(this);
+ }
+ HbStyle::setItemName(mPrimaryLeftIcon, "primaryLeftIconItem");
+ mPrimaryLeftIcon->setVisible(true);
+ mPrimaryLeftIcon->setIconName(firstItemData);
+
+ } else {
+ if (mPrimaryLeftIcon) {
+ HbStyle::setItemName(mPrimaryLeftIcon,"");
+ mPrimaryLeftIcon->setVisible(false);
+ }
+
+ }
+ if (!secondItemData.isEmpty()) {
+ if (!mPrimaryRightIcon) {
+ mPrimaryRightIcon = new HbIconItem(this);
}
- HbStyle::setItemName(mPrimaryIcon, "primaryIconItem");
- mPrimaryIcon->setVisible(true);
- mPrimaryIcon->setIconName(firstItemData);
+ HbStyle::setItemName(mPrimaryRightIcon, "primaryRightIconItem");
+ mPrimaryRightIcon->setVisible(true);
+ mPrimaryRightIcon->setIconName(secondItemData);
} else {
- if (mPrimaryIcon) {
- HbStyle::setItemName(mPrimaryIcon,"");
- mPrimaryIcon->setVisible(false);
+ if (mPrimaryRightIcon) {
+ HbStyle::setItemName(mPrimaryRightIcon,"");
+ mPrimaryRightIcon->setVisible(false);
}
}
- if (!secondItemData.isEmpty()) {
+ if (!thirdItemData.isEmpty()) {
if (!mSecondaryIcon) {
mSecondaryIcon = new HbIconItem(this);
HbStyle::setItemName(mSecondaryIcon,
"secondaryIconItem");
}
- mSecondaryIcon->setIconName(secondItemData);
+ mSecondaryIcon->setIconName(thirdItemData);
} else {
if (mSecondaryIcon) {
--- a/calendarui/application/application.pro Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/application/application.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/application/inc/calenserviceprovider.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/application/src/calenserviceprovider.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/application/src/main.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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"
@@ -31,33 +31,27 @@
// Main window for providing the scene context
HbMainWindow window;
- window.setRenderHints(
- QPainter::Antialiasing | QPainter::SmoothPixmapTransform);
- window.setViewportUpdateMode(QGraphicsView::MinimalViewportUpdate);
//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_" + lang, path);
- 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);
+ CCalenController *controller = new CCalenController();
+
+ int retValue = 0;
+ if (controller) {
+ controller->constructController();
+ // Create the Calendar service provider
+ CalenServiceProvider service(controller);
- // Create the Calendar service provider
- CalenServiceProvider service(controller);
+ retValue = app.exec();
- int retValue = app.exec();
-
- // delete the controller
- controller->Release();
-
+ // delete the controller
+ controller->ReleaseCustomisations();
+ controller->Release();
+ }
return retValue;
}
--- a/calendarui/bwins/agendaeventvieweru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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)
-
--- a/calendarui/bwins/calencustomisationmanageru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,147 +0,0 @@
-EXPORTS
- ?scrollingFinished@CalenPreviewPane@@QAEXXZ @ 1 NONAME ; void CalenPreviewPane::scrollingFinished(void)
- ?setDate@CalenMonthView@@AAEXXZ @ 2 NONAME ; void CalenMonthView::setDate(void)
- ?handleGridItemActivated@CalenMonthView@@QAEXXZ @ 3 NONAME ; void CalenMonthView::handleGridItemActivated(void)
- ?setFocusToProperDay@CalenMonthGrid@@AAEXXZ @ 4 NONAME ; void CalenMonthGrid::setFocusToProperDay(void)
- ??1CalenPreviewPane@@UAE@XZ @ 5 NONAME ; CalenPreviewPane::~CalenPreviewPane(void)
- ?mousePressEvent@CalenMonthGrid@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 6 NONAME ; void CalenMonthGrid::mousePressEvent(class QGraphicsSceneMouseEvent *)
- ?completePopulation@CalenMonthView@@AAEXXZ @ 7 NONAME ; void CalenMonthView::completePopulation(void)
- ?handleChangeOrientation@CalenMonthView@@AAEXXZ @ 8 NONAME ; void CalenMonthView::handleChangeOrientation(void)
- ?staticMetaObject@CalenSettingsView@@2UQMetaObject@@B @ 9 NONAME ; struct QMetaObject const CalenSettingsView::staticMetaObject
- ?upGesture@CalenMonthGrid@@MAEXH@Z @ 10 NONAME ; void CalenMonthGrid::upGesture(int)
- ?getStaticMetaObject@CalenSettingsView@@SAABUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const & CalenSettingsView::getStaticMetaObject(void)
- ?updateMonthDataArrayWithActiveDates@CalenMonthView@@AAEXXZ @ 12 NONAME ; void CalenMonthView::updateMonthDataArrayWithActiveDates(void)
- ?scrollingFinished@CalenMonthGrid@@QAEXXZ @ 13 NONAME ; void CalenMonthGrid::scrollingFinished(void)
- ?setCurrentIdex@CalenMonthGrid@@QAEXH@Z @ 14 NONAME ; void CalenMonthGrid::setCurrentIdex(int)
- ??_ECalenMonthGrid@@UAE@I@Z @ 15 NONAME ; CalenMonthGrid::~CalenMonthGrid(unsigned int)
- ?trUtf8@CalenPreviewPane@@SA?AVQString@@PBD0@Z @ 16 NONAME ; class QString CalenPreviewPane::trUtf8(char const *, char const *)
- ?trUtf8@CalenMonthGrid@@SA?AVQString@@PBD0@Z @ 17 NONAME ; class QString CalenMonthGrid::trUtf8(char const *, char const *)
- ?populatePrevMonth@CalenMonthView@@QAEXXZ @ 18 NONAME ; void CalenMonthView::populatePrevMonth(void)
- ?qt_metacall@CalenSettingsView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 19 NONAME ; int CalenSettingsView::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?handleLeftEffectCompleted@CalenMonthView@@AAEXABUEffectStatus@HbEffect@@@Z @ 20 NONAME ; void CalenMonthView::handleLeftEffectCompleted(struct HbEffect::EffectStatus const &)
- ?getStaticMetaObject@CalenMonthGrid@@SAABUQMetaObject@@XZ @ 21 NONAME ; struct QMetaObject const & CalenMonthGrid::getStaticMetaObject(void)
- ?trUtf8@CalenSettingsView@@SA?AVQString@@PBD0H@Z @ 22 NONAME ; class QString CalenSettingsView::trUtf8(char const *, char const *, int)
- ?qt_metacast@CalenMonthView@@UAEPAXPBD@Z @ 23 NONAME ; void * CalenMonthView::qt_metacast(char const *)
- ?staticMetaObject@CalenMonthView@@2UQMetaObject@@B @ 24 NONAME ; struct QMetaObject const CalenMonthView::staticMetaObject
- ?setupView@CalenMonthView@@QAEXPAVCalenDocLoader@@@Z @ 25 NONAME ; void CalenMonthView::setupView(class CalenDocLoader *)
- ?metaObject@CalenMonthGrid@@UBEPBUQMetaObject@@XZ @ 26 NONAME ; struct QMetaObject const * CalenMonthGrid::metaObject(void) const
- ?startAutoScroll@CalenPreviewPane@@QAEXXZ @ 27 NONAME ; void CalenPreviewPane::startAutoScroll(void)
- ?setView@CalenMonthGrid@@QAEXPAVCalenMonthView@@@Z @ 28 NONAME ; void CalenMonthGrid::setView(class CalenMonthView *)
- ?HandleNotification@CalenDayView@@UAEXW4TCalenNotification@@@Z @ 29 NONAME ; void CalenDayView::HandleNotification(enum TCalenNotification)
- ?panGesture@CalenMonthGrid@@MAEXABVQPointF@@@Z @ 30 NONAME ; void CalenMonthGrid::panGesture(class QPointF const &)
- ?mousePressEvent@CalenPreviewPane@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 31 NONAME ; void CalenPreviewPane::mousePressEvent(class QGraphicsSceneMouseEvent *)
- ??1CalenSettingsView@@UAE@XZ @ 32 NONAME ; CalenSettingsView::~CalenSettingsView(void)
- ?Date@CalenPreviewPane@@QAE?AVQDateTime@@XZ @ 33 NONAME ; class QDateTime CalenPreviewPane::Date(void)
- ?tr@CalenPreviewPane@@SA?AVQString@@PBD0H@Z @ 34 NONAME ; class QString CalenPreviewPane::tr(char const *, char const *, int)
- ?getInstanceList@CalenMonthView@@AAEXAAV?$QList@VAgendaEntry@@@@VQDateTime@@1@Z @ 35 NONAME ; void CalenMonthView::getInstanceList(class QList<class AgendaEntry> &, class QDateTime, class QDateTime)
- ?metaObject@CalenMonthView@@UBEPBUQMetaObject@@XZ @ 36 NONAME ; struct QMetaObject const * CalenMonthView::metaObject(void) const
- ??0CalenPreviewPane@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 37 NONAME ; CalenPreviewPane::CalenPreviewPane(class MCalenServices &, class QGraphicsItem *)
- ?mouseReleaseEvent@CalenPreviewPane@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 38 NONAME ; void CalenPreviewPane::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
- ?rowsInPrevMonth@CalenMonthView@@QAEHXZ @ 39 NONAME ; int CalenMonthView::rowsInPrevMonth(void)
- ?metaObject@CalenPreviewPane@@UBEPBUQMetaObject@@XZ @ 40 NONAME ; struct QMetaObject const * CalenPreviewPane::metaObject(void) const
- ??0CalenDayView@@QAE@AAVMCalenServices@@@Z @ 41 NONAME ; CalenDayView::CalenDayView(class MCalenServices &)
- ?populateNextMonth@CalenMonthView@@QAEXXZ @ 42 NONAME ; void CalenMonthView::populateNextMonth(void)
- ?handleRightEffectCompleted@CalenMonthView@@AAEXABUEffectStatus@HbEffect@@@Z @ 43 NONAME ; void CalenMonthView::handleRightEffectCompleted(struct HbEffect::EffectStatus const &)
- ?qt_metacast@CalenMonthGrid@@UAEPAXPBD@Z @ 44 NONAME ; void * CalenMonthGrid::qt_metacast(char const *)
- ?firstDayOfGrid@CalenMonthView@@QAE?AVQDateTime@@XZ @ 45 NONAME ; class QDateTime CalenMonthView::firstDayOfGrid(void)
- ?rowsInFutMonth@CalenMonthView@@QAEHXZ @ 46 NONAME ; int CalenMonthView::rowsInFutMonth(void)
- ?getCurrGridIndex@CalenMonthView@@QAEHXZ @ 47 NONAME ; int CalenMonthView::getCurrGridIndex(void)
- ?launchDayView@CalenMonthView@@QAEXXZ @ 48 NONAME ; void CalenMonthView::launchDayView(void)
- ??1CalenDayViewWidget@@UAE@XZ @ 49 NONAME ; CalenDayViewWidget::~CalenDayViewWidget(void)
- ??0CalenDayViewWidget@@QAE@AAVMCalenServices@@PAVCalenDocLoader@@@Z @ 50 NONAME ; CalenDayViewWidget::CalenDayViewWidget(class MCalenServices &, class CalenDocLoader *)
- ?prependRows@CalenMonthGrid@@QAEXXZ @ 51 NONAME ; void CalenMonthGrid::prependRows(void)
- ?orientationChanged@CalenMonthGrid@@MAEXW4Orientation@Qt@@@Z @ 52 NONAME ; void CalenMonthGrid::orientationChanged(enum Qt::Orientation)
- ?handleGridItemLongPressed@CalenMonthView@@QAEXHAAVQPointF@@@Z @ 53 NONAME ; void CalenMonthView::handleGridItemLongPressed(int, class QPointF &)
- ?qt_metacall@CalenPreviewPane@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 54 NONAME ; int CalenPreviewPane::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?trUtf8@CalenPreviewPane@@SA?AVQString@@PBD0H@Z @ 55 NONAME ; class QString CalenPreviewPane::trUtf8(char const *, char const *, int)
- ??1CalenThickLinesDrawer@@UAE@XZ @ 56 NONAME ; CalenThickLinesDrawer::~CalenThickLinesDrawer(void)
- ?setView@CalenPreviewPane@@QAEXPAVCalenMonthView@@@Z @ 57 NONAME ; void CalenPreviewPane::setView(class CalenMonthView *)
- ??_ECalenMonthView@@UAE@I@Z @ 58 NONAME ; CalenMonthView::~CalenMonthView(unsigned int)
- ?changeOrientation@CalenMonthView@@UAEXW4Orientation@Qt@@@Z @ 59 NONAME ; void CalenMonthView::changeOrientation(enum Qt::Orientation)
- ?populatePreviewPane@CalenMonthView@@QAEXAAVQDateTime@@@Z @ 60 NONAME ; void CalenMonthView::populatePreviewPane(class QDateTime &)
- ??0CalenSettingsView@@QAE@AAVMCalenServices@@PAVQGraphicsItem@@@Z @ 61 NONAME ; CalenSettingsView::CalenSettingsView(class MCalenServices &, class QGraphicsItem *)
- ?updateModelWithPrevMonth@CalenMonthView@@QAEXXZ @ 62 NONAME ; void CalenMonthView::updateModelWithPrevMonth(void)
- ?stopScrolling@CalenPreviewPane@@QAEXXZ @ 63 NONAME ; void CalenPreviewPane::stopScrolling(void)
- ?addBackgroundFrame@CalenMonthView@@AAEXXZ @ 64 NONAME ; void CalenMonthView::addBackgroundFrame(void)
- ?createGrid@CalenMonthView@@AAEXXZ @ 65 NONAME ; void CalenMonthView::createGrid(void)
- ?tr@CalenPreviewPane@@SA?AVQString@@PBD0@Z @ 66 NONAME ; class QString CalenPreviewPane::tr(char const *, char const *)
- ?getStaticMetaObject@CalenPreviewPane@@SAABUQMetaObject@@XZ @ 67 NONAME ; struct QMetaObject const & CalenPreviewPane::getStaticMetaObject(void)
- ?launchPreviousView@CalenSettingsView@@AAEXXZ @ 68 NONAME ; void CalenSettingsView::launchPreviousView(void)
- ?setCurrGridIndex@CalenMonthView@@QAEXH@Z @ 69 NONAME ; void CalenMonthView::setCurrGridIndex(int)
- ?setDateToLabel@CalenMonthView@@AAEXXZ @ 70 NONAME ; void CalenMonthView::setDateToLabel(void)
- ?addWeekNumbers@CalenMonthView@@AAEXXZ @ 71 NONAME ; void CalenMonthView::addWeekNumbers(void)
- ?qt_metacall@CalenThickLinesDrawer@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 72 NONAME ; int CalenThickLinesDrawer::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?setupView@CalenDayView@@QAEXPAVCalenDocLoader@@@Z @ 73 NONAME ; void CalenDayView::setupView(class CalenDocLoader *)
- ??1CalenMonthView@@UAE@XZ @ 74 NONAME ; CalenMonthView::~CalenMonthView(void)
- ?dateFromContext@CalenMonthView@@AAE?AVQDateTime@@ABVMCalenContext@@@Z @ 75 NONAME ; class QDateTime CalenMonthView::dateFromContext(class MCalenContext const &)
- ?staticMetaObject@CalenMonthGrid@@2UQMetaObject@@B @ 76 NONAME ; struct QMetaObject const CalenMonthGrid::staticMetaObject
- ?paint@CalenThickLinesDrawer@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 77 NONAME ; void CalenThickLinesDrawer::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
- ?trUtf8@CalenMonthGrid@@SA?AVQString@@PBD0H@Z @ 78 NONAME ; class QString CalenMonthGrid::trUtf8(char const *, char const *, int)
- ?initializeForm@CalenSettingsView@@QAEXXZ @ 79 NONAME ; void CalenSettingsView::initializeForm(void)
- ?tr@CalenMonthGrid@@SA?AVQString@@PBD0H@Z @ 80 NONAME ; class QString CalenMonthGrid::tr(char const *, char const *, int)
- ?goToToday@CalenMonthView@@AAEXXZ @ 81 NONAME ; void CalenMonthView::goToToday(void)
- ?trUtf8@CalenThickLinesDrawer@@SA?AVQString@@PBD0H@Z @ 82 NONAME ; class QString CalenThickLinesDrawer::trUtf8(char const *, char const *, int)
- ?qt_metacast@CalenPreviewPane@@UAEPAXPBD@Z @ 83 NONAME ; void * CalenPreviewPane::qt_metacast(char const *)
- ?docLoader@CalenDayView@@QAEPAVCalenDocLoader@@XZ @ 84 NONAME ; class CalenDocLoader * CalenDayView::docLoader(void)
- ?getCurrentIndex@CalenMonthGrid@@QAEHXZ @ 85 NONAME ; int CalenMonthGrid::getCurrentIndex(void)
- ?removeWeekNumbers@CalenMonthView@@AAEXXZ @ 86 NONAME ; void CalenMonthView::removeWeekNumbers(void)
- ?tr@CalenSettingsView@@SA?AVQString@@PBD0H@Z @ 87 NONAME ; class QString CalenSettingsView::tr(char const *, char const *, int)
- ?trUtf8@CalenMonthView@@SA?AVQString@@PBD0H@Z @ 88 NONAME ; class QString CalenMonthView::trUtf8(char const *, char const *, int)
- ??0CalenMonthView@@QAE@AAVMCalenServices@@@Z @ 89 NONAME ; CalenMonthView::CalenMonthView(class MCalenServices &)
- ?getStaticMetaObject@CalenThickLinesDrawer@@SAABUQMetaObject@@XZ @ 90 NONAME ; struct QMetaObject const & CalenThickLinesDrawer::getStaticMetaObject(void)
- ?setNoEntriesLabel@CalenPreviewPane@@QAEXPAVHbLabel@@@Z @ 91 NONAME ; void CalenPreviewPane::setNoEntriesLabel(class HbLabel *)
- ??0CalenThickLinesDrawer@@QAE@W4WidgetType@CalendarNamespace@@PAVQGraphicsItem@@@Z @ 92 NONAME ; CalenThickLinesDrawer::CalenThickLinesDrawer(enum CalendarNamespace::WidgetType, class QGraphicsItem *)
- ?onLocaleChanged@CalenMonthView@@UAEXH@Z @ 93 NONAME ; void CalenMonthView::onLocaleChanged(int)
- ?doPopulation@CalenMonthView@@UAEXXZ @ 94 NONAME ; void CalenMonthView::doPopulation(void)
- ?tr@CalenMonthView@@SA?AVQString@@PBD0H@Z @ 95 NONAME ; class QString CalenMonthView::tr(char const *, char const *, int)
- ?GetInstanceListL@CalenPreviewPane@@AAEXXZ @ 96 NONAME ; void CalenPreviewPane::GetInstanceListL(void)
- ?tr@CalenMonthView@@SA?AVQString@@PBD0@Z @ 97 NONAME ; class QString CalenMonthView::tr(char const *, char const *)
- ??0CalenMonthGrid@@QAE@PAVQGraphicsItem@@@Z @ 98 NONAME ; CalenMonthGrid::CalenMonthGrid(class QGraphicsItem *)
- ?refreshViewOnGoToDate@CalenMonthView@@EAEXXZ @ 99 NONAME ; void CalenMonthView::refreshViewOnGoToDate(void)
- ?appendRows@CalenMonthGrid@@QAEXXZ @ 100 NONAME ; void CalenMonthGrid::appendRows(void)
- ?tr@CalenThickLinesDrawer@@SA?AVQString@@PBD0H@Z @ 101 NONAME ; class QString CalenThickLinesDrawer::tr(char const *, char const *, int)
- ?mouseReleaseEvent@CalenMonthGrid@@EAEXPAVQGraphicsSceneMouseEvent@@@Z @ 102 NONAME ; void CalenMonthGrid::mouseReleaseEvent(class QGraphicsSceneMouseEvent *)
- ?getCurrentDay@CalenMonthView@@QAE?AVQDateTime@@XZ @ 103 NONAME ; class QDateTime CalenMonthView::getCurrentDay(void)
- ?staticMetaObject@CalenPreviewPane@@2UQMetaObject@@B @ 104 NONAME ; struct QMetaObject const CalenPreviewPane::staticMetaObject
- ?tr@CalenSettingsView@@SA?AVQString@@PBD0@Z @ 105 NONAME ; class QString CalenSettingsView::tr(char const *, char const *)
- ?onTwoSecondsTimeout@CalenPreviewPane@@QAEXXZ @ 106 NONAME ; void CalenPreviewPane::onTwoSecondsTimeout(void)
- ?timerExpired@CalenMonthGrid@@IAEXXZ @ 107 NONAME ; void CalenMonthGrid::timerExpired(void)
- ?tr@CalenThickLinesDrawer@@SA?AVQString@@PBD0@Z @ 108 NONAME ; class QString CalenThickLinesDrawer::tr(char const *, char const *)
- ?staticMetaObject@CalenThickLinesDrawer@@2UQMetaObject@@B @ 109 NONAME ; struct QMetaObject const CalenThickLinesDrawer::staticMetaObject
- ?populateWithInstanceView@CalenMonthView@@AAEXXZ @ 110 NONAME ; void CalenMonthView::populateWithInstanceView(void)
- ?trUtf8@CalenThickLinesDrawer@@SA?AVQString@@PBD0@Z @ 111 NONAME ; class QString CalenThickLinesDrawer::trUtf8(char const *, char const *)
- ?downGesture@CalenMonthGrid@@MAEXH@Z @ 112 NONAME ; void CalenMonthGrid::downGesture(int)
- ?populateLabel@CalenPreviewPane@@QAEXVQDateTime@@@Z @ 113 NONAME ; void CalenPreviewPane::populateLabel(class QDateTime)
- ?doPopulation@CalenDayView@@UAEXXZ @ 114 NONAME ; void CalenDayView::doPopulation(void)
- ??1CalenDayView@@UAE@XZ @ 115 NONAME ; CalenDayView::~CalenDayView(void)
- ?updateModelWithFutureMonth@CalenMonthView@@QAEXXZ @ 116 NONAME ; void CalenMonthView::updateModelWithFutureMonth(void)
- ?monthDataList@CalenMonthView@@QAE?AV?$QList@VCalenMonthData@@@@XZ @ 117 NONAME ; class QList<class CalenMonthData> CalenMonthView::monthDataList(void)
- ?metaObject@CalenThickLinesDrawer@@UBEPBUQMetaObject@@XZ @ 118 NONAME ; struct QMetaObject const * CalenThickLinesDrawer::metaObject(void) const
- ??1CalenMonthGrid@@UAE@XZ @ 119 NONAME ; CalenMonthGrid::~CalenMonthGrid(void)
- ?updateWeekNumGridModel@CalenMonthView@@AAEXXZ @ 120 NONAME ; void CalenMonthView::updateWeekNumGridModel(void)
- ?qt_metacast@CalenThickLinesDrawer@@UAEPAXPBD@Z @ 121 NONAME ; void * CalenThickLinesDrawer::qt_metacast(char const *)
- ?prepareForPopulation@CalenMonthView@@AAEXXZ @ 122 NONAME ; void CalenMonthView::prepareForPopulation(void)
- ?handlePreviewPaneGesture@CalenMonthView@@QAEX_N@Z @ 123 NONAME ; void CalenMonthView::handlePreviewPaneGesture(bool)
- ?updateMonthGridModel@CalenMonthGrid@@QAEXAAV?$QList@VCalenMonthData@@@@H@Z @ 124 NONAME ; void CalenMonthGrid::updateMonthGridModel(class QList<class CalenMonthData> &, int)
- ?setActiveDates@CalenMonthGrid@@AAEXVQDate@@@Z @ 125 NONAME ; void CalenMonthGrid::setActiveDates(class QDate)
- ?trUtf8@CalenMonthView@@SA?AVQString@@PBD0@Z @ 126 NONAME ; class QString CalenMonthView::trUtf8(char const *, char const *)
- ?setContextForActiveDay@CalenMonthView@@QAEXH@Z @ 127 NONAME ; void CalenMonthView::setContextForActiveDay(int)
- ?trUtf8@CalenSettingsView@@SA?AVQString@@PBD0@Z @ 128 NONAME ; class QString CalenSettingsView::trUtf8(char const *, char const *)
- ??_ECalenSettingsView@@UAE@I@Z @ 129 NONAME ; CalenSettingsView::~CalenSettingsView(unsigned int)
- ??_ECalenThickLinesDrawer@@UAE@I@Z @ 130 NONAME ; CalenThickLinesDrawer::~CalenThickLinesDrawer(unsigned int)
- ?metaObject@CalenSettingsView@@UBEPBUQMetaObject@@XZ @ 131 NONAME ; struct QMetaObject const * CalenSettingsView::metaObject(void) const
- ?getStaticMetaObject@CalenMonthView@@SAABUQMetaObject@@XZ @ 132 NONAME ; struct QMetaObject const & CalenMonthView::getStaticMetaObject(void)
- ?qt_metacast@CalenSettingsView@@UAEPAXPBD@Z @ 133 NONAME ; void * CalenSettingsView::qt_metacast(char const *)
- ?tr@CalenMonthGrid@@SA?AVQString@@PBD0@Z @ 134 NONAME ; class QString CalenMonthGrid::tr(char const *, char const *)
- ?qt_metacall@CalenMonthView@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 135 NONAME ; int CalenMonthView::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?setActiveDay@CalenMonthView@@AAEXVQDateTime@@@Z @ 136 NONAME ; void CalenMonthView::setActiveDay(class QDateTime)
- ?itemActivated@CalenMonthGrid@@QAEXABVQModelIndex@@@Z @ 137 NONAME ; void CalenMonthGrid::itemActivated(class QModelIndex const &)
- ?qt_metacall@CalenMonthGrid@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 138 NONAME ; int CalenMonthGrid::qt_metacall(enum QMetaObject::Call, int, void * *)
- ??_ECalenPreviewPane@@UAE@I@Z @ 139 NONAME ; CalenPreviewPane::~CalenPreviewPane(unsigned int)
- ?createEditor@CalenMonthView@@AAEXXZ @ 140 NONAME ; void CalenMonthView::createEditor(void)
- ?getActiveDay@CalenMonthView@@QAE?AVQDateTime@@XZ @ 141 NONAME ; class QDateTime CalenMonthView::getActiveDay(void)
- ?showHideRegionalInformation@CalenMonthView@@AAEXXZ @ 142 NONAME ; void CalenMonthView::showHideRegionalInformation(void)
- ?paint@CalenMonthGrid@@EAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 143 NONAME ; void CalenMonthGrid::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
- ?mouseMoveEvent@CalenPreviewPane@@UAEXPAVQGraphicsSceneMouseEvent@@@Z @ 144 NONAME ; void CalenPreviewPane::mouseMoveEvent(class QGraphicsSceneMouseEvent *)
- ?addRemoveActionsInMenu@CalenMonthView@@AAEXXZ @ 145 NONAME ; void CalenMonthView::addRemoveActionsInMenu(void)
-
--- a/calendarui/calendarui.pro Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/calendarui.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/caleneditor.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/data/caleneditor.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/caleneditor/data/caleneditorlocationitem.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <widget name="calenEditorLocationWidget" type="HbWidget">
+ <widget name="locationLineEdit" type="HbLineEdit">
+ <real name="z" value="1"/>
+ <string name="text" value=""/>
+ </widget>
+ <widget name="locationPushButton" type="HbPushButton">
+ <real name="z" value="2"/>
+ <sizehint height="7.4un" type="MINIMUM" width="9.5un"/>
+ <sizehint height="7.4un" type="MAXIMUM" width="9.5un"/>
+ </widget>
+ <rect height="9.4un" name="geometry" width="53.73134un" x="0un" y="0un"/>
+ <sizehint height="9.4un" type="PREFERRED"/>
+ <sizehint height="9.4un" type="MINIMUM"/>
+ <sizehint height="9.4un" type="MAXIMUM"/>
+ <layout type="anchor">
+ <anchoritem dst="locationPushButton" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="locationPushButton" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="locationLineEdit" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="locationLineEdit" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-middle-horizontal)" src="locationPushButton" srcEdge="LEFT"/>
+ <anchoritem dst="locationLineEdit" dstEdge="CENTERV" spacing="0un" src="locationPushButton" srcEdge="CENTERV"/>
+ </layout>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/caleneditor/data/caleneditorview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <object name="addDescriptionAction" type="HbAction">
+ <string locid="txt_calendar_opt_add_description" name="text" value="Add description"/>
+ </object>
+ <object name="deleteEventAction" type="HbAction">
+ <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="heading" value="New event"/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <widget name="calenEditorDataFormWidget" type="HbDataForm">
+ <string name="description" value=""/>
+ <string name="heading" value=""/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="calenEditorHeadingWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="calenEditorHeadingWidget" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="calenEditorHeadingWidget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="calenEditorDataFormWidget" dstEdge="TOP" spacing="0un" src="calenEditorHeadingWidget" srcEdge="BOTTOM"/>
+ <anchoritem dst="calenEditorDataFormWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="calenEditorDataFormWidget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="calenEditorDataFormWidget" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <widget name="calenEditorMenu" role="HbView:menu" type="HbMenu">
+ <ref object="addDescriptionAction" role="HbMenu:addAction"/>
+ <ref object="deleteEventAction" role="HbMenu:addAction"/>
+ </widget>
+ <string locid="txt_calendar_title_calendar" name="title" value="Calendar"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/caleneditor/eabi/caleneditoru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/inc/caleneditor.h Mon Jun 28 15:22:02 2010 +0530
@@ -45,6 +45,7 @@
public:
enum CreateType{
TypeAppointment = 0,
+ // TODO: Need to add more types
TypeUnKnown = -1
};
--- a/calendarui/caleneditor/inc/caleneditor_p.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/inc/caleneditor_p.h Mon Jun 28 15:22:02 2010 +0530
@@ -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;
@@ -92,6 +93,7 @@
DateTimeToItem,
LocationItem,
ReminderItem,
+ ReminderTimeForAllDayItem,
RepeatItem,
RepeatUntilItem
};
@@ -104,7 +106,14 @@
AgendaEntry* originalEntry();
bool isNewEntry();
HbDataFormModelItem* allDayCheckBoxItem();
-
+ bool isReminderTimeForAllDayAdded();
+ bool isAllDayEvent();
+ void updateReminderChoices();
+ int currentIndexOfReminderField();
+ void setCurrentIndexOfReminderField(int index);
+ void setReminderChoices();
+ bool isEditRangeThisOnly();
+ bool isAllDayFieldAdded();
private:
void edit(const QFile &handle, bool launchCalendar);
void edit(AgendaEntry entry, bool launchCalendar);
@@ -113,6 +122,7 @@
bool launchCalendar);
void create(CalenEditor::CreateType type, AgendaEntry entry,
bool launchCalendar);
+ void openEditor(AgendaEntry entry);
void showEditor(AgendaEntry entry);
void showEditOccurencePopup();
void setUpView();
@@ -135,7 +145,6 @@
void populateRepeatItem();
void populateDescriptionItem();
void removeDescriptionItem();
- void closeEditor();
bool isChild() const ;
@@ -144,7 +153,6 @@
void deleteEntry(bool close = false);
bool handleAllDayToSave();
void enableFromTotimeFileds(bool, QDateTime, QDateTime);
- int showDeleteConfirmationQuery();
private slots:
void handleSubjectChange(const QString subject);
@@ -152,8 +160,11 @@
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);
void handleDeleteAction();
void launchSettingsView();
void discardChanges();
@@ -161,6 +172,9 @@
void handleEditOccurence(int index);
void handleCancel();
void handleCalendarLaunchError(int error);
+ void closeEditor();
+ void handleLocationEditingFinished();
+ void selectEditingFinishedAction(HbAction* action);
private:
enum EditRange {
@@ -170,7 +184,7 @@
};
CalenEditor *q_ptr;
- AgendaUtil *mAgendaUtil;
+ QPointer<AgendaUtil> mAgendaUtil;
CalenEditorDocLoader *mEditorDocLoader;
HbView *mEditorView;
@@ -191,14 +205,15 @@
EditRange mEditRange;
QDateTime mNewEntryDateTime;
-
+
+ AgendaEntry mEntry;
AgendaEntry *mOriginalEntry;
AgendaEntry *mEditedEntry;
HbAction *mSoftKeyAction;
HbAction *mDescriptionAction;
HbMainWindow *mMainWindow;
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
bool mNewEntry;
bool mDescriptionItemAdded;
--- a/calendarui/caleneditor/inc/caleneditorcommon.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/inc/caleneditorcommon.h Mon Jun 28 15:22:02 2010 +0530
@@ -35,7 +35,8 @@
CustomWidgetFrom = HbDataFormModelItem::CustomItemBase + 1,
CustomWidgetTo,
CustomWidgetLocation,
- RepeatUntilOffset
+ RepeatUntilOffset,
+ ReminderTimeOffset
};
#endif /* CALENEDITORCOMMON_H_ */
--- a/calendarui/caleneditor/inc/caleneditorcustomitem.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/inc/caleneditorcustomitem.h Mon Jun 28 15:22:02 2010 +0530
@@ -39,6 +39,7 @@
~CalenEditorCustomItem();
virtual HbAbstractViewItem* createItem();
void enableFromTimeFieldAndSetTime(bool, QDateTime);
+ void disableFromToDateField();
void enableToTimeFieldAndSetTime(bool, QDateTime);
void populateDateTime(QDateTime defaultDateTime, bool isFromItem);
void populateLocation( QString location);
@@ -47,6 +48,7 @@
void enableDateButton(bool value);
bool canSetModelIndex(const QModelIndex &index) const;
void restore();
+ QDateTime getDateTime();
protected:
virtual HbWidget* createCustomWidget();
@@ -61,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;
@@ -78,6 +82,7 @@
HbPushButton* mPushButtonTime;
HbPushButton* mPushButtonDate;
HbPushButton *mRepeatUntilWidget;
+ HbPushButton *mReminderTimeWidget;
HbDateTimePicker *mDatePicker;
HbDateTimePicker *mTimePicker;
--- a/calendarui/caleneditor/inc/caleneditorreminderfield.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/inc/caleneditorreminderfield.h Mon Jun 28 15:22:02 2010 +0530
@@ -30,6 +30,7 @@
class HbDataFormModelItem;
class HbDataForm;
class HbDataFormModelItem;
+class HbDateTimePicker;
class CalenEditorDataHandler;
class CalenEditorReminderField : public QObject
@@ -43,20 +44,37 @@
virtual ~CalenEditorReminderField();
public:
+ void setReminderChoices();
void addItemToModel();
void removeItemFromModel();
void populateReminderItem(bool newEntry);
QModelIndex modelIndex();
-
+ void setReminderOff();
+ void setDefaultAlarmForAllDay();
+ void updateReminderChoicesForAllDay(QDate repeatUntilDate);
+ void insertReminderTimeField();
+ void setDisplayTime();
+ void removeReminderTimeField();
+ bool isReminderFieldEnabled();
+ int reminderItemsCount();
+ int currentReminderIndex();
+ void setCurrentIndex(int index);
+ void disableReminderTimeField();
+ bool isReminderTimeForAllDayAdded();
private slots:
void handleReminderIndexChanged(int index);
-
+ void launchReminderTimePicker();
+ void setReminderTimeForAllDay();
private:
CalenEditorPrivate* mCalenEditor;
HbDataForm* mEditorForm;
HbDataFormModel* mCalenEditorModel;
HbDataFormModelItem* mReminderItem;
+ HbDataFormModelItem *mCustomReminderTimeItem;
+ HbDateTimePicker *mTimePicker;
+ QTime mReminderTimeForAllDay;
QHash<int, int> mReminderHash;
+ bool mReminderTimeAdded;
};
#endif // CALENEDITORREMINDERFIELD_H
--- a/calendarui/caleneditor/inc/caleneditorrepeatfield.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/inc/caleneditorrepeatfield.h Mon Jun 28 15:22:02 2010 +0530
@@ -53,6 +53,7 @@
void updateRepeatChoices();
void saveRepeatRule();
bool isRepeatUntilItemAdded();
+ QDate repeatUntilDate();
private:
void insertRepeatUntilItem();
--- a/calendarui/caleneditor/src/caleneditor.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditor.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditor_p.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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>
@@ -41,11 +41,10 @@
#include <hbextendedlocale.h>
#include <hbi18ndef.h>
#include <qdatetime.h>
-#include <HbMessageBox>
#include <hbgroupbox.h>
-#include <hbapplication.h>
#include <hbradiobuttonlist.h>
#include <hbnotificationdialog.h>
+#include <hbtranslator.h>
// User includes
#include <CalenLauncher>
@@ -210,6 +209,7 @@
mEditRange(ThisAndAll),
mOriginalEntry(NULL),
mEditedEntry(NULL),
+ mTranslator(new HbTranslator("caleneditor")),
mNewEntry(true),
mDescriptionItemAdded(false),
mIsChild(false),
@@ -220,6 +220,7 @@
// First get the q-pointer.
q_ptr = static_cast<CalenEditor *> (parent);
mMainWindow = NULL;
+ mTranslator->loadCommon();
if (!agendaUtil) {
mAgendaUtil = new AgendaUtil(this);
@@ -228,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);
}
/*!
@@ -244,6 +236,10 @@
*/
CalenEditorPrivate::~CalenEditorPrivate()
{
+ if(mOwnsAgendaUtil) {
+ delete mAgendaUtil;
+ mAgendaUtil = NULL;
+ }
if (mOriginalEntry) {
delete mOriginalEntry;
mOriginalEntry = NULL;
@@ -252,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;
@@ -290,7 +301,7 @@
{
mNewEntry = false;
mLaunchCalendar = launchCalendar;
- showEditor(entry);
+ openEditor(entry);
}
/*!
@@ -301,6 +312,9 @@
{
mNewEntry = false;
AgendaEntry entry = mAgendaUtil->fetchById(id);
+ if(entry.isNull()) {
+ return;
+ }
edit(entry, launchCalendar);
}
@@ -321,12 +335,14 @@
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;
- showEditor(entry);
+ openEditor(entry);
}
/*!
@@ -344,13 +360,15 @@
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();
mLaunchCalendar = launchCalendar;
- showEditor(entry);
+ openEditor(entry);
}
/*!
@@ -358,10 +376,11 @@
*/
void CalenEditorPrivate::showEditOccurencePopup()
{
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
-
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
+
QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
HbWidget *editWidget = new HbWidget();
editWidget->setLayout(layout);
@@ -376,22 +395,20 @@
layout->addItem(editButtonList);
- popUp.setContentWidget(editWidget);
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_edit")));
+ popUp->setContentWidget(editWidget);
+ popUp->setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_edit")));
- // Create secondary action
+ // Create cancel action
HbAction *cancelAction =
new HbAction(hbTrId("txt_calendar_button_softkey1_cancel"));
- popUp.setSecondaryAction(cancelAction);
+ 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()), &popUp, SLOT(close()));
connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleCancel()));
// Show the popup
- popUp.exec();
+ popUp->open();
}
/*!
@@ -409,6 +426,13 @@
mEditRange = ThisAndAll;
break;
}
+ // If user has selected to edit all the occurences,
+ // then get the parent of it
+ AgendaEntry entryToBeEdited = mEntry;
+ if (mEditRange == ThisAndAll) {
+ entryToBeEdited = mAgendaUtil->parentEntry(mEntry);
+ }
+ showEditor(entryToBeEdited);
}
/*!
@@ -418,6 +442,36 @@
{
// User has chosen not to edit the event, hence return
mEditRange = UserCancelled;
+ // Do cleanup and return
+ emit q_ptr->dialogClosed();
+ return;
+}
+
+/*!
+ Opens the editor.
+ */
+void CalenEditorPrivate::openEditor(AgendaEntry entry)
+{
+ if (0 < entry.id()) {
+ mNewEntry = false;
+ }
+ if (!mNewEntry) {
+ // Before we do anything, check in the entry is repeating
+ // OR its a child item
+ mIsChild = !(entry.recurrenceId().isNull());
+ bool isRepeating = entry.isRepeating();
+ // For later reference
+ mEntry = entry;
+ if (mIsChild || isRepeating) {
+ // Query user if he wants to edit whole series
+ // or just this occurence
+ showEditOccurencePopup();
+ return;
+ }else {
+ mEditRange = ThisAndAll;
+ }
+ }
+ showEditor(entry);
}
/*!
@@ -425,52 +479,23 @@
*/
void CalenEditorPrivate::showEditor(AgendaEntry entry)
{
-
- if (0 < entry.id()) {
- mNewEntry = false;
- }
-
- AgendaEntry entryToBeEdited = entry;
- if (!mNewEntry) {
- // Before we do anything, check in the entry is repeating
- // OR its a child item
- mIsChild = !(entry.recurrenceId().isNull());
- bool isRepeating = entry.isRepeating();
- if (mIsChild || isRepeating) {
- // Query user if he wants to edit whole series
- // or just this occurence
- showEditOccurencePopup();
- // If user has selected to edit all the occurences,
- // then get the parent of it
- if (mEditRange == ThisAndAll) {
- entryToBeEdited = mAgendaUtil->parentEntry(entry);
- } else if (mEditRange == UserCancelled) {
- // Do cleanup and return
- emit q_ptr->dialogClosed();
- return;
- }
- } else {
- mEditRange = ThisAndAll;
- }
- }
-
- mOriginalEntry = new AgendaEntry(entryToBeEdited);
- mEditedEntry = new AgendaEntry(entryToBeEdited);
+ mOriginalEntry = new AgendaEntry(entry);
+ mEditedEntry = new AgendaEntry(entry);
if (!mEditedEntry->description().isEmpty()) {
mDescriptionItemAdded = true;
}
// Construct the view using docloader
setUpView();
-
+
// Set the title text.
mEditorView->setTitle(hbTrId("txt_calendar_title_calendar"));
- mSoftKeyAction = new HbAction(Hb::BackAction);
+ mSoftKeyAction = new HbAction(Hb::BackNaviAction);
mEditorView->setNavigationAction(mSoftKeyAction);
connect(mSoftKeyAction, SIGNAL(triggered()), this,
SLOT(saveAndCloseEditor()));
-
+
// Create the data handler
mDataHandler = new CalenEditorDataHandler(this,mEditedEntry, mOriginalEntry);
}
@@ -513,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(handleDeleteAction()));
+ 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();
@@ -582,14 +616,9 @@
// Add all day check box for new entry creation or while editing
// parent entry or existing non repeating event
- if (mNewEntry) {
+ if (mNewEntry || (mEditRange == ThisAndAll)) {
addAllDayCheckBoxItem();
- } else {
- if (!mEditedEntry->isRepeating() || (mEditRange == ThisAndAll)) {
- addAllDayCheckBoxItem();
- }
}
-
addCustomItemFrom();
addCustomItemTo();
addCustomItemLocation();
@@ -598,7 +627,6 @@
if (mEditRange == ThisAndAll) {
addRepeatItem();
}
-
mCalenEditorForm->setModel(mCalenEditorModel);
}
@@ -793,7 +821,7 @@
QDateTime endTime =
mEditedEntry-> startTime().addSecs(durationInSeconds);
- // set this to the original entr as well as edited entry
+ // set this to the original entry as well as edited entry
mOriginalEntry->setStartAndEndTime(mOriginalEntry->startTime(),
endTime);
mEditedEntry->setStartAndEndTime(mEditedEntry->startTime(), endTime);
@@ -854,11 +882,32 @@
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());
mViewToItem->setDateRange(prevInstanceEndTime.date().addDays(1),
nextInstanceEndTime.date().addDays(-1));
+
+ // If repeating daily then disable the date fields as
+ // date cannot be changed
+ if ((prevInstanceEndTime.date().daysTo(
+ mEditedEntry->startTime().date()) == 1) &&
+ (mEditedEntry->endTime().date().daysTo(
+ nextInstanceStartTime.date()) == 1)) {
+ mViewFromItem->disableFromToDateField();
+ }
}
} else {
toDateTime = fromDateTime.addSecs(60 * 60);
@@ -871,13 +920,19 @@
if (mNewEntry) {
mOriginalEntry->setStartAndEndTime(fromDateTime, toDateTime);
}
- if (mAllDayCheckBoxItem
- && (mAllDayCheckBoxItem->contentWidgetData("checkState")
- == Qt::Checked)) {
+ 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);
}
}
/*!
@@ -898,12 +953,19 @@
}
QModelIndex index = mCalenEditorModel->index(itemIndex, 0);
mViewLocationItem = qobject_cast<CalenEditorCustomItem *>
- (mCalenEditorForm->dataFormViewItem(index));
-
+ (mCalenEditorForm->itemByIndex(index));
+
connect(mViewLocationItem, SIGNAL(locationTextChanged(const QString)),
this, SLOT(handleLocationChange(const QString)));
-
- mViewLocationItem->populateLocation(mEditedEntry->location());
+
+ connect(mViewLocationItem, SIGNAL(locationTextChanged(const QString, const double, const double)),
+ this, SLOT(handleLocationChange(const QString, const double, const double)));
+
+ mViewLocationItem->populateLocation(mEditedEntry->location());
+
+ connect(mViewLocationItem, SIGNAL(locationEditingFinished()),
+ this, SLOT(handleLocationEditingFinished()));
+
}
/*!
Save the changed start time of the event.
@@ -935,6 +997,49 @@
// update the repeat choices depending on the meeting duration
mRepeatField->updateRepeatChoices();
}
+
+ updateReminderChoices();
+}
+
+void CalenEditorPrivate::updateReminderChoices()
+{
+ QDate referenceDate;
+
+ // Start date or repeat until date will be the reference to decide
+ // whether the event is in past or future.
+ if (mRepeatField && mRepeatField->isRepeatUntilItemAdded()) {
+ referenceDate = mRepeatField->repeatUntilDate();
+ } else {
+ referenceDate = mEditedEntry->startTime().date();
+ }
+
+ // Check if all day event or not.
+ if (isAllDayEvent()) {
+ int currentIndex = mReminderField->currentReminderIndex();
+ mReminderField->updateReminderChoicesForAllDay(referenceDate);
+ int numberOfReminderChoices = mReminderField->reminderItemsCount();
+ if (currentIndex >= numberOfReminderChoices) {
+ currentIndex = 0;
+ mReminderField->disableReminderTimeField();
+ }
+ mReminderField->setCurrentIndex(currentIndex);
+ if(currentIndex == 0 && mReminderField->isReminderTimeForAllDayAdded()) {
+ mReminderField->removeReminderTimeField();
+ }
+ } else {
+ if ((referenceDate < QDate::currentDate())
+ || (referenceDate == QDate::currentDate()
+ && (mEditedEntry->startTime().time() < QTime::currentTime())))
+ {
+ mReminderField->setReminderOff();
+ } else {
+ // Enabled implies future. If changing from future to future do not
+ // do anything.
+ if (!mReminderField->isReminderFieldEnabled()) {
+ mReminderField->setReminderChoices();
+ }
+ }
+ }
}
/*!
@@ -943,17 +1048,21 @@
void CalenEditorPrivate::saveToDateTime(QDateTime& toDateTime)
{
QDateTime startTime = mEditedEntry->startTime();
+ bool fromDateChanged = false;
// Update the start time accordingly on UI - duration will be 60 mins
// bydefault for new entry and if it crosses the starttime
if (mNewEntry && toDateTime < startTime) {
startTime = toDateTime.addSecs(-3600);
- } else { // for exisitng entry
+ fromDateChanged = true;
+ } else {
+ // for exisitng entry
// we need to see if user has moved end time before the start time
// then substract the duration of the meeting that was saved earlier to
// the new end time to get the new start time
if (toDateTime < startTime) {
int duration = mEditedEntry->durationInSecs();
startTime = toDateTime.addSecs(-duration);
+ fromDateChanged = true;
}
}
// Set the new start time to the form
@@ -968,6 +1077,11 @@
// update the repeat choices depending on the meeting duration
mRepeatField->updateRepeatChoices();
}
+
+ // Update reminder choices if start time got changed.
+ if (fromDateChanged) {
+ updateReminderChoices();
+ }
}
/*!
@@ -977,11 +1091,14 @@
{
// Check if all day has been added or not
// and calculate the index accordingly
+ // all day added implies reminder time field is also added
int index;
- if (mIsAllDayItemAdded) {
+ if (mIsAllDayItemAdded && !isReminderTimeForAllDayAdded()) {
+ index = RepeatItem - 1;
+ } else if (!mNewEntry && isReminderTimeForAllDayAdded()) {
index = RepeatItem;
} else {
- index = RepeatItem - 1;
+ index = RepeatItem - 2;
}
mRepeatField->populateRepeatItem(index);
@@ -1072,7 +1189,9 @@
void CalenEditorPrivate::handleSubjectChange(const QString subject)
{
mEditedEntry->setSummary(subject);
- addDiscardAction();
+ if(!mNewEntry ){
+ addDiscardAction();
+ }
}
/*!
@@ -1096,15 +1215,49 @@
tempEndTime.setTime(tempEndQTime);
enableFromTotimeFileds(false, tempSartTime, tempEndTime);
+ QDate referenceDate;
+ if (mRepeatField->isRepeatUntilItemAdded()) {
+ referenceDate = mRepeatField->repeatUntilDate();
+ } else {
+ referenceDate = mEditedEntry->startTime().date();
+ }
+ mReminderField->updateReminderChoicesForAllDay(referenceDate);
+ // If the reminder field is enabled and it is not off
+ // it implies default alarm day and time is being displayed.
+ if (mReminderField->isReminderFieldEnabled() &&
+ mReminderField->currentReminderIndex() != 0) {
+ // Set the default alarm for all day.
+ mReminderField->setDefaultAlarmForAllDay();
+ } else {
+ // Remove reminder time field.
+ mReminderField->removeReminderTimeField();
+ }
} else {
// AllDayCheckBox in un-checked
// Set From/To times buttons editable
// 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;
+ } else {
+ index = ReminderTimeForAllDayItem - 1;
+ }
+ mReminderField->removeReminderTimeField();
+ mReminderField->setReminderChoices();
+ updateReminderChoices();
}
- addDiscardAction();
+
+ if(!mNewEntry){
+ addDiscardAction();
+ }
}
/*!
@@ -1114,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.
@@ -1125,7 +1344,9 @@
void CalenEditorPrivate::handleDescriptionChange(const QString description)
{
mEditedEntry->setDescription(description);
- addDiscardAction();
+ if(!mNewEntry){
+ addDiscardAction();
+ }
}
/*!
@@ -1135,14 +1356,16 @@
void CalenEditorPrivate::saveAndCloseEditor()
{
Action action = handleDone();
- closeEditor();
+ if (CalenEditorPrivate::ActionDelete != action) {
+ closeEditor();
+ }
if (CalenEditorPrivate::ActionSave == action) {
// check if we need to launch the calendar application
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,
@@ -1165,17 +1388,14 @@
*/
void CalenEditorPrivate::handleDeleteAction()
{
-
+ // If its a new entry just close the editor
if (mNewEntry) {
- if (showDeleteConfirmationQuery()) {
- closeEditor();
- }
+ closeEditor();
return;
+ }else {
+ // Delete entry and close editor
+ deleteEntry(true);
}
-
- // Delete entry and close editor
- deleteEntry(true);
-
}
/*!
@@ -1198,14 +1418,12 @@
/*!
* Show delete confirmation query
*/
-int CalenEditorPrivate::showDeleteConfirmationQuery()
+void CalenEditorPrivate::showDeleteConfirmationQuery(bool closeEditor)
{
- int retStatus = 0;
-
- HbMessageBox popup(HbMessageBox::MessageTypeQuestion);
- popup.setDismissPolicy(HbDialog::NoDismiss);
- popup.setTimeout(HbDialog::NoTimeout);
- popup.setIconVisible(true);
+ HbMessageBox *popup = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+ popup->setDismissPolicy(HbDialog::NoDismiss);
+ popup->setTimeout(HbDialog::NoTimeout);
+ popup->setAttribute( Qt::WA_DeleteOnClose, true );
QString text = 0;
@@ -1225,18 +1443,27 @@
}
}
- popup.setText(text);
-
- popup.setPrimaryAction(new HbAction(hbTrId("txt_calendar_button_delete"),
- &popup));
- popup.setSecondaryAction(new HbAction(hbTrId("txt_calendar_button_cancel"),
- &popup));
- HbAction *selected = popup.exec();
- if (selected == popup.primaryAction()) {
- retStatus = 1;
+ popup->setText(text);
+
+ QList<QAction*> list = popup->actions();
+ for(int i=0; i < list.count(); i++)
+ {
+ popup->removeAction(list[i]);
+ }
+ HbAction *deleteAction = new HbAction(hbTrId("txt_calendar_button_delete"),
+ popup);
+ popup->addAction(deleteAction);
+ connect(deleteAction, SIGNAL(triggered()), this,
+ SLOT(handleDeleteAction()));
+ HbAction *cancelAction = new HbAction(hbTrId("txt_calendar_button_cancel"),
+ popup);
+ // Editor should not be closed for all the cases when cancel is pressed
+ if(closeEditor) {
+ connect(cancelAction, SIGNAL(triggered()), this,
+ SLOT(closeEditor()));
}
-
- return retStatus;
+ popup->addAction(cancelAction);
+ popup->open();
}
/*!
@@ -1273,7 +1500,7 @@
}
return CalenEditorPrivate::ActionNothing;
case CalenEditorPrivate::ActionDelete:
- deleteEntry();
+ showDeleteConfirmationQuery(true);
return CalenEditorPrivate::ActionDelete;
case CalenEditorPrivate::ActionNothing:
return CalenEditorPrivate::ActionNothing;
@@ -1293,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)) {
@@ -1309,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) {
@@ -1341,26 +1581,22 @@
*/
void CalenEditorPrivate::deleteEntry(bool close)
{
-
// if editor is launched from Notes then don't delete entry
// Just exit from calendar editor
if (mOriginalEntry->id() > 0) {
-
// If user is editing single instanc then delete single instance
// else delete entry
- if (showDeleteConfirmationQuery()) {
- if (mEditRange == ThisOnly) {
- // User wants to delete only this occurence
- mAgendaUtil->deleteRepeatedEntry(*mOriginalEntry,
- AgendaUtil::ThisOnly);
- } else {
- // Delete the entry.
- mAgendaUtil->deleteEntry(mOriginalEntry->id());
- }
+ if (mEditRange == ThisOnly) {
+ // User wants to delete only this occurence
+ mAgendaUtil->deleteRepeatedEntry(*mOriginalEntry,
+ AgendaUtil::ThisOnly);
+ } else {
+ // Delete the entry.
+ mAgendaUtil->deleteEntry(mOriginalEntry->id());
+ }
- if (close) {
- closeEditor();
- }
+ if (close) {
+ closeEditor();
}
}
}
@@ -1382,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")
@@ -1403,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;
}
@@ -1462,4 +1722,74 @@
{
return mAllDayCheckBoxItem;
}
+
+/*!
+ Checks if all day item is added and if selected implies reminder time is added.
+ When editing single occurence irrespective of type of the event
+ the all day item is not shown.
+ Used to calculate the index of other items which are dependant on this.
+ */
+bool CalenEditorPrivate::isReminderTimeForAllDayAdded()
+{
+ return mReminderField->isReminderTimeForAllDayAdded();
+}
+
+/*!
+ Checks if it is an all day event or not.
+ */
+bool CalenEditorPrivate::isAllDayEvent()
+{
+ if (mAllDayCheckBoxItem) {
+ return (mAllDayCheckBoxItem->contentWidgetData("checkState")
+ == Qt::Checked)? true:false;
+ } else if (!mNewEntry && mEditedEntry->type() == AgendaEntry::TypeEvent) {
+ // If editing single occurence then all day item not shown but still it
+ // is an all day event..
+ return true;;
+ } else {
+ return false;
+ }
+}
+
+/*!
+ Returns the current index of the reminder field.
+ */
+int CalenEditorPrivate::currentIndexOfReminderField()
+{
+ return mReminderField->currentReminderIndex();
+}
+
+/*!
+ Sets the index.
+ /param index indicates the index value to be set.
+ */
+void CalenEditorPrivate::setCurrentIndexOfReminderField(int index)
+{
+ mReminderField->setCurrentIndex(index);
+}
+
+/*!
+ Sets the reminder choices for a non all day event.
+ */
+void CalenEditorPrivate::setReminderChoices()
+{
+ mReminderField->setReminderChoices();
+}
+
+/*!
+ Checks if editing all occurences or a single occurence.
+ */
+bool CalenEditorPrivate::isEditRangeThisOnly()
+{
+ return (mEditRange == ThisOnly);
+}
+
+/*!
+ Checks if all day field is added.
+ */
+bool CalenEditorPrivate::isAllDayFieldAdded()
+{
+ return mIsAllDayItemAdded;
+}
+
// End of file --Don't remove this.
--- a/calendarui/caleneditor/src/caleneditorcustomitem.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditorcustomitem.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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();
@@ -113,7 +119,8 @@
case CustomWidgetTo:
{
HbWidget *widgetBottom = new HbWidget();
- QGraphicsLinearLayout *layoutBottom = new QGraphicsLinearLayout(Qt::Horizontal);
+ QGraphicsLinearLayout *layoutBottom =
+ new QGraphicsLinearLayout(Qt::Horizontal);
widgetBottom->setLayout(layoutBottom);
mPushButtonTime = new HbPushButton(this);
@@ -133,20 +140,31 @@
CalenEditorDocLoader editorLocationDocLoader;
bool loadSuccess = false;
- editorLocationDocLoader.load(CALEN_EDITOR_LOCATION_XML_FILE, &loadSuccess);
+ editorLocationDocLoader.load(CALEN_EDITOR_LOCATION_XML_FILE,
+ &loadSuccess);
Q_ASSERT_X(loadSuccess, "caleneditor.cpp",
- "Unable to load caleneditor location view XML");
- HbWidget* widgetLocation = qobject_cast<HbWidget *> (editorLocationDocLoader.findWidget(CALEN_EDITOR_LOCATION));
-
- mLocationLineEdit = qobject_cast<HbLineEdit *>( editorLocationDocLoader.findWidget(CALEN_EDITOR_LOCATION_LINEEDIT));
+ "Unable to load caleneditor location view XML");
+ HbWidget* widgetLocation = qobject_cast<HbWidget *> (
+ editorLocationDocLoader.findWidget(CALEN_EDITOR_LOCATION));
+
+ mLocationLineEdit = qobject_cast<HbLineEdit *>(
+ editorLocationDocLoader.findWidget(
+ CALEN_EDITOR_LOCATION_LINEEDIT));
mLocationLineEdit->setMinRows(1);
mLocationLineEdit->setMaxRows(4);
- mLocationPushButton = qobject_cast<HbPushButton*>(editorLocationDocLoader.findWidget(CALEN_EDITOR_LOCATION_PUSHBUTTON));
+ mLocationPushButton = qobject_cast<HbPushButton*>(
+ editorLocationDocLoader.findWidget(
+ CALEN_EDITOR_LOCATION_PUSHBUTTON));
mLocationPushButton->setIcon( HbIcon("qtg_mono_location"));
- connect(mLocationPushButton, SIGNAL(clicked()), this, SLOT(launchLocationPicker()));
+ connect(mLocationPushButton, SIGNAL(clicked()), this,
+ SLOT(launchLocationPicker()));
connect(mLocationLineEdit, SIGNAL(textChanged(const QString)),
- this, SLOT(handleLocationTextChange(const QString)));
+ this, SLOT(handleLocationTextChange(const QString)));
+
+ connect(mLocationLineEdit, SIGNAL(editingFinished()),
+ this, SLOT(handleEditingFinished()));
+
return widgetLocation;
}
@@ -156,7 +174,12 @@
return mRepeatUntilWidget;
}
-
+ case ReminderTimeOffset:
+ {
+ mReminderTimeWidget = new HbPushButton(this);
+ return mReminderTimeWidget;
+ }
+
default:
return 0;
}
@@ -200,10 +223,14 @@
locationString.append(',');
}
locationString.append(selectedLocation.mCountry);
- emit locationTextChanged(locationString);
+ emit locationTextChanged(locationString, selectedLocation.mLatitude, selectedLocation.mLongitude);
mLocationLineEdit->setText(locationString );
}
}
+
+/*!
+ Populates the date and time in proper formats on the buttons
+ */
void CalenEditorCustomItem::populateDateTime(QDateTime defaultDateTime, bool isFromItem)
{
// Store the date and time to be shown
@@ -213,17 +240,22 @@
mIsFromItem = isFromItem;
mPushButtonDate->setText(mLocale.format(defaultDateTime.date(),
- r_qtn_date_usual_with_zero));
+ r_qtn_date_usual_with_zero));
mPushButtonTime->setText(mLocale.format(defaultDateTime.time(),
- r_qtn_time_usual_with_zero));
+ r_qtn_time_usual_with_zero));
}
+/*!
+ Sets the location on the button
+ */
void CalenEditorCustomItem::populateLocation(QString location )
{
mLocationLineEdit->setText( location );
-
}
+/*!
+ Sets the date range
+ */
void CalenEditorCustomItem::setDateRange(QDate start, QDate end)
{
mMaxDate = end;
@@ -236,82 +268,112 @@
}
}
+/*!
+ Sets the time range
+ */
void CalenEditorCustomItem::setTimeRange(QTime start, QTime end)
{
mMaxTime = start;
mMinTime = end;
}
+/*!
+ Enables the date button
+ */
void CalenEditorCustomItem::enableDateButton(bool value)
{
mPushButtonDate->setEnabled(value);
}
-
+/*!
+ Handles the location change
+ */
void CalenEditorCustomItem::handleLocationTextChange(QString location)
{
emit locationTextChanged(location);
}
+/*!
+ Handles the location editing finished
+ */
+void CalenEditorCustomItem::handleEditingFinished()
+{
+ emit locationEditingFinished();
+}
-
+/*!
+ Launches the date picker
+ */
void CalenEditorCustomItem::handleDate()
{
- // Create a date picker
- mDatePicker = new HbDateTimePicker(mDate, this);
- mDatePicker->setMinimumDate(mMinDate);
- mDatePicker->setMaximumDate(mMaxDate);
-
// Create a popup with datepicker for the user to select date.
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
// Set the proper heading
if (mIsFromItem) {
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_start_date")));
- }else {
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_end_date")));
- }
-
- popUp.setContentWidget(mDatePicker);
- HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
- popUp.setPrimaryAction(okAction);
+ popUp->setHeadingWidget(
+ new HbLabel(hbTrId("txt_calendar_title_start_date")));
+ }else {
+ popUp->setHeadingWidget(
+ new HbLabel(hbTrId("txt_calendar_title_end_date")));
+ }
+ // Create a date picker
+ if(mDatePicker) {
+ mDatePicker = NULL;
+ }
+ 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"), popUp);
+ popUp->addAction(okAction);
connect(okAction, SIGNAL(triggered()), this, SLOT(saveDate()));
- connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
- popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel")));
- popUp.exec();
+ popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"), popUp));
+ popUp->open();
}
+/*!
+ Launches the time picker
+ */
void CalenEditorCustomItem::handleTime()
{
+ // Create a popup with time picker for the user to select time.
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
+
+ // Set the proper heading
+ if (mIsFromItem) {
+ popUp->setHeadingWidget(
+ new HbLabel(hbTrId("txt_calendar_title_start_time")));
+ }else {
+ popUp->setHeadingWidget(
+ new HbLabel(hbTrId("txt_calendar_title_end_time")));
+ }
// Create a time picker.
- mTimePicker = new HbDateTimePicker(mTime, this);
+ if(mTimePicker) {
+ mTimePicker = NULL;
+ }
+ mTimePicker = new HbDateTimePicker(mTime, popUp);
+
if(mLocale.timeStyle() == HbExtendedLocale::Time12) {
mTimePicker->setDisplayFormat("hh:mm ap");
}else {
mTimePicker->setDisplayFormat("hh:mm");
}
mTimePicker->setTime(mTime);
- // Create a popup with time picker for the user to select time.
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
-
- // Set the proper heading
- if (mIsFromItem) {
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_start_time")));
- }else {
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_end_time")));
- }
-
- popUp.setContentWidget(mTimePicker);
- HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
- popUp.setPrimaryAction(okAction);
+ popUp->setContentWidget(mTimePicker);
+
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"), popUp);
+ popUp->addAction(okAction);
connect(okAction, SIGNAL(triggered()), this, SLOT(saveTime()));
- connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
- popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), &popUp));
- popUp.exec();
+ popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"), popUp));
+ popUp->open();
}
/*!
@@ -353,6 +415,18 @@
// Set FromTime in Editor
mPushButtonTime->setText(mLocale.format(fromDateTime.time(),r_qtn_time_usual_with_zero));
+
+ // Store the time
+ mTime = fromDateTime.time();
+}
+
+/*!
+ Disable Date field.
+ */
+void CalenEditorCustomItem::disableFromToDateField()
+{
+ // disable the date field.
+ mPushButtonDate->setEnabled(false);
}
/*!
@@ -364,7 +438,11 @@
mPushButtonTime->setEnabled(enableTimeFiles);
// Set ToTime in Editor
- mPushButtonTime->setText(mLocale.format(toDateTime.time(),r_qtn_time_usual_with_zero));
+ mPushButtonTime->setText(mLocale.format(
+ toDateTime.time(),r_qtn_time_usual_with_zero));
+
+ // Store the time
+ mTime = toDateTime.time();
}
/*!
@@ -377,7 +455,7 @@
index.data(HbDataFormModelItem::ItemTypeRole).toInt());
if(itemType == CustomWidgetFrom || itemType == CustomWidgetTo || itemType == RepeatUntilOffset
- || itemType == CustomWidgetLocation ) {
+ || itemType == CustomWidgetLocation || itemType == ReminderTimeOffset ) {
return true;
} else {
return false;
@@ -400,9 +478,20 @@
mRepeatUntilWidget->setText(modelItem->contentWidgetData("text").toString());
}
break;
+
+ case ReminderTimeOffset:
+ {
+ mReminderTimeWidget->setText(modelItem->contentWidgetData("text").toString());
+ }
+ break;
}
}
+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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditorreminderfield.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -18,13 +18,22 @@
// System Includes
+#include <QDate>
+
#include <hbdataformmodelitem.h>
#include <hbdataformmodel.h>
#include <hbdataform.h>
+#include <hbdatetimepicker.h>
+#include <hbextendedlocale.h>
+#include <hbi18ndef.h>
+#include <hbdialog.h>
+#include <hblabel.h>
+#include <hbaction.h>
// User Includes
#include "caleneditorreminderfield.h"
+#define numberOfMinutesInADay 1440
/*!
\class CalenEditorReminderField
*/
@@ -42,35 +51,16 @@
:QObject(parent),
mCalenEditor(calenEditor),
mEditorForm(form),
- mCalenEditorModel(model)
+ mCalenEditorModel(model),
+ mCustomReminderTimeItem(NULL),
+ mReminderTimeAdded(false)
{
mReminderItem = new HbDataFormModelItem();
mReminderItem->setType(HbDataFormModelItem::ComboBoxItem);
mReminderItem->setData(HbDataFormModelItem::LabelRole,
- hbTrId("txt_calendar_setlabel_alarm"));
- // Create the remaindar choices
- QStringList remaindarChoices;
- remaindarChoices << 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);
-
- mReminderItem->setContentWidgetData(QString("items"), remaindarChoices);
-
- // 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;
-
+ hbTrId("txt_calendar_setlabel_reminder"));
// Add it to the model
- mCalenEditorModel->appendDataFormItem( mReminderItem,
+ mCalenEditorModel->appendDataFormItem(mReminderItem,
mCalenEditorModel->invisibleRootItem());
}
@@ -79,7 +69,33 @@
*/
CalenEditorReminderField::~CalenEditorReminderField()
{
- // Nothing Yet
+ if(mReminderHash.count()) {
+ mReminderHash.clear();
+ }
+}
+
+/*!
+ Set the reminder choices.
+ */
+void CalenEditorReminderField::setReminderChoices()
+{
+ // Create the reminder choices
+ QStringList reminderChoices;
+ 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] = -1; // OFF.
+ mReminderHash[1] = 0;
+ mReminderHash[2] = 15;
+ mReminderHash[3] = 30;
+ mReminderHash[4] = 60;
+ mReminderItem->setEnabled(true);
}
/*!
@@ -93,7 +109,7 @@
}
/*!
- Removes reminder item frm the model
+ Removes reminder item from the model
*/
void CalenEditorReminderField::removeItemFromModel()
{
@@ -106,33 +122,106 @@
*/
void CalenEditorReminderField::populateReminderItem(bool newEntry)
{
+ AgendaAlarm reminder;
+ bool pastEvent = false;
+
+ // Set reference date to start date or repeat until date accordingly to
+ // decide whether its a past event or not.
+ QDate referenceDate;
+ if (!mCalenEditor->editedEntry()->isRepeating() ||
+ (mCalenEditor->isEditRangeThisOnly())) {
+ referenceDate = mCalenEditor->editedEntry()->startTime().date();
+ } else {
+ referenceDate = mCalenEditor->editedEntry()->repeatRule().until().date();
+ }
+
+ if ((referenceDate < QDate::currentDate()) ||
+ (referenceDate == QDate::currentDate()
+ && (mCalenEditor->editedEntry()->startTime().time() <
+ QTime::currentTime()))) {
+ pastEvent = true;
+ }
+
+ if (mCalenEditor->isAllDayEvent()) {
+ updateReminderChoicesForAllDay(referenceDate);
+ } else {
+ setReminderChoices();
+ }
// Set the default reminder value to 15 minutes
if (newEntry) {
- mReminderItem->setContentWidgetData("currentIndex", 3);
- // Save the reminder alarm for the entry
- AgendaAlarm reminder;
- reminder.setTimeOffset(mReminderHash.value(3));
- reminder.setAlarmSoundName(QString(" "));
- // Set the reminder to the entry as well as original entry.
- mCalenEditor->editedEntry()->setAlarm(reminder);
- mCalenEditor->originalEntry()->setAlarm(reminder);
+ if (!pastEvent) {
+ mReminderItem->setContentWidgetData("currentIndex", 2);
+ // Save the reminder alarm for the entry
+ reminder.setTimeOffset(mReminderHash.value(2));
+ reminder.setAlarmSoundName(QString(" "));
+ // Set the reminder to the entry as well as original entry.
+ mCalenEditor->editedEntry()->setAlarm(reminder);
+ mCalenEditor->originalEntry()->setAlarm(reminder);
+ } else {
+ mReminderItem->setContentWidgetData("currentIndex", 0);
+ mReminderItem->setEnabled(false);
+ }
} else {
+ // If the alarm is not null,
+ // Check if all day event or not and then set the choices accordingly.
if (mCalenEditor->editedEntry()->alarm().isNull()) {
// Alarm is set off
mReminderItem->setContentWidgetData("currentIndex", 0);
- } else {
+ if(mReminderTimeAdded) {
+ removeReminderTimeField();
+ }
+ } else if (mCalenEditor->editedEntry()->type()
+ != AgendaEntry::TypeEvent) {
// Get the reminder offset value.
- int reminderOffset = mCalenEditor->editedEntry()->alarm().timeOffset();
+ int reminderOffset =
+ mCalenEditor->editedEntry()->alarm().timeOffset();
// Get the index value for the reminder combo box from the hash
// table.
int index = mReminderHash.key(reminderOffset);
mReminderItem->setContentWidgetData("currentIndex", index);
+ } else {
+ // Insert reminder time field and display entry's reminder time.
+ // If past then disable the field.
+ if (!mReminderTimeAdded) {
+ insertReminderTimeField();
+ if (pastEvent) {
+ mCustomReminderTimeItem->setEnabled(false);
+ }
+ }
+ QStringList reminderChoicesForAllDay;
+ 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);
+ // Set the appropriate reminder depending on the value of time offset.
+ reminder = mCalenEditor->editedEntry()->alarm();
+ int offsetInMins = reminder.timeOffset();
+ if (offsetInMins < 0 || offsetInMins == 0) {
+ mReminderItem->setContentWidgetData("currentIndex", 1);
+ mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
+ * 60));
+ } else if (offsetInMins < numberOfMinutesInADay) {
+ mReminderItem->setContentWidgetData("currentIndex", 2);
+ mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
+ * 60));
+ } else {
+ mReminderItem->setContentWidgetData("currentIndex", 3);
+ offsetInMins %= (24 * 60);
+ mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
+ * 60));
+ }
+ setDisplayTime();
+ }
+ if (pastEvent) {
+ mReminderItem->setEnabled(false);
}
}
mEditorForm->addConnection(mReminderItem,
SIGNAL(currentIndexChanged(int)), this,
SLOT(handleReminderIndexChanged(int)));
-
}
/*!
@@ -146,21 +235,64 @@
if (!mCalenEditor->editedEntry()->alarm().isNull()) {
reminder = mCalenEditor->editedEntry()->alarm();
}
- // If value for the index in hash table is 0 i.e reminder is "OFF",
- // then dont do anything only set the default constructed reminder to
- // the entry which is Null.
- if (mReminderHash.value(index)) {
- // If not zero then set the reminder offset
- // value to the entry.
- reminder.setTimeOffset(mReminderHash.value(index));
- reminder.setAlarmSoundName(QString(" "));
+ // Check whether all day event or not and store appropriately.
+ if (!mCalenEditor->isAllDayEvent()) {
+ // 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) < 0) {
+ // Construct the default alarm which is NULL
+ reminder = AgendaAlarm();
+ } else {
+ // If not zero then set the reminder offset
+ // value to the entry.
+ reminder.setTimeOffset(mReminderHash.value(index));
+ reminder.setAlarmSoundName(QString(" "));
+ }
} else {
- // Construct the default alarm which is NULL
- reminder = AgendaAlarm();
+ QDateTime reminderDateTimeForAllDay;
+ QDateTime
+ startDateTimeForAllDay(
+ mCalenEditor->editedEntry()->startTime().date(),
+ QTime(0, 0, 0));
+ if (mReminderItem->contentWidgetData("currentIndex") == 0) {
+ reminder = AgendaAlarm();
+ mCustomReminderTimeItem->setEnabled(false);
+ } else {
+ int offset = 0;
+ if (mReminderItem->contentWidgetData("currentIndex") == 2) {
+ offset = 1;
+ } else if (mReminderItem->contentWidgetData("currentIndex") == 3) {
+ offset = 2;
+ }
+ if(!mReminderTimeAdded) {
+ insertReminderTimeField()
+; }
+ // If on same day as that of the event then check if time has been
+ // changed , if changed retain that else set default time.
+ if (offset == 0) {
+ if(mReminderTimeForAllDay == QTime(18, 0, 0, 0)) {
+ mReminderTimeForAllDay.setHMS(8, 0, 0);
+ setDisplayTime();
+ }
+ }
+ reminderDateTimeForAllDay.setDate(
+ mCalenEditor->editedEntry()->startTime().date().addDays(
+ -offset));
+ reminderDateTimeForAllDay.setTime(mReminderTimeForAllDay);
+ int seconds =
+ reminderDateTimeForAllDay.secsTo(startDateTimeForAllDay);
+ int timeOffest = seconds / 60;
+ mCustomReminderTimeItem->setEnabled(true);
+ reminder.setTimeOffset(timeOffest);
+ reminder.setAlarmSoundName(QString(" "));
+ }
}
// Set the reminder to the entry.
mCalenEditor->editedEntry()->setAlarm(reminder);
- mCalenEditor->addDiscardAction();
+ if(!mCalenEditor->isNewEntry()) {
+ mCalenEditor->addDiscardAction();
+ }
}
/*!
@@ -171,4 +303,238 @@
{
return mCalenEditorModel->indexFromItem(mReminderItem);
}
+
+/*!
+ Set reminder off.
+ */
+void CalenEditorReminderField::setReminderOff()
+{
+ // Create the remindar choices
+ QStringList reminderChoices;
+ reminderChoices << hbTrId("txt_calendar_setlabel_reminder_val_off");
+ mReminderItem->setContentWidgetData(QString("items"), reminderChoices);
+ mReminderItem->setEnabled(false);
+}
+
+/*!
+ Set the default alarm for a new all day event.
+ */
+void CalenEditorReminderField::setDefaultAlarmForAllDay()
+{
+ // Set default alarm if its a new entry.
+ if (mCalenEditor->isNewEntry()) {
+ AgendaAlarm reminder;
+ QDate defaultDate
+ (mCalenEditor->editedEntry()->startTime().date().addDays(-1));
+ // Set default time.
+ mReminderTimeForAllDay.setHMS(18, 0, 0, 0);
+ setDisplayTime();
+ QDateTime startDateTimeForAllDay(
+ mCalenEditor->editedEntry()->startTime().date(), QTime(0, 0));
+ QDateTime defaultReminderDateTimeForAllDay
+ (defaultDate, mReminderTimeForAllDay);
+ int offsetInSecs =
+ defaultReminderDateTimeForAllDay.secsTo(startDateTimeForAllDay);
+ int offsetInMins = offsetInSecs/60;
+ reminder.setTimeOffset(offsetInMins);
+ reminder.setAlarmSoundName(QString(" "));
+ // Set the reminder to the entry as well as original entry.
+ mCalenEditor->editedEntry()->setAlarm(reminder);
+ mCalenEditor->originalEntry()->setAlarm(reminder);
+ }
+}
+
+/*!
+ Updates the reminder choices for an all day event.
+ \param referenceDate to indicate past or not.
+ */
+void CalenEditorReminderField::updateReminderChoicesForAllDay(QDate referenceDate)
+{
+ if (!mReminderTimeAdded){
+ insertReminderTimeField();
+ }
+ QStringList reminderChoicesForAllDay;
+ QDate tomorrow = QDate::currentDate().addDays(1);
+ QDate theDayAfterTomorrow = QDate::currentDate().addDays(2);
+
+ if (referenceDate < QDate::currentDate() ||
+ referenceDate == QDate::currentDate()) {
+ // Set reminder off for past event.
+ 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("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("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);
+ }
+ if (mReminderItem->isEnabled()) {
+ mReminderItem->setContentWidgetData(QString("items"),
+ reminderChoicesForAllDay);
+ }
+}
+
+/*!
+ Insert the reminder time field for an all day event.
+ */
+void CalenEditorReminderField::insertReminderTimeField()
+{
+ HbDataFormModelItem::DataItemType itemType =
+ static_cast<HbDataFormModelItem::DataItemType> (ReminderTimeOffset);
+
+ // If all day item is not added then insert at one level before.
+ int index = CalenEditorPrivate::ReminderTimeForAllDayItem;
+ if(!mCalenEditor->isAllDayFieldAdded()) {
+ index = CalenEditorPrivate::ReminderTimeForAllDayItem - 1;
+ }
+ mCustomReminderTimeItem = mCalenEditorModel->insertDataFormItem(
+ index,
+ itemType,
+ QString(hbTrId("txt_calendar_setlabel_reminder_time")),
+ mCalenEditorModel->invisibleRootItem());
+ if (currentReminderIndex() != 1){
+ mReminderTimeForAllDay.setHMS(18,0,0,0);
+ } else {
+ mReminderTimeForAllDay.setHMS(8,0,0,0);
+ }
+
+ mEditorForm->addConnection(mCustomReminderTimeItem, SIGNAL(clicked()),
+ this, SLOT(launchReminderTimePicker()));
+ setDisplayTime();
+ mReminderTimeAdded = true;
+}
+
+/*!
+ Set the reminder time selected by the user.
+ */
+void CalenEditorReminderField::setDisplayTime()
+{
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ QString timeString = locale.format(
+ mReminderTimeForAllDay,
+ r_qtn_time_usual_with_zero);
+ mCustomReminderTimeItem->setContentWidgetData("text", timeString);
+}
+
+/*!
+ Remove the reminder time field if its not an all day event.
+ */
+void CalenEditorReminderField::removeReminderTimeField()
+{
+ mReminderTimeAdded = false;
+ if (mCustomReminderTimeItem) {
+ QModelIndex reminderIndex =
+ mCalenEditorModel->indexFromItem(mCustomReminderTimeItem);
+ mCalenEditorModel->removeItem(
+ mCalenEditorModel->index(
+ reminderIndex.row(), 0));
+ mCustomReminderTimeItem = NULL;
+ }
+}
+
+/*!
+ Launches time picker to select time.
+ */
+void CalenEditorReminderField::launchReminderTimePicker()
+{
+ mTimePicker = new HbDateTimePicker(mReminderTimeForAllDay);
+ mTimePicker->setTime(mReminderTimeForAllDay);
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setContentWidget(mTimePicker);
+ popUp->setHeadingWidget( new HbLabel(
+ hbTrId("Reminder Time")));
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+ popUp->addAction(okAction);
+ connect(okAction, SIGNAL(triggered()), this, SLOT(setReminderTimeForAllDay()));
+ connect(okAction, SIGNAL(triggered()), popUp, SLOT(close()));
+ popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"),
+ popUp));
+ popUp->open();
+}
+
+/*!
+ Set the reminder time chosen.
+ */
+void CalenEditorReminderField::setReminderTimeForAllDay()
+{
+ mReminderTimeForAllDay = mTimePicker->time();
+ if (mReminderTimeForAllDay.isValid()) {
+ // Change the time displayed to that selected by the user.
+ setDisplayTime();
+ handleReminderIndexChanged(currentReminderIndex());
+ }
+}
+
+/*!
+ Checks if reminder field is enabled or not.
+ */
+bool CalenEditorReminderField::isReminderFieldEnabled()
+{
+ return mReminderItem->isEnabled();
+}
+
+/*!
+ Returns the number of items present in the reminder option.
+ */
+int CalenEditorReminderField::reminderItemsCount()
+{
+ QVariant strings = mReminderItem->contentWidgetData("items");
+ QStringList stringList(strings.toStringList());
+ int count = stringList.count();
+ return count;
+}
+
+/*!
+ Returns the current chosen index.
+ */
+int CalenEditorReminderField::currentReminderIndex()
+{
+ QVariant countVariant = mReminderItem->contentWidgetData("currentIndex");
+ int index = countVariant.toInt();
+ return index;
+}
+
+/*!
+ Sets the chosen index as current index.
+ /param index indicates the idex value to be set.
+ */
+void CalenEditorReminderField::setCurrentIndex(int index)
+{
+ mReminderItem->setContentWidgetData("currentIndex", index);
+}
+
+/*!
+ Disables the reminder time field.
+ */
+void CalenEditorReminderField::disableReminderTimeField()
+{
+ if (mReminderTimeAdded) {
+ mCustomReminderTimeItem->setEnabled(false);
+ }
+}
+
+/*!
+ Checks if reminder time field is added or not.
+ */
+bool CalenEditorReminderField::isReminderTimeForAllDayAdded()
+{
+ return mReminderTimeAdded;
+}
+
// End of file --Don't remove this.
--- a/calendarui/caleneditor/src/caleneditorrepeatfield.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditorrepeatfield.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -18,6 +18,7 @@
// System Includes
+#include <QDate>
#include <hbdataformmodelitem.h>
#include <hbdataformviewitem.h>
#include <hbdataformmodel.h>
@@ -32,6 +33,9 @@
#include "caleneditorrepeatfield.h"
#include "caleneditorcustomitem.h"
+// Constants
+const int userRole = Qt::UserRole + 100;
+
/*!
\class CalenEditorRepeatField
*/
@@ -70,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")
@@ -125,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()) {
@@ -178,11 +181,11 @@
AgendaRepeatRule(
AgendaRepeatRule::InvalidRule));
}
- connect(mRepeatComboBox, SIGNAL(currentIndexChanged(int)), this,
- SLOT(handleRepeatIndexChanged(int)));
// Update the repeat choices depending upon the duration
updateRepeatChoices();
+ connect(mRepeatComboBox, SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleRepeatIndexChanged(int)));
}
/*!
@@ -196,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) {
@@ -295,7 +298,10 @@
}
break;
}
- mCalenEditor->addDiscardAction();
+ if(!mCalenEditor->isNewEntry()) {
+ mCalenEditor->addDiscardAction();
+ }
+ mCalenEditor->updateReminderChoices();
}
/*!
@@ -314,10 +320,13 @@
{
HbDataFormModelItem::DataItemType itemType =
static_cast<HbDataFormModelItem::DataItemType> (RepeatUntilOffset);
-
- QModelIndex repeatIndex = mCalenEditorModel->indexFromItem(mRepeatItem);
+
+ int index = CalenEditorPrivate::RepeatUntilItem;
+ if (!mCalenEditor->isReminderTimeForAllDayAdded()) {
+ index -= 1;
+ }
mCustomRepeatUntilItem = mCalenEditorModel->insertDataFormItem(
- CalenEditorPrivate::RepeatUntilItem,
+ index,
itemType,
QString(
hbTrId(
@@ -351,12 +360,19 @@
*/
void CalenEditorRepeatField::launchRepeatUntilDatePicker()
{
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setHeadingWidget( new HbLabel(
+ hbTrId("txt_calendar_title_repeat_until")));
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
+
if (mDatePicker) {
mDatePicker = NULL;
}
if (mRepeatRuleType == AgendaRepeatRule::DailyRule) {
QDate minDate = mCalenEditor->editedEntry()->endTime().date().addDays(1);
- mDatePicker = new HbDateTimePicker(mRepeatUntilDate);
+ mDatePicker = new HbDateTimePicker(mRepeatUntilDate, popUp);
mDatePicker->setMinimumDate(minDate);
mDatePicker->setMaximumDate(QDate(31, 12, 2100));
mDatePicker->setDate(mRepeatUntilDate);
@@ -367,36 +383,30 @@
} else {
minDate = mCalenEditor->editedEntry()->endTime().date().addDays(14);
}
- mDatePicker = new HbDateTimePicker(mRepeatUntilDate);
+ mDatePicker = new HbDateTimePicker(mRepeatUntilDate, popUp);
mDatePicker->setMinimumDate(minDate);
mDatePicker->setMaximumDate(QDate(31, 12, 2100));
mDatePicker->setDate(mRepeatUntilDate);
} else if (mRepeatRuleType == AgendaRepeatRule::MonthlyRule) {
QDate minDate = mCalenEditor->editedEntry()->endTime().date().addMonths(1);
- mDatePicker = new HbDateTimePicker(mRepeatUntilDate);
+ mDatePicker = new HbDateTimePicker(mRepeatUntilDate, popUp);
mDatePicker->setMinimumDate(minDate);
mDatePicker->setMaximumDate(QDate(31, 12, 2100));
mDatePicker->setDate(mRepeatUntilDate);
} else if (mRepeatRuleType == AgendaRepeatRule::YearlyRule) {
QDate minDate = mCalenEditor->editedEntry()->endTime().date().addYears(1);
- mDatePicker = new HbDateTimePicker(mRepeatUntilDate);
+ mDatePicker = new HbDateTimePicker(mRepeatUntilDate, popUp);
mDatePicker->setMinimumDate(minDate);
mDatePicker->setMaximumDate(QDate(31, 12, 2100));
mDatePicker->setDate(mRepeatUntilDate);
}
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
- popUp.setContentWidget(mDatePicker);
- popUp.setHeadingWidget( new HbLabel(
- hbTrId("txt_calendar_title_repeat_until")));
+ popUp->setContentWidget(mDatePicker);
+
HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
- popUp.setPrimaryAction(okAction);
+ popUp->addAction(okAction);
connect(okAction, SIGNAL(triggered()), this, SLOT(setRepeatUntilDate()));
- connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
- popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"),
- &popUp));
- popUp.exec();
+ popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"), popUp));
+ popUp->open();
}
/*!
@@ -411,6 +421,15 @@
r_qtn_date_usual_with_zero);
mCustomRepeatUntilItem->setContentWidgetData("text", dateString);
}
+ mCalenEditor->updateReminderChoices();
+}
+
+/*!
+ Returns the repeatuntildate displayed.
+ */
+QDate CalenEditorRepeatField::repeatUntilDate()
+{
+ return mRepeatUntilDate;
}
/*!
@@ -418,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
@@ -428,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")
@@ -438,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();
@@ -526,7 +547,6 @@
}
// Set the previous user's choice
mRepeatComboBox->setCurrentIndex(choice);
- handleRepeatIndexChanged(choice);
}
/*!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenlauncher/bwins/calenlauncheru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/calenlauncher/inc/calenlauncher.h Mon Jun 28 15:22:02 2010 +0530
@@ -29,7 +29,7 @@
public:
enum CalenView{
MonthView = 0,
- DayView
+ AgendaView
};
CalenLauncher(QObject* parent = 0);
~CalenLauncher();
--- a/calendarui/calenplugins/agendaeventviewerplugin/agendaeventviewerplugin.pro Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/calenplugins/agendaeventviewerplugin/agendaeventviewerplugin.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- a/calendarui/calenplugins/calenplugins.pro Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/calenplugins/calenplugins.pro Mon Jun 28 15:22:02 2010 +0530
@@ -17,7 +17,6 @@
TEMPLATE = subdirs
-SUBDIRS += calensettingsplugin
SUBDIRS += agendaeventviewerplugin
CONFIG += ordered
--- a/calendarui/calenplugins/calensettingsplugin/calensettingsplugin.pro Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,59 +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 is the project file defnition for calensettingsplugin.
-#
-
-
-TEMPLATE = lib
-TARGET = calensettingsplugin
-DEPENDPATH += . \
- ./inc \
- ./src
-INCLUDEPATH += . \
- ../../inc
-
-CONFIG += hb plugin
-
-
-symbian: {
-
- TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002B338
-
- LIBS += -lcalensettings \
- -lcpframework
-
- deploy.path = C:
- headers.sources = qmakepluginstubs/calensettingsplugin.qtplugin
- headers.path = /resource/qt/plugins/controlpanel
-
- # This is for new exporting system coming in garden
- for(header, headers.sources):BLD_INF_RULES.prj_exports += "./$$header $$deploy.path$$headers.path/$$basename(header)"
-
- TARGET.CAPABILITY = CAP_GENERAL_DLL
-
- plugin.sources = calensettingsplugin.dll
- plugin.path = \resource\qt\plugins\controlpanel
- DEPLOYMENT += plugin
-}
-
-# Input
-HEADERS += calensettingsplugin.h \
- calendarsettingsview.h
-
-SOURCES += calensettingsplugin.cpp \
- calendarsettingsview.cpp
-
-
-# End of file --Don't remove this.
\ No newline at end of file
--- a/calendarui/calenplugins/calensettingsplugin/inc/calendarsettingsview.h Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +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 CalendarSettingsView_H_
-#define CalendarSettingsView_H_
-
-#include <cpbasesettingview.h>
-
-class SettingsUiUtility;
-
-class CalendarSettingsView : public CpBaseSettingView
-{
- Q_OBJECT
-public:
- explicit CalendarSettingsView(QGraphicsItem *parent = 0);
- virtual ~CalendarSettingsView();
-public slots:
-
-private:
- SettingsUiUtility *mSettingsUtility;
-
-};
-#endif// CalendarSettingsView_H_
--- a/calendarui/calenplugins/calensettingsplugin/inc/calensettingsplugin.h Mon May 03 12:30:32 2010 +0300
+++ /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:
- *
-*/
-
-
-#ifndef CalenSettingsPlugin_H_
-#define CalenSettingsPlugin_H_
-
-#include <cppluginplatinterface.h>
-#include <qobject.h>
-
-class CpItemDataHelper;
-
-class CalenSettingsPlugin : public QObject, public CpPluginPlatInterface
-{
- Q_OBJECT
- Q_INTERFACES(CpPluginPlatInterface)
-
-public:
- CalenSettingsPlugin();
- virtual ~CalenSettingsPlugin();
-
- virtual int uid() const;
- virtual CpSettingFormItemData *createSettingFormItemData(CpItemDataHelper &itemDataHelper) const;
-};
-
-#endif /* CalenSettingsPlugin_H_ */
--- a/calendarui/calenplugins/calensettingsplugin/src/calendarsettingsview.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,39 +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:
- *
-*/
-
-
-#include <hbdataform.h>
-#include "calendarsettingsview.h"
-#include "calensettings.h"
-
-CalendarSettingsView::CalendarSettingsView(QGraphicsItem *parent)
-:CpBaseSettingView(0, parent)
-{
- HbDataForm *form = settingForm();
-
- if (form) {
- form->setHeading(hbTrId("txt_calendar_subhead_calendar_settings"));
-
- CalenSettings *settings = new CalenSettings(form);
- settings->createModel();
- settings->populateSettingList();
- }
-}
-
-CalendarSettingsView::~CalendarSettingsView()
-{
-}
--- a/calendarui/calenplugins/calensettingsplugin/src/calensettingsplugin.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,49 +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:
- *
-*/
-
-#include <cpsettingformentryitemdataimpl.h>
-
-#include "calensettingsplugin.h"
-#include "calendarsettingsview.h"
-#include <cpitemdatahelper.h>
-
-
-CalenSettingsPlugin::CalenSettingsPlugin()
-{
-}
-
-CalenSettingsPlugin::~CalenSettingsPlugin()
-{
-}
-
-int CalenSettingsPlugin::uid() const
-{
- // TODO: get a uid and replace it.
- return 0x20029F7F;
-}
-
-CpSettingFormItemData *CalenSettingsPlugin::createSettingFormItemData(CpItemDataHelper& itemDataHelper) const
-{
- //CpItemDataHelper* pHelper = new CpItemDataHelper();
-
- // For now dummyicon
- HbIcon* icon = new HbIcon();
- return new CpSettingFormEntryItemDataImpl<CalendarSettingsView>(itemDataHelper, QString("Calendar application"),
- QString("Calendar settings plugin"), *icon);
-}
-
-Q_EXPORT_PLUGIN2(CalenSettingsPlugin, CalenSettingsPlugin)
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/calenviewerservice/calenviewerservice.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/commonutils/inc/calenagendautils.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/commonutils/inc/calendateutils.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/commonutils/src/calenagendautils.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/commonutils/src/calendateutils.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/controller.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/data/calendar.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/data/xml/calenmonthview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,512 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument context="Calendar" version="0.9">
+ <object name="NewEventAction" type="HbAction">
+ <string locid="txt_calendar_opt_new_event" name="text" value="New Event"/>
+ </object>
+ <object name="goToTodayAction" type="HbAction">
+ <string locid="txt_calendar_opt_go_to_today" name="text" value="Go to today"/>
+ </object>
+ <object name="goToDateAction" type="HbAction">
+ <string locid="txt_calendar_opt_go_to_date" name="text" value="Go to date"/>
+ </object>
+ <object name="settingsAction" type="HbAction">
+ <string locid="txt_calendar_opt_settings" name="text" value="Settings"/>
+ </object>
+ <object name="beforeDateAction" type="HbAction">
+ <string locid="txt_calendar_opt_sub_before_date" name="text" value="Before date"/>
+ </object>
+ <object name="allEntriesAction" type="HbAction">
+ <string locid="txt_calendar_opt_sub_all_entries" name="text" value="All entries"/>
+ </object>
+ <widget name="monthView" type="HbView">
+ <widget name="content" role="HbView:widget" type="HbWidget">
+ <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="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">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
+ </widget>
+ <widget name="secondDayLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
+ </widget>
+ <widget name="thirdDayLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
+ </widget>
+ <widget name="fourthDayLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
+ </widget>
+ <widget name="fifthDayLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
+ </widget>
+ <widget name="sixthDayLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <fontspec name="fontSpec" role="Secondary" textheight="var(hb-param-text-height-tiny)"/>
+ </widget>
+ <widget name="seventhDayLabel" type="HbLabel">
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <real name="z" value="6"/>
+ <sizehint height="3un" type="PREFERRED" width="3.41604un"/>
+ <sizehint height="3un" type="MINIMUM" width="3.41604un"/>
+ <sizehint height="3un" type="MAXIMUM" width="10.54104un"/>
+ <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"/>
+ <sizehint height="3un" type="MINIMUM" width="52un"/>
+ <sizehint height="3un" type="MAXIMUM" width="52un"/>
+ <layout orientation="Horizontal" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="firstDayLabel"/>
+ <linearitem itemname="secondDayLabel"/>
+ <linearitem itemname="thirdDayLabel"/>
+ <linearitem itemname="fourthDayLabel"/>
+ <linearitem itemname="fifthDayLabel"/>
+ <linearitem itemname="sixthDayLabel"/>
+ <linearitem itemname="seventhDayLabel"/>
+ </layout>
+ </widget>
+ <widget name="weekNumbersWidget" type="HbWidget">
+ <widget name="firstWeekLabel" 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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <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"/>
+ <sizehint height="43.77612un" type="MINIMUM" width="6.41604un"/>
+ <sizehint height="62.77612un" type="MAXIMUM" width="6.41604un"/>
+ <layout orientation="Vertical" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="firstWeekLabel"/>
+ <linearitem itemname="secondWeekLabel"/>
+ <linearitem itemname="thirdWeekLabel"/>
+ <linearitem itemname="fourthWeekLabel"/>
+ <linearitem itemname="fifthWeekLabel"/>
+ <linearitem itemname="sixthWeekLabel"/>
+ </layout>
+ </widget>
+ <widget name="monthGridWeekNumWidget" type="HbWidget">
+ <widget name="monthGrid" type="HbGridView">
+ <integer name="columnCount" value="7"/>
+ <real name="z" value="4"/>
+ <enums name="scrollingStyle" value="PanOrFlick"/>
+ <sizehint height="43.77612un" type="PREFERRED" width="52un"/>
+ <sizehint height="62.77612un" type="MAXIMUM" width="52un"/>
+ <sizehint height="43.77612un" type="MINIMUM" width="0un"/>
+ <integer name="rowCount" value="6"/>
+ </widget>
+ <real name="z" value="4"/>
+ <sizehint height="43.77612un" type="PREFERRED" width="23.8806un"/>
+ <sizehint height="43.77612un" type="MINIMUM" width="2.68657un"/>
+ <sizehint height="62.77612un" type="MAXIMUM" width="52un"/>
+ <layout orientation="Horizontal" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="monthGrid"/>
+ </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">
+ <widget name="prevPreviewPaneContents" role="HbScrollArea:contents" type="HbWidget">
+ <real name="z" value="0"/>
+ <layout orientation="Vertical" spacing="0.75un" type="linear">
+ <contentsmargins bottom="0.75un" left="2un" right="2un" top="0.75un"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ <enums name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <enums name="clampingStyle" value="StrictClamping"/>
+ <enums name="scrollingStyle" value="PanOrFlick"/>
+ <bool name="frictionEnabled" value="TRUE"/>
+ </widget>
+ <widget name="NoEntriesLabelPrev" type="HbLabel">
+ <string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <enums name="elideMode" value="ElideNone"/>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="23.8806un"/>
+ <layout type="anchor">
+ <anchoritem dst="prevPreviewPane" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="prevPreviewPane" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="prevPreviewPane" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="prevPreviewPane" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="NoEntriesLabelPrev" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="NoEntriesLabelPrev" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="NoEntriesLabelPrev" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="NoEntriesLabelPrev" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="11.9403un"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="prevPaneContainer"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="prevPaneLayout"/>
+ </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">
+ <widget name="currPreviewPaneContents" role="HbScrollArea:contents" type="HbWidget">
+ <real name="z" value="0"/>
+ <layout orientation="Vertical" spacing="0.75un" type="linear">
+ <contentsmargins bottom="0.75un" left="2un" right="2un" top="0.75un"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ <enums name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <enums name="clampingStyle" value="StrictClamping"/>
+ <enums name="scrollingStyle" value="PanOrFlick"/>
+ <bool name="frictionEnabled" value="TRUE"/>
+ </widget>
+ <widget name="NoEntriesLabelCurr" type="HbLabel">
+ <string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <enums name="elideMode" value="ElideNone"/>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="23.8806un"/>
+ <layout type="anchor">
+ <anchoritem dst="currPreviewPane" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="currPreviewPane" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="currPreviewPane" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="currPreviewPane" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="NoEntriesLabelCurr" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="NoEntriesLabelCurr" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="NoEntriesLabelCurr" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="NoEntriesLabelCurr" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="11.9403un"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="currPaneContainer"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="currPaneLayout"/>
+ </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">
+ <widget name="nextPreviewPaneContents" role="HbScrollArea:contents" type="HbWidget">
+ <real name="z" value="0"/>
+ <layout orientation="Vertical" spacing="0.75un" type="linear">
+ <contentsmargins bottom="0.75un" left="2un" right="2un" top="0.75un"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ <enums name="verticalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <enums name="horizontalScrollBarPolicy" value="ScrollBarAlwaysOff"/>
+ <enums name="clampingStyle" value="StrictClamping"/>
+ <enums name="scrollingStyle" value="PanOrFlick"/>
+ <bool name="frictionEnabled" value="TRUE"/>
+ </widget>
+ <widget name="NoEntriesLabelNext" type="HbLabel">
+ <string locid="txt_calendar_empty_list_no_entries" name="plainText"/>
+ <enums name="alignment" value="AlignVCenter|AlignHCenter"/>
+ <enums name="elideMode" value="ElideNone"/>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="23.8806un"/>
+ <layout type="anchor">
+ <anchoritem dst="nextPreviewPane" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="nextPreviewPane" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="nextPreviewPane" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="nextPreviewPane" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="NoEntriesLabelNext" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="NoEntriesLabelNext" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="NoEntriesLabelNext" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="NoEntriesLabelNext" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <real name="z" value="0"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="11.9403un"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="nextPaneContainer"/>
+ </layout>
+ </widget>
+ <real name="z" value="1"/>
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="nextPaneLayout"/>
+ </layout>
+ </widget>
+ <real name="z" value="2"/>
+ <sizehint height="23.8806un" type="PREFERRED" width="11.9403un"/>
+ <sizehint height="230.8806un" type="MAXIMUM" width="52un"/>
+ <layout orientation="Vertical" spacing="0.75un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="monthTitle"/>
+ <linearitem itemname="dayNamesWidget"/>
+ <linearitem itemname="monthGridWeekNumWidget"/>
+ </layout>
+ </widget>
+ <real name="z" value="0"/>
+ <layout orientation="Horizontal" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="monthViewExceptPreviewPane"/>
+ </layout>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="NewEventAction" role="HbMenu:addAction"/>
+ <ref object="goToTodayAction" role="HbMenu:addAction"/>
+ <ref object="goToDateAction" role="HbMenu:addAction"/>
+ <widget name="deleteSubMenu" role="HbMenu:menu" type="HbMenu">
+ <ref object="beforeDateAction" role="HbMenu:addAction"/>
+ <ref object="allEntriesAction" role="HbMenu:addAction"/>
+ </widget>
+ <ref object="settingsAction" role="HbMenu:addAction"/>
+ </widget>
+ </widget>
+ <section name="portrait">
+ <widget name="prevPaneLayout" type="HbWidget">
+ <sizehint height="22un" type="PREFERRED" width="11.9403un"/>
+ </widget>
+ <widget name="prevPaneContainer" type="HbWidget">
+ <sizehint height="22un" type="PREFERRED" width="23.8806un"/>
+ </widget>
+ <widget name="prevPaneWidget" type="HbWidget">
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="22un" type="FIXED" width="52un"/>
+ </widget>
+
+ <widget name="currPaneContainer" type="HbWidget">
+ <sizehint height="22un" type="PREFERRED" width="23.8806un"/>
+ </widget>
+ <widget name="currPaneLayout" type="HbWidget">
+ <sizehint height="22un" type="PREFERRED" width="11.9403un"/>
+ </widget>
+ <widget name="currPaneWidget" type="HbWidget">
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="22un" type="FIXED" width="52un"/>
+ </widget>
+
+ <widget name="nextPaneLayout" type="HbWidget">
+ <sizehint height="22un" type="PREFERRED" width="11.9403un"/>
+ </widget>
+ <widget name="nextPaneWidget" type="HbWidget">
+ <sizepolicy horizontalPolicy="Fixed" horizontalStretch="0" verticalPolicy="Fixed" verticalStretch="0"/>
+ <sizehint height="22un" type="FIXED" width="52un"/>
+ </widget>
+ <widget name="nextPaneContainer" type="HbWidget">
+ <sizehint height="22un" type="PREFERRED" width="23.8806un"/>
+ </widget>
+ <widget name="content" role="HbView:widget" type="HbWidget">
+ <enums name="focusDelegation" value="FocusDelegationBasedOnDirection"/>
+ <layout orientation="Vertical" spacing="0.75un" type="linear">
+ <contentsmargins bottom="0.75un" left="0.75un" right="0.75un" top="0.75un"/>
+ <linearitem itemname="monthViewExceptPreviewPane"/>
+ <linearitem itemname="currPaneWidget"/>
+ </layout>
+ </widget>
+ <widget name="monthGridWeekNumWidget" type="HbWidget">
+ <sizehint height="42.77612un" type="PREFERRED" width="52un"/>
+ <sizehint height="42.77612un" type="MINIMUM" width="52un"/>
+ <sizehint height="62.77612un" type="MAXIMUM" width="52un"/>
+ </widget>
+ <widget name="monthGrid" type="HbGridView">
+ <sizehint height="43.77612un" type="PREFERRED" width="52un"/>
+ <sizehint height="62.77612un" type="MAXIMUM" width="52un"/>
+ <sizehint height="43.77612un" type="MINIMUM" width="0un"/>
+ </widget>
+ <widget name="weekNumbersWidget" type="HbWidget">
+ <sizehint height="42.77612un" type="PREFERRED" width="6.41604un"/>
+ <sizehint height="42.77612un" type="MINIMUM" width="6.41604un"/>
+ <sizehint height="62.77612un" type="MAXIMUM" width="6.41604un"/>
+ </widget>
+ <widget name="prevPreviewPaneContents" role="HbScrollArea:contents" type="HbWidget">
+ <sizehint type="MINIMUM" width="52un"/>
+ <sizehint type="MAXIMUM" width="52un"/>
+ </widget>
+ <widget name="currPreviewPaneContents" role="HbScrollArea:contents" type="HbWidget">
+ <sizehint type="MINIMUM" width="52un"/>
+ <sizehint type="MAXIMUM" width="52un"/>
+ </widget>
+ <widget name="nextPreviewPaneContents" role="HbScrollArea:contents" type="HbWidget">
+ <sizehint type="MINIMUM" width="52un"/>
+ <sizehint type="MAXIMUM" width="52un"/>
+ </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="MAXIMUM" width="40.8un"/>
+ </widget>
+ <widget name="currPreviewPaneContents" type="HbWidget">
+ <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="MAXIMUM" width="40.8un"/>
+ </widget>
+ <widget name="monthGridWeekNumWidget" type="HbWidget">
+ <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="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="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">
+ <contentsmargins bottom="0.75un" left="0.75un" right="0.75un" top="0.75un"/>
+ <linearitem itemname="monthViewExceptPreviewPane"/>
+ <linearitem itemname="currPaneWidget"/>
+ </layout>
+ </widget>
+ </section>
+ <metadata activeUIState="PortraitUiState" display="QHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="landscapeUIState" sections="#common landscape"/>
+ <uistate name="PortraitUiState" sections="#common portrait"/>
+ <uistate name="portrait" sections="#common portrait"/>
+ <uistate name="landscape" sections="#common landscape"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/controller/eabi/calencontrolleru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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/calenactionuiutils.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/inc/calenactionuiutils.h Mon Jun 28 15:22:02 2010 +0530
@@ -42,13 +42,6 @@
{
public:
- enum TDeleteConfirmationType
- {
- EDeleteEntry = 1,
- EDeleteToDo,
- EDeleteToDos,
- EDeleteAll
- };
enum TRepeatQueryType
{
@@ -78,9 +71,6 @@
AgendaEntry& entry,
const bool status );
- static int showDeleteConfirmationQueryL(const TDeleteConfirmationType type,
- const TInt count = 0);
-
private: // Construction and destruction
// Hiding constructor, because this is static utility class.
//lint -e{1526}
--- a/calendarui/controller/inc/calencontroller.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/inc/calencontroller.h Mon Jun 28 15:22:02 2010 +0530
@@ -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,29 +59,42 @@
* 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();
/**
- * Constructs CCalenController with existing CAknViewAppUi. If the
- * controller has been previously initialized with the same CAknViewAppUi,
- * the existing instance will be returned.
- * @param aAppUi Reference to CAknViewAppUi
- * @return CCalenController pointer
- */
- static CCalenController* InstanceL();
+ * 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.
+ * @param aAppUi Reference to CAknViewAppUi
+ * @return CCalenController pointer
+ */
+ static CCalenController* InstanceL();
- /**
- * CCalenController is a reference counting singleton. Call Release()
- * when you are done with it, it will clean itself when it needs to
- */
- void Release();
+
+ /**
+ * Releases all plugins, should only be called when
+ * the application is exiting.
+ */
+ void ReleaseCustomisations();
+
+ /**
+ * CCalenController is a reference counting singleton. Call Release()
+ * when you are done with it, it will clean itself when it needs to
+ */
+ void Release();
/**
* destructor
@@ -205,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
/**
@@ -222,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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/inc/calendeleteui.h Mon Jun 28 15:22:02 2010 +0530
@@ -29,11 +29,19 @@
#include "calenactionuiutils.h"
#include "calennotificationhandler.h"
#include "calencommandhandler.h"
-
+#include "hb_calencommands.hrh"
// FORWARD DECLARATIONS
class CCalenController;
+class HbAction;
+enum TDeleteConfirmationType
+{
+ EDeleteEntry = 1,
+ EDeleteToDo,
+ EDeleteToDos,
+ EDeleteAll
+};
// CLASS DECLARATION
/**
@@ -121,28 +129,21 @@
void deleteEntriesEndingAtMidnight( QDateTime aMidnight );
/**
- * Delete entry by passing CCalEntryView and CCalEntry
- * Will query user for confirmation before deletion
- * @return ETrue user confirms to delete EFalse otherwise
- */
- TBool DeleteEntryL( AgendaEntry& aEntry );
-
- /**
* Delete entry without querying the user
*/
TBool DeleteEntryWithoutQueryL();
-
+
/**
* Delete the given entry. Ask the user whether to delete the
* instance or the entire series.
*/
- TBool DeleteSingleInstanceL( AgendaEntry& aInstance );
+ void DeleteSingleInstanceL( AgendaEntry& aInstance );
/**
* Delete the given entry, using aRepeatType to determine
* whether to delete the instance or the entire series.
*/
- TBool DeleteSingleInstanceL( AgendaEntry& aInstance,
+ void DeleteSingleInstanceL( AgendaEntry& aInstance,
AgendaUtil::RecurrenceRange aRepeatType );
/**
@@ -152,7 +153,7 @@
* @param aRepeatType Repeat type choosen to apply on delete
* @return ETrue is user confirms to delete, EFalse otherwise
*/
- TBool DoDeleteSingleInstanceL( AgendaEntry& aInstance,
+ void DoDeleteSingleInstanceL( AgendaEntry& aInstance,
bool aHasRepeatType,
AgendaUtil::RecurrenceRange aRepeatType );
@@ -162,11 +163,6 @@
void HandleECalenNotifyViewCreatedL();
/**
- * Multiple entries delete query
- */
- TInt ShowMultipleEntriesDeleteQueryL(int aCount);
-
- /**
* Get the date from user.
*/
void dateQuery();
@@ -177,7 +173,14 @@
* or the entire series of a repeating entry
*/
void showRepeatingEntryDeleteQuery();
-
+
+ /**
+ * Shows a confirmation query to the user if
+ * he/she wants to delete instance/instances
+ */
+ void showDeleteQuery(const TDeleteConfirmationType type,
+ const int count = 0);
+
private: // own methods
/**
* C++ constructor
@@ -200,7 +203,9 @@
public slots:
void doCompleted( int aFirstPassError );
- void getSelectedDate();
+ void handleDateQuery(HbAction* action);
+ void handleDeletion(HbAction* action);
+ void handleDeleteCancel();
private slots:
void handleRepeatedEntryDelete(int index);
@@ -228,20 +233,22 @@
bool iIsDeleting; // True, if asynchronous delete is running
QDateTime iStartTime;
QDateTime iEndTime;
- QDateTime mDateTime; // Get the date selected by user.
HbDateTimePicker *mDatePicker;
+ HbAction *mDeleteAction;
+ HbAction *mCancelAction;
// Confirmation note id is stored here. Note is shown when asynchronous
// delete completes.
int iConfirmationNoteId;
CCalenController& iController;
-
+ TCalenCommandId mDeleteCommand;
+ AgendaUtil::RecurrenceRange mRecurrenceRange;
+
// Stored command if the entry view
// needs to constructed asyncronously
TCalenCommand iStoredCommand;
int iMutlipleContextIdsCount;
bool iMoreEntriesToDelete;
bool iDisplayQuery;
- bool mIsDateValid;
int iEntriesToDelete;
};
--- a/calendarui/controller/inc/calennotificationhandler.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/inc/calennotificationhandler.h Mon Jun 28 15:22:02 2010 +0530
@@ -32,6 +32,7 @@
ECalenNotifyInstanceDeleted,
ECalenNotifySystemTimeChanged,
ECalenNotifySystemLocaleChanged,
+ ECalenNotifySystemLanguageChanged,
ECalenNotifyLostAlarms,
ECalenNotifyCmdLineLaunch,
ECalenNotifyAvkonViewSwitchLaunch,
--- a/calendarui/controller/inc/calenstatetable.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/inc/calenstatetable.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/inc/calenviewmanager.h Mon Jun 28 15:22:02 2010 +0530
@@ -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,7 +97,12 @@
void showPrevDay();
- void removeDayViews();
+ void removePreviousView();
+
+ void constructOtherViews();
+
+ void launchSettingsView();
+
public: // from MCalenNotificationHandler
@@ -110,7 +119,7 @@
/**
* Loads day view frm the docml
*/
- void loadDayView();
+ void loadAgendaView();
/**
* Activates the default view, as retrieved from settings.
*/
@@ -131,33 +140,35 @@
* to provide illusion of swiping to next or prev
* day
*/
- void loadAlternateDayView();
-
- public slots:
- void constructOtherViews();
+ void loadAlternateAgendaView();
private slots:
+ void handleMainViewReady();
void handleViewingCompleted(const QDate date);
void handleEditingStarted();
void handleEditingCompleted();
void handleDeletingStarted();
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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calenactionui.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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/calenactionuiutils.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calenactionuiutils.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -105,62 +105,4 @@
TRACE_EXIT_POINT;
}
-int CalenActionUiUtils::showDeleteConfirmationQueryL(const TDeleteConfirmationType type,
- const int count)
- {
- TRACE_ENTRY_POINT;
- int retStatus = 0;
-
-
- HbMessageBox popup(HbMessageBox::MessageTypeQuestion);
- popup.setIconVisible(true);
- popup.setTimeout(HbPopup::NoTimeout);
-
- QString text = 0;
-
- switch(type)
- {
- case CalenActionUiUtils::EDeleteEntry:
- {
- // TODO: Add the text id
- text.append("Delete entry?");
- break;
- }
- case CalenActionUiUtils::EDeleteToDo:
- {
- text.append(hbTrId("txt_calendar_info_delete_todo_note"));
- break;
- }
- case CalenActionUiUtils::EDeleteToDos:
- {//"Delete %N to-do notes?"
- // TODO: Add the text id
- text.append("Delete %N to-do's?").arg(count);
- break;
- }
- case CalenActionUiUtils::EDeleteAll:
- {
- text.append(hbTrId("txt_calendar_info_delete_all_calendar_entries"));
- break;
- }
- default:
- break;
- }
-
- popup.setText(text);
-
- popup.setPrimaryAction(new HbAction(
- hbTrId("txt_calendar_button_delete"), &popup));
- popup.setSecondaryAction(new HbAction(
- hbTrId("txt_calendar_button_cancel"), &popup));
- HbAction *selected = popup.exec();
- if (selected == popup.primaryAction()) {
- retStatus = 1;
- }
-
- TRACE_EXIT_POINT
- return retStatus;
- }
-
-
-
// End of file
--- a/calendarui/controller/src/calenbackgroundstate.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calenbackgroundstate.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -100,6 +100,7 @@
switch( cmd )
{
+ case ECalenAgendaView:
case ECalenDayView:
SetCurrentState(aStateMachine,CCalenStateMachine::ECalenIdleState);
cmdUsed = ETrue;
--- a/calendarui/controller/src/calencontroller.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calencontroller.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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,73 +48,99 @@
// (other items were commented in a header).
// ----------------------------------------------------------------------------
//
-CCalenController::CCalenController(bool isFromServiceFrmwrk)
+CCalenController::CCalenController()
{
TRACE_ENTRY_POINT;
- iIsFromServiceFrmWrk = isFromServiceFrmwrk;
- iNextServicesCommandBase = KCustomCommandRangeStart;
-
- // 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 );
+ // 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; */
- // Create the notifier.
- iNotifier = new( ELeave )CalenNotifier( *iStateMachine );
-
- // Construct the context
- mContext = new CalenContextImpl(iNotifier);
+ // 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
- // 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();
+ iNextServicesCommandBase = KCustomCommandRangeStart;
+ iRefCount = 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()
@@ -171,7 +199,24 @@
TRACE_EXIT_POINT;
return self;
}
+
+// ----------------------------------------------------------------------------
+// CCalenController::ReleaseCustomisations
+// Releases any plugins by deleting the customisation manager
+// should only be called on exiting by the application.
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CCalenController::ReleaseCustomisations()
+ {
+ TRACE_ENTRY_POINT;
+ delete iCustomisationManager;
+ iCustomisationManager = NULL;
+
+ TRACE_EXIT_POINT;
+ }
+
// ----------------------------------------------------------------------------
// CCalenController::Release
// Decrement the reference count of this singleton.
@@ -204,14 +249,48 @@
CCalenController::~CCalenController()
{
TRACE_ENTRY_POINT;
+
+ if(iStateMachine) {
+ delete iStateMachine;
+ iStateMachine = NULL;
+ }
+
if ( iServices )
{
iServices->Release();
}
- delete iNotifier;
- delete iActionUi;
- delete iViewManager;
- delete iCustomisationManager;
+
+ 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( iViewManager )
+ {
+ delete iViewManager;
+ iViewManager = NULL;
+ }
+
+ if( iCustomisationManager )
+ {
+ delete iCustomisationManager;
+ iCustomisationManager = NULL;
+ }
+ Dll::SetTls( NULL );
TRACE_EXIT_POINT;
}
@@ -464,7 +543,7 @@
{
TRACE_ENTRY_POINT;
QDateTime focusTime = mContext->defaultCalTimeForViewsL();
- mContext->setFocusDateAndTimeL(focusTime,KCalenDayViewUidValue );
+ mContext->setFocusDateAndTime(focusTime);
TRACE_EXIT_POINT;
}
@@ -519,13 +598,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
@@ -538,7 +614,7 @@
// simply return - we dont have anything to do
} else {
// Set the context properly
- mContext->setFocusDateAndTimeL(dateTime,KCalenMonthViewUidValue);
+ mContext->setFocusDateAndTime(dateTime);
IssueCommandL(view);
}
}
@@ -559,4 +635,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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calendeleteui.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -20,6 +20,7 @@
#include <QtGui>
#include <hbdatetimepicker.h>
#include <hbdialog.h>
+#include <hbmessagebox.h>
#include <hbaction.h>
#include <hblabel.h>
#include <hbradiobuttonlist.h>
@@ -29,13 +30,11 @@
// User includes
#include "calendarui_debug.h"
#include "calendeleteui.h"
-#include "hb_calencommands.hrh"
#include "calencontext.h"
#include "calencontroller.h"
#include "CleanupResetAndDestroy.h"
#include "caleninstanceid.h"
#include "calenactionuiutils.h"
-#include "CalendarPrivateCRKeys.h" // includes CalendarInternalCRKeys.h
#include "calendateutils.h"
#include "calenagendautils.h"
@@ -139,28 +138,35 @@
{
TRACE_ENTRY_POINT;
TBool continueCommand(EFalse);
-
+
switch( aCommand.Command() )
{
case ECalenDeleteCurrentEntry:
-
- DeleteCurrentEntryL(); // Entry & instance
+ mDeleteCommand = ECalenDeleteCurrentEntry;
+ DeleteCurrentEntryL(); // Entry & instance
break;
case ECalenDeleteSeries:
- DeleteThisOrAllL( AgendaUtil::ThisAndAll );
+ mDeleteCommand = ECalenDeleteSeries;
+ DeleteThisOrAllL( AgendaUtil::ThisAndAll );
break;
case ECalenDeleteCurrentOccurrence:
- DeleteThisOrAllL( AgendaUtil::ThisOnly );
+ mDeleteCommand = ECalenDeleteCurrentOccurrence;
+ DeleteThisOrAllL( AgendaUtil::ThisOnly );
break;
case ECalenDeleteEntryWithoutQuery:
- continueCommand = DeleteEntryWithoutQueryL();
+ //TODO:
+ // This case is not handled currently as no such commands
+ // has been issued. So this has to be handled once we start
+ // issuing the command.
+ /*continueCommand = DeleteEntryWithoutQueryL();*/
break;
case ECalenDeleteAllEntries:
- DeleteAllEntriesL(); // EntryView & instance
+ mDeleteCommand = ECalenDeleteAllEntries;
+ DeleteAllEntriesL(); // EntryView & instance
break;
case ECalenDeleteEntriesBeforeDate:
@@ -186,26 +192,21 @@
// ----------------------------------------------------------------------------
//
void CalenDeleteUi::DeleteThisOrAllL( AgendaUtil::RecurrenceRange aRepeatType )
- {
- TRACE_ENTRY_POINT;
-
- bool isDeleted( false );
-
- if( iController.context().instanceId().mEntryLocalUid )
- {
- AgendaEntry instance =
- CalenActionUiUtils::findPossibleInstanceL(iController.context().instanceId(),
- iController.Services().agendaInterface() );
- if( !instance.isNull() )
- {
- isDeleted = DeleteSingleInstanceL( instance, aRepeatType );
- }
- }
- iController.BroadcastNotification( isDeleted? ECalenNotifyEntryDeleted :
- ECalenNotifyDeleteFailed );
-
- TRACE_EXIT_POINT;
- }
+{
+ TRACE_ENTRY_POINT;
+
+ if( iController.context().instanceId().mEntryLocalUid )
+ {
+ AgendaEntry instance = CalenActionUiUtils::findPossibleInstanceL(
+ iController.context().instanceId(),
+ iController.Services().agendaInterface() );
+ if( !instance.isNull() )
+ {
+ DeleteSingleInstanceL( instance, aRepeatType );
+ }
+ }
+ TRACE_EXIT_POINT;
+}
// ----------------------------------------------------------------------------
// CalenDeleteUi::DeleteEntryWithoutQueryL()
@@ -228,7 +229,7 @@
if(!iMoreEntriesToDelete)
{
- iDisplayQuery = ShowMultipleEntriesDeleteQueryL(iMutlipleContextIdsCount);
+ //iDisplayQuery = ShowMultipleEntriesDeleteQueryL(iMutlipleContextIdsCount);
}
if(iDisplayQuery)
@@ -290,47 +291,34 @@
//
void CalenDeleteUi::DeleteCurrentEntryL()
{
- TRACE_ENTRY_POINT;
+ TRACE_ENTRY_POINT;
- bool deleted( false );
- TCalenNotification notification = ECalenNotifyDeleteFailed;
-
- // Make sure we're focused on an entry.
- if (iController.context().instanceId().mEntryLocalUid) {
- // 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()) {
- deleted = DeleteEntryL(entry);
- if(deleted) {
- // Delete is successful
- notification = ECalenNotifyEntryDeleted;
- }
- }
- }
- 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
- deleted = DeleteEntryL(entry);
- if (deleted) {
- // Delete is successful
- notification = ECalenNotifyEntryDeleted;
- }
- }
- }
- }
-
- iController.BroadcastNotification( notification );
-
- TRACE_EXIT_POINT;
+ // Make sure we're focused on an entry.
+ if (iController.context().instanceId().mEntryLocalUid) {
+ // 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()) {
+ 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);
+ }
+ }
+ }
+ TRACE_EXIT_POINT;
}
// ----------------------------------------------------------------------------
@@ -341,24 +329,12 @@
//
void CalenDeleteUi::DeleteAllEntriesL()
{
- TRACE_ENTRY_POINT;
-
- ASSERT( !iIsDeleting );
+ if(iIsDeleting) {
+ return;
+ }
- const int buttonId = CalenActionUiUtils::showDeleteConfirmationQueryL(
- CalenActionUiUtils::EDeleteAll );
- if( buttonId )
- {
- HandleDeleteMultipleEventsL( AgendaUtil::minTime(), AgendaUtil::maxTime(),1 );
- }
- else
- {
- // notify delete failed
- iController.BroadcastNotification(ECalenNotifyDeleteFailed);
- }
-
- TRACE_EXIT_POINT;
- }
+ showDeleteQuery(EDeleteAll );
+ }
// ----------------------------------------------------------------------------
// CalenDeleteUi::DeleteEntriesBeforeDateL
@@ -369,63 +345,102 @@
void CalenDeleteUi::DeleteEntriesBeforeDateL()
{
TRACE_ENTRY_POINT;
-
- ASSERT( !iIsDeleting );
-
- TCalenNotification notification = ECalenNotifyDeleteFailed;
-
+ if(iIsDeleting) {
+ return;
+ }
// launch the datepicker
- mIsDateValid = false;
dateQuery();
-
- if( mIsDateValid )
- {
- // Do delete only if inputted day is after beginning of range
- if( mDateTime > AgendaUtil::minTime() )
- {
- // Two pass delete:
- // 1. pass
- // To prevent destroying entries starting and ending midnight
- // subtract one second and do delete on that range.
- mDateTime = mDateTime.addSecs(-1);
- mDateTime = ( mDateTime > AgendaUtil::minTime()? mDateTime : AgendaUtil::minTime());
-
- HandleDeleteMultipleEventsL( AgendaUtil::minTime(),
- mDateTime,1 );
- notification = ECalenNotifyMultipleEntriesDeleted;
- }
- }
-
- iController.BroadcastNotification( notification );
TRACE_EXIT_POINT;
}
-
+
+// ----------------------------------------------------------------------------
+// CalenDeleteUi::dateQuery
+// Launches the popup for the date selection
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
void CalenDeleteUi::dateQuery()
{
// Create a popup with datepicker to select the date.
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout );
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
+ popUp->setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_set_date")));
+
QDateTime currentDateTime(CalenDateUtils::today());
QDate currentDate(currentDateTime.date());
- mDatePicker = new HbDateTimePicker(currentDate);
+ if(mDatePicker) {
+ mDatePicker = NULL;
+ }
+ mDatePicker = new HbDateTimePicker(popUp);
mDatePicker->setMinimumDate(CalenDateUtils::minTime().date());
mDatePicker->setMaximumDate(currentDate);
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout );
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_set_date")));
- popUp.setContentWidget(mDatePicker);
- HbAction *okAction = new HbAction(hbTrId("txt_calendar_button_dialog_delete"));
- popUp.setPrimaryAction(okAction);
- connect(okAction,SIGNAL(triggered()),this,SLOT(getSelectedDate()));
- connect(okAction,SIGNAL(triggered()),&popUp,SLOT(close()));
- popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"),&popUp));
- popUp.exec();
+ mDatePicker->setDate(currentDate);
+
+ popUp->setContentWidget(mDatePicker);
+ 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*)));
}
+// ----------------------------------------------------------------------------
+// CalenDeleteUi::handleDateQuery
+// Handles the selection for the date query
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenDeleteUi::handleDateQuery(HbAction* action)
+{
+ 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
+// Launches the popup for deleting the repeating entry
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
void CalenDeleteUi::showRepeatingEntryDeleteQuery()
{
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
QGraphicsLinearLayout *layout = new QGraphicsLinearLayout(Qt::Vertical);
HbWidget *editWidget = new HbWidget();
@@ -441,61 +456,188 @@
layout->addItem(editButtonList);
- popUp.setContentWidget(editWidget);
- popUp.setHeadingWidget(new HbLabel(
+ popUp->setContentWidget(editWidget);
+ popUp->setHeadingWidget(new HbLabel(
hbTrId("txt_calendar_title_delete_repeated_entry")));
- connect(editButtonList, SIGNAL(itemSelected(int)), this,
- SLOT(handleRepeatedEntryDelete(int)));
- connect(editButtonList, SIGNAL(itemSelected(int)), &popUp, SLOT(close()));
-
- // Create secondary action
+ // Add cancel action
HbAction *cancelAction = new HbAction(
hbTrId("txt_calendar_button_softkey1_cancel"));
- popUp.setSecondaryAction(cancelAction);
- connect(cancelAction, SIGNAL(triggered()), this, SLOT(handleCancel()));
- connect(cancelAction, SIGNAL(triggered()), &popUp, SLOT(close()));
+ popUp->addAction(cancelAction);
+ connect(editButtonList, SIGNAL(itemSelected(int)), this,
+ SLOT(handleRepeatedEntryDelete(int)));
+ connect(editButtonList, SIGNAL(itemSelected(int)), popUp, SLOT(close()));
+ connect(cancelAction, SIGNAL(triggered()), this,
+ SLOT(handleDeleteCancel()));
// Show the popup
- popUp.exec();
+ popUp->open();
}
-void CalenDeleteUi::getSelectedDate()
- {
- QDate selectedDate(mDatePicker->date());
-
- // Check if the date is within the range.
- if(selectedDate.isValid())
- {
- QTime time(0,0,0,0);
- mDateTime.setDate(selectedDate);
- mDateTime.setTime(time);
- mIsDateValid = true;
- }
- }
+// ----------------------------------------------------------------------------
+// CalenDeleteUi::handleDeleteCancel
+// Handles the cancel action
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenDeleteUi::handleDeleteCancel()
+{
+ iController.BroadcastNotification(ECalenNotifyDeleteFailed);
+}
void CalenDeleteUi::handleRepeatedEntryDelete(int index)
{
- // Fetch the entry
- // Find all possible instances
- AgendaEntry instance = CalenActionUiUtils::findPossibleInstanceL(
- iController.context().instanceId(),
- iController.Services().agendaInterface());
+ // 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;
+ }
+ }
+}
- 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
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenDeleteUi::showDeleteQuery(const TDeleteConfirmationType type,
+ const int count)
+ {
+ HbMessageBox *popup = new HbMessageBox(HbMessageBox::MessageTypeQuestion);
+ popup->setDismissPolicy(HbDialog::NoDismiss);
+ popup->setTimeout(HbDialog::NoTimeout);
+ popup->setAttribute( Qt::WA_DeleteOnClose, true );
+
+ QString text = 0;
+
+ switch(type)
+ {
+ case EDeleteEntry:
+ {
+ text.append(hbTrId("txt_calendar_info_delete_meeting"));
+ break;
+ }
+ case EDeleteToDo:
+ {
+ text.append(hbTrId("txt_calendar_info_delete_todo_note"));
+ break;
+ }
+ case EDeleteToDos:
+ {//"Delete %N to-do notes?"
+ // TODO: Add the text id
+ text.append("Delete %N to-do's?").arg(count);
+ break;
+ }
+ case EDeleteAll:
+ {
+ text.append(hbTrId("txt_calendar_info_delete_all_calendar_entries"));
+ break;
+ }
+ default:
+ break;
+ }
+
+ popup->setText(text);
+
+ QList<QAction*> list = popup->actions();
+ for(int i=0; i < list.count(); i++)
+ {
+ popup->removeAction(list[i]);
}
+ 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*)));
}
+
+// ----------------------------------------------------------------------------
+// CalenDeleteUi::handleDeletion
+// Deletes the entries based on the user selection
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenDeleteUi::handleDeletion(HbAction* action)
+{
+ TCalenNotification notification = ECalenNotifyDeleteFailed;
+
+ if(action == mDeleteAction) {
+
+ switch (mDeleteCommand) {
+
+ case ECalenDeleteCurrentEntry:
+ {
+ // 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(id);
+ }
+ break;
+
+ case ECalenDeleteSeries:
+ case ECalenDeleteCurrentOccurrence:
+ {
+ AgendaEntry instance =
+ CalenActionUiUtils::findPossibleInstanceL(
+ iController.context().instanceId(),
+ iController.Services().agendaInterface() );
+ 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 );
+ }
+ }
+ }
+ break;
+
+ case ECalenDeleteAllEntries:
+ {
+ HandleDeleteMultipleEventsL( AgendaUtil::minTime(),
+ AgendaUtil::maxTime(),1 );
+ }
+ break;
+
+ default:
+ break;
+
+ }
+ }
+ // If the user presses cancel button the notification will be
+ // ECalenNotifyDeleteFailed as default.
+ // Notify the status
+ iController.BroadcastNotification(notification);
+
+ // Reset the member variables
+ mDeleteAction = NULL;
+ mCancelAction = NULL;
}
void CalenDeleteUi::entryDeleted(ulong id)
@@ -518,9 +660,10 @@
int aConfNoteId )
{
TRACE_ENTRY_POINT;
-
- ASSERT( !iIsDeleting );
+ if(iIsDeleting) {
+ return;
+ }
iConfirmationNoteId = aConfNoteId;
DeleteDayRangeL( aFirstDay, aLastDay );
@@ -618,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
@@ -639,11 +782,11 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
-TBool CalenDeleteUi::DeleteSingleInstanceL( AgendaEntry& aInstance )
+void CalenDeleteUi::DeleteSingleInstanceL( AgendaEntry& aInstance )
{
TRACE_ENTRY_POINT;
+ DoDeleteSingleInstanceL( aInstance, EFalse, AgendaUtil::ThisAndAll );
TRACE_EXIT_POINT;
- return DoDeleteSingleInstanceL( aInstance, EFalse, AgendaUtil::ThisAndAll );
}
// -----------------------------------------------------------------------------
@@ -652,12 +795,13 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
-TBool CalenDeleteUi::DeleteSingleInstanceL( AgendaEntry& aInstance,
+void CalenDeleteUi::DeleteSingleInstanceL( AgendaEntry& aInstance,
AgendaUtil::RecurrenceRange aRepeatType )
{
TRACE_ENTRY_POINT;
+ DoDeleteSingleInstanceL( aInstance, ETrue, aRepeatType );
TRACE_EXIT_POINT;
- return DoDeleteSingleInstanceL( aInstance, ETrue, aRepeatType );
+
}
// -----------------------------------------------------------------------------
@@ -669,107 +813,42 @@
// (other items were commented in a header).
// -----------------------------------------------------------------------------
//
-TBool CalenDeleteUi::DoDeleteSingleInstanceL( AgendaEntry& aInstance,
- bool aHasRepeatType,
- AgendaUtil::RecurrenceRange aRepeatType )
- {
- TRACE_ENTRY_POINT;
-
- bool repeating = aInstance.isRepeating();
-
- if( !repeating )
- {
- // Even though there is no RRule, the entry might
- // have a list of rdates.
- QList<QDate> rDates = aInstance.rDates();
- repeating = ( rDates.count() > 0 );
- }
- QDateTime recId = aInstance.recurrenceId().toUTC();
- const bool child = recId.isNull();
-
- if( !aHasRepeatType )
- {
- aRepeatType = AgendaUtil::ThisAndAll;
- }
+void CalenDeleteUi::DoDeleteSingleInstanceL(
+ AgendaEntry& aInstance,
+ bool aHasRepeatType,
+ AgendaUtil::RecurrenceRange aRepeatType )
+{
+ TRACE_ENTRY_POINT;
+ bool repeating = aInstance.isRepeating();
- bool doDelete( ETrue );
-
- if( !aHasRepeatType && ( child || repeating ) && ( aInstance.type() != AgendaEntry::TypeAnniversary ) )
- {
- //doDelete = CalenActionUiUtils::ShowRepeatTypeQueryL( aRepeatType,
- // CalenActionUiUtils::EDelete );
- }
- else
- {
- doDelete = CalenActionUiUtils::showDeleteConfirmationQueryL(aInstance.type() == AgendaEntry::TypeTodo ?
- CalenActionUiUtils::EDeleteToDo :
- CalenActionUiUtils::EDeleteEntry );
- }
-
- if( doDelete )
- {
- if( !child || aRepeatType == AgendaUtil::ThisOnly )
- {
- iController.Services().agendaInterface()->deleteRepeatedEntry( aInstance, aRepeatType );
- }
- else if( aRepeatType == AgendaUtil::ThisAndAll )
- {
- iController.Services().agendaInterface()->deleteRepeatedEntry( aInstance, aRepeatType );
- }
- }
+ if( !repeating ) {
+ // Even though there is no RRule, the entry might
+ // have a list of rdates.
+ QList<QDate> rDates = aInstance.rDates();
+ repeating = ( rDates.count() > 0 );
+ }
+ QDateTime recId = aInstance.recurrenceId().toUTC();
+ const bool child = recId.isNull();
- TRACE_EXIT_POINT;
- return doDelete;
- }
-
-// -----------------------------------------------------------------------------
-// CalenDeleteUi::DeleteEntryL
-// Deletes an entry from the database
-// (other items were commented in a header).
-// -----------------------------------------------------------------------------
-//
-TBool CalenDeleteUi::DeleteEntryL( AgendaEntry& entry )
- {
- TRACE_ENTRY_POINT;
-
- TBool doDelete = CalenActionUiUtils::showDeleteConfirmationQueryL(entry.type() == AgendaEntry::TypeTodo ?
- CalenActionUiUtils::EDeleteToDo :
- CalenActionUiUtils::EDeleteEntry );
-
- if( doDelete )
- {
- iController.Services().agendaInterface()->deleteEntry(entry.id());
- }
+ if( !aHasRepeatType ) {
+ aRepeatType = AgendaUtil::ThisAndAll;
+ }
+ // For later reference in handleDeletion()
+ mRecurrenceRange = aRepeatType;
- TRACE_EXIT_POINT;
- return doDelete;
- }
-
-// -----------------------------------------------------------------------------
-// CalenDeleteUi::ShowMultipleEntriesDeleteQueryL
-// For displaying multiple entries deletion confirmation query
-// -----------------------------------------------------------------------------
-//
-TInt CalenDeleteUi::ShowMultipleEntriesDeleteQueryL(int aCount)
+ if( !aHasRepeatType && ( child || repeating ) &&
+ ( aInstance.type() != AgendaEntry::TypeAnniversary ) ) {
+ showRepeatingEntryDeleteQuery();
+ }
+ else
{
- TRACE_ENTRY_POINT;
- if( aCount > 1 )
- {
- TRACE_EXIT_POINT;
- return CalenActionUiUtils::showDeleteConfirmationQueryL(CalenActionUiUtils::EDeleteToDos, aCount );
- }
- else if( aCount == 1 )
- {
- TRACE_EXIT_POINT;
- return CalenActionUiUtils::showDeleteConfirmationQueryL(CalenActionUiUtils::EDeleteToDo);
- }
- else
- {
- TRACE_EXIT_POINT;
- return 0; //return 0 for other invalid aCount value ( < 0 )
- }
-
+ showDeleteQuery(aInstance.type() == AgendaEntry::TypeTodo ?
+ EDeleteToDo :
+ EDeleteEntry );
}
+ TRACE_EXIT_POINT;
+}
+
// -----------------------------------------------------------------------------
// CalenDeleteUi::DialogDismissedL
--- a/calendarui/controller/src/calendocloader.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calendocloader.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/caleneditui.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calenidlestate.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calensettingsstate.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calenstatemachine.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/controller/src/calenviewmanager.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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,41 +46,108 @@
// (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;
-
- mController.MainWindow().setItemVisible(Hb::NaviPaneItem, false);
+ mAgendaViewDocLoader = NULL;
+ mAgendaViewAltDocLoader = NULL;
+ mCalenAgendaView = NULL;
+ mCalenMonthView = NULL;
+ mCalenAgendaViewAlt = NULL;
+ mSettingsView = NULL;
+ mCalenDayView = NULL;
- 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(constructOtherViews()));
-
- mController.MainWindow().addView(mCalenMonthView);
- mController.MainWindow().setCurrentView(mCalenMonthView);
- }
+ // Connect to instance view and entry view creation signals from agenda
+ // interface
+ connect(mController.agendaInterface(), SIGNAL(instanceViewCreationCompleted(int)),
+ this, SLOT(handleInstanceViewCreation(int)));
+ connect(mController.agendaInterface(), SIGNAL(entryViewCreationCompleted(int)),
+ this, SLOT(handleEntryViewCreation(int)));
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.
@@ -88,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;
}
@@ -106,18 +186,28 @@
void CalenViewManager::constructAndActivateView(int view)
{
TRACE_ENTRY_POINT;
+ // We are here because, some other application is launching calendar with
+ // the view, hence connect to viewReady() signal to do any lazy loading
+ // in the slot
+
+ // 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()));
if (view == ECalenMonthView) {
mFirstView = ECalenMonthView;
loadMonthView();
ActivateDefaultViewL(ECalenMonthView);
// Add month view to mainwindow.
mController.MainWindow().addView(mCalenMonthView);
- } else if (view == ECalenDayView) {
- mFirstView = ECalenDayView;
- loadDayView();
- ActivateDefaultViewL(ECalenDayView);
- // Add day view to mainwindow.
- mController.MainWindow().addView(mCalenDayView);
+ mController.MainWindow().setCurrentView(mCalenMonthView);
+ } 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;
}
@@ -150,7 +240,7 @@
// Get the calenmonth view from the loader.
mCalenMonthView = static_cast<CalenMonthView *>
(mMonthViewDocLoader->findWidget(CALEN_MONTHVIEW));
- Q_ASSERT_X(mCalenDayView, "calenviewmanager.cpp",
+ Q_ASSERT_X(mCalenMonthView, "calenviewmanager.cpp",
"Unable to load calenMonth view");
// Setup the month view.
@@ -158,37 +248,63 @@
}
// ----------------------------------------------------------------------------
-// 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();
+
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewManager::handleMainViewReady
+// Slot to handle viewReady() signal from mainwindow
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenViewManager::handleMainViewReady()
+{
+ // Construct the month view part that is kept for lazy loading
+ if (mCalenMonthView) {
+ mCalenMonthView->doLazyLoading();
+ }
+
+ // 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()));
}
// ----------------------------------------------------------------------------
@@ -202,25 +318,32 @@
// 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());
-
- // disconnect the view ready signal as we dont need it anymore
- disconnect(&mController.MainWindow(), SIGNAL(viewReady()),
- this, SLOT(constructOtherViews()));
}
// ----------------------------------------------------------------------------
@@ -242,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);
}
}
@@ -277,40 +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,
- ":/fxml/view_show",
+ 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,
- ":/fxml/view_hide",
+ HbEffect::add(mCalenAgendaViewAlt,
+ ":/fxml/view_show_back",
"show");
- mCalenDayViewAlt->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayViewAlt, true, Hb::ViewSwitchUseBackAnim);
+ // It would also connect for aboutToQuit events
+ mCalenAgendaViewAlt->doPopulation();
+ mController.MainWindow().setCurrentView(mCalenAgendaViewAlt, true, Hb::ViewSwitchUseNormalAnim);
} else {
- HbEffect::add(mCalenDayViewAlt,
- ":/fxml/view_show",
+ mCalenAgendaViewAlt->disconnectAboutToQuitEvent(); // disconnect mCalenAgendaViewAlt to get aboutToQuit Events
+ HbEffect::add(mCalenAgendaViewAlt,
+ ":/fxml/view_hide_back",
"hide");
- HbEffect::add(mCalenDayView,
- ":/fxml/view_hide",
+ HbEffect::add(mCalenAgendaView,
+ ":/fxml/view_show_back",
"show");
- mCalenDayView->doPopulation();
- mController.MainWindow().setCurrentView(mCalenDayView, true, Hb::ViewSwitchUseBackAnim);
+ // 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()
{
- 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);
+ }
+ }
+
}
// ----------------------------------------------------------------------------
@@ -325,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;
}
@@ -354,30 +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
- 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
- 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
- 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;
@@ -391,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()));
}
@@ -419,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);
}
// ----------------------------------------------------------------------------
@@ -458,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;
@@ -502,7 +669,6 @@
{
TRACE_ENTRY_POINT;
switch (notification) {
- case ECalenNotifySystemLocaleChanged:
case ECalenNotifyExternalDatabaseChanged:
case ECalenNotifyDialogClosed:
case ECalenNotifyMultipleEntriesDeleted:
@@ -510,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;
@@ -538,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();
+ }
}
// ----------------------------------------------------------------------------
@@ -559,11 +746,9 @@
//
void CalenViewManager::handleEditingStarted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.IssueCommandL(ECalenEditEntryFromViewer);
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -574,11 +759,9 @@
//
void CalenViewManager::handleEditingCompleted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.Services().IssueNotificationL(ECalenNotifyEditorClosedFromViewer);
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -589,11 +772,9 @@
//
void CalenViewManager::handleDeletingStarted()
{
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted -->";
mController.IssueCommandL(ECalenDeleteEntryFromViewer);
- qDebug() <<"calendar: CalenViewManager::handleEditingStarted <--";
}
// ----------------------------------------------------------------------------
@@ -604,11 +785,91 @@
//
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 <--";
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewManager::handleInstanceViewCreation
+// Slot to handle completion of instance view creation
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenViewManager::handleInstanceViewCreation(int status)
+{
+ Q_UNUSED(status);
+ // 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();
+ }
+}
+
+// ----------------------------------------------------------------------------
+// CalenViewManager::handleDeletingCompleted
+// Slot to handle completion of entry view creation
+// (other items were commented in a header).
+// ----------------------------------------------------------------------------
+//
+void CalenViewManager::handleEntryViewCreation(int status)
+{
+ // 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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/customisationmanager/inc/calencustomisationmanager.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/customisationmanager/src/calencustomisationmanager.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +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
- _ZN16CCalenController21checkMultipleCreationEv @ 13 NONAME
- _ZN16CCalenController24handleServiceManagerSlotEiRK9QDateTime @ 14 NONAME
- _ZN16CCalenController25RegisterForNotificationsLEP25MCalenNotificationHandler18TCalenNotification @ 15 NONAME
- _ZN16CCalenController25RegisterForNotificationsLEP25MCalenNotificationHandlerR6RArrayI18TCalenNotificationE @ 16 NONAME
- _ZN16CCalenController7InfobarEv @ 17 NONAME
- _ZN16CCalenController7ReleaseEv @ 18 NONAME
- _ZN16CCalenController7contextEv @ 19 NONAME
- _ZN16CCalenController8NotifierEv @ 20 NONAME
- _ZN16CCalenController8ServicesEv @ 21 NONAME
- _ZN16CCalenController9InstanceLEv @ 22 NONAME
- _ZN16CCalenController9OfferMenuEP6HbMenu @ 23 NONAME
- _ZN16CCalenControllerC1Eb @ 24 NONAME
- _ZN16CCalenControllerC2Eb @ 25 NONAME
- _ZN16CCalenControllerD1Ev @ 26 NONAME
- _ZN16CCalenControllerD2Ev @ 27 NONAME
- _ZTI16CCalenController @ 28 NONAME
- _ZTV16CCalenController @ 29 NONAME
-
--- a/calendarui/eabi/calencustomisationmanageru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,189 +0,0 @@
-EXPORTS
- _ZN12CalenDayView12doPopulationEv @ 1 NONAME
- _ZN12CalenDayView18HandleNotificationE18TCalenNotification @ 2 NONAME
- _ZN12CalenDayView9docLoaderEv @ 3 NONAME
- _ZN12CalenDayView9setupViewEP14CalenDocLoader @ 4 NONAME
- _ZN12CalenDayViewC1ER14MCalenServices @ 5 NONAME
- _ZN12CalenDayViewC2ER14MCalenServices @ 6 NONAME
- _ZN12CalenDayViewD0Ev @ 7 NONAME
- _ZN12CalenDayViewD1Ev @ 8 NONAME
- _ZN12CalenDayViewD2Ev @ 9 NONAME
- _ZN14CalenMonthGrid10appendRowsEv @ 10 NONAME
- _ZN14CalenMonthGrid10panGestureERK7QPointF @ 11 NONAME
- _ZN14CalenMonthGrid11downGestureEi @ 12 NONAME
- _ZN14CalenMonthGrid11prependRowsEv @ 13 NONAME
- _ZN14CalenMonthGrid11qt_metacallEN11QMetaObject4CallEiPPv @ 14 NONAME
- _ZN14CalenMonthGrid11qt_metacastEPKc @ 15 NONAME
- _ZN14CalenMonthGrid12timerExpiredEv @ 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
- _ZN14CalenMonthGrid19setFocusToProperDayEv @ 27 NONAME
- _ZN14CalenMonthGrid20updateMonthGridModelER5QListI14CalenMonthDataEi @ 28 NONAME
- _ZN14CalenMonthGrid7setViewEP14CalenMonthView @ 29 NONAME
- _ZN14CalenMonthGrid9upGestureEi @ 30 NONAME
- _ZN14CalenMonthGridC1EP13QGraphicsItem @ 31 NONAME
- _ZN14CalenMonthGridC2EP13QGraphicsItem @ 32 NONAME
- _ZN14CalenMonthGridD0Ev @ 33 NONAME
- _ZN14CalenMonthGridD1Ev @ 34 NONAME
- _ZN14CalenMonthGridD2Ev @ 35 NONAME
- _ZN14CalenMonthView10createGridEv @ 36 NONAME
- _ZN14CalenMonthView11qt_metacallEN11QMetaObject4CallEiPPv @ 37 NONAME
- _ZN14CalenMonthView11qt_metacastEPKc @ 38 NONAME
- _ZN14CalenMonthView12createEditorEv @ 39 NONAME
- _ZN14CalenMonthView12doPopulationEv @ 40 NONAME
- _ZN14CalenMonthView12getActiveDayEv @ 41 NONAME
- _ZN14CalenMonthView12setActiveDayE9QDateTime @ 42 NONAME
- _ZN14CalenMonthView13getCurrentDayEv @ 43 NONAME
- _ZN14CalenMonthView13launchDayViewEv @ 44 NONAME
- _ZN14CalenMonthView13monthDataListEv @ 45 NONAME
- _ZN14CalenMonthView14addWeekNumbersEv @ 46 NONAME
- _ZN14CalenMonthView14firstDayOfGridEv @ 47 NONAME
- _ZN14CalenMonthView14rowsInFutMonthEv @ 48 NONAME
- _ZN14CalenMonthView14setDateToLabelEv @ 49 NONAME
- _ZN14CalenMonthView15dateFromContextERK13MCalenContext @ 50 NONAME
- _ZN14CalenMonthView15getInstanceListER5QListI11AgendaEntryE9QDateTimeS4_ @ 51 NONAME
- _ZN14CalenMonthView15onLocaleChangedEi @ 52 NONAME
- _ZN14CalenMonthView15rowsInPrevMonthEv @ 53 NONAME
- _ZN14CalenMonthView16getCurrGridIndexEv @ 54 NONAME
- _ZN14CalenMonthView16setCurrGridIndexEi @ 55 NONAME
- _ZN14CalenMonthView16staticMetaObjectE @ 56 NONAME DATA 16
- _ZN14CalenMonthView17changeOrientationEN2Qt11OrientationE @ 57 NONAME
- _ZN14CalenMonthView17populateNextMonthEv @ 58 NONAME
- _ZN14CalenMonthView17populatePrevMonthEv @ 59 NONAME
- _ZN14CalenMonthView17removeWeekNumbersEv @ 60 NONAME
- _ZN14CalenMonthView18addBackgroundFrameEv @ 61 NONAME
- _ZN14CalenMonthView18completePopulationEv @ 62 NONAME
- _ZN14CalenMonthView19getStaticMetaObjectEv @ 63 NONAME
- _ZN14CalenMonthView19populatePreviewPaneER9QDateTime @ 64 NONAME
- _ZN14CalenMonthView20prepareForPopulationEv @ 65 NONAME
- _ZN14CalenMonthView21refreshViewOnGoToDateEv @ 66 NONAME
- _ZN14CalenMonthView22setContextForActiveDayEi @ 67 NONAME
- _ZN14CalenMonthView22updateWeekNumGridModelEv @ 68 NONAME
- _ZN14CalenMonthView23handleChangeOrientationEv @ 69 NONAME
- _ZN14CalenMonthView23handleGridItemActivatedEv @ 70 NONAME
- _ZN14CalenMonthView24handlePreviewPaneGestureEb @ 71 NONAME
- _ZN14CalenMonthView24populateWithInstanceViewEv @ 72 NONAME
- _ZN14CalenMonthView24updateModelWithPrevMonthEv @ 73 NONAME
- _ZN14CalenMonthView25handleGridItemLongPressedEiR7QPointF @ 74 NONAME
- _ZN14CalenMonthView25handleLeftEffectCompletedERKN8HbEffect12EffectStatusE @ 75 NONAME
- _ZN14CalenMonthView26handleRightEffectCompletedERKN8HbEffect12EffectStatusE @ 76 NONAME
- _ZN14CalenMonthView26updateModelWithFutureMonthEv @ 77 NONAME
- _ZN14CalenMonthView35updateMonthDataArrayWithActiveDatesEv @ 78 NONAME
- _ZN14CalenMonthView7setDateEv @ 79 NONAME
- _ZN14CalenMonthView9goToTodayEv @ 80 NONAME
- _ZN14CalenMonthView9setupViewEP14CalenDocLoader @ 81 NONAME
- _ZN14CalenMonthViewC1ER14MCalenServices @ 82 NONAME
- _ZN14CalenMonthViewC2ER14MCalenServices @ 83 NONAME
- _ZN14CalenMonthViewD0Ev @ 84 NONAME
- _ZN14CalenMonthViewD1Ev @ 85 NONAME
- _ZN14CalenMonthViewD2Ev @ 86 NONAME
- _ZN16CalenPreviewPane11qt_metacallEN11QMetaObject4CallEiPPv @ 87 NONAME
- _ZN16CalenPreviewPane11qt_metacastEPKc @ 88 NONAME
- _ZN16CalenPreviewPane13populateLabelE9QDateTime @ 89 NONAME
- _ZN16CalenPreviewPane13stopScrollingEv @ 90 NONAME
- _ZN16CalenPreviewPane15mousePressEventEP24QGraphicsSceneMouseEvent @ 91 NONAME
- _ZN16CalenPreviewPane15startAutoScrollEv @ 92 NONAME
- _ZN16CalenPreviewPane16GetInstanceListLEv @ 93 NONAME
- _ZN16CalenPreviewPane16staticMetaObjectE @ 94 NONAME DATA 16
- _ZN16CalenPreviewPane17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 95 NONAME
- _ZN16CalenPreviewPane17scrollingFinishedEv @ 96 NONAME
- _ZN16CalenPreviewPane17setNoEntriesLabelEP7HbLabel @ 97 NONAME
- _ZN16CalenPreviewPane19getStaticMetaObjectEv @ 98 NONAME
- _ZN16CalenPreviewPane19onTwoSecondsTimeoutEv @ 99 NONAME
- _ZN16CalenPreviewPane4DateEv @ 100 NONAME
- _ZN16CalenPreviewPane7setViewEP14CalenMonthView @ 101 NONAME
- _ZN16CalenPreviewPaneC1ER14MCalenServicesP13QGraphicsItem @ 102 NONAME
- _ZN16CalenPreviewPaneC2ER14MCalenServicesP13QGraphicsItem @ 103 NONAME
- _ZN16CalenPreviewPaneD0Ev @ 104 NONAME
- _ZN16CalenPreviewPaneD1Ev @ 105 NONAME
- _ZN16CalenPreviewPaneD2Ev @ 106 NONAME
- _ZN17CalenSettingsView11qt_metacallEN11QMetaObject4CallEiPPv @ 107 NONAME
- _ZN17CalenSettingsView11qt_metacastEPKc @ 108 NONAME
- _ZN17CalenSettingsView14initializeFormEv @ 109 NONAME
- _ZN17CalenSettingsView16staticMetaObjectE @ 110 NONAME DATA 16
- _ZN17CalenSettingsView18launchPreviousViewEv @ 111 NONAME
- _ZN17CalenSettingsView19getStaticMetaObjectEv @ 112 NONAME
- _ZN17CalenSettingsViewC1ER14MCalenServicesP13QGraphicsItem @ 113 NONAME
- _ZN17CalenSettingsViewC2ER14MCalenServicesP13QGraphicsItem @ 114 NONAME
- _ZN17CalenSettingsViewD0Ev @ 115 NONAME
- _ZN17CalenSettingsViewD1Ev @ 116 NONAME
- _ZN17CalenSettingsViewD2Ev @ 117 NONAME
- _ZN18CalenDayViewWidgetC1ER14MCalenServicesP14CalenDocLoader @ 118 NONAME
- _ZN18CalenDayViewWidgetC2ER14MCalenServicesP14CalenDocLoader @ 119 NONAME
- _ZN18CalenDayViewWidgetD0Ev @ 120 NONAME
- _ZN18CalenDayViewWidgetD1Ev @ 121 NONAME
- _ZN18CalenDayViewWidgetD2Ev @ 122 NONAME
- _ZN21CalenThickLinesDrawer11qt_metacallEN11QMetaObject4CallEiPPv @ 123 NONAME
- _ZN21CalenThickLinesDrawer11qt_metacastEPKc @ 124 NONAME
- _ZN21CalenThickLinesDrawer16staticMetaObjectE @ 125 NONAME DATA 16
- _ZN21CalenThickLinesDrawer19getStaticMetaObjectEv @ 126 NONAME
- _ZN21CalenThickLinesDrawer5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 127 NONAME
- _ZN21CalenThickLinesDrawerC1EN17CalendarNamespace10WidgetTypeEP13QGraphicsItem @ 128 NONAME
- _ZN21CalenThickLinesDrawerC2EN17CalendarNamespace10WidgetTypeEP13QGraphicsItem @ 129 NONAME
- _ZN21CalenThickLinesDrawerD0Ev @ 130 NONAME
- _ZN21CalenThickLinesDrawerD1Ev @ 131 NONAME
- _ZN21CalenThickLinesDrawerD2Ev @ 132 NONAME
- _ZNK14CalenMonthGrid10metaObjectEv @ 133 NONAME
- _ZNK14CalenMonthView10metaObjectEv @ 134 NONAME
- _ZNK16CalenPreviewPane10metaObjectEv @ 135 NONAME
- _ZNK17CalenSettingsView10metaObjectEv @ 136 NONAME
- _ZNK21CalenThickLinesDrawer10metaObjectEv @ 137 NONAME
- _ZTI14CalenMonthGrid @ 138 NONAME
- _ZTI14CalenMonthView @ 139 NONAME
- _ZTI16CalenPreviewPane @ 140 NONAME
- _ZTI17CalenSettingsView @ 141 NONAME
- _ZTI21CalenThickLinesDrawer @ 142 NONAME
- _ZTV14CalenMonthGrid @ 143 NONAME
- _ZTV14CalenMonthView @ 144 NONAME
- _ZTV16CalenPreviewPane @ 145 NONAME
- _ZTV17CalenSettingsView @ 146 NONAME
- _ZTV21CalenThickLinesDrawer @ 147 NONAME
- _ZThn16_N12CalenDayViewD0Ev @ 148 NONAME
- _ZThn16_N12CalenDayViewD1Ev @ 149 NONAME
- _ZThn16_N14CalenMonthGridD0Ev @ 150 NONAME
- _ZThn16_N14CalenMonthGridD1Ev @ 151 NONAME
- _ZThn16_N14CalenMonthViewD0Ev @ 152 NONAME
- _ZThn16_N14CalenMonthViewD1Ev @ 153 NONAME
- _ZThn16_N16CalenPreviewPaneD0Ev @ 154 NONAME
- _ZThn16_N16CalenPreviewPaneD1Ev @ 155 NONAME
- _ZThn16_N17CalenSettingsViewD0Ev @ 156 NONAME
- _ZThn16_N17CalenSettingsViewD1Ev @ 157 NONAME
- _ZThn16_N18CalenDayViewWidgetD0Ev @ 158 NONAME
- _ZThn16_N18CalenDayViewWidgetD1Ev @ 159 NONAME
- _ZThn16_N21CalenThickLinesDrawerD0Ev @ 160 NONAME
- _ZThn16_N21CalenThickLinesDrawerD1Ev @ 161 NONAME
- _ZThn28_N12CalenDayView18HandleNotificationE18TCalenNotification @ 162 NONAME
- _ZThn8_N12CalenDayViewD0Ev @ 163 NONAME
- _ZThn8_N12CalenDayViewD1Ev @ 164 NONAME
- _ZThn8_N14CalenMonthGrid15mousePressEventEP24QGraphicsSceneMouseEvent @ 165 NONAME
- _ZThn8_N14CalenMonthGrid17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 166 NONAME
- _ZThn8_N14CalenMonthGridD0Ev @ 167 NONAME
- _ZThn8_N14CalenMonthGridD1Ev @ 168 NONAME
- _ZThn8_N14CalenMonthViewD0Ev @ 169 NONAME
- _ZThn8_N14CalenMonthViewD1Ev @ 170 NONAME
- _ZThn8_N16CalenPreviewPane15mousePressEventEP24QGraphicsSceneMouseEvent @ 171 NONAME
- _ZThn8_N16CalenPreviewPane17mouseReleaseEventEP24QGraphicsSceneMouseEvent @ 172 NONAME
- _ZThn8_N16CalenPreviewPaneD0Ev @ 173 NONAME
- _ZThn8_N16CalenPreviewPaneD1Ev @ 174 NONAME
- _ZThn8_N17CalenSettingsViewD0Ev @ 175 NONAME
- _ZThn8_N17CalenSettingsViewD1Ev @ 176 NONAME
- _ZThn8_N18CalenDayViewWidgetD0Ev @ 177 NONAME
- _ZThn8_N18CalenDayViewWidgetD1Ev @ 178 NONAME
- _ZThn8_N21CalenThickLinesDrawer5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 179 NONAME
- _ZThn8_N21CalenThickLinesDrawerD0Ev @ 180 NONAME
- _ZThn8_N21CalenThickLinesDrawerD1Ev @ 181 NONAME
- _ZN14CalenMonthGrid5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 182 NONAME
- _ZN14CalenMonthView27showHideRegionalInformationEv @ 183 NONAME
- _ZThn8_N14CalenMonthGrid5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 184 NONAME
- _ZN16CalenPreviewPane14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 185 NONAME
- _ZThn8_N16CalenPreviewPane14mouseMoveEventEP24QGraphicsSceneMouseEvent @ 186 NONAME
- _ZN14CalenMonthView22addRemoveActionsInMenuEv @ 187 NONAME
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/globaldata/bwins/calenglobaldatau.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/globaldata/inc/calencontext.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/globaldata/inc/calencontextimpl.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/globaldata/src/calencontextimpl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/CalenConstants.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/CalenUid.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/CalendarPrivateCRKeys.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/calenagendautils.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/calencommandhandler.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/calencommon.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/calendateutils.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/inc/hb_calencommands.hrh Mon Jun 28 15:22:02 2010 +0530
@@ -38,8 +38,8 @@
{
ECalenMonthView = ECalenViewCommandBase,
ECalenWeekView,
+ ECalenAgendaView,
ECalenDayView,
- ECalenLandscapeDayView,
ECalenTodoEditor,
ECalenTodoEditorDone,
ECalenForwardsToDayView,
--- a/calendarui/loc/calendar.loc Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/calenregionalutil/eabi/calenregionalutilu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/calenregionalutil/inc/calenlunarlocalizer.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/calenregionalutil/src/calenextrarowformatter.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/calenregionalutil/src/calenlunarinfo.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/calenregionalutil/src/calenlunarlocalizer.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/calenregionalutil/src/calensolarterms.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,3 +0,0 @@
-EXPORTS
- _Z24ImplementationGroupProxyRi @ 1 NONAME
-
--- a/calendarui/regionalplugins/inc/CalenLunarPaths.h Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 );
-
- IMPORT_C const TDesC& Festival() { return iFestival; }
- IMPORT_C const TDesC& SolarTerm() { return iSolarTerm; }
- IMPORT_C const TDesC& FullLunarDate() { return iFullLunarDate; }
- IMPORT_C const TDesC& LunarYear() { return iLunarYear; }
- IMPORT_C const TDesC& LunarMonthAndDay() { return iLunarMonthAndDay; }
- IMPORT_C const TDesC& AnimalYear() { return iAnimalYear; }
- IMPORT_C 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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/lunarVietnamese/src/calenlunarvietnameseplugin.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/lunarchinese/data/2002EA3C.rss Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,3 @@
+EXPORTS
+ _Z24ImplementationGroupProxyRi @ 1 NONAME
+
--- a/calendarui/regionalplugins/lunarchinese/inc/CalenLunarChinesePlugin.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/lunarchinese/inc/CalenLunarChinesePlugin.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/lunarchinese/lunarchinese.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/lunarchinese/src/CalenLunarChinesePlugin.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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,87 +302,75 @@
// -----------------------------------------------------------------------------
//
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);
+ popup->setTimeout(HbDialog::NoTimeout);
+ popup->setIconVisible(false);
+ popup->setAttribute( Qt::WA_DeleteOnClose, true );
- // Instantiate a popup
- HbMessageBox popup;
- popup.setDismissPolicy(HbDialog::NoDismiss);
- popup.setTimeout(HbDialog::NoTimeout);
- popup.setIconVisible(false);
+ popup->setHeadingWidget(new HbLabel(hbTrId("txt_calendar_title_lunar_calendar")));
+ popup->setText(aMsgText);
+
+ // Remove the default actions
+ QList<QAction*> list = popup->actions();
+ for(int i=0; i < list.count(); i++)
+ {
+ popup->removeAction(list[i]);
+ }
+ // Sets the primary action
+ popup->addAction(new HbAction(hbTrId("txt_calendar_button_close"), popup));
- popup.setHeadingWidget(new HbLabel("Lunar Calendar"));
- popup.setText(text);
-
- // Sets the primary action
- popup.setPrimaryAction(new HbAction(hbTrId("txt_calendar_button_cancel"),
- &popup));
-
- // Launch popup syncronously
- popup.exec();
+ // Launch popup
+ popup->open();
TRACE_EXIT_POINT;
}
-
//EOF
--- a/calendarui/regionalplugins/regionalplugins.pro Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/regionalplugins/regionalplugins.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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: IBY file for non-localizable elements of Calendar.app
-*
-*/
-
-
-
-#ifndef CALENDAR_IBY
-#define CALENDAR_IBY
-
-
-S60_APP_EXE( calendar )
-
-
-// Backup registration file
-data = ZPRIVATE\10005901\backup_registration.xml PRIVATE\10005901\backup_registration.xml
-
-
-
-// Application registration file.
-data=DATAZ_\private\10003a3f\import\apps\CALENDAR_REG.RSC \private\10003a3f\import\apps\CALENDAR_REG.RSC
-data=\epoc32\data\c\resource\qt\plugins\controlpanel\calensettingsplugin.qtplugin resource\qt\plugins\controlpanel\calensettingsplugin.qtplugin
-data=\epoc32\data\z\pluginstub\calengriditemstyleplugin.qtplugin \private\10005901\calengriditemstyleplugin.qtplugin
-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
-
-file=ABI_DIR\BUILD_DIR\calencommonutils.dll SHARED_LIB_DIR\calencommonutils.dll
-file=ABI_DIR\BUILD_DIR\calenglobaldata.dll SHARED_LIB_DIR\calenglobaldata.dll
-file=ABI_DIR\BUILD_DIR\calencustomisationmanager.dll SHARED_LIB_DIR\calencustomisationmanager.dll
-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\calensettingsplugin.dll SHARED_LIB_DIR\calensettingsplugin.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
-file=ABI_DIR\BUILD_DIR\agendaeventviewerplugin.dll SHARED_LIB_DIR\agendaeventviewerplugin.dll
-
-#endif // CALENDAR_IBY
-
-// End of File
--- a/calendarui/rom/CalendarResources.iby Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,30 +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: IBY file for localizable elements of Calendar.app
-*
-*/
-
-
-
-#ifndef CALENDARRESOURCE_IBY
-#define CALENDARRESOURCE_IBY
-#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
-
-#endif // CALENDARRESOURCE_IBY
-
-// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/rom/calendar.iby Mon Jun 28 15:22:02 2010 +0530
@@ -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: IBY file for non-localizable elements of Calendar.app
+*
+*/
+
+
+
+#ifndef CALENDAR_IBY
+#define CALENDAR_IBY
+
+
+S60_APP_EXE( calendar )
+
+
+// Backup registration file
+data = ZPRIVATE\10005901\backup_registration.xml PRIVATE\10005901\backup_registration.xml
+
+
+
+// Application registration file.
+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
+
+file=ABI_DIR\BUILD_DIR\calencommonutils.dll SHARED_LIB_DIR\calencommonutils.dll
+file=ABI_DIR\BUILD_DIR\calenglobaldata.dll SHARED_LIB_DIR\calenglobaldata.dll
+file=ABI_DIR\BUILD_DIR\calencustomisationmanager.dll SHARED_LIB_DIR\calencustomisationmanager.dll
+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\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
+file=ABI_DIR\BUILD_DIR\agendaeventviewerplugin.dll SHARED_LIB_DIR\agendaeventviewerplugin.dll
+
+#endif // CALENDAR_IBY
+
+// End of File
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/rom/calendarresources.iby Mon Jun 28 15:22:02 2010 +0530
@@ -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 iby file for calendar resources
+*
+*/
+
+
+
+#ifndef CALENDARRESOURCE_IBY
+#define CALENDARRESOURCE_IBY
+#include <data_caging_paths_for_iby.hrh>
+
+// Application resource file.
+S60_APP_RESOURCE(calendar)
+data=DATAZ_/QT_TRANSLATIONS_DIR/calendar.qm QT_TRANSLATIONS_DIR/calendar.qm
+
+#endif // CALENDARRESOURCE_IBY
+
+// End of File
--- a/calendarui/rom/calenlunarchinese_variant.iby Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/rom/calenlunarchinese_variant.iby Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/rom/calenregionalutil.iby Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/settings/inc/calensettings.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/settings/settings.pro Mon Jun 28 15:22:02 2010 +0530
@@ -19,9 +19,10 @@
CONFIG += hb
DEPENDPATH += . \
../../inc
+
INCLUDEPATH += . \
../../inc \
- ../cenrep
+ ../inc
DEFINES += CALENSETTINGS_DLL
--- a/calendarui/settings/src/calensettings.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/settings/src/calensettings.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
+ WXX37evz7zzFf+YMR1xx3v/Krb6EgN031b0mNJi2NkSY8lLbCJewdxauerd9zxa6a8UnNekAfU
+ iCZf/FjyZjPy5myLU8/99pybXiV9Hvdmr/FAtOB9mnyxcGZaytk5dpb0WdLCubAZXkOcOL9Lzo
+ TeeYOXjfEPz32xlwVXXnn+fxw9+uU/HXHdeee7H3YbvfLK84ZpmO7bkh5LWhwjS3osaYFN3Dvs
+ xmmc55X67BbLnSa8UrOPLe02uFvKS0ta8LJ0H2QpVmgZd+70ZN9zbuqb+tac235s75zUarKkx5
+ KW0fVtjUWYV5b6UGusLOlBy7jeRuPFluI02vviXvOj/90meTCmXj33xV4WXH31Rf/19NN/c/+I
+ 6yMfec8/uY2O1DDdtyU9lrQ4Rpb0WNICm7h3EKd2vmqNpea8sKbdkh5LWvCydL1aihVaxp07Pd
+ n3nJv6pr4157Yf2zsntZos6bGkZXR9W2MR5pUlfZa0jM4b4iR/TrSUN5a0kMPjehvyYMyziOe+
+ 2MuCa67Z9eTTTx9+cMR1113v+Te30WuuuXCYhum+LemxpMUxsqTHkhbYxL3Dbpyc5z0wxPP0Pu
+ t0PrCqvxtPe+VFG6R9nRtbeTDurMHnZWe8pZq1pAWf30Sf79NX9szLnnOTw2kP7M1ec/ajZTP8
+ xlKcRte3NRZhvVnqQ62xsqQHLXif5qz0Y8mbMXljifvoMzB+5rR/FvHcF3xZcMkPnnzy/u8sfx
+ 36zt13/9Z/uo2+5S0XrzQcGqDB79utHeoZwcStOacFNuv8hE28Tu2xsVPf61r2eq655pIfHDly
+ eKDfyL3F6XSX137ttZdujHafq1Puy58zU9b4fJq/9TNw1DlI3qTOneV9fh2P2LVdj9xrt/aomT
+ 82NrWuVHtKh3Zfsf6gRL927XC8vV6F/j8WU57T5r3PSg5vr9967yuv7TPPAa+tfM42/eL2WLn+
+ v828Jfuykjd895HPAUvet/7+Y2R9b+c1x4b+fNx3VJqetcS35u6x1FPGvh9stdd4fyR/FmlbH9
+ 4LFntZ8La3vfHZI0fu/+6Ia7XZI26j1103TsN035b0WNLiGFnSY0kLbOLeYS1O99xz0ym/WXve
+ 4SGep/dZp/Pwd/fvv/mU9uuv3yTt69zYzn3MWYPPy7hbqllLWvD5zfH53nnTc/6ec5PDaQ/szV
+ 5z9qNlM/zGUpxG17fv86w8z4f15mM18jsPr4m8ob4154HFvCGHNyOHe58L5MGYPPDn7WIvC/bs
+ ufzY6o3hEyOu/fvf+9/rL8DGaZju25IeS1ocI0t6LGmBTdw7rMXpwIG134z0vFKfvffetfa9e2
+ 14pWYf1rhbyktLWvCydB9kKVZoGXfu9GTfc27qm/rWnNt+bO+c1GqypMeSltH17fs8K8/zYV75
+ WFno/8mbcee3xm+I02bEabT3xbzGihf2zOOec2tq1WK/0pONP2+XfFlw/LHH7j+69PXoo/cf3b
+ //th+e/l/LHnc/L63Br+fWDvVY0gKbdW7MxQk2dtlYqW9fywcOrP1m9bBw/PHHx/mNxlucTnfd
+ e+9a+969b9oY7XPcNXtvPRafT+e89TNwlNeTN/G8GdHH+XjE/pyeOyUeopk/Nja1bmr+8MwsmX
+ 9u7Vjv1Gp+DWf6uHQ9jaipWPysabF+RmnqoMXYsH5rva9Gk++vV3/79dTzvL9q5mxxb+g3rv9v
+ MW/JHHgf3leSN/77j5H1PdU9dy7Qn4/7jkrTs5bmX3ifpZ4y9v1gq72m+iNNP99Sjz9vF3tZsG
+ /f5SeeeOKLx5a/vnDs4MHbnncb3bfvjSsNXxigwe/brR3qGcHErTmnBTbr/IRNvE7tsbFT3+ta
+ /uQnvd84z7tvoN9ovMXpvO/Ypz7ltb9pg7TPcdfsvfVYfD59zls/A0edg+RN6txZ3ufX8Yhd2/
+ WUeIhm/tjY1LpS7Skd2n3F+oMS/dq1w/H2ehX6/1hMeU6b9z4rOby9fuu9r7y2t/pr/zzvtZXP
+ 2eZ7iTBWo77z4Bk213+e6cOjer51rJbvbdJ9w8j63h67OTajYkV/nuqH+/U2lnrKmLf2Pnu0zw
+ rt9PjzdrGXBS996Y+/cOGFrx5yvfzlP/mC2+hIDdO9W9JjSYtjZEmPJS2wiXsHcWrnq9ZYas4M
+ a9ot6bGkBS9L16ulWKFl3LnTk33Pualv6ltzbvuxvXNSq8mSHktaRte3NRZhXlnSZ0nL6LwhTv
+ LnREt5Y0kLOTyutyEPxjyLeO7By4LPrn5u8s8NwcQn+XkHDFYvbMgDGJAD5AA5QA6QA+QAOUAO
+ kAPkADlADpAD5AA5QA6QA+QAOWA+Bz7X5E3BahJeFvDFOC8GyAFygBwgB8gBcoAcIAfIAXKAHC
+ 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
+ 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
+ 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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,170 +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 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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,328 +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 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();
-
-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();
-
-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;
-};
-
-#endif //CALENDAYVIEWWIDGET_H
-
-// End of file --Don't remove this.
--- a/calendarui/views/inc/caleneventlistviewitem.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/caleneventlistviewitem.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calengriditemprototype.h Mon Jun 28 15:22:02 2010 +0530
@@ -28,13 +28,19 @@
class HbIconItem;
class HbTextItem;
class HbFrameItem;
-class CalenGridItem;
+class CalenTodayIndicatorLineDrawer;
+
+// CONSTANTS
+const QString focusIconName = "qtg_fr_cal_focused_day_ind";
+const QString eventIndname = "qtg_graf_cal_event_ind";
class CalenGridItemPrototype : public HbGridViewItem
{
Q_OBJECT
public:
+ CalenGridItemPrototype(QColor todayIndColor, QColor activeColor, QColor inActiveColor,
+ QGraphicsWidget *parent = 0);
CalenGridItemPrototype(QGraphicsWidget *parent = 0);
virtual ~CalenGridItemPrototype()
{
@@ -46,19 +52,18 @@
void pressStateChanged(bool pressed,bool animate);
void pressStateChanged(bool animate);
bool canSetModelIndex(const QModelIndex& index);
+ void createPrimitives();
private:
- void drawUnderline(bool underlineEnabled);
-private:
- QGraphicsLinearLayout *mLayout;
- CalenGridItem *mWidget;
+ QColor mTodayUnderLineColor;
+ QColor mActiveTextColor;
+ QColor mInActiveTextColor;
QColor mCurrentDateColor;
QColor mGridBorderColor;
HbIconItem *mEventIndicatorItem;
HbTextItem *mMonthDayInfoItem;
HbFrameItem *mFocusIndicatorItem;
- HbIconItem *mTodayIndicatorItem;
- QColor mTodayUnderLineColor;
+ CalenTodayIndicatorLineDrawer *mTodayIndicatorItem;
};
#endif // CALENGRIDITEMPROTOTYPE_H
--- a/calendarui/views/inc/calenmonthgrid.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calenmonthgrid.h Mon Jun 28 15:22:02 2010 +0530
@@ -56,19 +56,30 @@
~CalenMonthGrid();
void setView(CalenMonthView *view);
void updateMonthGridModel(QList<CalenMonthData> &monthDataArray,
- int indexToBeScrolled);
+ int indexToBeScrolled, bool isFirstTime);
+ void updateMonthGridWithInActiveMonths(
+ QList<CalenMonthData> &monthDataArray);
+ void updateMonthGridWithEventIndicators(
+ QList<CalenMonthData> &monthDataArray);
void setCurrentIdex(int index);
int getCurrentIndex();
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();
void mousePressEvent(QGraphicsSceneMouseEvent* event);
void mouseReleaseEvent(QGraphicsSceneMouseEvent* event);
void setFocusToProperDay();
void setActiveDates(QDate activeDate);
- void paint(QPainter* painter, const QStyleOptionGraphicsItem* option, QWidget* widget);
+ void paint(QPainter* painter,
+ const QStyleOptionGraphicsItem* option, QWidget* widget);
public slots:
void scrollingFinished();
@@ -76,12 +87,6 @@
void appendRows();
void itemActivated(const QModelIndex &index);
-protected slots:
- void downGesture(int value);
- void upGesture(int value);
- void panGesture(const QPointF &delta);
- void timerExpired();
-
private:
QStandardItemModel *mModel;
QList<CalenMonthData> mMonthDataArray;
@@ -97,6 +102,8 @@
QColor mGridLineColor;
QColor mGridBorderColor;
QGraphicsWidget* mContentWidget;
+ QList<QString> mLocalisedDates;
+ QPointF mStartPos;
};
#endif // CALENMONTHGRID_H
--- a/calendarui/views/inc/calenmonthview.h Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calenmonthview.h Mon Jun 28 15:22:02 2010 +0530
@@ -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
@@ -66,8 +66,8 @@
public: // From CCalenView
virtual void doPopulation();
void setupView(CalenDocLoader *docLoader);
+ void doLazyLoading();
void handleGridItemActivated();
- void handleGridItemLongPressed(int index, QPointF &coords);
void setContextForActiveDay(int index);
QDateTime getCurrentDay();
QDateTime getActiveDay();
@@ -84,6 +84,8 @@
void populatePreviewPane(QDateTime &dateTime);
void handlePreviewPaneGesture(bool rightGesture);
QDateTime firstDayOfGrid();
+ void fetchEntriesAndUpdateModel();
+ void launchDayView();
private:
void createGrid();
@@ -93,8 +95,8 @@
QDateTime dateFromContext( const MCalenContext &context );
void setActiveDay(QDateTime day);
void setDate();
- void getInstanceList(QList<AgendaEntry> &list,
- QDateTime rangeStart, QDateTime rangeEnd);
+ void getInstanceList(QList<QDate> &list,
+ QDateTime rangeStart, QDateTime rangeEnd);
void handleChangeOrientation();
void setDateToLabel();
void updateWeekNumGridModel();
@@ -104,6 +106,7 @@
void refreshViewOnGoToDate();
void showHideRegionalInformation();
void onContextChanged();
+ void updateDayLabel();
private slots:
void createEditor();
@@ -112,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:
@@ -173,6 +173,8 @@
CalenPluginLabel *mCurrRegionalInfo;
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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calennativeview.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calenpluginlabel.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calenpreviewpane.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/inc/calensettingsview.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/resources/caleneventlistviewitem.css Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/resources/caleneventlistviewitem.widgetml Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/resources/calengriditemprototype.css Mon Jun 28 15:22:02 2010 +0530
@@ -36,5 +36,4 @@
left: -0.75un;
right: 0.75un;
fixed-height: 0.75un;
- background-color: red;
}
--- a/calendarui/views/resources/calenresources.qrc Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/resources/calenresources.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -4,12 +4,15 @@
<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>
<qresource prefix="/fxml">
<file alias="view_show">view_show_normal.fxml</file>
<file alias="view_hide">view_hide_normal.fxml</file>
+ <file alias="view_hide_back">view_hide_back.fxml</file>
+ <file alias="view_show_back">view_show_back.fxml</file>
<file alias="portrait_preview_pane_show_on_left_gesture">portrait_preview_pane_show_on_left_gesture_normal.fxml</file>
<file alias="portrait_preview_pane_hide_on_left_gesture">portrait_preview_pane_hide_on_left_gesture_normal.fxml</file>
<file alias="portrait_preview_pane_show_on_right_gesture">portrait_preview_pane_show_on_right_gesture_normal.fxml</file>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/resources/view_hide_back.fxml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,10 @@
+<layers>
+<visual>
+ <param name="translation_x" type="anim">
+ <duration>0.35</duration>
+ <style>outquad</style>
+ <start>extrect.right</start>
+ <end ref="screen.width">1</end>
+ </param>
+</visual>
+</layers>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/resources/view_show_back.fxml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,10 @@
+<layers>
+<visual>
+ <param name="translation_x" type="anim">
+ <duration>0.35</duration>
+ <style>outquad</style>
+ <start ref="screen.width">-1</start>
+ <end>extrect.left</end>
+ </param>
+</visual>
+</layers>
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/views/src/calenagendaview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,311 +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::BackAction);
- 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);
-}
-
-// End of file --Don't remove this.
--- a/calendarui/views/src/calendayviewwidget.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1054 +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)
-{
- // 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)
-{
- // 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"));
- connect(openAction, SIGNAL(triggered()), this, SLOT(viewEntry()));
-
- // 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"));
- connect(completeAction, SIGNAL(triggered()), this, SLOT(markAsDone()));
- }
-
- // Add the edit option
- HbAction *editAction = contextMenu->addAction(hbTrId("txt_common_menu_edit"));
- connect(editAction, SIGNAL(triggered()), this, SLOT(editEntry()));
-
- // Add the delete option
- HbAction *deleteAction = contextMenu->addAction(hbTrId("txt_common_menu_delete"));
- connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteEntry()));
-
- contextMenu->setDismissPolicy(HbMenu::TapAnywhere);
-
- // Show context sensitive menu.
- // Param const QPointF& coordinate - is a longpress position.
- contextMenu->exec(coords);
-}
-
-// ----------------------------------------------------------------------------
-// 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;
- }
-
- // 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();
-}
-
-// End of file --Don't remove this.
--- a/calendarui/views/src/caleneventlistviewitem.cpp Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/caleneventlistviewitem.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calengriditemprototype.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -16,7 +16,6 @@
*/
// System includes
-#include <QDebug>
#include <QPainter>
#include <QPen>
#include <QGraphicsWidget>
@@ -32,8 +31,8 @@
// User includes
#include "calengriditemprototype.h"
#include "calencommon.h"
+#include "calentodayindicatorlinedrawer.h"
-#define GRIDLINE_WIDTH 0.075 //units
/*!
\class CalenGridItemPrototype
@@ -43,19 +42,55 @@
/*!
Constructor.
*/
-CalenGridItemPrototype::CalenGridItemPrototype(QGraphicsWidget *parent) :
+CalenGridItemPrototype::CalenGridItemPrototype(QColor todayIndColor, QColor activeColor, QColor inActiveColor,
+ QGraphicsWidget *parent) :
HbGridViewItem(parent),
- mLayout(0),
+ mTodayUnderLineColor(todayIndColor),
+ mActiveTextColor(activeColor),
+ mInActiveTextColor(inActiveColor),
mCurrentDateColor(Qt::black),
mGridBorderColor(Qt::gray),
mEventIndicatorItem(0),
mMonthDayInfoItem(0),
mFocusIndicatorItem(0),
- mTodayIndicatorItem(0),
- mTodayUnderLineColor(Qt::gray)
+ mTodayIndicatorItem(0)
{
- mTodayUnderLineColor = HbColorScheme::color("qtc_cal_month_current_day");
+ }
+
+/*!
+ Constructs all the primitives
+*/
+void CalenGridItemPrototype::createPrimitives()
+{
+ if (!mMonthDayInfoItem) {
+ mMonthDayInfoItem = new HbTextItem(this);
+ HbStyle::setItemName(mMonthDayInfoItem,
+ QLatin1String("monthDayInfoTextItem"));
+ mMonthDayInfoItem->setElideMode(Qt::ElideNone);
}
+
+ if (!mFocusIndicatorItem) {
+ mFocusIndicatorItem = new HbFrameItem(this);
+ mFocusIndicatorItem->frameDrawer().setFrameType(
+ HbFrameDrawer::NinePieces);
+ mFocusIndicatorItem->setZValue(-1);
+ HbStyle::setItemName(
+ mFocusIndicatorItem, QLatin1String("focusIconItem"));
+ }
+
+ if (!mEventIndicatorItem) {
+ mEventIndicatorItem = new HbIconItem(this);
+ HbStyle::setItemName(
+ mEventIndicatorItem, QLatin1String("eventIconItem"));
+ }
+
+ if (!mTodayIndicatorItem) {
+ mTodayIndicatorItem = new CalenTodayIndicatorLineDrawer(this);
+ HbStyle::setItemName(
+ mTodayIndicatorItem, QLatin1String("todayIndicatorItem"));
+ }
+
+}
/*!
From HbAbstractViewItem.
@@ -65,7 +100,16 @@
*/
HbAbstractViewItem *CalenGridItemPrototype::createItem()
{
- return new CalenGridItemPrototype(*this);
+ 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;
}
/*!
@@ -74,101 +118,70 @@
\sa HbAbstractViewItem, HbGridViewItem
*/
void CalenGridItemPrototype::updateChildItems()
-{
-
- // base class implementation
- HbGridViewItem::updateChildItems();
-
+{
// Here update content of each item.
QVariant monthDayRole;
- QVariant monthFocusRole;
+ bool monthFocusRole;
bool underlineEnabled = false;
- QVariant monthEventRole;
- QVariant monthTextColorRole;
+ bool monthEventRole;
+ bool monthTextColorRole;
QVariant itemData = modelIndex().data(Qt::UserRole + 1);
if (itemData.isValid()) {
if (itemData.canConvert<QVariantList>()) {
+
// Get the item list
QVariantList itemList = itemData.toList();
// Get the day text
monthDayRole = itemList.at(CalendarNamespace::CalendarMonthDayRole);
if (monthDayRole.canConvert<QString>()) {
- QString monthDayText = monthDayRole.toString();
-
- if (!mMonthDayInfoItem) {
- mMonthDayInfoItem = new HbTextItem(this);
- HbStyle::setItemName(mMonthDayInfoItem,
- QLatin1String("monthDayInfoTextItem"));
-
- }
-
- mMonthDayInfoItem->setText(monthDayText);
- mMonthDayInfoItem->setElideMode(Qt::ElideNone);
+ mMonthDayInfoItem->setText(monthDayRole.toString());
}
// Get the focus data
- monthFocusRole = itemList.at(CalendarNamespace::CalendarMonthFocusRole);
- if (monthFocusRole.canConvert<QString>()) {
- QString focusIconPath = monthFocusRole.toString();
- if (!mFocusIndicatorItem) {
- mFocusIndicatorItem = new HbFrameItem(this);
- mFocusIndicatorItem->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
- mFocusIndicatorItem->setZValue(-1);
- HbStyle::setItemName(mFocusIndicatorItem, QLatin1String("focusIconItem"));
- }
- mFocusIndicatorItem->frameDrawer().setFrameGraphicsName(focusIconPath);
+ monthFocusRole = itemList.at(CalendarNamespace::CalendarMonthFocusRole).value<bool>();
+ if (monthFocusRole) {
+ mFocusIndicatorItem->frameDrawer().setFrameGraphicsName(focusIconName);
+ } else {
+ mFocusIndicatorItem->frameDrawer().setFrameGraphicsName(QString(""));
}
// 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);
- if (monthEventRole.canConvert<QString>()) {
- QString eventIconPath = monthEventRole.toString();
- if (!mEventIndicatorItem) {
- mEventIndicatorItem = new HbIconItem(this);
- HbStyle::setItemName(mEventIndicatorItem, QLatin1String("eventIconItem"));
- }
- mEventIndicatorItem->setIconName(eventIconPath);
+ monthEventRole = itemList.at(CalendarNamespace::CalendarMonthEventRole).value<bool>();
+ if (monthEventRole) {
+ // Set the event indicator
+ //QString iconName(focusIconName);
+ mEventIndicatorItem->setIconName(eventIndname);
+ } else {
+ mEventIndicatorItem->setIconName(QString(""));
}
// Get the text color
- monthTextColorRole = itemList.at(CalendarNamespace::CalendarMonthTextColorRole);
- if (monthTextColorRole.canConvert<QColor>()) {
- QColor monthTextColor = monthTextColorRole.value<QColor>();
- mMonthDayInfoItem->setTextColor(monthTextColor);
+ monthTextColorRole = itemList.at(CalendarNamespace::CalendarMonthTextColorRole).value<bool>();
+ if (monthTextColorRole) {
+ // Set the active text color
+ mMonthDayInfoItem->setTextColor(mActiveTextColor);
+ } else {
+ // Set the inactive text color
+ mMonthDayInfoItem->setTextColor(mInActiveTextColor);
}
}
}
+ // base class implementation
+ HbGridViewItem::updateChildItems();
}
/*!
- 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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calenmonthgrid.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -16,14 +16,13 @@
*/
// System includes
-#include <qtimer.h>
-#include <hbmenu.h>
-#include <hbaction.h>
-#include <hbmainwindow.h>
#include <hbgridview.h>
#include <hbabstractviewitem.h>
#include <hbstyleloader.h>
#include <hbcolorscheme.h>
+#include <hbpangesture.h>
+#include <hbswipegesture.h>
+#include <hbdeviceprofile.h>
// User includes
#include "calenmonthgrid.h"
@@ -32,10 +31,13 @@
#include "calenmonthview.h"
#include "calendateutils.h"
#include "calencommon.h"
+#include "calenconstants.h"
// Constants
-#define SCROLL_SPEEED 1000
+#define SCROLL_SPEEED 3000
#define GRIDLINE_WIDTH 0.075 //units
+#define MAX_PAN_DIRECTION_THRESHOLD 50
+#define MIN_PAN_DIRECTION_THRESHOLD 20
/*!
\class CalenMonthGrid
@@ -53,7 +55,7 @@
mIsPanGesture(false),
mIsAtomicScroll(true),
mView(NULL),
- mCurrentRow(0),
+ mCurrentRow(-100),
mIsNonActiveDayFocused(false),
mIgnoreItemActivated(false),
mGridBorderColor(Qt::gray)
@@ -66,33 +68,30 @@
setSelectionMode(HbGridView::NoSelection);
setUniformItemSizes(true);
setVerticalScrollBarPolicy(HbScrollArea::ScrollBarAlwaysOff);
- setClampingStyle(HbScrollArea::StrictClamping );
+ 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
mContentWidget = contentWidget();
- // Get the color of the grid lines
+ // Get the all required colors
+ // Color of the grid lines
mGridLineColor = HbColorScheme::color("qtc_cal_grid_line");
- // Create the prototype
- CalenGridItemPrototype* gridItemPrototype = new CalenGridItemPrototype(this);
- // Create the model
- mModel = new QStandardItemModel(14*KCalenDaysInWeek, 1, this);
- // Set the mode and the prototype
- setModel(mModel,gridItemPrototype);
+ // Get the localised dates well before
+ // TODO: Need to update the mLocalisedDates when user changes the
+ // phone language keeping calendar application in background
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ for (int i = 1; i <= 31; i++) {
+ mLocalisedDates.append(locale.toString(i));
+ }
- // Register the widgetml and css files
- HbStyleLoader::registerFilePath(":/");
-
- // Set the layout name
- setLayoutName("calendarCustomGridItem");
-
+ // 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 &)));
}
/*!
@@ -100,6 +99,7 @@
*/
CalenMonthGrid::~CalenMonthGrid()
{
+ // Nothing Yet
}
/*!
@@ -114,55 +114,66 @@
Updates the model with the proper dates and sets the required user roles
*/
void CalenMonthGrid::updateMonthGridModel(QList<CalenMonthData> &monthDataArray,
- int indexToBeScrolled)
+ int indexToBeScrolled, bool isFirstTime)
{
- // Check the counts
- int dataCount = monthDataArray.count();
- int rowCount = mModel->rowCount();
- int countDiff = dataCount - rowCount;
- if (countDiff < 0) {
- // Delete extra rows in the model
- mModel->removeRows(dataCount,abs(countDiff));
- } else if (countDiff > 0) {
- // Add the necessary number of rows
- mModel->insertRows(rowCount,countDiff);
+ int loopStart = 0;
+ int loopEnd = monthDataArray.count();
+ if (isFirstTime) {
+ // Create the model with only 42 items as visible to the user
+ mModel = new QStandardItemModel(KCalenDaysInWeek * KNumOfVisibleRows,
+ 1, this);
+ loopStart = (mView->rowsInPrevMonth()) * KCalenDaysInWeek;
+ loopEnd = loopStart + (KCalenDaysInWeek * KNumOfVisibleRows);
+ } else {
+ // Block the signals generated by model, this is being done as
+ // we want to avoid the overload of view listening to signals
+ mModel->blockSignals(true);
+
+ // Check the counts
+ int dataCount = monthDataArray.count();
+ int rowCount = mModel->rowCount();
+ int countDiff = dataCount - rowCount;
+ if (countDiff < 0) {
+ // Delete extra rows in the model
+ mModel->removeRows(dataCount,abs(countDiff));
+ } else if (countDiff > 0) {
+ // Add the necessary number of rows
+ mModel->insertRows(rowCount,countDiff);
+ }
+ loopEnd = dataCount;
}
+
QDateTime currDate = mView->getCurrentDay();
QDateTime currDateTime = CalenDateUtils::beginningOfDay(currDate);
QDateTime activeDay = mView->getActiveDay();
QDateTime activeDateTime = CalenDateUtils::beginningOfDay(activeDay);
QModelIndex currentIndex;
-
- // Get the default text color to be set
- QColor textColor = HbColorScheme::color("qtc_cal_month_notactive_dates");
- HbExtendedLocale locale = HbExtendedLocale::system();
- for (int i = 0; i < dataCount; i++) {
+ int modelIndex = 0;
+ for (int i = loopStart; i < loopEnd; i++) {
QDateTime dateTime = monthDataArray[i].Day();
- currentIndex = mModel->index(i, 0);
- // Get the localised string for the day
- QString date = locale.toString(dateTime.date().day());
+ currentIndex = mModel->index(modelIndex++, 0);
// Create the variant list to contain the date to depict a grid item
QVariantList itemData;
- // NOTE: Add the data in the order mentioned in the
+ // !!!NOTE!!!: Add the data in the order mentioned in the
// CalendarNamespace::DataRole enum. Dont change the order.
- itemData << date;
+ itemData << mLocalisedDates.at(dateTime.date().day()-1);
// Check for active day
if (activeDateTime == CalenDateUtils::beginningOfDay(dateTime)) {
- mCurrentRow = currentIndex.row();
- // Set the focus icon
- itemData << QString("qtg_fr_cal_focused_day_ind");
+ mCurrentRow = i;
+ // Set the focus attribute to true
+ itemData << true;
} else {
// reset the highlight
- itemData << QString("");
+ itemData << false;
}
// Check for current day
if (currDateTime == CalenDateUtils::beginningOfDay(dateTime)) {
- // Set the underline icon
+ // Set the underline attribute to true
itemData << true;
} else {
itemData << false;
@@ -170,61 +181,166 @@
// Check for events
if (monthDataArray[i].HasEvents()) {
- // Set the underline icon
- itemData << QString("qtg_graf_cal_event_ind");
+ // Set the event indicator attribute
+ itemData << true;
} else {
- itemData << QString("");
+ itemData << false;
}
// Add default text color
- itemData << textColor;
+ if (monthDataArray[i].isActive()) {
+ itemData << true;
+ } else {
+ itemData << false;
+ }
mModel->itemFromIndex(currentIndex)->setData(itemData);
}
+
+ if (isFirstTime) {
+ // Color of the today indicator
+ QColor todayIndColor = HbColorScheme::color("qtc_cal_month_current_day");
+ // Color of the active dates
+ QColor mActiveTextColor =
+ HbColorScheme::color("qtc_cal_month_active_dates");
+ // Color of the inactive dates
+ QColor mInActiveTextColor =
+ HbColorScheme::color("qtc_cal_month_notactive_dates");
+
+ // Create the prototype
+ CalenGridItemPrototype* gridItemPrototype = new CalenGridItemPrototype(
+ todayIndColor, mActiveTextColor, mInActiveTextColor, this);
+
+ // Set the mode and the prototype
+ setModel(mModel,gridItemPrototype);
+
+ // Register the widgetml and css files
+ HbStyleLoader::registerFilePath(":/");
+
+ // Set the layout name
+ setLayoutName("calendarCustomGridItem");
+ } else {
+ // Since, we have finished setData, Now unblock the signals
+ mModel->blockSignals(false);
+
+ // Since till now, we had blocked signals being generated frm the mode
+ // view will be unaware of the items that we added. Hence, inform the view
+ // explicitly in one shot
+ QModelIndex leftIndex = mModel->index(0, 0);
+ QModelIndex rightIndex = mModel->index(loopEnd-1, 0);
+ dataChanged(leftIndex, rightIndex);
+
+ // NOTE: To make sure that we always display proper month,
+ // two calls have been made to scrollTo(), one with top
+ // visible item and other with bottom visible item
+ // Calculate the first visible item in the grid
+ QModelIndex firstVisibleIndex = mModel->index(indexToBeScrolled -
+ (KNumOfVisibleRows * KCalenDaysInWeek - 1), 0);
+ scrollTo(firstVisibleIndex);
+
+
+ // Calculate the last visible item in the grid
+ QModelIndex lastVisibleIndex = mModel->index(indexToBeScrolled, 0);
+ scrollTo(lastVisibleIndex);
+ }
mMonthDataArray = monthDataArray;
-
- // Get the active month
- QDateTime activeDate = mView->getActiveDay();
- // Set the text color properly
- setActiveDates(activeDate.date());
-
- // NOTE: To make sure that we always display proper month,
- // two calls have been made to scrollTo(), one with top
- // visible item and other with bottom visible item
- // Calculate the first visible item in the grid
- QModelIndex firstVisibleIndex = mModel->index(indexToBeScrolled -
- (KNumOfVisibleRows * KCalenDaysInWeek - 1), 0);
- scrollTo(firstVisibleIndex);
-
-
- // Calculate the last visible item in the grid
- QModelIndex lastVisibleIndex = mModel->index(indexToBeScrolled, 0);
- scrollTo(lastVisibleIndex);
}
/*!
- Listens for down gesture
+ Updates the view with jprevious month dates when calendar is opened for the
+ first time to improve the opening time
*/
-void CalenMonthGrid::downGesture (int value)
-{
- Q_UNUSED(value)
- mDirection = down;
- // Before we start scrolling, setthe active text color to previous month
- QDateTime activeDate = mView->getActiveDay();
- setActiveDates(activeDate.addMonths(-1).date());
- HbScrollArea::downGesture(SCROLL_SPEEED);
+void CalenMonthGrid::updateMonthGridWithInActiveMonths(
+ QList<CalenMonthData> &monthDataArray)
+{
+ mMonthDataArray = monthDataArray;
+
+ // Prepend the required rows
+ handlePrependingRows(monthDataArray);
+
+ // Append the required rows
+ handleAppendingRows(monthDataArray);
+
+ int rowsInPrevMonth = mView->rowsInPrevMonth();
+
+ // Calculate the proper index to be scrolled to
+ int itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
+ QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ mIsAtomicScroll = true;
+ scrollTo(indexToBeScrolled);
+
+ // Scroll to proper index
+ itemToBeScrolled = ((rowsInPrevMonth + KNumOfVisibleRows) *
+ KCalenDaysInWeek) - 1;
+ 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 &)));
}
/*!
- Listens for Up gesture
+ Updates the view with just event indicators
*/
-void CalenMonthGrid::upGesture (int value)
+void CalenMonthGrid::updateMonthGridWithEventIndicators(
+ QList<CalenMonthData> &monthDataArray)
+{
+ mMonthDataArray = monthDataArray;
+ for(int i = 0; i < monthDataArray.count(); i++) {
+ // Check if the day has events
+ if (monthDataArray[i].HasEvents()) {
+ QModelIndex itemIndex = mModel->index(i,0);
+ QVariant itemData = itemIndex.data(Qt::UserRole + 1);
+ QVariantList list = itemData.toList();
+ list.replace(CalendarNamespace::CalendarMonthEventRole, true);
+ mModel->itemFromIndex(itemIndex)->setData(list);
+ }
+ }
+}
+
+/*!
+ Scrolls the content dowmwards
+ */
+void CalenMonthGrid::downGesture()
{
- Q_UNUSED(value)
- mDirection = up;
- // Before we start scrolling, setthe active text color to future month
- QDateTime activeDate = mView->getActiveDay();
- setActiveDates(activeDate.addMonths(1).date());
- HbScrollArea::upGesture(SCROLL_SPEEED);
+ // 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);
+}
+
+/*!
+ Scrolls the content upwards
+ */
+void CalenMonthGrid::upGesture()
+{
+ // 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);
+
}
/*!
@@ -232,7 +348,6 @@
*/
void CalenMonthGrid::mousePressEvent(QGraphicsSceneMouseEvent* event)
{
- mPressedPos = event->pos();
// Pass it to parent
HbGridView::mousePressEvent(event);
}
@@ -242,43 +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)
{
- if (!mIsPanGesture) {
- mIsPanGesture = true;
- mIgnoreItemActivated = true;
-
- // Get to know the direction of the gesture
- if (delta.y() > 0) {
- mDirection = down;
- } else {
- mDirection = up;
- }
- } else { // This case is when user changes the direction while panning
- // without lifting the finger
- // Check if direction has changed
- if (((delta.y() > 0) && (mDirection == up))
- || ((delta.y() < 0) && (mDirection == down))) {
- // Direction has changed, ignore this pan
- return;
- }
- }
- // 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);
+ }
}
/*!
@@ -286,42 +446,100 @@
*/
void CalenMonthGrid::scrollingFinished()
{
-
if (mIsPanGesture) {
- mIsPanGesture = false;
- if (mDirection == up) {
- // Make a request for upgesture
- upGesture(SCROLL_SPEEED);
- return; // return immediately
- } else if (mDirection == down) {
- // Make a request for upgesture
- downGesture(SCROLL_SPEEED);
- return; // return immediately
+ handlePanGestureFinished();
+ } else if(!mIsAtomicScroll) {
+ QDateTime activeDate = mView->getActiveDay();
+ if(mDirection == down) { // down gesture
+ if (!mIsNonActiveDayFocused) {
+ setActiveDates(activeDate.addMonths(-1).date());
+ }
+ prependRows();
+ } else if (mDirection == up) { //up gesture
+ if (!mIsNonActiveDayFocused) {
+ setActiveDates(activeDate.addMonths(1).date());
+ }
+ appendRows();
}
- } else if(!mIsAtomicScroll) {
- // Before we do anything, set the focus to proper date
- // Set it only when non active day was focussed. When inactive day
- // was focussed, we need to focus the same day
- if (!mIsNonActiveDayFocused) {
- setFocusToProperDay();
- }
- // To improve the performance, lets start the timer for 10 ms,
- // return immediately and do the other things after that
- QTimer::singleShot(10, this, SLOT(timerExpired()));
+ mDirection = invalid;
} else {
mIsAtomicScroll = false;
+ mDirection = invalid;
}
mIgnoreItemActivated = false;
+ setAttribute(Hb::InteractionDisabled, false);
}
-void CalenMonthGrid::timerExpired()
+/*!
+ Function to handle completion of pan gesture
+ */
+void CalenMonthGrid::handlePanGestureFinished()
{
- if(mDirection == down) { // down gesture
- prependRows();
- } else if (mDirection == up) { //up gesture
- appendRows();
+ mIsPanGesture = false;
+ // Get the first item that is visible
+ QList<HbAbstractViewItem *> list = visibleItems();
+ HbAbstractViewItem* item = list[0];
+ QModelIndex modelIndex = item->modelIndex();
+
+ // Get the date which is visible at the above row
+ QDateTime date = mMonthDataArray[modelIndex.row()].Day();
+
+ // Check if this date belong to current active month or
+ // previous month else future month
+ QDateTime activeMonth = mView->getActiveDay();
+ QDateTime prevMonth = activeMonth.addMonths(-1);
+ QDateTime nextMonth = activeMonth.addMonths(1);
+ int month = date.date().month();
+ if (month == activeMonth.date().month()) {
+ // Then pan is completed on current month
+ // Check if the date is more than half of the current month or it is
+ // more than or equal to half of the future month
+ if (date.date().day() > (activeMonth.date().daysInMonth()) / 2 ||
+ date.addDays(KNumOfVisibleRows*KCalenDaysInWeek).date().day() >=
+ (prevMonth.date().daysInMonth()) / 2) {
+ // up gesture to bring the next month
+ 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()) {
+ // first visible item belongs to previous month
+ // Check if the date is more than half of the previous month
+ if (date.date().day() > (prevMonth.date().daysInMonth()) / 2) {
+ // 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();
+ }
+ } 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();
+ } 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();
}
- mDirection = invalid;
}
/*!
@@ -330,43 +548,84 @@
*/
void CalenMonthGrid::prependRows()
{
+ // Before we do anything, set the focus to proper date
+ // Set it only when non active day was focussed. When inactive day
+ // was focussed, we need to focus the same day
+ if (!mIsNonActiveDayFocused) {
+ setFocusToProperDay();
+ }
+
+ // Block the signals generated by model, this is being done as
+ // we want to avoid the overload of view listening to signals
+ mModel->blockSignals(true);
+
mIsNonActiveDayFocused = false;
- QDateTime currDate = mView->getCurrentDay();
- QDateTime currDateTime = CalenDateUtils::beginningOfDay( currDate );
+
int rowsInFutMonthEarlier = mView->rowsInFutMonth();
int rowsInPrevMonthEarlier = mView->rowsInPrevMonth();
+ // remove the cells in the future month
+ int deleteFromIndex = (rowsInPrevMonthEarlier + KNumOfVisibleRows) * KCalenDaysInWeek;
+ int numOfIndices = rowsInFutMonthEarlier * KCalenDaysInWeek;
+
// Get the updated dates from the view
mView->updateModelWithPrevMonth();
QList<CalenMonthData > monthDataList = mView->monthDataList();
mMonthDataArray = monthDataList;
- int listCount = monthDataList.count();
- // Get the updated rows to be inserted
- int rowsInPrevMonth = mView->rowsInPrevMonth();
- int rowsInFutMonth = mView->rowsInFutMonth();
+
+ // Prepend the required rows
+ handlePrependingRows(monthDataList);
+
+ // Since, we have finished setData, Now unblock the signals
+ mModel->blockSignals(false);
- // remove the cells in the future month
- int deleteFromIndex = (rowsInPrevMonthEarlier + KNumOfVisibleRows) * KCalenDaysInWeek;
- int numOfIndices = rowsInFutMonthEarlier * KCalenDaysInWeek;
- int count = mModel->rowCount();
+ int rowsInPrevMonth = mView->rowsInPrevMonth();
+ int countToBeAdded = rowsInPrevMonth * KCalenDaysInWeek;
+
+ // Since till now, we had blocked signals being generated frm the model
+ // view will be unaware of the items that we added. Hence, inform the view
+ // explicitly in one shot
+ QModelIndex leftIndex = mModel->index(0, 0);
+ QModelIndex rightIndex = mModel->index(countToBeAdded-1, 0);
+ dataChanged(leftIndex, rightIndex);
+
+ // Now remove the necessary items frm the model
+ mModel->removeRows(deleteFromIndex+countToBeAdded, numOfIndices);
+ mIsAtomicScroll = true;
+ int itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
+ QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ scrollTo(indexToBeScrolled);
- count = mModel->rowCount();
+ // Scroll to proper index
+ itemToBeScrolled = ((rowsInPrevMonth + KNumOfVisibleRows) *
+ KCalenDaysInWeek) - 1;
+ indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ mIsAtomicScroll = true;
+ scrollTo(indexToBeScrolled);
+ // Update the mCurrentRow
+ mCurrentRow += countToBeAdded;
+ // Update the sart position of the content widget
+ mStartPos = mContentWidget->pos();
+}
+
+/*!
+ Helper function that prepends the required rows to the model
+ */
+void CalenMonthGrid::handlePrependingRows(QList<CalenMonthData > &monthDataList)
+{
+ QDateTime currDate = mView->getCurrentDay();
+ QDateTime currDateTime = CalenDateUtils::beginningOfDay( currDate );
+ int rowsInPrevMonth = mView->rowsInPrevMonth();
// Add the new days
int countToBeAdded = rowsInPrevMonth * KCalenDaysInWeek;
mModel->insertRows(0, countToBeAdded);
- count = mModel->rowCount();
-
- // Get the default text color to be set
- QColor textColor = HbColorScheme::color("qtc_cal_month_notactive_dates");
- HbExtendedLocale locale = HbExtendedLocale::system();
for (int i = 0; i < countToBeAdded; i++) {
QDateTime dateTime = monthDataList[i].Day();
// Get the localised string for the day
- QString date = locale.toString(dateTime.date().day());
QModelIndex currentIndex = mModel->index(i, 0);
// Create the variant list to contain the date to depict a grid item
@@ -374,14 +633,14 @@
// NOTE: Add the data in the order mentioned in the
// CalendarNamespace::DataRole enum. Dont change the order.
- itemData << date;
+ itemData << mLocalisedDates.at(dateTime.date().day()-1);;
- // Diable the focus role
- itemData << QString("");
+ // Disable the focus role
+ itemData << false;
// Check for current day
if (currDateTime == CalenDateUtils::beginningOfDay( dateTime )) {
- // Set the underline icon
+ // Set the underline icon attribute
itemData << true;
} else {
itemData << false;
@@ -389,39 +648,18 @@
// Update the event indicators
if (monthDataList[i].HasEvents()) {
- // Set the event indicator icon
- itemData << QString("qtg_graf_cal_event_ind");
+ // Set the event indicator attribute
+ itemData << true;
} else {
- itemData << QString("");
+ itemData << false;
}
// Add default text color
-
- itemData << textColor;
+ itemData << false;
// Set the data to model
mModel->itemFromIndex(currentIndex)->setData(itemData);
}
-
- // Update the mCurrentRow
- mCurrentRow += countToBeAdded;
- // Scroll to proper index
- int itemToBeScrolled = ((rowsInPrevMonth + KNumOfVisibleRows) *
- KCalenDaysInWeek) - 1;
- QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
- QMap<int, QVariant> data;
- data = mModel->itemData(indexToBeScrolled);
- QVariant value = data.value(Qt::DisplayRole);
- int date = value.toInt();
- mIsAtomicScroll = true;
- scrollTo(indexToBeScrolled);
-
- // Now remove the necessary items frm the model
- mModel->removeRows(deleteFromIndex+countToBeAdded, numOfIndices);
- mIsAtomicScroll = true;
- itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
- indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
- scrollTo(indexToBeScrolled);
}
/*!
@@ -430,9 +668,19 @@
*/
void CalenMonthGrid::appendRows()
{
+ // Before we do anything, set the focus to proper date
+ // Set it only when non active day was focussed. When inactive day
+ // was focussed, we need to focus the same day
+ if (!mIsNonActiveDayFocused) {
+ setFocusToProperDay();
+ }
+
+ // Block the signals generated by model, this is being done as
+ // we want to avoid the overload of view listening to signals
+ mModel->blockSignals(true);
+
mIsNonActiveDayFocused = false;
- QDateTime currDate = mView->getCurrentDay();
- QDateTime currDateTime = CalenDateUtils::beginningOfDay( currDate );
+
int rowsInFutMonth = mView->rowsInFutMonth();
int rowsInPrevMonth = mView->rowsInPrevMonth();
// remove the cells in the previous month
@@ -442,40 +690,80 @@
mView->updateModelWithFutureMonth();
QList<CalenMonthData > monthDataList = mView->monthDataList();
mMonthDataArray = monthDataList;
- // Get the updated rows to be inserted
+
+ // Get the model count before we add any rows into the mode
+ int rowCount = mModel->rowCount();
+ // Append the required rows
+ handleAppendingRows(monthDataList);
+
+ // Since, we have finished setData, Now unblock the signals
+ mModel->blockSignals(false);
+
+ // Since till now, we had blocked signals being generated frm the mode
+ // view will be unaware of the items that we added. Hence, inform the view
+ // explicitly in one shot
+ QModelIndex leftIndex = mModel->index(rowCount-1, 0);
+ QModelIndex rightIndex = mModel->index(mModel->rowCount()-1, 0);
+ dataChanged(leftIndex, rightIndex);
+
+ // Update the mCurrentRow
+ mCurrentRow -= (countToBeDeleted);
+ for (int i = 0; i < countToBeDeleted; i++) {
+ mModel->removeRow(0);
+ }
+
+ mIsAtomicScroll = true;
+
+ rowsInFutMonth = mView->rowsInFutMonth();
rowsInPrevMonth = mView->rowsInPrevMonth();
- rowsInFutMonth = mView->rowsInFutMonth();
+
+ // Calculate the proper index to be scrolled to
+ int itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
+ QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ scrollTo(indexToBeScrolled);
+
+ itemToBeScrolled = ((rowsInPrevMonth + KNumOfVisibleRows) *
+ KCalenDaysInWeek) - 1;
+ indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
+ mIsAtomicScroll = true;
+ scrollTo(indexToBeScrolled);
+
+ // Update the sart position of the content widget
+ mStartPos = mContentWidget->pos();
+}
+
+/*!
+ Helper function that appends the required rows to the model
+ */
+void CalenMonthGrid::handleAppendingRows(QList<CalenMonthData > &monthDataList)
+{
+ QDateTime currDate = mView->getCurrentDay();
+ QDateTime currDateTime = CalenDateUtils::beginningOfDay( currDate );
+ int rowsInFutMonth = mView->rowsInFutMonth();
int countToBeAdded = rowsInFutMonth * KCalenDaysInWeek;
int lastVisibleIndex = monthDataList.count() - countToBeAdded;
int rowCount = mModel->rowCount();
mModel->insertRows(rowCount, countToBeAdded);
- // Get the default text color to be set
- QColor textColor = HbColorScheme::color("qtc_cal_month_notactive_dates");
for (int i = 0; i < countToBeAdded; i++) {
- QMap<int, QVariant> data;
QModelIndex currentIndex = mModel->index(rowCount + i, 0);
QDateTime dateTime = monthDataList[lastVisibleIndex + i].Day();
- HbExtendedLocale locale = HbExtendedLocale::system();
- // Get the localised string for the day
- QString date = locale.toString(dateTime.date().day());
- data.insert(CalendarNamespace::CalendarMonthDayRole, date);
// Create the variant list to contain the date to depict a grid item
QVariantList itemData;
// NOTE: Add the data in the order mentioned in the
// CalendarNamespace::DataRole enum. Dont change the order.
- itemData << date;
+ itemData << mLocalisedDates.at(dateTime.date().day()-1);;
// Disable the focus role
- itemData << QString("");
+ itemData << false;
// Check for current day
if (currDateTime == CalenDateUtils::beginningOfDay( dateTime )) {
- // Set the underline icon
+ // Set the underline icon attribute
itemData << true;
} else {
itemData << false;
@@ -483,30 +771,18 @@
// Update the event indicators
if (monthDataList[lastVisibleIndex + i].HasEvents()) {
- // Set the underline icon
- itemData << QString("qtg_graf_cal_event_ind");
+ // Set the event indicator attribute
+ itemData << true;
} else {
- itemData << QString("");
+ itemData << false;
}
// Add default text color
- itemData << textColor;
+ itemData << false;
// Set the data to model
mModel->itemFromIndex(currentIndex)->setData(itemData);
}
-
- // Update the mCurrentRow
- mCurrentRow -= (countToBeDeleted);
- for (int i = 0; i < countToBeDeleted; i++) {
- mModel->removeRow(0);
- }
- mIsAtomicScroll = true;
-
- // Calculate the proper index to be scrolled to
- int itemToBeScrolled = rowsInPrevMonth * KCalenDaysInWeek;
- QModelIndex indexToBeScrolled = mModel->index(itemToBeScrolled, 0);
- scrollTo(indexToBeScrolled);
}
/*!
@@ -521,14 +797,18 @@
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, QString(""));
+ list.replace(CalendarNamespace::CalendarMonthFocusRole, false);
mModel->itemFromIndex(itemIndex)->setData(list);
// Inform view to update the context and preview panes
@@ -537,7 +817,7 @@
itemData = itemIndex.data(Qt::UserRole + 1);
list = itemData.toList();
list.replace(CalendarNamespace::CalendarMonthFocusRole,
- QString("qtg_fr_cal_focused_day_ind"));
+ true);
mModel->itemFromIndex(itemIndex)->setData(list);
// Check if inactive date is tapped
QDateTime activeMonth = mView->getActiveDay();
@@ -547,17 +827,19 @@
mIsNonActiveDayFocused = true;
mNonActiveFocusedDay = mMonthDataArray[mCurrentRow].Day();
- // Get the current active month
- QDateTime activeMonth = mView->getActiveDay();
- // Add one month to it
+ // Add one month to active month
activeMonth = activeMonth.addMonths(1);
if (activeMonth.date().month() ==
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());
}
}
mView->setContextForActiveDay(index.row());
@@ -588,7 +870,7 @@
QModelIndex index = mModel->index(mCurrentRow,0);
QVariant itemData = index.data(Qt::UserRole + 1);
QVariantList list = itemData.toList();
- list.replace(CalendarNamespace::CalendarMonthFocusRole, QString(""));
+ list.replace(CalendarNamespace::CalendarMonthFocusRole, false);
mModel->itemFromIndex(index)->setData(list);
// Search for this date in the model
@@ -598,7 +880,7 @@
itemData = index.data(Qt::UserRole + 1);
list = itemData.toList();
list.replace(CalendarNamespace::CalendarMonthFocusRole,
- QString("qtg_fr_cal_focused_day_ind"));
+ true);
mModel->itemFromIndex(index)->setData(list);
mCurrentRow = i;
mView->setContextForActiveDay(i);
@@ -635,15 +917,12 @@
end = firstDateInGrid.daysTo(endOfActiveMonth);
// Set the active text color
- QColor textColor = HbColorScheme::color("qtc_cal_month_active_dates");
- if (textColor.isValid()) {
- for (int i = start; i < end; i++) {
- QModelIndex index = mModel->index(i,0);
- QVariant itemData = index.data(Qt::UserRole + 1);
- QVariantList list = itemData.toList();
- list.replace(CalendarNamespace::CalendarMonthTextColorRole, textColor);
- mModel->itemFromIndex(index)->setData(list);
- }
+ for (int i = start; i < end; i++) {
+ QModelIndex index = mModel->index(i,0);
+ QVariant itemData = index.data(Qt::UserRole + 1);
+ QVariantList list = itemData.toList();
+ list.replace(CalendarNamespace::CalendarMonthTextColorRole, true);
+ mModel->itemFromIndex(index)->setData(list);
}
// Now set the inactive text color to those which were active before the swipe
@@ -683,15 +962,12 @@
}
// Set the inactive text color
- textColor = HbColorScheme::color("qtc_cal_month_notactive_dates");
- if (textColor.isValid()) {
- for (int i = start; i < end; i++) {
- QModelIndex index = mModel->index(i,0);
- QVariant itemData = index.data(Qt::UserRole + 1);
- QVariantList list = itemData.toList();
- list.replace(CalendarNamespace::CalendarMonthTextColorRole, textColor);
- mModel->itemFromIndex(index)->setData(list);
- }
+ for (int i = start; i < end; i++) {
+ QModelIndex index = mModel->index(i,0);
+ QVariant itemData = index.data(Qt::UserRole + 1);
+ QVariantList list = itemData.toList();
+ list.replace(CalendarNamespace::CalendarMonthTextColorRole, false);
+ mModel->itemFromIndex(index)->setData(list);
}
}
@@ -719,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);
+ }
}
/*!
@@ -730,29 +1029,51 @@
{
Q_UNUSED(option);
Q_UNUSED(widget);
+ painter->setRenderHint(QPainter::NonCosmeticDefaultPen);
// 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
qreal contentHeight = mContentWidget->size().height();
qreal contentWidth = mContentWidget->size().width();
+ qreal rowWidth = 0.0;
+ int numOfRows = 0;
+ QPointF startPoint = mContentWidget->pos();
- // Get the num of rows
- int numOfRows = mModel->rowCount() / KCalenDaysInWeek;
- // Draw horizontal lines
- qreal rowWidth = contentHeight / numOfRows;
+ // NOTE!!!: There is a filcker when we blindly draw equally spaced lines
+ // on complete content widget when scrolling is finished. This happens only
+ // when content widget size is changed due to the change in total number
+ // of rows when we append or prepend rows. Hence, to avoid this, we draw
+ // lines on complete content widget only when it is scrolling.
+ // That means, as soon as scrolling is finished, we will end up drawing
+ // only 6 lines that are visible to the user.
+ if (mDirection == invalid) {
+ // Start point is left most point on the screen
+ startPoint = QPointF(0,0);
+ rowWidth = size().height() / KNumOfVisibleRows;
+ numOfRows = KNumOfVisibleRows;
+ } else {
+ // Get the num of rows
+ numOfRows = mModel->rowCount() / KCalenDaysInWeek;
+ // Draw horizontal lines
+ rowWidth = contentHeight / numOfRows;
+ }
- QPointF startPoint = mContentWidget->pos();
QPointF endPoint(startPoint.x() + contentWidth,
startPoint.y());
@@ -780,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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calenmonthview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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,23 +65,26 @@
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;
mIsPrevPaneGesture = false;
+ // Get the week day color from the theme
+ mWeekDaysColor = HbColorScheme::color("qtc_cal_week_day");
}
/*!
@@ -100,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);
}
@@ -131,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
@@ -209,22 +203,51 @@
mMonthGrid->setView(this);
+
+
+ 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);
+
+}
+
+/*!
+ Constructs the remaining part of the month view that was kept as
+ part if lazy loading
+ */
+void CalenMonthView::doLazyLoading()
+{
+ // Add background items to all the widgets
+ addBackgroundFrame();
+
+ // Construct and add the previous month and next month items to the view
+ mMonthGrid->updateMonthGridWithInActiveMonths(mMonthDataArray);
+
+ // Check if regional information needs to be shown
+ // and add it or remove it
+ showHideRegionalInformation();
+
// Connect to the menu actions
HbAction
- *newEventAction =
- qobject_cast<HbAction *> (
+ *newEventAction =
+ qobject_cast<HbAction *> (
mDocLoader->findObject(CALEN_MONTVIEW_MENU_NEWEVENT));
connect(newEventAction, SIGNAL(triggered()), this, SLOT(createEditor()));
mGoToTodayAction =
- qobject_cast<HbAction *> (
+ qobject_cast<HbAction *> (
mDocLoader->findObject(CALEN_MONTVIEW_MENU_GOTOTODAY));
connect(mGoToTodayAction, SIGNAL(triggered()), this, SLOT(goToToday()));
HbAction
- *goToDateAction =
- qobject_cast<HbAction *> (
+ *goToDateAction =
+ qobject_cast<HbAction *> (
mDocLoader->findObject(CALEN_MONTVIEW_MENU_GOTODATE));
connect(goToDateAction, SIGNAL(triggered()), this, SLOT(goToDate()));
@@ -269,12 +292,7 @@
// Connect to the signal when options menu is shown
// This is required to add/remove dynamically some options
connect(menu(), SIGNAL(aboutToShow ()), this,
- SLOT(addRemoveActionsInMenu()));
-
- mIsFirstTimeLoad = true;
-
- // Add background items to all the widgets
- addBackgroundFrame();
+ SLOT(addRemoveActionsInMenu()));
}
/*!
@@ -303,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();
@@ -392,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;
- }
- }
+ }
}
/*!
@@ -529,29 +569,20 @@
long weekNumber(day.date().weekNumber());
mWeekNumbers.append(weekNumber);
}
-
- // Get the week day color from the theme
- QColor weekDayColor = HbColorScheme::color("qtc_cal_week_day");
// Update the week labels text
QString text = QString::number(mWeekNumbers.at(0));
mFirstWeekLabel->setPlainText(text);
- mFirstWeekLabel->setTextColor(weekDayColor);
text = QString::number(mWeekNumbers.at(1));
mSecondWeekLabel->setPlainText(text);
- mSecondWeekLabel->setTextColor(weekDayColor);
text = QString::number(mWeekNumbers.at(2));
mThirdWeekLabel->setPlainText(text);
- mThirdWeekLabel->setTextColor(weekDayColor);
text = QString::number(mWeekNumbers.at(3));
mFourthWeekLabel->setPlainText(text);
- mFourthWeekLabel->setTextColor(weekDayColor);
text = QString::number(mWeekNumbers.at(4));
mFifthWeekLabel->setPlainText(text);
- mFifthWeekLabel->setTextColor(weekDayColor);
text = QString::number(mWeekNumbers.at(5));
mSixthWeekLabel->setPlainText(text);
- mSixthWeekLabel->setTextColor(weekDayColor);
}
/*!
@@ -560,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();
}
/*
@@ -610,38 +643,62 @@
*/
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);
}
- mIsFirstTimeLoad = false;
+
// prepare for the population like reading the date frm the context
// calculating the start of the grid etc.,
prepareForPopulation();
-
- // fetch list of required calendar instances
- populateWithInstanceView();
-
- populatePreviewPane(mDate);
-
- // Create the grid items with proper dates
+
+ // Populate the view and preview panes only if we are not opening the calendar
+ if (!mIsFirstTimeLoad) {
+ // fetch list of required calendar instances
+ populateWithInstanceView();
+ // Populate the preview panes
+ populatePreviewPane(mDate);
+ }
+
+
+ //update the day label
+ //if changes in locale setting
+ updateDayLabel();
+
+ // Create the grid items with proper dates
createGrid();
- // Check if regional information needs to be shown
- // and add it or remove it
- showHideRegionalInformation();
// 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) {
+ showHideRegionalInformation();
+ }
+ // Reset the first time load flag
+ mIsFirstTimeLoad = false;
}
/*!
@@ -651,6 +708,7 @@
{
setActiveDay(dateFromContext(mServices.Context()));
setDate();
+ updateMonthDataArrayWithActiveDates();
}
/*!
@@ -658,18 +716,19 @@
*/
void CalenMonthView::refreshViewOnGoToDate()
{
- setActiveDay(dateFromContext(mServices.Context()));
- setDate();
+ prepareForPopulation();
setDateToLabel();
// fetch list of required calendar instances
populateWithInstanceView();
populatePreviewPane(mDate);
- mMonthGrid->updateMonthGridModel(mMonthDataArray, mIndexToBeScrolled);
-
- // Start the auto scroll on current preview pane
- mCurrPreviewPane->startAutoScroll();
+ mMonthGrid->updateMonthGridModel(mMonthDataArray, mIndexToBeScrolled,
+ mIsFirstTimeLoad);
+ // Update the week Numbers model
+ if (mIsWeekNumbersShown) {
+ updateWeekNumGridModel();
+ }
}
/*!
@@ -680,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;
}
@@ -708,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) {
@@ -804,11 +861,22 @@
void CalenMonthView::createGrid()
{
// Update the month grid
- mMonthGrid->updateMonthGridModel(mMonthDataArray, mIndexToBeScrolled);
-
- // Read the week number setting from cenrep
- QVariant value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
- mIsWeekNumbersShown = value.toUInt();
+ mMonthGrid->updateMonthGridModel(mMonthDataArray, mIndexToBeScrolled,
+ mIsFirstTimeLoad);
+ // 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();
@@ -905,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) {
@@ -1002,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);
@@ -1016,7 +1085,7 @@
/*!
Fetches the calenda entries for a given range
*/
-void CalenMonthView::getInstanceList(QList<AgendaEntry> &list,
+void CalenMonthView::getInstanceList(QList<QDate> &list,
QDateTime rangeStart, QDateTime rangeEnd)
{
AgendaUtil::FilterFlags filter =
@@ -1025,7 +1094,7 @@
| AgendaUtil::IncludeEvents
| AgendaUtil::IncludeReminders
| AgendaUtil::IncludeIncompletedTodos);
- list = mAgendaUtil->fetchEntriesInRange(rangeStart, rangeEnd, filter);
+ mAgendaUtil->markDatesWithEvents(rangeStart, rangeEnd, filter, list);
}
/*!
@@ -1040,21 +1109,14 @@
const int todayIndex(gridStart.daysTo(today));
QDateTime gridEnd(mLastDayOfGrid.date(), QTime(23, 59, 59, 0));
- QList<AgendaEntry> list;
-
- AgendaUtil::FilterFlags filter =
- AgendaUtil::FilterFlags(AgendaUtil::IncludeAnniversaries
- | AgendaUtil::IncludeAppointments
- | AgendaUtil::IncludeEvents
- | AgendaUtil::IncludeReminders
- | AgendaUtil::IncludeIncompletedTodos);
// Get the list of dates which have events
QList<QDate> datesWithEvents;
- mAgendaUtil->markDatesWithEvents(gridStart,gridEnd,filter,datesWithEvents);
+ 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);
}
@@ -1068,7 +1130,6 @@
*/
void CalenMonthView::populatePrevMonth()
{
- QList<AgendaEntry> list;
const QDateTime gridStart(CalenDateUtils::beginningOfDay(mFirstDayOfGrid));
const QDateTime today(CalenDateUtils::today());
@@ -1077,23 +1138,16 @@
QDateTime gridEnd(end.date(), QTime(23, 59, 59, 0));
- AgendaUtil::FilterFlags filter =
- AgendaUtil::FilterFlags(AgendaUtil::IncludeAnniversaries
- | AgendaUtil::IncludeAppointments
- | AgendaUtil::IncludeEvents
- | AgendaUtil::IncludeReminders
- | AgendaUtil::IncludeIncompletedTodos);
-
// Get the list of dates which have events
QList<QDate> datesWithEvents;
- mAgendaUtil->markDatesWithEvents(gridStart,gridEnd,filter,datesWithEvents);
+ 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);
}
-
datesWithEvents.clear();
}
@@ -1112,27 +1166,31 @@
const int todayIndex(gridStart.daysTo(today)); // grid index for "today"
QDateTime gridEnd(mLastDayOfGrid.date(), QTime(23, 59, 59, 0));
-
- AgendaUtil::FilterFlags filter =
- AgendaUtil::FilterFlags(AgendaUtil::IncludeAnniversaries
- | AgendaUtil::IncludeAppointments
- | AgendaUtil::IncludeEvents
- | AgendaUtil::IncludeReminders
- | AgendaUtil::IncludeIncompletedTodos);
-
// Get the list of dates which have events
QList<QDate> datesWithEvents;
- mAgendaUtil->markDatesWithEvents(gridStart,gridEnd,filter,datesWithEvents);
+ 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);
}
-
+ datesWithEvents.clear();
+}
-
- datesWithEvents.clear();
+/*!
+ Function that gets called when instacne view is created, so that it can
+ query agenda server for any entries
+ */
+void CalenMonthView::fetchEntriesAndUpdateModel()
+{
+ // Get to know if entries are there from the agenda server
+ populateWithInstanceView();
+ // Update the month grid model
+ mMonthGrid->updateMonthGridWithEventIndicators(mMonthDataArray);
+ // Populate the preview panes
+ populatePreviewPane(mDate);
}
/*!
@@ -1143,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();
}
/*!
@@ -1163,43 +1224,18 @@
}
/*!
- Handles the long press on a grid item
- */
-void CalenMonthView::handleGridItemLongPressed(int index, QPointF &coords)
-{
- QDateTime newActiveDay = CalenDateUtils::futureOf(mFirstDayOfGrid, index);
-
- // set the context
- mServices.Context().setFocusDateL(newActiveDay, KCalenMonthViewUidValue);
-
- HbMenu *contextMenu = new HbMenu(this);
-
- connect(contextMenu->addAction(hbTrId("txt_common_menu_open")), SIGNAL( triggered() ), this,
- SLOT( launchDayView()));
- // TODO: Add the text id
- connect(contextMenu->addAction("New Todo"), SIGNAL( triggered() ), this,
- SLOT( createEditor()));
-
- // Show context sensitive menu.
- // Param const QPointF& coordinate - is a longpress position.
- contextMenu->exec(coords);
-}
-
-/*!
Sets the context w.r.t to the active day
*/
void CalenMonthView::setContextForActiveDay(int index)
{
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;
@@ -1216,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;
+ }
}
/*!
@@ -1228,13 +1271,11 @@
*/
void CalenMonthView::changeOrientation(Qt::Orientation orientation)
{
- if (this == mServices.MainWindow().currentView()) {
if (mOrientation != orientation) {
// change the orientation here
mOrientation = orientation;
handleChangeOrientation();
}
- }
}
/*!
@@ -1260,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);
}
}
@@ -1439,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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calennativeview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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);
}
/*!
@@ -95,27 +99,28 @@
*/
void CalenNativeView::goToDate()
{
- // Get the current date.
- QDateTime currentDateTime = CalenDateUtils::today();
- QDate currentDate = currentDateTime.date();
- mDatePicker = new HbDateTimePicker(currentDate, this);
-
+ // Create a popup with datepicker for the user to select date.
+ HbDialog *popUp = new HbDialog();
+ popUp->setDismissPolicy(HbDialog::NoDismiss);
+ popUp->setTimeout(HbDialog::NoTimeout);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
+ popUp->setHeadingWidget(new HbLabel(hbTrId("txt_calendar_opt_go_to_date")));
+
+ if(mDatePicker) {
+ mDatePicker = NULL;
+ }
+ mDatePicker = new HbDateTimePicker(QDate::currentDate(), popUp);
// Set the date range.
mDatePicker->setMinimumDate(CalenDateUtils::minTime().date());
mDatePicker->setMaximumDate(CalenDateUtils::maxTime().date());
-
- // Create a popup with datepicker for the user to select date.
- HbDialog popUp;
- popUp.setDismissPolicy(HbDialog::NoDismiss);
- popUp.setTimeout(HbDialog::NoTimeout);
- popUp.setHeadingWidget(new HbLabel(hbTrId("txt_calendar_opt_go_to_date")));
- popUp.setContentWidget(mDatePicker);
+ mDatePicker->setDate(QDate::currentDate());
+
+ popUp->setContentWidget(mDatePicker);
HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
- popUp.setPrimaryAction(okAction);
+ popUp->addAction(okAction);
connect(okAction, SIGNAL(triggered()), this, SLOT(goToSelectedDate()));
- connect(okAction, SIGNAL(triggered()), &popUp, SLOT(close()));
- popUp.setSecondaryAction(new HbAction(hbTrId("txt_common_button_cancel"), &popUp));
- popUp.exec();
+ popUp->addAction(new HbAction(hbTrId("txt_common_button_cancel"), popUp));
+ popUp->open();
}
/*
@@ -130,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();
}
@@ -202,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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calenpluginlabel.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calenpreviewpane.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calensettingsview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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::BackAction);
- setNavigationAction(mSoftKeyAction);
- connect(mSoftKeyAction, SIGNAL(triggered()),
+ mSoftKeyAction = new HbAction(Hb::BackNaviAction);
+ 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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/src/calenthicklinesdrawer.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/views/views.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clock.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockengines/clockserver/server/src/clockserver.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockengines/clockserver/server/src/clockserverimpl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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 &)
-
--- a/clock/clockmw/bwins/clocksettingsutilityu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-EXPORTS
- ?timeFormat@SettingsUtility@@QAEHAAVQStringList@@@Z @ 1 NONAME ; int SettingsUtility::timeFormat(class QStringList &)
- ?setSnoozeTime@SettingsUtility@@QAEXH@Z @ 2 NONAME ; void SettingsUtility::setSnoozeTime(int)
- ?setDateFormat@SettingsUtility@@QAEXABVQString@@@Z @ 3 NONAME ; void SettingsUtility::setDateFormat(class QString const &)
- ?time@SettingsUtility@@QAE?AVQString@@XZ @ 4 NONAME ; class QString SettingsUtility::time(void)
- ?staticMetaObject@SettingsUtility@@2UQMetaObject@@B @ 5 NONAME ; struct QMetaObject const SettingsUtility::staticMetaObject
- ?clockType@SettingsUtility@@QAEHAAVQStringList@@@Z @ 6 NONAME ; int SettingsUtility::clockType(class QStringList &)
- ?setDateSeparator@SettingsUtility@@QAEXABVQString@@@Z @ 7 NONAME ; void SettingsUtility::setDateSeparator(class QString const &)
- ?autoUpdate@SettingsUtility@@QAEHAAVQStringList@@@Z @ 8 NONAME ; int SettingsUtility::autoUpdate(class QStringList &)
- ?dateSeparator@SettingsUtility@@QAEHAAVQStringList@@@Z @ 9 NONAME ; int SettingsUtility::dateSeparator(class QStringList &)
- ?setTimeZone@SettingsUtility@@QAEXABVQString@@@Z @ 10 NONAME ; void SettingsUtility::setTimeZone(class QString const &)
- ?setAutoUpdate@SettingsUtility@@QAEXABVQString@@@Z @ 11 NONAME ; void SettingsUtility::setAutoUpdate(class QString const &)
- ?setTime@SettingsUtility@@QAEXABVQString@@@Z @ 12 NONAME ; void SettingsUtility::setTime(class QString const &)
- ??_ESettingsUtility@@UAE@I@Z @ 13 NONAME ; SettingsUtility::~SettingsUtility(unsigned int)
- ??0SettingsUtility@@QAE@PAVQObject@@@Z @ 14 NONAME ; SettingsUtility::SettingsUtility(class QObject *)
- ?qt_metacall@SettingsUtility@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 15 NONAME ; int SettingsUtility::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?setClockType@SettingsUtility@@QAEXABVQString@@@Z @ 16 NONAME ; void SettingsUtility::setClockType(class QString const &)
- ?setTimeFormat@SettingsUtility@@QAEXABVQString@@@Z @ 17 NONAME ; void SettingsUtility::setTimeFormat(class QString const &)
- ?settingsChanged@SettingsUtility@@IAEXW4SettingsItemChanged@@VQString@@@Z @ 18 NONAME ; void SettingsUtility::settingsChanged(enum SettingsItemChanged, class QString)
- ?timeFormatString@SettingsUtility@@QAE?AVQString@@XZ @ 19 NONAME ; class QString SettingsUtility::timeFormatString(void)
- ?tr@SettingsUtility@@SA?AVQString@@PBD0H@Z @ 20 NONAME ; class QString SettingsUtility::tr(char const *, char const *, int)
- ?setStartOfWeek@SettingsUtility@@QAEXH@Z @ 21 NONAME ; void SettingsUtility::setStartOfWeek(int)
- ?getStaticMetaObject@SettingsUtility@@SAABUQMetaObject@@XZ @ 22 NONAME ; struct QMetaObject const & SettingsUtility::getStaticMetaObject(void)
- ?workdays@SettingsUtility@@QAEHAAVQStringList@@@Z @ 23 NONAME ; int SettingsUtility::workdays(class QStringList &)
- ?date@SettingsUtility@@QAE?AVQString@@XZ @ 24 NONAME ; class QString SettingsUtility::date(void)
- ?dateFormat@SettingsUtility@@QAEHAAVQStringList@@@Z @ 25 NONAME ; int SettingsUtility::dateFormat(class QStringList &)
- ?setTimeSeparator@SettingsUtility@@QAEXABVQString@@@Z @ 26 NONAME ; void SettingsUtility::setTimeSeparator(class QString const &)
- ?qt_metacast@SettingsUtility@@UAEPAXPBD@Z @ 27 NONAME ; void * SettingsUtility::qt_metacast(char const *)
- ?snoozeTime@SettingsUtility@@QAEHAAVQStringList@@@Z @ 28 NONAME ; int SettingsUtility::snoozeTime(class QStringList &)
- ?setWorkdays@SettingsUtility@@QAEXABVQString@@@Z @ 29 NONAME ; void SettingsUtility::setWorkdays(class QString const &)
- ?dateFormatString@SettingsUtility@@QAE?AVQString@@XZ @ 30 NONAME ; class QString SettingsUtility::dateFormatString(void)
- ?metaObject@SettingsUtility@@UBEPBUQMetaObject@@XZ @ 31 NONAME ; struct QMetaObject const * SettingsUtility::metaObject(void) const
- ?timeZone@SettingsUtility@@QAE?AVQString@@XZ @ 32 NONAME ; class QString SettingsUtility::timeZone(void)
- ?timeSeparator@SettingsUtility@@QAEHAAVQStringList@@@Z @ 33 NONAME ; int SettingsUtility::timeSeparator(class QStringList &)
- ??1SettingsUtility@@UAE@XZ @ 34 NONAME ; SettingsUtility::~SettingsUtility(void)
- ?trUtf8@SettingsUtility@@SA?AVQString@@PBD0@Z @ 35 NONAME ; class QString SettingsUtility::trUtf8(char const *, char const *)
- ?tr@SettingsUtility@@SA?AVQString@@PBD0@Z @ 36 NONAME ; class QString SettingsUtility::tr(char const *, char const *)
- ?trUtf8@SettingsUtility@@SA?AVQString@@PBD0H@Z @ 37 NONAME ; class QString SettingsUtility::trUtf8(char const *, char const *, int)
- ?setDate@SettingsUtility@@QAEXABVQString@@@Z @ 38 NONAME ; void SettingsUtility::setDate(class QString const &)
-
--- a/clock/clockmw/bwins/clockstopwatchengineu.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,45 +0,0 @@
-EXPORTS
- ??_ETimezoneClient@@UAE@I@Z @ 1 NONAME ; TimezoneClient::~TimezoneClient(unsigned int)
- ?locationSelectorModel@TimezoneClient@@QAEPAVQStandardItemModel@@XZ @ 2 NONAME ; class QStandardItemModel * TimezoneClient::locationSelectorModel(void)
- ?getUtcDstOffsetL@TimezoneClient@@QAE_NAAHABVCTzId@@@Z @ 3 NONAME ; bool TimezoneClient::getUtcDstOffsetL(int &, class CTzId const &)
- ?getLocations@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@XZ @ 4 NONAME ; class QList<struct LocationInfo> TimezoneClient::getLocations(void)
- ?getCityOffsetByNameAndId@TimezoneClient@@QAEHABVQString@@H@Z @ 5 NONAME ; int TimezoneClient::getCityOffsetByNameAndId(class QString const &, int)
- ?intToMonth@TimezoneClient@@AAE?AW4TMonth@@H@Z @ 6 NONAME ; enum TMonth TimezoneClient::intToMonth(int)
- ?getDstZoneOffset@TimezoneClient@@AAEHH@Z @ 7 NONAME ; int TimezoneClient::getDstZoneOffset(int)
- ?environmentCallback@TimezoneClient@@SAHPAX@Z @ 8 NONAME ; int TimezoneClient::environmentCallback(void *)
- ?trUtf8@TimezoneClient@@SA?AVQString@@PBD0H@Z @ 9 NONAME ; class QString TimezoneClient::trUtf8(char const *, char const *, int)
- ?getStandardOffset@TimezoneClient@@QAEHH@Z @ 10 NONAME ; int TimezoneClient::getStandardOffset(int)
- ?getCurrentZoneInfoL@TimezoneClient@@QAE?AULocationInfo@@XZ @ 11 NONAME ; struct LocationInfo TimezoneClient::getCurrentZoneInfoL(void)
- ?createWorldClockModel@TimezoneClient@@QAEXXZ @ 12 NONAME ; void TimezoneClient::createWorldClockModel(void)
- ?dstOn@TimezoneClient@@QAE_NH@Z @ 13 NONAME ; bool TimezoneClient::dstOn(int)
- ?tr@TimezoneClient@@SA?AVQString@@PBD0H@Z @ 14 NONAME ; class QString TimezoneClient::tr(char const *, char const *, int)
- ?setAsCurrentLocationL@TimezoneClient@@QAEXAAULocationInfo@@@Z @ 15 NONAME ; void TimezoneClient::setAsCurrentLocationL(struct LocationInfo &)
- ?timeUpdateOn@TimezoneClient@@QAE_NXZ @ 16 NONAME ; bool TimezoneClient::timeUpdateOn(void)
- ?staticMetaObject@TimezoneClient@@2UQMetaObject@@B @ 17 NONAME ; struct QMetaObject const TimezoneClient::staticMetaObject
- ?qt_metacast@TimezoneClient@@UAEPAXPBD@Z @ 18 NONAME ; void * TimezoneClient::qt_metacast(char const *)
- ?trUtf8@TimezoneClient@@SA?AVQString@@PBD0@Z @ 19 NONAME ; class QString TimezoneClient::trUtf8(char const *, char const *)
- ?getDstRulesL@TimezoneClient@@QAEXAAVQDateTime@@0H@Z @ 20 NONAME ; void TimezoneClient::getDstRulesL(class QDateTime &, class QDateTime &, int)
- ?getSavedLocations@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@XZ @ 21 NONAME ; class QList<struct LocationInfo> TimezoneClient::getSavedLocations(void)
- ?listUpdated@TimezoneClient@@IAEXXZ @ 22 NONAME ; void TimezoneClient::listUpdated(void)
- ?populateCities@TimezoneClient@@AAEXXZ @ 23 NONAME ; void TimezoneClient::populateCities(void)
- ?tr@TimezoneClient@@SA?AVQString@@PBD0@Z @ 24 NONAME ; class QString TimezoneClient::tr(char const *, char const *)
- ?getStaticMetaObject@TimezoneClient@@SAABUQMetaObject@@XZ @ 25 NONAME ; struct QMetaObject const & TimezoneClient::getStaticMetaObject(void)
- ?metaObject@TimezoneClient@@UBEPBUQMetaObject@@XZ @ 26 NONAME ; struct QMetaObject const * TimezoneClient::metaObject(void) const
- ?setDateTime@TimezoneClient@@QAEXVQDateTime@@@Z @ 27 NONAME ; void TimezoneClient::setDateTime(class QDateTime)
- ??0TimezoneClient@@QAE@PAVQObject@@@Z @ 28 NONAME ; TimezoneClient::TimezoneClient(class QObject *)
- ?setTimeUpdateOn@TimezoneClient@@QAEX_N@Z @ 29 NONAME ; void TimezoneClient::setTimeUpdateOn(bool)
- ?getCountries@TimezoneClient@@QAEXAAV?$QMap@VQString@@H@@@Z @ 30 NONAME ; void TimezoneClient::getCountries(class QMap<class QString, int> &)
- ?getCityGroupIdByName@TimezoneClient@@QAEHABVQString@@@Z @ 31 NONAME ; int TimezoneClient::getCityGroupIdByName(class QString const &)
- ?checkForDstChange@TimezoneClient@@QAE_NAAUAlarmInfo@@@Z @ 32 NONAME ; bool TimezoneClient::checkForDstChange(struct AlarmInfo &)
- ?getCitiesForCountry@TimezoneClient@@QAEXHAAV?$QMap@VQString@@H@@@Z @ 33 NONAME ; void TimezoneClient::getCitiesForCountry(int, class QMap<class QString, int> &)
- ?isDSTOnL@TimezoneClient@@QAE_NH@Z @ 34 NONAME ; bool TimezoneClient::isDSTOnL(int)
- ?timechanged@TimezoneClient@@IAEXXZ @ 35 NONAME ; void TimezoneClient::timechanged(void)
- ??1TimezoneClient@@UAE@XZ @ 36 NONAME ; TimezoneClient::~TimezoneClient(void)
- ?saveLocations@TimezoneClient@@QAEXABV?$QList@ULocationInfo@@@@@Z @ 37 NONAME ; void TimezoneClient::saveLocations(class QList<struct LocationInfo> const &)
- ?getLocationInfo@TimezoneClient@@QAEXHHAAULocationInfo@@@Z @ 38 NONAME ; void TimezoneClient::getLocationInfo(int, int, struct LocationInfo &)
- ?qt_metacall@TimezoneClient@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 39 NONAME ; int TimezoneClient::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?addCity@TimezoneClient@@QAE?AULocationInfo@@HAAVQString@@H@Z @ 40 NONAME ; struct LocationInfo TimezoneClient::addCity(int, class QString &, int)
- ?getAllTimeZoneOffsets@TimezoneClient@@QAE?AV?$QList@H@@XZ @ 41 NONAME ; class QList<int> TimezoneClient::getAllTimeZoneOffsets(void)
- ?getCountriesForUTCOffset@TimezoneClient@@QAE?AV?$QList@ULocationInfo@@@@H@Z @ 42 NONAME ; class QList<struct LocationInfo> TimezoneClient::getCountriesForUTCOffset(int)
- ?getAllTimeZoneIds@TimezoneClient@@QAE?AV?$QList@H@@XZ @ 43 NONAME ; class QList<int> TimezoneClient::getAllTimeZoneIds(void)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clockalarms/bwins/clockalarmclientu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
+
--- a/clock/clockmw/clockalarms/inc/alarmclient.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clockalarms/inc/alarmclient.h Mon Jun 28 15:22:02 2010 +0530
@@ -56,6 +56,7 @@
void getAlarmList(QList<AlarmInfo>& alarmList);
void setAlarm(AlarmInfo& alarmInfo);
void deleteAlarm(int alarmId);
+ int deleteSnoozedAlarm(int alarmId);
int getAlarmInfo(int alarmId, AlarmInfo& alarmInfo);
void toggleAlarmStatus(int alarmId, int alarmStatus);
--- a/clock/clockmw/clockalarms/src/alarmclient.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clockalarms/src/alarmclient.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -18,8 +18,6 @@
// System includes
#include <e32cmn.h>
-#include <QDebug>
-
// User includes
#include "alarmclient.h"
#include "alarmlistener.h"
@@ -34,18 +32,11 @@
AlarmClient::AlarmClient(QObject* parent)
:QObject(parent),
mListener(0)
-{
- qDebug("clock: AlarmClient::AlarmClient() -->");
-
+{
// Connect to the alarm server.
User::LeaveIfError(mAlarmSrvSession.Connect());
-
- qDebug("clock: AlarmClient::AlarmClient() - Connection done, looks ok.");
-
// Construct the listener, but do not start it.
mListener = new AlarmListener(this, mAlarmSrvSession);
-
- qDebug("clock: AlarmClient::AlarmClient() <--");
}
/*!
@@ -53,7 +44,6 @@
*/
AlarmClient::~AlarmClient()
{
- qDebug("clock: AlarmClient::~AlarmClient() -->");
if (mListener) {
mListener->stop();
@@ -61,8 +51,6 @@
mListener = 0;
}
mAlarmSrvSession.Close();
-
- qDebug("clock: AlarmClient::~AlarmClient() <--");
}
/*!
@@ -72,8 +60,6 @@
*/
void AlarmClient::getAlarmList(QList<AlarmInfo>& alarmList)
{
- qDebug() << "clock: AlarmClient::getAlarmList -->";
-
// This will hold the alarm ids returned from alarm server.
RArray<TAlarmId> alarmIdArray;
AlarmInfo alarmInfo;
@@ -135,8 +121,6 @@
}
// Cleanup.
alarmIdArray.Close();
-
- qDebug() << "clock: AlarmClient::getAlarmList <--";
}
/*!
@@ -144,8 +128,6 @@
*/
void AlarmClient::setAlarm(AlarmInfo& alarmInfo)
{
- qDebug() << "clock: AlarmClient::setAlarm -->";
-
// Get the current home time
TTime homeTime;
homeTime.HomeTime();
@@ -222,14 +204,10 @@
alarmInfo.alarmDateTime = alarmDate;
}
-
- qDebug() << "clock: AlarmClient::setAlarm <--";
}
void AlarmClient::setAlarmState(TAlarmState state, AlarmState& alarmState)
{
- qDebug() << "clock: AlarmClient::setAlarmState -->";
-
switch (state) {
case EAlarmStateInPreparation:
alarmState = InPreparation;
@@ -253,13 +231,10 @@
break;
}
- qDebug() << "clock: AlarmClient::setAlarmState <--";
}
void AlarmClient::setAlarmState(AlarmState state, TAlarmState& alarmState)
{
- qDebug() << "clock: AlarmClient::setAlarmState -->";
-
switch (state) {
case InPreparation:
alarmState = EAlarmStateInPreparation;
@@ -282,15 +257,11 @@
default:
break;
}
-
- qDebug() << "clock: AlarmClient::setAlarmState <--";
}
void AlarmClient::setAlarmRepeatType(
TAlarmRepeatDefinition repeat, AlarmRepeatType& repeatType)
{
- qDebug() << "clock: AlarmClient::setAlarmRepeatType -->";
-
switch (repeat) {
case EAlarmRepeatDefintionRepeatOnce:
repeatType = Once;
@@ -307,15 +278,11 @@
default:
break;
}
-
- qDebug() << "clock: AlarmClient::setAlarmRepeatType <--";
}
void AlarmClient::setAlarmRepeatType(
AlarmRepeatType repeat, TAlarmRepeatDefinition& repeatType)
{
- qDebug() << "clock: AlarmClient::setAlarmRepeatType -->";
-
switch (repeat) {
case Once:
repeatType = EAlarmRepeatDefintionRepeatOnce;
@@ -332,24 +299,41 @@
default:
break;
}
-
- qDebug() << "clock: AlarmClient::setAlarmRepeatType <--";
}
void AlarmClient::deleteAlarm(int alarmId)
{
- qDebug() << "clock: AlarmClient::deleteAlarm -->";
-
// Request the alarmserver to delete the alarm.
mAlarmSrvSession.AlarmDelete(alarmId);
+}
- qDebug() << "clock: AlarmClient::deleteAlarm <--";
+/*!
+ Delete the snoozed alarm.
+
+ \param alarmId needs to be deleted and reset again.
+ \return int error value if any.
+ */
+int AlarmClient::deleteSnoozedAlarm(int alarmId)
+{
+ AlarmInfo alarmInfo;
+ int retVal(KErrNone);
+ int returnVal = getAlarmInfo(alarmId, alarmInfo);
+ if (KErrNone != retVal) {
+ return retVal;
+ }
+ returnVal = mAlarmSrvSession.AlarmDelete(alarmId);
+ if (KErrNone != retVal) {
+ return retVal;
+ }
+ alarmInfo.alarmState = InPreparation;
+ alarmInfo.nextDueTime = alarmInfo.origAlarmTime;
+ setAlarm(alarmInfo);
+
+ return retVal;
}
int AlarmClient::getAlarmInfo(int alarmId, AlarmInfo& alarmInfo)
{
- qDebug() << "clock: AlarmClient::getAlarmInfo -->";
-
TASShdAlarm tempSharedAlarm;
// Get the requested alarm info from the alarm server.
@@ -373,11 +357,15 @@
tempSharedAlarm.NextDueTime().DateTime().Minute(),
tempSharedAlarm.NextDueTime().DateTime().Second());
- // Alarm day
+ // Alarm date
alarmInfo.alarmDateTime.setYMD(
tempSharedAlarm.OriginalExpiryTime().DateTime().Year(),
tempSharedAlarm.OriginalExpiryTime().DateTime().Month()+1,
tempSharedAlarm.OriginalExpiryTime().DateTime().Day()+1);
+
+ // Set alarm day.
+ alarmInfo.alarmDay =
+ tempSharedAlarm.OriginalExpiryTime().DayNoInWeek();
// The alarm status
if (EAlarmStatusEnabled == tempSharedAlarm.Status()) {
@@ -404,46 +392,31 @@
alarmInfo.volumeStatus = AlarmVolumeOff;
}
}
-
- qDebug() << "clock: AlarmClient::getAlarmInfo <--";
-
return error;
}
void AlarmClient::toggleAlarmStatus(int alarmId, int alarmStatus)
{
- qDebug() << "clock: AlarmClient::toggleAlarmStatus -->";
mAlarmSrvSession.SetAlarmStatus(alarmId, (TAlarmStatus)alarmStatus);
- qDebug() << "clock: AlarmClient::toggleAlarmStatus <--";
}
void AlarmClient::startListener()
{
- qDebug("clock: AlarmClient::startListener() -->");
+ mListener->start();
- mListener->start();
-
- qDebug("clock: AlarmClient::startListener() <--");
}
void AlarmClient::stopListener()
{
- qDebug("clock: AlarmClient::stopListener() -->");
-
mListener->stop();
- qDebug("clock: AlarmClient::stopListener() <--");
}
void AlarmClient::notifyChange(int alarmId)
{
- qDebug() << "clock: AlarmClient::notifyChange -->";
-
- emit alarmStateChanged(alarmId);
-
- qDebug() << "clock: AlarmClient::notifyChange <--";
+ emit alarmStateChanged(alarmId);
}
// End of file --Don't remove this.
--- a/clock/clockmw/clockalarms/src/alarmlistener.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clockalarms/src/alarmlistener.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -25,57 +25,39 @@
mClient(client),
mSession(session)
{
- qDebug("clock: AlarmListener::AlarmListener -->");
-
- // Nothing to do.
-
- qDebug("clock: AlarmListener::AlarmListener <--");
+ // Nothing to do.
}
AlarmListener::~AlarmListener()
{
- qDebug("clock: AlarmListener::~AlarmListener -->");
-
if (IsActive()) {
Cancel();
}
- qDebug("clock: AlarmListener::~AlarmListener <--");
}
void AlarmListener::start()
{
- qDebug("clock: AlarmListener::start -->");
-
// Add the AO to the scheduler.
CActiveScheduler::Add(this);
// Subscrive for async notification from alarm server.
mSession.NotifyChange(iStatus, mAlarmId);
- qDebug("clock: AlarmListener::start - Successfully subscribed for change notifiation.");
-
// Set the AO active.
SetActive();
- qDebug("clock: AlarmListener::start <--");
}
void AlarmListener::stop()
{
- qDebug("clock: AlarmListener::stop -->");
-
if (IsActive()) {
Cancel();
}
-
- qDebug("clock: AlarmListener::stop <--");
}
void AlarmListener::RunL()
{
- qDebug("clock: AlarmListener::RunL --");
-
if (iStatus != KRequestPending) {
// We get notification for various changes with the alarm server.
// Only the required Events are used to emit a signal.
@@ -95,18 +77,13 @@
SetActive();
}
-
- qDebug("clock: AlarmListener::RunL <--");
}
void AlarmListener::DoCancel()
{
- qDebug("clock: AlarmListener::DoCancel -->");
-
// Cancel async request.
mSession.NotifyChangeCancel();
- qDebug("clock: AlarmListener::DoCancel <--");
}
// End of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocksettingsutility/bwins/clocksettingsutilityu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/settingsutility.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clocksettingsutility/inc/settingsutility.h Mon Jun 28 15:22:02 2010 +0530
@@ -42,11 +42,11 @@
~SettingsUtility();
public:
- void setTime(const QString &time);
+// void setTime(const QString &time);
QString time();
- void setTimeZone(const QString &timezone);
- QString timeZone();
+/* void setTimeZone(const QString &timezone);
+ QString timeZone();*/
void setTimeFormat(const QString &format);
int timeFormat(QStringList &format);
@@ -57,10 +57,10 @@
void setTimeSeparator(const QString &separator);
int timeSeparator(QStringList &list);
- void setAutoUpdate(const QString &value);
- int autoUpdate(QStringList &list);
+/* void setAutoUpdate(const QString &value);
+ int autoUpdate(QStringList &list);*/
- void setDate(const QString &date);
+// void setDate(const QString &date);
QString date();
void setDateFormat(const QString &format);
@@ -91,8 +91,6 @@
QStringList mDateSeparatorList;
QStringList mAutoUpdateValueList;
QStringList mSnoozeValueList;
-
- TimezoneClient *mTimeZoneClient;
};
#endif // SETTINGSUTILITY_H
--- a/clock/clockmw/clocksettingsutility/src/settingsutility.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clocksettingsutility/src/settingsutility.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -37,21 +37,13 @@
SettingsUtility::SettingsUtility(QObject *parent)
:QObject(parent)
{
- qDebug("clock: SettingsUtility::SettingsUtility -->");
-
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("-");
mAutoUpdateValueList << tr("ON") << tr("OFF");
mSnoozeValueList << tr("5 minutes") << tr("15 minutes") << tr(" 30 minutes") << tr("1 hour");
-
- mTimeZoneClient = new TimezoneClient(this);
-
- qDebug("clock: SettingsUtility::SettingsUtility <--");
-
-// mSettingsMamager = new XQSettingsManager(this);
}
/*!
@@ -59,23 +51,11 @@
*/
SettingsUtility::~SettingsUtility()
{
- // Nothing yet.
+ // Nothing.
}
/*!
-
- */
-void SettingsUtility::setTime(const QString &time)
-{
- QTime newTime = QTime::fromString(time, timeFormatString());
-
- if (newTime.isValid()) {
- mTimeZoneClient->setDateTime(QDateTime(QDate::currentDate(), newTime));
- }
-}
-
-/*!
-
+ Returns the current time in the device.
*/
QString SettingsUtility::time()
{
@@ -85,64 +65,6 @@
/*!
*/
-void SettingsUtility::setTimeZone(const QString &timezone)
-{
- Q_UNUSED(timezone)
-}
-
-/*!
-
- */
-QString SettingsUtility::timeZone()
-{
- QStringList dummyList;
-
- // Get the current zone info.
- LocationInfo currentZoneInfo = mTimeZoneClient->getCurrentZoneInfoL();
-
- // Construct the GMT +/- X string.
- QString gmtOffset(hbTrId("txt_common_common_gmt"));
-
- int utcOffset = currentZoneInfo.zoneOffset;
- int offsetInHours (utcOffset/60);
- int offsetInMinutes (utcOffset%60);
-
- // Check wether the offset is +ve or -ve.
- if (0 < utcOffset) {
- // We have a positive offset. Append the '+' character.
- gmtOffset += tr("+ ");
- } else if (0 > utcOffset) {
- // We have a negative offset. Append the '-' character.
- gmtOffset += tr("- ");
- offsetInHours = -offsetInHours;
- } else {
- // We dont have an offset. We are at GMT zone.
- }
-
- // Append the hour component.
- gmtOffset += QString::number(offsetInHours);
-
- // Append the time separator.
- gmtOffset += mTimeSeparatorList.at(timeSeparator(dummyList));
-
- // Append the minute component.
- // If minute component is less less than 10, append a '00'
- if (0 <= offsetInMinutes && offsetInMinutes < 10) {
- gmtOffset += tr("00");
- } else {
- gmtOffset += QString::number(offsetInMinutes);
- }
-
- gmtOffset += tr(" ");
- // TODO: append city name when more than one cities else country name.
- gmtOffset += currentZoneInfo.cityName;
-
- return gmtOffset;
-}
-
-/*!
-
- */
void SettingsUtility::setTimeFormat(const QString& format)
{
TLocale locale;
@@ -234,8 +156,6 @@
*/
int SettingsUtility::timeSeparator(QStringList &list)
{
- qDebug() << "clock: SettingsUtility::timeSeparator -->";
-
TLocale locale;
TChar separatorChar = locale.TimeSeparator(1);
int value = -1;
@@ -249,70 +169,14 @@
}
list = mTimeSeparatorList;
-
- qDebug() << "clock: SettingsUtility::timeSeparator <--";
-
return value;
}
/*!
*/
-void SettingsUtility::setAutoUpdate(const QString &value)
-{
- // TODO: implement the changes after server is in place.
- // 1. Inform the server about the setting.
- // 2. Get the status of the change from server
- // 3. Emit the signal to inform the clients of the change in the settings item,
- // pass the enum of settings item changed and the updated value.
-
- if (0 == value.compare(tr("ON"), Qt::CaseInsensitive)) {
- mTimeZoneClient->setTimeUpdateOn(true);
- } else {
- mTimeZoneClient->setTimeUpdateOn(false);
- }
-
- emit settingsChanged(AutoTimeUpdate, value);
-}
-
-/*!
-
- */
-int SettingsUtility::autoUpdate(QStringList &list)
-{
- // TODO: implement properly. this is jst a dummy implementation.
- int value = 1;
-
- bool autoUpdate = mTimeZoneClient->timeUpdateOn();
-
- if (autoUpdate) {
- value = 0;
- }
- list = mAutoUpdateValueList;
- return value;
-}
-
-/*!
-
- */
-void SettingsUtility::setDate(const QString &date)
-{
- QDate newDate = QDate::fromString(date, dateFormatString());
-
- if (newDate.isValid()) {
- mTimeZoneClient->setDateTime(QDateTime(newDate, QTime::currentTime()));
- }
-}
-
-/*!
-
- */
QString SettingsUtility::date()
{
- qDebug() << "clock: SettingsUtility::date -->";
-
- qDebug() << "clock: SettingsUtility::date <--";
-
return QDate::currentDate().toString(dateFormatString());
}
@@ -456,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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 * *)
+
--- a/clock/clockmw/clocktimezone/clocktimezone.pro Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clocktimezone/clocktimezone.pro Mon Jun 28 15:22:02 2010 +0530
@@ -41,7 +41,8 @@
-lbafl \
-ltimezonelocalization \
-ltzclient \
- -lclockserverclient
+ -lclockserverclient \
+ -lxqsettingsmanager
BLD_INF_RULES.prj_exports += \
"../../data/timezonedata/timezonelocalization.loc APP_LAYER_LOC_EXPORT_PATH(timezonelocalization.loc)" \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocktimezone/eabi/timezoneclientu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clocktimezone/inc/timezoneclient.h Mon Jun 28 15:22:02 2010 +0530
@@ -41,6 +41,8 @@
class CEnvironmentChangeNotifier;
class QStandardItemModel;
class CTzLocalizer;
+class XQSettingsManager;
+class XQSettingsKey;
const int KInitialEvent = (
EChangesLocale |
@@ -56,29 +58,31 @@
Q_OBJECT
public:
- TimezoneClient(QObject* parent = 0);
+ /*TIMEZONECLIENT_EXPORT*/ static TimezoneClient* getInstance();
+ /*TIMEZONECLIENT_EXPORT*/ void deleteInstance();
+ /*TIMEZONECLIENT_EXPORT*/ bool isNull();
+
+private:
+ TimezoneClient();
~TimezoneClient();
+private:
+
+private:
+ static TimezoneClient *mTimezoneClient;
+ static bool mReferenceCount;
+
+// TODO: still refatoring
public:
- QList<LocationInfo> getLocations();
- bool getUtcDstOffsetL(int &dstOffset,
- const CTzId &tzId);
- LocationInfo getCurrentZoneInfoL();
- void setAsCurrentLocationL(LocationInfo &location);
- bool isDSTOnL(int timezoneId);
- int getStandardOffset(int timezoneId);
- void getDstRulesL(
- QDateTime &startTime, QDateTime &endTime,int timezoneId);
+ /*TIMEZONECLIENT_EXPORT*/ QList<LocationInfo> &getLocations();
+ /*TIMEZONECLIENT_EXPORT*/ LocationInfo getCurrentZoneInfoL();
+ /*TIMEZONECLIENT_EXPORT*/ void setAsCurrentLocationL(LocationInfo &location);
+ /*TIMEZONECLIENT_EXPORT*/ bool isDSTOnL(int timezoneId);
+ /*TIMEZONECLIENT_EXPORT*/ int getStandardOffset(int timezoneId);
QList<LocationInfo> getSavedLocations();
void saveLocations(const QList<LocationInfo> &locationList);
void getCountries(QMap<QString, int>& countries);
- void getCitiesForCountry(
- int id, QMap<QString, int>& cities);
- void getLocationInfo(
- int groupId, int cityIndex, LocationInfo& cityInfo);
bool dstOn(int tzId);
- int getCityGroupIdByName(const QString& name);
- int getCityOffsetByNameAndId(const QString& name, int tzId);
void setDateTime(QDateTime dateTime);
void setTimeUpdateOn(bool timeUpdate = true);
bool timeUpdateOn();
@@ -96,13 +100,25 @@
signals:
void timechanged();
void listUpdated();
-
+ void autoTimeUpdateChanged(int value);
+ void cityUpdated();
+
private:
int getDstZoneOffset(int tzId);
TMonth intToMonth(int month);
+ bool getUtcDstOffsetL(int &dstOffset, const CTzId &tzId);
+ void getDstRulesL(
+ QDateTime &startTime, QDateTime &endTime,int timezoneId);
+ void getCitiesForCountry(
+ int id, QMap<QString, int>& cities);
+ void getLocationInfo(
+ int groupId, int cityIndex, LocationInfo& cityInfo);
+ int getCityGroupIdByName(const QString& name);
+ int getCityOffsetByNameAndId(const QString& name, int tzId);
private slots:
- void populateCities();
+ void populateCities();
+ void eventMonitor(const XQSettingsKey& key, const QVariant& value);
public:
CEnvironmentChangeNotifier *mNotifier;
@@ -112,14 +128,16 @@
QMap<QString, int> mAllCountries;
QList<LocationInfo> mAllLocations;
QStandardItemModel *mWorldClockModel;
+ XQSettingsManager *mSettingsManager;
+ XQSettingsKey *mAutoTimeUpdateKey;
QList<int> mTimeZoneIds;
- bool mTimeUpdateOn;
- int mFetchCount;
+// bool mTimeUpdateOn;
int mCountryCount;
+ int mAutoTimeUpdateValue;
};
-#endif // __TIMEZONECLIENT_H__
+#endif // __TIMEZONECLIENT_H__
// End of file
--- a/clock/clockmw/clocktimezone/src/timezoneclient.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockmw/clocktimezone/src/timezoneclient.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -19,18 +19,19 @@
// System includes
#include <QList>
#include <QStandardItemModel>
-#include <QDebug>
#include <QtAlgorithms>
#include <tzlocalizationdatatypes.h>
#include <tzlocalizer.h>
#include <tz.h>
#include <vtzrules.h>
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
// User includes
#include "timezoneclient.h"
#include "clockcommon.h"
-#include "debug.h"
#include "clockserverclt.h"
+#include "clockprivatecrkeys.h"
const int KDaysInWeek(7);
const int KZerothRule(0);
@@ -44,39 +45,72 @@
tzserver and timezonelocalization.
*/
+TimezoneClient* TimezoneClient::mTimezoneClient = 0;
+bool TimezoneClient::mReferenceCount = false;
/*!
- Default constructor.
+ Call this funtion to instantiate the TimezoneClient class.
+ */
+TimezoneClient* TimezoneClient::getInstance()
+{
+ if (!mTimezoneClient) {
+ mTimezoneClient = new TimezoneClient();
+ mReferenceCount = true;
+ }
- \param parent The parent.
+ return mTimezoneClient;
+}
+
+/*!
+ Call this function to clean up the instance of TimezoneClient class.
*/
-TimezoneClient::TimezoneClient(QObject* parent)
-:QObject(parent),
- mTimeUpdateOn(false),
- mFetchCount(0)
+void TimezoneClient::deleteInstance()
{
- qDebug("clock: TimezoneClient::TimezoneClient() -->");
+ if (mReferenceCount) {
+ delete mTimezoneClient;
+ mTimezoneClient = 0;
+ }
+}
+/*!
+ Call this function to check if the object is NULL.
+ */
+bool TimezoneClient::isNull()
+{
+ return !mReferenceCount;
+}
+
+/*!
+ The constructor.
+ */
+TimezoneClient::TimezoneClient()
+{
TCallBack callback(environmentCallback, this);
mNotifier = CEnvironmentChangeNotifier::NewL(
CActive::EPriorityStandard, callback);
mNotifier->Start();
- RClkSrvInterface clkSrvInterface1;
- User::LeaveIfError(clkSrvInterface1.Connect());
- TBool aUpdate;
- clkSrvInterface1.IsAutoTimeUpdateOn(aUpdate);
- if(aUpdate){
- mTimeUpdateOn = true;
- }
- else {
- mTimeUpdateOn = false;
- }
- clkSrvInterface1.Close();
-
mTzLocalizer = CTzLocalizer::NewL();
- qDebug("clock: TimezoneClient::TimezoneClient() <--");
+ // Create the settings manager.
+ mSettingsManager = new XQSettingsManager(this);
+
+ // Create the key for auto time update.
+ mAutoTimeUpdateKey = new XQSettingsKey(
+ XQSettingsKey::TargetCentralRepository,
+ KCRUidNitz,
+ KActiveProtocol);
+
+ // Start the monitoring for the auto time update key.
+ mSettingsManager->startMonitoring(*mAutoTimeUpdateKey);
+
+ // Get the value of auto time update from cenrep.
+ mAutoTimeUpdateValue = timeUpdateOn();
+
+ // Listen to the key value changes.
+ connect(
+ mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
+ this, SLOT(eventMonitor(XQSettingsKey, QVariant)));
}
/*!
@@ -99,6 +133,11 @@
if (mTimeZoneIds.count()) {
mTimeZoneIds.clear();
}
+ // Clear the locations if exist.
+ if (mAllLocations.count()) {
+ mAllLocations.clear();
+ }
+
}
/*!
@@ -109,20 +148,15 @@
valid cityName, countryName, tz id and city group id. None of the other
data is filled.
*/
-QList<LocationInfo> TimezoneClient::getLocations()
+QList<LocationInfo>& TimezoneClient::getLocations()
{
- qDebug("clock: TimezoneClient::getLocations() -->");
-
- // This list will contain the info of the cities fetched from tz server.
- QList<LocationInfo> infoList;
-
- // Construct the timezone localizer.
- CTzLocalizer* localizer = CTzLocalizer::NewL();
- CleanupStack::PushL(localizer);
+ if (mAllLocations.count()) {
+ mAllLocations.clear();
+ }
// Get the cities, in alphabetical-ascending sorted order.
CTzLocalizedCityArray* cityArray =
- localizer->GetCitiesL(CTzLocalizer::ETzAlphaNameAscending);
+ mTzLocalizer->GetCitiesL(CTzLocalizer::ETzAlphaNameAscending);
ASSERT(cityArray);
CleanupStack::PushL(cityArray);
int cityCount = cityArray->Count();
@@ -150,7 +184,7 @@
if (country) {
delete country;
}
- country = localizer->GetCityGroupL(cityGroupId);
+ country = mTzLocalizer->GetCityGroupL(cityGroupId);
countryName.Set(country->Name());
}
@@ -162,16 +196,12 @@
cityName.Ptr(), cityName.Length());
cityInfo.countryName = QString::fromUtf16(
countryName.Ptr(), countryName.Length());
- infoList.append(cityInfo);
+ mAllLocations.append(cityInfo);
}
// Cleanup.
CleanupStack::PopAndDestroy(cityArray);
- CleanupStack::PopAndDestroy(localizer);
-
- qDebug("clock: TimezoneClient::getLocations() <--");
-
- return infoList;
+ return mAllLocations;
}
bool TimezoneClient::getUtcDstOffsetL(int& dstOffset, const CTzId& timezoneId)
@@ -246,8 +276,6 @@
LocationInfo TimezoneClient::getCurrentZoneInfoL()
{
- qDebug() << "clock: TimezoneClient::getCurrentZoneInfoL -->";
-
// Current zone info.
LocationInfo currentLocation;
int timezoneId(0);
@@ -281,140 +309,130 @@
timeZones.Close();
zoneOffsets.Close();
- // Construct CTzLocalizer object to get the timezone from the ID.
- CTzLocalizer* tzLocalizer = CTzLocalizer::NewL();
-
// Get all the localized timezones for the current timezone ID.
CTzLocalizedTimeZone* localizedTimeZone(NULL);
- if (tzLocalizer) {
- // Get the currently set localized timezone.
- CleanupStack::PushL(tzLocalizer);
- localizedTimeZone =
- tzLocalizer->GetLocalizedTimeZoneL(tzId->TimeZoneNumericID());
+ localizedTimeZone =
+ mTzLocalizer->GetLocalizedTimeZoneL(tzId->TimeZoneNumericID());
+
+ if (localizedTimeZone) {
+ CleanupStack::PushL(localizedTimeZone);
- if (localizedTimeZone) {
- CleanupStack::PushL(localizedTimeZone);
+ // Get the frequently used localized city.
+ CTzLocalizedCity* localizedCity(0);
+ localizedCity = mTzLocalizer->GetFrequentlyUsedZoneCityL(
+ CTzLocalizedTimeZone::ECurrentZone);
+ CleanupStack::PushL(localizedCity);
- // Get the frequently used localized city.
- CTzLocalizedCity* localizedCity(0);
- localizedCity = tzLocalizer->GetFrequentlyUsedZoneCityL(
- CTzLocalizedTimeZone::ECurrentZone);
- CleanupStack::PushL(localizedCity);
+ // Get all the city groups.
+ CTzLocalizedCityGroupArray* cityGroupArray =
+ mTzLocalizer->GetAllCityGroupsL(
+ CTzLocalizer::ETzAlphaNameAscending);
+ CleanupStack::PushL(cityGroupArray);
- // Get all the city groups.
- CTzLocalizedCityGroupArray* cityGroupArray =
- tzLocalizer->GetAllCityGroupsL(
- CTzLocalizer::ETzAlphaNameAscending);
- CleanupStack::PushL(cityGroupArray);
-
- // Get the index of the country corresponding to the city group ID.
- int countryIndex(1);
+ // Get the index of the country corresponding to the city group ID.
+ int countryIndex(1);
- for (int index = 0; index < cityGroupArray->Count(); index++) {
- if (localizedCity->GroupId() ==
- cityGroupArray->At(index).Id()) {
- countryIndex = index;
- }
+ for (int index = 0; index < cityGroupArray->Count(); index++) {
+ if (localizedCity->GroupId() ==
+ cityGroupArray->At(index).Id()) {
+ countryIndex = index;
}
+ }
- // Get all the cities within the currently set country.
- CTzLocalizedCityArray* cityList = tzLocalizer->GetCitiesInGroupL(
- (cityGroupArray->At(countryIndex )).Id(),
- CTzLocalizer::ETzAlphaNameAscending);
- CleanupStack::PushL(cityList);
+ // Get all the cities within the currently set country.
+ CTzLocalizedCityArray* cityList = mTzLocalizer->GetCitiesInGroupL(
+ (cityGroupArray->At(countryIndex )).Id(),
+ CTzLocalizer::ETzAlphaNameAscending);
+ CleanupStack::PushL(cityList);
- // Check if automatic time update is enabled.
- bool timeUpdateOn( false );
+ // Check if automatic time update is enabled.
+ bool timeUpdateOn( false );
- // Connect to the clock server.
- // TODO: connect to the clock server and get auto update status in
- // var: timeUpdateOn
- // Check if the country contains only one city or if automatic
- // time update is on.
- if (1 == cityList->Count() || timeUpdateOn) {
- // If yes, then display only the country name.
- // TODO
- } else {
- // Display city name.
- // TODO:
- }
+ // Connect to the clock server.
+ // TODO: connect to the clock server and get auto update status in
+ // var: timeUpdateOn
+ // Check if the country contains only one city or if automatic
+ // time update is on.
+ if (1 == cityList->Count() || timeUpdateOn) {
+ // If yes, then display only the country name.
+ // TODO
+ } else {
+ // Display city name.
+ // TODO:
+ }
- // Get the country name.
- TPtrC countryName(cityGroupArray->At(countryIndex).Name());
- currentLocation.countryName = QString::fromUtf16(
- countryName.Ptr(), countryName.Length());
-
- // Get the city name.
- TPtrC cityName(localizedCity->Name());
- currentLocation.cityName = QString::fromUtf16(
- cityName.Ptr(), cityName.Length());
+ // Get the country name.
+ TPtrC countryName(cityGroupArray->At(countryIndex).Name());
+ currentLocation.countryName = QString::fromUtf16(
+ countryName.Ptr(), countryName.Length());
- // Get the UTC offset.
- timezoneId = localizedCity->TimeZoneId();
+ // Get the city name.
+ TPtrC cityName(localizedCity->Name());
+ currentLocation.cityName = QString::fromUtf16(
+ cityName.Ptr(), cityName.Length());
- if (timezoneId) {
- // Check if the DST is on for the current timezone.
- if (isDSTOnL(timezoneId)) {
- // Get the offset with DST enabled.
- getUtcDstOffsetL(utcOffset, *tzId);
+ // Get the UTC offset.
+ timezoneId = localizedCity->TimeZoneId();
- currentLocation.dstOn = true;
- currentLocation.timezoneId = timezoneId;
- currentLocation.zoneOffset = utcOffset;
- } else {
- // Use the standard offset.
- currentLocation.dstOn = false;
- currentLocation.timezoneId = timezoneId;
- currentLocation.zoneOffset = initialTimeZoneOffset;
- }
+ if (timezoneId) {
+ // Check if the DST is on for the current timezone.
+ if (isDSTOnL(timezoneId)) {
+ // Get the offset with DST enabled.
+ getUtcDstOffsetL(utcOffset, *tzId);
+
+ currentLocation.dstOn = true;
+ currentLocation.timezoneId = timezoneId;
+ currentLocation.zoneOffset = utcOffset;
+ } else {
+ // Use the standard offset.
+ currentLocation.dstOn = false;
+ currentLocation.timezoneId = timezoneId;
+ currentLocation.zoneOffset = initialTimeZoneOffset;
}
-
- // Cleanup.
- CleanupStack::PopAndDestroy( cityList );
- CleanupStack::PopAndDestroy( cityGroupArray );
- CleanupStack::PopAndDestroy( localizedCity );
- CleanupStack::PopAndDestroy( localizedTimeZone );
}
// Cleanup.
- CleanupStack::PopAndDestroy( tzLocalizer );
+ CleanupStack::PopAndDestroy( cityList );
+ CleanupStack::PopAndDestroy( cityGroupArray );
+ CleanupStack::PopAndDestroy( localizedCity );
+ CleanupStack::PopAndDestroy( localizedTimeZone );
}
// Cleanup.
CleanupStack::PopAndDestroy( tzId );
CleanupStack::PopAndDestroy( &tzHandle );
-
- qDebug() << "clock: TimezoneClient::getCurrentZoneInfoL <--";
-
return currentLocation;
}
void TimezoneClient::setAsCurrentLocationL(LocationInfo &location)
{
- Debug::writeDebugMsg(
+/* Debug::writeDebugMsg(
"In time zone client setAsCurrentLocationL " + location.cityName +
" " +
location.countryName +
" " +
- QString::number(location.zoneOffset));
+ QString::number(location.zoneOffset));*/
- // Construct CTzLocalizer object.
- CTzLocalizer* tzLocalizer = CTzLocalizer::NewL();
- CleanupStack::PushL( tzLocalizer );
- tzLocalizer->SetTimeZoneL( location.timezoneId );
+ LocationInfo prevLocationInfo ;
+ prevLocationInfo = getCurrentZoneInfoL();
+
+ mTzLocalizer->SetTimeZoneL( location.timezoneId );
TPtrC ptrCityName(
reinterpret_cast<const TText*>(location.cityName.constData()));
CTzLocalizedCity* localizedCity =
- tzLocalizer->FindCityByNameL(ptrCityName, location.timezoneId);
+ mTzLocalizer->FindCityByNameL(ptrCityName, location.timezoneId);
CleanupStack::PushL( localizedCity );
- tzLocalizer->SetFrequentlyUsedZoneL(
+ mTzLocalizer->SetFrequentlyUsedZoneL(
*localizedCity, CTzLocalizedTimeZone::ECurrentZone);
// Cleanup.
CleanupStack::PopAndDestroy( localizedCity );
- CleanupStack::PopAndDestroy( tzLocalizer );
+
+ if(prevLocationInfo.timezoneId == location.timezoneId) {
+ emit cityUpdated();
+ }
}
bool TimezoneClient::isDSTOnL(int timezoneId)
@@ -588,16 +606,11 @@
void TimezoneClient::getCountries(QMap<QString, int>& countries)
{
- // Construct the timezone localizer.
- CTzLocalizer* localizer = CTzLocalizer::NewL();
- CleanupStack::PushL(localizer);
-
// Get all the city groups(countries).
QTime t;
t.start();
CTzLocalizedCityGroupArray* cityGroupArray =
- localizer->GetAllCityGroupsL(CTzLocalizer::ETzAlphaNameAscending);
- qDebug() << "Fetching city groups from tzloc: " << t.elapsed();
+ mTzLocalizer->GetAllCityGroupsL(CTzLocalizer::ETzAlphaNameAscending);
CleanupStack::PushL(cityGroupArray);
t.restart();
@@ -611,27 +624,18 @@
countryName.Ptr(),countryName.Length());
countries[qCountryName] = cityGroup.Id();
}
- qDebug() << "Converting " <<
- cityGroupArray->Count() <<
- "countries to qstring: " <<
- t.elapsed();
// Cleanup.
CleanupStack::PopAndDestroy(cityGroupArray);
- CleanupStack::PopAndDestroy(localizer);
}
void TimezoneClient::getCitiesForCountry(int id, QMap<QString, int>& cities)
{
- // Construct the timezone localizer.
- CTzLocalizer* localizer = CTzLocalizer::NewL();
- CleanupStack::PushL(localizer);
-
// Get the city group for the given id.
- CTzLocalizedCityArray* cityArray = localizer->GetCitiesInGroupL(id,
+ CTzLocalizedCityArray* cityArray = mTzLocalizer->GetCitiesInGroupL(id,
CTzLocalizer::ETzAlphaNameAscending);
CleanupStack::PushL(cityArray);
- CTzLocalizedCityArray* unsortedArray = localizer->GetCitiesInGroupL(id,
+ CTzLocalizedCityArray* unsortedArray = mTzLocalizer->GetCitiesInGroupL(id,
CTzLocalizer::ETzUnsorted);
CleanupStack::PushL(unsortedArray);
@@ -654,7 +658,6 @@
// Cleanup.
CleanupStack::PopAndDestroy(unsortedArray);
CleanupStack::PopAndDestroy(cityArray);
- CleanupStack::PopAndDestroy(localizer);
}
void TimezoneClient::getLocationInfo(
@@ -663,15 +666,12 @@
TRAPD(
error,
- // Construct the localizer.
- CTzLocalizer* localizer = CTzLocalizer::NewLC();
-
// Get the localized city group.
- CTzLocalizedCityGroup* cityGroup = localizer->GetCityGroupL(groupId);
+ CTzLocalizedCityGroup* cityGroup = mTzLocalizer->GetCityGroupL(groupId);
CleanupStack::PushL(cityGroup);
// Get the localized city array for the given city group.
- CTzLocalizedCityArray* cityArray = localizer->GetCitiesInGroupL(
+ CTzLocalizedCityArray* cityArray = mTzLocalizer->GetCitiesInGroupL(
groupId, CTzLocalizer::ETzUnsorted);
CleanupStack::PushL(cityArray);
@@ -690,7 +690,6 @@
// Cleanup.
CleanupStack::PopAndDestroy(cityArray);
CleanupStack::PopAndDestroy(cityGroup);
- CleanupStack::PopAndDestroy(localizer);
)
Q_UNUSED(error)
}
@@ -787,11 +786,8 @@
TPtrC namePtr;
namePtr.Set(name.utf16(), name.length());
- // Construct the timezone localizer.
- CTzLocalizer *localizer = CTzLocalizer::NewLC();
-
// Get the citygroup matching the name.
- CTzLocalizedCityGroup *cityGroup = localizer->FindCityGroupByNameL(namePtr);
+ CTzLocalizedCityGroup *cityGroup = mTzLocalizer->FindCityGroupByNameL(namePtr);
CleanupStack::PushL(cityGroup);
// Get the id.
@@ -799,7 +795,6 @@
// Cleanup.
CleanupStack::PopAndDestroy(cityGroup);
- CleanupStack::PopAndDestroy(localizer);
return id;
}
@@ -809,11 +804,8 @@
TPtrC namePtr;
namePtr.Set(name.utf16(), name.length());
- // Construct the timezone localizer.
- CTzLocalizer *localizer = CTzLocalizer::NewLC();
-
// Get the citygroup matching the name.
- CTzLocalizedCityArray *cityArray = localizer->GetCitiesL(tzId);
+ CTzLocalizedCityArray *cityArray = mTzLocalizer->GetCitiesL(tzId);
CleanupStack::PushL(cityArray);
int id;
@@ -828,10 +820,8 @@
// Cleanup.
CleanupStack::PopAndDestroy(cityArray);
- CleanupStack::PopAndDestroy(localizer);
return id;
-
}
void TimezoneClient::setDateTime(QDateTime dateTime)
@@ -850,21 +840,25 @@
void TimezoneClient::setTimeUpdateOn(bool timeUpdate)
{
- RClkSrvInterface clkSrvInterface;
- User::LeaveIfError(clkSrvInterface.Connect());
- if (timeUpdate) {
- clkSrvInterface.ActivateAllProtocols();
- }
- else {
- clkSrvInterface.DeActivateAllProtocols();
- }
- mTimeUpdateOn = timeUpdate;
+ RClkSrvInterface clkSrvInterface;
+ User::LeaveIfError(clkSrvInterface.Connect());
+ if (timeUpdate) {
+ clkSrvInterface.ActivateAllProtocols();
+ }
+ else {
+ clkSrvInterface.DeActivateAllProtocols();
+ }
clkSrvInterface.Close();
}
bool TimezoneClient::timeUpdateOn()
{
- return mTimeUpdateOn;
+ TBool autoTimeUpdateOn;
+ RClkSrvInterface clkSrvInterface;
+ User::LeaveIfError(clkSrvInterface.Connect());
+ clkSrvInterface.IsAutoTimeUpdateOn(autoTimeUpdateOn);
+ clkSrvInterface.Close();
+ return autoTimeUpdateOn;
}
QStandardItemModel *TimezoneClient::locationSelectorModel()
@@ -1245,4 +1239,29 @@
return info;
}
+
+/*!
+ Slot which is called when the value changes in cevrep.
+
+ \param key The key which got changed in cenrep.
+ \param value The new value of that key.
+ */
+void TimezoneClient::eventMonitor(const XQSettingsKey& key, const QVariant& value)
+{
+ if (key.uid() == KCRUidNitz && key.key() == KActiveProtocol) {
+ if (mSettingsManager->error() == XQSettingsManager::NoError) {
+
+ // New value of auto time update.
+ int autoTimeUpdate = value.toInt();
+
+ // Check if the auto time update value has actually changed.
+ bool keyValueChanged = (autoTimeUpdate != mAutoTimeUpdateValue);
+
+ if(keyValueChanged) {
+ mAutoTimeUpdateValue = autoTimeUpdate;
+ emit autoTimeUpdateChanged(mAutoTimeUpdateValue);
+ }
+ }
+ }
+}
// End of file --Don't remove this.
--- a/clock/clockmw/eabi/clockalarmclientu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +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
-
--- a/clock/clockmw/eabi/clocksettingsutilityu.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,40 +0,0 @@
-EXPORTS
- _ZN15SettingsUtility10autoUpdateER11QStringList @ 1 NONAME
- _ZN15SettingsUtility10dateFormatER11QStringList @ 2 NONAME
- _ZN15SettingsUtility10snoozeTimeER11QStringList @ 3 NONAME
- _ZN15SettingsUtility10timeFormatER11QStringList @ 4 NONAME
- _ZN15SettingsUtility11qt_metacallEN11QMetaObject4CallEiPPv @ 5 NONAME
- _ZN15SettingsUtility11qt_metacastEPKc @ 6 NONAME
- _ZN15SettingsUtility11setTimeZoneERK7QString @ 7 NONAME
- _ZN15SettingsUtility11setWorkdaysERK7QString @ 8 NONAME
- _ZN15SettingsUtility12setClockTypeERK7QString @ 9 NONAME
- _ZN15SettingsUtility13dateSeparatorER11QStringList @ 10 NONAME
- _ZN15SettingsUtility13setAutoUpdateERK7QString @ 11 NONAME
- _ZN15SettingsUtility13setDateFormatERK7QString @ 12 NONAME
- _ZN15SettingsUtility13setSnoozeTimeEi @ 13 NONAME
- _ZN15SettingsUtility13setTimeFormatERK7QString @ 14 NONAME
- _ZN15SettingsUtility13timeSeparatorER11QStringList @ 15 NONAME
- _ZN15SettingsUtility14setStartOfWeekEi @ 16 NONAME
- _ZN15SettingsUtility15settingsChangedE19SettingsItemChanged7QString @ 17 NONAME
- _ZN15SettingsUtility16dateFormatStringEv @ 18 NONAME
- _ZN15SettingsUtility16setDateSeparatorERK7QString @ 19 NONAME
- _ZN15SettingsUtility16setTimeSeparatorERK7QString @ 20 NONAME
- _ZN15SettingsUtility16staticMetaObjectE @ 21 NONAME DATA 16
- _ZN15SettingsUtility16timeFormatStringEv @ 22 NONAME
- _ZN15SettingsUtility19getStaticMetaObjectEv @ 23 NONAME
- _ZN15SettingsUtility4dateEv @ 24 NONAME
- _ZN15SettingsUtility4timeEv @ 25 NONAME
- _ZN15SettingsUtility7setDateERK7QString @ 26 NONAME
- _ZN15SettingsUtility7setTimeERK7QString @ 27 NONAME
- _ZN15SettingsUtility8timeZoneEv @ 28 NONAME
- _ZN15SettingsUtility8workdaysER11QStringList @ 29 NONAME
- _ZN15SettingsUtility9clockTypeER11QStringList @ 30 NONAME
- _ZN15SettingsUtilityC1EP7QObject @ 31 NONAME
- _ZN15SettingsUtilityC2EP7QObject @ 32 NONAME
- _ZN15SettingsUtilityD0Ev @ 33 NONAME
- _ZN15SettingsUtilityD1Ev @ 34 NONAME
- _ZN15SettingsUtilityD2Ev @ 35 NONAME
- _ZNK15SettingsUtility10metaObjectEv @ 36 NONAME
- _ZTI15SettingsUtility @ 37 NONAME
- _ZTV15SettingsUtility @ 38 NONAME
-
--- a/clock/clockmw/eabi/clockstopwatchengineu.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-EXPORTS
- _ZN14TimezoneClient10intToMonthEi @ 1 NONAME
- _ZN14TimezoneClient11listUpdatedEv @ 2 NONAME
- _ZN14TimezoneClient11qt_metacallEN11QMetaObject4CallEiPPv @ 3 NONAME
- _ZN14TimezoneClient11qt_metacastEPKc @ 4 NONAME
- _ZN14TimezoneClient11setDateTimeE9QDateTime @ 5 NONAME
- _ZN14TimezoneClient11timechangedEv @ 6 NONAME
- _ZN14TimezoneClient12getCountriesER4QMapI7QStringiE @ 7 NONAME
- _ZN14TimezoneClient12getDstRulesLER9QDateTimeS1_i @ 8 NONAME
- _ZN14TimezoneClient12getLocationsEv @ 9 NONAME
- _ZN14TimezoneClient12timeUpdateOnEv @ 10 NONAME
- _ZN14TimezoneClient13saveLocationsERK5QListI12LocationInfoE @ 11 NONAME
- _ZN14TimezoneClient14populateCitiesEv @ 12 NONAME
- _ZN14TimezoneClient15getLocationInfoEiiR12LocationInfo @ 13 NONAME
- _ZN14TimezoneClient15setTimeUpdateOnEb @ 14 NONAME
- _ZN14TimezoneClient16getDstZoneOffsetEi @ 15 NONAME
- _ZN14TimezoneClient16getUtcDstOffsetLERiRK5CTzId @ 16 NONAME
- _ZN14TimezoneClient16staticMetaObjectE @ 17 NONAME DATA 16
- _ZN14TimezoneClient17checkForDstChangeER9AlarmInfo @ 18 NONAME
- _ZN14TimezoneClient17getSavedLocationsEv @ 19 NONAME
- _ZN14TimezoneClient17getStandardOffsetEi @ 20 NONAME
- _ZN14TimezoneClient19environmentCallbackEPv @ 21 NONAME
- _ZN14TimezoneClient19getCitiesForCountryEiR4QMapI7QStringiE @ 22 NONAME
- _ZN14TimezoneClient19getCurrentZoneInfoLEv @ 23 NONAME
- _ZN14TimezoneClient19getStaticMetaObjectEv @ 24 NONAME
- _ZN14TimezoneClient20getCityGroupIdByNameERK7QString @ 25 NONAME
- _ZN14TimezoneClient21createWorldClockModelEv @ 26 NONAME
- _ZN14TimezoneClient21locationSelectorModelEv @ 27 NONAME
- _ZN14TimezoneClient21setAsCurrentLocationLER12LocationInfo @ 28 NONAME
- _ZN14TimezoneClient24getCityOffsetByNameAndIdERK7QStringi @ 29 NONAME
- _ZN14TimezoneClient5dstOnEi @ 30 NONAME
- _ZN14TimezoneClient8isDSTOnLEi @ 31 NONAME
- _ZN14TimezoneClientC1EP7QObject @ 32 NONAME
- _ZN14TimezoneClientC2EP7QObject @ 33 NONAME
- _ZN14TimezoneClientD0Ev @ 34 NONAME
- _ZN14TimezoneClientD1Ev @ 35 NONAME
- _ZN14TimezoneClientD2Ev @ 36 NONAME
- _ZNK14TimezoneClient10metaObjectEv @ 37 NONAME
- _ZTI14TimezoneClient @ 38 NONAME
- _ZTV14TimezoneClient @ 39 NONAME
- _ZThn8_N14TimezoneClientD0Ev @ 40 NONAME
- _ZThn8_N14TimezoneClientD1Ev @ 41 NONAME
- _ZN14TimezoneClient17getAllTimeZoneIdsEv @ 42 NONAME
- _ZN14TimezoneClient21getAllTimeZoneOffsetsEv @ 43 NONAME
- _ZN14TimezoneClient24getCountriesForUTCOffsetEi @ 44 NONAME
- _ZN14TimezoneClient7addCityEiR7QStringi @ 45 NONAME
-
--- a/clock/clockui/bwins/clockalarmeditoru.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,5 +0,0 @@
-EXPORTS
- ??1ClockAlarmEditor@@UAE@XZ @ 1 NONAME ; ClockAlarmEditor::~ClockAlarmEditor(void)
- ??0ClockAlarmEditor@@QAE@HPAVQGraphicsWidget@@@Z @ 2 NONAME ; ClockAlarmEditor::ClockAlarmEditor(int, class QGraphicsWidget *)
- ?showAlarmEditor@ClockAlarmEditor@@QAEXXZ @ 3 NONAME ; void ClockAlarmEditor::showAlarmEditor(void)
-
--- a/clock/clockui/bwins/clockappcontrolleru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,8 +0,0 @@
-EXPORTS
- ?setupView@ClockMainView@@QAEXAAVClockAppControllerIf@@PAVClockDocLoader@@@Z @ 1 NONAME ; void ClockMainView::setupView(class ClockAppControllerIf &, class ClockDocLoader *)
- ??0ClockWorldView@@QAE@PAVQGraphicsItem@@@Z @ 2 NONAME ; ClockWorldView::ClockWorldView(class QGraphicsItem *)
- ??1ClockWorldView@@UAE@XZ @ 3 NONAME ; ClockWorldView::~ClockWorldView(void)
- ??1ClockMainView@@UAE@XZ @ 4 NONAME ; ClockMainView::~ClockMainView(void)
- ?setupView@ClockWorldView@@QAEXAAVClockAppControllerIf@@PAVClockDocLoader@@@Z @ 5 NONAME ; void ClockWorldView::setupView(class ClockAppControllerIf &, class ClockDocLoader *)
- ??0ClockMainView@@QAE@PAVQGraphicsItem@@@Z @ 6 NONAME ; ClockMainView::ClockMainView(class QGraphicsItem *)
-
--- a/clock/clockui/bwins/clockwidgetprotou.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-EXPORTS
- ??0SkinnableClock@@QAE@PAVQGraphicsItem@@@Z @ 1 NONAME ; SkinnableClock::SkinnableClock(class QGraphicsItem *)
- ?updateDisplay@SkinnableClock@@QAEX_N@Z @ 2 NONAME ; void SkinnableClock::updateDisplay(bool)
- ?updateClockType@SkinnableClock@@QAEXXZ @ 3 NONAME ; void SkinnableClock::updateClockType(void)
- ??1SkinnableClock@@UAE@XZ @ 4 NONAME ; SkinnableClock::~SkinnableClock(void)
- ?staticMetaObject@SkinnableClock@@2UQMetaObject@@B @ 5 NONAME ; struct QMetaObject const SkinnableClock::staticMetaObject
- ??_ESkinnableClock@@UAE@I@Z @ 6 NONAME ; SkinnableClock::~SkinnableClock(unsigned int)
- ?qt_metacast@SkinnableClock@@UAEPAXPBD@Z @ 7 NONAME ; void * SkinnableClock::qt_metacast(char const *)
- ?startChangeType@SkinnableClock@@AAEXXZ @ 8 NONAME ; void SkinnableClock::startChangeType(void)
- ?trUtf8@SkinnableClock@@SA?AVQString@@PBD0@Z @ 9 NONAME ; class QString SkinnableClock::trUtf8(char const *, char const *)
- ?trUtf8@SkinnableClock@@SA?AVQString@@PBD0H@Z @ 10 NONAME ; class QString SkinnableClock::trUtf8(char const *, char const *, int)
- ?metaObject@SkinnableClock@@UBEPBUQMetaObject@@XZ @ 11 NONAME ; struct QMetaObject const * SkinnableClock::metaObject(void) const
- ?tr@SkinnableClock@@SA?AVQString@@PBD0H@Z @ 12 NONAME ; class QString SkinnableClock::tr(char const *, char const *, int)
- ?qt_metacall@SkinnableClock@@UAEHW4Call@QMetaObject@@HPAPAX@Z @ 13 NONAME ; int SkinnableClock::qt_metacall(enum QMetaObject::Call, int, void * *)
- ?paint@SkinnableClock@@MAEXPAVQPainter@@PBVQStyleOptionGraphicsItem@@PAVQWidget@@@Z @ 14 NONAME ; void SkinnableClock::paint(class QPainter *, class QStyleOptionGraphicsItem const *, class QWidget *)
- ?tr@SkinnableClock@@SA?AVQString@@PBD0@Z @ 15 NONAME ; class QString SkinnableClock::tr(char const *, char const *)
- ?getStaticMetaObject@SkinnableClock@@SAABUQMetaObject@@XZ @ 16 NONAME ; struct QMetaObject const & SkinnableClock::getStaticMetaObject(void)
- ?clockTypeAnalog@SkinnableClock@@QAE_NXZ @ 17 NONAME ; bool SkinnableClock::clockTypeAnalog(void)
- ?setClockTypeAnalog@SkinnableClock@@AAEX_N@Z @ 18 NONAME ; void SkinnableClock::setClockTypeAnalog(bool)
- ?finishChangeType@SkinnableClock@@QAEXABUEffectStatus@HbEffect@@@Z @ 19 NONAME ; void SkinnableClock::finishChangeType(struct HbEffect::EffectStatus const &)
- ?clockFormat24@SkinnableClock@@QAE_NXZ @ 20 NONAME ; bool SkinnableClock::clockFormat24(void)
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockalarmeditor/bwins/clockalarmeditoru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockalarmeditor/clockalarmeditor.pro Mon Jun 28 15:22:02 2010 +0530
@@ -27,7 +27,8 @@
DEPENDPATH += \
./inc \
- ./src
+ ./src \
+ ./data
symbian: {
TARGET.CAPABILITY += ALL -TCB
@@ -43,13 +44,15 @@
SOURCES += \
clockalarmeditor.cpp \
- clockalarmcustomitem.cpp
+ clockalarmcustomitem.cpp
HEADERS += \
clockalarmeditor.h \
- clockalarmcustomitem.h\
- clockalarmeditordefines.h
+ clockalarmcustomitem.h \
+ clockalarmeditordefines.h
+
+RESOURCES += clockalarmeditor.qrc
+
+TRANSLATIONS += clockalarmeditor.ts
-RESOURCES += \
- data/clockalarmeditor.qrc
# End of file --Don't remove this.
--- a/clock/clockui/clockalarmeditor/data/clockalarmeditor.qrc Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockalarmeditor/data/clockalarmeditor.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -1,6 +1,6 @@
<!DOCTYPE RCC><RCC version="1.0">
- <qresource prefix="/translations">
- <file alias="clockalarmeditor" >translations/clockalarmeditor.qm</file>
+ <qresource prefix="/xml">
+ <file alias="clockalarmeditor.docml">xml/clockalarmeditor.docml</file>
</qresource>
-</RCC>
+</RCC>
\ No newline at end of file
Binary file clock/clockui/clockalarmeditor/data/translations/clockalarmeditor.qm has changed
--- a/clock/clockui/clockalarmeditor/data/translations/clockalarmeditor.ts Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,409 +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_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_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_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_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_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_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_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_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_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_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_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_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="yes" id="txt_clock_list_ln_minutes">
- <comment>Alarm snooze time details in the list box (5mins, 10mins, 15mins, 30mins)</comment>
- <source>%Ln minutes</source>
- <translation>
- <numerusform variants="no">(s)%Ln minutes</numerusform>
- <numerusform variants="no">(p)%Ln minutes</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_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_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_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_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_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_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_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_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_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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockalarmeditor/data/xml/clockalarmeditor.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <object name="deleteAction" type="HbAction">
+ <string locid="txt_clock_opt_delete" name="text" value="Delete"/>
+ </object>
+ <object name="discardChanges" type="HbAction">
+ <string locid="txt_clock_opt_discard_changes" name="text" value="Discard changes"/>
+ </object>
+ <widget name="alarmEditorView" type="HbView">
+ <widget name="alarmEditorViewWidget" role="HbView:widget" type="HbWidget">
+ <widget name="subtitleGroupBox" type="HbGroupBox">
+ <bool name="collapsable" value="FALSE"/>
+ <string name="heading" value="Group Box"/>
+ </widget>
+ <widget name="alarmEditorForm" type="HbDataForm"/>
+ <real name="z" value="0"/>
+ <layout orientation="Vertical" spacing="0un" type="linear">
+ <contentsmargins bottom="0un" left="0un" right="0un" top="0un"/>
+ <linearitem itemname="subtitleGroupBox"/>
+ <linearitem itemname="alarmEditorForm"/>
+ </layout>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="deleteAction" role="HbMenu:addAction"/>
+ <ref object="discardChanges" role="HbMenu:addAction"/>
+ </widget>
+ <string locid="txt_common_common_clock" name="title" value="Clock"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockalarmeditor/eabi/clockalarmeditoru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockalarmeditor/inc/clockalarmeditor.h Mon Jun 28 15:22:02 2010 +0530
@@ -36,20 +36,23 @@
class HbAction;
class HbDateTimePicker;
class HbDialog;
+class HbTranslator;
class XQSettingsManager;
class XQSettingsKey;
class AlarmClient;
class TimezoneClient;
class ClockAlarmCustomItem;
-class QTranslator;
+
-class ClockAlarmEditor : public HbView
+class ClockAlarmEditor : public QObject
{
Q_OBJECT
public:
CLOCKALARMEDITOR_EXPORT ClockAlarmEditor(
- int alarmId = 0, QGraphicsWidget *parent = 0);
+ AlarmClient& alarmClient,
+ int alarmId = 0,
+ QObject *parent = 0);
CLOCKALARMEDITOR_EXPORT virtual ~ClockAlarmEditor();
public:
@@ -61,10 +64,10 @@
void handleDiscardAction();
void handleTimeChange(const QString &text);
void handleOccurenceChanged(int index);
- void handleCancelAction();
void handleOkAction();
void launchTimePicker();
- void handleAlarmSoundChanged();
+ void handleAlarmSoundChanged(int checkedState);
+ void selectedAction(HbAction *action);
signals:
void alarmSet();
@@ -73,7 +76,6 @@
void initModel();
void populateModelItems();
void initAlarmInfo();
- void createMenu();
void createToolbar();
void setAlarm(
QString timeInfo, QString descInfo, int repeatType,
@@ -85,9 +87,12 @@
void displayRemainingTimeNote(AlarmInfo& alarmInfo);
void getDayText(int alarmDay,QString& dayText);
int getRemainingSeconds(QDateTime& alarmDateTime);
+ void launchDialog(QString title, QString text = 0);
+ void sortAlarmDaysList(QStringList& alarmDays);
private:
int mAlarmId;
+ int mStartOfWeek;
bool mAlarmDayItemInserted;
QString mTimeFormat;
@@ -99,7 +104,7 @@
HbDataFormModelItem *mAlarmSoundItem;
HbDataFormModelItem *mAlarmDescription;
- HbView *mPreviousView;
+ HbView *mAlarmEditorView;
HbAction *mDiscardAction;
HbAction *mDeleteAction;
HbAction *mDoneAction;
@@ -111,10 +116,10 @@
XQSettingsManager *mSettingsManager;
XQSettingsKey *mPreviosAlarmTime;
- AlarmClient *mAlarmClient;
+ AlarmClient &mAlarmClient;
AlarmInfo mAlarmInfo;
TimezoneClient *mTimezoneClient;
- QTranslator *mTranslator;
+ HbTranslator *mTranslator;
};
#endif // CLOCKALARMEDITOR_H
--- a/clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -17,7 +17,6 @@
// System includes
#include <QDateTime>
-
#include <HbDataForm>
#include <HbDataFormModel>
#include <HbDataFormModelItem>
@@ -25,21 +24,21 @@
#include <HbInstance>
#include <HbAction>
#include <HbMenu>
-#include <HbToolBar>
-#include <HbLineEdit>
#include <HbLabel>
-#include <HbComboBox>
-#include <HbPushButton>
#include <HbNotificationDialog>
#include <HbDialog>
#include <HbDateTimePicker>
-#include <HbApplication>
+#include <HbCheckBox>
+#include <HbExtendedLocale>
+#include <HbGroupBox>
+#include <HbDocumentLoader>
+#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"
@@ -52,6 +51,7 @@
const int KOneMinute(1);
const int KOneHour(1);
const int KSecondsInOneDay(24 * 60 * 60);
+const int KDaysInWeek(7);
/*!
\class ClockAlarmEditor
@@ -68,9 +68,12 @@
edit.
\param parent The parent object.
*/
-ClockAlarmEditor::ClockAlarmEditor(int alarmId, QGraphicsWidget *parent)
-:HbView(parent),
+ClockAlarmEditor::ClockAlarmEditor(
+ AlarmClient &alarmClient, int alarmId,
+ QObject *parent)
+:QObject(parent),
mAlarmId(alarmId),
+ mStartOfWeek(0),
mAlarmDayItemInserted(false),
mAlarmEditorForm(0),
mAlarmEditorModel(0),
@@ -79,39 +82,14 @@
mAlarmDayItem(0),
mAlarmSoundItem(0),
mAlarmDescription(0),
- mAlarmClient(0)
- {
-
+ 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);
-
- // Create the Alarm Editor DataForm.
- mAlarmEditorForm = new HbDataForm(this);
-
- // Set the title text of the Clock Alarm Editor view.
- setTitle(hbTrId("txt_common_common_clock"));
-
- // Create the alarm client object.
- mAlarmClient = new AlarmClient(this);
-
- // Set the heading of the Alarm Editor DataForm.
- if (mAlarmId && mAlarmClient) {
- mAlarmEditorForm->setHeading(
- hbTrId("txt_clock_subhead_alarm"));
- }
- else
- {
- mAlarmEditorForm->setHeading(hbTrId("txt_clock_subhead_new_alarm"));
- }
-
+ mTranslator = new HbTranslator("clockalarmeditor");
+ mTranslator->loadCommon();
+
// create the timezone client object
- mTimezoneClient = new TimezoneClient(this);
+ mTimezoneClient = TimezoneClient::getInstance();
// Create the settings manager.
mSettingsManager = new XQSettingsManager(this);
@@ -124,31 +102,68 @@
// 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();
+
+ // Create the HbDocumentLoader object.
+ HbDocumentLoader *loader = new HbDocumentLoader();
+ bool success;
+ loader->load(":/xml/clockalarmeditor.docml", &success);
+
+ mAlarmEditorView = qobject_cast<HbView *>(
+ loader->findWidget("alarmEditorView"));
+
+ // Get the subtitle groupBox.
+ HbGroupBox *subtitleGroupBox = qobject_cast<HbGroupBox *>(
+ loader->findWidget("subtitleGroupBox"));
+
+ // Set the heading of the subtitle groupBox.
+ if (mAlarmId) {
+ subtitleGroupBox->setHeading(hbTrId("txt_clock_subhead_alarm"));
+ } else {
+ subtitleGroupBox->setHeading(hbTrId("txt_clock_subhead_new_alarm"));
+ }
+
+ // Get the Alarm Editor DataForm.
+ mAlarmEditorForm = qobject_cast<HbDataForm *> (
+ loader->findWidget("alarmEditorForm"));
+
// Create the alarm info structure with desired values.
initAlarmInfo();
// Creates & initializes the DataFormModel for the AlarmEditor DataForm.
initModel();
-
+
QList <HbAbstractViewItem*> prototypes = mAlarmEditorForm->itemPrototypes();
ClockAlarmCustomItem *customItem =
new ClockAlarmCustomItem(mAlarmEditorForm);
prototypes.append(customItem);
mAlarmEditorForm->setItemPrototypes(prototypes);
- // Create the menu.
- createMenu();
+ // Get the menu items for the alarm editor.
+ mDeleteAction = qobject_cast<HbAction *> (
+ loader->findObject("deleteAction"));
+ mDiscardAction = qobject_cast<HbAction *>(
+ loader->findObject("discardChanges"));
+
+ // Connect the signals for the menu item.
+ connect(
+ mDeleteAction, SIGNAL(triggered()),
+ this, SLOT(handleDeleteAction()));
+ connect(
+ mDiscardAction, SIGNAL(triggered()),
+ this, SLOT(handleDiscardAction()));
// Add the done soft key action.
- mDoneAction = new HbAction(Hb::DoneAction);
+ mDoneAction = new HbAction(Hb::DoneNaviAction);
connect(
mDoneAction, SIGNAL(triggered()),
this, SLOT(handleDoneAction()));
- setNavigationAction(mDoneAction);
+ mAlarmEditorView->setNavigationAction(mDoneAction);
- // Sets the AlarmEditor DataForm to the Clock AlarmEditor view.
- setWidget(mAlarmEditorForm);
}
/*!
@@ -156,16 +171,7 @@
*/
ClockAlarmEditor::~ClockAlarmEditor()
{
- if (mAlarmClient) {
- delete mAlarmClient;
- mAlarmClient = 0;
- }
- if(mTimezoneClient) {
- delete mTimezoneClient;
- mTimezoneClient = 0;
- }
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
@@ -180,9 +186,8 @@
{
// Store the current view and set alarm editor as current view.
HbMainWindow *window = hbInstance->allMainWindows().first();
- mPreviousView = window->currentView();
- window->addView(this);
- window->setCurrentView(this);
+ window->addView(mAlarmEditorView);
+ window->setCurrentView(mAlarmEditorView);
}
/*!
@@ -193,6 +198,10 @@
int alarmDayIndex = -1;
if (mAlarmDayItemInserted) {
alarmDayIndex = mAlarmDayItem->contentWidgetData("currentIndex").toInt();
+ alarmDayIndex += mStartOfWeek;
+ if(alarmDayIndex >= KDaysInWeek){
+ alarmDayIndex -= KDaysInWeek;
+ }
}
setAlarm(
@@ -229,24 +238,20 @@
// Reset alarm day item.
if (mAlarmDayItemInserted) {
+ int currentIndex = mAlarmInfo.alarmDateTime.dayOfWeek() - 1;
+ currentIndex -= mStartOfWeek;
+ if(0 > currentIndex){
+ currentIndex += KDaysInWeek;
+ }
mAlarmDayItem->setContentWidgetData(
- "currentIndex",
- mAlarmInfo.alarmDateTime.dayOfWeek() - 1);
+ "currentIndex",currentIndex);
}
// Reset for alarm sound.
- QStringList alarmSoundOptions;
- alarmSoundOptions << tr("On")
- << tr("Off");
-
if (AlarmVolumeOn == mAlarmInfo.volumeStatus) {
- mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[0]);
- mAlarmSoundItem->setContentWidgetData(
- "additionalText", alarmSoundOptions[1]);
+ mAlarmSoundItem->setContentWidgetData("checkState", Qt::Checked);
} else {
- mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[1]);
- mAlarmSoundItem->setContentWidgetData(
- "additionalText", alarmSoundOptions[0]);
+ mAlarmSoundItem->setContentWidgetData("checkState", Qt::Unchecked);
}
mAlarmDescription->setContentWidgetData("text", mAlarmInfo.alarmDesc);
@@ -280,6 +285,11 @@
alarmDayIndex = 0;
}
if (mAlarmDayItemInserted) {
+ alarmDayIndex -= mStartOfWeek;
+
+ if(0 > alarmDayIndex){
+ alarmDayIndex += KDaysInWeek;
+ }
mAlarmDayItem->setContentWidgetData(
"currentIndex",
alarmDayIndex);
@@ -320,15 +330,14 @@
QString(hbTrId("txt_clock_formlabel_day")),
mAlarmEditorModel->invisibleRootItem());
+ // Add the alarm days beginning from the start of week.
QStringList alarmDays;
- alarmDays << hbTrId("txt_clk_setlabel_val_monday")
- << hbTrId("txt_clk_setlabel_val_tuesday")
- << hbTrId("txt_clk_setlabel_val_wednesday")
- << hbTrId("txt_clk_setlabel_val_thursday")
- << hbTrId("txt_clk_setlabel_val_friday")
- << hbTrId("txt_clk_setlabel_val_saturday")
- << hbTrId("txt_clk_setlabel_val_sunday");
+ sortAlarmDaysList(alarmDays);
+ alarmDayIndex -= mStartOfWeek;
+ if(0 > alarmDayIndex){
+ alarmDayIndex += KDaysInWeek;
+ }
mAlarmDayItem->setContentWidgetData("items", alarmDays);
mAlarmDayItem->setContentWidgetData(
"currentIndex",
@@ -351,16 +360,6 @@
}
/*!
- Called when `Cancel' is pressed on the Dialog.
- */
-void ClockAlarmEditor::handleCancelAction()
-{
- // Close the dialog.
- mTimePickerDialog->close();
- mTimePickerDialog->deleteLater();
-}
-
-/*!
Called when `OK' is pressed on the Dialog.
*/
void ClockAlarmEditor::handleOkAction()
@@ -372,9 +371,6 @@
// Update the selected time value.
mAlarmTimeItem->setContentWidgetData("text",newAlarmTime.toString(mTimeFormat));
- // Close the dialog.
- handleCancelAction();
-
if (mAlarmInfo.nextDueTime != newAlarmTime ) {
handleTimeChange(newAlarmTime.toString(mTimeFormat));
}
@@ -385,65 +381,58 @@
*/
void ClockAlarmEditor::launchTimePicker()
{
-
-
- if (mTimePickerDialog) {
- delete mTimePickerDialog;
- }
-
- // Create the dialog.
- mTimePickerDialog = new HbDialog;
- mTimePickerDialog->setTimeout(HbDialog::NoTimeout);
- mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+ if (mTimePickerDialog) {
+ delete mTimePickerDialog;
+ }
- // Set the heading for the dialog.
- HbLabel * timeLabel =
- new HbLabel(hbTrId("txt_tumbler_title_alarm_time"),
- mTimePickerDialog);
- mTimePickerDialog->setHeadingWidget(timeLabel);
+ // Create the dialog.
+ 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"),
+ mTimePickerDialog);
+ mTimePickerDialog->setHeadingWidget(timeLabel);
- SettingsUtility *settingsUtil = new SettingsUtility(this);
- QStringList timeSeparator;
- int index = settingsUtil->timeFormat(timeSeparator);
- QString tumblerDisplayFormat =
- mTimeFormat.replace(timeSeparator.at(index), QString("."));
+ SettingsUtility *settingsUtil = new SettingsUtility(this);
+ QStringList timeSeparator;
+ int index = settingsUtil->timeFormat(timeSeparator);
+
+ QString tumblerDisplayFormat =
+ mTimeFormat.replace(timeSeparator.at(index), QString("."));
- // Create the tumbler.
- HbDateTimePicker *timePicker = new HbDateTimePicker(mTimePickerDialog);
- timePicker->setDisplayFormat(tumblerDisplayFormat);
- // Set the tumbler as the content widget.
- mTimePickerDialog->setContentWidget(timePicker);
-
- QString timeString = mAlarmTimeItem->contentWidgetData("text").toString();
- QTime time = QTime::fromString(timeString, mTimeFormat);
- timePicker->setTime(time);
+ // Create the tumbler.
+ HbDateTimePicker *timePicker = new HbDateTimePicker(mTimePickerDialog);
+ timePicker->setDisplayFormat(tumblerDisplayFormat);
+
+ mTimePickerDialog->setContentWidget(timePicker);
+
+ QString timeString = mAlarmTimeItem->contentWidgetData("text").toString();
+ QTime time = QTime::fromString(timeString, mTimeFormat);
+ timePicker->setTime(time);
- mOkAction =
- new HbAction(QString(hbTrId("txt_common_button_ok")),
- mTimePickerDialog);
- mTimePickerDialog->setPrimaryAction(mOkAction);
- connect(
- mOkAction, SIGNAL(triggered()),
- this, SLOT(handleOkAction()));
+ mOkAction =
+ new HbAction(QString(hbTrId("txt_common_button_ok")),
+ mTimePickerDialog);
- mCancelAction =
- new HbAction(QString(hbTrId("txt_common_button_cancel")),
- mTimePickerDialog);
- mTimePickerDialog->setSecondaryAction( mCancelAction );
- connect(
- mCancelAction, SIGNAL(triggered()),
- this, SLOT(handleCancelAction()));
+ mCancelAction =
+ new HbAction(QString(hbTrId("txt_common_button_cancel")),
+ mTimePickerDialog);
- mTimePickerDialog->exec();
+ mTimePickerDialog->addAction(mOkAction);
+ mTimePickerDialog->addAction(mCancelAction);
-
+ mTimePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
}
/*!
Handles the alarm sound change.
*/
-void ClockAlarmEditor::handleAlarmSoundChanged()
+void ClockAlarmEditor::handleAlarmSoundChanged(int checkedState)
{
+ Q_UNUSED(checkedState)
if (AlarmVolumeOff == mAlarmInfo.volumeStatus) {
mAlarmInfo.volumeStatus = AlarmVolumeOn;
} else {
@@ -452,6 +441,16 @@
}
/*!
+ Slot to handle the selected action
+ */
+void ClockAlarmEditor::selectedAction(HbAction *action)
+{
+ if (action == mOkAction) {
+ handleOkAction();
+ }
+}
+
+/*!
Initialises the Model & sets for the AlarmEditorForm.
*/
void ClockAlarmEditor::initModel()
@@ -517,19 +516,18 @@
QString(hbTrId("txt_clk_setlabel_day")),
mAlarmEditorModel->invisibleRootItem());
+ // Add the alarm days beginning from the start of week.
QStringList alarmDays;
- alarmDays << hbTrId("txt_clk_setlabel_val_monday")
- << hbTrId("txt_clk_setlabel_val_tuesday")
- << hbTrId("txt_clk_setlabel_val_wednesday")
- << hbTrId("txt_clk_setlabel_val_thursday")
- << hbTrId("txt_clk_setlabel_val_friday")
- << hbTrId("txt_clk_setlabel_val_saturday")
- << hbTrId("txt_clk_setlabel_val_sunday");
+ sortAlarmDaysList(alarmDays);
+ int currentIndex = mAlarmInfo.alarmDateTime.dayOfWeek() - 1;
+ currentIndex -= mStartOfWeek;
+ if(0 > currentIndex){
+ currentIndex += KDaysInWeek;
+ }
mAlarmDayItem->setContentWidgetData("items", alarmDays);
mAlarmDayItem->setContentWidgetData(
- "currentIndex",
- mAlarmInfo.alarmDateTime.dayOfWeek() - 1);
+ "currentIndex",currentIndex);
mAlarmDayItemInserted = true;
}/* else { TODO: check and remove this else block.
@@ -543,23 +541,21 @@
// Alarm sound.
mAlarmSoundItem = mAlarmEditorModel->appendDataFormItem(
- HbDataFormModelItem::ToggleValueItem,
- QString(hbTrId("txt_clk_setlabel_alarm_sound")),
+ HbDataFormModelItem::CheckBoxItem,
+ QString(hbTrId("")),
mAlarmEditorModel->invisibleRootItem());
- QStringList alarmSoundOptions;
- alarmSoundOptions << tr("On")
- << tr("Off");
+
+ mAlarmSoundItem->setContentWidgetData(
+ "text", QString(hbTrId("txt_clk_setlabel_alarm_sound")));
if (AlarmVolumeOn == mAlarmInfo.volumeStatus) {
- mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[0]);
- mAlarmSoundItem->setContentWidgetData(
- "additionalText", alarmSoundOptions[1]);
- } else {
- mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[1]);
- mAlarmSoundItem->setContentWidgetData(
- "additionalText", alarmSoundOptions[0]);
+ mAlarmSoundItem->setContentWidgetData("checkState",Qt::Checked);
}
+ mAlarmEditorForm->addConnection(
+ mAlarmSoundItem, SIGNAL(stateChanged(int)),
+ this,SLOT(handleAlarmSoundChanged(int)));
+
// Description.
mAlarmDescription = mAlarmEditorModel->appendDataFormItem(
HbDataFormModelItem::TextItem,
@@ -592,36 +588,20 @@
mAlarmInfo.alarmDateTime = mAlarmInfo.alarmDateTime.addDays(1);
}
- // Set the alarm volume on by default.
- mAlarmInfo.volumeStatus = AlarmVolumeOn;
+ if (!mAlarmId) {
+ // Set the alarm volume On by default for new alarms..
+ mAlarmInfo.volumeStatus = AlarmVolumeOn;
+ }
// If editor state is a reset alarm, then its an already existing alarm
// get the alarm details and fill it in mAlarmInfo.
- if (mAlarmId && mAlarmClient) {
- mAlarmClient->getAlarmInfo(mAlarmId, mAlarmInfo);
- mAlarmClient->deleteAlarm(mAlarmId);
+ if (mAlarmId) {
+ mAlarmClient.getAlarmInfo(mAlarmId, mAlarmInfo);
+ mAlarmClient.deleteAlarm(mAlarmId);
}
}
/*!
- Creates menu items.
- */
-void ClockAlarmEditor::createMenu()
-{
- // Set the menu for the alarm editor.
- mDeleteAction = menu()->addAction(hbTrId("txt_clock_opt_delete"));
- mDiscardAction = menu()->addAction(hbTrId("txt_clock_opt_discard_changes"));
-
- // Connect the signals for the menu item.
- connect(
- mDeleteAction, SIGNAL(triggered()),
- this, SLOT(handleDeleteAction()));
- connect(
- mDiscardAction, SIGNAL(triggered()),
- this, SLOT(handleDiscardAction()));
-}
-
-/*!
Sets the alarm to the alarm server.
*/
void ClockAlarmEditor::setAlarm(
@@ -653,7 +633,7 @@
alarmInfo.volumeStatus = mAlarmInfo.volumeStatus;
// Request the listener to set the alarm.
- mAlarmClient->setAlarm(alarmInfo);
+ mAlarmClient.setAlarm(alarmInfo);
// Check if DST rule gets applied in 24hrs.
// If so we don't display the remaining time.
@@ -715,9 +695,8 @@
{
// Remove the alarm editor.
HbMainWindow *window = hbInstance->allMainWindows().first();
-
- window->removeView(this);
- window->setCurrentView(mPreviousView);
+ window->removeView(mAlarmEditorView);
+ deleteLater();
}
/*!
@@ -733,7 +712,7 @@
hbTrId("txt_clock_dpopinfo_alarm_will_occur_at_1_after_au");
QString displayText = dstRollOverText.arg(alarmTime);
// show the note
- HbNotificationDialog::launchDialog(displayText);
+ launchDialog(displayText);
}
/*!
@@ -797,7 +776,6 @@
break;
}
if (Enabled == alarmInfo.alarmStatus && !(displayText.isEmpty())) {
- //HbNotificationDialog::launchDialog(displayText);
showDisplayText = true;
}
@@ -870,17 +848,16 @@
&& !(remainingTimeText.isEmpty())) {
if (!(displayText.isEmpty()) ) {
- HbNotificationDialog::launchDialog(
- displayText, remainingTimeText);
+ launchDialog(displayText, remainingTimeText);
showDisplayText = false;
}
else {
- HbNotificationDialog::launchDialog(remainingTimeText);
+ launchDialog(remainingTimeText);
}
}
}
if (showDisplayText) {
- HbNotificationDialog::launchDialog(displayText);
+ launchDialog(displayText);
}
}
@@ -941,4 +918,35 @@
return remainingSeconds;
}
+/*!
+ Launches the soft notification.
+ */
+void ClockAlarmEditor::launchDialog(QString title, QString text)
+{
+ HbNotificationDialog *notificationDialog = new HbNotificationDialog();
+ notificationDialog->setTitle(title);
+
+ if (!text.isNull()) {
+ notificationDialog->setText(text);
+ }
+
+ notificationDialog->setTimeout(HbPopup::ConfirmationNoteTimeout);
+ notificationDialog->show();
+}
+
+/*!
+ Sorts and appends alarm days on the basis of start of week.
+ */
+void ClockAlarmEditor::sortAlarmDaysList(QStringList& alarmDaysList)
+
+{
+ for(int index=(mStartOfWeek + 1),j=KDaysInWeek;j!=0 ;index++,j--){
+ if(index > KDaysInWeek){
+ index = index - KDaysInWeek;
+ }
+ QString alarmDayText;
+ getDayText(index, alarmDayText );
+ alarmDaysList.append(alarmDayText);
+ }
+}
// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockappcontroller/bwins/clockappcontrolleru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,7 @@
+EXPORTS
+ _ZN18ClockAppControllerC1EP7QObject @ 1 NONAME
+ _ZN18ClockAppControllerC2EP7QObject @ 2 NONAME
+ _ZN18ClockAppControllerD0Ev @ 3 NONAME
+ _ZN18ClockAppControllerD1Ev @ 4 NONAME
+ _ZN18ClockAppControllerD2Ev @ 5 NONAME
+
--- a/clock/clockui/clockappcontroller/src/clockappcontroller.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockappcontroller/src/clockappcontroller.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -15,9 +15,6 @@
*
*/
-// System includes
-#include <QDebug>
-
// User includes
#include "clockappcontroller.h"
#include "clockappcontrollerifimpl.h"
@@ -38,8 +35,6 @@
mViewManager(0),
mIfImpl(0)
{
- qDebug() << "clock: ClockAppController::ClockAppController -->";
-
// Construct the interface implementation.
mIfImpl = new ClockAppControllerIfImpl(this, this);
@@ -48,8 +43,6 @@
Q_ASSERT_X(
mViewManager, "clockappcontroller.cpp",
"ClockViewManager is 0");
-
- qDebug() << "clock: ClockAppController::ClockAppController <--";
}
/*!
@@ -57,8 +50,6 @@
*/
ClockAppController::~ClockAppController()
{
- qDebug() << "clock: ClockAppController::~ClockAppController -->";
-
if (mViewManager) {
delete mViewManager;
mViewManager = 0;
@@ -67,8 +58,6 @@
delete mIfImpl;
mIfImpl = 0;
}
-
- qDebug() << "clock: ClockAppController::~ClockAppController <--";
}
// End of file --Don't remove this.
--- a/clock/clockui/clockappcontroller/src/clockappcontrollerifimpl.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockappcontroller/src/clockappcontrollerifimpl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -16,9 +16,6 @@
*
*/
-// System includes
-#include <QDebug>
-
// User includes
#include "clockappcontrollerifimpl.h"
#include "clockappcontroller.h"
@@ -46,16 +43,12 @@
:QObject(parent),
mAppController(controller)
{
- qDebug() << "clock: ClockAppControllerIfImpl::ClockAppControllerIfImpl -->";
-
// Construct the timezone client.
- mTimeZoneClient = new TimezoneClient(this);
+ mTimeZoneClient = TimezoneClient::getInstance();
// Construct the settings utility object.
mSettingsUtility = new SettingsUtility(this);
// Construct the alarm client object.
mAlarmClient = new AlarmClient(this);
-
- qDebug() << "clock: ClockAppControllerIfImpl::ClockAppControllerIfImpl <--";
}
/*!
@@ -63,11 +56,8 @@
*/
ClockAppControllerIfImpl::~ClockAppControllerIfImpl()
{
- qDebug() << "clock: ClockAppControllerIfImpl::~ClockAppControllerIfImpl -->";
-
- if (mTimeZoneClient) {
- delete mTimeZoneClient;
- mTimeZoneClient = 0;
+ if (!mTimeZoneClient->isNull()) {
+ mTimeZoneClient->deleteInstance();
}
if (mSettingsUtility) {
delete mSettingsUtility;
@@ -77,8 +67,6 @@
delete mAlarmClient;
mAlarmClient = 0;
}
-
- qDebug() << "clock: ClockAppControllerIfImpl::~ClockAppControllerIfImpl <--";
}
@@ -91,10 +79,6 @@
*/
TimezoneClient* ClockAppControllerIfImpl::timezoneClient()
{
- qDebug() << "clock: ClockAppControllerIfImpl::timezoneClient -->";
-
- qDebug() << "clock: ClockAppControllerIfImpl::timezoneClient <--";
-
return mTimeZoneClient;
}
@@ -107,10 +91,6 @@
*/
SettingsUtility* ClockAppControllerIfImpl::settingsUtility()
{
- qDebug() << "clock: ClockAppControllerIfImpl::settingsUtility -->";
-
- qDebug() << "clock: ClockAppControllerIfImpl::settingsUtility <--";
-
return mSettingsUtility;
}
@@ -123,10 +103,6 @@
*/
AlarmClient* ClockAppControllerIfImpl::alarmClient()
{
- qDebug() << "clock: ClockAppControllerIfImpl::alarmClient -->";
-
- qDebug() << "clock: ClockAppControllerIfImpl::alarmClient <--";
-
return mAlarmClient;
}
@@ -139,11 +115,7 @@
*/
void ClockAppControllerIfImpl::switchToView(ClockViews viewId)
{
- qDebug() << "clock: ClockAppControllerIfImpl::switchToView -->";
-
mAppController->mViewManager->showView(viewId);
-
- qDebug() << "clock: ClockAppControllerIfImpl::switchToView <--";
}
// End of file --Don't remove this.
--- a/clock/clockui/clockapplication/clockapplication.pro Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockapplication/clockapplication.pro Mon Jun 28 15:22:02 2010 +0530
@@ -34,6 +34,8 @@
LIBS += \
-lclockappcontroller
+
+ SKINICON = qtg_large_clock
}
SOURCES += main.cpp
--- a/clock/clockui/clockapplication/src/main.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockapplication/src/main.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -18,7 +18,7 @@
// System includes
#include <QtGui>
#include <QScopedPointer>
-#include <QTranslator>
+#include <HbTranslator>
#include <HbApplication>
#include <HbMainWindow>
@@ -32,8 +32,6 @@
*/
int main(int argc, char *argv[])
{
- qDebug("clock: main() -->");
-
// Initialization
HbApplication app(argc, argv);
@@ -45,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)
@@ -56,8 +53,6 @@
// Show widget
window.show();
- qDebug("clock: main() <--");
-
// Enter event loop
return app.exec();
}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockcityselectionlist/bwins/clockcityselectionlistu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockcityselectionlist/clockcityselectionlist.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockcityselectionlist/data/clockcityselectionlist.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,459 +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_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_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_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_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_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_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_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_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_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_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_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_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_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="yes" id="txt_clock_list_ln_minutes">
- <comment>Alarm snooze time details in the list box (5mins, 10mins, 15mins, 30mins)</comment>
- <source>%Ln minutes</source>
- <translation>
- <numerusform variants="no">(s)%Ln minutes</numerusform>
- <numerusform variants="no">(p)%Ln minutes</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_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_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_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_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_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_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_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_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_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>
-<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_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_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_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_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_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_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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockcityselectionlist/data/xml/clockcityselectionlist.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,46 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <object name="addOwnCityAction" type="HbAction">
+ <string name="text" value="Add own city"/>
+ </object>
+ <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="heading" value="City list"/>
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <widget name="cityListView" type="HbListView">
+ <widget name="prototype" role="HbListView:prototype" type="HbListViewItem">
+ <string name="state" value="normal"/>
+ </widget>
+ <real name="z" value="1"/>
+ </widget>
+ <widget name="lineEdit" type="HbSearchPanel">
+ <real name="z" value="2"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="subtitleGroupBox" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="subtitleGroupBox" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="subtitleGroupBox" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="cityListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="cityListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="cityListView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="lineEdit" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="lineEdit" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="lineEdit" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="cityListView" dstEdge="BOTTOM" spacing="0un" src="lineEdit" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="addOwnCityAction" role="HbMenu:addAction"/>
+ </widget>
+ <string locid="txt_common_common_clock" name="title" value="Clock"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="portrait" sections="#common"/>
+ <uistate name="landscape" sections="#common"/>
+ <dummydata objectName="cityListView" section="#common" value="0"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockcityselectionlist/eabi/clockcityselectionlistu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockcityselectionlist/inc/clockcityselectionlist.h Mon Jun 28 15:22:02 2010 +0530
@@ -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/clockcityselectionlist_p.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockcityselectionlist/inc/clockcityselectionlist_p.h Mon Jun 28 15:22:02 2010 +0530
@@ -58,8 +58,8 @@
void updateSearchCriteria(const QString &criteria);
void handleAddOwnCityAction();
void handleOkAction();
- void handleCancelAction();
void handleTimeZoneSelection(int index);
+ void selectedAction(HbAction *action);
private:
void showCityList();
@@ -81,6 +81,9 @@
QPointer<HbComboBox> mTimeZoneComboBox;
QPointer<HbComboBox> mCountryComboBox;
+ HbAction *mOkAction;
+ HbAction *mCancelAction;
+
ClockCitySelectionList *q_ptr;
TimezoneClient *mClient;
ClockCityListProxyModel *mProxyModel;
--- a/clock/clockui/clockcityselectionlist/inc/clockcityselectionlistprototype.h Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockcityselectionlist/src/clockcityselectionlist.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockcityselectionlist/src/clockcityselectionlist_p.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -40,7 +40,7 @@
#include "clockcityselectionlist.h"
#include "clockcitylistproxymodel.h"
#include "clockcityselectionlistcommon.h"
-#include "clockcityselectionlistprototype.h"
+
#include "timezoneclient.h"
#include "clockdatatypes.h"
@@ -67,7 +67,7 @@
mClient = client;
if (!mClient) {
- mClient = new TimezoneClient(this);
+ mClient = TimezoneClient::getInstance();
mOwnsClient = true;
}
}
@@ -78,7 +78,7 @@
ClockCitySelectionListPrivate::~ClockCitySelectionListPrivate()
{
if (mOwnsClient) {
- delete mClient;
+ mClient->deleteInstance();
}
if (mLoader) {
mLoader->reset();
@@ -103,7 +103,7 @@
void ClockCitySelectionListPrivate::populateListModel()
{
// First get the data from the timezone client.
- QList<LocationInfo> infoList = mClient->getLocations();
+ QList<LocationInfo> &infoList = mClient->getLocations();
// Sanity check.
if (!mListModel) {
@@ -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.
@@ -135,6 +136,9 @@
mListModel->setData(
index, info.countryName, Qt::UserRole + 104);
}
+
+ // Cleanup.
+ infoList.clear();
}
/*!
@@ -241,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"));
@@ -273,20 +278,14 @@
widget->setLayout(layout);
// Add actions to the dialog
- HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
- mAddOwnCityDialog->setPrimaryAction(okAction);
- connect(
- okAction, SIGNAL(triggered()),
- this, SLOT(handleOkAction()));
+ mOkAction = new HbAction(hbTrId("txt_common_button_ok"));
+ mCancelAction = new HbAction(hbTrId("txt_common_button_cancel"));
- HbAction *cancelAction = new HbAction(hbTrId("txt_common_button_cancel"));
- mAddOwnCityDialog->setSecondaryAction(cancelAction);
- connect(
- cancelAction, SIGNAL(triggered()),
- this, SLOT(handleCancelAction()));
+ mAddOwnCityDialog->addAction(mOkAction);
+ mAddOwnCityDialog->addAction(mCancelAction);
mAddOwnCityDialog->setContentWidget(widget);
- mAddOwnCityDialog->exec();
+ mAddOwnCityDialog->open(this, SLOT(selectedAction(HbAction*)));
}
/*!
@@ -321,21 +320,6 @@
populateListModel();
}
}
-
- // Close the popup
- handleCancelAction();
-}
-
-/*!
- Handles Cancel action of add own city dialog
- */
-void ClockCitySelectionListPrivate::handleCancelAction()
-{
- // Close the dialog.
- if (mAddOwnCityDialog) {
- mAddOwnCityDialog->close();
- mAddOwnCityDialog->deleteLater();
- }
}
/*!
@@ -364,6 +348,15 @@
}
/*!
+ Slot to handle the selected action
+ */
+void ClockCitySelectionListPrivate::selectedAction(HbAction *action)
+{
+ if (action==mOkAction) {
+ handleOkAction();
+ }
+}
+/*!
Displays the city selection list.
*/
void ClockCitySelectionListPrivate::showCityList()
@@ -399,7 +392,7 @@
connect(
mSearchBox, SIGNAL(criteriaChanged(QString)),
this, SLOT(updateSearchCriteria(QString)));
-
+
// Construct the source model.
if (!mListModel) {
mListModel = new QStandardItemModel(0, 1, this);
@@ -410,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()));
@@ -441,7 +425,7 @@
// Add the view to the main window and show it.
HbMainWindow *window = hbInstance->allMainWindows().at(0);
- mBackAction = new HbAction(Hb::BackAction, this);
+ mBackAction = new HbAction(Hb::BackNaviAction, this);
mView->setNavigationAction(mBackAction);
connect(
mBackAction, SIGNAL(triggered()),
--- a/clock/clockui/clockcityselectionlist/src/clockcityselectionlistprototype.cpp Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockplugins/clockplugins.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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/datetimesettingsplugin.pro Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockplugins/datetimesettingsplugin/datetimesettingsplugin.pro Mon Jun 28 15:22:02 2010 +0530
@@ -17,31 +17,35 @@
TEMPLATE = lib
TARGET = datetimesettingsplugin
+CONFIG += hb plugin
+
DEPENDPATH += . \
./inc \
./src
+
INCLUDEPATH += . \
- ../../clocksettingsview/inc
-
-CONFIG += hb plugin
-
-LIBS += -lcpframework
+ ../../../inc \
+ ../../../clockmw/clocktimezone/inc \
+ ../../clocksettingsview/inc
-# Input
-HEADERS += datetimesettingsplugin.h \
- datetimesettingsview.h
+LIBS += \
+ -lcpframework \
+ -ltimezoneclient \
+ -lclocksettingsview \
+
+HEADERS += \
+ datetimesettingsplugin.h \
+ datetimesettingsview.h
-SOURCES += datetimesettingsplugin.cpp \
- datetimesettingsview.cpp
+SOURCES += \
+ datetimesettingsplugin.cpp \
+ datetimesettingsview.cpp
symbian: {
TARGET.EPOCALLOWDLLDATA = 1
TARGET.UID3 = 0x102818E9
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
- LIBS += -lclocksettingsview
-}
-
-symbian {
deploy.path = C:
headers.sources = qmakepluginstubs/datetimesettingsplugin.qtplugin
headers.path = /resource/qt/plugins/controlpanel
@@ -49,9 +53,9 @@
# This is for new exporting system coming in garden
for(header, headers.sources):BLD_INF_RULES.prj_exports += "./$$header $$deploy.path$$headers.path/$$basename(header)"
}
-
-TARGET.CAPABILITY = CAP_GENERAL_DLL
plugin.sources = datetimesettingsplugin.dll
plugin.path = \resource\qt\plugins\controlpanel
-DEPLOYMENT += plugin
\ No newline at end of file
+DEPLOYMENT += plugin
+
+# End of file --Don't remove this.
--- a/clock/clockui/clockplugins/datetimesettingsplugin/inc/datetimesettingsplugin.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockplugins/datetimesettingsplugin/inc/datetimesettingsplugin.h Mon Jun 28 15:22:02 2010 +0530
@@ -10,29 +10,35 @@
* Nokia Corporation - initial contribution.
*
* Contributors:
- *
- * Description:
- *
+*
+* Description:
+* Header file for DateTimeSettingsPlugin class.
+*
*/
#ifndef DATETIMESETTINGSPLUGIN_H_
#define DATETIMESETTINGSPLUGIN_H_
-#include <cppluginplatinterface.h>
-#include <qobject.h>
+// System includes
+#include <QObject>
-class DateTimeSettingsPlugin : public QObject, public CpPluginPlatInterface
+// User includes
+#include <cpplugininterface.h>
+
+class DateTimeSettingsPlugin : public QObject, public CpPluginInterface
{
Q_OBJECT
- Q_INTERFACES(CpPluginPlatInterface)
+ Q_INTERFACES(CpPluginInterface)
public:
DateTimeSettingsPlugin();
- virtual ~DateTimeSettingsPlugin();
+ virtual ~DateTimeSettingsPlugin();
- virtual int uid() const;
- virtual CpSettingFormItemData *createSettingFormItemData(CpItemDataHelper &itemDataHelper) const;
+ virtual int uid() const;
+ QList<CpSettingFormItemData*> createSettingFormItemData(CpItemDataHelper &itemDataHelper) const;
};
#endif /* DATETIMESETTINGSPLUGIN_H_ */
+
+// End of file --Don't remove this
--- a/clock/clockui/clockplugins/datetimesettingsplugin/inc/datetimesettingsview.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockplugins/datetimesettingsplugin/inc/datetimesettingsview.h Mon Jun 28 15:22:02 2010 +0530
@@ -10,22 +10,46 @@
* Nokia Corporation - initial contribution.
*
* Contributors:
- *
- * Description:
- *
+*
+* Description:
+* Header file for DateTimeSettingsView class.
+*
*/
#ifndef DATETIMESETTINGSVIEW_H_
#define DATETIMESETTINGSVIEW_H_
-#include <cpbasesettingview.h>
+// User includes
+#include <cpsettingformentryitemdata.h>
-class DateTimeSettingsView : public CpBaseSettingView
+// Forward declarations
+class QTimer;
+class TimezoneClient;
+
+class DateTimeSettingsView : public CpSettingFormEntryItemData
{
- Q_OBJECT
+ Q_OBJECT
public:
- explicit DateTimeSettingsView(QGraphicsItem *parent = 0);
- virtual ~DateTimeSettingsView();
+ explicit DateTimeSettingsView(
+ CpItemDataHelper &itemDataHelper, const QString &text = QString(),
+ const QString &description = QString(),
+ const HbIcon &icon = HbIcon(),
+ const HbDataFormModelItem *parent = 0);
+ virtual ~DateTimeSettingsView();
+
+private slots:
+ void onLaunchView();
+ void updateDisplayTime();
+
+private:
+ virtual CpBaseSettingView *createSettingView() const;
+
+private:
+ QTimer *mTickTimer;
+ TimezoneClient *mTimezoneClient;
};
-#endif// DATETIMESETTINGSVIEW_H_
+
+#endif // DATETIMESETTINGSVIEW_H_
+
+// End of file --Don't remove this
--- a/clock/clockui/clockplugins/datetimesettingsplugin/src/datetimesettingsplugin.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockplugins/datetimesettingsplugin/src/datetimesettingsplugin.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -10,40 +10,69 @@
* Nokia Corporation - initial contribution.
*
* Contributors:
- *
- * Description:
- *
+*
+* Description:
+* Definition file for class DateTimeSettingsPlugin.
+*
*/
-
+// System includes
+#include <QDateTime>
#include <cpsettingformentryitemdataimpl.h>
+#include <HbExtendedLocale>
+// User includes
#include "datetimesettingsplugin.h"
#include "datetimesettingsview.h"
+/*!
+ Constructor.
+ */
DateTimeSettingsPlugin::DateTimeSettingsPlugin()
{
}
+/*!
+ Destructor.
+ */
DateTimeSettingsPlugin::~DateTimeSettingsPlugin()
{
}
+/*!
+ Returns the uid of the plugin.
+ */
int DateTimeSettingsPlugin::uid() const
{
// UID of the plugin.
- return 0x102818E9;
+ return 0x102818E9;
}
-CpSettingFormItemData *DateTimeSettingsPlugin::
- createSettingFormItemData(
- CpItemDataHelper &itemDataHelper) const
+/*!
+ Creates the object of DateTimeSettingsView class.
+ */
+QList<CpSettingFormItemData*> DateTimeSettingsPlugin::
+ createSettingFormItemData(
+ CpItemDataHelper &itemDataHelper) const
{
- HbIcon* icon = new HbIcon();
- return new CpSettingFormEntryItemDataImpl<DateTimeSettingsView>(
- itemDataHelper,
- QString("Clock application"),
- QString("Date & Time settings plugin"),
- *icon);
+ HbIcon icon ;
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ QString timeInfo = locale.format(
+ QTime::currentTime(), r_qtn_time_usual_with_zero);
+ QString dateinfo = locale.format(
+ QDate::currentDate(), r_qtn_date_usual_with_zero);
+ QString displayString;
+ displayString.append(timeInfo);
+ displayString.append(" ");
+ displayString.append(dateinfo);
+
+ QList<CpSettingFormItemData*> entryItemList;
+ CpSettingFormItemData *entryItem = new DateTimeSettingsView(
+ itemDataHelper,hbTrId("txt_cp_main_view_list_time_date"),
+ displayString,icon);
+ entryItemList.append(entryItem);
+ return entryItemList;
}
Q_EXPORT_PLUGIN2(DateTimeSettingsPlugin, DateTimeSettingsPlugin)
+
+// End of file --Don't remove this
--- a/clock/clockui/clockplugins/datetimesettingsplugin/src/datetimesettingsview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockplugins/datetimesettingsplugin/src/datetimesettingsview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -12,28 +12,108 @@
* Contributors:
*
* Description:
-* Definition file for class ClockSettingsView.
+* Definition file for class DateTimeSettingsView.
*
*/
+// System includes
+#include <QTimer>
+#include <QDateTime>
+#include <HbExtendedLocale>
+#include <cpitemdatahelper.h>
-#include <hbdataform.h>
+// User includes
#include "datetimesettingsview.h"
#include "clocksettingsview.h"
+#include "timezoneclient.h"
-DateTimeSettingsView::DateTimeSettingsView(QGraphicsItem *parent)
-:CpBaseSettingView(0, parent)
-{
- HbDataForm *form = settingForm();
+/*!
+ \class DateTimeSettingsView
+
+ This class launches the clock settings view from control panel.
+ */
+
+/*!
+ Constructor.
- if (form) {
- form->setHeading(tr("Date & Time Settings"));
+ \param itemDataHelper CpItemDataHelper object.
+ \param text text to be displayed in first line.
+ \param description test to be displayed in second line.
+ \param icon to be displayed.
+ \param parent Parent of type HbDataFormModelItem
+ */
+DateTimeSettingsView::DateTimeSettingsView(
+ CpItemDataHelper &itemDataHelper, const QString &text,
+ const QString &description, const HbIcon &icon,
+ const HbDataFormModelItem *parent):
+ CpSettingFormEntryItemData(
+ itemDataHelper, text, description, icon, parent)
+{
+ // Construct the timezone client.
+ mTimezoneClient = TimezoneClient::getInstance();
+ connect(
+ mTimezoneClient, SIGNAL(timechanged()),
+ this, SLOT(updateDisplayTime()));
- ClockSettingsView *settingsView = new ClockSettingsView(this);
- settingsView->loadSettingsView();
- }
+ // Start a timer. For updating the displayed time.
+ mTickTimer = new QTimer(this);
+ // Start the Timer for 1 minute.
+ mTickTimer->start(60000 - 1000 * QTime::currentTime().second());
+ connect(
+ mTickTimer, SIGNAL(timeout()),
+ this, SLOT(updateDisplayTime()));
}
+/*!
+ Destructor.
+ */
DateTimeSettingsView::~DateTimeSettingsView()
{
+ if (mTickTimer) {
+ mTickTimer->stop();
+ delete mTickTimer;
+ mTickTimer = 0;
+ }
+
+ if (!mTimezoneClient->isNull()) {
+ mTimezoneClient->deleteInstance();
+ }
}
+
+/*!
+ Launches the clock settings view.
+ */
+void DateTimeSettingsView::onLaunchView()
+{
+ ClockSettingsView *settingsView = new ClockSettingsView(this);
+ settingsView->loadSettingsView();
+}
+
+/*!
+ Updates the second line i.e date & time.
+ */
+void DateTimeSettingsView::updateDisplayTime()
+{
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ QString timeInfo = locale.format(
+ QTime::currentTime(), r_qtn_time_usual_with_zero);
+ QString dateinfo = locale.format(
+ QDate::currentDate(), r_qtn_date_usual_with_zero);
+ QString displayString;
+ displayString.append(timeInfo);
+ displayString.append(" ");
+ displayString.append(dateinfo);
+ setDescription(displayString);
+ // Start the Timer for 1 minute.
+ mTickTimer->start(60000);
+}
+
+/*!
+ createSettingView()
+ */
+CpBaseSettingView *DateTimeSettingsView::createSettingView() const
+{
+ return 0;
+}
+
+// End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/bwins/clocksettingsviewu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/clocksettingsview.pro Mon Jun 28 15:22:02 2010 +0530
@@ -23,12 +23,12 @@
INCLUDEPATH += \
./inc \
- ../clockwidget/inc \
../../clockmw/clocksettingsutility/inc \
../../clockmw/clocktimezone/inc \
../clockcityselectionlist/inc \
../../inc
+
DEPENDPATH += \
./inc \
./src \
@@ -38,12 +38,13 @@
TARGET.CAPABILITY += ALL -TCB
TARGET.EPOCALLOWDLLDATA = 1
TARGET.UID3 = 0x10005906
+ INCLUDEPATH += $$APP_LAYER_SYSTEMINCLUDE
LIBS += \
-ltimezoneclient \
-lclocksettingsutility \
-lclockcityselectionlist \
- -lclockwidgetproto
+ -lxqsettingsmanager
}
SOURCES += \
@@ -61,5 +62,7 @@
RESOURCES += \
clocksettingsview.qrc
+
+TRANSLATIONS += clocksettingsview.ts
# End of file --Don't remove this.
--- a/clock/clockui/clocksettingsview/data/clocksettingsview.qrc Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/data/clocksettingsview.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,349 +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_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_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_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_Date & time settings_P04_1</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_Date & time settings_P04_1</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="yes" id="txt_clock_list_ln_minutes">
- <comment>Alarm snooze time details in the list box (5mins, 10mins, 15mins, 30mins)</comment>
- <source>%Ln minutes</source>
- <translation>
- <numerusform variants="no">(s)%Ln minutes</numerusform>
- <numerusform variants="no">(p)%Ln minutes</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_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_Date & time settings_P04_1</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_Date & time settings_P04_1</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_Date & time settings_P04_1</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_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_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_Date & time settings_P04_1</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_Date & time settings_P04_1</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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/data/xml/clockregionalsettingsview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,32 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.8">
+ <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="heading" value="Regional date & time setting"/>
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <widget name="dataForm" type="HbDataForm">
+ <real name="z" value="2"/>
+ <string name="description" value=""/>
+ <string name="heading" value=""/>
+ </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="dataForm" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dataForm" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="dataForm" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="dataForm" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <string locid="txt_common_common_clock" name="title" value="Clock"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="QHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="portrait" sections="#common"/>
+ <uistate name="landscape" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/data/xml/clocksettingsview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,59 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <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="heading" value="Settings"/>
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <widget name="dataForm" type="HbDataForm">
+ <real name="z" value="11"/>
+ <string name="description" value=""/>
+ <string name="heading" value=""/>
+ </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="dataForm" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dataForm" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="dataForm" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="dataForm" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
+ <string locid="txt_common_common_clock" name="title" value="Clock"/>
+ </widget>
+ <section name="landscape">
+ <widget name="clockSettingsViewWidget" role="HbView:widget" type="HbWidget">
+ <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="dataForm" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dataForm" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="dataForm" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="dataForm" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ </section>
+ <section name="portrait">
+ <widget name="clockSettingsViewWidget" role="HbView:widget" type="HbWidget">
+ <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="dataForm" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="dataForm" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="dataForm" dstEdge="RIGHT" spacing="-0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="dataForm" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ </section>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="portrait" sections="#common portrait"/>
+ <uistate name="landscape" sections="#common landscape"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/eabi/clocksettingsviewu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/inc/clockregionalsettingsview.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/inc/clocksettingsview.h Mon Jun 28 15:22:02 2010 +0530
@@ -33,14 +33,13 @@
class HbDataFormModel;
class HbDataFormModelItem;
class HbLabel;
-
class TimezoneClient;
class SettingsUtility;
-class SkinnableClock;
class ClockSettingsDocLoader;
class ClockSettingsView;
-class SkinnableClock;
-class QTranslator;
+class HbTranslator;
+class XQSettingsManager;
+class XQSettingsKey;
class ClockSettingsView : public QObject
{
@@ -55,13 +54,15 @@
private slots:
void handleBackAction();
- void updateDateLabel();
- void updatePlaceInfo();
- void updateClockWidget();
+ void updatePlaceItem();
void updateDateItem();
void updateTimeItem();
void handleOrientationChanged(Qt::Orientation orientation);
void handleNetworkTimeStateChange(int state);
+ void handleAutoTimeUpdateChange(int value);
+ void handleAlarmSnoozeTimeChanged(int index);
+ void handleClockTypeChanged();
+ void eventMonitor(const XQSettingsKey& key, const QVariant& value);
private:
void setupView();
@@ -78,20 +79,19 @@
QPointer<HbDataFormModel> mSettingsModel;
-
- HbLabel *mDayDateLabel;
- HbLabel *mPlaceLabel;
-
HbDataFormModelItem *mNetworkTimeItem;
HbDataFormModelItem *mTimeDataFormItem;
HbDataFormModelItem *mDateDataFormItem;
HbDataFormModelItem *mPlaceDataFormItem;
-
+ HbDataFormModelItem *mClockTypeItem;
+ HbDataFormModelItem *mAlarmSnoozeItem;
ClockSettingsDocLoader *mDocLoader;
SettingsUtility *mSettingsUtility;
- TimezoneClient *mTimezoneClient;
- SkinnableClock *mClockWidget;
- QTranslator *mTranslator;
+ TimezoneClient *mTimezoneClient;
+ XQSettingsManager *mSettingsManager;
+ XQSettingsKey *mAlarmSnoozeTimeKey;
+ QHash<int, int> mAlarmSnoozeTimeHash;
+ HbTranslator *mTranslator;
};
#endif // CLOCKSETTINGSVIEW_H
--- a/clock/clockui/clocksettingsview/inc/settingscustomitem.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/inc/settingscustomitem.h Mon Jun 28 15:22:02 2010 +0530
@@ -53,21 +53,13 @@
private slots:
void launchTimePicker();
- void handleTimeOkAction();
- void handleTimeCancelAction();
-
+ void handleOkAction();
void launchDatePicker();
- void handleDateOkAction();
- void handleDateCancelAction();
-
void launchCitySelectionList();
void updatePlaceItem(LocationInfo info);
+ void launchRegSettingsView();
+ void selectedAction(HbAction *action);
- void launchRegSettingsView();
-
-private:
-
-
private:
QStringList mWeekdaysList;
@@ -77,6 +69,9 @@
QPointer<HbPushButton> mDateWidget;
QPointer<HbPushButton> mPlaceWidget;
+ HbAction *mOkAction;
+ HbAction *mCancelAction;
+
SettingsUtility *mSettingsUtility;
ClockCitySelectionList *mCitySelectionList;
TimezoneClient *mTimezoneClient;
--- a/clock/clockui/clocksettingsview/src/clockregionalsettingsview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/src/clockregionalsettingsview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 <HbListWidgetItem>
+#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::BackAction);
- 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);
}
/*!
@@ -271,8 +273,6 @@
void ClockRegionalSettingsView::handleDataChanged(
const QModelIndex& topLeft, const QModelIndex& bottomRight)
{
- qDebug("clock: ClockRegionalSettingsView::handleDataChanged() -->");
-
Q_UNUSED(bottomRight)
@@ -280,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;
@@ -350,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]);
@@ -372,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(
@@ -390,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);
@@ -402,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);
@@ -471,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/clocksettingsdocloader.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/src/clocksettingsdocloader.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -16,13 +16,9 @@
*
*/
-// System includes.
-#include <QDebug>
-
// User includes
#include "clocksettingsdocloader.h"
#include "clocksettingsdefines.h"
-#include "skinnableclock.h"
#include "clocksettingsview.h"
/*!
@@ -39,16 +35,6 @@
*/
QObject *ClockSettingsDocLoader::createObject(const QString &type, const QString &name)
{
- qDebug() << "clock: ClockSettingsDocLoader::createObject -->";
-
- if (CLOCK_WIDGET == name) {
- QObject *object = new SkinnableClock();
- object->setObjectName(name);
- return object;
- }
-
- qDebug() << "clock: ClockSettingsDocLoader::createObject <--";
-
return HbDocumentLoader::createObject(type, name);
}
--- a/clock/clockui/clocksettingsview/src/clocksettingsview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/src/clocksettingsview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -17,7 +17,6 @@
*/
// System includes
-#include <QDebug>
#include <HbInstance>
#include <HbDataForm>
#include <HbAction>
@@ -26,8 +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"
@@ -35,7 +36,6 @@
#include "clocksettingsdocloader.h"
#include "settingsutility.h"
#include "timezoneclient.h"
-#include "skinnableclock.h"
#include "settingsdatatypes.h"
#include "settingscustomitem.h"
@@ -54,37 +54,31 @@
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();
// Construct the timezone client.
- mTimezoneClient = new TimezoneClient();
+ mTimezoneClient = TimezoneClient::getInstance();
connect(
mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updatePlaceInfo()));
- connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateDateLabel()));
- connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateClockWidget()));
+ this, SLOT(updatePlaceItem()));
connect(
mTimezoneClient, SIGNAL(timechanged()),
this, SLOT(updateDateItem()));
connect(
mTimezoneClient, SIGNAL(timechanged()),
this, SLOT(updateTimeItem()));
+ connect(
+ mTimezoneClient, SIGNAL(autoTimeUpdateChanged(int)),
+ this, SLOT(handleAutoTimeUpdateChange(int)));
+ connect(
+ mTimezoneClient, SIGNAL(cityUpdated()),
+ this, SLOT(updatePlaceItem()));
// Start a timer. For updating the remaining alarm time.
mTickTimer = new QTimer(this);
@@ -92,7 +86,22 @@
mTickTimer, SIGNAL(timeout()),
this, SLOT(updateTimeItem()));
- qDebug("clock: ClockSettingsView::ClockSettingsView() <--");
+ // Create the settings manager.
+ mSettingsManager = new XQSettingsManager(this);
+
+ // Create the key for alarm snooze time.
+ mAlarmSnoozeTimeKey = new XQSettingsKey(
+ XQSettingsKey::TargetCentralRepository,
+ KCRUidClockApp,
+ KClockAppSnoozeTime);
+
+ // Start the monitoring for the alarm snooze time key.
+ mSettingsManager->startMonitoring(*mAlarmSnoozeTimeKey);
+
+ // Listen to the key value changes.
+ connect(
+ mSettingsManager, SIGNAL(valueChanged(XQSettingsKey, QVariant)),
+ this, SLOT(eventMonitor(XQSettingsKey, QVariant)));
}
/*!
@@ -100,20 +109,24 @@
*/
ClockSettingsView::~ClockSettingsView()
{
- qDebug("clock: ClockSettingsView::~ClockSettingsView() -->");
-
if (mDocLoader) {
delete mDocLoader;
}
// Remove the translator
- HbApplication::instance()->removeTranslator(mTranslator);
if (mTranslator) {
delete mTranslator;
mTranslator = 0;
}
+ if(mSettingsUtility){
+ delete mSettingsUtility;
+ }
+
+ if(mSettingsModel){
+ delete mSettingsModel;
+ }
+
- qDebug("clock: ClockSettingsView::~ClockSettingsView() <--");
}
/*!
@@ -121,8 +134,6 @@
*/
void ClockSettingsView::loadSettingsView()
{
- qDebug() << "clock: ClockViewManager::loadMainView -->";
-
bool loadSuccess;
// Construct the document loader instance
@@ -161,7 +172,6 @@
// Setup the view.
setupView();
- qDebug() << "clock: ClockViewManager::loadMainView <--";
}
/*!
@@ -175,109 +185,21 @@
}
/*!
- Updates the day and date in the day label.
+ Updates the zone info in the place item field.
*/
-void ClockSettingsView::updateDateLabel()
+void ClockSettingsView::updatePlaceItem()
{
- qDebug() << "clock: ClockSettingsView::updateDateLabel -->";
-
- // Get the current datetime.
- QDateTime dateTime = QDateTime::currentDateTime();
- // Get the day name.
- QString dayName = dateTime.toString("dddd");
- // Get the date in correct format.
- QString currentDate = mSettingsUtility->date();
- // Construct the day + date string.
- QString dayDateString;
- dayDateString+= dayName;
- dayDateString += " ";
- dayDateString += currentDate;
-
- mDayDateLabel->clear();
- mDayDateLabel->setPlainText(dayDateString);
-
- qDebug() << "clock: ClockSettingsView::updateDateLabel <--";
-}
-
-/*!
- Updates the zone info in the place label.
- */
-void ClockSettingsView::updatePlaceInfo()
-{
- qDebug() << "clock: ClockSettingsView::updateClockZoneInfo -->";
-
// Get the current zone info.
LocationInfo currentZoneInfo = mTimezoneClient->getCurrentZoneInfoL();
- // Construct the GMT +/- X string.
- QString gmtOffset;
-
- int utcOffset = currentZoneInfo.zoneOffset;
- int offsetInHours (utcOffset/60);
- int offsetInMinutes (utcOffset%60);
-
- // Check wether the offset is +ve or -ve.
- if (0 < utcOffset) {
- // We have a positive offset. Append the '+' character.
- gmtOffset += tr(" +");
- } else if (0 > utcOffset) {
- // We have a negative offset. Append the '-' character.
- gmtOffset += tr(" -");
- offsetInHours = -offsetInHours;
- } else {
- // We dont have an offset. We are at GMT zone.
- }
-
- // Append the hour component.
- gmtOffset += QString::number(offsetInHours);
-
- // Get the time separator from settings and append it.
- QStringList timeSeparatorList;
- int index = mSettingsUtility->timeSeparator(timeSeparatorList);
- gmtOffset += timeSeparatorList.at(index);
-
- // Append the minute component.
- // If minute component is less less than 10, append a '00'
- if (0 <= offsetInMinutes && offsetInMinutes < 10) {
- gmtOffset += tr("00");
- } else {
- gmtOffset += QString::number(offsetInMinutes);
- }
-
- gmtOffset += tr(" GMT ");
-
- // Append DST info.
- if (currentZoneInfo.dstOn) {
- gmtOffset += tr(" DST");
- }
-
- // Update the labels with the correct info.
- mPlaceLabel->clear();
if (mTimezoneClient->timeUpdateOn()) {
- mPlaceLabel->setPlainText(
- currentZoneInfo.countryName + tr(" ") + gmtOffset);
mPlaceDataFormItem->setContentWidgetData(
"text", currentZoneInfo.countryName);
} else {
QString placeInfo = currentZoneInfo.cityName
+ tr(", ") + currentZoneInfo.countryName;
- mPlaceLabel->setPlainText(placeInfo + tr(" ") + gmtOffset);
mPlaceDataFormItem->setContentWidgetData("text", placeInfo);
}
-
- qDebug() << "clock: ClockSettingsView::updateDayDateInfo <--";
-}
-
-/*!
- Updates the clock widget display.
- */
-void ClockSettingsView::updateClockWidget()
-{
- qDebug() << "clock: ClockSettingsView::updateClockWidget -->";
-
- mClockWidget->updateDisplay(true);
-
- qDebug() << "clock: ClockSettingsView::updateClockWidget <--";
}
/*!
@@ -307,8 +229,6 @@
*/
void ClockSettingsView::handleOrientationChanged(Qt::Orientation orientation)
{
- qDebug() << "clock: ClockSettingsView::handleOrientationChanged -->";
-
bool success;
// If horizontal, load the landscape section.
if (Qt::Horizontal == orientation) {
@@ -322,9 +242,6 @@
CLOCK_SETTINGS_VIEW_PORTRAIT_SECTION,
&success);
}
-
- qDebug() << "clock: ClockSettingsView::handleOrientationChanged <--";
-
}
void ClockSettingsView::handleNetworkTimeStateChange(int state)
@@ -333,36 +250,13 @@
if ((Qt::Checked == state && !cenrepValue)
|| (Qt::Unchecked == state && cenrepValue)) {
if (Qt::Checked == state) {
- // Disable the time, date and place item.
- if (mTimeDataFormItem) {
- mTimeDataFormItem->setEnabled(false);
- }
- if (mDateDataFormItem) {
- mDateDataFormItem->setEnabled(false);
- }
- if (mPlaceDataFormItem) {
- mPlaceDataFormItem->setEnabled(false);
- }
// Update the cenrep value.
mTimezoneClient->setTimeUpdateOn(true);
} else if (Qt::Unchecked == state) {
- // Enable the time, date and place item.
- if (mTimeDataFormItem) {
- mTimeDataFormItem->setEnabled(true);
- }
- if (mDateDataFormItem) {
- mDateDataFormItem->setEnabled(true);
- }
- if (mPlaceDataFormItem) {
- mPlaceDataFormItem->setEnabled(true);
- }
-
// Update the cenrep value.
mTimezoneClient->setTimeUpdateOn(false);
}
-
- updatePlaceInfo();
}
}
@@ -374,14 +268,12 @@
*/
void ClockSettingsView::setupView()
{
- qDebug("clock: ClockSettingsView::setupView() -->");
-
HbMainWindow *window = hbInstance->allMainWindows().first();
window->addView(mSettingsView);
window->setCurrentView(mSettingsView);
// Add the back softkey.
- mBackAction = new HbAction(Hb::BackAction);
+ mBackAction = new HbAction(Hb::BackNaviAction);
mSettingsView->setNavigationAction(mBackAction);
connect(
mBackAction, SIGNAL(triggered()),
@@ -391,34 +283,17 @@
mSettingsForm = static_cast<HbDataForm *> (
mDocLoader->findWidget(CLOCK_SETTINGS_DATA_FORM));
- // Get the day-date label.
- mDayDateLabel = static_cast<HbLabel *> (
- mDocLoader->findWidget(CLOCK_SETTINGS_DATE_LABEL));
-
- // Get the place label.
- mPlaceLabel = static_cast<HbLabel *> (
- mDocLoader->findWidget(CLOCK_SETTINGS_PLACE_LABEL));
-
- // Get the clock widget.
- mClockWidget = static_cast<SkinnableClock *> (
- mDocLoader->findObject(CLOCK_WIDGET));
-
// Create the custom prototype.
QList <HbAbstractViewItem*> prototypes = mSettingsForm->itemPrototypes();
- SettingsCustomItem *customPrototype = new SettingsCustomItem();
+ SettingsCustomItem *customPrototype = new SettingsCustomItem(mSettingsForm);
prototypes.append(customPrototype);
mSettingsForm->setItemPrototypes(prototypes);
// Create the model.
createModel();
- // Update the relevant info.
- updateDateLabel();
- updateClockWidget();
- updatePlaceInfo();
+ updatePlaceItem();
mTickTimer->start(60000 - 1000 * QTime::currentTime().second());
-
- qDebug("clock: ClockSettingsView::setupView() <--");
}
/*!
@@ -513,7 +388,147 @@
static_cast<HbDataFormModelItem::DataItemType>
(HbDataFormModelItem::CustomItemBase + RegionalSettingsItem);
mSettingsModel->appendDataFormItem(regionalSettingsItem);
+
+ // 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"));
+ QStringList alramSnoozeTimes;
+ alramSnoozeTimes << hbTrId("txt_clock_set_ln_mins", 5)
+ << hbTrId("txt_clock_set_ln_mins", 10)
+ << hbTrId("txt_clock_set_ln_mins", 15)
+ << hbTrId("txt_clock_set_ln_mins", 30);
+
+ // Build the hash map for the reminder.
+ mAlarmSnoozeTimeHash[0] = 5;
+ mAlarmSnoozeTimeHash[1] = 10;
+ mAlarmSnoozeTimeHash[2] = 15;
+ mAlarmSnoozeTimeHash[3] = 30;
+
+ mAlarmSnoozeItem->setContentWidgetData("items", alramSnoozeTimes);
+ QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeTimeKey);
+ bool success;
+ int index;
+ int alarmSnoozeTime = value.toInt(&success);
+ if (success) {
+ index = mAlarmSnoozeTimeHash.key(alarmSnoozeTime);
+ } else {
+ index = mAlarmSnoozeTimeHash.key(15);
+ }
+ mAlarmSnoozeItem->setContentWidgetData("currentIndex", index);
+ mSettingsForm->addConnection(
+ mAlarmSnoozeItem, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(handleAlarmSnoozeTimeChanged(int)));
}
+/*!
+ Slot which handles the auto time update value changes in cenrep.
+
+ /param value New value of the auto time update.
+ */
+void ClockSettingsView::handleAutoTimeUpdateChange(int value)
+{
+ int state = (mNetworkTimeItem->contentWidgetData("checkState")).toInt();
+
+ if (value) {
+ // Disable the time, date and place item.
+ if (mTimeDataFormItem) {
+ mTimeDataFormItem->setEnabled(false);
+ }
+ if (mDateDataFormItem) {
+ mDateDataFormItem->setEnabled(false);
+ }
+ if (mPlaceDataFormItem) {
+ mPlaceDataFormItem->setEnabled(false);
+ }
+ if (Qt::Unchecked == state) {
+ mNetworkTimeItem->setContentWidgetData(
+ "checkState", Qt::Checked);
+ }
+ } else {
+ // Enable the time, date and place item.
+ if (mTimeDataFormItem) {
+ mTimeDataFormItem->setEnabled(true);
+ }
+ if (mDateDataFormItem) {
+ mDateDataFormItem->setEnabled(true);
+ }
+ if (mPlaceDataFormItem) {
+ mPlaceDataFormItem->setEnabled(true);
+ }
+ if (Qt::Checked == state) {
+ mNetworkTimeItem->setContentWidgetData(
+ "checkState", Qt::Unchecked);
+ }
+ }
+ updatePlaceItem();
+}
+
+/*!
+ Slot which handles the alarm snooze time changes.
+
+ /param value New index of the alarm snooze time.
+ */
+void ClockSettingsView::handleAlarmSnoozeTimeChanged(int index)
+{
+ if (mAlarmSnoozeTimeHash.value(index)) {
+ mSettingsManager->writeItemValue(
+ *mAlarmSnoozeTimeKey, mAlarmSnoozeTimeHash.value(index));
+ }
+}
+
+/*!
+ 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.
+ \param value The new value of that key.
+ */
+void ClockSettingsView::eventMonitor(
+ const XQSettingsKey& key, const QVariant& value)
+{
+ if (key.uid() == KCRUidClockApp && key.key() == KClockAppSnoozeTime) {
+ if (mSettingsManager->error() == XQSettingsManager::NoError) {
+
+ bool success;
+ int alarmSnoozeTime = value.toInt(&success);
+
+ if (success) {
+ mAlarmSnoozeItem->setContentWidgetData(
+ "currentIndex", mAlarmSnoozeTimeHash.key(
+ alarmSnoozeTime));
+ }
+ }
+ }
+}
+
// End of file --Don't remove this.
--- a/clock/clockui/clocksettingsview/src/settingscustomitem.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clocksettingsview/src/settingscustomitem.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -54,6 +54,8 @@
{
// Construct the settignsutility.
mSettingsUtility = new SettingsUtility();
+ // Construct the timezone client.
+ mTimezoneClient = TimezoneClient::getInstance();
}
/*!
@@ -61,7 +63,7 @@
*/
SettingsCustomItem::~SettingsCustomItem()
{
-
+ // Nothing yet.
}
/*!
@@ -74,16 +76,16 @@
}
/*!
-
+
\sa
*/
bool SettingsCustomItem::canSetModelIndex(const QModelIndex &index) const
{
- HbDataFormModelItem::DataItemType itemType =
+ HbDataFormModelItem::DataItemType itemType =
static_cast<HbDataFormModelItem::DataItemType>(
index.data(HbDataFormModelItem::ItemTypeRole).toInt());
- if(itemType >= HbDataFormModelItem::CustomItemBase &&
+ if(itemType >= HbDataFormModelItem::CustomItemBase &&
itemType <= (HbDataFormModelItem::CustomItemBase + 50)) {
return true;
} else {
@@ -97,21 +99,21 @@
HbDataFormModelItem::DataItemType itemType =
static_cast<HbDataFormModelItem::DataItemType>(
modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
-
+
HbDataFormModel* model =
static_cast<HbDataFormModel*>(
static_cast<HbAbstractViewItem*>(this)->itemView()->model());
- HbDataFormModelItem* modlItem = model->itemFromIndex(modelIndex());
-
+ HbDataFormModelItem* modlItem = model->itemFromIndex(modelIndex());
+
switch (itemType) {
case (TimeItemOffset + HbDataFormModelItem::CustomItemBase):
mTimeWidget->setProperty("text", modlItem->contentWidgetData("text"));
break;
-
+
case (DateItemOffset + HbDataFormModelItem::CustomItemBase):
mDateWidget->setProperty("text", modlItem->contentWidgetData("text"));
break;
-
+
case (PlaceItemOffset + HbDataFormModelItem::CustomItemBase):
mPlaceWidget->setProperty("text", modlItem->contentWidgetData("text"));
break;
@@ -176,7 +178,7 @@
this, SLOT(launchRegSettingsView()));
return regSettingsItem;
}
-
+
case (50 + HbDataFormModelItem::CustomItemBase):
{
HbListWidget *workdaysItem = new HbListWidget();
@@ -186,7 +188,7 @@
for (int index = 0; index < mWeekdaysList.count(); ++index) {
workdaysItem->addItem(mWeekdaysList.at(index));
}
-
+
QString workdaysString = workdaysSetting();
for (int i = 0, index = workdaysString.size() - 1;
index >= 0; ++i, index--) {
@@ -202,7 +204,7 @@
QItemSelectionModel::Select);
}
}
-
+
return workdaysItem;
}
@@ -224,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 =
@@ -242,50 +245,53 @@
mTimePickerDialog->setContentWidget(timePicker);
timePicker->setTime(QTime::currentTime());
- HbAction *okAction =
- new HbAction(QString(hbTrId("txt_common_button_ok")), mTimePickerDialog);
- mTimePickerDialog->setPrimaryAction(okAction);
- connect(
- okAction, SIGNAL(triggered()),
- this, SLOT(handleTimeOkAction()));
+ mOkAction = new HbAction(
+ QString(hbTrId("txt_common_button_ok")), mTimePickerDialog);
+ mCancelAction = new HbAction(
+ QString(hbTrId("txt_common_button_cancel")), mTimePickerDialog);
- HbAction *cancelAction =
- new HbAction(QString(hbTrId("txt_common_button_cancel")),
- mTimePickerDialog);
- mTimePickerDialog->setSecondaryAction( cancelAction );
- connect(
- cancelAction, SIGNAL(triggered()),
- this, SLOT(handleTimeCancelAction()));
+ mTimePickerDialog->addAction(mOkAction);
+ mTimePickerDialog->addAction(mCancelAction);
- mTimePickerDialog->exec();
+ mTimePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
}
/*!
- Handles the ok action of time picker dialog.
+ Handles the ok action of time/date picker dialog.
*/
-void SettingsCustomItem::handleTimeOkAction()
+void SettingsCustomItem::handleOkAction()
{
- // Get the time from the time picker.
- QTime newTime = static_cast<HbDateTimePicker *> (
- mTimePickerDialog->contentWidget())->time();
+ if (mTimePickerDialog) {
+ // Get the time from the time picker.
+ QTime newTime = static_cast<HbDateTimePicker *> (
+ mTimePickerDialog->contentWidget())->time();
- QString timeFormatString = mSettingsUtility->timeFormatString();
- // Update the display text on form item.
- mTimeWidget->setText(newTime.toString(timeFormatString));
- mSettingsUtility->setTime(newTime.toString(timeFormatString));
+ QString timeFormatString = mSettingsUtility->timeFormatString();
- // Close the dialog.
- handleTimeCancelAction();
-}
+ // If time returned by the picker is valid, then only update.
+ if (newTime.isValid()) {
+ // Update the display text on form item.
+ mTimeWidget->setText(newTime.toString(timeFormatString));
+ // Update the system time.
+ mTimezoneClient->setDateTime(
+ QDateTime(QDate::currentDate(), newTime));
+ }
+ } else if(mDatePickerDialog) {
+ // Get the time from the time picker.
+ QDate newDate = static_cast<HbDateTimePicker *> (
+ mDatePickerDialog->contentWidget())->date();
-/*!
- Handles the cancel action of time picker dialog.
- */
-void SettingsCustomItem::handleTimeCancelAction()
-{
- // Close the dialog.
- mTimePickerDialog->close();
- mTimePickerDialog->deleteLater();
+ QString dateFormatString = mSettingsUtility->dateFormatString();
+
+ // If date returned by the picker is valid, then only update.
+ if (newDate.isValid()) {
+ // Update the display text on form item.
+ mDateWidget->setText(newDate.toString(dateFormatString));
+ // Update the system date.
+ mTimezoneClient->setDateTime(
+ QDateTime(newDate, QTime::currentTime()));
+ }
+ }
}
/*!
@@ -301,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 =
@@ -315,50 +322,16 @@
mDatePickerDialog->setContentWidget(datePicker);
datePicker->setDate(QDate::currentDate());
- HbAction *okAction =
- new HbAction(QString(hbTrId("txt_common_button_ok")), mDatePickerDialog);
- mDatePickerDialog->setPrimaryAction(okAction);
- connect(
- okAction, SIGNAL(triggered()),
- this, SLOT(handleDateOkAction()));
-
- HbAction *cancelAction =
- new HbAction(QString(hbTrId("txt_common_button_cancel")),
- mDatePickerDialog);
- mDatePickerDialog->setSecondaryAction( cancelAction );
- connect(
- cancelAction, SIGNAL(triggered()),
- this, SLOT(handleDateCancelAction()));
-
- mDatePickerDialog->exec();
-}
+ mOkAction = new HbAction(
+ QString(hbTrId("txt_common_button_ok")), mDatePickerDialog);
-/*!
- Handles the ok action of date picker dialog.
- */
-void SettingsCustomItem::handleDateOkAction()
-{
- // Get the time from the time picker.
- QDate newDate = static_cast<HbDateTimePicker *> (
- mDatePickerDialog->contentWidget())->date();
+ mCancelAction = new HbAction(
+ QString(hbTrId("txt_common_button_cancel")),mDatePickerDialog);
- QString dateFormatString = mSettingsUtility->dateFormatString();
- // Update the display text on form item.
- mDateWidget->setText(newDate.toString(dateFormatString));
- mSettingsUtility->setDate(newDate.toString(dateFormatString));
-
- // Close the dialog.
- handleDateCancelAction();
-}
+ mDatePickerDialog->addAction(mOkAction);
+ mDatePickerDialog->addAction(mCancelAction);
-/*!
- Handles the ok action of date picker dialog.
- */
-void SettingsCustomItem::handleDateCancelAction()
-{
- // Close the dialog.
- mDatePickerDialog->close();
- mDatePickerDialog->deleteLater();
+ mDatePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
}
/*!
@@ -382,8 +355,6 @@
void SettingsCustomItem::updatePlaceItem(LocationInfo info)
{
if (-1 != info.timezoneId) {
- // Construct the timezone client.
- mTimezoneClient = new TimezoneClient();
mTimezoneClient->setAsCurrentLocationL(info);
}
}
@@ -394,8 +365,21 @@
void SettingsCustomItem::launchRegSettingsView()
{
ClockRegionalSettingsView *view =
- new ClockRegionalSettingsView(*mSettingsUtility);
+ new ClockRegionalSettingsView();
+ connect(mTimezoneClient, SIGNAL(timechanged()),
+ view, SLOT(updateWeekStartOn()));
view->showView();
+
+}
+
+/*!
+ Slot to handle the selected action.
+ */
+void SettingsCustomItem::selectedAction(HbAction *action)
+{
+ if (action==mOkAction) {
+ handleOkAction();
+ }
}
/*!
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviewmanager/bwins/clockviewmanageru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 *)
+
--- a/clock/clockui/clockviewmanager/clockviewmanager.pro Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviewmanager/clockviewmanager.pro Mon Jun 28 15:22:02 2010 +0530
@@ -29,7 +29,7 @@
./inc \
../clockviews/inc \
../clockappcontroller/inc \
- ../clockwidget/inc \
+ ../clockwidget/clockwidgetimpl/inc \
../../inc
symbian: {
@@ -39,7 +39,7 @@
LIBS += \
-lclockviews \
- -lclockwidgetproto
+ -lclockwidget
}
SOURCES += \
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviewmanager/eabi/clockviewmanageru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/clockviewmanager.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviewmanager/inc/clockviewmanager.h Mon Jun 28 15:22:02 2010 +0530
@@ -44,10 +44,12 @@
CLOCKVIEWMANAGER_EXPORT void showView(ClockViews view);
private:
- void loadViews();
void loadMainView();
void loadWorldClockView();
+private slots:
+ void loadOtherViews();
+
private:
ClockAppControllerIf &mAppControllerIf;
ClockMainView *mMainView;
--- a/clock/clockui/clockviewmanager/src/clockdocloader.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviewmanager/src/clockdocloader.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -15,15 +15,13 @@
*
*/
-// System includes.
-#include <QDebug>
-
// User includes
#include "clockdocloader.h"
#include "clockcommon.h"
#include "clockmainview.h"
-#include "skinnableclock.h"
+#include "clockwidget.h"
#include "clockworldview.h"
+#include "clockhomecityitem.h"
/*!
\class ClockDocLoader
@@ -39,23 +37,23 @@
*/
QObject *ClockDocLoader::createObject(const QString &type, const QString &name)
{
- qDebug() << "clock: ClockDocLoader::createObject -->";
-
if (CLOCK_MAIN_VIEW == name) {
QObject *object = new ClockMainView();
object->setObjectName(name);
return object;
} else if (CLOCK_WIDGET == name) {
- QObject *object = new SkinnableClock();
+ QObject *object = new ClockWidget();
object->setObjectName(name);
return object;
- } else if (WORLD_CLOCK_VIEW == name) {
+ } else if (CLOCK_WORLD_VIEW == name) {
QObject *object = new ClockWorldView();
object->setObjectName(name);
return object;
- }
-
- qDebug() << "clock: ClockDocLoader::createObject <--";
+ } else if (CLOCK_WORLD_HOMECITY == name) {
+ QObject *object = new ClockHomeCityItem();
+ object->setObjectName(name);
+ return object;
+ }
return HbDocumentLoader::createObject(type, name);
}
--- a/clock/clockui/clockviewmanager/src/clockviewmanager.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviewmanager/src/clockviewmanager.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -17,9 +17,10 @@
*/
// System includes
-#include <QDebug>
#include <HbMainWindow>
#include <HbInstance>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // hbactivitymanager
// User includes
#include "clockviewmanager.h"
@@ -44,14 +45,47 @@
ClockViewManager::ClockViewManager(
ClockAppControllerIf &controllerIf, QObject *parent)
:QObject(parent),
- mAppControllerIf(controllerIf)
+ mAppControllerIf(controllerIf),
+ mWorldClockView(0)
{
- qDebug("clock: ClockViewManager::ClockViewManager() -->");
+ // 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()));
- // Load the document and the views.
- loadViews();
+ }
+ else if (WorldClock == activityId) {
+ //no implentation yet, UI specs are not clear
+ }
- qDebug("clock: ClockViewManager::ClockViewManager() <--");
+ }
+ 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()));
+ }
+
}
/*!
@@ -73,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);
@@ -90,30 +133,10 @@
}
/*!
- Loads the views from the docml file.
- */
-void ClockViewManager::loadViews()
-{
- qDebug() << "clock: ClockViewManager::loadViews -->";
-
- // Load the main view.
- loadMainView();
- // Load the world clock view.
- loadWorldClockView();
-
- // Set the main view to the window
- hbInstance->allMainWindows().first()->addView(mMainView);
-
- qDebug() << "clock: ClockViewManager::loadViews <--";
-}
-
-/*!
Loads the clock main view.
*/
void ClockViewManager::loadMainView()
{
- qDebug() << "clock: ClockViewManager::loadMainView -->";
-
bool loadSuccess;
// Construct the document loader instance
@@ -121,10 +144,6 @@
// Load the application xml.
docLoader->load(CLOCK_MAIN_VIEW_DOCML, &loadSuccess);
- Q_ASSERT_X(
- loadSuccess,
- "viewmanager.cpp",
- "Unable to load the main view app xml");
// Find the main view.
mMainView = static_cast<ClockMainView *> (
@@ -133,7 +152,8 @@
// Setup the view.
mMainView->setupView(mAppControllerIf, docLoader);
- qDebug() << "clock: ClockViewManager::loadMainView <--";
+ // Set the main view to the window
+ hbInstance->allMainWindows().first()->addView(mMainView);
}
/*!
@@ -147,20 +167,30 @@
bool loadSuccess;
// Construct the world list view from doc loader.
- docLoader->load(":/xml/worldclockview.docml", &loadSuccess);
+ docLoader->load(CLOCK_WORLD_VIEW_DOCML, &loadSuccess);
// Get the world list view.
- mWorldClockView =
- static_cast<ClockWorldView *> (docLoader->findWidget("worldClockView"));
+ mWorldClockView = static_cast<ClockWorldView *> (
+ docLoader->findWidget(CLOCK_WORLD_VIEW));
mWorldClockView->setupView(mAppControllerIf, docLoader);
+}
-/* // Get the world list widget.
- WorldListWidget *listWidget =
- qobject_cast<WorldListWidget *> (docLoader->findWidget("worldListWidget"));
- Q_ASSERT_X(listWidget,
- "viewmanager.cpp", "Unable to load the world list widget");
- listWidget->setupWidget(mWorldListView, docLoader);*/
+/*!
+ Load other views
+ */
+void ClockViewManager::loadOtherViews()
+{
+ mMainView->setupAfterViewReady();
+
+ // Load world clock view
+ loadWorldClockView();
+
+ // Disconnect the signal viewReady as all the views are loaded.
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ disconnect(
+ window, SIGNAL(viewReady()),
+ this, SLOT(loadOtherViews()));
}
// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/bwins/clockviewsu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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/clockviews.pro Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/clockviews.pro Mon Jun 28 15:22:02 2010 +0530
@@ -30,7 +30,7 @@
../../clockmw/clocksettingsutility/inc \
../clocksettingsview/inc \
../clockalarmeditor/inc \
- ../clockwidget/inc \
+ ../clockwidget/clockwidgetimpl/inc \
../clockcityselectionlist/inc \
../inc
@@ -51,7 +51,8 @@
-lclocksettingsutility \
-lclocksettingsview \
-lclockcityselectionlist \
- -lclockwidgetproto
+ -lclockwidget \
+ -lclockwidgetplugin
}
SOURCES += \
@@ -59,14 +60,14 @@
clockalarmlistmodel.cpp \
clockalarmlistitemprototype.cpp \
clockworldview.cpp \
- listitemprototype.cpp
+ clockhomecityitem.cpp
HEADERS += \
clockmainview.h \
clockalarmlistmodel.h \
clockalarmlistitemprototype.h \
clockworldview.h \
- listitemprototype.h
+ clockhomecityitem.h
RESOURCES += \
clockviews.qrc
--- a/clock/clockui/clockviews/data/clockviews.qrc Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/data/clockviews.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -2,11 +2,16 @@
<qresource prefix="/style">
<file alias="clockalarmlistitemprototype.css">style/clockalarmlistitemprototype.css</file>
<file alias="clockalarmlistitemprototype.widgetml">style/clockalarmlistitemprototype.widgetml</file>
- <file alias="listitemprototype.css" >style/listitemprototype.css</file>
- <file alias="listitemprototype.widgetml" >style/listitemprototype.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>
- <file alias="worldclockview.docml" >xml/worldclockview.docml</file>
+ <file alias="clockworldview.docml">xml/clockworldview.docml</file>
</qresource>
</RCC>
\ No newline at end of file
--- a/clock/clockui/clockviews/data/style/clockalarmlistitemprototype.css Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/data/style/clockalarmlistitemprototype.css Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/clockhomecityitem.css Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,47 @@
+ClockHomeCityItem{
+ layout: homecity-portrait;
+}
+ClockHomeCityItem:landscape{
+ layout: homecity-landscape;
+}
+ClockHomeCityItem::dayNightIcon{
+ top: -var(hb-param-margin-gene-top);
+ left: -var(hb-param-margin-gene-left);
+ right: var(hb-param-margin-gene-middle-horizontal);
+ bottom: var(hb-param-margin-gene-bottom);
+
+ fixed-height: var(hb-param-graphic-size-primary-large);
+ fixed-width: var(hb-param-graphic-size-primary-large);
+}
+
+ClockHomeCityItem::dateText{
+ 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;
+}
+
+ClockHomeCityItem::cityText{
+ 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;
+}
+
+ClockHomeCityItem::dstIcon{
+ top: -var(hb-param-margin-gene-top);
+ right: var(hb-param-margin-gene-right);
+
+ fixed-height: var(hb-param-graphic-size-secondary);
+ fixed-width: var(hb-param-graphic-size-secondary);
+}
+
+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.widgetml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,41 @@
+<hbwidget version="0.1" type="ClockHomeCityItem">
+ <layout name="homecity-portrait" type="mesh">
+ <meshitem src="dayNightIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="dayNightIcon" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="dayNightIcon" srcEdge="RIGHT" dst="dateText" dstEdge="LEFT" />
+
+ <meshitem src="dateText" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="dateText" srcEdge="RIGHT" dst="dstIcon" dstEdge="LEFT" />
+
+ <meshitem src="cityText" srcEdge="LEFT" dst="dateText" dstEdge="LEFT" />
+ <meshitem src="cityText" srcEdge="BOTTOM" dst="dayNightIcon" dstEdge="BOTTOM" />
+ <meshitem src="cityText" srcEdge="RIGHT" dst="timeText" dstEdge="LEFT" />
+
+ <meshitem src="dstIcon" srcEdge="CENTERV" dst="dateText" dstEdge="CENTERV" />
+ <meshitem src="dstIcon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="timeText" srcEdge="TOP" dst="cityText" dstEdge="TOP" />
+ <meshitem src="timeText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+ </layout>
+
+ <layout name="homecity-landscape" type="mesh">
+ <meshitem src="dayNightIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="dayNightIcon" srcEdge="LEFT" dst="" dstEdge="LEFT" />
+ <meshitem src="dayNightIcon" srcEdge="RIGHT" dst="dateText" dstEdge="LEFT" />
+
+ <meshitem src="dateText" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="dateText" srcEdge="RIGHT" dst="timeText" dstEdge="LEFT" />
+
+ <meshitem src="cityText" srcEdge="LEFT" dst="dateText" dstEdge="LEFT" />
+ <meshitem src="cityText" srcEdge="BOTTOM" dst="dayNightIcon" dstEdge="BOTTOM" />
+ <meshitem src="cityText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="dstIcon" srcEdge="CENTERV" dst="timeText" dstEdge="CENTERV" />
+ <meshitem src="dstIcon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="timeText" srcEdge="CENTERV" dst="dateText" dstEdge="CENTERV" />
+ <meshitem src="timeText" srcEdge="TOP" dst="dateText" dstEdge="TOP" />
+ <meshitem src="timeText" srcEdge="RIGHT" dst="dstIcon" dstEdge="LEFT" />
+ </layout>
+
+</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/clockhomecityitem_color.css Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/hblistviewitem.css Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,69 @@
+
+HbListViewItem:portrait{
+ layout: citylist-portrait;
+}
+
+HbListViewItem:landscape{
+ layout: citylist-landscape;
+}
+
+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);
+ bottom: var(hb-param-margin-gene-bottom);
+
+ fixed-height: var(hb-param-graphic-size-primary-large);
+ fixed-width: var(hb-param-graphic-size-primary-large);
+}
+
+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[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[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[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[layoutName="citylist-portrait"]::icon-2{
+ top: -var(hb-param-margin-gene-top);
+ right: var(hb-param-margin-gene-right);
+
+ fixed-height: var(hb-param-graphic-size-secondary);
+ fixed-width: var(hb-param-graphic-size-secondary);
+}
+
+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.widgetml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,52 @@
+<hbwidget version="0.1" type="HbListViewItem">
+
+ <layout name="citylist-portrait" type="mesh">
+
+ <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-1" dstEdge="LEFT" />
+
+ <meshitem src="text-1" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="text-1" srcEdge="RIGHT" dst="icon-2" dstEdge="LEFT" />
+
+ <meshitem src="text-2" srcEdge="LEFT" dst="text-1" dstEdge="LEFT" />
+ <meshitem src="text-2" srcEdge="BOTTOM" dst="icon-1" dstEdge="BOTTOM" />
+ <meshitem src="text-2" srcEdge="RIGHT" dst="text-4" dstEdge="LEFT" />
+
+ <meshitem src="text-3" srcEdge="LEFT" dst="text-2" dstEdge="LEFT" />
+ <meshitem src="text-3" srcEdge="TOP" dst="text-2" dstEdge="BOTTOM" />
+
+ <meshitem src="icon-2" srcEdge="CENTERV" dst="text-1" dstEdge="CENTERV" />
+ <meshitem src="icon-2" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="text-4" srcEdge="TOP" dst="text-2" dstEdge="TOP" />
+ <meshitem src="text-4" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+
+ </layout>
+
+ <layout name="citylist-landscape" type="mesh">
+
+ <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-1" dstEdge="LEFT" />
+
+ <meshitem src="text-1" srcEdge="TOP" dst="" dstEdge="TOP" />
+ <meshitem src="text-1" srcEdge="RIGHT" dst="text-4" dstEdge="LEFT" />
+
+ <meshitem src="text-2" srcEdge="LEFT" dst="text-1" dstEdge="LEFT" />
+ <meshitem src="text-2" srcEdge="BOTTOM" dst="icon-1" dstEdge="BOTTOM" />
+ <meshitem src="text-2" srcEdge="RIGHT" dst="text-3" dstEdge="LEFT" />
+
+ <meshitem src="text-3" srcEdge="BOTTOM" dst="text-2" dstEdge="BOTTOM" />
+ <meshitem src="text-3" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="icon-2" srcEdge="CENTERV" dst="text-4" dstEdge="CENTERV" />
+ <meshitem src="icon-2" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
+
+ <meshitem src="text-4" srcEdge="CENTERV" dst="text-1" dstEdge="CENTERV" />
+ <meshitem src="text-4" srcEdge="RIGHT" dst="icon-2" dstEdge="LEFT" />
+
+ </layout>
+
+</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/style/hblistviewitem_color.css Mon Jun 28 15:22:02 2010 +0530
@@ -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/style/listitemprototype.css Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +0,0 @@
-ListItemPrototype[layoutName="custom"]{
- layout: custom;
-}
-
-ListItemPrototype::dayNightIcon[layoutName="custom"]{
- top: -var(hb-param-margin-gene-top);
- left: -var(hb-param-margin-gene-left);
-
- fixed-height: var(hb-param-graphic-size-secondary);
- fixed-width: var(hb-param-graphic-size-secondary);
-}
-
-ListItemPrototype::dateText[layoutName="custom"]{
- 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);
-
- text-height: var(hb-param-text-height-tiny);
- min-width: 29.7un;
-}
-
-ListItemPrototype::cityText[layoutName="custom"]{
- top: -var(hb-param-margin-gene-middle-vertical);
- right: var(hb-param-margin-gene-right);
-
- text-height: var(hb-param-text-height-primary);
- font-variant: primary;
- fixed-width: 29.7un;
-}
-
-ListItemPrototype::offsetText[layoutName="custom"]{
- top: -var(hb-param-margin-gene-middle-vertical);
- right: 11.5un;
- bottom: var(hb-param-margin-gene-bottom);
-
- text-height: var(hb-param-text-height-tiny);
- min-width: 29.7un;
-}
-
-ListItemPrototype::dstIcon[layoutName="custom"]{
- top: -var(hb-param-margin-gene-top);
- right: 6.4un;
-
- fixed-height: var(hb-param-graphic-size-secondary);
- fixed-width: var(hb-param-graphic-size-secondary);
-}
-
-ListItemPrototype::timText[layoutName="custom"]{
- top: -var(hb-param-margin-gene-middle-vertical);
- right: var(hb-param-margin-gene-right);
-
- text-height: var(hb-param-text-height-tiny);
-}
\ No newline at end of file
--- a/clock/clockui/clockviews/data/style/listitemprototype.widgetml Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,25 +0,0 @@
-<hbwidget version="0.1" type="ListItemPrototype">
- <layout name="custom" type="mesh">
- <meshitem src="dayNightIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="dayNightIcon" srcEdge="LEFT" dst="" dstEdge="LEFT" />
-
- <meshitem src="dateText" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="dateText" srcEdge="LEFT" dst="dayNightIcon" dstEdge="RIGHT" />
- <meshitem src="dateText" srcEdge="RIGHT" dst="dstIcon" dstEdge="LEFT" />
-
- <meshitem src="cityText" srcEdge="LEFT" dst="dateText" dstEdge="LEFT" />
- <meshitem src="cityText" srcEdge="TOP" dst="dateText" dstEdge="BOTTOM" />
- <meshitem src="cityText" srcEdge="RIGHT" dst="timeText" dstEdge="LEFT" />
-
- <meshitem src="offsetText" srcEdge="LEFT" dst="dateText" dstEdge="LEFT" />
- <meshitem src="offsetText" srcEdge="TOP" dst="cityText" dstEdge="BOTTOM" />
- <meshitem src="offsetText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- <meshitem src="offsetText" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" />
-
- <meshitem src="dstIcon" srcEdge="TOP" dst="" dstEdge="TOP" />
- <meshitem src="dstIcon" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
-
- <meshitem src="timeText" srcEdge="TOP" dst="dstIcon" dstEdge="BOTTOM" />
- <meshitem src="timeText" srcEdge="RIGHT" dst="" dstEdge="RIGHT" />
- </layout>
-</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/xml/clockmainview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,190 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="alarmsAction" type="HbAction">
+ <icon iconName="qtg_mono_alarm" name="icon"/>
+ </object>
+ <object name="worldClockAction" type="HbAction">
+ <icon iconName="qtg_mono_world_clock" name="icon"/>
+ </object>
+ <object name="newAlarmAction" type="HbAction">
+ <icon iconName="qtg_mono_alarm_new" name="icon"/>
+ </object>
+ <object name="settingsAction" type="HbAction">
+ <string locid="txt_clk_main_view_opt_settings" name="text" value="Settings"/>
+ </object>
+ <widget name="clockMainView" type="HbView">
+ <widget name="clockMainViewWidget" role="HbView:widget" type="HbWidget">
+ <widget name="clockWidget" plugin="clockwidgetplugin" type="ClockWidget">
+ <real name="z" value="10"/>
+ <sizehint height="22.55un" type="PREFERRED" width="22.55un"/>
+ </widget>
+ <widget name="noAlarmLabel" type="HbLabel">
+ <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="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="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">
+ <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="HbWidget:addAction"/>
+ </widget>
+ <string locid="txt_common_common_clock" name="title" value="Clock"/>
+ </widget>
+ <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="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="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="placeLabel" type="HbLabel">
+ <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">
+ <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="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="alarmListView" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="alarmListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="alarmListView" dstEdge="BOTTOM" spacing="0un" src="" 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="placeLabel" type="HbLabel">
+ <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="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="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"/>
+ <dummydata objectName="alarmListView" section="#common" value="0"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/data/xml/clockworldview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,121 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <object name="alarmsAction" type="HbAction">
+ <icon iconName="qtg_mono_alarm" name="icon"/>
+ </object>
+ <object name="worldClockAction" type="HbAction">
+ <icon iconName="qtg_mono_world_clock" name="icon"/>
+ </object>
+ <object name="addCityAction" type="HbAction">
+ <icon iconName="qtg_mono_addcity" name="icon"/>
+ </object>
+ <widget name="worldClockView" type="HbView">
+ <widget name="worldClockViewWidget" role="HbView:widget" type="HbWidget">
+ <widget name="subtitleGroupBox" type="HbGroupBox">
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ <string locid="txt_clock_subhead_world_clock" name="heading" value="World clock"/>
+ </widget>
+ <widget name="worldClockCityListView" type="HbListView">
+ <widget name="listItemPrototype" role="HbListView:prototype" type="HbListViewItem">
+ <string name="state" value="normal"/>
+ </widget>
+ <real name="z" value="2"/>
+ <sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
+ </widget>
+ <widget name="homeCityWidget" type="HbWidget">
+ <real name="z" value="3"/>
+ <sizehint height="47.7612un" type="PREFERRED" width="35.8209un"/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="worldClockCityListView" dstEdge="LEFT" spacing="4.47761un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="BOTTOM" spacing="-11.35075un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="homeCityWidget" dstEdge="RIGHT" spacing="0.74627un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="BOTTOM" spacing="-5.67911un" src="" srcEdge="BOTTOM"/>
+ <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"/>
+ </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="addCityAction" role="HbToolBar:addAction"/>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu"/>
+ <string locid="txt_common_common_clock" name="title" value="Clock"/>
+ </widget>
+ <section name="portrait-homecity">
+ <widget name="worldClockViewWidget" role="HbView:widget" type="HbWidget">
+ <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="worldClockCityListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="TOP" spacing="0un" src="homeCityWidget" srcEdge="BOTTOM"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="homeCityWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="homeCityWidget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="BOTTOM" spacing="expr(var(hb-param-margin-gene-top) + var(hb-param-text-height-tiny) + var(hb-param-margin-gene-middle-vertical) + var(hb-param-text-height-primary) + var(hb-param-margin-gene-bottom))" src="homeCityWidget" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ </section>
+ <section name="portrait-nohomecity">
+ <widget name="worldClockViewWidget" role="HbView:widget" type="HbWidget">
+ <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="homeCityWidget" dstEdge="RIGHT" spacing="0.74627un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="BOTTOM" spacing="-5.67911un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ </section>
+ <section name="landscape-nohomecity">
+ <widget name="worldClockViewWidget" role="HbView:widget" type="HbWidget">
+ <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="homeCityWidget" dstEdge="RIGHT" spacing="0.74627un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="BOTTOM" spacing="-5.67911un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ </section>
+ <section name="landscape-homecity">
+ <widget name="worldClockViewWidget" role="HbView:widget" type="HbWidget">
+ <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="worldClockCityListView" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="TOP" spacing="0un" src="homeCityWidget" srcEdge="BOTTOM"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="worldClockCityListView" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="homeCityWidget" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="TOP" spacing="0un" src="subtitleGroupBox" srcEdge="BOTTOM"/>
+ <anchoritem dst="homeCityWidget" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="homeCityWidget" dstEdge="BOTTOM" spacing="12un" src="homeCityWidget" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ </section>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ <uistate name="portrait" sections="#common portrait-nohomecity"/>
+ <uistate name="landscape" sections="#common landscape-nohomecity"/>
+ <uistate name="portrait-homecity" sections="#common portrait-homecity"/>
+ <uistate name="landscape-homecity" sections="#common landscape-homecity"/>
+ <dummydata objectName="worldClockCityListView" section="#common" value="app_list_template5"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/eabi/clockviewsu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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/clockalarmlistitemprototype.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/inc/clockalarmlistitemprototype.h Mon Jun 28 15:22:02 2010 +0530
@@ -21,7 +21,8 @@
// System includes
#include <QGraphicsWidget>
-#include <HbListViewItem.h>
+#include <QPointer>
+#include <hblistviewitem.h>
// Forward declarations
class QGraphicsItem;
@@ -48,7 +49,7 @@
private:
QGraphicsItem *mParent;
- HbPushButton *malarmIconItem;
+ QPointer<HbPushButton> malarmIconItem;
};
#endif // CLOCKALARMLISTITEMPROTOTYPE_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/inc/clockhomecityitem.h Mon Jun 28 15:22:02 2010 +0530
@@ -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: Header file for ClockHomeCityItem Itemclass
+ *
+ */
+
+#ifndef CLOCKHOMECITYITEM_H
+#define CLOCKHOMECITYITEM_H
+
+// System includes
+#include <QPointer>
+#include <HbWidget>
+
+// User include.
+#include "clockviewsdefines.h"
+
+// Forward declaration
+class QGraphicsItem;
+class HbTextItem;
+class HbIconItem;
+
+class ClockHomeCityItem : public HbWidget
+{
+ Q_OBJECT
+
+public:
+ enum {
+ DayNightIndicator,
+ Date,
+ City,
+ Dst,
+ Time
+ };
+
+public:
+ CLOCKVIEWS_EXPORT ClockHomeCityItem(QGraphicsItem *parent = 0);
+ CLOCKVIEWS_EXPORT ~ClockHomeCityItem();
+
+public:
+ void setHomeCityItemData(const QVariantMap & itemData);
+
+private:
+ QPointer<HbTextItem> mDateText;
+ QPointer<HbTextItem> mCityText;
+ QPointer<HbTextItem> mTimeText;
+ QPointer<HbIconItem> mDayNightIcon;
+ QPointer<HbIconItem> mDstIcon;
+
+};
+
+#endif // CLOCKHOMECITYITEM_H
+
+// End of file --Don't remove this.
--- a/clock/clockui/clockviews/inc/clockmainview.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/inc/clockmainview.h Mon Jun 28 15:22:02 2010 +0530
@@ -38,8 +38,8 @@
class AlarmClient;
class TimezoneClient;
class SettingsUtility;
-class SkinnableClock;
class ClockAlarmListModel;
+class ClockWidget;
class ClockMainView : public HbView
{
@@ -52,11 +52,11 @@
public:
CLOCKVIEWS_EXPORT void setupView(
ClockAppControllerIf &controllerIf, ClockDocLoader *docLoader);
-
-public slots:
- void handleAlarmStatusChanged(int row);
+ CLOCKVIEWS_EXPORT void setupAfterViewReady();
+ CLOCKVIEWS_EXPORT void captureScreenShot(bool captureScreenShot = false);
private slots:
+ void handleAlarmStatusChanged(int row);
void refreshMainView();
void displayWorldClockView();
void addNewAlarm();
@@ -64,15 +64,20 @@
void handleActivated(const QModelIndex &index);
void handleLongPress(HbAbstractViewItem *item, const QPointF &coords);
void deleteAlarm();
- void updateDateLabel();
- void updatePlaceLabel();
- void updateClockWidget();
+ void updateView();
+ void updatePlaceLabel(int autoTimeUpdate = -1);
void handleAlarmListDisplay();
void checkOrientationAndLoadSection(Qt::Orientation orientation);
+ void selectedMenuAction(HbAction *action);
+ void handleMenuClosed();
+ void saveActivity();
private:
void setmodel();
void hideAlarmList(bool show);
+ void removeSnoozedAlarm();
+ void updateDateLabel();
+ void updateClockWidget();
private:
QTimer *mTickTimer;
@@ -81,10 +86,13 @@
HbAction *mDisplayWorldClockView;
HbAction *mAddNewAlarm;
HbAction *mSettingsAction;
+ HbAction *mDeleteAction;
HbLabel *mDayLabel;
HbLabel *mPlaceLabel;
- SkinnableClock *mClockWidget;
+ HbLabel *mHorizontalDivider;
+ HbLabel *mVerticalDivider;
+ ClockWidget *mClockWidget;
HbLabel *mNoAlarmLabel;
HbListView *mAlarmList;
@@ -95,8 +103,11 @@
ClockAppControllerIf *mAppControllerIf;
ClockAlarmListModel *mAlarmListModel;
- int mSelectedItem;
- bool mHideAlarmList;
+ 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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/inc/clockviewsdefines.h Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/clockworldview.h Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/inc/clockworldview.h Mon Jun 28 15:22:02 2010 +0530
@@ -32,8 +32,6 @@
class QGraphicsItem;
class QStandardItemModel;
class QTimer;
-class HbLabel;
-class HbPushButton;
class HbListView;
class HbListWidgetItem;
class HbAbstractViewItem;
@@ -42,6 +40,8 @@
class TimezoneClient;
class SettingsUtility;
class ClockCitySelectionList;
+class HbGroupBox;
+class ClockHomeCityItem;
class ClockWorldView : public HbView
{
@@ -57,22 +57,24 @@
private slots:
void refreshCityList();
- void updateClockDisplay();
- void updateDayDateInfo();
- void updateCurrentLocationInfo();
+ void updateCurrentLocationInfo(int networkTime);
void handleItemLongPressed(HbAbstractViewItem *item, const QPointF &coord);
void handleAddLocation();
void handleDeleteAction();
void handleSetAsCurrentLocationAction();
void handleCitySelected(LocationInfo info);
void showAlarmsView();
- void updateOffsetDifferences();
void refreshWorldView();
- void updateToolbarTexts(Qt::Orientation currentOrientation);
+ void loadSection(Qt::Orientation orientation);
+ void updateAllLocationInfo();
+ void selectedMenuAction(HbAction *action);
private:
QModelIndex addCityToList(const LocationInfo& locationInfo);
bool isDay(QDateTime dateTime);
+ QVariantList getCityListDisplayString(const LocationInfo& locationInfo);
+ QVariantList getCityListDecorationString(const LocationInfo& locationInfo);
+ void updateCityList();
private:
QTimer *mRefreshTimer;
@@ -80,14 +82,14 @@
QStandardItemModel *mCityListModel;
QPointer<HbListView> mCityListView;
- HbLabel *mDayDateLabel;
- HbLabel *mPlaceLabel;
+ ClockHomeCityItem *mHomeCityWidget;
HbAction *mAddCityAction;
HbAction *mSetCurrentLocationAction;
HbAction *mRemoveCityAction;
HbAction *mBackAction;
HbAction *mShowAlarmsViewAction;
HbAction *mDisplayWorldClockView;
+ HbAction *mAddCityMenuAction;
ClockDocLoader *mDocLoader;
ClockAppControllerIf *mAppControllerIf;
--- a/clock/clockui/clockviews/inc/listitemprototype.h Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,54 +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:
-* Header file for class ListItemPrototype.
-*
-*/
-
-#ifndef LISTITEMPROTOTYPE_H
-#define LISTITEMPROTOTYPE_H
-
-// System includes
-#include <HbListViewItem>
-
-// Forward declarations
-class QGraphicsItem;
-class HbIconItem;
-class HbAbstractViewItem;
-class HbTextItem;
-
-class ListItemPrototype : public HbListViewItem
-{
- Q_OBJECT
-
-public:
- explicit ListItemPrototype(QGraphicsItem *parent = 0);
- virtual ~ListItemPrototype();
-
-public:
- HbAbstractViewItem* createItem();
- void updateChildItems();
-
-private:
- HbIconItem *mDayNightIcon;
- HbTextItem *mDateText;
- HbTextItem *mCityText;
- HbTextItem *mOffsetText;
- HbIconItem *mDstIcon;
- HbTextItem *mTimeText;
-};
-
-#endif // LISTITEMPROTOTYPE_H
-
-// End of file --Don't remove this.
--- a/clock/clockui/clockviews/src/clockalarmlistitemprototype.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/src/clockalarmlistitemprototype.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -17,7 +17,6 @@
*/
// System includes
-#include <QDebug>
#include <HbPushButton>
// User includes
@@ -37,9 +36,7 @@
\parent of type QGraphicsItem.
*/
ClockAlarmListItemPrototype::ClockAlarmListItemPrototype(QGraphicsItem *parent)
-:HbListViewItem(parent),
- mParent(parent),
- malarmIconItem(0)
+:HbListViewItem(parent)
{
// Nothing yet.
}
@@ -68,19 +65,11 @@
QString alarmIconPath = alarmIconRole.toString();
if (!malarmIconItem) {
malarmIconItem = new HbPushButton(this);
- HbStyle::setItemName(malarmIconItem,
- QLatin1String("alarmIconItem"));
+ HbStyle::setItemName(
+ malarmIconItem, QLatin1String("alarmIconItem"));
connect(
malarmIconItem, SIGNAL(clicked()),
this, SLOT(handleAlarmStatusChanged()));
- if (mParent) {
- connect(
- this,
- SIGNAL(alarmStatusHasChanged(int)),
- qobject_cast<ClockMainView*>(
- static_cast<QGraphicsWidget*>(mParent)),
- SLOT(handleAlarmStatusChanged(int)));
- }
}
malarmIconItem->setIcon(alarmIconPath);
}
@@ -94,7 +83,7 @@
*/
ClockAlarmListItemPrototype *ClockAlarmListItemPrototype::createItem()
{
- return new ClockAlarmListItemPrototype(mParent);
+ return new ClockAlarmListItemPrototype(*this);
}
/*!
@@ -103,7 +92,8 @@
void ClockAlarmListItemPrototype::handleAlarmStatusChanged()
{
int row = modelIndex().row();
- emit alarmStatusHasChanged(row);
+ emit static_cast<ClockAlarmListItemPrototype*>(
+ prototype())->alarmStatusHasChanged(row);
}
// End of file --Don't remove this.
--- a/clock/clockui/clockviews/src/clockalarmlistmodel.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/src/clockalarmlistmodel.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -17,7 +17,6 @@
*/
// System includes
-#include <QDebug>
#include <QTimer>
#include <QStandardItemModel>
@@ -55,8 +54,6 @@
mSourceModel(0),
mAppControllerIf(controllerIf)
{
- qDebug() << "clock: ClockAlarmListModel::ClockAlarmListModel -->";
-
// Construct the source model.
mSourceModel = new QStandardItemModel(0, 1, this);
@@ -74,8 +71,6 @@
connect(
mTickTimer, SIGNAL(timeout()),
this, SLOT(updateRemainingTime()));
-
- qDebug() << "clock: ClockAlarmListModel::ClockAlarmListModel <--";
}
/*!
@@ -83,14 +78,10 @@
*/
ClockAlarmListModel::~ClockAlarmListModel()
{
- qDebug() << "clock: ClockAlarmListModel::~ClockAlarmListModel -->";
-
if (mSourceModel) {
delete mSourceModel;
mSourceModel = 0;
}
-
- qDebug() << "clock: ClockAlarmListModel::~ClockAlarmListModel <--";
}
/*!
@@ -109,10 +100,6 @@
*/
QAbstractItemModel *ClockAlarmListModel::sourceModel()
{
- qDebug() << "clock: ClockAlarmListModel::sourceModel -->";
-
- qDebug() << "clock: ClockAlarmListModel::sourceModel <--";
-
return mSourceModel;
}
@@ -121,8 +108,6 @@
*/
void ClockAlarmListModel::populateSourceModel()
{
- qDebug() << "clock: ClockAlarmListModel::populateSourceModel -->";
-
// Clear the model if it has any data already.
mSourceModel->clear();
mSourceModel->setColumnCount(1);
@@ -153,7 +138,6 @@
// Start the Timer for 1 minute.
mTickTimer->start(60000 - 1000 * QTime::currentTime().second());
}
- qDebug() << "clock: ClockAlarmListModel::populateSourceModel <--";
}
/*!
@@ -163,8 +147,6 @@
*/
QString ClockAlarmListModel::calculateRemainingTime(AlarmInfo alarmInfo)
{
- qDebug() << "clock: ClockAlarmListModel::calculateRemainingTime -->";
-
QDateTime currentDateTime = QDateTime::currentDateTime();
QDateTime alarmTime = QDateTime(
alarmInfo.alarmDateTime, alarmInfo.nextDueTime);
@@ -217,8 +199,6 @@
formatTimeNote = hbTrId("txt_clock_main_view_setlabel_in_1days");
timeNote = formatTimeNote.arg(QString::number(dayleft));
}
- qDebug() << "clock: ClockAlarmListModel::calculateRemainingTime <--";
-
return timeNote;
}
@@ -264,8 +244,6 @@
*/
void ClockAlarmListModel::updateSourceModel(int alarmId)
{
- qDebug() << "clock: ClockAlarmListModel::updateSourceModel -->";
-
Q_UNUSED(alarmId)
int alarmInfoCount;
int modelCount;
@@ -353,8 +331,6 @@
mTickTimer->stop();
}
}
-
- qDebug() << "clock: ClockAlarmListModel::updateSourceModel <--";
}
/*!
@@ -401,8 +377,6 @@
QStringList ClockAlarmListModel::getDisplayStringListforAlarmItem(
AlarmInfo alarmInfo)
{
- qDebug() << "clock: ClockAlarmListModel::getDisplayStringforAlarmItem -->";
-
QStringList displayStringList;
QString timeString;
if (Snoozed == alarmInfo.alarmState) {
@@ -426,7 +400,8 @@
QString remainingTime = calculateRemainingTime(alarmInfo);
displayStringList.append(remainingTime);
} else {
- displayStringList.append(QString(" "));
+ // TODO: localization
+ displayStringList.append(QString("In-active"));
}
QString alarmDescription = alarmInfo.alarmDesc;
@@ -453,9 +428,6 @@
}
}
displayStringList.append(repeatTypeString);
-
- qDebug() << "clock: ClockAlarmListModel::getDisplayStringforAlarmItem <--";
-
return displayStringList;
}
@@ -479,22 +451,21 @@
if (Weekly == alarmInfo.repeatType ||
Daily == alarmInfo.repeatType ||
Workday == alarmInfo.repeatType) {
- displayiconList.append(HbIcon(":/clock/alarm_repeat"));
+ displayiconList.append(HbIcon("qtg_mono_repeat"));
} else {
displayiconList.append(QVariant());
}
item->setData(displayiconList, Qt::DecorationRole);
- // The status.
- if (Enabled == alarmInfo.alarmStatus) {
- item->setData(QString(":/clock/alarm_active"), AlarmIcon);
+
+ // Set the icon for active/in-active/snoozed alarm.
+ if (Disabled == alarmInfo.alarmStatus) {
+ item->setData(QString("qtg_mono_alarm_inactive"), AlarmIcon);
+ } else if (Snoozed == alarmInfo.alarmState) {
+ // Change the alarm icon also to alarm snooze icon
+ item->setData(QString("qtg_mono_alarm_snooze"), AlarmIcon);
} else {
- item->setData(QString(":/clock/alarm_inactive"), AlarmIcon);
- }
-
- // If the alarm is snoozed.
- if (Snoozed == alarmInfo.alarmState) {
- // TODO : Change the alarm icon also to alarm snooze icon
+ item->setData(QString("qtg_mono_alarm"), AlarmIcon);
}
// The model for the list item will have:
@@ -534,24 +505,23 @@
if (Weekly == alarmInfo.repeatType ||
Daily == alarmInfo.repeatType ||
Workday == alarmInfo.repeatType) {
- displayiconList.append(HbIcon(":/clock/alarm_repeat"));
+ displayiconList.append(HbIcon("qtg_mono_repeat"));
} else {
displayiconList.append(QVariant());
}
mSourceModel->setData(
modelIndex, displayiconList, Qt::DecorationRole);
- // The status.
- if (Enabled == alarmInfo.alarmStatus) {
- mSourceModel->setData(
- modelIndex, QString(":/clock/alarm_active"), AlarmIcon);
+
+ // Set the icon for active/in-active/snoozed alarm.
+ if (Disabled == alarmInfo.alarmStatus) {
+ mSourceModel->setData(modelIndex,
+ QString("qtg_mono_alarm_inactive"), AlarmIcon);
+ } else if (Snoozed == alarmInfo.alarmState) {
+ // Change the alarm icon also to alarm snooze icon
+ mSourceModel->setData(modelIndex,
+ QString("qtg_mono_alarm_snooze"), AlarmIcon);
} else {
- mSourceModel->setData(
- modelIndex, QString(":/clock/alarm_inactive"), AlarmIcon);
- }
-
- // If the alarm is snoozed.
- if (Snoozed == alarmInfo.alarmState) {
- // TODO : Change the alarm icon also to alarm snooze icon
+ mSourceModel->setData(modelIndex, QString("qtg_mono_alarm"), AlarmIcon);
}
// The model for the list item will have:
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockviews/src/clockhomecityitem.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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:
+* Definition file for class ClockHomeCityItem.
+*
+*/
+
+// System Includes.
+#include <QVariantMap>
+#include <HbStyleLoader>
+#include <HbTextItem>
+#include <HbIconItem>
+#include <HbFrameItem>
+#include <HbFrameDrawer>
+
+// User Includes.
+#include "clockhomecityitem.h"
+
+/*!
+ \class ClockHomeCityItem
+
+ This class creates all the primitives for ClockHomeCityItem item.
+ */
+
+/*!
+ Constructor.
+
+ \param parent Pointer to QGraphicsItem.
+ */
+ClockHomeCityItem::ClockHomeCityItem(QGraphicsItem *parent) :
+HbWidget(parent)
+{
+ // 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(this);
+ frame->frameDrawer().setFrameType(HbFrameDrawer::NinePieces);
+ frame->frameDrawer().setFrameGraphicsName("qtg_fr_groupbox");
+ setBackgroundItem(frame->graphicsItem(), -2);
+
+}
+
+/*!
+ Destructor.
+ */
+ClockHomeCityItem::~ClockHomeCityItem()
+{
+ HbStyleLoader::unregisterFilePath(":/style/clockhomecityitem.css");
+ HbStyleLoader::unregisterFilePath(":/style/clockhomecityitem.widgetml");
+ HbStyleLoader::unregisterFilePath(":/style/clockhomecityitem_color.css");
+}
+
+/*!
+ Sets the data for HomeCity items.
+ To set textitem data use Qt::DisplayRole
+ To set iconitem data use Qt::DecorationRole
+ \param itemData contains the data for all the primitives.
+ */
+void ClockHomeCityItem::setHomeCityItemData(const QVariantMap &itemData)
+{
+ if (!itemData.isEmpty()) {
+ QMapIterator<QString, QVariant> iter(itemData);
+ while (iter.hasNext()) {
+ iter.next();
+ int value = iter.key().toInt();
+ switch(value) {
+ case Date:
+ if (!mDateText) {
+ mDateText = new HbTextItem(this);
+ HbStyle::setItemName(mDateText, "dateText");
+ }
+ mDateText->setText(iter.value().toString());
+ break;
+ case City:
+ if (!mCityText) {
+ mCityText = new HbTextItem(this);
+ HbStyle::setItemName(mCityText, "cityText");
+ mCityText->setTextWrapping(Hb::TextNoWrap);
+ }
+ mCityText->setText(iter.value().toString());
+ break;
+ case Time:
+ if (!mTimeText) {
+ mTimeText = new HbTextItem(this);
+ HbStyle::setItemName(mTimeText, "timeText");
+ mTimeText->setTextWrapping(Hb::TextNoWrap);
+ }
+ mTimeText->setText(iter.value().toString());
+ break;
+ case DayNightIndicator:
+ if (!mDayNightIcon) {
+ mDayNightIcon = new HbIconItem(this);
+ HbStyle::setItemName(mDayNightIcon, "dayNightIcon");
+ }
+ mDayNightIcon->setIconName(iter.value().toString());
+ break;
+ case Dst:
+ if (!mDstIcon) {
+ mDstIcon = new HbIconItem(this);
+ HbStyle::setItemName(mDstIcon, "dstIcon");
+ }
+ mDstIcon->setIconName(iter.value().toString());
+ break;
+ default:
+ break;
+ }
+ }
+ repolish();
+ }
+}
+
+// End of file --Don't remove this.
--- a/clock/clockui/clockviews/src/clockmainview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/src/clockmainview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -18,7 +18,6 @@
// System includes
#include <QGraphicsItem>
-#include <QDebug>
#include <HbInstance>
#include <HbLabel>
#include <HbAbstractViewItem>
@@ -27,6 +26,8 @@
#include <HbListView>
#include <HbNotificationDialog>
#include <HbStyleLoader>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // activity manager
// User includes
#include "clockmainview.h"
@@ -39,8 +40,8 @@
#include "settingsutility.h"
#include "timezoneclient.h"
#include "clockalarmlistitemprototype.h"
-#include "skinnableclock.h"
#include "clockalarmlistmodel.h"
+#include "clockwidget.h"
/*!
\class ClockMainView
@@ -56,11 +57,11 @@
ClockMainView::ClockMainView(QGraphicsItem *parent)
:HbView(parent),
mAlarmList(0),
- mSelectedItem(-1)
+ mSelectedItem(-1),
+ mIsLongTop(false),
+ mIsScreenShotCapruted(false)
{
- qDebug("clock: ClockMainView::ClockMainView() -->");
-
- qDebug("clock: ClockMainView::ClockMainView() <--");
+ // Nothing yet.
}
/*!
@@ -68,8 +69,6 @@
*/
ClockMainView::~ClockMainView()
{
- qDebug("clock: ClockMainView::~ClockMainView() -->");
-
if (mDocLoader) {
delete mDocLoader;
mDocLoader = 0;
@@ -78,8 +77,13 @@
delete mAlarmListModel;
mAlarmListModel = 0;
}
+ HbStyleLoader::unregisterFilePath(
+ ":/style/clockalarmlistitemprototype.css");
+ HbStyleLoader::unregisterFilePath(
+ ":/style/clockalarmlistitemprototype.widgetml");
+ HbStyleLoader::unregisterFilePath(
+ ":/style/clockalarmlistitemprototype_color.css");
- qDebug("clock: ClockMainView::~ClockMainView() <--");
}
/*!
@@ -92,8 +96,6 @@
void ClockMainView::setupView(
ClockAppControllerIf &controllerIf, ClockDocLoader *docLoader)
{
- qDebug("clock: ClockMainView::setupView() -->");
-
mDocLoader = docLoader;
mAppControllerIf = &controllerIf;
@@ -121,21 +123,16 @@
}
int alarmCount = displayInfoList.count();
-
- connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updatePlaceLabel()));
- connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateDateLabel()));
- connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateClockWidget()));
-
HbMainWindow *window = hbInstance->allMainWindows().first();
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 *> (
@@ -155,7 +152,11 @@
this,
SLOT(handleLongPress(HbAbstractViewItem*, const QPointF&)));
- HbStyleLoader::registerFilePath(CLOCK_VIEWS_STYLE_PATH);
+ HbStyleLoader::registerFilePath(":/style/clockalarmlistitemprototype.css");
+ HbStyleLoader::registerFilePath(
+ ":/style/clockalarmlistitemprototype.widgetml");
+ HbStyleLoader::registerFilePath(
+ ":/style/clockalarmlistitemprototype_color.css");
setmodel();
// Load the correct section based on orientation.
@@ -164,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) {
@@ -179,6 +184,42 @@
}
}
+ mDayLabel = static_cast<HbLabel *> (mDocLoader->findObject("dateLabel"));
+ mPlaceLabel = static_cast<HbLabel *> (mDocLoader->findObject("placeLabel"));
+ mClockWidget = static_cast<ClockWidget*> (
+ mDocLoader->findObject(CLOCK_WIDGET));
+
+ // Update the date info.
+ updateDateLabel();
+ // Update the place info.
+ updatePlaceLabel(mTimezoneClient->timeUpdateOn());
+ // Update clock widget display.
+ updateClockWidget();
+
+ // Connect to orientation change and load appropriate section.
+ 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()));
+
+}
+
+/*!
+ To defer the connects and initialization. To be done after the view is drawn.
+ Should be called in the slot of view ready.
+ */
+void ClockMainView::setupAfterViewReady()
+{
// Get the toolbar/menu actions.
mRefreshMainView = static_cast<HbAction *> (
mDocLoader->findObject("alarmsAction"));
@@ -202,48 +243,23 @@
mAddNewAlarm, SIGNAL(triggered()),
this, SLOT(addNewAlarm()));
- if (Qt::Vertical == currentOrienation) {
- // Remove toolbar item's texts as only icons are shown.
- // TODO to use text ids from ts file.
- mRefreshMainView->setText(tr(""));
- mDisplayWorldClockView->setText(tr(""));
- mAddNewAlarm->setText("");
- } else if (Qt::Horizontal == currentOrienation) {
- // Display toolbar item's texts
- // TODO to use text ids from ts file.
- mRefreshMainView->setText(tr("Alarms"));
- mDisplayWorldClockView->setText(tr("World clock"));
- mAddNewAlarm->setText("New alarm");
- }
-
mSettingsAction = static_cast<HbAction *> (
mDocLoader->findObject("settingsAction"));
connect(
mSettingsAction, SIGNAL(triggered()),
this, SLOT(openSettings()));
- mDayLabel = static_cast<HbLabel *> (
- mDocLoader->findObject("dateLabel"));
-
- mPlaceLabel = static_cast<HbLabel *> (
- mDocLoader->findObject("placeLabel"));
-
- mClockWidget = static_cast<SkinnableClock *> (
- mDocLoader->findObject("clockWidget"));
-
- // Update the date info.
- updateDateLabel();
- // Update the place info.
- updatePlaceLabel();
- // Update clock widget display.
- updateClockWidget();
-
- // Connect to orientation change and load appropriate section.
+ // Connect the necessary timezone client call backs.
+ connect(
+ mTimezoneClient, SIGNAL(timechanged()),
+ this, SLOT(updateView()));
connect(
- window, SIGNAL(orientationChanged(Qt::Orientation)),
- this, SLOT(checkOrientationAndLoadSection(Qt::Orientation)));
-
- qDebug("clock: ClockMainView::setupView() <--");
+ mTimezoneClient, SIGNAL(autoTimeUpdateChanged(int)),
+ this, SLOT(updatePlaceLabel(int)));
+ connect(
+ mTimezoneClient, SIGNAL(cityUpdated()),
+ this, SLOT(updatePlaceLabel()));
+
}
/*!
@@ -254,13 +270,15 @@
*/
void ClockMainView::handleAlarmStatusChanged(int row)
{
- qDebug() << "clock: ClockMainView::handleAlarmStatusChanged -->";
+ AlarmInfo alarmInfo;
// Get the data for the alarm.
QList<QVariant> alarmData =
mAlarmListModel->sourceModel()->index(row, 0).data(
AlarmDetails).toList();
- int alarmStatus = alarmData.at(2).value<int>();
+ int alarmId = alarmData.at(0).value<int>();
+
+ mAlarmClient->getAlarmInfo(alarmId, alarmInfo);
mSelectedItem = row;
@@ -272,19 +290,27 @@
QString displayNote;
// Activate or deactivate the alarm depending on the alarm status.
// Display the NotificationDialog with appropriate message.
- if (!alarmStatus) {
+ if (Snoozed == alarmInfo.alarmState && Enabled == alarmInfo.alarmStatus
+ && Once != alarmInfo.repeatType) {
+ removeSnoozedAlarm();
+ displayNote.append(tr("Snoozed alarm removed"));
+ }else if (Enabled == alarmInfo.alarmStatus) {
mAlarmClient->toggleAlarmStatus(alarmId, Disabled);
- displayNote.append(hbTrId("txt_clock_main_view_dpopinfo_alarm_deactivated"));
- HbNotificationDialog::launchDialog(displayNote);
+ displayNote.append(
+ hbTrId("txt_clock_main_view_dpopinfo_alarm_deactivated"));
} else {
mAlarmClient->toggleAlarmStatus(alarmId, Enabled);
- displayNote.append(hbTrId("txt_clock_main_view_dpopinfo_alarm_activated"));
- HbNotificationDialog::launchDialog(displayNote);
+ displayNote.append(
+ hbTrId("txt_clock_main_view_dpopinfo_alarm_activated"));
}
+
+ HbNotificationDialog *dialog = new HbNotificationDialog();
+ dialog->setTitle(displayNote);
+ dialog->setTimeout(HbPopup::ConfirmationNoteTimeout);
+ dialog->show();
+
mSelectedItem = -1;
}
-
- qDebug() << "clock: ClockMainView::handleAlarmStatusChanged <--";
}
/*!
@@ -293,10 +319,8 @@
*/
void ClockMainView::refreshMainView()
{
- qDebug() << "clock: ClockMainView::refreshMainView -->";
mRefreshMainView->setChecked(true);
- qDebug() << "clock: ClockMainView::refreshMainView <--";
}
/*!
@@ -305,11 +329,9 @@
*/
void ClockMainView::displayWorldClockView()
{
- qDebug() << "clock: ClockMainView::displayWorldClockView -->";
+ mAppControllerIf->switchToView(WorldClock);
+ // no need to capture the screenshot here as it's done in ClockViewManager::showView
- mAppControllerIf->switchToView(WorldClock);
-
- qDebug() << "clock: ClockMainView::displayWorldClockView <--";
}
/*!
@@ -318,16 +340,11 @@
*/
void ClockMainView::addNewAlarm()
{
- qDebug() << "clock: ClockMainView::addNewAlarm -->";
-
- ClockAlarmEditor *alarmEditor = new ClockAlarmEditor();
+ ClockAlarmEditor *alarmEditor = new ClockAlarmEditor(*mAlarmClient);
alarmEditor->showAlarmEditor();
-
- connect(
- alarmEditor, SIGNAL(alarmSet()),
- this, SLOT(handleAlarmSet()));
-
- qDebug() << "clock: ClockMainView::addNewAlarm <--";
+ // capture screenshot for future use, if application
+ // is exited/Quit from alarmEditor
+ captureScreenShot(true);
}
/*!
@@ -336,13 +353,12 @@
*/
void ClockMainView::openSettings()
{
- qDebug() << "clock: ClockMainView::openSettings -->";
-
// Create the settings view.
ClockSettingsView *settingsView = new ClockSettingsView(this);
settingsView->loadSettingsView();
-
- qDebug() << "clock: ClockMainView::openSettings <--";
+ // capture screenshot for future use, if application
+ // is exited/Quit from alarmEditor
+ captureScreenShot(true);
}
/*!
@@ -352,23 +368,21 @@
*/
void ClockMainView::handleActivated(const QModelIndex &index)
{
- qDebug() << "clock: ClockMainView::handleActivated -->";
-
- // Get the data for the alarm.
- int row = index.row();
- QList<QVariant> alarmData =
- mAlarmListModel->sourceModel()->index(row, 0).data(
- AlarmDetails).toList();
- int alarmId = alarmData.at(0).value<int>();
+ if(!mIsLongTop) {// Get the data for the alarm.
+ int row = index.row();
+ QList<QVariant> alarmData =
+ mAlarmListModel->sourceModel()->index(row, 0).data(
+ AlarmDetails).toList();
+ int alarmId = alarmData.at(0).value<int>();
- // Construct the alarm editor.
- ClockAlarmEditor *alarmEditor = new ClockAlarmEditor(alarmId);
- alarmEditor->showAlarmEditor();
- connect(
- alarmEditor, SIGNAL(alarmSet()),
- this, SLOT(handleAlarmSet()));
-
- qDebug() << "clock: ClockMainView::handleActivated <--";
+ // Construct the alarm editor.
+ ClockAlarmEditor *alarmEditor = new ClockAlarmEditor(
+ *mAlarmClient, alarmId);
+ alarmEditor->showAlarmEditor();
+ // capture screenshot for future use, if application
+ // is exited/Quit from alarmEditor
+ captureScreenShot(true);
+ }
}
/*!
@@ -381,8 +395,7 @@
void ClockMainView::handleLongPress(
HbAbstractViewItem *item, const QPointF &coords)
{
- qDebug() << "clock: ClockMainView::handleLongPress -->";
-
+ mIsLongTop = true;
AlarmInfo alarmInfo;
// Save the item row number where the long press was made.
@@ -398,16 +411,19 @@
// On long press we display item specific context menu.
HbMenu *itemContextMenu = new HbMenu();
+ connect(
+ itemContextMenu,SIGNAL(aboutToClose()),
+ this, SLOT(handleMenuClosed()));
// Add the delete action to the context menu.
- HbAction *deleteAction = itemContextMenu->addAction(
- hbTrId("txt_clk_main_view_menu_delete_alarm"));
- connect(deleteAction, SIGNAL(triggered()), this, SLOT(deleteAlarm()));
+ mDeleteAction = itemContextMenu->addAction(
+ hbTrId("txt_clk_main_view_menu_delete_alarm"));
// Show the menu.
- itemContextMenu->exec(coords);
-
- qDebug() << "clock: ClockMainView::handleLongPress <--";
+ itemContextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ itemContextMenu->setPreferredPos(coords);
+ itemContextMenu->setAttribute(Qt::WA_DeleteOnClose, true );
+
}
/*!
@@ -416,8 +432,6 @@
*/
void ClockMainView::deleteAlarm()
{
- qDebug() << "clock: ClockMainView::deleteAlarm -->";
-
if (-1 < mSelectedItem) {
// Get the data for the alarm.
QList<QVariant> alarmData = mAlarmListModel->sourceModel()->
@@ -426,41 +440,44 @@
mAlarmClient->deleteAlarm(alarmId);
mSelectedItem = -1;
}
-
- qDebug() << "clock: ClockMainView::deleteAlarm <--";
}
/*!
- Updates the day and date in the day label.
+ Deltes the snoozed alarm.
*/
-void ClockMainView::updateDateLabel()
+void ClockMainView::removeSnoozedAlarm()
{
- qDebug() << "clock: ClockMainView::updateDateLabel -->";
+ if (-1 < mSelectedItem) {
+ // Get the data for the alarm.
+ QList<QVariant> alarmData = mAlarmListModel->sourceModel()->
+ index(mSelectedItem, 0).data(AlarmDetails).toList();
+ int alarmId = alarmData.at(0).value<int>();
+ mAlarmClient->deleteSnoozedAlarm(alarmId);
+ mSelectedItem = -1;
+ }
+}
- // Get the current datetime.
- QDateTime dateTime = QDateTime::currentDateTime();
- // Get the day name.
- QString dayName = dateTime.toString("dddd");
- // Get the date in correct format.
- QString currentDate = mSettingsUtility->date();
- // Construct the day + date string.
- QString dayDateString;
- dayDateString+= dayName;
- dayDateString += " ";
- dayDateString += currentDate;
-
- mDayLabel->setPlainText(dayDateString);
-
- qDebug() << "clock: ClockMainView::updateDateLabel <--";
+void ClockMainView::updateView()
+{
+ // Update the place label.
+ updatePlaceLabel(mTimezoneClient->timeUpdateOn());
+ // Update date label.
+ updateDateLabel();
+ // Update clock widget.
+ updateClockWidget();
}
/*!
- Updates the zone info in the place label.
+ Slot which gets called for value change in auto time update in cenrep.
+
+ \param autoTimeUpdate Value of auto time update.
*/
-void ClockMainView::updatePlaceLabel()
+void ClockMainView::updatePlaceLabel(int autoTimeUpdate)
{
- qDebug() << "clock: MainViewWidget::updateClockZoneInfo -->";
-
+ if (-1 == autoTimeUpdate) {
+ autoTimeUpdate = mTimezoneClient->timeUpdateOn();
+ }
+
// Get the current zone info.
LocationInfo currentZoneInfo = mTimezoneClient->getCurrentZoneInfoL();
@@ -498,13 +515,13 @@
} else {
gmtOffset += QString::number(offsetInMinutes);
}
-
+
// Append space.
gmtOffset += tr(" ");
-
+
// Append GMT sting.
gmtOffset += hbTrId("txt_common_common_gmt");
-
+
// Append space.
gmtOffset += tr(" ");
@@ -515,7 +532,7 @@
// Update the labels with the correct info.
mPlaceLabel->clear();
- if (mTimezoneClient->timeUpdateOn()) {
+ if(autoTimeUpdate) {
mPlaceLabel->setPlainText(
currentZoneInfo.countryName + tr(" ") + gmtOffset);
} else {
@@ -523,20 +540,6 @@
currentZoneInfo.cityName + tr(", ")
+ currentZoneInfo.countryName + tr(" ") + gmtOffset);
}
-
- qDebug() << "clock: MainViewWidget::updateDayDateInfo <--";
-}
-
-/*!
- Updates the clock widget display.
- */
-void ClockMainView::updateClockWidget()
-{
- qDebug() << "clock: ClockMainView::updateClockWidget -->";
-
- mClockWidget->updateDisplay(true);
-
- qDebug() << "clock: ClockMainView::updateClockWidget <--";
}
/*!
@@ -544,8 +547,8 @@
*/
void ClockMainView::handleAlarmListDisplay()
{
- qDebug() << "clock: 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;
@@ -567,48 +570,6 @@
}
}
- qDebug() << "clock: ClockMainView::handleAlarmListDisplay <--";
-}
-
-/*!
- Sets the model to the alarm list.
- */
-void ClockMainView::setmodel()
-{
- qDebug() << "clock: ClockMainView::setmodel -->";
-
- // Set the model.
- if (mAlarmList) {
- mAlarmList->setModel(mAlarmListModel->sourceModel());
- ClockAlarmListItemPrototype *listItemPrototype =
- new ClockAlarmListItemPrototype(this);
- mAlarmList->setItemPrototype(listItemPrototype);
- mAlarmList->setLayoutName("layout-alarmlist");
- }
-
- qDebug() << "clock: ClockMainView::setmodel <--";
-}
-
-/*!
- Hides the alarmlist in the main view.
-
- \param hide 'true' if alarm list is to be hidden.
- */
-void ClockMainView::hideAlarmList(bool hide)
-{
- qDebug() << "clock: ClockMainView::hideAlarmList -->";
-
- if (hide) {
- mNoAlarmLabel->show();
- mAlarmList->hide();
- mHideAlarmList = true;
- } else {
- mAlarmList->show();
- mNoAlarmLabel->hide();
- mHideAlarmList = false;
- }
-
- qDebug() << "clock: ClockMainView::hideAlarmList <--";
}
/*!
@@ -619,31 +580,20 @@
void ClockMainView::checkOrientationAndLoadSection(
Qt::Orientation orientation)
{
- qDebug() << "clock: ClockMainView::checkOrientationAndLoadSection -->";
-
bool success;
// If horizontal, load the landscape section.
if (Qt::Horizontal == orientation) {
mDocLoader->load(
CLOCK_MAIN_VIEW_DOCML, CLOCK_MAIN_VIEW_LANDSCAPE_SECTION,
&success);
-
- // Display toolbar item's texts
- // TODO have to use text ids from ts file.
- mRefreshMainView->setText(tr("Alarms"));
- mDisplayWorldClockView->setText(tr("World clock"));
- mAddNewAlarm->setText("New alarm");
-
+ mHorizontalDivider->setVisible(false);
+ mVerticalDivider->setVisible(true);
} else {
mDocLoader->load(
CLOCK_MAIN_VIEW_DOCML, CLOCK_MAIN_VIEW_PORTRAIT_SECTION,
&success);
-
- // Remove toolbar item's texts as only icons are shown.
- // TODO have to use text ids from ts file.
- mRefreshMainView->setText(tr(""));
- mDisplayWorldClockView->setText(tr(""));
- mAddNewAlarm->setText("");
+ mHorizontalDivider->setVisible(true);
+ mVerticalDivider->setVisible(false);
}
if(success) {
@@ -656,8 +606,151 @@
hideAlarmList(false);
}
}
+}
- qDebug() << "clock: ClockMainView::checkOrientationAndLoadSection <--";
+/*!
+ Slot to handle context menu actions.
+ */
+void ClockMainView::selectedMenuAction(HbAction *action)
+{
+ if (action == mDeleteAction) {
+ deleteAlarm();
+ }
+}
+
+/*!
+ Slot to handle the context menu closed.
+ */
+void ClockMainView::handleMenuClosed()
+{
+ mIsLongTop = false;
+}
+/*!
+ Sets the model to the alarm list.
+ */
+void ClockMainView::setmodel()
+{
+ // Set the model.
+ if (mAlarmList) {
+ mAlarmList->setModel(mAlarmListModel->sourceModel());
+ ClockAlarmListItemPrototype *listItemPrototype =
+ new ClockAlarmListItemPrototype();
+ connect(
+ listItemPrototype, SIGNAL(alarmStatusHasChanged(int)),
+ this, SLOT(handleAlarmStatusChanged(int)));
+ mAlarmList->setItemPrototype(listItemPrototype);
+ mAlarmList->setLayoutName("layout-alarmlist");
+ }
+
+}
+
+/*!
+ Hides the alarmlist in the main view.
+
+ \param hide 'true' if alarm list is to be hidden.
+ */
+void ClockMainView::hideAlarmList(bool hide)
+{
+ if (hide) {
+ mNoAlarmLabel->show();
+ mAlarmList->hide();
+ mHideAlarmList = true;
+ } else {
+ mAlarmList->show();
+ mNoAlarmLabel->hide();
+ mHideAlarmList = false;
+ }
}
+/*!
+ Updates the day and date in the day label.
+ */
+void ClockMainView::updateDateLabel()
+{
+ // Get the current datetime.
+ QDateTime dateTime = QDateTime::currentDateTime();
+ // Get the day name.
+ QString dayName = dateTime.toString("ddd");
+ // Get the date in correct format.
+ QString currentDate = mSettingsUtility->date();
+ // Construct the day + date string.
+ QString dayDateString;
+ dayDateString+= dayName;
+ dayDateString += " ";
+ dayDateString += currentDate;
+
+ mDayLabel->setPlainText(dayDateString);
+}
+
+/*!
+ Updates the zone info in the place label.
+ */
+/*void ClockMainView::updatePlaceLabel()
+{
+ updatePlaceLabel(mTimezoneClient->timeUpdateOn());
+}*/
+
+/*!
+ Updates the clock widget display.
+ */
+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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockviews/src/clockworldview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -20,10 +20,7 @@
#include <QGraphicsItem>
#include <QStandardItem>
#include <QStandardItemModel>
-#include <QDebug>
#include <HbInstance>
-#include <HbLabel>
-#include <HbPushButton>
#include <HbAbstractViewItem>
#include <HbMenu>
#include <HbAction>
@@ -38,7 +35,7 @@
#include "settingsutility.h"
#include "timezoneclient.h"
#include "clockcityselectionlist.h"
-#include "listitemprototype.h"
+#include "clockhomecityitem.h"
/*!
\class ClockWorldView
@@ -55,8 +52,6 @@
:HbView(parent),
mSelectedItem(-1)
{
- qDebug("clock: ClockWorldView::ClockWorldView() -->");
-
// Timer for updating list data upon time change/update.
mRefreshTimer = new QTimer();
connect(
@@ -65,8 +60,6 @@
// Create the model.
mCityListModel = new QStandardItemModel();
-
- qDebug("clock: ClockWorldView::ClockWorldView() <--");
}
/*!
@@ -74,13 +67,17 @@
*/
ClockWorldView::~ClockWorldView()
{
- qDebug("clock: ClockWorldView::~ClockWorldView() -->");
-
if (mDocLoader) {
delete mDocLoader;
+ mDocLoader = 0;
}
-
- qDebug("clock: ClockWorldView::~ClockWorldView() <--");
+ if(mCityListModel){
+ delete mCityListModel;
+ }
+
+ HbStyleLoader::unregisterFilePath(":/style/hblistviewitem.css");
+ HbStyleLoader::unregisterFilePath(":/style/hblistviewitem.widgetml");
+ HbStyleLoader::unregisterFilePath(":/style/hblistviewitem_color.css");
}
/*!
@@ -94,8 +91,6 @@
ClockAppControllerIf &controllerIf,
ClockDocLoader *docLoader)
{
- qDebug("clock: ClockWorldView::setupView() <--");
-
mDocLoader = docLoader;
mAppControllerIf = &controllerIf;
@@ -105,50 +100,43 @@
// Establish required connections.
connect(
mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateClockDisplay()));
- connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateDayDateInfo()));
+ this, SLOT(updateAllLocationInfo()));
connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateCurrentLocationInfo()));
+ mTimezoneClient, SIGNAL(autoTimeUpdateChanged(int)),
+ this, SLOT(updateCurrentLocationInfo(int)));
connect(
- mTimezoneClient, SIGNAL(timechanged()),
- this, SLOT(updateCurrentZoneInfo()));
+ mTimezoneClient, SIGNAL(cityUpdated()),
+ this, SLOT(updateAllLocationInfo()));
mDisplayWorldClockView = static_cast<HbAction *> (
- mDocLoader->findObject("worldClockAction"));
+ mDocLoader->findObject("worldClockAction"));
mDisplayWorldClockView->setCheckable(true);
mDisplayWorldClockView->setChecked(true);
connect(
- mDisplayWorldClockView, SIGNAL(changed()),
- this, SLOT(refreshWorldView()));
+ mDisplayWorldClockView, SIGNAL(changed()),
+ this, SLOT(refreshWorldView()));
// Get the currently added locations to the list.
mCityInfoList = mTimezoneClient->getSavedLocations();
- // Create the custom prototype.
- ListItemPrototype *customPrototype = new ListItemPrototype();
+ // Get the homecity widget.
+ mHomeCityWidget = qobject_cast<ClockHomeCityItem *>(
+ mDocLoader->findWidget(CLOCK_WORLD_HOMECITY));
+
+ // Get the city list item.
mCityListView = qobject_cast<HbListView *> (
- mDocLoader->findWidget("worldClockCityListView"));
- HbStyleLoader::registerFilePath(":/style/");
+ mDocLoader->findWidget(CLOCK_WORLD_CITYLIST));
+ HbStyleLoader::registerFilePath(":/style/hblistviewitem.css");
+ HbStyleLoader::registerFilePath(":/style/hblistviewitem.widgetml");
+ HbStyleLoader::registerFilePath(":/style/hblistviewitem_color.css");
+ mCityListView->setLayoutName("citylist-portrait");
mCityListView->setModel(mCityListModel);
- mCityListView->setItemPrototype(customPrototype);
- mCityListView->setLayoutName("custom");
-
- mPlaceLabel =
- qobject_cast<HbLabel *> (mDocLoader->findWidget("placeLabel"));
-// mPlaceLabel->setTextWrapping(Hb::TextWordWrap);
-
- mDayDateLabel =
- qobject_cast<HbLabel *> (mDocLoader->findWidget("dateLabel"));
-
+
// Get the toolbar/menu actions.
mAddCityAction = static_cast<HbAction *> (
mDocLoader->findObject("addCityAction"));
- mAddCityAction->setIcon(HbIcon(":/clock/add_new_city.svg"));
connect(
mAddCityAction, SIGNAL(triggered()),
this, SLOT(handleAddLocation()));
@@ -159,13 +147,11 @@
mShowAlarmsViewAction, SIGNAL(triggered()),
this, SLOT(showAlarmsView()));
- HbMainWindow *window;
- window = hbInstance->allMainWindows().first();
- updateToolbarTexts(window->orientation());
+ HbMainWindow *window = hbInstance->allMainWindows().first();
connect(
window, SIGNAL(orientationChanged(Qt::Orientation)),
- this, SLOT(updateToolbarTexts(Qt::Orientation)));
+ this, SLOT(loadSection(Qt::Orientation)));
if (mCityInfoList.count() > 0) {
// There is atleast one city. Refresh needed.
@@ -175,25 +161,34 @@
mRefreshTimer->start(after * 1000);
}
- // Update the date and day info.
- updateDayDateInfo();
-
connect(
mCityListView,
SIGNAL(longPressed(HbAbstractViewItem *, const QPointF &)),
this,
SLOT(handleItemLongPressed(HbAbstractViewItem *, const QPointF &)));
+ // Update current location info.
+ updateCurrentLocationInfo(mTimezoneClient->timeUpdateOn());
+
// Populate the list.
- int index = 0;
- // Update current location info.
- updateCurrentLocationInfo();
-
- for (; index < mCityInfoList.count(); index++) {
+ for (int index = 0; index < mCityInfoList.count(); index++) {
addCityToList(mCityInfoList.at(index));
}
+
+ // Adding the "Add city" in options menu.
+ mAddCityMenuAction = new HbAction(
+ QString(hbTrId("txt_clock_opt_add_city")),this);
+ menu()->addAction(mAddCityMenuAction);
+ mAddCityMenuAction->setVisible(true);
+ connect(
+ mAddCityMenuAction, SIGNAL(triggered()),
+ this, SLOT(handleAddLocation()));
- qDebug("clock: ClockWorldView::setupView() <--");
+ // Check for disabling of addCityAction in view toolbar.
+ if ((KMaximumCityListCount-1) == mCityInfoList.count()) {
+ mAddCityAction->setEnabled(false);
+ mAddCityMenuAction->setVisible(false);
+ }
}
/*!
@@ -201,46 +196,19 @@
*/
void ClockWorldView::refreshCityList()
{
+ updateCurrentLocationInfo(mTimezoneClient->timeUpdateOn());
int cityInfoCount = mCityInfoList.count();
if (cityInfoCount) {
QStandardItem *item = 0;
for (int infoIndex = 0; infoIndex < cityInfoCount; infoIndex++) {
item = mCityListModel->item(infoIndex);
-
- QDateTime dateTime = QDateTime::currentDateTime();
- dateTime = dateTime.toUTC();
- dateTime = dateTime.addSecs(
- mCityInfoList.at(infoIndex).zoneOffset * 60);
-
- // Display day/night indicators.
- QString dayNightIconPath = "";
- if (isDay(dateTime)) {
- dayNightIconPath = ":/clock/day";
- } else {
- dayNightIconPath = ":/clock/night";
- }
- item->setData(dayNightIconPath, Qt::UserRole + 1000);
-
- // Update the date info.
- QString dateInfo = dateTime.toString(
- mSettingsUtility->dateFormatString());
- if (dateTime.date() == QDate::currentDate()) {
- dateInfo = tr("Today");
- }
- item->setData(dateInfo, Qt::UserRole + 1001);
-
- // Set the DST icon.
- QString dstIconPath = "";
- if (mCityInfoList.at(infoIndex).dstOn) {
- dstIconPath = ":/clock/dst_icon";
- }
- item->setData(dstIconPath, Qt::UserRole + 1004);
-
- // Update the time info.
- QString timeInfo = dateTime.toString(
- mSettingsUtility->timeFormatString());
- item->setData(timeInfo, Qt::UserRole + 1005);
+ item->setData(
+ getCityListDisplayString(mCityInfoList.at(infoIndex)),
+ Qt::DisplayRole);
+ item->setData(
+ getCityListDecorationString(mCityInfoList.at(infoIndex)),
+ Qt::DecorationRole);
}
// Start the timer again for one minute.
@@ -249,101 +217,64 @@
}
/*!
- Updates the clock display.
+ Updates the current location info.
*/
-void ClockWorldView::updateClockDisplay()
-{
-// mSkinnableClock->updateDisplay(true);
-}
-
-/*!
- Updates the day-date info.
- */
-void ClockWorldView::updateDayDateInfo()
+void ClockWorldView::updateCurrentLocationInfo(int networkTime)
{
- // Get the current datetime.
- QDateTime dateTime = QDateTime::currentDateTime();
- QString dayName = dateTime.toString("dddd");
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ Qt::Orientation currentOrienation = window->orientation();
+ loadSection(currentOrienation);
+
+ if (!networkTime) {
+ // Get the updated home city.
+ LocationInfo homeCity = mTimezoneClient->getCurrentZoneInfoL();
+
+ QMap<QString, QVariant> itemList;
+ QString value;
+ QDateTime dateTime = QDateTime::currentDateTime();
+
+ // Show the date. If date is current date then show 'today'.
+ QString dateInfo = dateTime.toString(
+ mSettingsUtility->dateFormatString());
+ itemList.insert(value.setNum(ClockHomeCityItem::Date), dateInfo);
+
+ // Show the city and country name.
+ QString placeInfo =
+ homeCity.cityName + tr(", ") + homeCity.countryName;
+ itemList.insert(value.setNum(ClockHomeCityItem::City), placeInfo);
- QString currentDate = mSettingsUtility->date();
- // Construct the day + date string.
- QString dayDateString;
- dayDateString+= dayName;
- dayDateString += " ";
- dayDateString += currentDate;
+ // Show the time at that location.
+ QString timeInfo = dateTime.toString(
+ mSettingsUtility->timeFormatString());
+ itemList.insert(value.setNum(ClockHomeCityItem::Time), timeInfo);
- mDayDateLabel->clear();
- mDayDateLabel->setPlainText(dayDateString);
+ //Use the home city specific icons.
+ // Display day/night indicators.
+ QString dayNightIconPath = "";
+ if (isDay(dateTime)) {
+ dayNightIconPath = "qtg_large_clock_home";
+ } else {
+ dayNightIconPath = "qtg_large_clock_night_home";
+ }
+ itemList.insert(value.setNum(
+ ClockHomeCityItem::DayNightIndicator), dayNightIconPath);
+
+ // Show dst icon when needed.
+ if (homeCity.dstOn) {
+ QString dstIconPath = "qtg_mono_day_light_saving_time";
+ itemList.insert(value.setNum(ClockHomeCityItem::Dst), dstIconPath);
+ }
+ mHomeCityWidget->setHomeCityItemData(itemList);
+ }
}
/*!
- Updates the current location info.
- */
-void ClockWorldView::updateCurrentLocationInfo()
-{
- // Get the updated home city.
- LocationInfo homeCity = mTimezoneClient->getCurrentZoneInfoL();
-
- // Construct the GMT +/- X string.
- QString gmtOffset;
-
- int utcOffset = homeCity.zoneOffset;
- int offsetInHours (utcOffset/60);
- int offsetInMinutes (utcOffset%60);
-
- // Check wether the offset is +ve or -ve.
- if (0 < utcOffset) {
- // We have a positive offset. Append the '+' character.
- gmtOffset += tr(" +");
- } else if (0 > utcOffset) {
- // We have a negative offset. Append the '-' character.
- gmtOffset += tr(" -");
- offsetInHours = -offsetInHours;
- } else {
- // We dont have an offset. We are at GMT zone.
- }
-
- // Append the hour component.
- gmtOffset += QString::number(offsetInHours);
-
- // Get the time separator from settings and append it.
- QStringList timeSeparatorList;
- int index = mSettingsUtility->timeSeparator(timeSeparatorList);
- gmtOffset += timeSeparatorList.at(index);
+ Handles the long press on each item in the citylist.
+ Displays a list item specific context menu.
- // Append the minute component.
- // If minute component is less less than 10, append a '00'
- if (0 <= offsetInMinutes && offsetInMinutes < 10) {
- gmtOffset += tr("00");
- } else {
- gmtOffset += QString::number(offsetInMinutes);
- }
-
- // Append space.
- gmtOffset += tr(" ");
-
- // Append GMT sting.
- gmtOffset += hbTrId("txt_common_common_gmt");
-
- // Append space.
- gmtOffset += tr(" ");
-
- // Append DST info.
- if (homeCity.dstOn) {
- gmtOffset += hbTrId("txt_common_setlabel_dst");
- }
-
- // Set the city and country name .
- mPlaceLabel->clear();
- if (mTimezoneClient->timeUpdateOn()) {
- mPlaceLabel->setPlainText(homeCity.countryName + tr(" ") + gmtOffset);
- } else {
- mPlaceLabel->setPlainText(
- homeCity.cityName + tr(", ") + homeCity.countryName
- + tr(" ") + gmtOffset);
- }
-}
-
+ \param item The HbAbstractViewItem that was long pressed.
+ \param coords The position where mouse was pressed.
+ */
void ClockWorldView::handleItemLongPressed(
HbAbstractViewItem *item, const QPointF &coords)
{
@@ -355,19 +286,14 @@
// Add the actions to the context menu.
mSetCurrentLocationAction = itemContextMenu->addAction(
- hbTrId("txt_clk_menu_set_as_current_location"));
+ hbTrId("txt_clk_menu_set_as_current_location"));
mRemoveCityAction = itemContextMenu->addAction(
- hbTrId("txt_clk_menu_delete"));
-
- connect(
- mSetCurrentLocationAction, SIGNAL(triggered()),
- this, SLOT(handleSetAsCurrentLocationAction()));
- connect(
- mRemoveCityAction, SIGNAL(triggered()),
- this, SLOT(handleDeleteAction()));
+ hbTrId("txt_clk_menu_delete"));
// Show the menu.
- itemContextMenu->exec(coords);
+ itemContextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ itemContextMenu->setPreferredPos(coords);
+ itemContextMenu->setAttribute( Qt::WA_DeleteOnClose,true);
}
/*!
@@ -393,14 +319,10 @@
void ClockWorldView::handleDeleteAction()
{
if (-1 != mSelectedItem) {
- int temp = mCityListModel->rowCount();
-
QStandardItem *item = mCityListModel->takeItem(mSelectedItem);
mCityListModel->removeRow(mSelectedItem);
delete item;
- temp = mCityListModel->rowCount();
-
mCityInfoList.removeAt(mSelectedItem);
mSelectedItem = -1;
@@ -410,6 +332,10 @@
if (mCityInfoList.count() <= 0) {
// No need to refresh the list anymore.
mRefreshTimer->stop();
+ } else if (mCityInfoList.count() < (KMaximumCityListCount-1) &&
+ !mAddCityAction->isEnabled()) {
+ mAddCityAction->setEnabled(true);
+ mAddCityMenuAction->setVisible(true);
}
}
}
@@ -419,66 +345,37 @@
*/
void ClockWorldView::handleSetAsCurrentLocationAction()
{
+ // Get the info of the selected item.
+ LocationInfo newHomeCity = mCityInfoList[mSelectedItem];
+
// Check if time update is set to ON.
// If yes, reset it to OFF and change the home location.
if (mTimezoneClient->timeUpdateOn()) {
mTimezoneClient->setTimeUpdateOn(false);
+
+ QStandardItem *item = mCityListModel->takeItem(mSelectedItem);
+ mCityListModel->removeRow(mSelectedItem);
+ delete item;
+
+ mCityInfoList.removeAt(mSelectedItem);
} else {
// The current location and home city should be swapped.
// Store the info of current home city.
LocationInfo oldHomeCity = mTimezoneClient->getCurrentZoneInfoL();
- // Get the info of the selected item.
- LocationInfo newHomeCity = mCityInfoList[mSelectedItem];
-
- QStandardItem *cityItem = mCityListModel->item(mSelectedItem);
- QDateTime dateTime = QDateTime::currentDateTime();
-
- // Display day/night indicators.
- QString dayNightIconPath = "";
- if (isDay(dateTime)) {
- dayNightIconPath = ":/clock/day";
- } else {
- dayNightIconPath = ":/clock/night";
- }
- cityItem->setData(dayNightIconPath, Qt::UserRole + 1000);
-
- // Date.
- QString dateString = dateTime.toString(
- mSettingsUtility->dateFormatString());
- if (dateTime.date() == QDate::currentDate()) {
- dateString = tr("Today");
- }
- cityItem->setData(dateString, Qt::UserRole + 1001);
-
- // The city/country name.
- QString placeInfo =
- oldHomeCity.cityName + tr(", ") + oldHomeCity.countryName;
- cityItem->setData(placeInfo, Qt::UserRole + 1002);
-
- // Dst icon.
- QString dstIconPath = "";
- if (oldHomeCity.dstOn) {
- dstIconPath = ":/clock/dst_icon";
- }
- cityItem->setData(dstIconPath, Qt::UserRole + 1004);
-
- // Time.
- QString timeString = dateTime.toString(
- mSettingsUtility->timeFormatString());
- cityItem->setData(timeString, Qt::UserRole + 1005);
// Update the info list.
mCityInfoList.removeAt(mSelectedItem);
mCityInfoList.insert(mSelectedItem, oldHomeCity);
- // Update the home city with the timezone server.
- mTimezoneClient->setAsCurrentLocationL(newHomeCity);
+
+ }
+ // Update the home city with the timezone server.
+ mTimezoneClient->setAsCurrentLocationL(newHomeCity);
- // Update the current location info.
- updateCurrentLocationInfo();
+ // Update the current location info.
+ updateCurrentLocationInfo(mTimezoneClient->timeUpdateOn());
- // Update the offset difference in each list item.
- updateOffsetDifferences();
- }
+ // Update the offset difference in each list item.
+ refreshCityList();
// Update the data file.
mTimezoneClient->saveLocations(mCityInfoList);
@@ -499,15 +396,20 @@
// Now we check if the city is already added in the list.
bool proceed = true;
for (int i = 0; i < mCityInfoList.count(); i++) {
- if (info.timezoneId == mCityInfoList.at(i).timezoneId) {
+ if (info.timezoneId == mCityInfoList.at(i).timezoneId
+ && (info.cityName == mCityInfoList.at(i).cityName)
+ && (info.countryName == mCityInfoList.at(i).countryName) ) {
proceed = false;
break;
}
}
+ LocationInfo currentCity = mTimezoneClient->getCurrentZoneInfoL();
// Check if the selected city is not the home city.
- if (info.timezoneId
- == mTimezoneClient->getCurrentZoneInfoL().timezoneId) {
+ if (
+ (info.timezoneId == currentCity.timezoneId)
+ && (info.cityName == currentCity.cityName)
+ && (info.countryName == currentCity.countryName)) {
proceed = false;
}
@@ -528,7 +430,11 @@
}
}
}
-
+ if ((KMaximumCityListCount-1) == mCityInfoList.count() &&
+ mAddCityAction->isEnabled()) {
+ mAddCityAction->setEnabled(false);
+ mAddCityMenuAction->setVisible(false);
+ }
// Cleanup.
mCitySelectionList->deleteLater();
}
@@ -536,87 +442,82 @@
/*!
Navigates to the clock alarms view.
*/
-
void ClockWorldView::showAlarmsView()
{
- qDebug() << "clock: ClockWorldView::showAlarmsView -->";
+ mAppControllerIf->switchToView(MainView);
+}
- mAppControllerIf->switchToView(MainView);
-
- qDebug() << "clock: ClockWorldView::showAlarmsView <--";
+/*!
+ Slot which gets called when `World Clock' action is triggered from the view
+ toolbar. This is responsible for reloading the content of worldclock view.
+ */
+void ClockWorldView::refreshWorldView()
+{
+ mDisplayWorldClockView->setChecked(true);
}
/*!
- Updates the offset difference shown in each item with respect to the home
- city.
+ Loads the appropriate section based on window orientaion.
*/
-void ClockWorldView::updateOffsetDifferences()
+void ClockWorldView::loadSection(Qt::Orientation orientation)
{
- // Get the home city information.
- LocationInfo homeCityInfo = mTimezoneClient->getCurrentZoneInfoL();
-
- for (int iter = 0; iter < mCityListModel->rowCount(); iter++) {
- QModelIndex index = mCityListModel->index(iter, 0);
- LocationInfo cityInfo = mCityInfoList[iter];
-
- // Find out if the city being added has an offset greater than or less
- // than the homecity offset.
- QString offsetDifference;
- if (cityInfo.zoneOffset < homeCityInfo.zoneOffset) {
- offsetDifference += "-";
- } else if (cityInfo.zoneOffset > homeCityInfo.zoneOffset) {
- offsetDifference += "+";
+ bool networkTime = mTimezoneClient->timeUpdateOn();
+ bool loadSuccess;
+ if (Qt::Horizontal == orientation) {
+ if (networkTime) {
+ // Do not show home city.
+ mDocLoader->load(
+ CLOCK_WORLD_VIEW_DOCML,
+ CLOCK_WORLD_VIEW_LANDSCAPE_NOHOMECITY_SECTION,
+ &loadSuccess);
+ mHomeCityWidget->hide();
+ } else {
+ mDocLoader->load(
+ CLOCK_WORLD_VIEW_DOCML,
+ CLOCK_WORLD_VIEW_LANDSCAPE_HOMECITY_SECTION,
+ &loadSuccess);
+ mHomeCityWidget->show();
}
- // Now get the hours and minutes.
- int difference =
- qAbs(homeCityInfo.zoneOffset - cityInfo.zoneOffset);
- int hours = difference / 60;
- int minutes = difference % 60;
- offsetDifference += QString::number(hours);
- offsetDifference += "hrs";
- if (minutes) {
- offsetDifference += ", ";
- offsetDifference += QString::number(minutes);
- offsetDifference += "mins";
+ } else if (Qt::Vertical == orientation) {
+ if (networkTime) {
+ // Do not show home city.
+ mDocLoader->load(
+ CLOCK_WORLD_VIEW_DOCML,
+ CLOCK_WORLD_VIEW_PORTRAIT_NOHOMECITY_SECTION,
+ &loadSuccess);
+ mHomeCityWidget->hide();
+ } else {
+ // Show home city.
+ mDocLoader->load(
+ CLOCK_WORLD_VIEW_DOCML,
+ CLOCK_WORLD_VIEW_PORTRAIT_HOMECITY_SECTION,
+ &loadSuccess);
+ mHomeCityWidget->show();
}
- // TODO : Need to enable these code once we recieve the localisation.
- /*QString displayFormat = tr("%1hrs, %2mins");
- QString offsetString = displayFormat.arg(hours, minutes);
- offsetDifference += offsetString;*/
- mCityListModel->setData(index, offsetDifference, Qt::UserRole + 1003);
}
+ mCityListView->update();
}
/*!
- Slot which gets called when `World Clock' action is triggered from the view
- toolbar. This is responsible for reloading the content of the world clock view.
+ Slot which gets called for timeChanged signal of timezone client.
+ Refreshes both homecity & city list.
*/
-void ClockWorldView::refreshWorldView()
+void ClockWorldView::updateAllLocationInfo()
{
- qDebug() << "clock: ClockWorldView::refreshWorldView -->";
-
- mDisplayWorldClockView->setChecked(true);
-
- qDebug() << "clock: ClockWorldView::refreshWorldView <--";
+ updateCurrentLocationInfo(mTimezoneClient->timeUpdateOn());
+ updateCityList();
+ refreshCityList();
}
/*!
- Slot to handle orientation changes
+ Slot to handle the selected context menu actions
*/
-void ClockWorldView::updateToolbarTexts(Qt::Orientation currentOrientation)
+void ClockWorldView::selectedMenuAction(HbAction *action)
{
- if (Qt::Horizontal == currentOrientation) {
- // Display toolbar item's texts
- // TODO to use text ids from ts file.
- mShowAlarmsViewAction->setText(tr("Alarms"));
- mDisplayWorldClockView->setText(tr("World clock"));
- mAddCityAction->setText(tr("Add city"));
- } else if(Qt::Vertical == currentOrientation){
- // Remove toolbar item's texts as only icons are shown.
- // TODO to use text ids from ts file.
- mShowAlarmsViewAction->setText(tr(""));
- mDisplayWorldClockView->setText(tr(""));
- mAddCityAction->setText("");
+ if (action == mSetCurrentLocationAction) {
+ handleSetAsCurrentLocationAction();
+ } else if (action == mRemoveCityAction) {
+ handleDeleteAction();
}
}
@@ -630,95 +531,17 @@
// Here we construct a model item and add it to the list model.
QStandardItem *modelItem = new QStandardItem();
- QDateTime dateTime = QDateTime::currentDateTime();
- dateTime = dateTime.toUTC();
- dateTime = dateTime.addSecs(locationInfo.zoneOffset * 60);
-
- // Display day/night indicators.
- QString dayNightIconPath = "";
- if (isDay(dateTime)) {
- dayNightIconPath = ":/clock/day";
- } else {
- dayNightIconPath = ":/clock/night";
- }
- modelItem->setData(dayNightIconPath, Qt::UserRole + 1000);
-
- // Show the date. If date is current date then show 'today'.
- QString dateInfo = dateTime.toString(mSettingsUtility->dateFormatString());
- if (dateTime.date() == QDate::currentDate()) {
- dateInfo = tr("Today");
- }
- modelItem->setData(dateInfo, Qt::UserRole + 1001);
-
- // Show the city and country name.
- QString placeInfo =
- locationInfo.cityName + tr(", ") + locationInfo.countryName;
- modelItem->setData(placeInfo, Qt::UserRole + 1002);
-
- // Get the homecity information.
- LocationInfo homeCityInfo = mTimezoneClient->getCurrentZoneInfoL();
- // Find out if the city being added has an offset greater than or less than
- // the homecity offset.
- QString offsetDifference;
- if (locationInfo.zoneOffset < homeCityInfo.zoneOffset) {
- offsetDifference += "-";
- } else if (locationInfo.zoneOffset > homeCityInfo.zoneOffset) {
- offsetDifference += "+";
- }
- // Now get the hours and minutes.
- int difference = qAbs(homeCityInfo.zoneOffset - locationInfo.zoneOffset);
- int hours = difference / 60;
- int minutes = difference % 60;
-
- if ( hours && minutes ) {
- if (hours == 1) {
- QString displayFormat =
- hbTrId("txt_clock_dblist_daily_val_1_hr_2_mins");
- QString offsetString = displayFormat.arg(hours).arg(minutes);
- offsetDifference += offsetString;
- }
- else {
- QString displayFormat =
- hbTrId("txt_clock_dblist_daily_val_1_hrs_2_mins");
- QString offsetString = displayFormat.arg(hours).arg(minutes);
- offsetDifference += offsetString;
- }
- }
- else if ( hours ){
- if(hours == 1 ) {
- QString displayFormat = hbTrId("txt_clock_dblist_val_1_hr");
- QString offsetString = displayFormat.arg(hours);
- offsetDifference += offsetString;
- }
- else {
- QString displayFormat = hbTrId("txt_clock_dblist_val_1_hrs");
- QString offsetString = displayFormat.arg(hours);
- offsetDifference += offsetString;
- }
- }
- else if (minutes){
- QString displayFormat = hbTrId("txt_clock_dblist_val_1_mins");
- QString offsetString = displayFormat.arg(minutes);
- offsetDifference += offsetString;
- }
-
- modelItem->setData(offsetDifference, Qt::UserRole + 1003);
-
- // Show dst icon when needed.
- QString dstIconPath = "";
- if (locationInfo.dstOn) {
- dstIconPath = ":/clock/dst_icon";
- }
- modelItem->setData(dstIconPath, Qt::UserRole + 1004);
-
- // Show the time at that location.
- QString timeInfo = dateTime.toString(mSettingsUtility->timeFormatString());
- modelItem->setData(timeInfo, Qt::UserRole + 1005);
-
// Add the item to the model.
mCityListModel->appendRow(modelItem);
- return(mCityListModel->indexFromItem(modelItem));
+ QModelIndex index = mCityListModel->indexFromItem(modelItem);
+ mCityListModel->setData(
+ index, getCityListDisplayString(locationInfo), Qt::DisplayRole);
+ mCityListModel->setData(
+ index, getCityListDecorationString(locationInfo),
+ Qt::DecorationRole);
+
+ return index;
}
/*!
@@ -737,4 +560,167 @@
return true;
}
+/*!
+ Returns the QVariantList for citylist to be set for DisplayRole.
+
+ /param locationInfo Details of the city to be added to the list.
+ */
+QVariantList ClockWorldView::getCityListDisplayString(
+ const LocationInfo& locationInfo)
+{
+ QVariantList displayString;
+ QDateTime dateTime = QDateTime::currentDateTime();
+ dateTime = dateTime.toUTC();
+ dateTime = dateTime.addSecs(locationInfo.zoneOffset * 60);
+
+ // Show the date. If date is current date then show 'today'.
+ QString dateInfo = dateTime.toString(mSettingsUtility->dateFormatString());
+ if (dateTime.date() == QDate::currentDate()) {
+ dateInfo = hbTrId("txt_clock_main_view_dblist_daily_val_today");
+ }
+ displayString.append(dateInfo);
+
+ // Show the city and country name.
+ QString placeInfo =
+ locationInfo.cityName + tr(", ") + locationInfo.countryName;
+ displayString.append(placeInfo);
+
+ // Get the homecity information.
+ LocationInfo homeCityInfo = mTimezoneClient->getCurrentZoneInfoL();
+ // Find out if the city being added has an offset greater than or less than
+ // the homecity offset.
+ QString offsetDifference;
+ if (locationInfo.zoneOffset < homeCityInfo.zoneOffset) {
+ offsetDifference += "-";
+ } else if (locationInfo.zoneOffset > homeCityInfo.zoneOffset) {
+ offsetDifference += "+";
+ }
+ // Now get the hours and minutes.
+ int difference = qAbs(homeCityInfo.zoneOffset - locationInfo.zoneOffset);
+ int hours = difference / 60;
+ int minutes = difference % 60;
+ QString displayFormat("");
+ QString offsetString("");
+
+ if ( hours && minutes ) {
+ if (hours == 1) {
+ displayFormat =
+ hbTrId("txt_clock_dblist_daily_val_1_hr_2_mins");
+ offsetString = displayFormat.arg(hours).arg(minutes);
+ offsetDifference += offsetString;
+ }
+ else {
+ displayFormat =
+ hbTrId("txt_clock_dblist_daily_val_1_hrs_2_mins");
+ offsetString = displayFormat.arg(hours).arg(minutes);
+ offsetDifference += offsetString;
+ }
+ }
+ else if ( hours ){
+ if(hours == 1 ) {
+ displayFormat = hbTrId("txt_clock_dblist_val_1_hr");
+ offsetString = displayFormat.arg(hours);
+ offsetDifference += offsetString;
+ }
+ else {
+ displayFormat = hbTrId("txt_clock_dblist_val_1_hrs");
+ offsetString = displayFormat.arg(hours);
+ offsetDifference += offsetString;
+ }
+ }
+ else if (minutes){
+ displayFormat = hbTrId("txt_clock_dblist_val_1_mins");
+ offsetString = displayFormat.arg(minutes);
+ offsetDifference += offsetString;
+ } else {
+ displayFormat = hbTrId("txt_clock_dblist_val_1_hrs");
+ offsetString = displayFormat.arg(0);
+ offsetDifference += offsetString;
+ }
+ displayString.append(offsetDifference);
+
+ // Show the time at that location.
+ QString timeInfo = dateTime.toString(mSettingsUtility->timeFormatString());
+ displayString.append(timeInfo);
+
+ return displayString;
+}
+
+/*!
+ Returns the QVariantList for citylist to be set for DecorationRole.
+
+ /param locationInfo Details of the city to be added to the list.
+ */
+QVariantList ClockWorldView::getCityListDecorationString(
+ const LocationInfo& locationInfo)
+{
+ QVariantList decorationString;
+ QDateTime dateTime = QDateTime::currentDateTime();
+ dateTime = dateTime.toUTC();
+ dateTime = dateTime.addSecs(locationInfo.zoneOffset * 60);
+
+ // Display day/night indicators.
+ // TODO: change the icon name for night when available.
+ QString dayNightIconPath = "";
+ if (isDay(dateTime)) {
+ dayNightIconPath = "qtg_large_clock";
+ } else {
+ dayNightIconPath = "qtg_large_clock_night";
+ }
+ decorationString.append(HbIcon(dayNightIconPath));
+
+ // Show dst icon when needed.
+ if (locationInfo.dstOn) {
+ QString dstIconPath = "qtg_mono_day_light_saving_time";
+ decorationString.append(HbIcon(dstIconPath));
+ }
+ return decorationString;
+
+}
+
+/*!
+ Updates the city list according to the home city.
+ */
+void ClockWorldView::updateCityList()
+{
+ int cityInfoCount = mCityInfoList.count();
+
+ if (cityInfoCount) {
+ bool deletion = false;
+ int index;
+ LocationInfo currentCity = mTimezoneClient->getCurrentZoneInfoL();
+ for (index = 0; index < cityInfoCount; index++) {
+ if (currentCity.timezoneId == mCityInfoList.at(index).timezoneId
+ && (currentCity.cityName ==
+ mCityInfoList.at(index).cityName)
+ && (currentCity.countryName ==
+ mCityInfoList.at(index).countryName) ) {
+ deletion = true;
+ break;
+ }
+ }
+ if (deletion) {
+ QStandardItem *item = mCityListModel->takeItem(index);
+ mCityListModel->removeRow(index);
+ delete item;
+
+ mCityInfoList.removeAt(index);
+ index = -1;
+
+ // Update the data file.
+ mTimezoneClient->saveLocations(mCityInfoList);
+
+ if (mCityInfoList.count() <= 0) {
+ // No need to refresh the list anymore.
+ mRefreshTimer->stop();
+ } else if (mCityInfoList.count() < (KMaximumCityListCount-1) &&
+ !mAddCityAction->isEnabled()) {
+ mAddCityAction->setEnabled(true);
+ mAddCityMenuAction->setVisible(true);
+ }
+
+ }
+ }
+}
+
// End of file-- Don't delete.
--- a/clock/clockui/clockviews/src/listitemprototype.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,128 +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 class ListItemPrototype.
-*
-*/
-
-// System includes
-#include <QDebug>
-#include <QGraphicsLinearLayout>
-#include <HbAbstractViewItem>
-#include <HbIconItem>
-#include <HbStyle>
-#include <HbTextItem>
-
-// User includes
-#include "listitemprototype.h"
-
-/*!
- \class ListItemPrototype
-
- Prototype class for the World clock city list.
- */
-
-/*!
- Default constructor.
-
- \parent of type QGraphicsItem.
- */
-ListItemPrototype::ListItemPrototype(QGraphicsItem *parent)
-:HbListViewItem(parent),
- mDayNightIcon(0),
- mDateText(0),
- mCityText(0),
- mOffsetText(0),
- mDstIcon(0),
- mTimeText(0)
-{
- // Nothing yet.
-}
-
-/*!
- Destructor.
- */
-ListItemPrototype::~ListItemPrototype()
-{
- // Nothing yet.
-}
-
-/*!
- From HbListViewItem.
-
- \sa HbAbstractViewItem, HbListViewItem.
- */
-HbAbstractViewItem *ListItemPrototype::createItem()
-{
- return new ListItemPrototype(*this);
-}
-
-/*!
- Called for every view item in the list.
-
- \sa HbAbstractViewItem, HbListViewItem.
- */
-void ListItemPrototype::updateChildItems()
-{
- // First allow the base class to update.
- HbListViewItem::updateChildItems();
-
- // Create the individual items.
- // Create day-night icon.
- if (!mDayNightIcon) {
- mDayNightIcon = new HbIconItem(this);
- style()->setItemName(mDayNightIcon, "dayNightIcon");
- }
- mDayNightIcon->setIconName(
- modelIndex().data(Qt::UserRole + 1000).value<QString>());
-
- // Create the date text item.
- if (!mDateText) {
- mDateText = new HbTextItem(this);
- style()->setItemName(mDateText, "dateText");
- }
- mDateText->setText(modelIndex().data(Qt::UserRole + 1001).toString());
-
- // Create the city, country name text item.
- if (!mCityText) {
- mCityText = new HbTextItem(this);
- mCityText->setTextWrapping(Hb::TextNoWrap);
- style()->setItemName(mCityText, "cityText");
- }
- mCityText->setText(modelIndex().data(Qt::UserRole + 1002).toString());
-
- // Create the offset text item.
- if (!mOffsetText) {
- mOffsetText = new HbTextItem(this);
- style()->setItemName(mOffsetText, "offsetText");
- }
- mOffsetText->setText(modelIndex().data(Qt::UserRole + 1003).toString());
-
- // Create dst icon.
- if (!mDstIcon) {
- mDstIcon = new HbIconItem(this);
- style()->setItemName(mDstIcon, "dstIcon");
- }
- mDstIcon->setIconName(
- modelIndex().data(Qt::UserRole + 1004).value<QString>());
-
- // Create the time text item.
- if (!mTimeText) {
- mTimeText = new HbTextItem(this);
- style()->setItemName(mTimeText, "timeText");
- }
- mTimeText->setText(modelIndex().data(Qt::UserRole + 1005).toString());
-}
-
-// End of file --Don't remove this.
--- a/clock/clockui/clockwidget/clockwidget.pro Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockwidget/clockwidget.pro Mon Jun 28 15:22:02 2010 +0530
@@ -1,5 +1,5 @@
#
-# Copyright (c) 2008-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"
@@ -11,40 +11,12 @@
#
# Contributors:
#
-# Description: Project definition file for clockui
-#
-
-TEMPLATE = lib
-TARGET = clockwidgetproto
-DEFINES += CLOCKWIDGET_LIB
-CONFIG += hb
-
-DEPENDPATH += . \
- ./src \
- ./inc \
- ../../data
-INCLUDEPATH += . \
- ../../clockmw/clocktimezone/inc \
- ../../clockmw/clocksettingsutility/inc \
- ../../inc
+# Description:
+#
-symbian: {
- TARGET.CAPABILITY = ALL -TCB
- TARGET.EPOCALLOWDLLDATA = 1
- TARGET.UID3 = 0x2002E6B4
-
- LIBS += -ltimezoneclient \
- -lclocksettingsutility
-}
-
-SOURCES += skinnableclock.cpp \
- analogclock.cpp \
- digitalclock.cpp
-
-HEADERS += skinnableclock.h \
- analogclock.h \
- digitalclock.h
-
-RESOURCES += ../../data/clockwidget.qrc
-
-# End of file --Don't remove this.
+
+
+TEMPLATE = subdirs
+SUBDIRS += clockwidgetimpl
+SUBDIRS += clockwidgetplugin
+CONFIG += ordered
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/bwins/clockwidgetu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 &)
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/clockwidgetimpl.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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:
+# programs, is protected by copyright controlled by Nokia. All
+# rights are reserved. Copying, including reproducing, storing,
+# adapting or translating, any or all of this material requires the
+# prior written consent of Nokia. This material also contains
+# confidential information which may not be disclosed to others
+# without the prior written consent of Nokia.
+# ============================================================================
+#
+# Description:
+#
+
+TEMPLATE = lib
+TARGET = clockwidget
+CONFIG += hb
+DEFINES += CLOCKWIDGET_LIB
+
+win32{
+CONFIG(release, debug|release){
+ TARGET = clockwidget
+ DESTDIR = ../release # for easy plugin loading
+}else{
+ TARGET = clockwidgetd
+ DESTDIR = ../debug # for easy plugin loading
+ }
+}
+
+DEPENDPATH += ./inc \
+ ./src
+
+INCLUDEPATH += ./inc
+
+SOURCES += \
+ clockwidget.cpp \
+ analogclockwidget.cpp \
+ digitalclockwidget.cpp
+
+HEADERS += \
+ clockwidgetdefines.h \
+ clockwidget.h \
+ analogclockwidget.h \
+ digitalclockwidget.h
+
+symbian {
+ TARGET.UID3 = 0x2002E715
+ TARGET.EPOCALLOWDLLDATA = 1
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+ LIBS += -lbafl
+}
+
+RESOURCES = clockwidgetimpl.qrc
+
+# End of file --Don't remove this
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/clockwidgetimpl.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,10 @@
+<RCC>
+ <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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
+
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/inc/analogclockwidget.h Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,57 @@
+/*
+* 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: Clock widget
+*
+*/
+
+#ifndef ANALOGCLOCKWIDGET_H
+#define ANALOGCLOCKWIDGET_H
+
+// User includes
+#include <hbwidget.h>
+#include <QPointer>
+
+// Forward declarations
+class HbIconItem;
+class QTimer;
+
+class AnalogClockWidget : public HbWidget
+{
+ Q_OBJECT
+
+public:
+ AnalogClockWidget(QGraphicsItem *parent = 0);
+ virtual ~AnalogClockWidget();
+
+public slots:
+ void tick();
+
+protected:
+ void resizeEvent(QGraphicsSceneResizeEvent *event);
+ void polish(HbStyleParameters& params);
+
+private:
+ void updatePrimitives();
+
+private:
+ QPointer<QTimer> mTimer;
+ QPointer<HbIconItem> mClockBackground;
+ QPointer<HbIconItem> mClockHourHand;
+ QPointer<HbIconItem> mClockMinuteHand;
+ QPointer<HbIconItem> mClockSecondHand;
+};
+
+#endif
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/inc/clockwidget.h Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,74 @@
+/*
+* 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: Clock widget
+*
+*/
+
+#ifndef CLOCKWIDGET_H
+#define CLOCKWIDGET_H
+
+// System includes
+#include <hbwidget.h>
+#include <QPointer>
+// User includes
+#include "clockwidgetdefines.h"
+
+//Forward declarations
+
+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
+ {
+ 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:
+ void updateClockWidget();
+private:
+ ClockType mClockType;
+ TimeFormat mTimeFormat;
+ QPointer<AnalogClockWidget> mAnalogClock;
+ QPointer<DigitalClockWidget> mDigitalClock;
+ QGraphicsLinearLayout *mLayout;
+};
+
+#endif // CLOCKWIDGET_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/inc/clockwidgetdefines.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 dll header file.
+*
+*/
+
+
+#ifndef CLOCKWIDGETDEFINES_H
+#define CLOCKWIDGETDEFINES_H
+
+#include <qglobal.h>
+
+#ifdef CLOCKWIDGET_LIB
+# define CLOCKWIDGET_EXPORT Q_DECL_EXPORT
+#else
+# define CLOCKWIDGET_EXPORT Q_DECL_IMPORT
+#endif
+
+#endif // CLOCKWIDGETDEFINES_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/inc/digitalclockwidget.h Mon Jun 28 15:22:02 2010 +0530
@@ -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/analogclockwidget.css Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,23 @@
+AnalogClockWidget {
+ layout: layout_1;
+}
+
+AnalogClockWidget::clock_background {
+ size-policy: expanding expanding;
+ zvalue: 0;
+}
+
+AnalogClockWidget::clock_minute_hand {
+ size-policy:expanding expanding;
+ zvalue: 1;
+}
+
+AnalogClockWidget::clock_hour_hand {
+ size-policy:expanding expanding;
+ zvalue: 2;
+}
+
+AnalogClockWidget::clock_second_hand {
+ size-policy:expanding expanding;
+ zvalue: 3;
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/resource/analogclockwidget.widgetml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,24 @@
+<hbwidget version="0.1">
+ <layout name="layout_1" type="mesh">
+ <meshitem src="clock_background" srcEdge="TOP" dst="" dstEdge="TOP" spacing="0.0un" />
+ <meshitem src="clock_background" srcEdge="BOTTOM" dst="" dstEdge="BOTTOM" spacing="0.0un" />
+ <meshitem src="clock_background" srcEdge="LEFT" dst="" dstEdge="LEFT" spacing="0.0un" />
+ <meshitem src="clock_background" srcEdge="RIGHT" dst="" dstEdge="RIGHT" spacing="0.0un" />
+
+ <meshitem src="clock_hour_hand" srcEdge="TOP" dst="clock_background" dstEdge="TOP" spacing="0.0un" />
+ <meshitem src="clock_hour_hand" srcEdge="BOTTOM" dst="clock_background" dstEdge="BOTTOM" spacing="0.0un" />
+ <meshitem src="clock_hour_hand" srcEdge="LEFT" dst="clock_background" dstEdge="LEFT" spacing="0.0un" />
+ <meshitem src="clock_hour_hand" srcEdge="RIGHT" dst="clock_background" dstEdge="RIGHT" spacing="0.0un" />
+
+ <meshitem src="clock_minute_hand" srcEdge="TOP" dst="clock_background" dstEdge="TOP" spacing="0.0un" />
+ <meshitem src="clock_minute_hand" srcEdge="BOTTOM" dst="clock_background" dstEdge="BOTTOM" spacing="0.0un" />
+ <meshitem src="clock_minute_hand" srcEdge="LEFT" dst="clock_background" dstEdge="LEFT" spacing="0.0un" />
+ <meshitem src="clock_minute_hand" srcEdge="RIGHT" dst="clock_background" dstEdge="RIGHT" spacing="0.0un" />
+
+ <meshitem src="clock_second_hand" srcEdge="TOP" dst="clock_background" dstEdge="TOP" spacing="0.0un" />
+ <meshitem src="clock_second_hand" srcEdge="BOTTOM" dst="clock_background" dstEdge="BOTTOM" spacing="0.0un" />
+ <meshitem src="clock_second_hand" srcEdge="LEFT" dst="clock_background" dstEdge="LEFT" spacing="0.0un" />
+ <meshitem src="clock_second_hand" srcEdge="RIGHT" dst="clock_background" dstEdge="RIGHT" spacing="0.0un" />
+
+ </layout>
+</hbwidget>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/resource/digitalclockwidget.css Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/src/analogclockwidget.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,135 @@
+/*
+* 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: AnalogClockWidget
+*
+*/
+
+// System includes
+#include <HbIconItem>
+#include <HbStyleLoader>
+#include <QTime>
+#include <QTimer>
+
+// User includes
+#include "analogclockwidget.h"
+
+// Constants
+const int clockUpdateInterval (1000); // msec
+
+/*!
+ \class AnalogClockWidget
+
+ This class implements the analogclock widget which gets displayed
+ in the clockmainview when the clocktype is set to analog type.
+*/
+
+/*!
+ Constructor.
+ \param parent The parent of type QGraphicsItem.
+*/
+AnalogClockWidget::AnalogClockWidget(QGraphicsItem *parent)
+ : HbWidget(parent)
+{
+ bool result = HbStyleLoader::registerFilePath(":/resource/analogclockwidget.widgetml");
+ result = HbStyleLoader::registerFilePath(":/resource/analogclockwidget.css");
+
+ updatePrimitives();
+ mTimer = new QTimer(this);
+ connect(mTimer, SIGNAL(timeout()), SLOT(tick()));
+ mTimer->start(clockUpdateInterval);
+}
+
+/*!
+ Destructor.
+ */
+AnalogClockWidget::~AnalogClockWidget()
+{
+ mTimer->stop();
+ HbStyleLoader::unregisterFilePath(":/resource");
+}
+
+/*!
+ Handles resize event from HbWidget
+ */
+void AnalogClockWidget::resizeEvent(QGraphicsSceneResizeEvent *event)
+{
+ QGraphicsWidget::resizeEvent(event);
+ updatePrimitives();
+}
+
+/*!
+ @copydoc HbWidget::updatePrimitives()
+ */
+void AnalogClockWidget::updatePrimitives()
+{
+ if (!mClockBackground) {
+ mClockBackground = new HbIconItem(QLatin1String("qtg_graf_clock_day_bg"), this);
+ HbStyle::setItemName(mClockBackground, QLatin1String("clock_background"));
+ }
+
+ // Calculate angles for clock hands.
+ QTime time = QTime::currentTime();
+ qreal s = 6 * time.second();
+ qreal m = 6 * (time.minute() + s/360);
+ qreal h = 30 * ((time.hour() % 12) + m/360);
+
+ if (!mClockHourHand) {
+ mClockHourHand = new HbIconItem(QLatin1String("qtg_graf_clock_day_hour"), this);
+ HbStyle::setItemName(mClockHourHand, QLatin1String("clock_hour_hand"));
+ }
+
+ int x = mClockHourHand->geometry().width()/2;
+ int y = mClockHourHand->geometry().height()/2;
+ mClockHourHand->setTransform(QTransform().translate(x, y).rotate(h).translate(-x, -y));
+
+ if (!mClockMinuteHand) {
+ mClockMinuteHand = new HbIconItem(QLatin1String("qtg_graf_clock_day_min"), this);
+ HbStyle::setItemName(mClockMinuteHand, QLatin1String("clock_minute_hand"));
+ }
+
+ x = mClockMinuteHand->geometry().width()/2;
+ y = mClockMinuteHand->geometry().height()/2;
+ mClockMinuteHand->setTransform(QTransform().translate(x, y).rotate(m).translate(-x, -y));
+
+
+ if (!mClockSecondHand) {
+ mClockSecondHand = new HbIconItem(QLatin1String("qtg_graf_clock_day_sec"), this);
+ HbStyle::setItemName(mClockSecondHand, QLatin1String("clock_second_hand"));
+ }
+
+ x = mClockSecondHand->geometry().width()/2;
+ y = mClockSecondHand->geometry().height()/2;
+ mClockSecondHand->setTransform(QTransform().translate(x, y).rotate(s).translate(-x, -y));
+
+}
+
+/*!
+ Updates clock visualization according to current time
+ */
+void AnalogClockWidget::tick()
+{
+ updatePrimitives();
+ update();
+}
+
+/*!
+ Handles polish event
+ */
+void AnalogClockWidget::polish( HbStyleParameters& params )
+{
+ HbWidget::polish(params);
+ updatePrimitives();
+}
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetimpl/src/clockwidget.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,146 @@
+/*
+* 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: Clockwidget
+*
+*/
+
+// System includes
+#include <QGraphicsLinearLayout>
+
+// User includes
+#include "clockwidget.h"
+#include "analogclockwidget.h"
+#include "digitalclockwidget.h"
+
+/*!
+ \class ClockWidget
+
+ This is the generic wrapper for the clockwidget which manages analog and ditial clockwidgets.
+ */
+
+/*!
+ Constructor.
+ */
+ClockWidget::ClockWidget(QGraphicsItem *parent, Qt::WindowFlags flags)
+ : HbWidget(parent, flags),
+ mClockType(ClockTypeDigital)
+{
+ loadClockWidget();
+}
+
+/*!
+ Destructor.
+*/
+ClockWidget::~ClockWidget()
+{
+
+}
+
+/*!
+ Returns the clock type.
+*/
+ClockWidget::ClockType ClockWidget::clockType() const
+{
+ return mClockType;
+}
+
+/*!
+ Sets the clock type;
+*/
+void ClockWidget::setClockType(const ClockType &type)
+{
+ if (type == ClockTypeAnalog) {
+ if(type != mClockType){
+ mClockType = ClockTypeAnalog;
+ updateClockWidget();
+ }
+ } else {
+ if(type != mClockType){
+ mClockType = ClockTypeDigital;
+ updateClockWidget();
+ }
+ }
+}
+
+/*!
+ Updates the clock time with every second
+*/
+void ClockWidget::updateTime()
+{
+ if (mClockType == ClockTypeAnalog) {
+ mAnalogClock->tick();
+ } else {
+ mDigitalClock->updatePrimitives();
+ }
+}
+
+/*!
+ Constructs the clockwidget based upon its type.
+*/
+void ClockWidget::loadClockWidget()
+{
+ mLayout = new QGraphicsLinearLayout(Qt::Vertical);
+ mLayout->setContentsMargins(0,0,0,0);
+
+ if (mClockType == ClockTypeAnalog) {
+ 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);
+ } 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 Mon Jun 28 15:22:02 2010 +0530
@@ -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);
+
+}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetplugin/clockwidgetplugin.h Mon Jun 28 15:22:02 2010 +0530
@@ -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: Clockwidget custom document loader plugin.
+*
+*/
+
+#ifndef CLOCKWIDGETDPLUGIN_H
+#define CLOCKWIDGETDPLUGIN_H
+
+// System includes
+#include <hbdocumentloaderplugin.h>
+#include <qplugin.h>
+
+
+class ClockWidgetPlugin : public HbDocumentLoaderPlugin
+{
+
+private:
+ virtual QObject *createObject(const QString &type, const QString &name);
+ virtual QList<const QMetaObject *> supportedObjects();
+
+};
+Q_EXPORT_PLUGIN(ClockWidgetPlugin)
+
+#endif // CLOCKWIDGETDPLUGIN_H
+
+// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetplugin/clockwidgetplugin.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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: This is the project specification file for the
+# clockwidgetplugin.
+#
+
+TEMPLATE = lib
+TARGET = clockwidgetplugin
+
+win32{
+CONFIG(release, debug|release){
+ TARGET = clockwidgetplugin
+ } else {
+ TARGET = clockwidgetplugind
+ }
+}
+
+CONFIG += hb plugin
+
+win32{
+CONFIG(release, debug|release){
+ DESTDIR = ../release # for easy plugin loading
+ LIBS += -L../release -lclockwidget
+ } else {
+ DESTDIR = ../debug # for easy plugin loading
+ LIBS += -L../debug -lclockwidgetd
+ }
+}
+
+SOURCES += \
+ main.cpp
+
+INCLUDEPATH += \
+ ../clockwidgetimpl \
+ ../clockwidgetimpl/inc
+
+symbian: {
+ TARGET.UID3 = 0x2002E716
+ TARGET.EPOCALLOWDLLDATA=1
+ TARGET.CAPABILITY = CAP_GENERAL_DLL
+
+ LIBS += \
+ -lclockwidget.dll
+
+ pluginstub.sources = clockwidgetplugin.dll
+ pluginstub.path = /resource/plugins
+ DEPLOYMENT += pluginstub
+ DESTDIR = $$HB_PLUGINS_DIR
+}
+
+!local {
+ target.path = $$HB_PLUGINS_DIR
+ INSTALLS += target
+}
+
+# End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clockwidget/clockwidgetplugin/main.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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: Clock widget
+*
+*/
+
+// User includes
+#include "clockwidgetplugin.h"
+#include "clockwidget.h"
+
+/*!
+ \class ClockWidgetPlugin
+
+ This class is a wrapper plug-in DLL that references the custom widget DLLs that need to be part of the widget package.
+*/
+
+
+/*!
+ Creates an instance of each of the types of custom widget supported in this plug-in.
+ The code uses the parameter type to control which type of object must be created.
+ It also sets the created object's name
+*/
+QObject *ClockWidgetPlugin::createObject(const QString &type, const QString &name)
+{
+ if (type == ClockWidget::staticMetaObject.className()) {
+ QObject *object = new ClockWidget();
+ object->setObjectName(name);
+ return object;
+ }
+ return 0;
+}
+
+/*!
+ Get a QMetaObject for each custom widget and add it to the list of supported objects.
+ A QMetaObject pointer must be added for every custom widget that is created by the plug-in.
+*/
+QList<const QMetaObject *> ClockWidgetPlugin::supportedObjects()
+{
+ QList<const QMetaObject *> list;
+ list.append( &ClockWidget::staticMetaObject );
+ return list;
+}
+
+// End of file --Don't remove this.
--- a/clock/clockui/clockwidget/inc/analogclock.h Mon May 03 12:30:32 2010 +0300
+++ /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:
-*
-*/
-
-// analogclock.h
-
-#ifndef ANALOGCLOCK_H
-#define ANALOGCLOCK_H
-
-#include <QObject>
-
-#include <hbwidget.h>
-#include <hbeffect.h>
-
-class QGraphicsWidget;
-class QStyleOptionGraphicsItem;
-class QPainter;
-class HbIconItem;
-class HbStackedLayout;
-
-class AnalogClock : public HbWidget
-{
- Q_OBJECT
-
-public:
- AnalogClock(QGraphicsWidget *parent = 0);
- ~AnalogClock();
-
-public:
- void showNext();
- void showPrev();
-
-public slots:
- void updateDisplay();
-
-protected:
- void paint(QPainter *painter,
- const QStyleOptionGraphicsItem *option,
- QWidget *widget = 0);
-
-private:
- void constructImages();
-
-private slots:
- void widget_hidden(const HbEffect::EffectStatus &status);
-
-private:
- QString mFaceName;
- QString mHourName;
- QString mMinuteName;
-
- HbIconItem *mClockFace;
- HbIconItem *mHourHand;
- HbIconItem *mMinuteHand;
- HbStackedLayout* mParentLayout;
-
- bool mIsDay;
- bool mFirstDraw;
- int mCurrentClock;
-};
-
-#endif // ANALOGCLOCK_P_H
-
-// End of file
--- a/clock/clockui/clockwidget/inc/clockwidgetdefines.h Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +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:
- * Common definition file for clockwidget component.
- *
- */
-
-#ifndef CLOCKWIDGETDEFINES_H
-#define CLOCKWIDGETDEFINES_H
-
-// System includes
-#include <qglobal.h>
-
-#ifdef CLOCKWIDGET_LIB
-# define CLOCKWIDGET_EXPORT Q_DECL_EXPORT
-#else
-# define CLOCKWIDGET_EXPORT Q_DECL_IMPORT
-#endif
-
-#endif // CLOCKWIDGETDEFINES_H
-
-// End of file --Don't remove this.
--- a/clock/clockui/clockwidget/inc/digitalclock.h Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,67 +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:
-*
-*/
-
-// digitalclock.h
-
-#ifndef DIGITALCLOCK_H
-#define DIGITALCLOCK_H
-
-#include <QObject>
-
-#include <hbwidget.h>
-#include <hbeffect.h>
-
-class QGraphicsLinearLayout;
-class QGraphicsWidget;
-class HbIconItem;
-class HbLabel;
-
-class DigitalClock : public HbWidget
-{
- Q_OBJECT
-
-public:
- DigitalClock(QGraphicsWidget *parent = 0);
- ~DigitalClock();
-
-public:
- void updateDisplay();
-
-public slots:
- void fadeBackIn(const HbEffect::EffectStatus &status);
-
-private:
- void constructImages();
-
-private:
- QGraphicsLinearLayout *mDigitalClockLayout;
- QGraphicsLinearLayout *mWidgetLayout;
- QGraphicsWidget *mDummyWidget;
-
- HbIconItem *mPositionOne;
- HbIconItem *mPositionTwo;
- HbIconItem *mPositionThree;
- HbIconItem *mPositionFour;
- HbIconItem *mSeperator;
- HbLabel *mAmPmLabel;
-
- bool m24HourFormat;
-};
-
-#endif // DIGITALCLOCK_H
-
-// End of file
--- a/clock/clockui/clockwidget/inc/skinnableclock.h Mon May 03 12:30:32 2010 +0300
+++ /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:
- *
- */
-
-#ifndef SKINNABLECLOCK_H
-#define SKINNABLECLOCK_H
-
-#include <QObject>
-#include <hbwidget.h>
-#include <hbeffect.h>
-
-#include "clockwidgetdefines.h"
-
-class QTimer;
-class QEvent;
-class QGraphicsLinearLayout;
-class AnalogClock;
-class DigitalClock;
-class TimezoneClient;
-class SettingsUtility;
-
-class CLOCKWIDGET_EXPORT SkinnableClock : public HbWidget
-{
- Q_OBJECT
-
-public:
- SkinnableClock(QGraphicsItem *parent = 0);
- ~SkinnableClock();
-
-public:
- bool clockTypeAnalog();
- bool clockFormat24();
-
-public slots:
- void updateDisplay(bool newTimer = true);
- void updateClockType();
- void finishChangeType(const HbEffect::EffectStatus &status);
-
-protected:
-// bool sceneEvent(QEvent *event);
- void paint(QPainter *painter,
- const QStyleOptionGraphicsItem *option,
- QWidget *widget = 0);
-
-private:
- void setClockTypeAnalog(bool analog);
- void startChangeType();
-
-private:
- QTimer *mTickTimer;
- QGraphicsLinearLayout *mLayout;
-
- AnalogClock *mAnalogClock;
- DigitalClock *mDigitalClock;
- TimezoneClient *mClient;
- SettingsUtility *mSettingsUtility;
-
- bool mAnalog;
- bool mClockFormat24;
- bool mUpdateNeeded;
-};
-
-#endif // SKINNABLECLOCK_H
-
-// End of file
--- a/clock/clockui/clockwidget/src/analogclock.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,241 +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:
-*
-*/
-
-// analogclock.cpp
-
-#include <QTime>
-#include <QTimer>
-#include <QPainter>
-#include <QStyleOptionGraphicsItem>
-#include <QGraphicsWidget>
-#include <hbiconitem.h>
-#include <hbstackedlayout.h>
-
-#include "analogclock.h"
-
-const QString KPrefix(":/clock/");
-const QString KUnderScore("_");
-const QString KFaceDay(":/clock/analog_face_day");
-const QString KHourDay(":/clock/hour_hand_day");
-const QString KMinDay(":/clock/minute_hand_day");
-const QString KFaceNight("analog_face_night");
-const QString KHourNight("hour_hand_night");
-const QString KMinNight("minute_hand_night");
-
-AnalogClock::AnalogClock(QGraphicsWidget *parent)
-:HbWidget(parent),
- mIsDay(true),
- mFirstDraw(true),
- mCurrentClock(0)
-{
- // Add the required effects.
- HbEffect::add(this,
- QString(":/clock/hide_widget.fxml"),
- "hide_widget");
-
- // Construct the images here.
- constructImages();
-
- // A single shot timer after which the hands are updated to show the
- // correct time.
- // TODO: QTimer::singleShot(500, this, SLOT(updateDisplay()));
-}
-
-AnalogClock::~AnalogClock()
-{
- // No implementation yet.
-}
-
-void AnalogClock::showPrev()
-{
- mCurrentClock--;
- if (mCurrentClock < 0) {
- mCurrentClock = 3;
- }
- // Start the effect.
- HbEffect::start(this, "hide_widget", this, "widget_hidden");
-}
-
-void AnalogClock::showNext()
-{
- mCurrentClock++;
- mCurrentClock = mCurrentClock % 4;
-
- // Start the effect.
- HbEffect::start(this, "hide_widget", this, "widget_hidden");
-}
-
-void AnalogClock::updateDisplay()
-{
- // Take the current time.
- bool changeClock = false;
- QTime timeNow = QTime::currentTime();
- int hourNow = timeNow.hour();
-
- if (17 < hourNow || 6 > hourNow) {
- if (mIsDay) {
- // It was previously day. We need to change the clock
- changeClock = true;
- }
- mIsDay = false;
- } else {
- if (!mIsDay) {
- // It was previously night. We need to change the clock
- changeClock = true;
- }
- mIsDay = true;
- }
-
- if (changeClock) {
- if (mIsDay) {
- mClockFace->setIconName(mFaceName);
- mHourHand->setIconName(mHourName);
- mMinuteHand->setIconName(mMinuteName);
- } else {
- mClockFace->setIconName(mFaceName);
- mHourHand->setIconName(mHourName);
- mMinuteHand->setIconName(mMinuteName);
- }
- }
-
- // Calculate the rotation angle for hour hand.
- qreal hourAngle = 30.0*((timeNow.hour()+timeNow.minute()/60.0));
- hourAngle += 270;
-
- // Rotate the hour hand.
- mHourHand->setTransform(
- QTransform().translate(mHourHand->iconItemSize().width()/2,
- mHourHand->iconItemSize().height()/2).rotate(hourAngle)
- .translate(-mHourHand->iconItemSize().width()/2,
- -mHourHand->iconItemSize().height()/2));
-
- // Rotate the minute hand.
- mMinuteHand->setTransform(
- QTransform().translate(mMinuteHand->iconItemSize().width()/2,
- mMinuteHand->iconItemSize().height()/2)
- .rotate(6.0*(timeNow.minute()+timeNow.second()/60.0))
- .translate(-mMinuteHand->iconItemSize().width()/2,
- -mMinuteHand->iconItemSize().height()/2));
-}
-
-void AnalogClock::paint(QPainter *painter,
- const QStyleOptionGraphicsItem *option,
- QWidget *widget)
-{
- Q_UNUSED(painter)
- Q_UNUSED(option)
- Q_UNUSED(widget)
-
- if (mFirstDraw) {
- mFirstDraw = false;
-
- QTime timeNow = QTime::currentTime();
- int hourNow = timeNow.hour();
-
- // Calculate the rotation angle for hour hand.
- qreal hourAngle = 30.0 * ((timeNow.hour() + timeNow.minute() / 60.0));
- hourAngle += 270;
-
- // Rotate the hour hand.
- mHourHand->setTransform(
- QTransform().translate(mHourHand->iconItemSize().width()/2,
- mHourHand->iconItemSize().height()/2).rotate(hourAngle)
- .translate(-mHourHand->iconItemSize().width()/2,
- -mHourHand->iconItemSize().height()/2));
-
- // Rotate the minute hand.
- mMinuteHand->setTransform(
- QTransform().translate(mMinuteHand->iconItemSize().width()/2,
- mMinuteHand->iconItemSize().height()/2)
- .rotate(6.0*(timeNow.minute()+timeNow.second()/60.0))
- .translate(-mMinuteHand->iconItemSize().width()/2,
- -mMinuteHand->iconItemSize().height()/2));
-
- }
-}
-
-void AnalogClock::constructImages()
-{
- mFaceName.append(KFaceDay);
- mHourName.append(KHourDay);
- mMinuteName.append(KMinDay);
-
- mParentLayout = new HbStackedLayout(this);
-
- mClockFace = new HbIconItem(mFaceName, this);
- mHourHand = new HbIconItem(mHourName, this);
- mMinuteHand = new HbIconItem(mMinuteName, this);
-
- mParentLayout->addItem(mClockFace);
- mParentLayout->addItem(mHourHand);
- mParentLayout->addItem(mMinuteHand);
-
- setLayout(mParentLayout);
-}
-
-void AnalogClock::widget_hidden(const HbEffect::EffectStatus &status)
-{
- Q_UNUSED(status)
-
- QString clockNum;
- clockNum = clockNum.setNum(mCurrentClock);
-
- mFaceName.clear();
- mHourName.clear();
- mMinuteName.clear();
-
- if (mIsDay) {
- mFaceName.append(KPrefix);
- mFaceName.append(clockNum);
- mFaceName.append(KUnderScore);
- mFaceName.append(KFaceDay);
-
- mHourName.append(KPrefix);
- mHourName.append(clockNum);
- mHourName.append(KUnderScore);
- mHourName.append(KHourDay);
-
- mMinuteName.append(KPrefix);
- mMinuteName.append(clockNum);
- mMinuteName.append(KUnderScore);
- mMinuteName.append(KMinDay);
- } else {
- mFaceName.append(KPrefix);
- mFaceName.append(clockNum);
- mFaceName.append(KUnderScore);
- mFaceName.append(KFaceNight);
-
- mHourName.append(KPrefix);
- mHourName.append(clockNum);
- mHourName.append(KUnderScore);
- mHourName.append(KHourNight);
-
- mMinuteName.append(KPrefix);
- mMinuteName.append(clockNum);
- mMinuteName.append(KUnderScore);
- mMinuteName.append(KMinNight);
- }
-
- mClockFace->setIconName(mFaceName);
- mHourHand->setIconName(mHourName);
- mMinuteHand->setIconName(mMinuteName);
-
- HbEffect::add(this, QString(":/clock/show_widget.fxml"), "show_widget");
- HbEffect::start(this, "show_widget");
-}
-
-// End of file
--- a/clock/clockui/clockwidget/src/digitalclock.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,273 +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:
-*
-*/
-
-// digitalclock.cpp
-
-#include <QGraphicsLinearLayout>
-#include <QGraphicsWidget>
-#include <QWidget>
-#include <QTime>
-
-#include <hbiconitem.h>
-#include <hblabel.h>
-#include <hbaction.h>
-
-#include "digitalclock.h"
-
-DigitalClock::DigitalClock(QGraphicsWidget *parent)
-:HbWidget(parent),
-m24HourFormat(false)
-{
- constructImages();
-}
-
-DigitalClock::~DigitalClock()
-{
- // No implementation yet.
-}
-
-void DigitalClock::updateDisplay()
-{
- QTime currentTime = QTime::currentTime();
- int currentHour, currentMin;
- if (!m24HourFormat && currentTime.hour() > 12) {
- currentHour = currentTime.hour() % 12;
- } else {
- currentHour = currentTime.hour();
- }
- currentMin = currentTime.minute();
-
- int numAt1, numAt2, numAt3, numAt4;
- numAt1 = currentHour / 10;
- numAt2 = currentHour % 10;
- numAt3 = currentMin / 10;
- numAt4 = currentMin % 10;
-
- // The first digit.
- if (m24HourFormat) {
- switch (numAt1) {
- case 0:
- mPositionOne->setIconName(":/clock/digit_zero");
- break;
- case 1:
- mPositionOne->setIconName(":/clock/digit_one");
- break;
- case 2:
- mPositionOne->setIconName(":/clock/digit_two");
- break;
- default:
- break;
- }
- } else {
- switch (numAt1) {
- case 0:
- mPositionOne->setIconName(":/clock/digit_zero");
- break;
- case 1:
- mPositionOne->setIconName(":/clock/digit_one");
- break;
- default:
- break;
- }
- }
-
- // The second digit.
- switch(numAt2) {
- case 0:
- mPositionTwo->setIconName(":/clock/digit_zero");
- break;
- case 1:
- mPositionTwo->setIconName(":/clock/digit_one");
- break;
- case 2:
- mPositionTwo->setIconName(":/clock/digit_two");
- break;
- case 3:
- mPositionTwo->setIconName(":/clock/digit_three");
- break;
- case 4:
- mPositionTwo->setIconName(":/clock/digit_four");
- break;
- case 5:
- mPositionTwo->setIconName(":/clock/digit_five");
- break;
- case 6:
- mPositionTwo->setIconName(":/clock/digit_six");
- break;
- case 7:
- mPositionTwo->setIconName(":/clock/digit_seven");
- break;
- case 8:
- mPositionTwo->setIconName(":/clock/digit_eight");
- break;
- case 9:
- mPositionTwo->setIconName(":/clock/digit_nine");
- break;
- default:
- break;
- }
-
- // The separator.
- mSeperator->setIconName(":/clock/sep_colon");
- // Start the blinking effect.
- HbEffect::start(mSeperator, "fade_out", this, "fadeBackIn");
-
- // The third digit.
- switch (numAt3) {
- case 0:
- mPositionThree->setIconName(":/clock/digit_zero");
- break;
- case 1:
- mPositionThree->setIconName(":/clock/digit_one");
- break;
- case 2:
- mPositionThree->setIconName(":/clock/digit_two");
- break;
- case 3:
- mPositionThree->setIconName(":/clock/digit_three");
- break;
- case 4:
- mPositionThree->setIconName(":/clock/digit_four");
- break;
- case 5:
- mPositionThree->setIconName(":/clock/digit_five");
- break;
- case 6:
- mPositionThree->setIconName(":/clock/digit_six");
- break;
- case 7:
- mPositionThree->setIconName(":/clock/digit_seven");
- break;
- case 8:
- mPositionThree->setIconName(":/clock/digit_eight");
- break;
- case 9:
- mPositionThree->setIconName(":/clock/digit_nine");
- break;
- default:
- break;
- }
-
- // The fourth digit.
- switch (numAt4) {
- case 0:
- mPositionFour->setIconName(":/clock/digit_zero");
- break;
- case 1:
- mPositionFour->setIconName(":/clock/digit_one");
- break;
- case 2:
- mPositionFour->setIconName(":/clock/digit_two");
- break;
- case 3:
- mPositionFour->setIconName(":/clock/digit_three");
- break;
- case 4:
- mPositionFour->setIconName(":/clock/digit_four");
- break;
- case 5:
- mPositionFour->setIconName(":/clock/digit_five");
- break;
- case 6:
- mPositionFour->setIconName(":/clock/digit_six");
- break;
- case 7:
- mPositionFour->setIconName(":/clock/digit_seven");
- break;
- case 8:
- mPositionFour->setIconName(":/clock/digit_eight");
- break;
- case 9:
- mPositionFour->setIconName(":/clock/digit_nine");
- break;
- default:
- break;
- }
-
- if (!m24HourFormat) {
- mAmPmLabel->setPlainText(currentTime.toString("ap"));
- } else {
- mAmPmLabel->setPlainText((""));
- }
-}
-
-void DigitalClock::fadeBackIn(const HbEffect::EffectStatus &status)
-{
- Q_UNUSED(status)
-
- HbEffect::start(mSeperator, "fade_in");
-}
-
-void DigitalClock::constructImages()
-{
- mDummyWidget = new QGraphicsWidget(this);
- mWidgetLayout = new QGraphicsLinearLayout(Qt::Vertical);
- mDigitalClockLayout =
- new QGraphicsLinearLayout(Qt::Horizontal, mDummyWidget);
-
- // The icon at the first position.
- mPositionOne = new HbIconItem(QString(), mDummyWidget);
- mPositionOne->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- mDigitalClockLayout->addItem(mPositionOne);
-
- // The icon at the second position.
- mPositionTwo = new HbIconItem(QString(), mDummyWidget);
- mPositionTwo->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- mDigitalClockLayout->addItem(mPositionTwo);
-
- // The icon for separator.
- mSeperator = new HbIconItem(QString(), mDummyWidget);
- mSeperator->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- mDigitalClockLayout->addItem(mSeperator);
-
- // The icon at the third position.
- mPositionThree = new HbIconItem(QString(), mDummyWidget);
- mPositionThree->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- mDigitalClockLayout->addItem(mPositionThree);
-
- // The icon at the fourth position.
- mPositionFour = new HbIconItem(QString(), mDummyWidget);
- mPositionFour->setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Minimum);
- mDigitalClockLayout->addItem(mPositionFour);
-
- mDummyWidget->setLayout(mDigitalClockLayout);
-
- mAmPmLabel = new HbLabel((""), this);
- //mAmPmLabel->setLogicalFont(Hb::FontPrimarySmall);
- mAmPmLabel->setAlignment(Qt::AlignRight);
-
- mWidgetLayout->addItem(mDummyWidget);
- mWidgetLayout->addItem(mAmPmLabel);
-
- QGraphicsLinearLayout *layout =
- new QGraphicsLinearLayout(Qt::Horizontal, this);
- layout->addStretch(100);
- layout->addItem(mWidgetLayout);
- layout->addStretch(100);
-
- setLayout(layout);
-
- // Add the blinking effect to the separator.
- HbEffect::add(mSeperator,
- QString(":/clock/fade_out.fxml"),
- "fade_out");
- HbEffect::add(mSeperator,
- QString(":/clock/fade_in.fxml"),
- "fade_in");
-}
-
-// End of file
--- a/clock/clockui/clockwidget/src/skinnableclock.cpp Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,242 +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:
-*
-*/
-
-// skinnableclock.cpp
-
-#include <QTimer>
-#include <QTime>
-#include <QGraphicsLinearLayout>
-#include <hbaction.h>
-
-#include "skinnableclock.h"
-#include "analogclock.h"
-#include "digitalclock.h"
-#include "timezoneclient.h"
-#include "settingsutility.h"
-
-SkinnableClock::SkinnableClock(QGraphicsItem *parent)
-:HbWidget(parent),
- mAnalogClock(0),
- mDigitalClock(0),
- mAnalog(true),
- mClockFormat24(true),
- mUpdateNeeded(true)
-{
- // Enable the gestures for the widget and subscribe for "PAN" gestures.
-/* QApplication::setAttribute(Qt::AA_EnableGestures);
- grabGesture(Qt::PanGesture);*/
-
- qDebug("clock: SkinnableClock::SkinnableClock() -->");
-
- // Construct the settings utility.
- mSettingsUtility = new SettingsUtility(this);
-
- qDebug("clock: SkinnableClock::SkinnableClock() - constructed settingsutility.");
-
- // Construct the layout and the widgets.
- mLayout = new QGraphicsLinearLayout(Qt::Vertical, this);
- mAnalogClock = new AnalogClock(this);
- mDigitalClock = new DigitalClock(this);
-
- // Set the clock type according to the seetings.
- // And construct the corresponding widget.
- QStringList clockTypeList;
- int typeIndex = mSettingsUtility->clockType(clockTypeList);
- if (0 == typeIndex) {
- setClockTypeAnalog(true);
- } else {
- setClockTypeAnalog(false);
- }
-
- setLayout(mLayout);
-
- // Add the required effects.
- HbEffect::add(mAnalogClock,
- QString(":/clock/disappear.fxml"),
- "disappear");
- HbEffect::add(mDigitalClock,
- QString(":/clock/disappear.fxml"),
- "disappear");
- HbEffect::add(mAnalogClock,
- QString(":/clock/appear.fxml"),
- "appear");
- HbEffect::add(mDigitalClock,
- QString(":/clock/appear.fxml"),
- "appear");
-
- mClient = new TimezoneClient(this);
- qDebug("clock: SkinnableClock::SkinnableClock() - constructed tzclient");
-
- connect(mClient, SIGNAL(timechanged()),
- this, SLOT(updateDisplay()));
- connect(mClient, SIGNAL(timechanged()),
- this, SLOT(updateClockType()));
-
- // Start a timer.
- mTickTimer = new QTimer(this);
- QObject::connect(mTickTimer, SIGNAL(timeout()),
- this, SLOT(updateDisplay()));
- // TODO: mTickTimer->start(60000 - 1000 * QTime::currentTime().second());
- mTickTimer->start(1000);
-
- qDebug("clock: SkinnableClock::SkinnableClock() <--");
-}
-
-SkinnableClock::~SkinnableClock()
-{
- // No implementation yet.
-}
-
-
-bool SkinnableClock::clockTypeAnalog()
-{
- return mAnalog;
-}
-
-bool SkinnableClock::clockFormat24()
-{
- return mClockFormat24;
-}
-
-void SkinnableClock::updateDisplay(bool newTimer)
-{
- if (newTimer) {
- // Start the timer again for 1 minute.
- // TODO: mTickTimer->start(60000 - 1000 * QTime::currentTime().second());
- mTickTimer->start(1000);
- }
-
- if (mAnalog) {
- mAnalogClock->updateDisplay();
- } else {
- mDigitalClock->updateDisplay();
- }
-}
-
-void SkinnableClock::updateClockType()
-{
- // Update the clock type according to the seetings.
- QStringList clockTypeList;
- int typeIndex = mSettingsUtility->clockType(clockTypeList);
-
- if ((mAnalog && 1 == typeIndex) || (!mAnalog && 0 == typeIndex)) {
- mUpdateNeeded = true;
- mAnalog = !mAnalog;
- mDigitalClock->hide();
- mAnalogClock->hide();
- } else {
- mUpdateNeeded = false;
- }
-}
-
-/*bool SkinnableClock::sceneEvent(QEvent *event)
-{
- if (event->type() == QEvent::GraphicsSceneGesture) {
- QGraphicsSceneGestureEvent *gestureEvent =
- static_cast<QGraphicsSceneGestureEvent*>(event);
- if (const QGesture *gesture = gestureEvent->gesture(Qt::PanGesture)) {
- const QPanningGesture *panningGesture =
- static_cast<const QPanningGesture*>(gesture);
-
- if (Qt::GestureFinished == gesture->state()) {
- if (Qt::LeftDirection == panningGesture->direction()) {
- if (mAnalog) {
- mAnalogClock->showPrev();
- }
- } else if (Qt::RightDirection == panningGesture->direction()) {
- if (mAnalog) {
- mAnalogClock->showNext();
- }
- } else if (Qt::UpDirection == panningGesture->direction() ||
- Qt::DownDirection == panningGesture->direction()) {
- startChangeType();
- }
- event->accept();
- return true;
- }
- event->accept();
- return true;
- }
- }
- return HbWidget::sceneEvent(event);
-}*/
-
-void SkinnableClock::paint(QPainter *painter,
- const QStyleOptionGraphicsItem *option,
- QWidget *widget)
-{
- Q_UNUSED(painter)
- Q_UNUSED(option)
- Q_UNUSED(widget)
-
- if (mUpdateNeeded) {
- setClockTypeAnalog(mAnalog);
- mUpdateNeeded = !mUpdateNeeded;
- }
-}
-
-void SkinnableClock::setClockTypeAnalog(bool analog)
-{
- if (analog) {
- mDigitalClock->hide();
- mLayout->removeItem(mDigitalClock);
- mAnalogClock->show();
- mLayout->addItem(mAnalogClock);
- } else {
- mAnalogClock->hide();
- mLayout->removeItem(mAnalogClock);
- mDigitalClock->show();
- mLayout->addItem(mDigitalClock);
- }
-
- mAnalog = analog;
-
- // Update the display.
- updateDisplay(false);
-}
-
-void SkinnableClock::startChangeType()
-{
- if (mAnalog) {
- HbEffect::start(mAnalogClock,
- "disappear",
- this,
- "finishChangeType");
- } else {
- HbEffect::start(mDigitalClock,
- "disappear",
- this,
- "finishChangeType");
- }
-}
-
-void SkinnableClock::finishChangeType(const HbEffect::EffectStatus &status)
-{
- Q_UNUSED(status)
-
- setClockTypeAnalog(!mAnalog);
-
- if (mAnalog) {
- HbEffect::start(mAnalogClock,
- "appear");
- } else {
- HbEffect::start(mDigitalClock,
- "appear");
- }
-}
-
-// End of file
--- a/clock/clockui/eabi/clockalarmeditoru.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-EXPORTS
- _ZN16ClockAlarmEditor15showAlarmEditorEv @ 1 NONAME
- _ZN16ClockAlarmEditorC1EiP15QGraphicsWidget @ 2 NONAME
- _ZN16ClockAlarmEditorC2EiP15QGraphicsWidget @ 3 NONAME
- _ZN16ClockAlarmEditorD0Ev @ 4 NONAME
- _ZN16ClockAlarmEditorD1Ev @ 5 NONAME
- _ZN16ClockAlarmEditorD2Ev @ 6 NONAME
- _ZThn16_N16ClockAlarmEditorD0Ev @ 7 NONAME
- _ZThn16_N16ClockAlarmEditorD1Ev @ 8 NONAME
- _ZThn8_N16ClockAlarmEditorD0Ev @ 9 NONAME
- _ZThn8_N16ClockAlarmEditorD1Ev @ 10 NONAME
-
--- a/clock/clockui/eabi/clockappcontrolleru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-EXPORTS
- _ZN13ClockMainView9setupViewER20ClockAppControllerIfP14ClockDocLoader @ 1 NONAME
- _ZN13ClockMainViewC1EP13QGraphicsItem @ 2 NONAME
- _ZN13ClockMainViewC2EP13QGraphicsItem @ 3 NONAME
- _ZN13ClockMainViewD0Ev @ 4 NONAME
- _ZN13ClockMainViewD1Ev @ 5 NONAME
- _ZN13ClockMainViewD2Ev @ 6 NONAME
- _ZN14ClockWorldView9setupViewER20ClockAppControllerIfP14ClockDocLoader @ 7 NONAME
- _ZN14ClockWorldViewC1EP13QGraphicsItem @ 8 NONAME
- _ZN14ClockWorldViewC2EP13QGraphicsItem @ 9 NONAME
- _ZN14ClockWorldViewD0Ev @ 10 NONAME
- _ZN14ClockWorldViewD1Ev @ 11 NONAME
- _ZN14ClockWorldViewD2Ev @ 12 NONAME
- _ZThn16_N13ClockMainViewD0Ev @ 13 NONAME
- _ZThn16_N13ClockMainViewD1Ev @ 14 NONAME
- _ZThn16_N14ClockWorldViewD0Ev @ 15 NONAME
- _ZThn16_N14ClockWorldViewD1Ev @ 16 NONAME
- _ZThn8_N13ClockMainViewD0Ev @ 17 NONAME
- _ZThn8_N13ClockMainViewD1Ev @ 18 NONAME
- _ZThn8_N14ClockWorldViewD0Ev @ 19 NONAME
- _ZThn8_N14ClockWorldViewD1Ev @ 20 NONAME
-
--- a/clock/clockui/eabi/clockwidgetprotou.def Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-EXPORTS
- _ZN14SkinnableClock11qt_metacallEN11QMetaObject4CallEiPPv @ 1 NONAME
- _ZN14SkinnableClock11qt_metacastEPKc @ 2 NONAME
- _ZN14SkinnableClock13clockFormat24Ev @ 3 NONAME
- _ZN14SkinnableClock13updateDisplayEb @ 4 NONAME
- _ZN14SkinnableClock15clockTypeAnalogEv @ 5 NONAME
- _ZN14SkinnableClock15startChangeTypeEv @ 6 NONAME
- _ZN14SkinnableClock15updateClockTypeEv @ 7 NONAME
- _ZN14SkinnableClock16finishChangeTypeERKN8HbEffect12EffectStatusE @ 8 NONAME
- _ZN14SkinnableClock16staticMetaObjectE @ 9 NONAME DATA 16
- _ZN14SkinnableClock18setClockTypeAnalogEb @ 10 NONAME
- _ZN14SkinnableClock19getStaticMetaObjectEv @ 11 NONAME
- _ZN14SkinnableClock5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 12 NONAME
- _ZN14SkinnableClockC1EP13QGraphicsItem @ 13 NONAME
- _ZN14SkinnableClockC2EP13QGraphicsItem @ 14 NONAME
- _ZN14SkinnableClockD0Ev @ 15 NONAME
- _ZN14SkinnableClockD1Ev @ 16 NONAME
- _ZN14SkinnableClockD2Ev @ 17 NONAME
- _ZNK14SkinnableClock10metaObjectEv @ 18 NONAME
- _ZTI14SkinnableClock @ 19 NONAME
- _ZTV14SkinnableClock @ 20 NONAME
- _ZThn16_N14SkinnableClockD0Ev @ 21 NONAME
- _ZThn16_N14SkinnableClockD1Ev @ 22 NONAME
- _ZThn8_N14SkinnableClock5paintEP8QPainterPK24QStyleOptionGraphicsItemP7QWidget @ 23 NONAME
- _ZThn8_N14SkinnableClockD0Ev @ 24 NONAME
- _ZThn8_N14SkinnableClockD1Ev @ 25 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/alarm/qtg_test_alarm.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <circle cx="30.819" cy="29.887" r="4.693"/>
- </g>
- <g>
- <g>
- <path d="M13.694,37.482c-0.165,0-0.318-0.063-0.437-0.181l0,0L8.09,32.133c-0.11-0.113-0.174-0.262-0.181-0.419l0,0
- l-0.206-6.682c-1.64-1.418-4.903-4.7-5.305-9.255l0,0c-0.026-0.296-0.037-0.585-0.037-0.865l0,0
- C2.359,11.884,3.728,9.006,6.322,6.42l0,0c2.55-2.561,5.41-3.906,8.438-3.904l0,0c0.279,0,0.554,0.015,0.826,0.035l0,0
- c4.699,0.388,8.168,3.764,9.682,5.476l0,0l6.564-0.237c0.172-0.008,0.344,0.062,0.465,0.186l0,0l5.164,5.243
- c0.238,0.241,0.234,0.631-0.004,0.869l0,0L14.13,37.304c-0.111,0.111-0.261,0.179-0.424,0.179l0,0
- C13.702,37.482,13.698,37.482,13.694,37.482L13.694,37.482z"/>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/alarm/qtg_test_noalarm.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,34 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <g>
- <path d="M13.825,37.559c-0.165,0-0.319-0.064-0.436-0.183l0,0l-5.168-5.172c-0.111-0.109-0.175-0.261-0.178-0.414l0,0
- l-0.21-6.685c-1.64-1.419-4.899-4.705-5.3-9.254l0,0c-0.024-0.268-0.034-0.533-0.034-0.788l0,0c0-1.236,0.252-2.438,0.678-3.599
- l0,0c0.074-0.197,0.241-0.345,0.45-0.39l0,0c0.205-0.046,0.416,0.018,0.567,0.165l0,0l17.685,17.681
- c0.117,0.115,0.184,0.272,0.182,0.438l0,0c0,0.168-0.064,0.321-0.182,0.438l0,0l-7.616,7.582
- c-0.115,0.111-0.265,0.18-0.425,0.18l0,0C13.833,37.559,13.828,37.559,13.825,37.559L13.825,37.559z M3.32,12.115l0.436-0.436
- L3.32,12.115L3.32,12.115z M28.57,22.271L10.712,4.412c-0.147-0.147-0.211-0.356-0.171-0.558l0,0
- c0.04-0.203,0.178-0.371,0.369-0.448l0,0c1.281-0.537,2.616-0.812,3.978-0.808l0,0c0.282,0,0.56,0.009,0.835,0.032l0,0
- c4.698,0.388,8.168,3.76,9.682,5.477l0,0l6.564-0.241c0.17-0.006,0.342,0.061,0.463,0.181l0,0l5.164,5.243
- c0.238,0.237,0.235,0.631-0.003,0.868l0,0l-8.149,8.113c-0.121,0.118-0.279,0.179-0.437,0.179l0,0
- C28.85,22.45,28.691,22.39,28.57,22.271L28.57,22.271z"/>
- </g>
- </g>
- <g>
- <g>
- <g>
- <path d="M33.783,37.381L2.408,6.006C2.294,5.892,2.228,5.731,2.228,5.57l0,0c0-0.164,0.067-0.322,0.181-0.436l0,0l2.516-2.516
- c0.242-0.241,0.631-0.241,0.872,0l0,0l31.378,31.375c0.114,0.113,0.178,0.271,0.178,0.436l0,0c0,0.163-0.063,0.318-0.178,0.437
- l0,0l-2.515,2.515c-0.118,0.117-0.272,0.181-0.437,0.181l0,0C34.055,37.562,33.901,37.498,33.783,37.381L33.783,37.381z"/>
- </g>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/alarm/qtg_test_repeat.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <path d="M20,37.582c-2.262,0.002-4.464-0.44-6.545-1.319l0,0c-2.005-0.848-3.807-2.064-5.348-3.603l0,0
- c-1.538-1.541-2.749-3.338-3.604-5.345l0,0c-0.872-2.078-1.317-4.287-1.314-6.542l0,0c-0.003-2.264,0.442-4.467,1.32-6.548l0,0
- c0.849-2,2.06-3.801,3.598-5.34l0,0c0.538-0.535,1.11-1.02,1.708-1.464l0,0l-2.634-0.47C7.03,6.925,6.896,6.843,6.809,6.717l0,0
- c-0.086-0.126-0.121-0.281-0.092-0.43l0,0l0.606-3.396C7.377,2.577,7.677,2.368,7.99,2.427l0,0l8.119,1.445l1.702,0.304
- c0.152,0.025,0.284,0.115,0.374,0.236l0,0c0.088,0.131,0.12,0.282,0.091,0.435l0,0l-0.31,1.695l-1.447,8.124
- c-0.028,0.149-0.11,0.282-0.237,0.371l0,0c-0.126,0.088-0.281,0.123-0.429,0.094l0,0l-3.396-0.605
- c-0.313-0.058-0.521-0.354-0.467-0.668l0,0l0.48-2.677c-0.391,0.296-0.761,0.613-1.105,0.96l0,0
- c-1.125,1.117-2.003,2.425-2.619,3.876l0,0c-0.638,1.512-0.957,3.104-0.959,4.757l0,0c0.002,1.644,0.321,3.24,0.956,4.747l0,0
- c0.62,1.46,1.498,2.765,2.623,3.886l0,0c1.117,1.122,2.423,1.999,3.882,2.62l0,0c1.513,0.637,3.105,0.955,4.754,0.958l0,0
- c1.652-0.003,3.245-0.321,4.751-0.958l0,0c1.459-0.613,2.764-1.495,3.879-2.62l0,0c1.127-1.121,2.006-2.426,2.621-3.875l0,0
- c0.633-1.518,0.955-3.114,0.955-4.758l0,0c0-1.653-0.322-3.245-0.951-4.752l0,0c-0.619-1.456-1.5-2.764-2.629-3.885l0,0
- c-1.111-1.122-2.416-2.003-3.879-2.618l0,0c-0.139-0.065-0.249-0.171-0.307-0.316l0,0c-0.06-0.142-0.057-0.3,0.004-0.439l0,0
- l1.346-3.181c0.06-0.139,0.174-0.25,0.315-0.307l0,0c0.143-0.06,0.3-0.056,0.439,0.003l0,0c2.009,0.857,3.804,2.073,5.341,3.604
- l0,0c1.543,1.542,2.756,3.335,3.608,5.345l0,0l-0.53,0.225l0.53-0.225c0.878,2.079,1.317,4.282,1.317,6.546l0,0
- c0,2.255-0.439,4.464-1.317,6.542l0,0c-0.853,2.007-2.065,3.804-3.608,5.345l0,0c-1.537,1.538-3.336,2.755-5.348,3.606l0,0
- c-2.064,0.873-4.264,1.315-6.515,1.315l0,0C20.016,37.582,20.008,37.582,20,37.582L20,37.582z"/>
- </g>
-</g>
-</svg>
--- a/clock/data/clock.qrc Mon May 03 12:30:32 2010 +0300
+++ b/clock/data/clock.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -1,36 +1,7 @@
<!DOCTYPE RCC><RCC version="1.0">
<qresource prefix="/clock">
- <file alias="alarms.svg">toolbar/qtg_test_alarm.svg</file>
- <file alias="world_clock.svg">toolbar/qtg_test_worldclock.svg</file>
- <file alias="countdown_timer.svg">toolbar/qtg_test_timer.svg</file>
- <file alias="stopwatch.svg">toolbar/qtg_test_stopwatch.svg</file>
-
- <file alias="alarm_repeat.svg">alarm/qtg_test_repeat.svg</file>
- <file alias="alarm_active.svg">alarm/qtg_test_alarm.svg</file>
- <file alias="alarm_inactive.svg">alarm/qtg_test_noalarm.svg</file>
- <file alias="new_alarm.svg">toolbar/qtg_test_newalarm.svg</file>
-
- <file alias="add_new_city.svg">toolbar/qtg_test_addnewcity.svg</file>
<file alias="day.svg">worldclock/qtg_test_day.svg</file>
<file alias="night.svg">worldclock/qtg_test_night.svg</file>
- <file alias="home_city.svg">worldclock/qtg_test_homecity.svg</file>
- <file alias="city_default.svg">worldclock/qgn_test_city_default.svg</file>
- <file alias="dst_icon.svg">worldclock/qgn_indi_dst_add.svg</file>
- <file alias="find_icon.svg">worldclock/qgn_indi_find.svg</file>
-
- <file alias="start.svg">toolbar/qtg_test_start.svg</file>
- <file alias="stop.svg">toolbar/qtg_test_stop.svg</file>
- <file alias="reset.svg">toolbar/qtg_test_reset.svg</file>
- <file alias="timer_background.svg">timer/qtg_graf_timer2_base.svg</file>
- <file alias="timer_color_arc.svg">timer/knob_arc_indicator_1min.svg</file>
- <file alias="timer_grabzone.svg">timer/qtg_graf_timer2_button.svg</file>
- <file alias="timer_arrow.svg">timer/qtg_graf_timer2_arrow.svg</file>
- <file alias="timer_hour_dial.svg">timer/qtg_graf_timer2_time24.svg</file>
- <file alias="timer_min_sec_dial.svg">timer/qtg_graf_timer2_time60.svg</file>
-
- <file alias="lap.svg">toolbar/qtg_test_lap.svg</file>
- <file alias="split.svg">toolbar/qtg_test_split.svg</file>
- <file alias="analyze.svg">toolbar/qtg_test_analyze.svg</file>
<file alias="hide_widget.fxml">effects/hide_widget.fxml</file>
<file alias="show_widget.fxml">effects/show_widget.fxml</file>
@@ -40,11 +11,5 @@
<file alias="fade_out.fxml">effects/fade_out.fxml</file>
<file alias="fade_in.fxml">effects/fade_in.fxml</file>
-
- <file alias="timerknob_appear.fxml">effects/timerknob_appear.fxml</file>
- <file alias="timerknob_disappear.fxml">effects/timerknob_disappear.fxml</file>
- </qresource>
- <qresource prefix="/translations">
- <file alias="clock" >translations/clock.qm</file>
- </qresource>
+ </qresource>
</RCC>
\ No newline at end of file
--- a/clock/data/timer/knob_arc_indicator_1min.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1016 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!-- Created with Inkscape (http://www.inkscape.org/) -->
-<svg
- xmlns:dc="http://purl.org/dc/elements/1.1/"
- xmlns:cc="http://creativecommons.org/ns#"
- xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
- xmlns:svg="http://www.w3.org/2000/svg"
- xmlns="http://www.w3.org/2000/svg"
- xmlns:xlink="http://www.w3.org/1999/xlink"
- xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
- xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
- width="250"
- height="250"
- id="svg2"
- sodipodi:version="0.32"
- inkscape:version="0.46"
- version="1.0"
- sodipodi:docname="knob_arc_indicator_1min.svg"
- inkscape:output_extension="org.inkscape.output.svg.inkscape"
- style="display:inline">
- <sodipodi:namedview
- id="base"
- pagecolor="#ffffff"
- bordercolor="#666666"
- borderopacity="1.0"
- gridtolerance="10000"
- guidetolerance="10"
- objecttolerance="10"
- inkscape:pageopacity="0.0"
- inkscape:pageshadow="2"
- inkscape:zoom="2.4288216"
- inkscape:cx="114.10678"
- inkscape:cy="117.22377"
- inkscape:document-units="px"
- inkscape:current-layer="layer4"
- showgrid="false"
- inkscape:window-width="1400"
- inkscape:window-height="844"
- inkscape:window-x="0"
- inkscape:window-y="116"
- showguides="true"
- inkscape:guide-bbox="true" />
- <defs
- id="defs4">
- <linearGradient
- id="linearGradient5533">
- <stop
- style="stop-color:#2b2824;stop-opacity:1;"
- offset="0"
- id="stop5535" />
- <stop
- style="stop-color:#a1a2a4;stop-opacity:1"
- offset="1"
- id="stop5537" />
- </linearGradient>
- <linearGradient
- id="linearGradient5519">
- <stop
- style="stop-color:#909093;stop-opacity:1;"
- offset="0"
- id="stop5521" />
- <stop
- style="stop-color:#000000;stop-opacity:1"
- offset="1"
- id="stop5523" />
- </linearGradient>
- <linearGradient
- id="linearGradient4733">
- <stop
- style="stop-color:#000000;stop-opacity:1;"
- offset="0"
- id="stop4735" />
- <stop
- style="stop-color:#acaeae;stop-opacity:1;"
- offset="1"
- id="stop4737" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466">
- <stop
- style="stop-color:#ff2600;stop-opacity:1;"
- offset="0"
- id="stop2468" />
- <stop
- id="stop2474"
- offset="1"
- style="stop-color:#e75a00;stop-opacity:1;" />
- <stop
- style="stop-color:#007c00;stop-opacity:1;"
- offset="1"
- id="stop2476" />
- <stop
- style="stop-color:#000000;stop-opacity:0;"
- offset="1"
- id="stop2470" />
- </linearGradient>
- <inkscape:perspective
- id="perspective4899"
- inkscape:persp3d-origin="249.8669 : 181.20786 : 1"
- inkscape:vp_z="456.36704 : 297.32504 : 1"
- inkscape:vp_y="3.3985116e-14 : 662.03734 : 0"
- inkscape:vp_x="43.366765 : 297.32504 : 1"
- sodipodi:type="inkscape:persp3d" />
- <inkscape:perspective
- id="perspective4883"
- inkscape:persp3d-origin="303.43512 : 280.77487 : 1"
- inkscape:vp_z="509.93526 : 396.89205 : 1"
- inkscape:vp_y="3.3985116e-14 : 662.03734 : 0"
- inkscape:vp_x="96.93499 : 396.89205 : 1"
- sodipodi:type="inkscape:persp3d" />
- <linearGradient
- id="linearGradient2385">
- <stop
- style="stop-color:#ffffff;stop-opacity:1;"
- offset="0"
- id="stop2387" />
- <stop
- id="stop2395"
- offset="1"
- style="stop-color:#a5a5a5;stop-opacity:1;" />
- <stop
- id="stop2393"
- offset="1"
- style="stop-color:#ffffff;stop-opacity:0.49803922;" />
- </linearGradient>
- <inkscape:perspective
- sodipodi:type="inkscape:persp3d"
- inkscape:vp_x="71.233258 : 350.13217 : 1"
- inkscape:vp_y="3.3985116e-14 : 662.03734 : 0"
- inkscape:vp_z="484.23353 : 350.13217 : 1"
- inkscape:persp3d-origin="277.73339 : 234.01499 : 1"
- id="perspective10" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2385"
- id="radialGradient2391"
- cx="-72.643829"
- cy="-117.61642"
- fx="-72.643829"
- fy="-117.61642"
- r="120.5285"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.9999999,1.0614315,-1.0614303,-1.0000013,-181.18208,-31.401928)" />
- <clipPath
- id="clipPath">
- <path
- sodipodi:type="arc"
- style="opacity:0.85096154;fill:url(#radialGradient2391);fill-opacity:1"
- id="path2383"
- sodipodi:cx="16.303371"
- sodipodi:cy="16.512436"
- sodipodi:rx="120.5285"
- sodipodi:ry="120.5285"
- d="M 136.83187,16.512436 A 120.5285,120.5285 0 1 1 -104.22513,16.512436 A 120.5285,120.5285 0 1 1 136.83187,16.512436 z"
- transform="matrix(0.8115942,0,0,0.8115942,111.76828,111.5986)" />
- </clipPath>
- <filter
- id="filter"
- height="2"
- width="2"
- x="-0.5"
- y="-0.5">
- <feGaussianBlur
- stdDeviation="5.0"
- id="feGaussianBlur2408" />
- </filter>
- <clipPath
- id="clipPathd">
- <path
- sodipodi:type="arc"
- style="opacity:0.85096154;fill:url(#radialGradient2391);fill-opacity:1"
- id="path2413"
- sodipodi:cx="16.303371"
- sodipodi:cy="16.512436"
- sodipodi:rx="120.5285"
- sodipodi:ry="120.5285"
- d="M 136.83187,16.512436 A 120.5285,120.5285 0 1 1 -104.22513,16.512436 A 120.5285,120.5285 0 1 1 136.83187,16.512436 z"
- transform="matrix(0.8115942,0,0,0.8115942,111.76828,111.5986)" />
- </clipPath>
- <filter
- id="filterC"
- height="5"
- width="5"
- x="-0.5"
- y="-0.5">
- <feGaussianBlur
- stdDeviation="2.0"
- id="feGaussianBlur3793" />
- </filter>
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2385"
- id="radialGradient4903"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.7559523,0.8114315,-1.0670036,-0.9940524,-164.10905,-48.863191)"
- cx="-72.643829"
- cy="-117.61642"
- fx="-72.643829"
- fy="-117.61642"
- r="120.5285" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2385"
- id="radialGradient4933"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.8466666,0.9088033,-1.195044,-1.1133387,-185.75851,-56.708265)"
- cx="-72.643829"
- cy="-117.61642"
- fx="-72.643829"
- fy="-117.61642"
- r="120.5285" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2385"
- id="radialGradient5877"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-4.5357145,4.8685897,-6.4020222,-5.9643152,-968.54486,-253.83334)"
- cx="-72.643829"
- cy="-117.61642"
- fx="-72.643829"
- fy="-117.61642"
- r="120.5285" />
- <radialGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2385"
- id="radialGradient5881"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(-0.8466666,0.9088033,-1.195044,-1.1133387,77.539643,-176.97925)"
- cx="-72.643829"
- cy="-117.61642"
- fx="-72.643829"
- fy="-117.61642"
- r="120.5285" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466"
- id="linearGradient2472"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <clipPath
- id="clipPathc">
- <path
- sodipodi:type="arc"
- style="opacity:1;fill:url(#linearGradient2472);fill-opacity:1;stroke:none;stroke-width:1.5;stroke-miterlimit:4;stroke-dasharray:none"
- id="path2464"
- sodipodi:cx="-96.655701"
- sodipodi:cy="60.182178"
- sodipodi:rx="55.897274"
- sodipodi:ry="55.897274"
- d="M -40.758534,60.291552 A 55.897274,55.897274 0 1 1 -40.758439,60.21902 L -96.655701,60.182178 z"
- sodipodi:start="0.0019566857"
- sodipodi:end="6.2838444"
- transform="matrix(0.3229167,0,0,0.3229167,155.81608,105.37957)" />
- </clipPath>
- <filter
- id="filter6"
- height="3.7"
- width="2"
- x="-0.5"
- y="-0.5">
- <feGaussianBlur
- stdDeviation="8.0"
- id="feGaussianBlur2512" />
- </filter>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4733"
- id="linearGradient4739"
- x1="165.19823"
- y1="53.941807"
- x2="125.1866"
- y2="124.23114"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5519"
- id="linearGradient5525"
- x1="-37.738914"
- y1="12.326055"
- x2="-22.708267"
- y2="25.246382"
- gradientUnits="userSpaceOnUse" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5519"
- id="linearGradient5529"
- gradientUnits="userSpaceOnUse"
- x1="-37.738914"
- y1="12.326055"
- x2="-22.708267"
- y2="25.246382"
- gradientTransform="matrix(2,0,0,2,32.019784,-17.932287)" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5533"
- id="linearGradient5539"
- x1="-87.339493"
- y1="29.467791"
- x2="-64.849571"
- y2="47.590733"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9208633,0,0,0.9208633,-5.9441111,2.9194824)" />
- <linearGradient
- id="linearGradient2466-786">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2723" />
- <stop
- id="stop2725"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2727" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2729" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-863">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2733" />
- <stop
- id="stop2735"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2737" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2739" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-958">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2743" />
- <stop
- id="stop2745"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2747" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2749" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-59">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2753" />
- <stop
- id="stop2755"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2757" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2759" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-113">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2763" />
- <stop
- id="stop2765"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2767" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2769" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-114">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2773" />
- <stop
- id="stop2775"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2777" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2779" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-516">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2783" />
- <stop
- id="stop2785"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2787" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2789" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-572">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2793" />
- <stop
- id="stop2795"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2797" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2799" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-42">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2803" />
- <stop
- id="stop2805"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2807" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2809" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-502">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2813" />
- <stop
- id="stop2815"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2817" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2819" />
- </linearGradient>
- <linearGradient
- id="linearGradient2466-857">
- <stop
- style="stop-color:#00b000;stop-opacity:1;"
- offset="0"
- id="stop2823" />
- <stop
- id="stop2825"
- offset="1"
- style="stop-color:#00fb00;stop-opacity:1;" />
- <stop
- style="stop-color:#008a00;stop-opacity:1;"
- offset="1"
- id="stop2827" />
- <stop
- style="stop-color:#0a0a0a;stop-opacity:0;"
- offset="1"
- id="stop2829" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-786-750"
- id="linearGradient2472-316-637"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-786-750">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3297" />
- <stop
- id="stop3299"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3301" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3303" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-863-304"
- id="linearGradient2472-695-984"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-863-304">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3307" />
- <stop
- id="stop3309"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3311" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3313" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-958-548"
- id="linearGradient2472-327-579"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-958-548">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3317" />
- <stop
- id="stop3319"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3321" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3323" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-59-77"
- id="linearGradient2472-436-991"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-59-77">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3327" />
- <stop
- id="stop3329"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3331" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3333" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-113-656"
- id="linearGradient2472-656-45"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-113-656">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3337" />
- <stop
- id="stop3339"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3341" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3343" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-114-809"
- id="linearGradient2472-581-565"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-114-809">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3347" />
- <stop
- id="stop3349"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3351" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3353" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-516-233"
- id="linearGradient2472-877-549"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-516-233">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3357" />
- <stop
- id="stop3359"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3361" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3363" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-572-576"
- id="linearGradient2472-761-943"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-572-576">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3367" />
- <stop
- id="stop3369"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3371" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3373" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-42-738"
- id="linearGradient2472-704-254"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-42-738">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3377" />
- <stop
- id="stop3379"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3381" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3383" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-502-769"
- id="linearGradient2472-422-129"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-502-769">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3387" />
- <stop
- id="stop3389"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3391" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3393" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-857-138"
- id="linearGradient2472-565-766"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)" />
- <linearGradient
- id="linearGradient2466-857-138">
- <stop
- style="stop-color:#00c900;stop-opacity:1;"
- offset="0"
- id="stop3397" />
- <stop
- id="stop3399"
- offset="1"
- style="stop-color:#15fe15;stop-opacity:1;" />
- <stop
- style="stop-color:#00a300;stop-opacity:1;"
- offset="1"
- id="stop3401" />
- <stop
- style="stop-color:#161616;stop-opacity:0;"
- offset="1"
- id="stop3403" />
- </linearGradient>
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466"
- id="linearGradient5058"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-786-750"
- id="linearGradient5064"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-863-304"
- id="linearGradient5066"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-958-548"
- id="linearGradient5068"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-59-77"
- id="linearGradient5070"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-113-656"
- id="linearGradient5072"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-114-809"
- id="linearGradient5074"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-516-233"
- id="linearGradient5076"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-572-576"
- id="linearGradient5078"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-42-738"
- id="linearGradient5080"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-502-769"
- id="linearGradient5082"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466-857-138"
- id="linearGradient5084"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient4733"
- id="linearGradient5342"
- gradientUnits="userSpaceOnUse"
- x1="165.19823"
- y1="53.941807"
- x2="125.1866"
- y2="124.23114" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5519"
- id="linearGradient5466"
- gradientUnits="userSpaceOnUse"
- x1="-37.738914"
- y1="12.326055"
- x2="-22.708267"
- y2="25.246382" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient5533"
- id="linearGradient5468"
- gradientUnits="userSpaceOnUse"
- gradientTransform="matrix(0.9208633,0,0,0.9208633,-5.9441111,2.9194824)"
- x1="-87.339493"
- y1="29.467791"
- x2="-64.849571"
- y2="47.590733" />
- <linearGradient
- inkscape:collect="always"
- xlink:href="#linearGradient2466"
- id="linearGradient5846"
- gradientUnits="userSpaceOnUse"
- gradientTransform="translate(-616.67308,-109.9914)"
- x1="480.34833"
- y1="134.11082"
- x2="554.27698"
- y2="211.64575" />
- </defs>
- <metadata
- id="metadata7">
- <rdf:RDF>
- <cc:Work
- rdf:about="">
- <dc:format>image/svg+xml</dc:format>
- <dc:type
- rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
- </cc:Work>
- </rdf:RDF>
- </metadata>
- <g
- inkscape:groupmode="layer"
- id="layer4"
- inkscape:label="knob_arc_indicator"
- style="display:inline">
- <path
- style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;display:inline"
- d="M 124.89547,37.619476 C 124.89547,37.619476 125.004,29.244371 125.11381,27.211519 C 126.23525,27.042557 132.43856,27.306326 133.73859,27.539043 C 133.53245,30.121143 132.90158,38.019781 132.90158,38.019781 C 132.90158,38.019781 127.22452,37.72865 124.89547,37.619476 z"
- id="path4938"
- sodipodi:nodetypes="ccccc" />
- </g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_arrow.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,12 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <rect fill="none" width="305" height="305"/>
- <g>
- <polygon points="144.583,81.027 152.321,62.391 160.058,81.027 "/>
- </g>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_base.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <g>
- <g>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="145.4951" y1="-231.5366" x2="156.7914" y2="387.755">
- <stop offset="0" style="stop-color:#FFFFFF"/>
- <stop offset="1" style="stop-color:#000000"/>
- </linearGradient>
- <path fill="url(#SVGID_1_)" d="M304,152.5c0,83.678-67.824,151.5-151.5,151.5C68.826,304,1,236.178,1,152.5
- C1,68.822,68.826,1,152.5,1C236.175,1,304,68.822,304,152.5z"/>
- <radialGradient id="SVGID_2_" cx="138.186" cy="4.4321" r="299.1064" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#FFFFFF"/>
- <stop offset="1" style="stop-color:#CCCCCC"/>
- </radialGradient>
- <path fill="url(#SVGID_2_)" d="M302.5,152.688c0,82.85-67.154,150-150,150c-82.844,0-150-67.15-150-150
- c0-82.848,67.155-150,150-150C235.345,2.688,302.5,69.84,302.5,152.688z"/>
- </g>
- <rect fill="none" width="305" height="305"/>
- </g>
- <path fill="#333333" d="M98.717,150.686c0.005-30.09,24.396-54.494,54.499-54.502l0,0c30.105,0.008,54.492,24.412,54.502,54.502
- l0,0c-0.01,30.09-24.396,54.495-54.502,54.502l0,0C123.113,205.18,98.723,180.776,98.717,150.686L98.717,150.686z M112.717,150.686
- c0.002,11.2,4.522,21.284,11.864,28.633l0,0c7.351,7.344,17.432,11.865,28.636,11.867l0,0c11.207-0.002,21.287-4.523,28.639-11.867
- l0,0c7.34-7.35,11.859-17.434,11.861-28.633l0,0c-0.002-11.199-4.521-21.279-11.861-28.633l0,0
- c-7.352-7.342-17.432-11.863-28.639-11.867l0,0c-11.204,0.004-21.285,4.525-28.636,11.867l0,0
- C117.239,129.406,112.719,139.486,112.717,150.686L112.717,150.686L112.717,150.686z"/>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_button.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,61 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <rect fill="none" width="305" height="305"/>
- <g>
- <g>
-
- <radialGradient id="SVGID_1_" cx="919.3667" cy="344.2178" r="28.1406" gradientTransform="matrix(0.9002 0 0 1.1493 -675.2947 -286.7092)" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#00B9FF"/>
- <stop offset="0.2458" style="stop-color:#00A0EE"/>
- <stop offset="0.563" style="stop-color:#0087DC"/>
- <stop offset="0.7527" style="stop-color:#007DD5"/>
- </radialGradient>
- <path fill="url(#SVGID_1_)" d="M131.613,127.092c-5.421-4.252-9.273-10.607-9.293-18.191l0,0
- c0.02-7.58,3.872-13.938,9.293-18.186l0,0c5.464-4.295,12.725-6.807,20.707-6.814l0,0c7.984,0.008,15.246,2.52,20.708,6.814l0,0
- c5.422,4.248,9.273,10.605,9.291,18.186l0,0c-0.018,7.584-3.869,13.939-9.291,18.191l0,0c-5.463,4.293-12.725,6.805-20.708,6.809
- l0,0C144.338,133.896,137.077,131.385,131.613,127.092L131.613,127.092z"/>
- <g>
- <radialGradient id="SVGID_2_" cx="152.3921" cy="108.3408" r="19.5642" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_2_)" points="141.404,120.869 141.404,94.438 142.739,94.438 142.739,120.869 141.404,120.869 "/>
- <radialGradient id="SVGID_3_" cx="152.3921" cy="108.3408" r="19.5643" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_3_)" points="146.528,120.869 146.528,94.438 147.862,94.438 147.862,120.869 146.528,120.869 "/>
- <radialGradient id="SVGID_4_" cx="152.3931" cy="108.3408" r="19.5634" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_4_)" points="156.78,120.869 156.78,94.438 158.111,94.438 158.111,120.869 156.78,120.869 "/>
- <radialGradient id="SVGID_5_" cx="152.3916" cy="108.3408" r="19.5642" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_5_)" points="161.902,120.869 161.902,94.438 163.238,94.438 163.238,120.869 161.902,120.869 "/>
- <radialGradient id="SVGID_6_" cx="152.3921" cy="108.3408" r="19.5643" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_6_)" points="151.652,120.869 151.652,94.438 152.986,94.438 152.986,120.869 151.652,120.869 "/>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_colorindication.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <rect fill="none" width="305" height="305"/>
- <g>
- <g>
- <path fill="#8CC63F" d="M152.5,37.5c-63.513,0-115,51.488-115,114.998c0,63.512,51.487,115.002,115,115.002
- c63.512,0,115-51.49,115-115.002C267.5,88.988,216.011,37.5,152.5,37.5z M152.5,243.5c-50.257,0-91-40.742-91-91
- c0-50.26,40.742-91,91-91c50.258,0,91,40.74,91,91C243.5,202.758,202.757,243.5,152.5,243.5z"/>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_pointer.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,62 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <rect fill="none" width="305" height="305"/>
- <g>
- <polygon points="144.583,81.027 152.321,62.391 160.058,81.027 "/>
- <g>
-
- <radialGradient id="SVGID_1_" cx="919.3667" cy="344.4248" r="28.1409" gradientTransform="matrix(0.9002 0 0 1.1493 -675.2947 -286.9478)" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#00B9FF"/>
- <stop offset="0.2458" style="stop-color:#00A0EE"/>
- <stop offset="0.563" style="stop-color:#0087DC"/>
- <stop offset="0.7527" style="stop-color:#007DD5"/>
- </radialGradient>
- <path fill="url(#SVGID_1_)" d="M131.613,127.092c-5.421-4.252-9.273-10.607-9.293-18.191l0,0
- c0.02-7.58,3.872-13.938,9.293-18.186l0,0c5.464-4.295,12.725-6.807,20.707-6.814l0,0c7.984,0.008,15.246,2.52,20.708,6.814l0,0
- c5.422,4.248,9.273,10.605,9.291,18.186l0,0c-0.018,7.584-3.869,13.939-9.291,18.191l0,0c-5.463,4.293-12.725,6.805-20.708,6.809
- l0,0C144.338,133.896,137.077,131.385,131.613,127.092L131.613,127.092z"/>
- <g>
- <radialGradient id="SVGID_2_" cx="152.3921" cy="108.3408" r="19.5642" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_2_)" points="141.404,120.869 141.404,94.438 142.739,94.438 142.739,120.869 141.404,120.869 "/>
- <radialGradient id="SVGID_3_" cx="152.3921" cy="108.3408" r="19.5643" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_3_)" points="146.528,120.869 146.528,94.438 147.862,94.438 147.862,120.869 146.528,120.869 "/>
- <radialGradient id="SVGID_4_" cx="152.3931" cy="108.3408" r="19.5634" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_4_)" points="156.78,120.869 156.78,94.438 158.111,94.438 158.111,120.869 156.78,120.869 "/>
- <radialGradient id="SVGID_5_" cx="152.3916" cy="108.3408" r="19.5642" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_5_)" points="161.902,120.869 161.902,94.438 163.238,94.438 163.238,120.869 161.902,120.869 "/>
- <radialGradient id="SVGID_6_" cx="152.3921" cy="108.3408" r="19.5643" gradientUnits="userSpaceOnUse">
- <stop offset="0" style="stop-color:#26A9E0"/>
- <stop offset="0.1881" style="stop-color:#2398D4"/>
- <stop offset="0.5414" style="stop-color:#1D7FC2"/>
- <stop offset="0.7527" style="stop-color:#1B75BB"/>
- </radialGradient>
- <polygon fill="url(#SVGID_6_)" points="151.652,120.869 151.652,94.438 152.986,94.438 152.986,120.869 151.652,120.869 "/>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_time24.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,171 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <g>
- <g>
- <path d="M151.501,243.486v29.012h1.999v-29.012c-0.332,0.004-0.666,0.014-1,0.014C152.166,243.5,151.834,243.49,151.501,243.486z
- "/>
- <path d="M211.632,256.945l1.734-1l-14.508-25.133c-0.572,0.34-1.15,0.676-1.73,1.002L211.632,256.945z"/>
- <path d="M255.945,213.365l1-1.73l-25.129-14.506c-0.328,0.58-0.662,1.156-1.002,1.729L255.945,213.365z"/>
- <path d="M243.488,153.5h29.014v-2h-29.014c0.004,0.332,0.012,0.664,0.012,1C243.5,152.834,243.492,153.166,243.488,153.5z"/>
- <path d="M256.947,93.365l-1-1.732l-25.133,14.508c0.34,0.572,0.674,1.148,1.002,1.73L256.947,93.365z"/>
- <path d="M213.365,49.053l-1.73-1l-14.506,25.131c0.58,0.328,1.158,0.662,1.73,1.002L213.365,49.053z"/>
- <path d="M153.5,61.512V32.5h-1.999v29.012c0.333-0.004,0.665-0.012,0.999-0.012C152.833,61.5,153.167,61.508,153.5,61.512z"/>
- <path d="M93.366,48.053l-1.731,1l14.507,25.133c0.572-0.34,1.149-0.674,1.73-1.002L93.366,48.053z"/>
- <path d="M49.056,91.633l-1,1.732l25.129,14.504c0.328-0.58,0.662-1.156,1.002-1.73L49.056,91.633z"/>
- <path d="M61.513,151.5H32.499v2h29.014c-0.005-0.334-0.013-0.666-0.013-1C61.5,152.164,61.508,151.832,61.513,151.5z"/>
- <path d="M48.056,211.635l0.999,1.73l25.132-14.508c-0.34-0.572-0.674-1.148-1.001-1.729L48.056,211.635z"/>
- <path d="M91.634,255.945l1.731,1l14.506-25.131c-0.581-0.328-1.157-0.662-1.73-1.002L91.634,255.945z"/>
- <path d="M123.222,41.303l-0.967,0.256l6.205,23.156c0.323-0.088,0.643-0.176,0.965-0.26L123.222,41.303z"/>
- <path d="M88.513,87.803L71.545,70.836l-0.707,0.709l16.967,16.967C88.039,88.273,88.275,88.037,88.513,87.803z"/>
- <path d="M41.561,122.256l-0.26,0.967l23.154,6.203c0.084-0.322,0.173-0.645,0.261-0.965L41.561,122.256z"/>
- <path d="M41.301,181.779l0.26,0.965l23.155-6.205c-0.087-0.32-0.176-0.643-0.261-0.965L41.301,181.779z"/>
- <path d="M87.805,216.486l-16.967,16.967l0.707,0.709l16.968-16.967C88.275,216.961,88.039,216.725,87.805,216.486z"/>
- <path d="M122.257,263.441l0.966,0.26l6.204-23.156c-0.322-0.084-0.644-0.174-0.965-0.262L122.257,263.441z"/>
- <path d="M181.777,263.701l0.967-0.26l-6.205-23.158c-0.322,0.088-0.643,0.178-0.967,0.262L181.777,263.701z"/>
- <path d="M216.488,217.195l16.967,16.967l0.707-0.709l-16.967-16.965C216.958,216.725,216.724,216.961,216.488,217.195z"/>
- <path d="M263.439,182.744l0.26-0.965l-23.154-6.205c-0.084,0.322-0.174,0.645-0.262,0.965L263.439,182.744z"/>
- <path d="M263.699,123.223l-0.26-0.967l-23.154,6.205c0.088,0.32,0.176,0.643,0.262,0.965L263.699,123.223z"/>
- <path d="M217.197,88.512l16.967-16.967l-0.709-0.709l-16.967,16.967C216.726,88.037,216.96,88.273,217.197,88.512z"/>
- <path d="M182.744,41.559l-0.967-0.256l-6.203,23.152c0.324,0.084,0.645,0.172,0.967,0.26L182.744,41.559z"/>
- </g>
- <g>
- <g>
- <g>
- <path d="M286.064,149.824c0.609-0.563,1.41-0.844,2.402-0.844c1.359,0,2.367,0.4,3.023,1.201s0.984,2.115,0.984,3.943
- c0,2.195-0.389,3.803-1.166,4.822s-1.963,1.529-3.557,1.529c-1.578,0-2.781-0.531-3.609-1.594s-1.242-3.211-1.242-6.445
- c0-3.359,0.533-5.811,1.6-7.354s2.67-2.314,4.811-2.314c0.711,0,1.422,0.055,2.133,0.164v1.734
- c-0.75-0.133-1.406-0.199-1.969-0.199c-1.023,0-1.84,0.457-2.449,1.371S286.095,148.082,286.064,149.824z M287.728,158.777
- c0.555,0,0.957-0.289,1.207-0.867s0.375-1.801,0.375-3.668c0-1.188-0.1-2.098-0.299-2.73s-0.619-0.949-1.26-0.949
- c-0.594,0-1.023,0.25-1.289,0.75s-0.398,1.387-0.398,2.66c0,2.172,0.133,3.516,0.398,4.031S287.15,158.777,287.728,158.777z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M274.648,93.879h-1.371V97.5h-3.164v-3.621h-6.117v-1.582l7.031-12.246h2.25v12.246h1.371V93.879z M270.113,84.867
- l-4.055,7.43h4.055V84.867z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M272.292,221.717c0.75,0.367,1.314,0.891,1.693,1.57s0.568,1.602,0.568,2.766c0,1.625-0.428,2.844-1.283,3.656
- s-2.135,1.219-3.838,1.219c-1.695,0-2.967-0.406-3.814-1.219s-1.271-2.031-1.271-3.656c0-1.164,0.18-2.088,0.539-2.771
- s0.926-1.213,1.699-1.588c-1.336-0.789-2.004-2.117-2.004-3.984c0-1.477,0.404-2.586,1.213-3.328s2.021-1.113,3.639-1.113
- s2.836,0.371,3.656,1.113s1.23,1.852,1.23,3.328C274.32,219.639,273.644,220.975,272.292,221.717z M269.433,229.346
- c0.68,0,1.174-0.227,1.482-0.68s0.463-1.41,0.463-2.871c0-1.125-0.146-1.947-0.439-2.467s-0.795-0.779-1.506-0.779
- c-0.734,0-1.236,0.256-1.506,0.768s-0.404,1.338-0.404,2.479c0,1.281,0.148,2.193,0.445,2.736S268.753,229.346,269.433,229.346
- z M269.433,220.967c0.617,0,1.059-0.232,1.324-0.697s0.398-1.232,0.398-2.303c0-1.266-0.135-2.102-0.404-2.508
- s-0.725-0.609-1.365-0.609c-0.547,0-0.957,0.262-1.23,0.785s-0.41,1.309-0.41,2.355c0,1.133,0.137,1.912,0.41,2.338
- S268.855,220.967,269.433,220.967z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M221.488,277.334h-9.492v-1.582h3.164v-13.184l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V277.334z"/>
- <path d="M228.144,259.768c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S226.55,259.768,228.144,259.768z
- M228.062,275.846c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482
- s-0.219-1.625-0.434-2.004s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684
- c0,3.117,0.09,5.137,0.27,6.059S227.382,275.846,228.062,275.846z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M34.605,230.834h-9.492v-1.582h3.164v-13.184l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V230.834z"/>
- <path d="M39.621,220.322c0.609-0.563,1.41-0.844,2.402-0.844c1.359,0,2.367,0.4,3.023,1.201s0.984,2.115,0.984,3.943
- c0,2.195-0.389,3.803-1.166,4.822s-1.963,1.529-3.557,1.529c-1.578,0-2.781-0.531-3.609-1.594s-1.242-3.211-1.242-6.445
- c0-3.359,0.533-5.811,1.6-7.354s2.67-2.314,4.811-2.314c0.711,0,1.422,0.055,2.133,0.164v1.734
- c-0.75-0.133-1.406-0.199-1.969-0.199c-1.023,0-1.84,0.457-2.449,1.371S39.652,218.58,39.621,220.322z M41.285,229.275
- c0.555,0,0.957-0.289,1.207-0.867s0.375-1.801,0.375-3.668c0-1.188-0.1-2.098-0.299-2.73s-0.619-0.949-1.26-0.949
- c-0.594,0-1.023,0.25-1.289,0.75s-0.398,1.387-0.398,2.66c0,2.172,0.133,3.516,0.398,4.031S40.707,229.275,41.285,229.275z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M15.021,160.336H5.529v-1.582h3.164V145.57l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V160.336z"/>
- <path d="M24.432,151.219c0.75,0.367,1.314,0.891,1.693,1.57s0.568,1.602,0.568,2.766c0,1.625-0.428,2.844-1.283,3.656
- s-2.135,1.219-3.838,1.219c-1.695,0-2.967-0.406-3.814-1.219s-1.271-2.031-1.271-3.656c0-1.164,0.18-2.088,0.539-2.771
- s0.926-1.213,1.699-1.588c-1.336-0.789-2.004-2.117-2.004-3.984c0-1.477,0.404-2.586,1.213-3.328s2.021-1.113,3.639-1.113
- s2.836,0.371,3.656,1.113s1.23,1.852,1.23,3.328C26.459,149.141,25.783,150.477,24.432,151.219z M21.572,158.848
- c0.679,0,1.174-0.227,1.482-0.68s0.463-1.41,0.463-2.871c0-1.125-0.146-1.947-0.439-2.467s-0.795-0.779-1.506-0.779
- c-0.734,0-1.236,0.256-1.506,0.768s-0.404,1.338-0.404,2.479c0,1.281,0.148,2.193,0.445,2.736S20.893,158.848,21.572,158.848z
- M21.572,150.469c0.617,0,1.059-0.232,1.324-0.697s0.398-1.232,0.398-2.303c0-1.266-0.135-2.102-0.404-2.508
- s-0.725-0.609-1.365-0.609c-0.547,0-0.957,0.262-1.23,0.785s-0.41,1.309-0.41,2.355c0,1.133,0.137,1.912,0.41,2.338
- S20.994,150.469,21.572,150.469z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M34.395,97.5H24.75v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574v-1.723c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V97.5z"/>
- <path d="M41.262,79.934c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S39.668,79.934,41.262,79.934z M41.18,96.012
- c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482s-0.219-1.625-0.434-2.004
- s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684c0,3.117,0.09,5.137,0.27,6.059
- S40.5,96.012,41.18,96.012z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M85.561,45.166h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574V28.15c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V45.166z"/>
- <path d="M97.033,45.166h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574V28.15c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V45.166z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M151.445,25.834h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574V8.818c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V25.834z"/>
- <path d="M163.421,22.213h-1.371v3.621h-3.164v-3.621h-6.117v-1.582L159.8,8.385h2.25v12.246h1.371V22.213z M158.886,13.201
- l-4.055,7.43h4.055V13.201z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M85.772,277.334H76.28v-1.582h3.164v-13.184l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V277.334z"/>
- <path d="M97.538,273.713h-1.371v3.621h-3.164v-3.621h-6.117v-1.582l7.031-12.246h2.25v12.246h1.371V273.713z M93.003,264.701
- l-4.055,7.43h4.055V264.701z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M151.656,294.832h-9.492v-1.582h3.164v-13.184l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V294.832z"/>
- <path d="M162.917,294.832h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574v-1.723c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V294.832z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M227.013,45.166h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574V28.15c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V45.166z"/>
- </g>
- </g>
- </g>
- </g>
- <rect fill="none" width="305" height="305"/>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer2_time60.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,225 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="305px" height="305px" viewBox="0 0 305 305" enable-background="new 0 0 305 305" xml:space="preserve">
-<g>
- <g>
- <g>
- <g>
- <g>
- <path d="M219.092,34.891h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V34.891z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M143.613,16.939c0.609-0.563,1.41-0.844,2.402-0.844c1.359,0,2.367,0.4,3.023,1.201s0.984,2.115,0.984,3.943
- c0,2.195-0.389,3.803-1.166,4.822s-1.963,1.529-3.557,1.529c-1.578,0-2.781-0.531-3.609-1.594s-1.242-3.211-1.242-6.445
- c0-3.359,0.533-5.811,1.6-7.354s2.67-2.314,4.811-2.314c0.711,0,1.422,0.055,2.133,0.164v1.734
- c-0.75-0.133-1.406-0.199-1.969-0.199c-1.023,0-1.84,0.457-2.449,1.371S143.645,15.197,143.613,16.939z M145.277,25.893
- c0.555,0,0.957-0.289,1.207-0.867s0.375-1.801,0.375-3.668c0-1.188-0.1-2.098-0.299-2.73s-0.619-0.949-1.26-0.949
- c-0.594,0-1.023,0.25-1.289,0.75s-0.398,1.387-0.398,2.66c0,2.172,0.133,3.516,0.398,4.031S144.699,25.893,145.277,25.893z"/>
- <path d="M156.727,9.885c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S155.133,9.885,156.727,9.885z M156.645,25.963
- c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482s-0.219-1.625-0.434-2.004
- s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684c0,3.117,0.09,5.137,0.27,6.059
- S155.965,25.963,156.645,25.963z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M80.031,34.891h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V34.891z"/>
- <path d="M91.504,34.891h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V34.891z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M25.533,88.391h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V88.391z"/>
- <path d="M37.967,82.051c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S36.373,82.051,37.967,82.051z M37.885,98.129
- c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482s-0.219-1.625-0.434-2.004
- s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684c0,3.117,0.09,5.137,0.27,6.059
- S37.205,98.129,37.885,98.129z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M15.936,157.857h-1.371v3.621H11.4v-3.621H5.283v-1.582l7.031-12.246h2.25v12.246h1.371V157.857z M11.4,148.846
- l-4.055,7.43H11.4V148.846z"/>
- <path d="M21.338,150.252h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V150.252z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M82.354,270.883c0.93,0.297,1.627,0.791,2.092,1.482s0.697,1.58,0.697,2.666c0,1.773-0.447,3.08-1.342,3.92
- s-2.287,1.26-4.178,1.26c-1.203,0-2.395-0.176-3.574-0.527v-1.746c1.273,0.383,2.336,0.574,3.188,0.574
- c0.969,0,1.654-0.273,2.057-0.82s0.604-1.434,0.604-2.66c0-1.133-0.25-1.984-0.75-2.555s-1.25-0.855-2.25-0.855h-1.535v-1.582
- h1.535c0.922,0,1.613-0.25,2.074-0.75s0.691-1.25,0.691-2.25c0-0.93-0.199-1.627-0.598-2.092s-0.992-0.697-1.781-0.697
- c-0.523,0-1.465,0.176-2.824,0.527v-1.746c1.352-0.32,2.535-0.48,3.551-0.48c1.625,0,2.846,0.361,3.662,1.084
- s1.225,1.803,1.225,3.24c0,0.969-0.213,1.787-0.639,2.455S83.197,270.516,82.354,270.883z"/>
- <path d="M91.506,268.891h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V268.891z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M146.613,289.217c0.93,0.297,1.627,0.791,2.092,1.482s0.697,1.58,0.697,2.666c0,1.773-0.447,3.08-1.342,3.92
- s-2.287,1.26-4.178,1.26c-1.203,0-2.395-0.176-3.574-0.527v-1.746c1.273,0.383,2.336,0.574,3.188,0.574
- c0.969,0,1.654-0.273,2.057-0.82s0.604-1.434,0.604-2.66c0-1.133-0.25-1.984-0.75-2.555s-1.25-0.855-2.25-0.855h-1.535v-1.582
- h1.535c0.922,0,1.613-0.25,2.074-0.75s0.691-1.25,0.691-2.25c0-0.93-0.199-1.627-0.598-2.092s-0.992-0.697-1.781-0.697
- c-0.523,0-1.465,0.176-2.824,0.527v-1.746c1.352-0.32,2.535-0.48,3.551-0.48c1.625,0,2.846,0.361,3.662,1.084
- s1.225,1.803,1.225,3.24c0,0.969-0.213,1.787-0.639,2.455S147.457,288.85,146.613,289.217z"/>
- <path d="M156.727,280.885c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S155.133,280.885,156.727,280.885z
- M156.645,296.963c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482
- s-0.219-1.625-0.434-2.004s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684
- c0,3.117,0.09,5.137,0.27,6.059S155.965,296.963,156.645,296.963z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M216.205,280.117h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574v-1.723c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V280.117z"/>
- <path d="M222.111,268.891h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V268.891z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M282.977,161.479h-9.492v-1.582h3.164v-13.184l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V161.479z"/>
- <path d="M288.672,150.252h0.492c1.578,0,2.789,0.465,3.633,1.395s1.266,2.262,1.266,3.996c0,1.977-0.465,3.459-1.395,4.447
- s-2.32,1.482-4.172,1.482c-1.359,0-2.566-0.168-3.621-0.504v-1.723c1.164,0.352,2.238,0.527,3.223,0.527
- c0.906,0,1.588-0.305,2.045-0.914s0.686-1.648,0.686-3.117c0-1.227-0.268-2.146-0.803-2.76s-1.338-0.92-2.408-0.92
- c-0.711,0-1.418,0.043-2.121,0.129v-8.262h8.191v1.582h-5.016V150.252z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M268.477,99.617h-9.492v-1.582h3.164V84.852l-3.164,0.703v-1.582l4.746-1.805h1.582v15.867h3.164V99.617z"/>
- <path d="M275.133,82.051c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S273.539,82.051,275.133,82.051z
- M275.051,98.129c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482
- s-0.219-1.625-0.434-2.004s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684
- c0,3.117,0.09,5.137,0.27,6.059S274.371,98.129,275.051,98.129z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M268.266,223.449h-9.645v-1.371c0-1.336,0.258-2.561,0.773-3.674s1.594-2.393,3.234-3.838
- c0.969-0.867,1.621-1.604,1.957-2.209s0.504-1.197,0.504-1.775c0-0.898-0.25-1.623-0.75-2.174s-1.176-0.826-2.027-0.826
- c-0.68,0-1.832,0.191-3.457,0.574v-1.723c1.531-0.367,2.875-0.551,4.031-0.551c1.648,0,2.957,0.414,3.926,1.242
- s1.453,1.988,1.453,3.48c0,0.867-0.199,1.734-0.598,2.602s-1.332,1.945-2.801,3.234c-0.758,0.656-1.352,1.215-1.781,1.676
- s-0.791,1.002-1.084,1.623s-0.439,1.33-0.439,2.127h6.703V223.449z"/>
- <path d="M275.133,205.883c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S273.539,205.883,275.133,205.883z
- M275.051,221.961c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482
- s-0.219-1.625-0.434-2.004s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684
- c0,3.117,0.09,5.137,0.27,6.059S274.371,221.961,275.051,221.961z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M31.602,219.83H30.23v3.621h-3.164v-3.621h-6.117v-1.582l7.031-12.246h2.25v12.246h1.371V219.83z M27.066,210.818
- l-4.055,7.43h4.055V210.818z"/>
- <path d="M37.965,205.885c1.383,0,2.412,0.387,3.088,1.16s1.105,1.752,1.289,2.936s0.275,2.697,0.275,4.541
- c0,2.547-0.172,4.412-0.516,5.596s-0.869,2.051-1.576,2.602s-1.611,0.826-2.713,0.826c-1.422,0-2.473-0.424-3.152-1.271
- s-1.1-1.877-1.26-3.088s-0.24-2.766-0.24-4.664c0-3.242,0.402-5.492,1.207-6.75S36.371,205.885,37.965,205.885z
- M37.883,221.963c0.695,0,1.131-0.496,1.307-1.488s0.264-2.977,0.264-5.953c0-2.031-0.037-3.525-0.111-4.482
- s-0.219-1.625-0.434-2.004s-0.557-0.568-1.025-0.568c-0.648,0-1.07,0.457-1.266,1.371s-0.293,2.809-0.293,5.684
- c0,3.117,0.09,5.137,0.27,6.059S37.203,221.963,37.883,221.963z"/>
- </g>
- </g>
- </g>
- <g>
- <path d="M140.828,38.072l-0.994,0.104l2.504,23.826c0.331-0.037,0.662-0.074,0.994-0.107L140.828,38.072z"/>
- <path d="M128.916,39.816l-0.979,0.209l4.998,23.508c0.326-0.07,0.65-0.146,0.978-0.213L128.916,39.816z"/>
- <path d="M117.279,42.912l-0.951,0.309l7.416,22.822c0.316-0.105,0.633-0.207,0.951-0.309L117.279,42.912z"/>
- <path d="M106.031,47.242l-0.916,0.408l9.738,21.859c0.304-0.137,0.611-0.268,0.917-0.402L106.031,47.242z"/>
- <path d="M85.146,59.168l-0.809,0.59l14.094,19.385c0.268-0.197,0.537-0.395,0.809-0.59L85.146,59.168z"/>
- <path d="M75.789,66.654l-0.742,0.668L91.096,85.15c0.246-0.223,0.498-0.441,0.746-0.664L75.789,66.654z"/>
- <path d="M67.219,75.15l-0.668,0.742l17.833,16.053c0.222-0.248,0.44-0.5,0.665-0.746L67.219,75.15z"/>
- <path d="M59.598,84.439l-0.59,0.809l19.427,14.115c0.194-0.271,0.392-0.541,0.589-0.809L59.598,84.439z"/>
- <path d="M47.49,105.275l-0.406,0.912l21.898,9.736c0.133-0.305,0.263-0.611,0.399-0.914L47.49,105.275z"/>
- <path d="M43.119,116.486l-0.311,0.953l22.809,7.4c0.102-0.32,0.205-0.637,0.31-0.953L43.119,116.486z"/>
- <path d="M39.979,128.043l-0.207,0.975l23.447,4.986c0.068-0.326,0.143-0.648,0.213-0.975L39.979,128.043z"/>
- <path d="M38.016,139.939l-0.104,0.992l23.879,2.508c0.033-0.332,0.07-0.662,0.105-0.992L38.016,139.939z"/>
- <path d="M37.914,163.971l0.104,0.994l23.879-2.51c-0.035-0.33-0.072-0.662-0.105-0.994L37.914,163.971z"/>
- <path d="M39.769,175.885l0.212,0.979l23.451-4.988c-0.07-0.326-0.145-0.65-0.213-0.979L39.769,175.885z"/>
- <path d="M42.807,187.463l0.31,0.953l22.811-7.4c-0.104-0.316-0.208-0.635-0.31-0.953L42.807,187.463z"/>
- <path d="M47.084,198.711l0.408,0.914l21.889-9.734c-0.137-0.305-0.267-0.611-0.4-0.916L47.084,198.711z"/>
- <path d="M59.01,219.654l0.588,0.811l19.428-14.117c-0.198-0.268-0.396-0.537-0.591-0.809L59.01,219.654z"/>
- <path d="M66.549,229.01l0.67,0.74l17.828-16.049c-0.224-0.246-0.442-0.496-0.664-0.744L66.549,229.01z"/>
- <path d="M75.046,237.582l0.745,0.67l16.053-17.836c-0.249-0.221-0.5-0.441-0.748-0.666L75.046,237.582z"/>
- <path d="M84.336,245.143l0.81,0.59l14.093-19.385c-0.271-0.195-0.54-0.391-0.809-0.59L84.336,245.143z"/>
- <path d="M105.115,257.252l0.914,0.406l9.739-21.865c-0.305-0.133-0.612-0.264-0.915-0.402L105.115,257.252z"/>
- <path d="M116.33,261.682l0.949,0.311l7.416-22.824c-0.317-0.102-0.634-0.203-0.949-0.309L116.33,261.682z"/>
- <path d="M127.938,264.875l0.977,0.211l4.998-23.504c-0.328-0.068-0.652-0.143-0.978-0.213L127.938,264.875z"/>
- <path d="M139.834,266.725l0.994,0.104l2.504-23.822c-0.332-0.031-0.663-0.068-0.994-0.105L139.834,266.725z"/>
- <path d="M163.865,266.828l0.994-0.104l-2.504-23.824c-0.33,0.037-0.66,0.074-0.994,0.105L163.865,266.828z"/>
- <path d="M175.779,265.086l0.979-0.211l-4.996-23.508c-0.326,0.072-0.652,0.146-0.979,0.215L175.779,265.086z"/>
- <path d="M187.418,261.992l0.949-0.311l-7.416-22.822c-0.316,0.104-0.633,0.207-0.951,0.307L187.418,261.992z"/>
- <path d="M198.664,257.658l0.916-0.406l-9.738-21.861c-0.305,0.139-0.611,0.27-0.916,0.402L198.664,257.658z"/>
- <path d="M219.551,245.732l0.809-0.59l-14.094-19.385c-0.268,0.197-0.537,0.395-0.809,0.59L219.551,245.732z"/>
- <path d="M228.904,238.252l0.744-0.67l-16.051-17.832c-0.246,0.225-0.498,0.445-0.748,0.666L228.904,238.252z"/>
- <path d="M237.477,229.75l0.67-0.74l-17.836-16.055c-0.221,0.25-0.439,0.5-0.664,0.746L237.477,229.75z"/>
- <path d="M245.098,220.465l0.588-0.811l-19.426-14.115c-0.195,0.27-0.393,0.539-0.59,0.809L245.098,220.465z"/>
- <path d="M257.207,199.625l0.404-0.914l-21.896-9.738c-0.135,0.307-0.264,0.613-0.402,0.916L257.207,199.625z"/>
- <path d="M261.576,188.416l0.311-0.953l-22.811-7.4c-0.102,0.318-0.203,0.637-0.309,0.953L261.576,188.416z"/>
- <path d="M264.717,176.863l0.207-0.979l-23.449-4.988c-0.066,0.328-0.141,0.652-0.213,0.979L264.717,176.863z"/>
- <path d="M266.68,164.965l0.104-0.994l-23.881-2.51c-0.031,0.332-0.068,0.664-0.105,0.994L266.68,164.965z"/>
- <path d="M266.783,140.932l-0.107-0.992l-23.879,2.508c0.037,0.33,0.074,0.66,0.105,0.992L266.783,140.932z"/>
- <path d="M264.924,129.018l-0.207-0.975l-23.453,4.986c0.07,0.326,0.145,0.648,0.211,0.975L264.924,129.018z"/>
- <path d="M261.887,117.439l-0.309-0.953l-22.811,7.4c0.105,0.316,0.207,0.635,0.309,0.953L261.887,117.439z"/>
- <path d="M257.613,106.188l-0.408-0.912l-21.893,9.734c0.137,0.305,0.266,0.611,0.4,0.916L257.613,106.188z"/>
- <path d="M245.686,85.248l-0.588-0.809L225.67,98.555c0.197,0.27,0.395,0.537,0.59,0.809L245.686,85.248z"/>
- <path d="M238.146,75.893l-0.672-0.742l-17.828,16.049c0.225,0.246,0.443,0.498,0.666,0.746L238.146,75.893z"/>
- <path d="M229.648,67.322l-0.742-0.668l-16.053,17.832c0.248,0.223,0.498,0.441,0.746,0.666L229.648,67.322z"/>
- <path d="M220.361,59.758l-0.813-0.59l-14.094,19.385c0.271,0.195,0.541,0.393,0.811,0.592L220.361,59.758z"/>
- <path d="M199.578,47.65l-0.912-0.408l-9.74,21.865c0.305,0.135,0.611,0.266,0.914,0.402L199.578,47.65z"/>
- <path d="M188.369,43.221l-0.953-0.309L180,65.734c0.318,0.102,0.635,0.205,0.951,0.309L188.369,43.221z"/>
- <path d="M176.76,40.025l-0.979-0.209l-4.998,23.504c0.328,0.068,0.652,0.143,0.979,0.213L176.76,40.025z"/>
- <path d="M164.861,38.176l-0.994-0.104l-2.504,23.822c0.332,0.033,0.662,0.07,0.994,0.107L164.861,38.176z"/>
- <path d="M153.35,61.463V32.451h-2.002v29.012c0.334-0.004,0.666-0.012,1-0.012S153.016,61.459,153.35,61.463z"/>
- <path d="M93.215,48.006l-1.732,0.998l14.506,25.131c0.573-0.34,1.15-0.674,1.73-1L93.215,48.006z"/>
- <path d="M48.9,91.586l-0.998,1.729l25.129,14.506c0.328-0.58,0.66-1.156,1.001-1.729L48.9,91.586z"/>
- <path d="M61.359,151.453H32.347v1.996h29.013c-0.004-0.334-0.012-0.664-0.012-0.998S61.355,151.785,61.359,151.453z"/>
- <path d="M47.9,211.584l1.002,1.734l25.131-14.508c-0.34-0.572-0.676-1.15-1.003-1.732L47.9,211.584z"/>
- <path d="M91.48,255.898l1.734,0.998l14.504-25.129c-0.581-0.328-1.158-0.662-1.73-1.002L91.48,255.898z"/>
- <path d="M151.348,243.438v29.014h2.002v-29.014c-0.334,0.004-0.668,0.014-1.002,0.014S151.682,243.441,151.348,243.438z"/>
- <path d="M211.48,256.896l1.734-0.998l-14.508-25.133c-0.574,0.34-1.15,0.674-1.732,1.002L211.48,256.896z"/>
- <path d="M255.793,213.318l1-1.734l-25.129-14.506c-0.328,0.582-0.662,1.158-1.002,1.732L255.793,213.318z"/>
- <path d="M243.334,153.449h29.014v-1.996h-29.014c0.004,0.332,0.014,0.664,0.014,0.998S243.338,153.115,243.334,153.449z"/>
- <path d="M256.791,93.314l-0.998-1.729l-25.131,14.506c0.338,0.572,0.672,1.148,1,1.729L256.791,93.314z"/>
- <path d="M213.211,49.004l-1.729-0.998l-14.506,25.129c0.58,0.328,1.156,0.662,1.729,1.002L213.211,49.004z"/>
- </g>
- </g>
- <rect fill="none" width="305" height="305"/>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer_bg.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,157 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="292px" height="292px" viewBox="0 0 292 292" enable-background="new 0 0 292 292" xml:space="preserve">
-<g>
- <g>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="144.9668" y1="2.0586" x2="147.0384" y2="290.504">
- <stop offset="0" style="stop-color:#00B9FF"/>
- <stop offset="0.2458" style="stop-color:#00A0EE"/>
- <stop offset="0.563" style="stop-color:#0087DC"/>
- <stop offset="0.7527" style="stop-color:#007DD5"/>
- </linearGradient>
- <path fill="url(#SVGID_1_)" d="M291,146.002C291,226.086,226.082,291,146,291S1,226.086,1,146.002C1,65.916,65.918,1,146,1
- S291,65.916,291,146.002z"/>
- <g>
- <polygon points="145.717,259.359 145.717,29.361 147.715,29.361 147.715,259.359 145.717,259.359 "/>
- <polygon points="157.246,249.334 135.191,39.492 136.186,39.387 158.242,249.23 157.246,249.334 "/>
- <polygon points="135.191,249.23 157.246,39.387 158.242,39.492 136.186,249.334 135.191,249.23 "/>
- <polygon points="124.293,247.451 168.162,41.063 169.141,41.271 125.271,247.658 124.293,247.451 "/>
- <polygon points="113.639,244.543 178.842,43.871 179.793,44.18 114.592,244.852 113.639,244.543 "/>
- <polygon points="103.348,240.537 189.17,47.779 190.084,48.186 104.264,240.943 103.348,240.537 "/>
- <polygon points="84.301,229.418 208.322,58.717 209.133,59.305 85.109,230.006 84.301,229.418 "/>
- <polygon points="75.752,222.428 216.938,65.625 217.682,66.295 76.496,223.098 75.752,222.428 "/>
- <polygon points="67.98,214.584 224.783,73.396 225.453,74.141 68.65,215.326 67.98,214.584 "/>
- <polygon points="61.07,205.969 231.773,81.945 232.361,82.756 61.66,206.777 61.07,205.969 "/>
- <polygon points="50.135,186.814 242.893,100.994 243.299,101.908 50.541,187.729 50.135,186.814 "/>
- <polygon points="46.227,176.486 246.898,111.285 247.207,112.236 46.535,177.439 46.227,176.486 "/>
- <polygon points="43.418,165.807 249.807,121.938 250.016,122.916 43.627,166.785 43.418,165.807 "/>
- <polygon points="41.742,154.893 251.586,132.836 251.691,133.832 41.848,155.887 41.742,154.893 "/>
- <polygon points="41.848,132.836 251.691,154.893 251.586,155.887 41.742,133.832 41.848,132.836 "/>
- <polygon points="43.627,121.938 250.016,165.807 249.807,166.785 43.418,122.916 43.627,121.938 "/>
- <polygon points="46.533,111.285 247.207,176.488 246.898,177.439 46.227,112.236 46.533,111.285 "/>
- <polygon points="50.541,100.994 243.299,186.816 242.893,187.73 50.135,101.908 50.541,100.994 "/>
- <polygon points="61.66,81.945 232.361,205.969 231.773,206.777 61.072,82.756 61.66,81.945 "/>
- <polygon points="68.65,73.396 225.453,214.584 224.783,215.326 67.979,74.141 68.65,73.396 "/>
- <polygon points="76.494,65.625 217.682,222.43 216.938,223.098 75.752,66.295 76.494,65.625 "/>
- <polygon points="85.109,58.715 209.133,229.42 208.322,230.008 84.301,59.305 85.109,58.715 "/>
- <polygon points="168.162,247.658 124.293,41.271 125.271,41.063 169.141,247.451 168.162,247.658 "/>
- <polygon points="178.842,244.852 113.639,44.18 114.59,43.871 179.793,244.543 178.842,244.852 "/>
- <polygon points="189.17,240.943 103.348,48.186 104.262,47.779 190.084,240.537 189.17,240.943 "/>
- <polygon points="88.35,243.453 203.35,44.27 205.084,45.268 90.082,244.453 88.35,243.453 "/>
- <polygon points="88.35,45.268 90.082,44.27 205.084,243.453 203.35,244.453 88.35,45.268 "/>
- <polygon points="31.717,145.361 31.717,143.361 261.719,143.361 261.719,145.361 31.717,145.361 "/>
- <polygon points="46.623,87.729 47.625,85.996 246.811,200.996 245.811,202.725 46.623,87.729 "/>
- <polygon points="46.623,200.996 245.811,85.996 246.811,87.729 47.625,202.725 46.623,200.996 "/>
- <g>
- <g>
- <path fill="#F2F2F2" d="M135.988,281.377c0.602,0.383,1.992,0.984,3.457,0.984c2.713,0,3.553-1.729,3.527-3.025
- c-0.023-2.184-1.992-3.119-4.031-3.119h-1.176v-1.586h1.176c1.535,0,3.48-0.791,3.48-2.639c0-1.248-0.793-2.354-2.736-2.354
- c-1.248,0-2.449,0.553-3.121,1.033l-0.551-1.537c0.814-0.6,2.4-1.199,4.08-1.199c3.072,0,4.465,1.824,4.465,3.721
- c0,1.607-0.961,2.975-2.881,3.672v0.047c1.92,0.385,3.48,1.824,3.48,4.01c0,2.496-1.945,4.68-5.689,4.68
- c-1.752,0-3.287-0.553-4.057-1.057L135.988,281.377z"/>
- <path fill="#F2F2F2" d="M158.166,275.832c0,5.305-1.969,8.232-5.426,8.232c-3.047,0-5.111-2.855-5.16-8.016
- c0-5.234,2.256-8.113,5.424-8.113C156.293,267.936,158.166,270.863,158.166,275.832z M149.693,276.072
- c0,4.057,1.248,6.359,3.168,6.359c2.16,0,3.191-2.52,3.191-6.504c0-3.84-0.984-6.361-3.168-6.361
- C151.037,269.566,149.693,271.824,149.693,276.072z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M268.225,137.771h-0.047l-2.713,1.465l-0.408-1.609l3.408-1.824h1.801v15.602h-2.041V137.771z"/>
- <path fill="#F2F2F2" d="M285.266,137.58h-5.953l-0.6,4.008c0.359-0.047,0.695-0.096,1.271-0.096c1.201,0,2.4,0.264,3.361,0.84
- c1.225,0.695,2.232,2.041,2.232,4.008c0,3.049-2.426,5.33-5.809,5.33c-1.705,0-3.145-0.48-3.889-0.961l0.527-1.607
- c0.648,0.383,1.92,0.863,3.336,0.863c1.992,0,3.697-1.297,3.697-3.385c-0.023-2.016-1.369-3.455-4.488-3.455
- c-0.889,0-1.584,0.096-2.16,0.168l1.008-7.49h7.465V137.58z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M13.67,151.404v-4.248H6.422v-1.393l6.959-9.961h2.281v9.697h2.184v1.656h-2.184v4.248H13.67z
- M13.67,145.5v-5.207c0-0.816,0.023-1.633,0.072-2.449H13.67c-0.48,0.912-0.865,1.584-1.297,2.305l-3.816,5.305v0.047H13.67z"
- />
- <path fill="#F2F2F2" d="M28.766,137.58h-5.953l-0.6,4.008c0.359-0.047,0.695-0.096,1.271-0.096c1.201,0,2.4,0.264,3.361,0.84
- c1.225,0.695,2.232,2.041,2.232,4.008c0,3.049-2.426,5.33-5.809,5.33c-1.705,0-3.145-0.48-3.889-0.961l0.527-1.607
- c0.648,0.383,1.92,0.863,3.336,0.863c1.992,0,3.697-1.297,3.697-3.385c-0.023-2.016-1.369-3.455-4.488-3.455
- c-0.889,0-1.584,0.096-2.16,0.168l1.008-7.49h7.465V137.58z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M152.01,15.832c0,5.305-1.969,8.232-5.424,8.232c-3.049,0-5.113-2.855-5.16-8.016
- c0-5.234,2.256-8.113,5.424-8.113C150.139,7.936,152.01,10.863,152.01,15.832z M143.537,16.072
- c0,4.057,1.248,6.359,3.168,6.359c2.16,0,3.193-2.52,3.193-6.504c0-3.84-0.984-6.361-3.168-6.361
- C144.881,9.566,143.537,11.824,143.537,16.072z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M201.344,266.35v-1.297l1.656-1.607c3.984-3.793,5.783-5.809,5.809-8.16
- c0-1.584-0.77-3.049-3.098-3.049c-1.416,0-2.592,0.721-3.313,1.32l-0.672-1.488c1.08-0.912,2.617-1.584,4.418-1.584
- c3.359,0,4.775,2.305,4.775,4.535c0,2.881-2.088,5.209-5.377,8.377l-1.248,1.152v0.049h7.01v1.752H201.344z"/>
- <path fill="#F2F2F2" d="M222.967,252.523h-5.951l-0.6,4.01c0.359-0.049,0.695-0.098,1.271-0.098c1.199,0,2.4,0.266,3.359,0.842
- c1.225,0.695,2.232,2.039,2.232,4.008c0,3.049-2.424,5.328-5.809,5.328c-1.703,0-3.145-0.48-3.889-0.961l0.529-1.607
- c0.648,0.385,1.92,0.865,3.336,0.865c1.992,0,3.695-1.297,3.695-3.385c-0.023-2.018-1.367-3.457-4.488-3.457
- c-0.887,0-1.584,0.096-2.16,0.168l1.01-7.488h7.463V252.523z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M252.215,78.574h-0.047l-2.713,1.463l-0.408-1.607l3.408-1.824h1.801v15.602h-2.041V78.574z"/>
- <path fill="#F2F2F2" d="M270.313,84.238c0,5.305-1.969,8.232-5.426,8.232c-3.047,0-5.111-2.855-5.16-8.016
- c0-5.234,2.256-8.113,5.424-8.113C268.439,76.342,270.313,79.27,270.313,84.238z M261.84,84.479
- c0,4.057,1.248,6.359,3.168,6.359c2.16,0,3.191-2.52,3.191-6.504c0-3.84-0.984-6.361-3.168-6.361
- C263.184,77.973,261.84,80.23,261.84,84.479z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M28.525,216.248V212h-7.248v-1.393l6.959-9.961h2.281v9.697h2.184V212h-2.184v4.248H28.525z
- M28.525,210.344v-5.209c0-0.816,0.023-1.633,0.072-2.447h-0.072c-0.48,0.912-0.865,1.584-1.297,2.303l-3.816,5.305v0.049
- H28.525z"/>
- <path fill="#F2F2F2" d="M44.678,208.279c0,5.305-1.969,8.232-5.426,8.232c-3.047,0-5.111-2.855-5.16-8.016
- c0-5.234,2.256-8.113,5.424-8.113C42.805,200.383,44.678,203.311,44.678,208.279z M36.205,208.52
- c0,4.057,1.248,6.359,3.168,6.359c2.16,0,3.191-2.52,3.191-6.504c0-3.84-0.984-6.361-3.168-6.361
- C37.549,202.014,36.205,204.271,36.205,208.52z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M73.986,31.451h-5.951l-0.602,4.008c0.361-0.047,0.697-0.096,1.273-0.096c1.199,0,2.4,0.264,3.359,0.84
- c1.225,0.695,2.232,2.041,2.232,4.008c0,3.049-2.424,5.33-5.809,5.33c-1.703,0-3.145-0.48-3.889-0.961l0.529-1.607
- c0.648,0.383,1.92,0.863,3.336,0.863c1.992,0,3.695-1.297,3.695-3.385c-0.023-2.016-1.367-3.455-4.488-3.455
- c-0.887,0-1.584,0.096-2.16,0.168l1.01-7.49h7.463V31.451z"/>
- <path fill="#F2F2F2" d="M86.299,31.451h-5.953l-0.6,4.008c0.359-0.047,0.695-0.096,1.271-0.096c1.201,0,2.4,0.264,3.361,0.84
- c1.225,0.695,2.232,2.041,2.232,4.008c0,3.049-2.426,5.33-5.809,5.33c-1.705,0-3.145-0.48-3.889-0.961l0.527-1.607
- c0.648,0.383,1.92,0.863,3.336,0.863c1.992,0,3.697-1.297,3.697-3.385c-0.023-2.016-1.369-3.455-4.488-3.455
- c-0.889,0-1.584,0.096-2.16,0.168l1.008-7.49h7.465V31.451z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M248.828,216.248v-1.297l1.656-1.607c3.984-3.793,5.783-5.809,5.809-8.162
- c0-1.584-0.77-3.047-3.098-3.047c-1.416,0-2.592,0.719-3.313,1.32l-0.672-1.488c1.08-0.912,2.617-1.584,4.418-1.584
- c3.359,0,4.775,2.303,4.775,4.535c0,2.881-2.088,5.209-5.377,8.377l-1.248,1.152v0.049h7.01v1.752H248.828z"/>
- <path fill="#F2F2F2" d="M271.508,208.279c0,5.305-1.969,8.232-5.424,8.232c-3.049,0-5.113-2.857-5.16-8.018
- c0-5.232,2.256-8.111,5.424-8.111C269.637,200.383,271.508,203.311,271.508,208.279z M263.035,208.52
- c0,4.055,1.248,6.359,3.168,6.359c2.16,0,3.193-2.52,3.193-6.504c0-3.84-0.984-6.361-3.168-6.361
- C264.379,202.014,263.035,204.27,263.035,208.52z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M214.293,25.451h-5.953l-0.6,4.008c0.359-0.049,0.695-0.096,1.271-0.096c1.201,0,2.4,0.264,3.361,0.84
- c1.225,0.695,2.232,2.039,2.232,4.008c0,3.049-2.426,5.328-5.809,5.328c-1.705,0-3.145-0.479-3.889-0.959l0.527-1.609
- c0.648,0.385,1.92,0.865,3.336,0.865c1.992,0,3.697-1.297,3.697-3.385c-0.023-2.016-1.369-3.457-4.488-3.457
- c-0.889,0-1.584,0.098-2.16,0.168l1.008-7.488h7.465V25.451z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M71.234,263.926c0.6,0.385,1.992,0.984,3.455,0.984c2.713,0,3.553-1.729,3.529-3.023
- c-0.023-2.184-1.992-3.121-4.033-3.121H73.01v-1.584h1.176c1.537,0,3.48-0.791,3.48-2.641c0-1.248-0.791-2.352-2.736-2.352
- c-1.248,0-2.447,0.553-3.119,1.033l-0.553-1.537c0.816-0.6,2.4-1.199,4.08-1.199c3.072,0,4.465,1.824,4.465,3.719
- c0,1.609-0.961,2.977-2.881,3.674v0.047c1.92,0.385,3.48,1.824,3.48,4.008c0,2.498-1.943,4.682-5.688,4.682
- c-1.752,0-3.289-0.553-4.057-1.057L71.234,263.926z"/>
- <path fill="#F2F2F2" d="M92.354,252.525h-5.951l-0.6,4.008c0.359-0.047,0.695-0.096,1.271-0.096c1.199,0,2.4,0.264,3.359,0.84
- c1.225,0.697,2.232,2.041,2.232,4.01c0,3.047-2.424,5.328-5.809,5.328c-1.703,0-3.145-0.48-3.889-0.961l0.529-1.607
- c0.648,0.385,1.92,0.863,3.336,0.863c1.992,0,3.695-1.295,3.695-3.383c-0.023-2.018-1.367-3.457-4.488-3.457
- c-0.887,0-1.584,0.096-2.16,0.168l1.01-7.488h7.463V252.525z"/>
- </g>
- <g>
- <path fill="#F2F2F2" d="M30.283,78.383h-5.951l-0.602,4.008c0.361-0.049,0.697-0.096,1.273-0.096c1.199,0,2.4,0.264,3.359,0.84
- c1.225,0.695,2.232,2.039,2.232,4.008c0,3.049-2.424,5.328-5.809,5.328c-1.703,0-3.145-0.479-3.889-0.959l0.529-1.609
- c0.648,0.385,1.92,0.865,3.336,0.865c1.992,0,3.695-1.297,3.695-3.385c-0.023-2.016-1.367-3.457-4.488-3.457
- c-0.887,0-1.584,0.098-2.16,0.168l1.01-7.488h7.463V78.383z"/>
- <path fill="#F2F2F2" d="M43.652,84.238c0,5.305-1.969,8.232-5.426,8.232c-3.047,0-5.111-2.855-5.16-8.016
- c0-5.232,2.256-8.113,5.424-8.113C41.779,76.342,43.652,79.27,43.652,84.238z M35.18,84.479c0,4.057,1.248,6.361,3.168,6.361
- c2.16,0,3.191-2.521,3.191-6.506c0-3.84-0.984-6.359-3.168-6.359C36.523,77.975,35.18,80.23,35.18,84.479z"/>
- </g>
- </g>
- </g>
- <circle fill="#E6E6E6" cx="146" cy="146" r="95"/>
- </g>
- <rect fill="none" width="292" height="292"/>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer_overlay.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,18 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="292px" height="292px" viewBox="0 0 292 292" enable-background="new 0 0 292 292" xml:space="preserve">
-<g>
-
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="79.2285" y1="25.7695" x2="79.2285" y2="-64.2285" gradientTransform="matrix(1 0 0 -1 66.772 126.7695)">
- <stop offset="0" style="stop-color:#00B9FF"/>
- <stop offset="0.2458" style="stop-color:#00A0EE"/>
- <stop offset="0.563" style="stop-color:#0087DC"/>
- <stop offset="0.7527" style="stop-color:#007DD5"/>
- </linearGradient>
- <path fill="url(#SVGID_1_)" d="M146,101c24.856,0,45,20.146,45,44.998c0,24.855-20.145,45-45,45c-24.855,0-45-20.145-45-45
- C101,121.146,121.145,101,146,101z"/>
- <rect fill="none" width="292" height="292"/>
-</g>
-</svg>
--- a/clock/data/timer/qtg_graf_timer_pointer.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,10 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="292px" height="292px" viewBox="0 0 292 292" enable-background="new 0 0 292 292" xml:space="preserve">
-<g>
- <rect fill="none" width="292" height="292"/>
- <polygon points="120.687,109.787 146.667,51.787 172.647,109.787 "/>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_addnewcity.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <g>
- <path d="M19.846,38.309l-4.657-2.392c-0.143-0.071-0.248-0.196-0.296-0.349l0,0c-0.049-0.153-0.036-0.316,0.039-0.459l0,0
- c0.003-0.011,0.422-0.822,4.043-7.836l0,0l-5.06-2.633l0.277-0.534l0.531,0.278l-0.531-0.278l-0.277,0.534
- c-0.293-0.152-0.411-0.514-0.258-0.807l0,0l0.443-0.864c1.544-3.015,4.185-4.988,7.161-5.517l0,0
- c0.402-0.781,1.234-2.395,2.95-5.722l0,0c-0.635-0.327-1.566-0.809-1.566-0.809v-0.002c-0.294-0.149-0.411-0.511-0.257-0.804
- l0,0l2.241-4.345c0.153-0.296,0.515-0.415,0.809-0.261l0,0l13.257,6.84c0.141,0.071,0.248,0.199,0.297,0.353l0,0
- c0.049,0.15,0.036,0.315-0.036,0.456l0,0l-2.241,4.348c-0.075,0.14-0.199,0.244-0.353,0.297l0,0
- c-0.153,0.049-0.316,0.032-0.46-0.04l0,0c0,0-0.621-0.321-1.563-0.808l0,0c-0.52,1.004-1.413,2.736-2.95,5.717l0,0
- c0.596,1.263,0.906,2.652,0.906,4.076l0,0c0,1.651-0.414,3.344-1.248,4.96l0,0l-0.446,0.867
- c-0.071,0.14-0.195,0.243-0.349,0.296l0,0c-0.153,0.05-0.316,0.033-0.46-0.038l0,0l-5.094-2.623
- c-1.017,1.97-4.041,7.831-4.044,7.84l0,0c-0.075,0.14-0.195,0.244-0.349,0.297l0,0c-0.059,0.019-0.12,0.028-0.18,0.028l0,0
- C20.029,38.377,19.935,38.354,19.846,38.309L19.846,38.309z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M7.52,20.1c-0.156,0-0.313-0.061-0.423-0.176l0,0c-0.11-0.109-0.175-0.266-0.175-0.423l0,0v-5.337H1.578
- c-0.157,0-0.313-0.064-0.423-0.176l0,0c-0.11-0.113-0.176-0.267-0.176-0.426l0,0V8.16c0-0.156,0.065-0.313,0.176-0.424l0,0
- c0.111-0.113,0.267-0.174,0.423-0.174l0,0l5.344-0.004V2.225c0-0.16,0.062-0.313,0.175-0.427l0,0
- c0.11-0.11,0.267-0.176,0.423-0.176l0,0h5.402c0.156,0,0.313,0.065,0.423,0.176l0,0c0.111,0.114,0.176,0.267,0.176,0.427l0,0
- v5.338h5.337V8.16V7.563c0.163,0,0.313,0.061,0.426,0.174l0,0C19.398,7.852,19.46,8,19.46,8.16l0,0v5.402
- c0,0.159-0.062,0.313-0.176,0.426l0,0c-0.114,0.111-0.264,0.173-0.426,0.173l0,0h-5.337v5.34c0,0.157-0.065,0.313-0.176,0.423
- l0,0c-0.113,0.115-0.267,0.176-0.423,0.176l0,0H7.52L7.52,20.1z"/>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_alarm.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <circle cx="30.819" cy="29.887" r="4.693"/>
- </g>
- <g>
- <g>
- <path d="M13.694,37.482c-0.165,0-0.318-0.063-0.437-0.181l0,0L8.09,32.133c-0.11-0.113-0.174-0.262-0.181-0.419l0,0
- l-0.206-6.682c-1.64-1.418-4.903-4.7-5.305-9.255l0,0c-0.026-0.296-0.037-0.585-0.037-0.865l0,0
- C2.359,11.884,3.728,9.006,6.322,6.42l0,0c2.55-2.561,5.41-3.906,8.438-3.904l0,0c0.279,0,0.554,0.015,0.826,0.035l0,0
- c4.699,0.388,8.168,3.764,9.682,5.476l0,0l6.564-0.237c0.172-0.008,0.344,0.062,0.465,0.186l0,0l5.164,5.243
- c0.238,0.241,0.234,0.631-0.004,0.869l0,0L14.13,37.304c-0.111,0.111-0.261,0.179-0.424,0.179l0,0
- C13.702,37.482,13.698,37.482,13.694,37.482L13.694,37.482z"/>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_analyze.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,24 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <g>
- <g>
- <path d="M35.069,11.898l-8.76-8.762c-0.111-0.117-0.268-0.178-0.429-0.178H5.36c-0.158,0-0.316,0.061-0.43,0.178
- C4.819,3.248,4.753,3.404,4.753,3.564v32.869c0,0.158,0.065,0.314,0.177,0.43c0.116,0.111,0.271,0.178,0.43,0.178h29.28
- c0.157,0,0.316-0.066,0.429-0.178c0.112-0.115,0.178-0.271,0.178-0.43V12.328C35.247,12.168,35.181,12.01,35.069,11.898z
- M19.391,8.881c1.963,0,3.551,1.6,3.551,3.57c0,1.969-1.588,3.566-3.551,3.566c-1.967,0-3.548-1.598-3.551-3.566
- C15.843,10.48,17.424,8.881,19.391,8.881z M25.164,30.09c0,0.162-0.063,0.313-0.179,0.428c-0.111,0.117-0.267,0.18-0.429,0.18
- h-9.365c-0.164,0-0.315-0.063-0.428-0.18c-0.116-0.115-0.179-0.266-0.179-0.428v-2.838c0-0.162,0.063-0.316,0.175-0.432
- c0.116-0.113,0.271-0.176,0.432-0.176h1.619V20.65l-1.085-0.023c-0.329-0.008-0.593-0.279-0.593-0.604V17.25
- c0-0.162,0.063-0.313,0.178-0.43c0.115-0.115,0.268-0.178,0.428-0.178l6.652,0.018c0.336,0,0.606,0.27,0.606,0.604v9.381h1.56
- c0.162,0,0.317,0.063,0.429,0.178c0.115,0.113,0.179,0.268,0.179,0.43V30.09z M33.559,12.729h-7.656
- c-0.333,0-0.605-0.273-0.605-0.605V4.467c0-0.338,0.272-0.607,0.605-0.607c0.337,0,0.607,0.27,0.607,0.607v7.049h7.049
- c0.337,0,0.607,0.27,0.607,0.607C34.167,12.455,33.896,12.729,33.559,12.729z"/>
- </g>
- </g>
- <rect fill="none" width="40" height="40"/>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_lap.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,50 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <g>
- <g>
- <g>
- <path d="M38.817,19.563c0.017-0.134-0.02-0.265-0.101-0.368l-2.719-3.5c-0.082-0.104-0.202-0.173-0.334-0.188
- c-0.131-0.017-0.265,0.021-0.368,0.104l-2.323,1.81c-1.211-0.732-2.574-1.239-4.027-1.464v-1.482h1.853
- c0.134,0,0.257-0.052,0.353-0.145c0.096-0.096,0.147-0.222,0.147-0.355v-2.35c0-0.132-0.055-0.263-0.147-0.353
- c-0.093-0.093-0.221-0.147-0.353-0.147h-7.049c-0.134,0-0.263,0.052-0.355,0.147c-0.093,0.09-0.145,0.221-0.145,0.353v2.35
- c0,0.273,0.219,0.494,0.494,0.497l1.85,0.02v1.466c-1.429,0.22-2.769,0.714-3.967,1.426l-2.279-1.774
- c-0.218-0.169-0.532-0.131-0.702,0.088l-2.716,3.5c-0.169,0.218-0.131,0.529,0.088,0.702l1.744,1.358
- c-0.987,1.657-1.562,3.591-1.562,5.658C16.199,33.03,21.161,38,27.268,38c6.109,0,11.074-4.97,11.074-11.087
- c0-2.044-0.562-3.961-1.529-5.604l1.816-1.412C38.732,19.814,38.801,19.696,38.817,19.563z M29.09,28.268
- c0,0.131-0.055,0.256-0.147,0.352c-0.096,0.096-0.222,0.145-0.355,0.145H26.06c-0.134,0-0.26-0.049-0.355-0.145
- c-0.093-0.096-0.145-0.221-0.145-0.352v-7.202c0-0.131,0.052-0.259,0.145-0.354c0.096-0.093,0.224-0.145,0.355-0.145h2.527
- c0.134,0,0.263,0.052,0.355,0.145c0.093,0.096,0.147,0.224,0.147,0.354V28.268z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M6.984,27.315c-3.243-1.933-5.43-5.473-5.43-9.523l0,0c0-2.067,0.576-4.002,1.563-5.658l0,0l-1.745-1.36
- c-0.219-0.172-0.257-0.482-0.088-0.701l0,0l2.719-3.499c0.17-0.219,0.483-0.257,0.702-0.088l0,0L6.983,8.26
- c1.195-0.711,2.539-1.203,3.97-1.425l0,0V5.366L9.097,5.35C8.824,5.348,8.603,5.126,8.603,4.851l0,0V2.5
- c0-0.131,0.055-0.259,0.147-0.352l0,0c0.093-0.093,0.222-0.147,0.353-0.147l0,0h4.725c0.134,0,0.26,0.052,0.355,0.147l0,0
- c0.093,0.093,0.145,0.218,0.145,0.352l0,0v7.154c0,0.146-0.063,0.281-0.172,0.377l0,0c-0.109,0.096-0.257,0.137-0.401,0.117l0,0
- c-0.377-0.057-0.751-0.093-1.128-0.093l0,0c-4.255,0.009-7.714,3.47-7.722,7.733l0,0c0,1.791,0.614,3.432,1.638,4.747l0,0
- l0.104,0.284c0.061,1.384,0.423,2.683,1.034,3.832l0,0c0.106,0.196,0.068,0.442-0.095,0.598l0,0
- c-0.096,0.091-0.22,0.138-0.345,0.138l0,0C7.152,27.388,7.063,27.364,6.984,27.315L6.984,27.315z"/>
- </g>
- </g>
- <g>
- <g>
- <path d="M14.307,32.272c-3.244-1.931-5.429-5.473-5.429-9.523l0,0c-0.003-2.068,0.573-4.004,1.561-5.66l0,0l-1.744-1.36
- c-0.218-0.17-0.259-0.483-0.087-0.699l0,0l2.717-3.498c0.17-0.222,0.483-0.257,0.702-0.088l0,0l2.279,1.774
- c1.195-0.712,2.536-1.205,3.967-1.426l0,0v-1.468l-1.852-0.017c-0.273-0.006-0.495-0.227-0.495-0.5l0,0V7.456
- c0-0.131,0.052-0.259,0.146-0.354l0,0c0.093-0.093,0.224-0.145,0.354-0.145l0,0h4.725c0.134,0,0.26,0.052,0.353,0.147l0,0
- c0.096,0.093,0.147,0.218,0.147,0.352l0,0v7.155c0,0.145-0.063,0.281-0.175,0.377l0,0c-0.109,0.096-0.254,0.14-0.399,0.117l0,0
- c-0.376-0.058-0.751-0.093-1.127-0.093l0,0c-4.258,0.008-7.715,3.471-7.724,7.734l0,0c0,1.788,0.614,3.43,1.636,4.746l0,0
- l0.106,0.284c0.061,1.382,0.421,2.682,1.035,3.831l0,0c0.106,0.196,0.065,0.442-0.096,0.598l0,0
- c-0.096,0.092-0.22,0.139-0.344,0.139l0,0C14.475,32.345,14.386,32.321,14.307,32.272L14.307,32.272z"/>
- </g>
- </g>
- </g>
- <rect fill="none" width="40" height="40"/>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_newalarm.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <g>
- <circle cx="24.229" cy="32.53" r="3.754"/>
- </g>
- <g>
- <g>
- <path d="M10.093,38.548l-4.134-4.136c-0.114-0.111-0.178-0.259-0.182-0.418l0,0l-0.163-5.287
- c-1.332-1.163-3.921-3.79-4.246-7.453l0,0c-0.023-0.242-0.03-0.475-0.03-0.703l0,0c-0.004-2.462,1.111-4.797,3.207-6.883l0,0
- c2.052-2.062,4.375-3.158,6.835-3.156l0,0c0.226,0,0.45,0.012,0.67,0.028l0,0c3.781,0.314,6.553,2.986,7.792,4.378l0,0
- l5.193-0.188c0.172-0.006,0.344,0.061,0.465,0.182l0,0l4.13,4.193c0.239,0.243,0.235,0.634-0.004,0.874l0,0l-18.66,18.573
- c-0.119,0.114-0.273,0.179-0.439,0.179l0,0C10.362,38.73,10.207,38.666,10.093,38.548L10.093,38.548z M24.618,15.781
- l0.44-0.436L24.618,15.781L24.618,15.781z"/>
- </g>
- </g>
- </g>
- <g>
- <g>
- <path d="M30.54,17.302c-0.155-0.057-0.276-0.175-0.343-0.325l0,0l-1.854-4.194c-0.138-0.313,0-0.679,0.313-0.817l0,0l7.28-3.218
- c0.313-0.138,0.676,0,0.814,0.312l0,0l1.856,4.195c0.067,0.15,0.07,0.318,0.01,0.474l0,0c-0.06,0.154-0.175,0.275-0.326,0.343
- l0,0l-7.277,3.223c-0.08,0.034-0.165,0.053-0.249,0.053l0,0C30.689,17.346,30.613,17.331,30.54,17.302L30.54,17.302z
- M35.622,9.561l0.564-0.249L35.622,9.561L35.622,9.561z M26.555,11.586L22.313,9.84c-0.315-0.128-0.467-0.492-0.336-0.804l0,0
- l3.026-7.383c0.131-0.315,0.491-0.468,0.808-0.336l0,0l4.24,1.742c0.316,0.131,0.465,0.491,0.337,0.808l0,0l-3.03,7.382
- c-0.061,0.151-0.179,0.272-0.333,0.337l0,0c-0.075,0.031-0.155,0.047-0.235,0.047l0,0C26.711,11.633,26.63,11.617,26.555,11.586
- L26.555,11.586z M25.341,2.46l0.235-0.571L25.341,2.46L25.341,2.46z"/>
- </g>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_reset.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <path d="M23.19,4.596c0.446-0.448,0.882-0.886,0.882-0.886c0.204-0.206,0.204-0.539-0.002-0.741l-1.943-1.943
- c-0.207-0.207-0.538-0.207-0.742,0l-4.912,4.917c-0.204,0.207-0.204,0.535,0,0.742l5.025,5.027c0.1,0.099,0.232,0.155,0.371,0.155
- c0.142,0,0.271-0.057,0.371-0.153l1.945-1.937c0.1-0.1,0.153-0.23,0.153-0.372c0-0.138-0.054-0.274-0.153-0.371
- c-0.001-0.001-0.217-0.215-0.502-0.501c4.621,1.053,8.869,5.089,8.838,9.701c0,0.142,0.054,0.271,0.153,0.374
- c0.099,0.1,0.232,0.149,0.37,0.149h2.74c0.141,0,0.271-0.05,0.371-0.149c0.099-0.103,0.155-0.232,0.155-0.374
- C36.285,11.217,30.01,5.507,23.19,4.596z M35.785,18.234V17.71V18.234z"/>
- <path d="M17.388,11.723c-7.556,0-13.699,6.149-13.699,13.706c0,7.554,6.143,13.702,13.699,13.702
- c7.56,0,13.702-6.148,13.706-13.702C31.09,17.872,24.947,11.723,17.388,11.723 M19.314,26.586c0,0.14-0.054,0.272-0.153,0.372
- c-0.099,0.1-0.229,0.153-0.372,0.153h-2.889c-0.139,0-0.27-0.054-0.369-0.153s-0.156-0.232-0.156-0.372v-9.545
- c0-0.139,0.057-0.272,0.156-0.371c0.097-0.097,0.233-0.154,0.369-0.154h2.889c0.14,0,0.275,0.058,0.372,0.154
- c0.1,0.099,0.153,0.232,0.153,0.371V26.586z"/>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_split.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,23 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <path d="M35.913,13.063c0.021-0.176-0.027-0.346-0.133-0.48l-3.773-4.85c-0.22-0.281-0.629-0.336-0.912-0.115l-3.251,2.531
- c-1.692-1.025-3.6-1.732-5.635-2.041V5.971h2.616c0.171,0,0.336-0.07,0.458-0.193c0.123-0.121,0.188-0.285,0.188-0.457v-3.26
- c0-0.174-0.066-0.338-0.188-0.461S24.996,1.41,24.824,1.41h-9.788c-0.171,0-0.339,0.07-0.461,0.189
- c-0.119,0.123-0.189,0.291-0.189,0.461v3.256c0,0.357,0.287,0.646,0.644,0.65l2.616,0.025v2.115
- C15.64,8.408,13.76,9.1,12.089,10.096L8.902,7.617C8.619,7.396,8.21,7.451,7.99,7.732l-3.77,4.85
- c-0.108,0.135-0.154,0.309-0.133,0.48s0.112,0.33,0.245,0.434l2.453,1.908c-1.378,2.299-2.184,4.984-2.184,7.855
- c0,8.453,6.872,15.324,15.324,15.328c8.452-0.004,15.328-6.875,15.328-15.328c0-2.838-0.784-5.5-2.137-7.783l2.549-1.98
- C35.802,13.389,35.889,13.234,35.913,13.063z M20.485,35.553c-2.71,0-5.198-0.945-7.163-2.512c-0.21-0.17-0.25-0.479-0.083-0.694
- l6.369-8.337c0.094-0.123,0.24-0.199,0.396-0.199H31.47c0.138,0,0.265,0.057,0.359,0.153c0.096,0.098,0.145,0.224,0.143,0.361
- C31.823,30.548,26.744,35.55,20.485,35.553z"/>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_start.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,16 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <path d="M7.621,37.57c-0.205-0.111-0.339-0.326-0.339-0.559l0,0V2.99c0-0.236,0.13-0.451,0.339-0.561l0,0
- C7.83,2.322,8.083,2.34,8.275,2.473l0,0l24.176,16.98c0.168,0.117,0.267,0.313,0.267,0.516l0,0c0,0.205-0.099,0.396-0.267,0.518
- l0,0L8.275,37.523C8.166,37.6,8.039,37.639,7.91,37.639l0,0C7.812,37.639,7.714,37.615,7.621,37.57L7.621,37.57z"/>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_stop.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <path d="M5.612,34.963c-0.153,0-0.296-0.06-0.406-0.169l0,0c-0.11-0.109-0.169-0.255-0.169-0.408l0,0V5.611
- c0-0.148,0.062-0.299,0.169-0.404l0,0c0.105-0.111,0.256-0.17,0.406-0.17l0,0h28.774c0.154,0,0.297,0.059,0.406,0.17l0,0
- c0.111,0.105,0.17,0.254,0.17,0.404l0,0v28.774c0,0.153-0.059,0.299-0.17,0.408l0,0c-0.109,0.105-0.252,0.169-0.406,0.169l0,0
- H5.612L5.612,34.963z"/>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_stopwatch.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <path d="M35.914,13.063c0.021-0.176-0.028-0.346-0.133-0.48l-0.515,0.4l0.515-0.4l-3.773-4.85
- c-0.221-0.281-0.631-0.336-0.914-0.115l-3.25,2.531c-1.693-1.025-3.6-1.732-5.635-2.041V5.971h2.615
- c0.172,0,0.336-0.07,0.459-0.193c0.122-0.121,0.188-0.285,0.188-0.457v-3.26c0-0.174-0.065-0.338-0.188-0.461
- C25.16,1.477,24.996,1.41,24.824,1.41h-9.788c-0.171,0-0.339,0.07-0.461,0.189c-0.119,0.123-0.189,0.291-0.189,0.461v3.256
- c0,0.357,0.287,0.646,0.644,0.65l2.616,0.025v2.115C15.64,8.408,13.76,9.1,12.089,10.096L8.902,7.617
- C8.619,7.396,8.21,7.451,7.99,7.732l-3.77,4.85c-0.108,0.135-0.154,0.309-0.133,0.48s0.112,0.33,0.245,0.434l2.453,1.908
- c-1.378,2.299-2.184,4.984-2.184,7.855c0,8.453,6.872,15.324,15.324,15.328c8.452-0.004,15.328-6.875,15.328-15.328
- c0-2.838-0.784-5.5-2.137-7.783l2.55-1.98C35.802,13.389,35.889,13.234,35.914,13.063z M22.404,25.135
- c0,0.172-0.066,0.336-0.189,0.459c-0.121,0.121-0.285,0.188-0.461,0.188h-3.508c-0.174,0-0.339-0.063-0.461-0.188
- c-0.123-0.123-0.188-0.287-0.188-0.459V15.15c0-0.172,0.07-0.34,0.188-0.457c0.123-0.123,0.29-0.189,0.461-0.189h3.508
- c0.176,0,0.34,0.066,0.461,0.189c0.123,0.121,0.189,0.285,0.189,0.457V25.135z"/>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_timer.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,22 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <g>
- <g>
- <path d="M20.788,5.788c-1.923,0-3.759,0.349-5.473,0.957l9.151,9.954c0,0,3.764,4.007-0.358,7.782
- c-4.117,3.799-7.919-0.183-7.919-0.183L6.633,13.913c-1.43,2.437-2.265,5.266-2.265,8.296c0,9.069,7.351,16.421,16.419,16.421
- c9.068,0,16.42-7.352,16.42-16.421C37.208,13.141,29.855,5.788,20.788,5.788z"/>
- </g>
- </g>
- <g>
- <path d="M3.648,6.713l14.069,15.29c0,0,2.113,2.213,4.4,0.103c2.291-2.098,0.201-4.324,0.201-4.324L8.251,2.483
- c0,0-2.251-2.3-4.443-0.288C1.618,4.211,3.648,6.713,3.648,6.713z"/>
- </g>
- </g>
-</g>
-</svg>
--- a/clock/data/toolbar/qtg_test_worldclock.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,70 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <path d="M1.376,20C1.394,30.267,9.729,38.606,20,38.624C30.268,38.606,38.607,30.267,38.624,20
- C38.607,9.732,30.268,1.393,20,1.375C9.729,1.393,1.394,9.732,1.376,20z M9.44,23.484l-0.925,1.23c0,0-0.085,2.324-0.091,2.422
- c-0.076,0.226-0.693,0.149-0.932,0.149c-0.807,0.761,0.421,1.424,0.217,1.895c-0.198,0.457-0.454,0.971-0.774,1.431
- c-2.255-2.882-4.663-8.227-3.11-14.513c0.196,0.094,0.443,0.331,0.75,0.755c0.337,0.468,0.314,1.104,0.631,1.394
- c0.378,0.346,0.784,1.573,0.784,1.573l1.043,1.126l2.408,1.559V23.484z M32.341,29.007c-0.703,0.229-0.458-0.546-0.458-0.546
- s0.629-1.39,0.643-1.501c0.033-0.263,0.863-0.524,0.863-0.524l0.553-0.878C34.762,25.392,33.805,28.527,32.341,29.007z
- M26.614,5.048c0.263,0.034,0.183,0.284,0.479,0.284c0.101,0,0.53-0.112,1.054-0.258c4.178,2.173,7.342,6.03,8.584,10.674
- c-0.055-0.003-0.089-0.008-0.089-0.008s-0.099-0.065-0.245-0.16l-0.516-1.022l-0.817-0.066l-1.664-1.402
- c0,0,0.441,1.13,1.173,1.664c0.475,0.033,0.798-0.032,0.822-0.008c0.52,1.373-0.594,3.06-1.887,3.372
- c-0.163-0.704-0.306-0.979-0.512-1.58l-2.266-3.081L30.6,13.782l1.045,1.59c0,0,0.74,1.241,1.046,1.961
- c0.589,0.522,0.703,0.739,0.763,1.273c0.207,0.066,0.37,0.077,1.023-0.162c0.988-0.364,0.424,1.162,0.262,1.588
- c-0.592,1.444-0.724,1.331-1.656,2.279c-1.441,1.018-0.668,2.793-0.732,4.229c0,0-1.455,0.98-1.994,1.192
- c-0.5,0.714-0.01,1.389-0.261,1.406c-0.766,0.251-1.925,1.437-2.124,1.601c-0.688,0.888-1.113,1.016-1.922,0.945
- c-2.257-0.638-1.578-2.984-1.678-3.245c-0.277-0.898-1.153-1.029-0.012-2.746c0.479-0.564,0.045-1.822-0.828-3.043
- c-0.4-0.563,0.281-1.868,0.229-1.877c-1.461-0.272-1.764-0.93-1.828-1.095c0,0-2.974,0.593-4.001,0.508
- c-0.787-0.063-2.488-2.101-2.817-2.854c-0.327-0.755,0.619-3.3,0.654-3.496c0.033-0.198,2.244-1.732,2.244-1.732l1.505-1.465
- l-0.901-0.444c0,0,0.186-1.837,1.014-1.372c0.087,0.049,0.554,0.145,1.082,0.099c0.559-0.351-0.612-0.813-0.485-1.288
- c0.03-0.112,0.463-0.166,0.027-0.56c-0.696-0.631-0.195-1.089,0.239-1.198c0.48,0.176,0.785,0.608,0.785,1.198
- c0,0.592,1.559-0.27,1.654-0.37c-0.695-0.501-1.045-1.294-0.784-1.327c0.267-0.036,1.421-0.335,1.716-0.633
- C24.157,4.449,26.348,5.017,26.614,5.048z M17.624,4.73c0.215-0.104,0.614,0.104,0.889,0.063c0.277-0.041,0.521,0.063,0.521,0.063
- s-0.491,0.23-0.705,0.271C18.115,5.169,17.809,4.959,17.624,4.73z M15.487,3.866c1.532-0.454,3.157-0.699,4.835-0.699
- c1.305,0,2.576,0.148,3.796,0.426c-1.636,0.353-3.429-0.069-3.429-0.069c-0.164,0.262-0.905,0.125-1.1,0.125
- c-0.199,0-1.213,0.838-2.168,0.757c-0.459,0.295-0.865,0.624-1.359,0.46c-0.492-0.164-1.435,0.653-1.795,0.688
- c-0.489,0.155-0.724,0.119-0.792-0.025C14.599,4.841,15.058,4.28,15.487,3.866z M12.276,5.191l-0.951,1.12
- c0,0-0.196,0.587-0.306,0.74c-0.108,0.152-0.653,0.742-0.653,0.742L9.909,7.597l-0.066-0.24c0,0-0.502,0.153-0.502,0.458
- S7.403,9.388,6.819,9.851C8.281,7.936,10.142,6.342,12.276,5.191z"/>
- <path d="M24.55,6.61c0.171,0.151,0.739,0.464,0.825-0.047c0.085-0.514-0.452-1.293-0.452-1.293s-0.54,0.131-0.403,0.48
- C24.656,6.099,24.381,6.459,24.55,6.61z"/>
- <path d="M24.55,6.61c0.171,0.151,0.739,0.464,0.825-0.047c0.085-0.514-0.452-1.293-0.452-1.293s-0.54,0.131-0.403,0.48
- C24.656,6.099,24.381,6.459,24.55,6.61z"/>
- <path d="M24.55,6.61c0.171,0.151,0.739,0.464,0.825-0.047c0.085-0.514-0.452-1.293-0.452-1.293s-0.54,0.131-0.403,0.48
- C24.656,6.099,24.381,6.459,24.55,6.61z"/>
- <path d="M28.767,9.863c0,0,0.515-0.094,1.015,0.1c1.418,0.286,0.977-0.235,0.304-0.6c-0.239-0.128-0.583-0.316-0.401-0.558
- c-0.157-0.255-0.5-0.075-0.742,0.191c-0.243,0.266-0.771-0.121-0.932,0.37C27.849,9.856,28.653,10.085,28.767,9.863z"/>
- <path d="M28.767,9.863c0,0,0.515-0.094,1.015,0.1c1.418,0.286,0.977-0.235,0.304-0.6c-0.239-0.128-0.583-0.316-0.401-0.558
- c-0.157-0.255-0.5-0.075-0.742,0.191c-0.243,0.266-0.771-0.121-0.932,0.37C27.849,9.856,28.653,10.085,28.767,9.863z"/>
- <path d="M28.767,9.863c0,0,0.515-0.094,1.015,0.1c1.418,0.286,0.977-0.235,0.304-0.6c-0.239-0.128-0.583-0.316-0.401-0.558
- c-0.157-0.255-0.5-0.075-0.742,0.191c-0.243,0.266-0.771-0.121-0.932,0.37C27.849,9.856,28.653,10.085,28.767,9.863z"/>
- <path d="M22.225,9.034c-0.348,0.296-1.314,1.204-1.314,1.204l-1.345,0.479l1.214,0.19l1.244-0.369l1.951,0.129l0.318,0.919
- c0,0,2.137,1.058,2.342,0.844c0.316-0.326,0.486-0.795,0.962-0.469c0.478,0.328,1.253,0.329,1.812,0.329
- c0.232,0.067,1.053,0.611,1.03-0.739c-0.362-0.304-2.352-0.177-2.915-1.48l-0.285,0.041c0,0,0.189,0.92-0.041,0.902
- c-0.537-0.039-1.096-1.001-1.096-1.001l-0.104-0.408l-1.401-0.793c0,0-0.007,0.234,1.085,1.191c0,0-0.369,0.631-0.858,0.664
- c0.124-0.164,0.216-0.655,0.216-0.655l-1.345-1.077C23.694,8.936,22.52,8.784,22.225,9.034z"/>
- <path d="M22.225,9.034c-0.348,0.296-1.314,1.204-1.314,1.204l-1.345,0.479l1.214,0.19l1.244-0.369l1.951,0.129l0.318,0.919
- c0,0,2.137,1.058,2.342,0.844c0.316-0.326,0.486-0.795,0.962-0.469c0.478,0.328,1.253,0.329,1.812,0.329
- c0.232,0.067,1.053,0.611,1.03-0.739c-0.362-0.304-2.352-0.177-2.915-1.48l-0.285,0.041c0,0,0.189,0.92-0.041,0.902
- c-0.537-0.039-1.096-1.001-1.096-1.001l-0.104-0.408l-1.401-0.793c0,0-0.007,0.234,1.085,1.191c0,0-0.369,0.631-0.858,0.664
- c0.124-0.164,0.216-0.655,0.216-0.655l-1.345-1.077C23.694,8.936,22.52,8.784,22.225,9.034z"/>
- <path d="M22.225,9.034c-0.348,0.296-1.314,1.204-1.314,1.204l-1.345,0.479l1.214,0.19l1.244-0.369l1.951,0.129l0.318,0.919
- c0,0,2.137,1.058,2.342,0.844c0.316-0.326,0.486-0.795,0.962-0.469c0.478,0.328,1.253,0.329,1.812,0.329
- c0.232,0.067,1.053,0.611,1.03-0.739c-0.362-0.304-2.352-0.177-2.915-1.48l-0.285,0.041c0,0,0.189,0.92-0.041,0.902
- c-0.537-0.039-1.096-1.001-1.096-1.001l-0.104-0.408l-1.401-0.793c0,0-0.007,0.234,1.085,1.191c0,0-0.369,0.631-0.858,0.664
- c0.124-0.164,0.216-0.655,0.216-0.655l-1.345-1.077C23.694,8.936,22.52,8.784,22.225,9.034z"/>
- <path d="M32.08,10.315c0.381,0.356,0.218,0.622,0.471,0.847c0.252,0.224,0.842,0.25,0.463-0.261
- c-0.459-0.617-0.939-1.096-1.045-1.248c-0.203-0.284,0.115-0.88-0.42-0.626C31.234,9.586,31.534,9.806,32.08,10.315z"/>
- <path d="M32.08,10.315c0.381,0.356,0.218,0.622,0.471,0.847c0.252,0.224,0.842,0.25,0.463-0.261
- c-0.459-0.617-0.939-1.096-1.045-1.248c-0.203-0.284,0.115-0.88-0.42-0.626C31.234,9.586,31.534,9.806,32.08,10.315z"/>
- <path d="M32.08,10.315c0.381,0.356,0.218,0.622,0.471,0.847c0.252,0.224,0.842,0.25,0.463-0.261
- c-0.459-0.617-0.939-1.096-1.045-1.248c-0.203-0.284,0.115-0.88-0.42-0.626C31.234,9.586,31.534,9.806,32.08,10.315z"/>
- </g>
-</g>
-</svg>
Binary file clock/data/translations/clock.qm has changed
--- a/clock/data/translations/clock.ts Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,959 +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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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>
-<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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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="yes" id="txt_clock_list_ln_minutes">
- <comment>Alarm snooze time details in the list box (5mins, 10mins, 15mins, 30mins)</comment>
- <source>%Ln minutes</source>
- <translation>
- <numerusform variants="no">(s)%Ln minutes</numerusform>
- <numerusform variants="no">(p)%Ln minutes</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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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_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>
-<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>
-<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/data/worldclock/qgn_clock_time_zone.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,228 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg baseProfile="tiny" height="320px" version="1.1" viewBox="0 0 640 320" width="640px" x="0px" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px">
-<defs id="symbolDefs">
-<symbol id="pin" overflow="visible">
- <polygon points="0,0 0.947,-6.288 3.851,-11.624 0.583,-13.402 6.224,-17.481 7.354,-23.541 15.773,-18.959 11.299,-14.72 10.937,-7.769 7.669,-9.546 4.766,-4.209 "/>
-</symbol>
-</defs>
-
-<g id="worldmap">
-<rect fill="#E8F5F8" height="320" width="640"/>
-<g>
-<path d="M225.453,37.671c0.315,0,1.583-0.28,2.057-0.438c0.474-0.158,1.022-0.588,1.022-0.588 s-1.184-0.552-1.737-0.552c-0.552,0-2.368-0.868-2.605-0.475c-0.237,0.395-1.184,0.79-1.184,0.79s1.105,0.631,1.342,0.631 S225.453,37.671,225.453,37.671z" fill="#B9C5D1"/>
-<path d="M485.456,141.13C485.456,141.99,484.461,142.28,485.456,141.13" fill="#B9C5D1"/>
-<path d="M487.706,148.706c0.112-0.56,0.255-0.866-0.474-1.479C487.022,147.859,487.18,148.353,487.706,148.706" fill="#B9C5D1"/>
-<path d="M487.054,146.339c0.732-1.096-0.944-0.704-0.918-0.525C486.264,146.672,487.264,146.511,487.054,146.339" fill="#B9C5D1"/>
-<path d="M494.574,159.773c-0.021-0.042,0.021-1.404-1.125-2.07C493.473,158.692,494.125,158.889,494.574,159.773" fill="#B9C5D1"/>
-<path d="M496.586,162.082c-0.097-0.337,0.998,2.11,0.651,1.895C494.404,162.206,496.593,163.1,496.586,162.082" fill="#B9C5D1"/>
-<path d="M499.429,166.581c-0.237-0.19-1.825-2.19-1.835-2.19C498.662,164.391,498.974,165.985,499.429,166.581" fill="#B9C5D1"/>
-<path d="M513.343,153.974c-0.178,0-0.118,0.474-0.415-0.118s0.237-1.007,0.237-1.007s0.533,0.415,0.533,0.651 C513.698,153.737,513.343,153.974,513.343,153.974z" fill="#B9C5D1"/>
-<path d="M540.578,116.923c-0.02,0,1.351,0.112,1.48-0.06C541.547,117.544,541.056,117.676,540.578,116.923" fill="#B9C5D1"/>
-<path d="M543.835,116.271c-0.217-0.079-0.434-0.157-0.651-0.236c-0.079,0.099-0.158,0.197-0.237,0.296 C543.249,116.427,543.545,116.407,543.835,116.271" fill="#B9C5D1"/>
-<path d="M211.263,72.977c-0.148-0.06-1.006-0.267-1.362-0.385c-0.355-0.118-1.036-0.533-1.273-0.533 c-0.236,0-0.77-0.029-1.006-0.088c-0.237-0.06-1.273-0.207-1.273-0.207s-0.208,0.118,0.118,0.266s1.214,0.296,1.244,0.414 c0.029,0.119-0.267,0.297,0.177,0.444c0.444,0.148,0.977,0.355,1.362,0.385c0.385,0.029,0.622,0.029,1.007,0.029 c0.385,0,0.651-0.147,0.799-0.177C211.204,73.095,211.263,72.977,211.263,72.977z" fill="#B9C5D1"/>
-<path d="M178.867,61.386c0.112-0.118,0.678-0.395,1.356-0.474c0.678-0.078,1.13-0.197,0.904-0.434 c-0.226-0.237-0.904-0.553-1.243-0.395c-0.339,0.157-1.355,0.315-1.355,0.631C178.528,61.031,178.867,61.386,178.867,61.386z" fill="#B9C5D1"/>
-<path d="M161.706,23.072c-0.316,0.118-0.355,0.197-0.592,0.236c-0.237,0.04-1.421-0.158-1.421-0.039 c0,0.118-0.552,0.236-0.671,0.236c-0.118,0-0.631-0.236-0.474-0.276c0.158-0.039,0.829-0.117,0.671-0.117 c-0.158,0-0.513-0.158-0.513-0.316s0.552-0.435,0.552-0.435s1.026,0,1.263,0s0.75-0.079,0.868,0.119 C161.508,22.678,161.706,23.072,161.706,23.072z" fill="#B9C5D1"/>
-<path d="M377.016,93.277c-0.072-0.043-0.296-0.346-0.356-0.357c0.002,0-0.563,0.766-0.098,0.699 C376.821,93.582,377.07,93.61,377.016,93.277" fill="#B9C5D1"/>
-<path d="M375.625,93.011c0.274-0.09,0.169-0.474-0.034-0.521C375.208,92.399,375.181,93.037,375.625,93.011" fill="#B9C5D1"/>
-<path d="M382.078,97.154c-0.323,0.217-0.753,0.303-1.047,0.507c-0.162,0.112,0.252,0.433,0.196,0.603 c-0.08,0.242-0.648,0.153-0.843,0.435c-0.269,0.388-1.096,0.347-1.505,0.249c-0.337-0.08-0.835-0.318-0.598-0.75 c0.232-0.425,0.698-0.235,1.042-0.499c0.307-0.236,0.744-0.027,1.091-0.018C380.897,97.695,381.583,97.279,382.078,97.154" fill="#B9C5D1"/>
-<path d="M367.424,97.924c-0.381,0.381-1.738,0.393-2.26,0.508c-0.332,0.073-0.674-0.315-0.948-0.468 c-0.456-0.253-1.082,0.109-1.558-0.129c-0.352-0.176-0.329-0.417,0.089-0.474c0.717-0.098,1.144,0.044,1.833,0.106 C365.522,97.554,366.481,97.774,367.424,97.924" fill="#B9C5D1"/>
-<path d="M370.947,95.793c-0.126,0.377-0.589,0.665-0.829,0.977C369.731,96.153,370.477,95.824,370.947,95.793" fill="#B9C5D1"/>
-<path d="M365.915,89.578c-0.164,0.246-0.823,0.352-0.807-0.026C365.121,89.229,365.969,89.221,365.915,89.578" fill="#B9C5D1"/>
-<path d="M366.24,94.491c-0.061,0.018-1.095-0.089-1.007,0.089c0.085,0.171,0.493,0.04,0.642,0.228 C366.045,95.022,366.246,94.659,366.24,94.491" fill="#B9C5D1"/>
-<path d="M364.642,95.083c0.107-0.087,0.22-0.354,0.17-0.491c-0.011-0.031-0.687,0.494-0.763,0.55 C364.245,95.252,364.467,95.221,364.642,95.083" fill="#B9C5D1"/>
-<path d="M368.608,97.48c0.171-0.173,0.337-0.772,0.72-0.641c0.164,0.057-0.482,0.755-0.75,0.758 C368.588,97.559,368.599,97.52,368.608,97.48" fill="#B9C5D1"/>
-<path d="M364.76,91.502c-0.06-0.094-0.736-0.629-0.737-0.606C363.997,91.257,364.418,91.66,364.76,91.502" fill="#B9C5D1"/>
-<path d="M0,27.472c0,0,0.818,1.145,3.435,0.49s4.579-1.799,9.485-0.49c0,0,4.906,1.309,5.724-0.164 c0.818-1.472,6.869-2.78,6.706-1.799s-1.799,1.472-0.164,1.963c1.635,0.49,5.724,0,5.56,1.472 c-0.163,1.473-7.522,0.818-8.013,2.453c-0.491,1.636-7.85,1.472-9.813,0.654c-1.962-0.818-4.252,1.145-5.724,1.145 c-1.472,0-7.032-1.472-7.196-0.817V27.472z" fill="#B9C5D1"/>
-<path d="M0.823,33.425v1.21c0,0,2.813-0.425,3.696-0.262c0.883,0.164,1.047-0.163,0.916-0.49 s-1.145-0.393-1.505-0.688C3.571,32.901,1.15,33.294,0.823,33.425z" fill="#B9C5D1"/>
-<path d="M0,38.004c0,0,8.145,1.93,8.995,2.715c0.851,0.785-0.065,0.785,0,1.177 c0.065,0.394,0.981,0.197,0.981,0.394s-0.098,0.72,0.327,0.393s0.458,0.131,0.752,0c0.294-0.132-1.21-1.079-0.719-1.309 c0.49-0.229,2.322,0.196,2.813,0.327c0.491,0.131,2.617,0.621,3.467,0.687c0.851,0.065,2.453,0.262,1.962,0.491 c-0.49,0.229-2.061,1.046-3.238,0.589c0,0,0.589,0.851-0.229,0.719c-0.818-0.131-1.799-0.72-1.832-0.359 c-0.033,0.359,1.014,1.93,0.36,2.093c-0.654,0.164-2.225,0.426-2.781,0.197c-0.556-0.229-1.374-0.916-1.962-0.884 c-0.589,0.033-0.588,0.458-1.603-0.981c0,0-0.458-0.752-2.093-0.196c-1.636,0.557-2.257,0.785-2.617-0.13 c-0.36-0.916,0.065-0.785,0.392-0.949c0.327-0.163,0.393-0.654,0.066-0.523s-0.72,0.426-0.851,0.262 c-0.131-0.164-0.196-0.556-0.458-0.262s-1.178,0.065-1.178,0.49c0,0.426,0.687,0.852,0.426,1.243 C0.72,44.578,0.196,44.905,0,44.905V38.004z" fill="#B9C5D1"/>
-<path d="M15.15,48.046c0,0-0.164-1.243,1.995-0.851c0,0,1.145-0.327,1.668,0.229s1.635-0.359,2.191,0.491 s0.556,0.687,0.556,0.687s-2.028-0.098-2.42,0C19.141,48.602,16.491,47.653,15.15,48.046z" fill="#B9C5D1"/>
-<path d="M22.738,53.377c0,0,3.042-0.589,3.435-0.196S28.888,56.517,22.738,53.377z" fill="#B9C5D1"/>
-<path d="M6.221,67.833c0,0-4.351-0.393-1.374,1.047L6.221,67.833z" fill="#B9C5D1"/>
-<path d="M7.169,68.095c0,0-1.112,0.653-0.622,1.046c0.491,0.394,1.832-0.556,1.766-0.687 C8.249,68.323,8.15,67.931,7.169,68.095z" fill="#B9C5D1"/>
-<path d="M9.818,67.702c0,0,2.715,1.243,3.565,0.457c0.851-0.784,0.098-0.425,1.014-0.163 c0.916,0.262,3.009-0.981-2.943-0.785C11.454,67.211,9.394,66.492,9.818,67.702z" fill="#B9C5D1"/>
-<path d="M20.056,66.23c0,0-4.023,0.163-3.369,0.916C17.341,67.898,19.5,67.473,20.056,66.23z" fill="#B9C5D1"/>
-<path d="M20.678,66.066c0,0,1.439-1.341,1.963-1.014c0.523,0.327-1.341,1.668-1.668,1.439 C20.645,66.263,20.678,66.066,20.678,66.066z" fill="#B9C5D1"/>
-<path d="M23.622,65.674c0,0,0.556-1.439,2.028-1.569C27.122,63.973,28.004,65.543,23.622,65.674z" fill="#B9C5D1"/>
-<path d="M0,299.032c0,0,47.962,0,66.248-4.493c18.286-4.492,74.042,1.498,73.443-1.198 c-0.6-2.695,29.376-3.595,42.566-4.193c13.19-0.599,32.076-25.161,32.076-14.977s-2.398,16.475-2.098,17.973 c0.299,1.497,35.072,9.585,45.264,6.889c10.192-2.695,39.869-16.175,61.152-15.276c21.284,0.898,60.553-1.797,67.448-0.599 s20.684-8.088,33.874-5.691s24.88,7.788,31.175,6.59c6.295-1.198,12.891-2.097,14.989-4.493c2.098-2.396,31.475-1.498,44.964-1.498 s37.771-3.894,55.756-0.897c17.986,2.994,60.553,6.589,56.656,10.783c-3.896,4.193-19.785,6.589-12.59,9.585 c7.194,2.995,27.878,1.797,29.077,2.097V320H0V299.032z" fill="#B9C5D1"/>
-<path d="M146.684,28.423c0,0-2.016,0.891-2.719,0.797s-5.157,0.516-2.156,1.313c0,0,0.328,0.375-0.516,0.281 c-0.844-0.094-5.673,0.188-1.688,1.594c3.985,1.406,2.625,0.142,5.017,1.688c2.392,1.547,3.798-0.375,4.36-0.891 s0.656-3.47-0.375-4.079C147.575,28.517,146.872,28.142,146.684,28.423z" fill="#B9C5D1"/>
-<path d="M142.783,17.813c0,0,3.863-0.306,2.847,0.61C144.613,19.338,142.072,19.644,142.783,17.813z" fill="#B9C5D1"/>
-<path d="M166.266,47.191c0,0,0.915,0.102,1.118-0.915s1.728-3.05,3.354-1.932c1.626,1.119,8.843,2.237,7.217,2.745 c-1.626,0.508-5.286,1.017-8.234,1.017S165.757,48.005,166.266,47.191z" fill="#B9C5D1"/>
-<path d="M172.161,50.038c0,0-1.423-2.339,2.948-1.322C175.109,48.716,174.397,50.139,172.161,50.038z" fill="#B9C5D1"/>
-<path d="M183.648,40.991c0,0-0.204-1.729,3.151-1.525l0.204,1.22C187.003,40.686,185.173,41.295,183.648,40.991z" fill="#B9C5D1"/>
-<path d="M135.16,24.93c0,0-1.423-2.644,3.66-0.204c0,0,9.148-1.829,9.25,0.306s-7.404-0.568-6.607,1.423 C141.665,26.963,136.583,25.946,135.16,24.93z" fill="#B9C5D1"/>
-<path d="M117.574,21.677c0,0,7.116-2.644,8.539-1.22c1.423,1.423-3.146,5.168-8.892,1.313" fill="#B9C5D1"/>
-<path d="M134.245,26.657c0,0,5.489,0.306,2.745,0.61S133.737,28.792,134.245,26.657z" fill="#B9C5D1"/>
-<path d="M149.086,23.913c0,0,12.91-0.102,12.199,1.017c-0.712,1.118,8.132,1.728,10.877,1.22 c2.744-0.508,7.929-0.915,7.624,0.203c-0.305,1.118-13.825,2.033-16.976,1.729c-3.151-0.306-6.709-0.509-6.607-1.322 s-5.794-1.321-6.709-2.033C148.578,24.015,148.171,24.116,149.086,23.913z" fill="#B9C5D1"/>
-<path d="M170.484,121.421c0,0,4.432-3.952,8.827-1.33c0,0,3.103,0.037,3.546,0.924 c0.443,0.887,2.29,1.81,2.955,1.957c0.665,0.148,2.474,0.85,2.807,1.256s-0.369,0.85-1.292,0.85s-4.247,0.517-4.395,0 c-0.148-0.518,0.775-0.369,0.665-0.887c-0.11-0.517-0.332-0.887-0.997-1.107c-0.665-0.222-1.81-0.813-3.509-0.998 c-1.699-0.184-4.284,0.443-5.318,0.037s-0.739-0.887-1.256-0.775c-0.517,0.111-2.104,0.738-2.253,0.332 C170.115,121.272,170.484,121.421,170.484,121.421z" fill="#B9C5D1"/>
-<path d="M190.392,125.653c0,0,1.034-0.688,2.622-0.207c1.588,0.48,2.433-0.191,3.029,0.037s2.283,0.051,1.78,0.524 c-0.503,0.474-0.856,0.621-0.487,0.769c0.37,0.147,1.884-0.775,1.81,0.332c-0.073,1.108-0.184,1.319-0.738,0.997 s-1.446-0.541-2.034-0.233s-1.253-0.542-1.696,0.049s-1.071,2.622-1.478,0.296c0,0-5.096,0.221-4.727-0.332 c0.369-0.555,2.917-0.961,3.989-0.407C192.46,127.478,189.949,126.782,190.392,125.653z" fill="#B9C5D1"/>
-<path d="M181.786,127.552c0,0,4.765,0.259,3.73,0.775C184.482,128.845,180.42,129.14,181.786,127.552z" fill="#B9C5D1"/>
-<path d="M201.316,127.961c0,0,2.501-1.193,3.138,0.029C205.091,129.214,200.126,128.998,201.316,127.961z" fill="#B9C5D1"/>
-<path d="M180.014,111.966c0,0,5.008,0.671,3.796,1.998c0,0-0.251,0.439-0.583-0.188S179.09,112.113,180.014,111.966 z" fill="#B9C5D1"/>
-<path d="M181.797,115.641c0,0-0.769,1.89,0.257,1.637C183.079,117.025,183.174,116.286,181.797,115.641z" fill="#B9C5D1"/>
-<path d="M186.218,116.693c0,0,1.145,0.369,0.591,0.591C186.255,117.506,186.145,117.358,186.218,116.693z" fill="#B9C5D1"/>
-<path d="M184.741,120.017c0,0,2.186,0.348,1.684,1.078C185.923,121.827,184.334,120.645,184.741,120.017z" fill="#B9C5D1"/>
-<path d="M190.65,120.497c0,0,1.107-0.406,1.145,0.369C191.795,120.866,190.835,121.532,190.65,120.497z" fill="#B9C5D1"/>
-<path d="M189.8,123.078c0,0,1.146-1.103,1.257-0.66C191.167,122.861,191.387,123.664,189.8,123.078z" fill="#B9C5D1"/>
-<path d="M183.67,119.205c0,0,1.553,0.784,1.423-0.31C185.093,118.896,183.744,118.467,183.67,119.205z" fill="#B9C5D1"/>
-<path d="M188.767,119.943c0,0,0.032,0.678,0.293,0.856C189.32,120.978,190.17,119.5,188.767,119.943z" fill="#B9C5D1"/>
-<path d="M192.494,121.51c0,0,0.962,0.978,1.184,0.739C193.9,122.012,193.709,120.859,192.494,121.51z" fill="#B9C5D1"/>
-<path d="M214.815,136.514c0,0-0.602,1.307,0.47,0.789C216.356,136.785,215.084,136.869,214.815,136.514z" fill="#B9C5D1"/>
-<path d="M211.444,131.984c0,0-0.997-1.034,0.702-0.739C212.146,131.245,212.33,132.021,211.444,131.984z" fill="#B9C5D1"/>
-<path d="M211.796,133.406c0,0-0.573-0.609,0.202-0.757C211.998,132.649,212.775,133.24,211.796,133.406z" fill="#B9C5D1"/>
-<path d="M211.791,134.057c0,0,0.142,1.485,0.571,1.474S214.098,134.14,211.791,134.057z" fill="#B9C5D1"/>
-<g>
-<path d="M40.308,56.611c0,0-4.857,3.909-9.003,5.094s-6.752,4.62,1.659,1.304 c8.41-3.317,10.661-3.317,10.898-4.502s6.042-5.212,7.226-4.383s6.634-2.132,9.121-1.185c2.488,0.947,4.502,1.185,7.108,1.303 c2.606,0.119,11.846,3.554,14.333,6.278c0,0-1.185-0.474-0.119-2.369c1.066-1.895,2.725-0.592,2.132,0.119 c-0.592,0.71-2.487,1.065-1.066,1.658c1.421,0.592,5.804,2.843,6.042,4.501c0.237,1.659,4.027,4.146,4.856,4.976 s1.777,1.066,1.777,1.066s-3.554-0.119-2.843,0.592c0.71,0.711,7.463,3.08,8.884,3.08s0.474,0,0.474,0s-0.829,6.516-2.014,9.121 c-1.185,2.606,2.606,10.188,5.331,13.387c2.724,3.198,5.804,3.554,7.344,6.159c1.54,2.606,5.804,6.989,5.094,7.463 c-0.711,0.474,6.278,6.16,6.989,8.529c0.711,2.369,2.014,1.303,2.014,0.237c0-1.066-4.501-8.056-6.989-9.951 s-3.554-3.909-2.725-4.501c0.83-0.593,4.265,2.605,4.265,3.672s2.488,1.896,3.672,3.554s2.014,2.014,4.383,4.502 c2.369,2.487,4.738,4.501,4.265,6.396s1.066,2.843,2.606,4.027s2.369,1.304,3.672,2.014c0,0,9.003,5.213,11.017,3.909 c2.014-1.303,8.055,3.08,9.477,3.436c1.422,0.355,3.791,0.355,5.449,2.014s5.567,4.383,6.516,6.397 c0.947,2.014,5.804,4.146,5.923,2.724c0.118-1.421,2.132-3.908,2.843-2.369c0.711,1.54,3.672,2.488,2.843,5.805 c-0.829,3.317-1.895,7.463-2.961,7.7c-1.066,0.236-8.411,7.107,3.672,24.521c0,0,10.306,6.278,11.728,11.609 s-1.54,14.097-2.251,17.888c-0.71,3.79-4.146,13.741-3.554,17.058c0.593,3.317-1.303,6.516-1.658,7.227 c0,0,1.54-1.659,2.014-1.066c0.474,0.592-1.066,4.62-2.725,7.345c-1.658,2.724-1.54,15.044,12.794,15.518 c0,0,4.501-0.118,4.62-0.829c0,0-6.515,0.947-7.226-6.516c0,0,6.871-5.686,6.16-6.87c-0.711-1.185-3.08,0.118-3.317-1.54 s4.62-2.962,4.857-6.16c0.237-3.198-0.355-3.554-0.355-3.554s6.634,1.304,5.331-3.198c0,0,13.031,3.554,9.358-5.805 c0,0,2.606-0.829,5.212-2.961c2.606-2.133,9.714-7.463,9.24-13.149c0,0,1.185-4.265,6.752-5.449c0,0,4.264-0.592,4.62-1.303 s4.265-3.08,4.383-5.805c0.118-2.725,0.355-9.714,2.25-12.438s6.989-6.988,5.923-11.017c-1.066-4.027-2.487-2.487-3.909-3.08 c-1.421-0.592-6.87-3.435-8.647-3.554c-1.777-0.118-9.595-4.027-11.372-3.554c-1.777,0.475,1.777-5.804-4.146-5.804 c0,0-4.383-6.516-9.951-6.871c-5.567-0.355-7.818-6.16-8.292-7.581c-0.474-1.422-6.989,0.355-7.818,0.71 c-0.829,0.355-2.843,0.355-4.265-0.71c-1.421-1.066-3.316-3.198-4.027-2.606c-0.711,0.593-2.606-1.54-4.738,0.118 c-2.132,1.659-5.923,0.829-5.449,2.488c0.474,1.658-1.066,4.027-1.658,3.909c-0.593-0.119-1.896-1.896-2.843-1.896 s-6.871,1.776-7.818-0.118c-0.948-1.896-2.014-3.791-1.066-10.543c0,0-9.358,0.947-9.24-0.948 c0.118-1.896,2.843-5.449,2.724-8.766c-0.118-3.317-5.449,0.829-6.515,2.961c0,0-5.212,5.094-8.766,0.83 c-3.554-4.265-10.188-30.207,21.796-18.48c0,0,5.923,5.924,3.317,7.227c0,0-1.54,1.421,0.829,0.947c0,0,1.895,1.304,0.237-7.699 c0,0-2.369-3.317,0.711-5.213s12.438-3.909,8.411-8.884c0,0,2.014-5.805,7.818-6.634c5.805-0.829,1.896-1.304,1.54-4.265 c0,0,9.122-4.976,9.003-3.554c0,0-3.435,4.856,1.777,2.369c5.212-2.487,7.107-2.606,8.766-3.673c0,0-0.592-2.605-4.146-0.118 c0,0-23.455-8.884,7.344-9.121c0,0,9.832-0.947-5.094-9.121c0,0-6.634-6.278-6.752-8.411c0,0-6.989,8.647-8.647,3.08 s-15.518-7.937-15.874-6.041s4.383,6.989,2.725,10.068c-1.659,3.08-3.554,12.557-6.397,9.596 c-2.843-2.962-1.54-6.989-14.097-8.767c-12.557-1.776-14.097-6.159-9.24-8.884s11.553-6.588,13.29-8.077 c0,0-0.95-0.524-0.59-0.918c0.36-0.393,3.899,0.754,4.718,0.622c0.819-0.13,4.652-0.948,2.981-2.914s1.409-1.048,1.311-1.604 c-0.099-0.558-2.981-0.655-2.031-1.475s4.783,0.754,4.881-0.131s-2.719-0.394-2.064-0.819s3.21,0.426,3.473,0.196 c0.262-0.229-1.54-0.688-0.688-0.786c0.852-0.098,1.965-0.164,2.555,0.524s5.013,1.441,3.571,1.77 c-1.441,0.327-1.867,0.917-1.081,0.851c0.787-0.064,2.981-0.982,2.556-0.393s-0.328,1.311,1.278,0.786 c1.605-0.523,3.604,1.18,3.407,1.9c-0.196,0.721-3.702,2.097-3.734,2.392c-0.033,0.295,1.9,0.327,1.343,0.622 c-0.557,0.295-4.718,0.885-5.897,0.328c-1.179-0.558-2.555,1.343-1.54,1.867s8.027-0.95,10.025,1.311c0,0,1.048-0.229,1.441,0.032 c0.393,0.263-0.95,0.426-0.557,0.787c0.393,0.359,3.276,0.982,3.604,0.688c0,0,7.043,2.392,6.847,1.572 c-0.196-0.818-4.882-2.719-5.832-3.047c0,0,1.704-0.098,2.195,0.263c0.491,0.36,6.454,2.162,6.355,1.769 c-0.098-0.393-2.654-0.459-1.966-1.016s1.868-0.327,1.9-0.688s-2.654-1.081-2.228-1.311c0.426-0.229-0.229-1.213-0.59-1.016 c-0.36,0.196-4.849-2.031-3.374-2.687c1.474-0.655,3.768,0.819,4.226,0.491c0.458-0.327,2.162-1.18,1.671-0.688 c-0.492,0.491-0.099,2.687,0,2.326c0.098-0.36,2.457,1.048,1.965,0.098c-0.491-0.95,0.721-2.391,2.687-2.521 s-0.721-1.18-1.311-0.885c-0.589,0.295-0.852-0.196-0.917-0.688c-0.065-0.492-2.162-0.394-2.654-0.688 c-0.491-0.295-6.257-1.049-5.995-1.638c0.262-0.59,2.654-0.786,2.522-1.18c-0.131-0.393-3.538-0.164-2.981-0.557 c0.557-0.393,2.162,0.458,2.195-0.263s-10.124-3.439-11.696-3.112c0,0-12.351-0.556-12.351-1.277c0-0.721-0.033-1.016-1.212-1.835 c-1.18-0.819-6.618-0.753-7.044-0.458c-0.426,0.294,0.066,1.245,0.098,1.998c0.033,0.753,1.999,0.885,0.852,1.408 c-1.147,0.525-4.849-0.621-3.244-2.194c1.605-1.573,2.359-1.441,1.704-1.835c-0.655-0.394-9.239-0.786-7.831,4.488 c0,0,3.866-0.196,3.669,0.36c-0.196,0.558-2.883-0.36-2.817,0.263c0.065,0.622,11.925,1.311,11.663,1.9 c-0.262,0.589-4.521-0.099-4.783,0.327s-1.605,6.323-4.75,2.72c-3.145-3.604-8.125-6.127-9.992-6.487c0,0,8.583-3.112,6.749-3.604 c-1.834-0.491-9.435-1.016-9.599-0.557c-0.164,0.458,0.753,3.078,0.229,3.865c-0.524,0.787-3.735,2.293-1.082,3.964 c0,0-5.929,0.557-6.323,1.016c-0.393,0.459,1.769,0.557,1.212,1.475c-0.557,0.917-10.418-0.263-8.125-0.557 c2.293-0.295,5.962-2.064,4.586-2.688c-1.361-0.615-10.293-7.102-13.464-4.634c-0.034,0.025-0.066,0.053-0.099,0.081 c0,0-26.799-4.063-28.699-3.112c-1.9,0.949,0.229,1.441,0.459,1.475c0,0-4.292,5.798,5.11,4.389c0,0,3.997-2.588,4.652-2.489 c0,0,0.229,4.161,2.162,4.128c0,0-0.229,2.129,6.847,2.293c0,0,0.852,1.803,4.652,1.245c0,0,6.684,1.213-5.438,0.983 c0,0-14.579-4.292-15.988-3.539c-1.409,0.754-2.228,1.18-2.031,0.328c0.196-0.852-1.212,0.491-2.687,0.065 c-1.475-0.426-14.48-1.999-20.017,0.95c0,0-14.939-1.409-16.02-1.835c-1.082-0.426-8.715-0.36-12.023-1.966 c-3.309-1.604-5.537-0.688-6.225-0.557c-0.688,0.131-4.456,0.688-5.701,0.95c-1.245,0.262-4.259,0.295-5.373,1.016 c-1.114,0.721-0.59,2.162-2.522,2.261c-1.934,0.098-5.635,0.786-0.558,2.85c0,0,8.944,3.375,1.573,2.49 c0,0-8.583-0.622-8.256,0.426s2.097,0.491,2.392,1.277c0.295,0.786-3.473,1.999,9.599,0.819c0,0,1.867,0.852,0.623,1.376 c-1.245,0.524-3.702-0.328-5.832,0.229c-2.129,0.557-5.832,3.637-2.326,4.619c0,0,0.125,1.294,0.655,1.9 c0.229,0.262,2.949,1.638,3.506,1.474c0.557-0.163,2.391-0.818,2.162,0.688c-0.229,1.507,3.538,1.966,5.078,0.852 C39.494,55.59,40.368,54.489,40.308,56.611z" fill="#B9C5D1"/>
-<path d="M159.149,15.171c0,0,11.081-1.017,15.248-0.509c4.168,0.509,27.04-3.66,34.563-0.915 c0,0-4.676,1.524-10.166,2.236c-5.489,0.712-9.25,5.998-13.723,5.896c-4.473-0.102-3.151,2.949-5.693,2.949 c-2.541,0-18.5,1.117-17.078-0.61c1.423-1.729,2.948-0.407,2.948-1.017c0-0.61-3.151-1.83,3.151-0.61c0,0,1.729-1.423,0.712-1.22 s-4.676-0.61,1.017-1.22l1.016-0.508c0,0-1.423-0.712-3.558-1.119c-2.135-0.406,1.22-1.524,5.998-0.203 c0,0,10.978-1.017,11.385-1.524c0.406-0.509-8.539-0.406-16.976-0.102S157.93,16.085,159.149,15.171z" fill="#B9C5D1"/>
-<path d="M150.204,17.61c0,0,2.745-2.236,5.998-1.424c3.253,0.813,10.775,1.932,9.962,2.948 c-0.813,1.017-2.338,3.558-7.827,2.236C152.847,20.05,147.561,19.947,150.204,17.61z" fill="#B9C5D1"/>
-<path d="M133.025,19.847c0,0,9.657-0.102,10.877,0.406c1.22,0.509,2.948,2.542-2.033,2.033 C136.888,21.778,132.923,22.49,133.025,19.847z" fill="#B9C5D1"/>
-<path d="M102.021,24.93c0,0,14.028-3.66,13.926-2.644s-1.321,2.136-0.102,1.83c1.22-0.305,5.083,1.525,7.624,1.829 c2.542,0.306,1.728,0.204,1.728,0.204l-1.22-1.83c0,0,15.147,0.712,8.335,2.948C125.503,29.504,110.865,28.895,102.021,24.93z" fill="#B9C5D1"/>
-<path d="M146.443,20.66c0,0,6.099-0.407,5.692,0.508c-0.406,0.915-3.253,2.135-4.473,1.118 C146.443,21.271,146.443,20.66,146.443,20.66z" fill="#B9C5D1"/>
-<path d="M198.656,19.697c0,0-9.128,3.923,10.009,6.966c19.137,3.043,14.493,7.848,14.573,9.449 c0.08,1.601,7.687,22.019,13.933,18.176c6.246-3.844,3.924-9.368,10.57-10.489c6.646-1.121,36.913-11.771,21.779-12.892 c0,0-2.242-3.284,8.968-1.682c11.21,1.601,9.449-14.733,3.363-12.571c-6.085,2.161-7.607,1.44-9.048,1.361 c-1.441-0.081,6.406-2.322-0.08-4.164s-36.753,0.16-44.2,0.881C221.076,15.453,200.898,14.813,198.656,19.697z" fill="#B9C5D1"/>
-</g>
-<path d="M283.082,44.222c0,0-1.632-1.605-3.125-1.38c-1.492,0.225,0.777,1.083,0.92,1.41 c0.144,0.327-2.003,0.92-1.656,1.206c0.348,0.286,2.78,0.47,2.351,0.776s-1.717,0.94-1.083,1.104 c0.634,0.163,8.473-0.249,10.093-0.513c1.62-0.265,6.853-0.775,5.892-1.88c-0.96-1.104-6.807-2.125-8.524-1.88 S283.222,43.599,283.082,44.222z" fill="#B9C5D1"/>
-<path d="M562.112,186.847c-0.557-0.102,7.599,8.084,8.974,4.932c1.375-3.153,1.375-3.315,1.132-5.417 c-0.242-2.102,1.698-8.327,2.264-6.549c0.566,1.779,9.782,17.867,15.038,22.799s-0.937,31.177-12.693,26.437 s-8.57-9.943-11.965-9.459c-3.396,0.485-1.05,4.123-7.114-1.698c-6.063-5.82-26.518,8.732-31.126,4.205 c-4.608-4.527,0.565-5.256-1.94-11.076c-2.506-5.821,4.042-18.191,15.846-21.505c11.804-3.315,11.076-4.365,11.804-6.387 s2.263,0.08,2.344-1.132c0.081-1.213-4.689,0.242-3.557-1.132c1.132-1.375,9.459,0.646,11.885-0.809 C565.427,178.601,563.891,187.17,562.112,186.847z" fill="#B9C5D1"/>
-<path d="M583.698,231.635c0,0-2.991,1.375-5.417,0.647C575.856,231.554,586.447,244.732,583.698,231.635z" fill="#B9C5D1"/>
-<path d="M535.96,115.62c0,0-3.599,4.934-1.497,5.499C536.565,121.686,538.347,116.023,535.96,115.62z" fill="#B9C5D1"/>
-<path d="M534.787,127.264c0.221,1.992,0.342,3.314-1.27,4.493c-1.222,0.894,1.599,2.272,1.891,2.827 c0.734,1.396,3.084,2.912,5.07,3.038c2.175,0.138-0.885-2.224-1.333-2.537c-1.58-1.107-2.955-1.292-1.991-3.327 c0.563-1.188,1.33-2.084,0.847-3.46C537.514,126.917,535.828,125.442,534.787,127.264" fill="#B9C5D1"/>
-<path d="M528.562,147.637c0,0-0.404,3.558-3.072,4.204c-2.668,0.646-3.557,3.962-6.953,3.072 c-3.396-0.889,0.081,4.204-1.293,3.477c-1.374-0.728-2.736-2.489-3.309-1.042c-0.572,1.446,0.316,8.479,5.087,8.722 c4.771,0.243,8.247,3.315,8.408,0.971c0.162-2.345,1.391-5.994,3.202-7.444c1.811-1.449-0.049-3.308-0.21-5.814 C530.259,151.274,535.029,147.879,528.562,147.637z" fill="#B9C5D1"/>
-<path d="M552.088,162.431c0,0,6.306-3.477,8.569,3.638c0,0,0.485,0.728,1.455-0.404s-0.323-5.013,11.237,0 c11.561,5.013,6.306,4.285,7.6,4.527c1.294,0.243,2.83,0.89,2.587,1.778c-0.242,0.89-1.131-0.081-0.97,1.213 s0.154,1.227,1.451,2.473s4.866,2.005,4.618,2.96c-0.249,0.954-5.453,0.593-5.746-0.178c-0.293-0.77-0.647-1.94-2.183-2.91 c-1.536-0.97-2.344-2.021-3.719-1.051c-1.375,0.97-4.285,3.8-5.578,2.668s-2.991-2.91-3.234-2.507 c-0.242,0.404-5.255,3.801-2.102-2.829s-1.867-3.028-3.884-3.374c-2.018-0.345-3.796,0.787-5.089-0.669 c-1.294-1.455-0.162-1.455-0.324-2.587C556.615,164.047,551.118,164.29,552.088,162.431z" fill="#B9C5D1"/>
-<path d="M214.875,251.454c0,0-2.512-0.439-2.605,1.263s1.612,1.856,1.923,1.082 C214.502,253.023,216.022,251.746,214.875,251.454z" fill="#B9C5D1"/>
-<path d="M216.69,252.401c0,0-2.653,1.707-0.482,1.707s4.651-0.775,3.566-1.24S216.69,252.401,216.69,252.401z" fill="#B9C5D1"/>
-<path d="M253.833,255.952c0,0,4.605,3.951,4.5,2.604C258.228,257.21,256.881,255.16,253.833,255.952z" fill="#B9C5D1"/>
-<path d="M306.912,62.212c0,0-1.774,0.913-1.623,1.039c0.152,0.127,0.913,0.229,0.608,0.355 c-0.304,0.127-0.051,0.405-0.634,0.583s-0.608-0.381-1.395-0.278c-0.786,0.101-1.651,0.575-1.13,0.592 c0.521,0.016,1.054,0.017,0.725,0.346c-0.33,0.33-0.735,0.076-0.71,0.38c0.025,0.305,0.05,0.711,0.634,0.634 c0.583-0.075,1.414-0.561,1.404-0.255s-0.035,0.18-0.314,0.483c-0.278,0.305-0.974,1.3-1.146,1.411 c-0.172,0.11-0.78-0.498-0.882,0.034s0.558,1.42,1.318,1.395c0.76-0.025,2.966-1.166,3.879-1.142 c0.913,0.025,1.521,0.33,1.876-0.126c0.355-0.457,0.913-0.38,0.608-1.242s-0.659-1.547-0.38-1.876 c0.279-0.33,1.825-0.457,1.623-0.736c-0.203-0.278-0.836-0.837-1.293-1.318c0,0-0.203-0.025-0.761,0.152s-0.406,0.405-0.812-0.051 c-0.405-0.456-0.496-0.75-0.717-0.654C307.571,62.034,306.912,62.212,306.912,62.212z" fill="#B9C5D1"/>
-<path d="M309.844,56.414c0,0-1.056,0.753-1.715,1.184s-0.959,1.833-0.771,1.854c0.188,0.022,1.43-1.474,1.988-1.956 C309.903,57.015,310.267,55.991,309.844,56.414z" fill="#B9C5D1"/>
-<path d="M308.463,50.455c0,0,0.184-0.372-0.316-0.354c-0.5,0.019-0.753-0.413-0.323-0.489 c0.431-0.075,1.953-0.152,1.623,0c-0.33,0.152-0.418,0.621-0.59,0.806C308.687,50.601,308.746,50.666,308.463,50.455z" fill="#B9C5D1"/>
-<path d="M308.305,50.93c0,0,1.301,0.419,0.829,0.552S308.152,51.132,308.305,50.93z" fill="#B9C5D1"/>
-<path d="M309.489,59.334c0,0-1.69,0.85-1.259,0.824s0.507-0.354,1.014-0.126c0.507,0.228,2.039,0.069,1.666,0.288 c-0.373,0.218-1.26,0.776-0.652,0.903c0.608,0.126,2.028-0.102,2.307,0.354s-1.191,1.344-0.837,1.496 c0.355,0.151,2.282,0.431,2.814,0c0,0-0.158-0.073-0.041,0.521c0.117,0.594,1.229,0.094,1.066,0.749 c-0.163,0.656-0.163,1.366-0.67,1.315c-0.507-0.051-1.978-0.152-2.104,0.279c-0.126,0.431-0.938,0.836-0.532,0.861 s0.735-0.634,1.141-0.178c0.406,0.457,0.837,0.532,0.355,0.913c-0.481,0.38-2.738,0.608-2.408,0.862 c0.33,0.254,1.014-0.406,1.318-0.051c0.304,0.354,0.649,0.504,1.085,0.416c0.436-0.087,1.577,0.269,1.272,0.547 c-0.304,0.279-1.8,0.305-2.155,0.635c-0.355,0.329-2.003,1.141-2.003,1.394c0,0.254,0.482,0.634,1.8-0.203 c0,0,1.521,0.685,2.104-0.785c0,0,1.054,0.438,1.744,0.308s2.788,0.215,4.224-0.236c1.436-0.452,2.931-0.554,2.678-1.01 s-1.474,0.2-1.257-0.293s4.147-1.532,0.826-2.698c0,0-1.352,0.266-1.576,0.094c-0.224-0.17,0.69,0.162,0.474-0.473 c-0.216-0.636-2.042-2.512-3.334-2.664c0,0-0.397-1.684-0.731-1.716c-0.333-0.033-2.134-0.261-2.919-0.616 c0,0,1.044,0.022,1.144-0.331c0.099-0.354-0.18-0.683,0.2-0.76c0.38-0.075,1.737-1.824,1.3-2.002 c-0.438-0.178-3.708,0.734-3.759,0.051c-0.051-0.686,0.025-0.938,0.406-0.938s1.623-0.558,1.268-0.634s-2.814,0.456-3.169,0 c-0.355-0.457-1.09,0.229-1.065,0.558s0.507,0.735,0.203,0.735c-0.305,0-0.355-0.253-0.583-0.051 c-0.229,0.203-0.102,0.761-0.305,0.786c-0.203,0.024-1.851-0.278-1.572,0.051s1.503,0.046,1.55,0.429 c0.047,0.382-0.333,0.696-0.562,0.763C309.726,59.768,309.607,59.548,309.489,59.334z" fill="#B9C5D1"/>
-<path d="M315.528,56.098c-0.103-0.005-1.166-0.173-0.632-0.591c0.534-0.419,0.939-0.495,1.167-0.495 s0.938-0.304,0.583,0C316.292,55.316,315.905,56.12,315.528,56.098z" fill="#B9C5D1"/>
-<path d="M318.447,53.998c0,0,0.253-0.38,0-0.482c-0.253-0.102-0.634-0.38,0.229-0.785 c0.861-0.406,0.811-0.33,0.633-0.152C319.132,52.755,318.701,54.581,318.447,53.998z" fill="#B9C5D1"/>
-<path d="M344.56,18.501c0,0-5.292-0.083-4.673,0.653c0.619,0.737,2.009,0.234,1.932,1.046 c-0.077,0.811,1.468,0.733,1.931,1.004c0.464,0.271,3.083-0.082,3.705-0.408c0.621-0.325,3.468-0.287,2.933,0.177 c-0.536,0.463-4.667,0.733-4.281,1.081s4.942-0.193,4.209,0.192c-0.734,0.387-4.595-0.076-4.441,0.503 c0.154,0.578,3.321,1.969,4.093,1.776c0.772-0.193,1.39-0.734,2.201-1.43c0.811-0.694,1.236-1.66,1.429-1.429 c0.193,0.232,1.313,0.811,1.352-0.154s3.9-1.313,2.355-1.583s-2.279,0.772-2.819,0.116c-0.541-0.656,0.309-1.313-0.386-1.043 c-0.695,0.271-1.352,0.85-1.583,0.348s-0.811-0.579-1.776-0.889c-0.966-0.309-1.192,1.01-1.291,1.162 c-0.099,0.151-0.64,0.729-0.872,0.229c-0.231-0.502-1.197-1.235-1.738-1.159c-0.541,0.078-0.579,1.12-1.39,0.85 C344.638,19.273,344.792,18.732,344.56,18.501z" fill="#B9C5D1"/>
-<path d="M353.441,18.037c1.494-0.548,7.125-0.038,7.269,0.238c0.704,0.309,2.674-0.432,3.621-0.306 c1.157,0.153,3.625-0.269,4.494,0.647c-0.566-0.597-5.609,1.28-6.695,1.196c-1.497-0.113-4.083-0.776-3.496-1.004 C357.99,19.059,353.1,18.893,353.441,18.037" fill="#B9C5D1"/>
-<path d="M357.777,21.91c0,0,6.902,0.027,6.516,0.298s-1.39,0.927-2.819,0.772S356.783,22.578,357.777,21.91z" fill="#B9C5D1"/>
-<path d="M337.475,84.103c-0.037,0.054,0.058,0.652-0.333,0.652c-0.392,0-1.146,0.276-1.131,0.639 c0.015,0.363,1.016,1.842,1.248,1.436c0.232-0.405,0.435-0.957,0.362-1.392C337.547,85.002,337.678,83.813,337.475,84.103z" fill="#B9C5D1"/>
-<path d="M336.938,87.322c0,0-0.319,0.624-0.783,0.537c-0.464-0.087-0.609-0.56-0.74-0.377 c-0.131,0.183-0.363,0.362-0.029,0.725c0.334,0.362,0.435,0.465,0.363,0.885c-0.073,0.421-0.348,0.406-0.16,0.421 s0.333-0.203,0.261,0.188c-0.073,0.392-0.368,1.014-0.329,1.159c0.039,0.146,0.271,0.872,1.315,0.437c0,0-0.232-0.464,0.014-0.464 c0.247,0,0.827,0.305,0.958,0.116s0.653-1.509,0.392-1.741c-0.262-0.232-0.413-0.224-0.41-0.301 c0.003-0.076,0.496-0.047,0.424-0.352s-0.218-0.449-0.377-0.74c-0.159-0.29,0.045-0.636-0.224-0.644 C337.344,87.163,337.054,87.148,336.938,87.322z" fill="#B9C5D1"/>
-<path d="M343.625,92.806c0,0,0.203-0.435,0.565-0.319c0.363,0.116,1.712,0.682,2.466,0.291 c0.754-0.393,1.64-0.001,1.813-0.378c0,0-0.508,0.754-0.696,1.189c-0.189,0.436,0.45,1.131,0.246,1.204 c-0.203,0.072,0.058-0.072-0.29,0.203c-0.348,0.275-0.986,0.275-1.276-0.102s-1.233-0.624-1.45-0.639 c-0.218-0.014-1.625-0.087-1.929-0.58S342.566,92.53,343.625,92.806z" fill="#B9C5D1"/>
-<path d="M346.257,96.346c0,0-0.368-0.142-0.296-0.021c0.072,0.122-0.016,0.383,0.057,0.455 c0.073,0.073,0.79,0.197,0.772,0.019C346.79,96.799,346.337,96.345,346.257,96.346z" fill="#B9C5D1"/>
-<path d="M419.699,32.486c0,0,3.745,1.296,3.411,2.227c-0.334,0.93,0.376,1.955-1.438,1.088 c-1.814-0.868-3.604-0.924-4.576-0.947s-0.71-0.71-1.42-1.025c-0.71-0.315-4.576,0-3.866-0.867c0.71-0.868,2.13-0.474,2.367-1.421 c0.237-0.946,4.369-1.075,3.959-1.8c-0.409-0.724-1.302-0.592-1.302-0.592s2.387-0.578,3.967-1.42 c1.581-0.843,3.158-0.843,4.657-1.474c1.5-0.631,2.604-1.578,3.393-1.578s8.521,0.395,9.072-0.236 c0.552-0.631,5.91-0.678,5.2-0.145c-0.71,0.532-0.957,0.999-2.25,1.124c-1.293,0.125-3.345-0.033-4.528,0.125 c-1.183,0.158-7.257,0.553-7.889,1.184c-0.631,0.631-1.856,1.33-5.464,2.006c0,0,0.729,0.902,0.059,1.539 C422.381,30.909,419.62,32.25,419.699,32.486z" fill="#B9C5D1"/>
-<path d="M455.91,18.451c0,0-2.388-0.117-0.997,0.293c1.39,0.41,4.545,1.515,3.757,0.726 C457.881,18.682,455.91,18.451,455.91,18.451z" fill="#B9C5D1"/>
-<path d="M481.895,16.223c0,0-2.662-0.249-1.584,0c1.079,0.25,2.35,1.24,2.464,0.47 C482.888,15.921,481.895,16.223,481.895,16.223z" fill="#B9C5D1"/>
-<path d="M461.541,16.574c0,0-1.53,0.608-0.347,0.608s2.407,0.628,1.637-0.08 C462.062,16.394,461.541,16.574,461.541,16.574z" fill="#B9C5D1"/>
-<path d="M407.479,36.725c0,0-2.69,2.152-0.954,2.152c1.735,0,4.396-0.834,3.5-1.206 C409.127,37.299,407.479,36.725,407.479,36.725z" fill="#B9C5D1"/>
-<path d="M402.58,16.788c0,0-2.236-0.239-1.749,0.314c0.486,0.554,1.828,0.396,2.143,0.316 c0.316-0.078,1.42-0.552,1.42-0.552L402.58,16.788z" fill="#B9C5D1"/>
-<path d="M408.163,16.75c0,0-2.428,0.985-3.453,0.906c0,0,0.71,0.158,1.894,0.158c1.183,0,6.447,0.27,5.314-0.536 s-2.001-0.568-2.001-0.568L408.163,16.75z" fill="#B9C5D1"/>
-<path d="M409.63,18.334c0,0,1.768-0.549,2.053,0.176S410.29,18.38,409.63,18.334z" fill="#B9C5D1"/>
-<path d="M413.325,17.923c0,0,2.697-0.05,2.287,0.117C415.202,18.209,414.524,19.137,413.325,17.923z" fill="#B9C5D1"/>
-<path d="M417.806,16.315c0,0,8.44-0.079,7.415,0.315S419.147,18.604,417.806,16.315z" fill="#B9C5D1"/>
-<path d="M427.926,17.09c0,0-2.358,0.39-0.913,0.497c1.446,0.108,4.763,0.521,3.826-0.084 C429.901,16.899,427.926,17.09,427.926,17.09z" fill="#B9C5D1"/>
-<path d="M431.929,15.25c0,0-1.367,0.917-0.21,0.667c1.156-0.25,2.484,0.105,1.583-0.425 C432.399,14.962,431.929,15.25,431.929,15.25z" fill="#B9C5D1"/>
-<path d="M420.418,15.56c0,0-1.382,0.895-0.222,0.664c1.16-0.231,2.483,0.146,1.59-0.398 C420.894,15.28,420.418,15.56,420.418,15.56z" fill="#B9C5D1"/>
-<path d="M420.267,17.733c0,0-1.382,0.895-0.221,0.664c1.16-0.231,2.482,0.146,1.59-0.398 C420.742,17.454,420.267,17.733,420.267,17.733z" fill="#B9C5D1"/>
-<path d="M433.294,16.788c0,0-2.358,0.39-0.913,0.497s4.763,0.521,3.826-0.084S433.294,16.788,433.294,16.788z" fill="#B9C5D1"/>
-<path d="M221.743,69.603c-0.206,0.06-7.688,5.594-6.471,6.178c1.216,0.584,7.203-0.925,7.543-0.194 c0.341,0.729,3.456,3.114,4.088,1.752c0.633-1.363,1.217-2.775-1.266-3.894C223.156,72.324,223.25,69.168,221.743,69.603z" fill="#B9C5D1"/>
-<path d="M325.676,89.565c0,0-0.941,0.499-0.596,0.634s2.571,0.212,2.036-0.115 C326.581,89.756,326.271,89.258,325.676,89.565z" fill="#B9C5D1"/>
-<path d="M327.539,89.22c0,0-0.134,0.346,0.077,0.326c0.211-0.02,0.922,0.596,0.769,0.192 C328.23,89.335,328.134,88.989,327.539,89.22z" fill="#B9C5D1"/>
-<path d="M323.486,90.91c0,0-0.903,0.537-0.422,0.519c0.48-0.02,0.912-0.114,0.754-0.331 S323.486,90.91,323.486,90.91z" fill="#B9C5D1"/>
-<path d="M489.604,16.648c-0.203,0-6.757,0.541-6.217,1.825c0.54,1.283,4.865,0.743,6.014,1.148 c1.149,0.405,2.433,0.135,4.257,0.676c1.825,0.54,6.149,1.148,4.933,0.338c-1.216-0.812,1.216-0.946-0.135-1.824 c-1.352-0.879-3.243,0.067-3.919-0.271c-0.676-0.338-1.487-0.608-1.082-0.878c0.405-0.271-0.675-1.353-1.689-1.353 S489.604,16.648,489.604,16.648z" fill="#B9C5D1"/>
-<path d="M498.117,21.717c0,0,2.028-1.718,3.075-2.211c1.047-0.492,7.601,1.062,6.655,1.399 C506.901,21.244,499.671,21.784,498.117,21.717z" fill="#B9C5D1"/>
-<path d="M509.229,21.734c0,0,3.35,0.794,3.35-0.018S511.487,21.077,509.229,21.734z" fill="#B9C5D1"/>
-<path d="M408.68,181.614c-0.117,0.105-2.102,3.679-3.469,4.835c-1.366,1.157-5.781,1.104-5.834,3.102 s0.052,1.734-0.053,1.997s1.261,3.521,0.158,4.73s-1.663,8.288,0.746,8.927s4.615,0.533,4.773-0.097 c0.158-0.631,2.891-12.51,3.732-14.244C409.573,189.131,410.677,179.828,408.68,181.614z" fill="#B9C5D1"/>
-<path d="M627.16,221.591c0,0,3.086,2.333,3.131,4.94c0.045,2.608-2.435,3.271-0.417,3.967 c2.018,0.695,1.276,1.84,1.717,2.591c0.44,0.75,1.067,1.027,3.154-1.965c2.087-2.992,2.026-2.179,2.681-2.996 s-1.637-0.205-2.75-0.553c-1.113-0.348-2.048-3.78-2.157-3.549c-0.109,0.23,0.167,1.693-0.626,1.044 C631.1,224.421,627.725,219.564,627.16,221.591z" fill="#B9C5D1"/>
-<path d="M624.446,236.413c0,0-3.967,3.062-5.01,3.062c-1.044,0-2.505,0.696-2.854,1.531 c-0.348,0.835,0.835,1.044,1.392,1.601s-0.453,1.275,0.583,1.385c1.036,0.108,0.786-1.044,1.146-1.146 c0.359-0.101,2.934,1.082,3.352,0.108c0.417-0.975,1.252-0.069,1.322-1.322c0.07-1.252-0.264-2.796,1.434-2.929 s3.816-0.272,2.781-0.6s-1.21-0.944-0.381-1.526c0.829-0.581,2.341-2.167,2.072-2.453c-0.269-0.285,0.636-2.165-0.408-1.608 s-1.531,2.088-1.879,1.323c-0.348-0.767-0.093-2.152-0.603-1.459c-0.51,0.692-0.928-0.073-1.136,1.598 C626.047,235.647,624.934,233.212,624.446,236.413z" fill="#B9C5D1"/>
-<path d="M542.483,157.373c-2.118,0.075-4.623-0.033-6.634,0.704c-1.806,0.662-5.554,7.969-3.087,8.207 c0.076,0.794-0.468,1.789-0.46,2.639c0.014,1.456,1.336,1.671,1.484,0.134c0.068-0.711-0.332-3.477,0.792-3.608 c2.536-0.298,1.273,2.582,2.108,3.646c0.295,0.376,0.856-0.96,1.108-0.498c0.1,0.182,0.199,2.167,0.65,1.93 c0.811-0.426,1.685-2.938,0.384-3.293c-0.949-0.259-0.797-1.592-1.279-2.371c-0.735-1.187-1.31-1.891,0.325-2.398 c0.149-0.046,2.302-0.527,2.112-0.737c-1.546-1.709-3.855,1.603-4.7,1.285c-1.947-0.731-0.827-3.532,1.083-3.4 c2.066,0.142,4.176,0.136,6.186-0.476C544.584,158.519,544.312,156.458,542.483,157.373" fill="#B9C5D1"/>
-<path d="M499.98,164.428c1.479,0.433,4.59,5.186,6.909,6.77c2.318,1.583,1.592-3.113,2.428-4.262 c0.835-1.148-2.25-2.604-3.02-3.492s-1.421-1.599-1.421-1.599s0.29,0.203,0.375-0.137c0.085-0.34,1.275-1.36-0.138-2.585 c-1.413-1.226-5.744-3.314-6.928-4.144s-1.945-0.667-3.476-2.367c-1.53-1.701-1.379-1.539-1.615-1.189 c-0.236,0.349-3.139-1.06-3.139-1.06c-0.759,0.641-0.006,1.823,2.19,3.492c2.197,1.668,0.864,1.816,2.224,2.327 s1.275,1.445,2.691,3.946C497.061,160.129,499.609,164.319,499.98,164.428z" fill="#B9C5D1"/>
-<path d="M508.141,172.079c0,0,0.936-2.21,6.036,0.085s2.38,0.595,2.89,0.17c0.51-0.426,5.917-0.18,6.401,0.165 c0.485,0.345-3.251,0.222-2.191,1.006s2.591,1.294,3.611,1.124c1.02-0.17,2.541,0.653,1.185,1.008 c-1.355,0.353-2.244-0.654-3.967-0.533c-1.724,0.12-9.034-2.005-10.479-1.835c-1.445,0.171-3.138,1.043-2.635,0.255 C509.494,172.735,508.821,172.164,508.141,172.079z" fill="#B9C5D1"/>
-<path d="M543.759,143.347c-0.376,0.641-1.673,3.166-2.733,2.336c-1.807-1.416-2.704,2.176-3.59,1.948 c1.421,0.368,2.659-1.326,3.362,0.776c0.123,0.366,2.337,2.625,2.563,2.311c0.271-0.468,0.283-0.938,0.036-1.408 c-0.306-1.038,1.007-1.313,1.502-1.96C545.921,146.014,544.979,144.16,543.759,143.347" fill="#B9C5D1"/>
-<path d="M442.712,248.165c0,0,3.158-1.325,3.312-0.968c0.153,0.356-0.662,1.681-1.63,1.656 C443.425,248.827,442.33,249.184,442.712,248.165z" fill="#B9C5D1"/>
-<path d="M179.63,283.455c-0.841,0.92-4.947,1.626-5.647,0.925c0.225,0.225,2.55,0.652,2.51,0.825 c-0.722,3.13,3.017,0.216,3.864,2.081C180.12,286.764,179.902,282.912,179.63,283.455" fill="#B9C5D1"/>
-<path d="M163.896,281.166c0,0-4.677,1.529-4.413,0.835C159.748,281.309,163.024,280.132,163.896,281.166z" fill="#B9C5D1"/>
-<path d="M170.883,282.468c0,0-3.175,0.029-2.878,0.261c0.297,0.23,1.685,0.792,2.411,0.23 S171.581,282.604,170.883,282.468z" fill="#B9C5D1"/>
-<path d="M183.544,285.767c0,0-1.333,1.623-0.573,1.678C183.731,287.499,184.771,287.158,183.544,285.767z" fill="#B9C5D1"/>
-<path d="M44,124.439c0,0-1.168,1.859,0.197,1.813C45.563,126.208,46.853,125.448,44,124.439z" fill="#B9C5D1"/>
-<path d="M37.408,120.943c0,0-0.438,0.696,0.074,0.68C37.994,121.605,38.477,121.321,37.408,120.943z" fill="#B9C5D1"/>
-<path d="M40.019,121.635c0,0-0.809,0.146-0.451,0.513C39.925,122.513,40.461,122.678,40.019,121.635z" fill="#B9C5D1"/>
-<path d="M41.955,122.462c0,0-0.809,0.147-0.452,0.513C41.861,123.341,42.396,123.506,41.955,122.462z" fill="#B9C5D1"/>
-<path d="M43.655,123.471c0,0-0.764-0.537-0.808-0.026C42.805,123.953,43.078,124.475,43.655,123.471z" fill="#B9C5D1"/>
-<ellipse cx="638.435" cy="68.771" fill="#B9C5D1" rx="1.08" ry="0.743"/>
-<ellipse cx="627.481" cy="66.565" fill="#B9C5D1" rx="1.08" ry="0.285"/>
-<ellipse cx="615.925" cy="63.265" fill="#B9C5D1" rx="0.794" ry="1.587" transform="matrix(0.6867 -0.727 0.727 0.6867 146.9921 467.5763)"/>
-<ellipse cx="638.183" cy="34.335" fill="#B9C5D1" rx="1.107" ry="0.506"/>
-<path d="M533.261,140.148c0,0-5.089,6.24-4.85,6.32c0.239,0.079,1.51-1.152,2.544-2.027 c1.033-0.874,0.875-1.471,1.511-2.027S534.056,140.268,533.261,140.148z" fill="#B9C5D1"/>
-<path d="M534.691,136.015c-1.008,0.518-0.068,1.657,0.604,2.266C535.499,138.465,537.489,136.868,534.691,136.015" fill="#B9C5D1"/>
-<path d="M539.335,139.828c-0.471-0.134-2.081-0.21-2.338-0.435c0.663,0.58-0.132,1.441-0.013,2.074 C537.034,141.734,539.696,140.985,539.335,139.828" fill="#B9C5D1"/>
-<path d="M539.979,141.183c-0.463,0.345-2.755,3.437-0.954,3.18C540.542,144.146,540.049,142.456,539.979,141.183" fill="#B9C5D1"/>
-<path d="M548.882,157.122c0.435-0.405,0.634-0.902,0.596-1.491c-1.292-1.292-2.562,2.299-2.281,3.063 c1.3,3.531-0.355,1.231,2.102,3.959c-0.595-1.007-1.078-2.065-1.448-3.175c0.513,0.369,1.085,0.58,1.716,0.635 C548.321,159.776,548.844,157.934,548.882,157.122" fill="#B9C5D1"/>
-<path d="M547.173,166.265c0,0,5.074-2.764,6.253,1.381c0,0-1.165-0.109-1.483-0.507s-0.875-0.437-0.994-0.437 c-0.099,0-0.736,0.188-1.025,0.011c-0.062-0.038-0.107-0.094-0.127-0.17c-0.12-0.438-0.955-0.159-1.471-0.12 C547.81,166.463,547.253,166.94,547.173,166.265z" fill="#B9C5D1"/>
-<path d="M545.67,163.621c0,0-2.992-0.285-3.185-0.285c-0.192,0-1.032,0.318-0.9,0.403 c0.131,0.085,3.048-0.122,3.077,0.263c0.03,0.386,0.467,1.474,0.637,1.281C545.469,165.091,546.367,163.832,545.67,163.621z" fill="#B9C5D1"/>
-<path d="M544.419,165.956c0.753-0.488,2.258,0.287,1.613,1.175C546.032,167.131,543.666,166.444,544.419,165.956" fill="#B9C5D1"/>
-<path d="M527.981,175.112c0,0-1.419-0.259-1.437,0.849S528.12,175.875,527.981,175.112z" fill="#B9C5D1"/>
-<path d="M542.993,175.026c0,0-7.15-0.606-8.345,0.173s-1.939,0.069-1.731,0.225 C533.124,175.58,540.17,177.779,542.993,175.026z" fill="#B9C5D1"/>
-<path d="M532.656,175.303c0,0-2.735-1.039-2.666-0.45c0.069,0.589,0.658,0.831,0.381,0.849 c-0.277,0.018-1.177-0.45-1.541-0.138c-0.364,0.312,0.364,1.315,2.631,0.605C531.542,176.144,532.519,175.647,532.656,175.303z" fill="#B9C5D1"/>
-<path d="M531.912,177c0,0,2.026,0.19,2.719,0.571c0.692,0.381,0.987,0.225,0.952,0.468 c-0.035,0.242,0.052,0.813-0.416,0.779c-0.468-0.035-0.832,0.173-1.299-0.329S531.392,177.242,531.912,177z" fill="#B9C5D1"/>
-<path d="M560.59,170.072c-1.482,0.688-2.289,1.434-1.489,3.311C560.167,173.194,562.286,170.947,560.59,170.072" fill="#B9C5D1"/>
-<path d="M542.663,176.775c-0.346,0.032-4.545,1.926-3.492,2.769c0.728,0.584,6.514-4.378,7.408-4.19 C545.249,175.074,543.051,175.196,542.663,176.775" fill="#B9C5D1"/>
-<path d="M546.006,174.23c0,0-2.07-0.947-1.896,0.05C544.284,175.278,545.606,174.331,546.006,174.23z" fill="#B9C5D1"/>
-<path d="M555.36,173.134c-1.334,0.501-1.923,1.981-1.896,1.971C554.434,174.781,555.066,174.125,555.36,173.134" fill="#B9C5D1"/>
-<path d="M587.609,164.333c0,0,1.308,0.854,2.715,2.062c1.408,1.206,2.412,3.434,2.337,2.396 C592.587,167.752,589.52,164.132,587.609,164.333z" fill="#B9C5D1"/>
-<path d="M589.899,167.883c0,0,1.029,0.874,0.526,1.126c-0.503,0.251-0.302-0.252-0.905,0.453 c-0.604,0.703-2.212-0.102-2.514,0.302c-0.302,0.401,0.252,1.256-0.804,0.955c-1.056-0.302-2.132-0.422-1.77-0.034 c0.362,0.386,1.82,1.039,2.977,0.737c1.157-0.302,4.503-1.192,3.596-3.56C591.004,167.862,590.127,167.209,589.899,167.883z" fill="#B9C5D1"/>
-<path d="M595.524,169.303c1.438,0.612-0.739,3.812,2.411,3.747C598.664,173.035,596.066,169.534,595.524,169.303" fill="#B9C5D1"/>
-<path d="M598.729,173.442c0.979,0.238,0.958,3.76,2.738,2.875C601.836,176.135,599.28,173.576,598.729,173.442" fill="#B9C5D1"/>
-<path d="M601.452,174.334c-0.66,0.032-1.303-2.185-2.257-1.296C599.71,173.776,600.462,174.208,601.452,174.334" fill="#B9C5D1"/>
-<path d="M603.887,176.293c-0.66,0.033-1.304-2.185-2.257-1.295C602.145,175.736,602.897,176.167,603.887,176.293" fill="#B9C5D1"/>
-<path d="M607.598,178c-0.053-0.709-2.071-0.864-1.726-2.023C606.088,175.254,607.602,178.063,607.598,178" fill="#B9C5D1"/>
-<path d="M591.596,179.956c0,0,1.946-0.037,2.198,0.667c0.251,0.704,0.704,0.955-0.051,0.904 C592.989,181.478,591.963,181.15,591.596,179.956z" fill="#B9C5D1"/>
-<path d="M604.955,176.953c0.582,0.571,2.048,0.282,0.949,1.59C606.228,178.157,603.138,177.99,604.955,176.953" fill="#B9C5D1"/>
-<path d="M604.653,179.869c0,0,2.313,1.156,2.163,1.257C606.665,181.226,604.804,181.579,604.653,179.869z" fill="#B9C5D1"/>
-<path d="M606.739,179.456c0.876,0.363,1.68,0.275,2.435,0.996C608.438,180.526,607.096,180.233,606.739,179.456" fill="#B9C5D1"/>
-<path d="M611.341,195.104c0,0,7.85,5.715,7.592,5.682c0,0-0.704-0.252-1.659-0.252s-4.726-2.514-5.078-3.369 c-0.352-0.854-1.504-2.126-1.179-2.194C611.341,194.902,611.341,195.104,611.341,195.104z" fill="#B9C5D1"/>
-<path d="M635.539,190.929c-0.598,0.265-1.313,0.52-1.896,1.005c-0.04,0.033,2.678,0.427,3.395,0.048 C636.639,191.513,636.14,191.162,635.539,190.929" fill="#B9C5D1"/>
-<path d="M637.612,189.17c-0.319,0.149-0.977,1.395-0.807,1.457c1.216,0.451,3.805-1.523,2.118-1.282" fill="#B9C5D1"/>
-<path d="M543.139,138.115c-2.629-0.137,0.107,4.079-0.368,4.511C543.517,141.948,543.864,138.804,543.139,138.115" fill="#B9C5D1"/>
-<path d="M539.69,139.177c0.106,0.084,1.45,0.902,1.362,0.474c-0.045-0.22-1.178-1.885-1.296-1.482 C539.677,138.502,539.655,138.839,539.69,139.177" fill="#B9C5D1"/>
-<path d="M541.303,140.738c-0.433,0.689-0.736,1.672-0.502,2.485C540.73,142.979,542.9,141.402,541.303,140.738" fill="#B9C5D1"/>
-<ellipse cx="604.785" cy="28.993" fill="#B9C5D1" rx="2.378" ry="0.349"/>
-<path d="M571.591,86.934c0,0-0.791,0.445-1.632,2.721c-0.841,2.276-0.989,3.117-3.018,4.256 c-2.028,1.138-3.909,2.275-4.651,3.265s-4.206-0.247-7.026,1.583c-2.819,1.831-4.7,2.227-3.859,3.019 c0.841,0.791-0.543,1.88,1.089,2.325s2.721,0,2.77-1.781c0.05-1.781,2.522-3.417,3.018-3.391s1.683-0.814,2.277,0.273 c0.594,1.089,0.594,2.969,1.781,1.633c1.188-1.336,4.305-1.435,5.542-2.771S575.796,89.11,571.591,86.934z" fill="#B9C5D1"/>
-<path d="M551.306,110.039c-1.328,1.327-3.251,2.57-4.405,4.001C547.612,113.159,551.71,112.257,551.306,110.039" fill="#B9C5D1"/>
-<path d="M556.919,102.304c0,0-0.959-1.794,0.474-2.249s1.334-1.297,1.829-0.752 c0.495,0.544,0.792,1.286,0.248,1.435C558.925,100.886,557.393,102.54,556.919,102.304z" fill="#B9C5D1"/>
-<path d="M570.404,85.102c0,0,0.136,0.577,0.488,0.512c0.352-0.066,0.896,0.428,0.352,0.479 c-0.544,0.049-1.434,0.147-1.434,0.147s-0.446-0.643,0.197-1.483c0.644-0.842,0.049-1.484,0.544-1.386s0.94,1.484,1.286,0.445 c0.347-1.039-0.314-3.701,0.239-4.003c0.553-0.302,1.295,0.886,2.334,1.281c1.04,0.396,2.871,0.842,3.563,0.99 c0.692,0.148,0.742,0.939,1.039,1.286c0.296,0.347,1.237,0.396-0.099,0.544s-1.386-0.494-2.127,0.396 c-0.742,0.891-0.643,1.337-1.435,1.287s-1.386,0.049-2.276-0.445c-0.89-0.495-1.435-0.692-1.682-0.495 C571.146,84.854,570.404,85.102,570.404,85.102z" fill="#B9C5D1"/>
-<path d="M595.701,72.059c0,0-1.365,2.097-0.888,1.657C595.29,73.277,596.211,72.572,595.701,72.059z" fill="#B9C5D1"/>
-<path d="M593.037,74.663c0,0-2.961,2.193-2.605,2.309C590.788,77.087,593.06,75.554,593.037,74.663z" fill="#B9C5D1"/>
-<path d="M588.66,77.878c0,0-2.602,1.605-2.018,1.521S588.808,78.818,588.66,77.878z" fill="#B9C5D1"/>
-<path d="M584.999,79.857c0,0-4.444,1.257-3.212,1.494C583.02,81.589,584.999,80.698,584.999,79.857z" fill="#B9C5D1"/>
-<path d="M617.398,187.968c0.694,0.176,0.118,2.072,1.476,1.683C619.172,189.564,617.706,188.045,617.398,187.968" fill="#B9C5D1"/>
-<path d="M619.904,191.878c-0.336-0.097-0.277-1.329-0.916-1.044C619.122,191.296,619.427,191.644,619.904,191.878" fill="#B9C5D1"/>
-<path d="M620.794,193.287c-0.336-0.098-0.276-1.328-0.915-1.044C620.011,192.705,620.316,193.054,620.794,193.287" fill="#B9C5D1"/>
-<path d="M622.372,194.79c0.091-0.342-0.886-0.808-0.521-1.319C622.084,193.144,622.363,194.822,622.372,194.79" fill="#B9C5D1"/>
-<path d="M621.22,193.805c0.01,0.402,1.097,0.428,0.204,0.967C620.272,195.465,621.183,192.322,621.22,193.805" fill="#B9C5D1"/>
-<path d="M617.609,197.111c0,0,0.968,0.983,0.874,1.008S617.39,198,617.609,197.111z" fill="#B9C5D1"/>
-<path d="M621.982,194.973c0,0,0.833,0.45,0.887,0.712c0.054,0.263,0.121,0.264,0.121,0.264l-0.067-0.001 C622.923,195.947,622.011,195.55,621.982,194.973z" fill="#B9C5D1"/>
-<path d="M618.634,186.807c0.26-0.268,0.556-0.49,0.887-0.668c0.188-0.067,1.071,2.393,0.59,2.474 C619.648,188.688,619.103,187.024,618.634,186.807" fill="#B9C5D1"/>
-<g>
-<g>
-<path d="M455.928,29.903c-0.301-0.114-0.611-0.17-0.848-0.136C454.579,29.839,455.185,29.826,455.928,29.903z M639.881,44.734v-7.261c0,0-7.258-1.119-9.57-1.211c-2.313-0.091-7.697-1.563-6.976-0.601c0.721,0.962,2.71,1.58,0.874,1.812 c-1.836,0.232-5.243-0.567-4.382-0.769c0.862-0.201,1.343-1.765,0.02-1.283c-1.323,0.48-2.165,1.322-4.931,1.082 c-2.767-0.241-17.631-2.895-20.963-2.049c-3.332,0.846-3.606-2.189-5.033-3.077c-1.426-0.888,0.739-2.692,3.505-2.692 s6.561-1.063,4.182-1.313c-2.378-0.251-14.29-0.829-17.17-1.184c-2.881-0.355-7.818-1.953-8.901-0.991 c-1.082,0.962-10.631-0.014-8.743,0.715c1.888,0.728,9.938,3.267,14.091,1.696c4.153-1.569,9.806,0.836,9.084,1.918 c-0.721,1.083-3.127,1.685-5.773,1.685s-7.149-0.662-7.86-0.308c-0.711,0.355-1.991-0.455-3.079,0.888 c-1.088,1.344-11.07-0.821-11.792,0.381c-0.721,1.203-6.667,3.428-5.378,1.474s3.935-1.354,2.492-2.556 c-1.443-1.203-8.419-3.969-10.944-2.766c-2.526,1.202-2.405,2.886-3.849,2.525c-1.443-0.361-4.068-2.169-5.653-1.684 c-1.585,0.484-19.844,0.962-18.281,0.36s9.123-1.209,8.229-3.19s-8.192-2.693-11.398-2.338c-3.206,0.356-1.643-1.688-2.604-1.688 s-7.134,1.897-9.622,2.044c0,0-14.072-0.36-14.672,0.722c-0.602,1.083-5.893,1.443-7.817,1.443c-1.925,0-6.179,0.721-5.773,1.083 c0.405,0.361,3.055,0.874,1.708,1.278c-1.347,0.405-8.563,0.646-8.563,0.646s-0.31,1.906,2.732,2.817s1.72,0.258,1.539,1.065 c-0.182,0.808,2.021,1.548,0.799,1.538c-1.222-0.009-4.709-3.016-6.152-3.016s-0.81-1.168-1.367-1.245s-0.678,0.403-1.64,0.403 s-2.11-0.372-2.919-0.848c-0.328-0.192-0.897-0.287-1.404-0.34c0.766,0.292,1.471,0.983,0.753,1.672 c-1,0.959-1.481-0.845-2.804-1.206c-1.323-0.36,0,1.563-1.203,1.804c-1.203,0.241-1.589,5.854-0.671,5.646 c0.917-0.207,5.033-0.66,4.115-0.267c-0.918,0.394-4.024,1.534-3.493,1.806c0.53,0.271,1.973,0.512,0.65,1.113 c-1.323,0.602-4.856,2.535-6.216,2.29s-1.273-0.71-1.273-0.71s4.406,0.591,4.204-4.824c-0.202-5.415,0.769-6.336-0.563-6.497 c-1.332-0.161-3.367-2.045-5.171-0.843c-1.804,1.203-4.811,2.405-4.931,3.729c-0.12,1.322,0.841,2.164,1.563,2.886 c0.722,0.722,2.559,0.695,1.938,1.79c-0.621,1.095-0.494,2.179-2.298,0.856c-1.805-1.323-9.027-2.539-10.824-2.525 c-1.798,0.012-3.97-3.368-3.97-1.564s2.764,1.725,2.468,2.582c-0.296,0.858,0.28,1.288-1.214,0.977s-7.868-1.393-10.634-0.552 c-2.766,0.842-6.896,0.924-8.98,2.206c-2.085,1.282-3.889,2.365-4.25,1.282s1.924-2.646,0.481-3.007 c-1.443-0.361-3.35-0.953-4.141,0.666c-0.79,1.619,0.653,1.739-0.67,2.341c-1.323,0.602-7.064,2.179-7.381,2.953 c-0.316,0.774,3.652,2.459-5.248-0.066c0,0,2.525,1.563,1.563,2.405c-0.962,0.842-3.582,1.42-4.437-0.433 s-3.042-3.355-3.813-4.589s15.207,2.604,14.194-1.059c0,0-8.74-3.789-16.242-4.447c-7.502-0.658-2.792-1.627-5.508-1.623 c-2.716,0.003-2.716,0.363-4.521,0.363c-1.804,0-0.685-1.234-1.906-0.857c-1.221,0.377-0.981-0.104-3.506,0.737 s-0.36,1.203-4.33,1.323c-3.969,0.12-10.704,1.684-12.027,2.165c-1.323,0.48-2.085,1.138-0.962,0.962 c1.123-0.176,4.674-0.671,4.441-0.035c0,0-0.46,0.603-2.288,1.573s-3.817,1.126-4.279,2.733 c-0.461,1.607-0.119,1.088-2.118,1.977c-1.999,0.888-6.283,2.431-7.14,2.888c-0.857,0.456-2.627,0.742-3.542,2.741 c-0.914,2,0.571,2.284,0.743,3.827c0.171,1.542,4.859,2.949,8.456-0.067c0,0,5.439,4.899,4.661,5.082 c-0.779,0.184-2.835,0.869-2.778,1.154s-1.056,0.66-0.157,0.873c0.899,0.213,1.431,0.891,0.908,0.809s-0.694,0.774,0.848-0.025 c1.542-0.8,0.85-0.646,0.79-1.277c-0.059-0.631,0.752,0.25,0.752,0.25s2.17,0.571,2.228,0.113 c0.057-0.457,1.028-0.742,2.056-0.971c1.028-0.229,1.448-4.159,2.838-4.879c1.39-0.719,3.898-0.952,3.672-1.835 s-2.054-0.997-2.682-1.111s-0.813-0.248-0.778-0.724c0.036-0.476,1.578-4.304,4.148-4.589c2.57-0.286,3.827-1.257,3.656-2.057 c-0.171-0.799,0.179-1.761,1.518-2.108c1.338-0.348,5.623,0.167,5.451,0.853c-0.172,0.685-8.625,4.854-8.168,5.198 c0.457,0.342,1.485,1.484,0.743,2.228c-0.743,0.742-0.971,1.428,1.942,1.599c2.914,0.172,10.682-0.8,11.367-0.399 c0.686,0.399,3.027,0.399,2.513,0.686c-0.514,0.285-2.399-0.286-3.77,0.8c-1.371,1.085-7.083,0.228-8.283,0.742 c-1.2,0.514-2.742,0.343-2.399,0.628c0.342,0.286-1.04,0.281-0.571,0.857c0.469,0.574,2.056-0.972,3.655,0.057 c1.6,1.028-0.057,2.57-0.971,2.399s-3.027-1.143-3.427,0.057c-0.4,1.2-1.038,2.609-2.347,3.361 c-1.309,0.752-2.052,1.037-3.137,0.009c0,0-6.219,2.021-7.286,1.77c-1.067-0.252-0.753-1.431-1.36-1.172 c-0.607,0.26-4.557,1.377-4.655,0.982s-1.189-0.737-1.492-1.237c-0.304-0.499-0.442-0.814-0.245-1.288 c0.198-0.474,1.444,1.517,1.729,0.832c0.286-0.687-0.392-0.684-0.624-0.97c-0.233-0.287-0.918-1.087-0.233-1.145 c0.686-0.058,1.574-0.087,1.102-0.414c-0.473-0.328-0.93-0.557-0.873-1.413c0.057-0.857-2.426-0.76-3.469,0.248 s-0.247,1.514-0.474,2.289s0.23-0.024,0.059,1.118c-0.172,1.143,0.895,1.866,0.533,2.019c0,0-1.447,0.323-3.161,0.666 s-2.913-0.114-3.313,0.686s-1.235,3.317-5.416,4.028c0,0,0.381,0.554-0.586,1.318c-0.967,0.766-4.28,1.622-4.623,1.508 s-0.645-1.115-0.743-0.172c-0.097,0.945,0.514,1.429-0.228,1.429c-0.743,0-0.8-0.343-3.085-0.229c0,0-4.627,0.399-1.485,1.656 s5.346,2.44,5.329,3.905c-0.017,1.464,0.514,4.705-1.636,4.342c-2.151-0.364-4.436,0.207-5.349-0.25 c-0.914-0.457-1.428-0.285-2.685-0.285c-1.256,0-2-0.344-2.627-0.058s-1.831,0.296-1.772,0.69c0.059,0.396,1.438,0.663,0.691,1.5 c-0.747,0.837,0.224,2.494-0.29,3.637c-0.514,1.142-1.078,2.869-0.539,3.091s0.939,0.907,0.653,1.764 c-0.286,0.857,0.571,0.971,2.114,0.914s1.885,0.686,2.17,0.972c0.286,0.285,1.483,0.88,2.227,0.04s2.686-0.384,3.828-0.384 s1.823-1.163,2.882-1.353c1.06-0.189,2.68-1.733,2.526-2.446c-0.153-0.713,0.46-3.826,2.246-3.97 c1.442-0.115,2.766-1.526,3.41-3.622c0.551-1.792,4.244,0.195,5.215,0.024c0.971-0.172,2.627-2.971,5.083-2.514 c2.457,0.457,2.693,2.152,2.775,2.762c0.082,0.608,3.566,2.95,4.879,2.95c1.314,0,2.681,1.328,3.054,1.863 c0.373,0.536,1.327,0.237,1.421,0.986c0.095,0.749,1.006,0.671,0.572,1.382c-0.434,0.709-0.935,1.652-0.535,1.709 c0.4,0.058,0.969-0.368,1.403-1.019c0.434-0.651,0.881-0.353,0.824-0.694c-0.057-0.344-0.914-0.686-0.856-1.314 c0.057-0.628,0.938-1.286,1.354-1.129c0.416,0.158,2.165,1.085,2.033,0.336c-0.132-0.749-1.854-1.4-2.764-1.874 c-0.91-0.475-1.708-0.26-1.48-0.967s-0.41-0.337-1.776-0.494c-1.366-0.156-2.28-1.07-2.28-1.755c0-0.686-1.657-1.372-2.627-2.685 c-0.971-1.314,0.487-0.788,0.171-0.946c-0.315-0.157,0.8-1.625,1.6-1.396c0.8,0.229,0.298,2.079,1.006,1.812 c0.708-0.269,1.065-1.599,1.046-0.908s-0.322,1.067,0.355,0.711c0,0,0.392-0.643,0.335-0.071 c-0.058,0.57,1.142,2.709,2.685,3.011c1.542,0.302,5.084,0.93,5.426,2.415c0,0,0.54,2.443,0.171,2.628 c-0.368,0.185,0.914,0.228,0.628,0.8c-0.286,0.571,1.491,1.871,1.491,1.871s-1.182,1.322,0.178,1.953 c0,0-0.069-1.083,0.502-0.912c0.571,0.172,2.399-0.113,2.628-0.056c0.229,0.056,0.856,0.285,0.856,0.285 s-3.586,0.513-3.335,0.742c0.25,0.229,0.993,0.571,0.993,1.143s-0.561,0.118,0.605,0.573s1.451,1.141,1.623,0.854 c0.171-0.285,0.492-1.445,0.332-1.979s0.183-1.219,0.925-1.048c0.743,0.172,1.287,0.844,1.443,0.279 c0.157-0.564-3.919-1.702-3.138-2.19c0.781-0.487,1.184,0.198,1.125-0.059c-0.058-0.258-2.057-2.6-1.257-2.485 c0.799,0.114,0.856,0.971,1.428,1.085s-0.342-0.285,0.628-1.085c0.971-0.8,3.028-0.686,4.056-0.343 c1.028,0.343,4.456-0.629,5.141-0.172c0.686,0.458,0.514,0.687,0.057,0.687s-4.744,0.104-5.256,0.537 c-0.513,0.434-0.227,2.204,0.058,1.861c0.286-0.343,1.085-1.428,1.371-0.914c0.286,0.515-0.311,0.486-0.127,1.243 s-0.178,0.828-0.178,0.828s-1.776,0.237-1.302,0.415c0.474,0.177,1.835,0.084,1.835,0.427s-0.77,0.579-0.77,0.579 s1.284,1.077,2.484,1.135c0,0-0.949,0.534-0.589,0.581c0.36,0.047,2.047-0.193,2.546,0.355s2.614,1.059,2.842-0.71 c0,0,2.284,0.573,2.798,1.087c0.514,0.515,2.056,0.515,2.856-0.228c0.8-0.743,1.883-0.253,2.398-0.327 c0.515-0.073,1.365-0.892,1.6-0.416s-0.193,0.253-0.571,1.371c-0.378,1.117,0.799,2.113,0.342,2.685s-2.056,5.712-3.484,5.77 c-1.428,0.057-3.458-0.588-3.985-0.294s-2.881-0.593-4.018,0.079c-1.136,0.671-6.505-1.385-7.648-0.528 c0,0-1.511-1.042-3.897-0.892c0,0-5.871-2.192-5.699-0.079c0.171,2.113,0.8,1.714,0,2.57s-2.285,0.971-3.941-0.114 c-1.657-1.085-2.342-0.571-3.199-1.314c-0.856-0.742-2.342-2.398-6.226-2.228c0,0-4.85-1.918-4.024-2.387 c0.825-0.469,3.167-4.011,1.682-4.811c-1.485-0.799-2.685-0.514-4.513-0.399c-1.828,0.114-14.912,2.482-17.194,2.97 c-2.252,0.48-5.712,1.2-6.626,0.344c-0.914-0.857-2.113-1.714-2.513-0.458c-0.4,1.257-0.803,2.481-3.628,4.012 c-2.826,1.529-2.712,2.786-2.655,3.814s0.971,1.828,0.514,2.285s-2.523,2.581-3.433,2.719c-0.897,0.135-2.752-1.873-3.181,2.829 c-0.005,0.062-0.011,0.125-0.016,0.188c0,0-3.652,1.461-3.823,3.117c-0.172,1.656-0.515,1.371-1.2,3.256 c-0.686,1.885-0.4,3.085-0.171,5.369c0.229,2.285,0.754,7.611-0.489,8.499c-1.243,0.889-0.425,6.581,3.231,9.209 c0,0,0.628-0.286,0.971,1.199s4.341,4.398,5.369,5.198c1.028,0.8,4.913,3.941,7.711,2.971c0,0,5.998,0.057,8.797,0.285 s6.854-4.341,11.367-2.513c0,0,0.914-0.344,1.599,1.77c0.686,2.114,3.951,1.705,5.003,1.768c0,0,5.279,1.945,1.28,8.63 c0,0,3.199,6.739,7.712,11.252c0,0,1.771,4.913,1.371,7.255s-1.771,2.398-2.742,3.998c-0.971,1.6-2.285,6.854-1.828,7.94 c0.457,1.085,5.483,6.797,5.369,7.882c-0.114,1.086-0.285,7.998,2.742,9.939c0,0,2.799,2.8,3.142,5.599 c0,0,0.914,0.057,0.628,1.771c-0.285,1.714-0.799,4.513,1.6,4.97c2.399,0.457,3.085-0.686,4.741-0.857 c1.657-0.171,4.742-0.171,5.427-1.085c0,0,0.628-0.457,1.828,0.114s6.169-3.998,7.483-5.255c1.313-1.257,0.914-3.143,1.771-3.37 c0.856-0.229,2.105-3.052,3.17-5.518c0.257-0.595,2.313-1.565,3.513-2.365c1.199-0.8,2.935-3.571,0.04-7.755 c0,0,3.73-4.298,6.358-5.841c2.627-1.542,2.97,0.173,3.198-2.112s1.542-5.827,0.971-6.798c-0.571-0.972-0.057-1.371-0.457-2.342 c-0.4-0.972-1.085-0.229-1.428-1.371c-0.342-1.143,0.139-3.511-0.473-4.44c-0.612-0.929-2.326-0.814-1.698-1.9 c0.629-1.085,2.457-1.542,3.085-5.313c0,0,2.399-4.227,3.542-5.197c1.143-0.972,9.368-7.141,10.567-9.254 c1.2-2.113,7.24-12.603,5.463-12.426c-1.777,0.178-8.547,4.029-12.203,2.201c-3.656-1.828-1.771-2.171-2.229-3.256 c-0.457-1.085-4.33-5.362-5.106-5.337c-0.776,0.024-1.576,0.596-1.919-2.032s-3.22-3.979-3.409-4.36 c-0.189-0.381,0.839-2.322-0.589-4.322c-1.428-1.999-2.17-0.285-2.57-3.027c-0.4-2.741-2.057-4.684-3.028-6.055 c-0.971-1.371-3.147-5.569-2.516-6.126c0.631-0.558,2.573,3.384,3.316,3.556c0,0,0.4-2.628,1.028-2.685s-0.229,1.37-0.057,2.171 c0.171,0.8,1.199,0.342,1.713,1.599s2.742,3.771,3.999,5.427s1.771,5.198,2.57,6.397c0.8,1.199,2.114,1.543,3.313,4.284 c0,0,2.571,1.542,2.514,3.313c-0.057,1.771,0.286,6.512,2.228,6.797c1.942,0.286,2.113-1.656,4.513-1.485 c2.399,0.172,4.456-1.313,7.826-2.741s3.142-3.599,4.513-3.599s2.914,1.027,3.084-0.229c0.171-1.257,1.713-0.743,2.228-1.885 c0.514-1.144,1.828-0.571,2.171-1.144c0.342-0.57,0.25-2.949,1.039-2.988c0.789-0.038,4.845-3.401-0.296-5.918 c0,0-1.828,0.682-2.342-0.689c-0.514-1.37-0.057-3.256-0.914-3.313c-0.857-0.057-2.627,3.085-4.627,3.199 s-2.228,1.656-3.313,0.457c-1.085-1.2-0.172-1.844-0.291-2.613c-0.119-0.77-1.766-0.585-2.108-1.499s-1.485-1.6-2.285-2.399 c-0.8-0.8-2.517-3.246-1.173-3.736s3.424-0.067,3.612,1.006c0.188,1.074,2.016,2.273,3.043,2.788 c1.028,0.514,4.728,3.788,6.962,1.237c0,0,1.663,0.075,2.006,1.332s5.945,1.588,6.343,1.509c0,0,1.769,1.291,2.054,0.434 c0.285-0.856,6.257-0.876,7.241-0.552c0.984,0.323,1.295,0.469,1.54,1.539c0.244,1.069-0.156,1.526,1.501,1.755 c1.656,0.229,2.799,1.656,3.77,1.656c0,0-1.371,0.171-1.428,0.571c-0.057,0.4,4.284,4.227,4.97,4.227s1.134-0.634,1.134-0.634 l-0.355,1.894c0,0,1.247,3.411,1.776,5.445c0.529,2.035,1.453,2.224,1.615,3.006c0.162,0.782,2.374,5.011,2.57,5.826 s2.285,6.397,3.713,5.027c1.428-1.371,1.498-1.505,1.634-1.667c0.137-0.161,1.895,0.474,2.013,0.829 c0.119,0.355-0.277,0.323-0.563,1.123c0,0,0.229,4.398,1.942,3.941c1.714-0.457,2.742-5.426-1.313-6.454 c0,0-1.614,0.559-1.664-0.149c-0.049-0.708,1.244,0.06,1.421-0.71c0.178-0.77-0.328-3.368,0.129-3.597 c0.457-0.229,0.172-4.284,0.628-5.598c0.457-1.314,3.839-0.442,3.861-1.992c0.023-1.55,0.308-2.007,1.964-2.692 c1.657-0.685,3.085-3.256,3.713-3.198c0.628,0.058,1.942-3.37,3.142-2.913c1.2,0.457,6.341-0.399,7.769,0.229 c1.428,0.628,1.885,2.57,3.027,2.855c1.143,0.286-0.399,1.771,0.286,2s1.999-2.399,1.656,0.343 c-0.343,2.741-1.771,3.771-0.114,3.884c1.656,0.114,4.512-0.628,5.026,0.4c0.514,1.027,1.372,4.684,1.828,6.968 c0.457,2.285,0.058,2.628-0.114,4.113c-0.171,1.485-0.515,2.685,0.057,3.37c0.571,0.686,3.599,2.171,3.542,3.142 c-0.057,0.971,0.457,3.027,0.914,4.056c0.457,1.028,5.338,5.039,5.712,4.056s-2.399-7.883-4.912-9.939 c-2.513-2.057-2.627-3.084-2.627-4.684s-0.457-6.283,1.028-6.512c1.485-0.229,7.483,3.198,7.483,5.598s0.4,2.171,0,2.971 c0,0,1.085,1.085,1.828-0.457c0.743-1.542,8.335-3.636,7.167-6.959s-7.167-8.692-7.109-10.806 c0.058-2.114,3.713-5.084,5.141-5.027c1.428,0.058,2.239-0.642,2.205,0.622s1.184,2.189,1.184,2.189s-3.96,0.788-3.217,1.759 s3.028,3.484,4.285-1.143c0,0-1.143-1.542-0.743-2.399c0.4-0.856,7.597-2.284,10.053-3.484 c2.456-1.199,11.238-10.753,10.76-12.488c0,0-3.92,1.038-2.605-0.591c1.315-1.631,0.473-4.878-1.09-7.523 c-1.563-2.646,6.013-3.849,4.57-4.812c-1.443-0.962-12.026-0.962-8.659-2.887c3.367-1.924,8.659-5.171,7.938-2.886 s-4.45,3.007-1.083,2.767c3.368-0.241,6.984-2.013,6.258-0.285s-2.141,1.921-0.652,2.486c1.49,0.564,3.198-1.185,3.02,1.184 c-0.178,2.367-1.219,2.753-1.29,3.951c-0.072,1.197,0.993,1.316,3.244,0.665c2.25-0.651,4.092-2.71,0.965-7.4 c0,0-1.804-0.601,1.083-2.767c2.887-2.164,3.009-5.763,5.354-4.926c2.344,0.838,14.974-5.238,15.394-12.784 c0,0-0.061-3.097,1.623-2.495c1.684,0.602,1.082,3.969,0.962,6.014c-0.121,2.045-0.601,4.45,0.481,3.367 c1.083-1.082,3.729,2.045,2.526-0.36s-2.646-5.292-0.962-5.292c1.684,0,3.022,2.268,2.593,1.134 c-0.429-1.134-1.284-8.559-2.901-9.056s-2.699-0.857-5.706-0.256c-3.007,0.601-9.224-0.036-7.438-1.4 c1.786-1.366,8.105-8.405,20.22-7.893s15.558,1.513,15.039,0.592c-0.52-0.92,0.432-4.229,2.783-4.439 c2.351-0.21,4.795-0.946,5.21,0.475c0.415,1.42,4.115-0.323,6.28-1.767s1.555,0.64-0.004,1.944 c-1.559,1.303-8.553,4.734-11.25,6.747s-1.657,6.865-1.362,8.878c0.295,2.012-2.149,2.701-2.043,3.57 c0.106,0.87,7.804-3.94,11.171-8.511c3.367-4.571,2.045-3.849,1.563-5.533c-0.481-1.684,1.443-3.487,2.887-3.487 c1.443,0,11.305,0,15.635-2.165c4.33-2.165,11.964-0.598,11.995-2.163s-3.216-2.527-2.976-3.61L639.881,44.734z M379.794,85.262 c-2.278,0-4.422,1.206-4.422,1.206c-11.257-1.206-1.675-8.979,2.479-9.448s1.407,2.345,2.278,3.887s3.819-1.81,3.819-1.81 c0.201-1.005-1.273-0.134-1.541-1.34s2.479-1.475,4.154-1.341s0.268,1.407-0.469,2.145s-1.139,0.268,0.536,1.541 s6.902,3.283,6.902,5.763S382.072,85.262,379.794,85.262z M414.103,87.004c-1.675,0-0.603,0.603,0.603,1.943 s1.407,1.943,1.273,4.623s-2.211,2.011-5.696,1.273s-3.686-3.283-3.083-5.695s1.005-0.737,2.01-1.407s-3.752-2.479-4.355-5.026 s-0.134-0.804-1.139-1.943s1.273,0,4.221-3.015s4.825-1.475,4.825-1.475c3.686,2.747-1.742,3.082-1.876,3.753 s-1.005-0.47-2.077,1.005s2.68,1.005,2.948,2.01s1.675,0.536,1.407,1.273s0.536,1.876,1.273,0.871s1.407,0.402,2.949,1.341 S415.778,87.004,414.103,87.004z M458.606,83.766c-0.503,1.006-1.676,0.753-3.017,0.67 C455.589,84.436,459.109,82.76,458.606,83.766z M465.563,78.066c0,0-1.005,0.335-1.173-0.503 C464.389,77.563,465.814,76.223,465.563,78.066z M514.005,63.483c-1.09,0.587-0.838,0.922-1.425,1.341s-0.419,0.167-1.844,0.922 s-1.928,2.012-3.604,2.012s-2.85,0.42-2.934,0.084c0,0,6.956-2.18,7.543-3.521s3.436-5.027,3.52-3.938 S515.095,62.896,514.005,63.483z" fill="#B9C5D1"/>
-</g>
-</g>
-<path d="M365.873,94.03c-0.359,0.168-1.146-0.172-0.847-0.595C365.282,93.074,366.198,93.659,365.873,94.03" fill="#B9C5D1"/>
-<path d="M612.933,181.818c0.582,0.571,2.048,0.282,0.949,1.59C614.206,183.022,611.115,182.855,612.933,181.818" fill="#B9C5D1"/>
-<path d="M490.528,155.252c-0.021-0.042,0.021-1.404-1.125-2.07C489.427,154.171,490.079,154.367,490.528,155.252" fill="#B9C5D1"/>
-</g>
-</g>
-<!-- Kabul, Afghanistan -->
-<circle id="1760-1-0" cx="443.0" cy="98.7" r="2" fill="red"/>
-<!-- New Delhi, India -->
-<circle id="1624-45-0" cx="458.5" cy="116.2" r="2" fill="red"/>
-<!-- Mumbai, India -->
-<circle id="1624-45-1" cx="450.0" cy="127.8" r="2" fill="red"/>
-<!-- Chennai, India -->
-<circle id="1624-45-2" cx="462.2" cy="139.2" r="2" fill="red"/>
-<!-- Kolkata, India -->
-<circle id="1624-45-3" cx="470.5" cy="121.5" r="2" fill="red"/>
-<!-- London, UK -->
-<circle id="2592-33-0" cx="364.5" cy="52.9" r="2" fill="red"/>
-<!-- Paris, France -->
-<circle id="2696-34-0" cx="324.1" cy="73.2" r="2" fill="red"/>
-<!-- Helsinki, Finland -->
-<circle id="2632-104-0" cx="319.9" cy="68.3" r="2" fill="red"/>
-<!-- Berlin, Germany -->
-<circle id="2528-36-0" cx="343.9" cy="66.7" r="2" fill="red"/>
-</svg>
--- a/clock/data/worldclock/qgn_indi_dst_add.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg width="13" height="13" viewBox="0 0 13 13">
-<path d="M9.127,7.21c0,1.071-0.872,1.942-1.942,1.942c-1.071,0-1.942-0.871-1.942-1.942c0-1.071,0.871-1.942,1.942-1.942 C8.255,5.268,9.127,6.139,9.127,7.21z M7.185,4.268c-1.623,0-2.942,1.32-2.942,2.942s1.32,2.942,2.942,2.942 s2.942-1.32,2.942-2.942S8.807,4.268,7.185,4.268z"/>
-<path d="M6.685,1.986V3.05c0,0-0.003,0.499,0.5,0.499s0.5-0.499,0.5-0.499V1.986c0,0-0.019-0.5-0.5-0.5 S6.685,1.986,6.685,1.986z"/>
-<path d="M6.685,11.393v1.063c0,0-0.003,0.499,0.5,0.499s0.5-0.499,0.5-0.499v-1.063c0,0-0.019-0.5-0.5-0.5 S6.685,11.393,6.685,11.393z"/>
-<path d="M12.419,6.721h-1.063c0,0-0.499-0.003-0.499,0.5s0.499,0.5,0.499,0.5h1.063c0,0,0.5-0.019,0.5-0.5 S12.419,6.721,12.419,6.721z"/>
-<path d="M3.013,6.721H1.949c0,0-0.499-0.003-0.499,0.5s0.499,0.5,0.499,0.5h1.063c0,0,0.5-0.019,0.5-0.5 S3.013,6.721,3.013,6.721z"/>
-<path d="M10.532,3.166L9.78,3.917c0,0-0.355,0.351,0,0.707c0.356,0.355,0.707,0.001,0.707,0.001l0.752-0.752 c0,0,0.34-0.367,0-0.708S10.532,3.166,10.532,3.166z"/>
-<path d="M3.881,9.817l-0.752,0.752c0,0-0.355,0.351,0.001,0.707c0.355,0.355,0.706,0,0.706,0l0.752-0.752 c0,0,0.341-0.367,0-0.707C4.248,9.477,3.881,9.817,3.881,9.817z"/>
-<path d="M11.24,10.568l-0.752-0.752c0,0-0.351-0.355-0.707,0c-0.355,0.356-0.001,0.707-0.001,0.707l0.752,0.752 c0,0,0.367,0.34,0.708,0S11.24,10.568,11.24,10.568z"/>
-<path d="M4.588,3.917L3.836,3.165c0,0-0.351-0.355-0.707,0.001c-0.355,0.355,0,0.706,0,0.706l0.752,0.752 c0,0,0.367,0.341,0.707,0C4.929,4.284,4.588,3.917,4.588,3.917z"/>
-</svg>
\ No newline at end of file
--- a/clock/data/worldclock/qgn_indi_find.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,14 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" baseProfile="tiny" height="26px" version="1.1" viewBox="0 0 24 26" width="24px" x="0px" y="0px">
-<path d="M16.877,3.904c-6.466-0.738-10.905,6.168-8.039,11.672l-7.117,7.115l0.319,0.644c0.778,1.565,1.923,2.136,2.345,2.345 L5.029,26l7.076-7.076c0.902,0.494,1.901,0.814,2.955,0.935C19.787,20.397,24,16.703,24,11.864C24,7.343,20.447,4.31,16.877,3.904z"/>
-<path d="M9.088,16.741c0.434,0.213,0.821,0.491,1.111,0.782c0.145,0.145,0.286,0.313,0.419,0.5l-6.436,6.369 c-0.172-0.124-0.327-0.256-0.461-0.391c-0.289-0.29-0.568-0.679-0.783-1.111L9.088,16.741z" fill="#EB8C32"/>
-<path d="M22.403,9.043c-1.208-2.742-4.095-4.503-7.229-4.146c-5.106,0.58-7.72,6.121-5.358,10.389L22.403,9.043z" fill="#E1E1E1"/>
-<path d="M22.251,8.742l-1.795,0.896c0.256,0.514,0.434,1.073,0.502,1.675c0.314,2.757-1.664,5.246-4.421,5.56 c-2.153,0.245-4.14-0.914-5.056-2.748l-1.795,0.897c1.285,2.566,4.062,4.188,7.078,3.843c3.858-0.438,6.629-3.922,6.189-7.78 C22.858,10.243,22.61,9.458,22.251,8.742" fill="#B4B4B4"/>
-<path d="M15.286,5.899c-4.132,0.471-6.717,5.06-4.588,8.905l10.776-5.368C20.494,7.219,18.094,5.579,15.286,5.899z" fill="#968C82"/>
-<path d="M12.221,16.597c1.259,1.001,2.832,1.452,4.429,1.27c1.598-0.182,3.029-0.975,4.031-2.232 c1.002-1.259,1.453-2.834,1.271-4.434c-0.081-0.711-0.289-1.385-0.6-2.007l-1.795,0.897c0.207,0.415,0.354,0.861,0.407,1.336 c0.018,0.154,0.026,0.31,0.026,0.463c0,0.906-0.304,1.779-0.876,2.499c-0.669,0.84-1.624,1.369-2.691,1.491 c-1.067,0.121-2.118-0.18-2.958-0.849c-0.467-0.37-0.825-0.835-1.084-1.353l-1.795,0.898C10.974,15.352,11.522,16.042,12.221,16.597 z" fill="#5F5A50"/>
-<path d="M10.979,18.627L4.825,24.78C4.514,24.625,4.243,24.435,4,24.235l6.433-6.434 C10.633,18.045,10.824,18.316,10.979,18.627z" fill="#B44B00"/>
-<path d="M20.619,9.983c-0.827-2.032-2.932-3.352-5.22-3.091c-2.755,0.314-4.735,2.803-4.422,5.558 c0.079,0.689,0.293,1.33,0.614,1.898L20.619,9.983z" fill="#FFFFFF"/>
-<path d="M20.456,9.639l-8.975,4.486c0.916,1.834,2.902,2.993,5.056,2.748c2.757-0.313,4.735-2.803,4.421-5.56 C20.89,10.712,20.712,10.152,20.456,9.639" fill="#EBEBEB"/>
-<rect fill="none" height="26" width="24"/>
-</svg>
--- a/clock/data/worldclock/qgn_test_city_default.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1 Tiny//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11-tiny.dtd">
-<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="42" height="36" viewBox="0 0 42 36">
-<rect fill="none" height="36" width="42"/>
-<linearGradient id="SVGID_1" gradientUnits="userSpaceOnUse" x1="21.12" y1="18.23" x2="28.7" y2="33.17">
-<stop stop-color="#AABBD7" offset="0"/>
-<stop stop-color="#92A5CC" offset="0.26"/>
-<stop stop-color="#6C83BB" offset="0.71"/>
-<stop stop-color="#637DB5" offset="0.76"/>
-<stop stop-color="#4C6EA4" offset="0.83"/>
-<stop stop-color="#265689" offset="0.91"/>
-<stop stop-color="#003D6D" offset="0.99"/>
-</linearGradient>
-<polygon fill="url(#SVGID_1)" points="6.983,6.5 5.511,7.279 5.511,29.5 35.709,29.5 36.489,28.028 36.489,6.5 "/>
-<linearGradient id="SVGID_2" gradientUnits="userSpaceOnUse" x1="20.2" y1="-0.08" x2="21.06" y2="32.84">
-<stop stop-color="#FFFFFF" offset="0.15"/>
-<stop stop-color="#A2C2DD" offset="1"/>
-</linearGradient>
-<rect fill="url(#SVGID_2)" height="21.66" width="29.64" x="5.86" y="7.489"/>
-<linearGradient id="SVGID_3" gradientUnits="userSpaceOnUse" x1="35.32" y1="1.53" x2="36.25" y2="32.21">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#496DA2" offset="0.71"/>
-<stop stop-color="#235487" offset="0.99"/>
-</linearGradient>
-<polygon fill="url(#SVGID_3)" points="36.139,6.851 36.139,27.94 35.5,29.149 35.5,7.489 "/>
-<linearGradient id="SVGID_4" gradientUnits="userSpaceOnUse" x1="20.88" y1="3.11" x2="21.56" y2="25.88">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#496DA2" offset="0.71"/>
-<stop stop-color="#235487" offset="0.99"/>
-</linearGradient>
-<polygon fill="url(#SVGID_4)" points="35.5,7.489 36.139,6.851 7.069,6.851 5.86,7.489 "/>
-<linearGradient id="SVGID_5" gradientUnits="userSpaceOnUse" x1="20.31" y1="4.4" x2="20.5" y2="15.99">
-<stop stop-color="#FFFFFF" offset="0"/>
-<stop stop-color="#A2C2DD" offset="0.35"/>
-<stop stop-color="#6C83BB" offset="0.7"/>
-<stop stop-color="#003D6D" offset="1"/>
-</linearGradient>
-<rect fill="url(#SVGID_5)" height="19.096" width="26.695" x="7.19" y="8.725"/>
-<linearGradient id="SVGID_6" gradientUnits="userSpaceOnUse" x1="20.3" y1="12.61" x2="20.58" y2="25.51">
-<stop stop-color="#D6E6EC" offset="0"/>
-<stop stop-color="#298595" offset="1"/>
-</linearGradient>
-<path d="M33.885,27.821V19.12l-2.148-0.299c-0.068-1.166-0.291-4.934-0.293-4.934 c-0.004-0.084-1.654-0.09-1.689-0.009l-0.258,4.632l-1.301-0.181c-0.055-1.231-0.299-6.597-0.301-6.597 c-0.002-0.084-1.654-0.09-1.689-0.009l-0.271,6.29l-4.15-2.027l-2.74,1l0.005,1.643l-1.615-0.354l-0.528,0.118l-0.167-2.383 c1.619-0.07,2.872-0.532,2.872-1.093c0-0.578-1.329-1.052-3.024-1.099l-0.212-3.023l-0.107-0.002l-0.206,3.025 c-1.705,0.043-3.052,0.518-3.052,1.099c0,0.565,1.269,1.03,2.902,1.095l-0.177,2.643l-0.507,0.111v-1.726l-3.929-0.766 l-4.111,0.847l0.005,10.699" fill="url(#SVGID_6)"/>
-</svg>
\ No newline at end of file
--- a/clock/data/worldclock/qtg_test_homecity.svg Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,33 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<!-- Generator: Adobe Illustrator 13.0.2, SVG Export Plug-In . SVG Version: 6.00 Build 14948) -->
-<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
-<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
- width="40px" height="40px" viewBox="0 0 40 40" enable-background="new 0 0 40 40" xml:space="preserve">
-<g>
- <rect fill="none" width="40" height="40"/>
- <g>
- <linearGradient id="SVGID_1_" gradientUnits="userSpaceOnUse" x1="22.2627" y1="1.3389" x2="19.0624" y2="39.7377">
- <stop offset="0" style="stop-color:#FFFFFF"/>
- <stop offset="1" style="stop-color:#4F4F4F"/>
- </linearGradient>
- <path fill="url(#SVGID_1_)" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" d="M34.326,38.682V17.68
- L20.402,2.889L5.727,17.68v21.002H34.326z"/>
- <linearGradient id="SVGID_2_" gradientUnits="userSpaceOnUse" x1="20.916" y1="0.4121" x2="19.7791" y2="21.6352">
- <stop offset="0" style="stop-color:#D07100"/>
- <stop offset="1" style="stop-color:#A23600"/>
- </linearGradient>
- <polygon fill="url(#SVGID_2_)" stroke="#000000" stroke-linecap="round" stroke-linejoin="round" points="20.256,1.318
- 38.556,17.469 35.365,21.055 20.33,7.807 4.844,20.959 1.443,17.572 "/>
- <linearGradient id="SVGID_3_" gradientUnits="userSpaceOnUse" x1="20.9043" y1="21.8818" x2="19.9962" y2="38.8339">
- <stop offset="0" style="stop-color:#17BFFF"/>
- <stop offset="1" style="stop-color:#05002E"/>
- </linearGradient>
- <rect x="15.327" y="22.881" fill="url(#SVGID_3_)" width="10.2" height="15.801"/>
- <linearGradient id="SVGID_4_" gradientUnits="userSpaceOnUse" x1="23.999" y1="30.1406" x2="23.7214" y2="33.4714">
- <stop offset="0" style="stop-color:#C6FF45"/>
- <stop offset="1" style="stop-color:#4B8B00"/>
- </linearGradient>
- <ellipse fill="url(#SVGID_4_)" cx="23.854" cy="31.881" rx="1.5" ry="1.602"/>
- </g>
-</g>
-</svg>
--- a/clock/ftudatetimewizard/ftudatetimewizard.pro Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,89 +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 <hbwidget.h>
-#include <hbview.h>
-#include <hbdialog.h>
-#include <qdatetime.h>
-#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);
-
-private:
- void createMainLayout();
- void setItemDisplayed();
- void populateDateTimeGroup();
- void populatePlaceGroup();
- void wizardEditedDate(const QDate &date);
-
- HbDataForm* mDateTimePlaceForm;
- HbDataFormModel* mDateTimePlaceModel;
-
- HbDataFormModelItem *mDateItem;
- HbDataFormModelItem *mTimeItem;
- HbDataFormModelItem *mAutoTimeUpdateItem;
- HbDataFormModelItem *mPlaceGroup;
- HbDataFormModelItem *mCountryItem;
- HbDataFormModelItem *mCityItem;
-
- HbDateTimePicker* mDatePicker;
- HbDateTimePicker* mTimePicker;
- HbDialog* mDatetimepopup;
- SettingsUtility *mSettingsUtility;
-
- TimezoneClient *mTimeZoneClient;
- ClockCitySelectionList* mCitySelectionList;
- bool mTimeAutoUpdate;
-};
-
-#endif // FTUDATETIMEVIEW_H
-
-// End of file --Don't remove this.
--- a/clock/ftudatetimewizard/inc/ftudatetimewizard.h Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,414 +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),
-mDatetimepopup(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 = new TimezoneClient();
- mTimeAutoUpdate = mTimeZoneClient->timeUpdateOn();
-}
-
-/*!
- Destructor.
- */
-FtuDateTimeView::~FtuDateTimeView()
-{
- delete mDateTimePlaceForm;
- delete mDateTimePlaceModel;
- delete mSettingsUtility;
-}
-/*!
- 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 (mDatetimepopup) {
- delete mDatetimepopup;
- mDatetimepopup = NULL;
- }
- mDatetimepopup = new HbDialog();
-
- mDatetimepopup->setDismissPolicy(HbDialog::NoDismiss);
- mDatetimepopup->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"));
- mDatePicker->setDisplayFormat(mSettingsUtility->dateFormatString());
-
- // Sets the primary action and secondary action
- HbAction *primaryAction = new HbAction(tr("OK"), mDatetimepopup);
- HbAction *secondaryAction = new HbAction(tr("Cancel"), mDatetimepopup);
-
- mDatetimepopup->setPrimaryAction(primaryAction);
- mDatetimepopup->setSecondaryAction(secondaryAction);
- mDatetimepopup->setContentWidget(mDatePicker);
-
- connect(primaryAction, SIGNAL(triggered()), this, SLOT(updateDate()));
- connect(secondaryAction, SIGNAL(triggered()), mDatetimepopup, SLOT(close()));
- mDatetimepopup->exec();
-}
-
-/*!
- Populates the Time Picker.
- */
-void FtuDateTimeView::populateTimePicker()
-{
- if (mDatetimepopup) {
- delete mDatetimepopup;
- mDatetimepopup = NULL;
- }
- mDatetimepopup = new HbDialog();
- mDatetimepopup->setDismissPolicy(HbDialog::NoDismiss);
- mDatetimepopup->setTimeout(HbDialog::NoDismiss);
-
- if(mTimePicker) {
- mTimePicker = NULL;
- }
- mTimePicker = new HbDateTimePicker(QTime().currentTime(),
- this);
- mTimePicker->setDisplayFormat(mSettingsUtility->timeFormatString());
-
- // Sets the primary action and secondary action
- HbAction *primaryAction = new HbAction(tr("OK"), mDatetimepopup);
- HbAction *secondaryAction = new HbAction(tr("Cancel"), mDatetimepopup);
-
- mDatetimepopup->setPrimaryAction(primaryAction);
- mDatetimepopup->setSecondaryAction(secondaryAction);
-
- mDatetimepopup->setContentWidget(mTimePicker);
-
- connect(primaryAction, SIGNAL(triggered()), this, SLOT(updateTime()));
- connect(secondaryAction, SIGNAL(triggered()), mDatetimepopup, SLOT(close()));
-
- mDatetimepopup->exec();
-}
-
-/*!
- 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();
-}
-
-/*!
- 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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/inc/clockcommon.h Mon Jun 28 15:22:02 2010 +0530
@@ -25,10 +25,7 @@
const QString CITY_INFO_DB ("cityInfo.dat");
const QString CLOCK_DEBUG_FILE("debug.txt");
const QString PATH_TEXT("C:/");
-
-const long int KCRUidNitz = { 0x101F8876 };
-
-const long int KPreviousAlarmTime = 0x00000002;
+const int KMaximumCityListCount(50);
// Common definitions for docml.
#define CLOCK_MAIN_VIEW_DOCML ":/xml/clockmainview.docml"
@@ -38,9 +35,14 @@
#define CLOCK_WIDGET "clockWidget"
#define CLOCK_ALARMLIST "alarmListView"
#define CLOCK_NOALARMLABEL "noAlarmLabel"
-#define WORLD_CLOCK_VIEW_DOCML ":/xml/worldclockview.docml"
-#define WORLD_CLOCK_VIEW "worldClockView"
-#define CLOCK_VIEWS_STYLE_PATH ":/style"
+#define CLOCK_WORLD_VIEW_DOCML ":/xml/clockworldview.docml"
+#define CLOCK_WORLD_VIEW "worldClockView"
+#define CLOCK_WORLD_CITYLIST "worldClockCityListView"
+#define CLOCK_WORLD_HOMECITY "homeCityWidget"
+#define CLOCK_WORLD_VIEW_PORTRAIT_NOHOMECITY_SECTION "portrait-nohomecity"
+#define CLOCK_WORLD_VIEW_PORTRAIT_HOMECITY_SECTION "portrait-homecity"
+#define CLOCK_WORLD_VIEW_LANDSCAPE_NOHOMECITY_SECTION "landscape-nohomecity"
+#define CLOCK_WORLD_VIEW_LANDSCAPE_HOMECITY_SECTION "landscape-homecity"
#endif // CLOCKCOMMON_H
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/inc/clockprivatecrkeys.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/rom/clock.iby Mon Jun 28 15:22:02 2010 +0530
@@ -41,22 +41,28 @@
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
-file=ABI_DIR\BUILD_DIR\clockstopwatchengine.dll SHARED_LIB_DIR\clockstopwatchengine.dll
file=ABI_DIR\BUILD_DIR\clocksettingsutility.dll SHARED_LIB_DIR\clocksettingsutility.dll
file=ABI_DIR\BUILD_DIR\clocksettingsview.dll SHARED_LIB_DIR\clocksettingsview.dll
-file=ABI_DIR\BUILD_DIR\clockwidgetproto.dll SHARED_LIB_DIR\clockwidgetproto.dll
file=ABI_DIR\BUILD_DIR\clockcityselectionlist.dll SHARED_LIB_DIR\clockcityselectionlist.dll
file=ABI_DIR\BUILD_DIR\clockalarmeditor.dll SHARED_LIB_DIR\clockalarmeditor.dll
file=ABI_DIR\BUILD_DIR\clockappcontroller.dll SHARED_LIB_DIR\clockappcontroller.dll
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\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 Mon May 03 12:30:32 2010 +0300
+++ b/clock/rom/clockengines.iby Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/data/notes.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,836 +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>%1</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_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_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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/data/xml/notescollectionsview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,49 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="allNotesAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
+ </object>
+ <object name="collectionsViewAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ </object>
+ <object name="newNoteAction" type="HbAction">
+ <icon iconName="qtg_mono_create_event" name="icon"/>
+ </object>
+ <widget name="notesCollectionView" type="HbView">
+ <widget name="notesCollectionWidget" role="HbView:widget" type="HbWidget">
+ <widget name="subtitleGroupBox" type="HbGroupBox">
+ <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_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="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"/>
+ </layout>
+ </widget>
+ <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
+ <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"/>
+ <string locid="txt_notes_title_notes" name="title" value="Notes"/>
+ </widget>
+ <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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/data/xml/notesfavoriteview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="allNotesAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
+ </object>
+ <object name="displayCollectionsAction" type="HbAction">
+ <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">
+ <string locid="txt_common_opt_delete" name="text" value="Delete"/>
+ </object>
+ <widget name="notesFavoriteView" type="HbView">
+ <widget name="notesFavoriteViewWidget" role="HbView:widget" type="HbWidget">
+ <widget name="subtitleGroupBox" type="HbGroupBox">
+ <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="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="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="HbWidget:addAction"/>
+ <ref object="displayCollectionsAction" 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="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="app_list_template5"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/data/xml/notesmainview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="allNotesAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
+ </object>
+ <object name="collectionsViewAction" type="HbAction">
+ <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">
+ <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">
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ <string name="heading" value=" "/>
+ </widget>
+ <widget name="listView" type="HbListView">
+ <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="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="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-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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/data/xml/notesnoteview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="allNotesAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
+ </object>
+ <object name="displayCollectionsAction" type="HbAction">
+ <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">
+ <string locid="txt_common_opt_delete" name="text" value="Delete"/>
+ </object>
+ <widget name="notesNoteView" type="HbView">
+ <widget name="notesNoteViewWidget" role="HbView:widget" type="HbWidget">
+ <widget name="subtitleGroupBox" type="HbGroupBox">
+ <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="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="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="HbWidget:addAction"/>
+ <ref object="displayCollectionsAction" 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="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="app_list_template5"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/data/xml/notestodoview.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,62 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="1.1">
+ <object name="allNotesAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_all" name="icon"/>
+ </object>
+ <object name="displayCollectionsAction" type="HbAction">
+ <icon iconName="qtg_mono_notes_collections" name="icon"/>
+ </object>
+ <object name="newTodoAction" type="HbAction">
+ <icon iconName="qtg_mono_create_event" name="icon"/>
+ </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">
+ <real name="z" value="1"/>
+ <bool name="collapsable" value="FALSE"/>
+ <string name="heading" value=" "/>
+ </widget>
+ <widget name="todoListView" type="HbListView">
+ <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="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="HbWidget:addAction"/>
+ <ref object="displayCollectionsAction" role="HbWidget:addAction"/>
+ <ref object="newTodoAction" 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="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="app_list_template5"/>
+ </metadata>
+</hbdocument>
--- a/notes/notes.pro Mon May 03 12:30:32 2010 +0300
+++ b/notes/notes.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +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)
-
--- a/notes/notesui/bwins/notesviewmanageru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,17 +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)
- ?setupView@NotesMainView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 6 NONAME ; void NotesMainView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ??0NotesTodoView@@QAE@PAVQGraphicsWidget@@@Z @ 7 NONAME ; NotesTodoView::NotesTodoView(class QGraphicsWidget *)
- ??0NotesMainView@@QAE@PAVQGraphicsWidget@@@Z @ 8 NONAME ; NotesMainView::NotesMainView(class QGraphicsWidget *)
- ??1NotesTodoView@@UAE@XZ @ 9 NONAME ; NotesTodoView::~NotesTodoView(void)
- ?setupView@NotesFavoriteView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 10 NONAME ; void NotesFavoriteView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ?setupView@NotesTodoView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 11 NONAME ; void NotesTodoView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
- ??0NotesCollectionView@@QAE@PAVQGraphicsWidget@@@Z @ 12 NONAME ; NotesCollectionView::NotesCollectionView(class QGraphicsWidget *)
- ??0NotesNoteView@@QAE@PAVQGraphicsWidget@@@Z @ 13 NONAME ; NotesNoteView::NotesNoteView(class QGraphicsWidget *)
- ??1NotesNoteView@@UAE@XZ @ 14 NONAME ; NotesNoteView::~NotesNoteView(void)
- ?setupView@NotesNoteView@@QAEXAAVNotesAppControllerIf@@PAVNotesDocLoader@@@Z @ 15 NONAME ; void NotesNoteView::setupView(class NotesAppControllerIf &, class NotesDocLoader *)
-
--- a/notes/notesui/eabi/notesappcontrolleru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,44 +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
-
--- a/notes/notesui/eabi/notesviewmanageru.def Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,52 +0,0 @@
-EXPORTS
- _ZN13NotesMainView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 1 NONAME
- _ZN13NotesMainViewC1EP15QGraphicsWidget @ 2 NONAME
- _ZN13NotesMainViewC2EP15QGraphicsWidget @ 3 NONAME
- _ZN13NotesMainViewD0Ev @ 4 NONAME
- _ZN13NotesMainViewD1Ev @ 5 NONAME
- _ZN13NotesMainViewD2Ev @ 6 NONAME
- _ZN13NotesTodoView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 7 NONAME
- _ZN13NotesTodoViewC1EP15QGraphicsWidget @ 8 NONAME
- _ZN13NotesTodoViewC2EP15QGraphicsWidget @ 9 NONAME
- _ZN13NotesTodoViewD0Ev @ 10 NONAME
- _ZN13NotesTodoViewD1Ev @ 11 NONAME
- _ZN13NotesTodoViewD2Ev @ 12 NONAME
- _ZN17NotesFavoriteView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 13 NONAME
- _ZN17NotesFavoriteViewC1EP15QGraphicsWidget @ 14 NONAME
- _ZN17NotesFavoriteViewC2EP15QGraphicsWidget @ 15 NONAME
- _ZN17NotesFavoriteViewD0Ev @ 16 NONAME
- _ZN17NotesFavoriteViewD1Ev @ 17 NONAME
- _ZN17NotesFavoriteViewD2Ev @ 18 NONAME
- _ZN19NotesCollectionView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 19 NONAME
- _ZN19NotesCollectionViewC1EP15QGraphicsWidget @ 20 NONAME
- _ZN19NotesCollectionViewC2EP15QGraphicsWidget @ 21 NONAME
- _ZN19NotesCollectionViewD0Ev @ 22 NONAME
- _ZN19NotesCollectionViewD1Ev @ 23 NONAME
- _ZN19NotesCollectionViewD2Ev @ 24 NONAME
- _ZThn16_N13NotesMainViewD0Ev @ 25 NONAME
- _ZThn16_N13NotesMainViewD1Ev @ 26 NONAME
- _ZThn16_N13NotesTodoViewD0Ev @ 27 NONAME
- _ZThn16_N13NotesTodoViewD1Ev @ 28 NONAME
- _ZThn16_N17NotesFavoriteViewD0Ev @ 29 NONAME
- _ZThn16_N17NotesFavoriteViewD1Ev @ 30 NONAME
- _ZThn16_N19NotesCollectionViewD0Ev @ 31 NONAME
- _ZThn16_N19NotesCollectionViewD1Ev @ 32 NONAME
- _ZThn8_N13NotesMainViewD0Ev @ 33 NONAME
- _ZThn8_N13NotesMainViewD1Ev @ 34 NONAME
- _ZThn8_N13NotesTodoViewD0Ev @ 35 NONAME
- _ZThn8_N13NotesTodoViewD1Ev @ 36 NONAME
- _ZThn8_N17NotesFavoriteViewD0Ev @ 37 NONAME
- _ZThn8_N17NotesFavoriteViewD1Ev @ 38 NONAME
- _ZThn8_N19NotesCollectionViewD0Ev @ 39 NONAME
- _ZThn8_N19NotesCollectionViewD1Ev @ 40 NONAME
- _ZN13NotesNoteView9setupViewER20NotesAppControllerIfP14NotesDocLoader @ 41 NONAME
- _ZN13NotesNoteViewC1EP15QGraphicsWidget @ 42 NONAME
- _ZN13NotesNoteViewC2EP15QGraphicsWidget @ 43 NONAME
- _ZN13NotesNoteViewD0Ev @ 44 NONAME
- _ZN13NotesNoteViewD1Ev @ 45 NONAME
- _ZN13NotesNoteViewD2Ev @ 46 NONAME
- _ZThn16_N13NotesNoteViewD0Ev @ 47 NONAME
- _ZThn16_N13NotesNoteViewD1Ev @ 48 NONAME
- _ZThn8_N13NotesNoteViewD0Ev @ 49 NONAME
- _ZThn8_N13NotesNoteViewD1Ev @ 50 NONAME
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesappcontroller/bwins/notesappcontrolleru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesappcontroller/src/notesappcontroller.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesappcontroller/src/notesappcontrollerifimpl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -38,7 +38,7 @@
*/
NotesAppControllerIfImpl::NotesAppControllerIfImpl(
NotesAppController *controller, QObject *parent)
-:QObject(parent),
+:QObject(controller),
mAppController(controller)
{
// Nothing yet.
--- a/notes/notesui/notesapplication/notesapplication.pro Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesapplication/notesapplication.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesapplication/src/main.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/data/noteseditor.qrc Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,836 +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>%1</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_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_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>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/data/xml/notesnoteeditor.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,68 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <object name="makeFavoriteAction" type="HbAction">
+ <string locid="txt_notes_opt_mark_as_favorite" name="text" value="Mark as favourite"/>
+ </object>
+ <object name="makeAsTodoAction" type="HbAction">
+ <string locid="txt_notes_opt_make_it_as_todo_note" name="text" value="Make it as To-do note"/>
+ </object>
+ <object name="discardChangesAction" type="HbAction">
+ <string locid="txt_notes_opt_discard_changes" name="text" value="Discard changes"/>
+ </object>
+ <object name="newNoteAction" type="HbAction">
+ <string locid="txt_notes_opt_new_note" name="text" value="New note"/>
+ </object>
+ <object name="deleteAction" type="HbAction">
+ <icon iconName="qtg_mono_delete" name="icon"/>
+ </object>
+ <object name="addToCalendarAction" type="HbAction">
+ <icon iconName="qtg_mono_add_to_calendar" name="icon"/>
+ </object>
+ <widget name="notesEditorView" type="HbView">
+ <widget name="noteEditorWidget" role="HbView:widget" type="HbWidget">
+ <widget name="notesEditorSubHeading" type="HbGroupBox">
+ <string name="heading" value=" "/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <widget name="editorHeading" type="HbLabel">
+ <enums name="alignment" value="AlignLeft|AlignLeading"/>
+ <sizehint height="var(hb-param-text-height-secondary)" type="PREFERRED" width="48un"/>
+ <string locid="txt_notes_subhead_new_note" name="plainText" value="New note"/>
+ </widget>
+ <widget name="favoriteIcon" type="HbLabel">
+ <enums name="alignment" value="AlignRight|AlignTrailing"/>
+ <sizehint height="var(hb-param-graphic-size-secondary)" type="PREFERRED" width="4un"/>
+ </widget>
+ <widget name="textEdit" type="HbTextEdit"/>
+ <layout type="anchor">
+ <anchoritem dst="notesEditorSubHeading" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="notesEditorSubHeading" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="notesEditorSubHeading" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="notesEditorSubHeading" dstEdge="BOTTOM" spacing="0un" src="textEdit" srcEdge="TOP"/>
+ <anchoritem dst="textEdit" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="textEdit" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="textEdit" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ <anchoritem dst="editorHeading" dstEdge="LEFT" spacing="var(hb-param-margin-gene-left)" src="" srcEdge="LEFT"/>
+ <anchoritem dst="editorHeading" dstEdge="TOP" spacing="0.5un" src="" srcEdge="TOP"/>
+ <anchoritem dst="editorHeading" dstEdge="BOTTOM" spacing="0un" src="textEdit" srcEdge="TOP"/>
+ <anchoritem dst="favoriteIcon" dstEdge="RIGHT" spacing="-var(hb-param-margin-gene-right)" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="favoriteIcon" dstEdge="BOTTOM" spacing="0un" src="textEdit" srcEdge="TOP"/>
+ <anchoritem dst="favoriteIcon" dstEdge="LEFT" spacing="var(hb-param-margin-gene-middle-horizontal)" src="editorHeading" srcEdge="RIGHT"/>
+ <anchoritem dst="favoriteIcon" dstEdge="TOP" spacing="0.5un" src="" srcEdge="TOP"/>
+ </layout>
+ </widget>
+ <widget name="viewMenu" role="HbView:menu" type="HbMenu">
+ <ref object="makeFavoriteAction" role="HbMenu:addAction"/>
+ <ref object="makeAsTodoAction" role="HbMenu:addAction"/>
+ </widget>
+ <widget name="viewToolbar" role="HbView:toolBar" type="HbToolBar">
+ <enums name="orientation" value="Horizontal"/>
+ <ref object="addToCalendarAction" role="HbToolBar:addAction"/>
+ <ref object="deleteAction" role="HbToolBar:addAction"/>
+ </widget>
+ <string locid="txt_notes_title_notes" name="title" value="Notes"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portrait" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/data/xml/todoeditor.docml Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<hbdocument version="0.9">
+ <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="heading" value="New To-do"/>
+ <bool name="collapsable" value="FALSE"/>
+ </widget>
+ <widget name="todoEditorDataForm" type="HbDataForm">
+ <string name="description" value=""/>
+ <string name="heading" value=""/>
+ </widget>
+ <layout type="anchor">
+ <anchoritem dst="subHeading" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="subHeading" dstEdge="TOP" spacing="0un" src="" srcEdge="TOP"/>
+ <anchoritem dst="subHeading" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="todoEditorDataForm" dstEdge="TOP" spacing="0un" src="subHeading" srcEdge="BOTTOM"/>
+ <anchoritem dst="todoEditorDataForm" dstEdge="LEFT" spacing="0un" src="" srcEdge="LEFT"/>
+ <anchoritem dst="todoEditorDataForm" dstEdge="RIGHT" spacing="0un" src="" srcEdge="RIGHT"/>
+ <anchoritem dst="todoEditorDataForm" dstEdge="BOTTOM" spacing="0un" src="" srcEdge="BOTTOM"/>
+ </layout>
+ </widget>
+ <string locid="txt_notes_title_notes" name="title" value="Notes"/>
+ </widget>
+ <metadata activeUIState="Common ui state" display="NHD portriat" unit="un">
+ <uistate name="Common ui state" sections="#common"/>
+ </metadata>
+</hbdocument>
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/noteseditor/eabi/noteseditoru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/inc/noteseditor_p.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/notesnoteeditor.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/inc/notesnoteeditor.h Mon Jun 28 15:22:02 2010 +0530
@@ -48,7 +48,6 @@
private:
void execute(AgendaEntry entry);
QString getDescription();
- bool showDeleteConfirmationQuery();
private slots:
void markNoteAsTodo();
@@ -63,6 +62,7 @@
void handleEntrySaveFromCalendar();
void handleCalendarEditorClosed();
void handleNewNoteAction();
+ void selectedAction(HbAction *action);
private:
HbView *mEditor;
@@ -77,6 +77,9 @@
QPointer<HbAction> mMarkFavouriteAction;
QPointer<HbAction> mDiscardChangesAction;
QPointer<HbAction> mNewNoteAction;
+ HbAction *mDeleteNoteAction;
+ HbAction *mCancelDeleteAction;
+ ulong mEntryId;
NotesEditorDocLoader *mDocLoader;
NotesEditorPrivate* mOwner;
--- a/notes/notesui/noteseditor/inc/notestodoeditor.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/inc/notestodoeditor.h Mon Jun 28 15:22:02 2010 +0530
@@ -71,7 +71,6 @@
void addMenu();
bool validAlarmSet();
void addDiscardChangesAction();
- bool showDeleteConfirmationQuery();
private slots:
void saveTodo();
@@ -80,6 +79,7 @@
void handleRemoveDescriptionAction();
void handleDeleteAction();
void handleDiscardChangesAction();
+ void selectedAction(HbAction *action);
private:
NotesEditorPrivate* mOwner;
@@ -99,7 +99,8 @@
HbAction *mDoneAction;
HbAction *mDiscardAction;
QPointer<HbAction> mDescriptionAction;
-
+ HbAction *mDeleteTodoAction;
+ HbAction *mCancelDeleteAction;
HbGroupBox *mSubHeading;
NotesEditorDocLoader *mDocLoader;
--- a/notes/notesui/noteseditor/inc/notestodoeditorcustomitem.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/inc/notestodoeditorcustomitem.h Mon Jun 28 15:22:02 2010 +0530
@@ -45,9 +45,11 @@
private slots:
void launchTimePicker();
void launchDatePicker();
+ void selectDueDate();
+ void selectedAction(HbAction *action);
+
+private:
void handleOkAction();
- void handleCancelAction();
- void selectDueDate();
private:
QPointer<HbDialog> mTimePickerDialog;
@@ -55,6 +57,10 @@
QPointer<HbPushButton> mTimeWidget;
QPointer<HbPushButton> mDateWidget;
QPointer<HbPushButton> mDueDateItem;
+
+ HbAction *mOkAction;
+ HbAction *mCancelAction;
+
NotesEditorPrivate* mNotesTodoeditorPvt;
bool mDueDatePickerIsActive;
--- a/notes/notesui/noteseditor/noteseditor.pro Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/noteseditor.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/src/noteseditor.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/src/noteseditor_p.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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/notesnoteeditor.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/src/notesnoteeditor.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -230,7 +230,7 @@
// Set our view as the current view.
HbMainWindow *window = hbInstance->allMainWindows().first();
- HbAction *action = new HbAction(Hb::BackAction);
+ HbAction *action = new HbAction(Hb::BackNaviAction);
mEditor->setNavigationAction(action);
connect(
action, SIGNAL(triggered()),
@@ -295,19 +295,33 @@
*/
void NotesNoteEditor::deleteNote()
{
- if (showDeleteConfirmationQuery()) {
- mOwner->deleteNote();
+ HbMessageBox *confirmationQuery = new HbMessageBox(
+ HbMessageBox::MessageTypeQuestion);
+ confirmationQuery->setDismissPolicy(HbDialog::NoDismiss);
+ confirmationQuery->setTimeout(HbDialog::NoTimeout);
+ confirmationQuery->setIconVisible(true);
- HbMainWindow *window = hbInstance->allMainWindows().first();
- bool status = false;
+ QString displayText;
+ displayText = displayText.append(hbTrId("txt_notes_info_delete_note"));
+
+ confirmationQuery->setText(displayText);
- // Now close the editor.
- window->removeView(mEditor);
+ // Remove the default actions.
+ QList<QAction *> defaultActions = confirmationQuery->actions();
+ for (int index=0;index<defaultActions.count();index++) {
+ confirmationQuery->removeAction(defaultActions[index]);
+ }
+ defaultActions.clear();
- mOwner->editingCompleted(status);
+ // Add delete and cancel actions.
+ mDeleteNoteAction = new HbAction(
+ hbTrId("txt_notes_button_dialog_delete"));
+ mCancelDeleteAction = new HbAction(
+ hbTrId("txt_common_button_cancel"));
+ confirmationQuery->addAction(mDeleteNoteAction);
+ confirmationQuery->addAction(mCancelDeleteAction);
- }
-
+ confirmationQuery->open(this, SLOT(selectedAction(HbAction*)));
}
/*!
@@ -526,32 +540,21 @@
}
/* !
- Show the delete confirmation query.
+ Slot to handle the selected action from delete message box.
*/
-bool NotesNoteEditor::showDeleteConfirmationQuery()
+void NotesNoteEditor::selectedAction(HbAction *action)
{
- bool retValue(false);
-
- HbMessageBox confirmationQuery(HbMessageBox::MessageTypeQuestion);
- confirmationQuery.setDismissPolicy(HbDialog::NoDismiss);
- confirmationQuery.setTimeout(HbDialog::NoTimeout);
- confirmationQuery.setIconVisible(true);
+ if (action == mDeleteNoteAction) {
+ mOwner->deleteNote();
- QString displayText;
- displayText = displayText.append(hbTrId("txt_notes_info_delete_note"));
-
- confirmationQuery.setText(displayText);
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ bool status = false;
- confirmationQuery.setPrimaryAction(new HbAction(
- hbTrId("txt_notes_button_dialog_delete"), &confirmationQuery));
- confirmationQuery.setSecondaryAction(new HbAction(
- hbTrId("txt_common_button_cancel"), &confirmationQuery));
- HbAction *selected = confirmationQuery.exec();
- if (selected == confirmationQuery.primaryAction()) {
- retValue = true;
+ // Now close the editor.
+ window->removeView(mEditor);
+
+ mOwner->editingCompleted(status);
}
-
- return retValue;
}
// End of file --Don't remove this.
--- a/notes/notesui/noteseditor/src/notestodoeditor.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/src/notestodoeditor.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -32,10 +32,9 @@
#include <HbAction>
#include <HbComboBox>
#include <HbExtendedLocale>
-#include <HbDateTimePicker>
#include <HbLabel>
#include <HbPushButton>
-#include <HbCheckbox>
+#include <HbCheckBox>
#include <HbDialog>
#include <HbGroupBox>
#include <HbMessageBox>
@@ -296,7 +295,7 @@
// Store the current view and set our view as the current view.
HbMainWindow *window = hbInstance->allMainWindows().first();
- HbAction *action = new HbAction(Hb::BackAction);
+ HbAction *action = new HbAction(Hb::BackNaviAction);
mEditor->setNavigationAction(action);
connect(
action, SIGNAL(triggered()),
@@ -636,14 +635,33 @@
*/
void NotesTodoEditor::handleDeleteAction()
{
- if (showDeleteConfirmationQuery()) {
- // Delete the to-do entry.
- mOwner->deleteNote();
+ HbMessageBox *confirmationQuery = new HbMessageBox(
+ HbMessageBox::MessageTypeQuestion);
+ confirmationQuery->setDismissPolicy(HbDialog::NoDismiss);
+ confirmationQuery->setTimeout(HbDialog::NoTimeout);
+ confirmationQuery->setIconVisible(true);
+
+ QString displayText;
+ displayText = displayText.append(hbTrId("txt_notes_info_delete_todo_note"));
+
+ confirmationQuery->setText(displayText);
- // Close the to-do editor.
- close();
+ // Remove the default actions.
+ QList<QAction *> defaultActions = confirmationQuery->actions();
+ for (int index=0;index<defaultActions.count();index++) {
+ confirmationQuery->removeAction(defaultActions[index]);
}
+ defaultActions.clear();
+ // Add delete and cancel actions.
+ mDeleteTodoAction = new HbAction(
+ hbTrId("txt_notes_button_dialog_delete"));
+ mCancelDeleteAction = new HbAction(
+ hbTrId("txt_common_button_cancel"));
+ confirmationQuery->addAction(mDeleteTodoAction);
+ confirmationQuery->addAction((mCancelDeleteAction));
+
+ confirmationQuery->open(this, SLOT(selectedAction(HbAction*)));
}
/*!
@@ -653,35 +671,20 @@
{
// Close the to-do editor
close();
-
}
-/* !
- Show the delete confirmation query.
+/*!
+ Slot to handle selected action in delete confirmation note.
*/
-bool NotesTodoEditor::showDeleteConfirmationQuery()
+void NotesTodoEditor::selectedAction(HbAction *action)
{
- bool retValue(false);
-
- HbMessageBox confirmationQuery(HbMessageBox::MessageTypeQuestion);
- confirmationQuery.setDismissPolicy(HbDialog::NoDismiss);
- confirmationQuery.setTimeout(HbDialog::NoTimeout);
- confirmationQuery.setIconVisible(true);
-
- QString displayText;
- displayText = displayText.append(hbTrId("txt_notes_info_delete_todo_note"));
+ if (action==mDeleteTodoAction) {
+ // Delete the to-do entry.
+ mOwner->deleteNote();
- confirmationQuery.setText(displayText);
+ // Close the to-do editor.
+ close();
+ }
+}
- confirmationQuery.setPrimaryAction(new HbAction(
- hbTrId("txt_notes_button_dialog_delete"), &confirmationQuery));
- confirmationQuery.setSecondaryAction(new HbAction(
- hbTrId("txt_common_button_cancel"), &confirmationQuery));
- HbAction *selected = confirmationQuery.exec();
- if (selected == confirmationQuery.primaryAction()) {
- retValue = true;
- }
-
- return retValue;
-}
// End of file --Don't remove this.
--- a/notes/notesui/noteseditor/src/notestodoeditorcustomitem.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/noteseditor/src/notestodoeditorcustomitem.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -181,13 +181,14 @@
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);
mTimePickerDialog->setHeadingWidget(timeLabel);
// Create the tumbler.
HbDateTimePicker *timePicker = new HbDateTimePicker(mTimePickerDialog);
-
+
// Set the format for time picker.
timePicker->setDisplayFormat(mNotesTodoeditorPvt->timeFormatString());
// Set the time needs to be displayed in time picker.
@@ -197,21 +198,15 @@
// Set the tumbler as the content widget.
mTimePickerDialog->setContentWidget(timePicker);
-
- HbAction *okAction = new HbAction(QString("Ok"), mTimePickerDialog);
- mTimePickerDialog->setPrimaryAction(okAction);
- connect(
- okAction, SIGNAL(triggered()),
- this, SLOT(handleOkAction()));
+ mOkAction = new HbAction(
+ hbTrId("txt_common_button_ok"), mTimePickerDialog);
+ mTimePickerDialog->addAction(mOkAction);
- HbAction *cancelAction = new HbAction(QString("Cancel"), mTimePickerDialog);
- mTimePickerDialog->setSecondaryAction(cancelAction);
+ mCancelAction = new HbAction(
+ hbTrId("txt_common_button_cancel"), mTimePickerDialog);
+ mTimePickerDialog->addAction(mCancelAction);
- connect(
- cancelAction, SIGNAL(triggered()),
- this, SLOT(handleCancelAction()));
-
- mTimePickerDialog->exec();
+ mTimePickerDialog->open(this, SLOT(selectedAction(HbAction *)));
}
/*!
@@ -227,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);
@@ -238,32 +234,91 @@
datePicker->setDateRange(QDate::fromString("01/01/1900",
mNotesTodoeditorPvt->dateFormatString()), QDate::fromString("31/12/2100",
mNotesTodoeditorPvt->dateFormatString()));
-
+
// Set the date format in date picker.
datePicker->setDisplayFormat(mNotesTodoeditorPvt->dateFormatString());
// Set the date needs to be in focus in date picker.
datePicker->setDate(QDate::fromString(mDateWidget->text(),
mNotesTodoeditorPvt->dateFormatString()));
-
+
// Set the tumbler as the content widget.
mDatePickerDialog->setContentWidget(datePicker);
+ mOkAction = new HbAction(
+ hbTrId("txt_common_button_ok"), mDatePickerDialog);
+ mDatePickerDialog->addAction(mOkAction);
- HbAction *okAction = new HbAction(QString("Ok"), mDatePickerDialog);
- mDatePickerDialog->setPrimaryAction(okAction);
- connect(
- okAction, SIGNAL(triggered()),
- this, SLOT(handleOkAction()));
+ mCancelAction = new HbAction(
+ hbTrId("txt_common_button_cancel"), mDatePickerDialog);
+ mDatePickerDialog->addAction(mCancelAction);
+
+ mDatePickerDialog->open(this, SLOT(selectedAction(HbAction *)));
+}
+
+/*
+ Launches date picker for selecting the due date
+ */
+void NotesTodoEditorCustomItem::selectDueDate()
+{
+ if( mDueDateItem->isDown()) {
+ mDueDateItem->setDown(false);
+ return;
+ }
+
+ mDueDatePickerIsActive = true;
+
+ if (mDatePickerDialog) {
+ delete mDatePickerDialog;
+ }
- HbAction *cancelAction = new HbAction(QString("Cancel"), mDatePickerDialog);
- mDatePickerDialog->setSecondaryAction(cancelAction);
- connect(
- cancelAction, SIGNAL(triggered()),
- this, SLOT(handleCancelAction()));
+ // Create the dialog.
+ 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.
+ datePicker->setDateRange(QDate::fromString("01/01/1900",
+ mNotesTodoeditorPvt->dateFormatString()), QDate::fromString("31/12/2100",
+ mNotesTodoeditorPvt->dateFormatString()));
+
+ // Set the format of date picker.
+ datePicker->setDisplayFormat(mNotesTodoeditorPvt->dateFormatString());
+ // Set the date needs to be displayed in datepicker.
+ datePicker->setDate(QDate::fromString(mDueDateItem->text(),
+ mNotesTodoeditorPvt->dateFormatString()));
+
+ // Set the heading text
+ HbLabel *label = new HbLabel(hbTrId("txt_notes_formlabel_due_date"));
+ mDatePickerDialog->setHeadingWidget(label);
- mDatePickerDialog->exec();
+ // Set the tumbler as the content widget.
+ mDatePickerDialog->setContentWidget(datePicker);
+
+ mOkAction = new HbAction(
+ hbTrId("txt_common_button_ok"), mDatePickerDialog);
+ mDatePickerDialog->addAction(mOkAction);
+
+ mCancelAction = new HbAction(
+ hbTrId("txt_common_button_cancel"), mDatePickerDialog);
+ mDatePickerDialog->addAction(mCancelAction);
+
+ mDatePickerDialog->open(this, SLOT(selectedAction(HbAction *)));
}
+
+/*!
+ Slot to handle the selected action.
+ */
+void NotesTodoEditorCustomItem::selectedAction(HbAction *action)
+{
+ if (action == mOkAction) {
+ handleOkAction();
+ }
+}
+
/*!
Handles the ok action of date/time picker dialog.
*/
@@ -339,77 +394,6 @@
alarmDateItem->setContentWidgetData("alarmDate",dueDateText);
}
}
-
- handleCancelAction();
-}
-/*!
- Handles the ok action of date/time picker dialog.
- */
-void NotesTodoEditorCustomItem::handleCancelAction()
-{
- // Close the dialog.
- if (mDatePickerDialog) {
- mDatePickerDialog->close();
- mDatePickerDialog->deleteLater();
- }else {
- mTimePickerDialog->close();
- mTimePickerDialog->deleteLater();
- }
-}
-
-/*
- Launches date picker for selecting the due date
- */
-void NotesTodoEditorCustomItem::selectDueDate()
-{
- if( mDueDateItem->isDown()) {
- mDueDateItem->setDown(false);
- return;
- }
-
- mDueDatePickerIsActive = true;
-
- if (mDatePickerDialog) {
- delete mDatePickerDialog;
- }
-
- // Create the dialog.
- mDatePickerDialog = new HbDialog;
- mDatePickerDialog->setTimeout(HbDialog::NoTimeout);
- mDatePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
-
- // Create date picker
- HbDateTimePicker *datePicker = new HbDateTimePicker(mDatePickerDialog);
- // Set the min/max date for the editor.
- datePicker->setDateRange(QDate::fromString("01/01/1900",
- mNotesTodoeditorPvt->dateFormatString()), QDate::fromString("31/12/2100",
- mNotesTodoeditorPvt->dateFormatString()));
-
- // Set the format of date picker.
- datePicker->setDisplayFormat(mNotesTodoeditorPvt->dateFormatString());
- // Set the date needs to be displayed in datepicker.
- datePicker->setDate(QDate::fromString(mDueDateItem->text(),
- mNotesTodoeditorPvt->dateFormatString()));
-
- // Set the heading text
- HbLabel *label = new HbLabel(hbTrId("txt_notes_formlabel_due_date"));
- mDatePickerDialog->setHeadingWidget(label);
-
- // Add actions to date picker
- HbAction *okAction = new HbAction(tr("Ok"));
- mDatePickerDialog->setPrimaryAction(okAction);
- connect(
- okAction, SIGNAL(triggered()),
- this, SLOT(handleOkAction()));
-
- HbAction *cancelAction = new HbAction(tr("Cancel"));
- mDatePickerDialog->setSecondaryAction(cancelAction);
- connect(
- cancelAction, SIGNAL(triggered()),
- this, SLOT(handleCancelAction()));
-
- mDatePickerDialog->setContentWidget(datePicker);
- mDatePickerDialog->exec();
}
// End of file --Don't delete.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesmodel/bwins/notesmodelu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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
+
--- a/notes/notesui/notesmodel/inc/notesmodel.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesmodel/inc/notesmodel.h Mon Jun 28 15:22:02 2010 +0530
@@ -55,6 +55,7 @@
void populateSourceModel(QList<ulong> ids);
void addEntryToModel(ulong id);
void removeEntryFromModel(ulong id);
+ void handleInstanceViewCreationCompleted(int status);
private:
void modifyEntryInModel(ulong id, int row);
--- a/notes/notesui/notesmodel/src/notesmodel.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesmodel/src/notesmodel.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -68,8 +68,10 @@
mAgendaUtil, SIGNAL(entryUpdated(ulong)),
this, SLOT(updateSourceModel(ulong)));
- // Populate the model in a different thread.
- QTimer::singleShot(1, this, SLOT(populateSourceModel()));
+ // Connect for instance view creation completed signal
+ connect(
+ mAgendaUtil, SIGNAL(instanceViewCreationCompleted(int)),
+ this,SLOT(handleInstanceViewCreationCompleted(int)));
}
/*!
@@ -325,6 +327,15 @@
}
/*!
+ Populate the model after instance view creation.
+ */
+void NotesModel::handleInstanceViewCreationCompleted(int status)
+{
+ Q_UNUSED(status);
+ populateSourceModel();
+}
+
+/*!
Modifies the content of a given `row' with the data of the entry given by
`id'.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/notes/notesui/notesmodelhandler/bwins/notesmodelhandleru.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesui.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/notesviewmanager.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviewmanager/inc/notesviewmanager.h Mon Jun 28 15:22:02 2010 +0530
@@ -27,6 +27,7 @@
// Forward declarations
class HbMainWindow;
+class HbAction;
class NotesMainView;
class NotesModel;
class AgendaUtil;
@@ -54,11 +55,12 @@
void loadTodoView();
void loadFavoritesView();
void loadNoteView();
- bool showDeleteConfirmationQuery(ulong entryId);
private slots:
void loadOtherViews();
void deleteEntryFromView(ulong entryId);
+ void selectedAction(HbAction *action);
+ void handleInstanceViewCreationCompleted(int status);
private:
NotesAppControllerIf &mAppControllerIf;
@@ -70,6 +72,10 @@
NotesFavoriteView *mFavoriteView;
NotesNoteView *mNoteView;
+ HbAction *mDeleteAction;
+ HbAction *mCancelAction;
+ ulong mEntryId;
+
private:
Q_DISABLE_COPY(NotesViewManager)
};
--- a/notes/notesui/notesviewmanager/src/notesviewmanager.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviewmanager/src/notesviewmanager.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -24,6 +24,8 @@
#include <HbListView>
#include <HbMessageBox>
#include <HbAction>
+#include <hbapplication> // hbapplication
+#include <hbactivitymanager> // hbactivitymanager
// User includes
#include "notesviewmanager.h"
@@ -59,8 +61,40 @@
mAgendaUtil = mAppControllerIf.agendaUtil();
- // Load the main view at the start up.
- loadNotesMainView();
+ // 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)));
// Delay loading of other views till main view is loaded.
connect(
@@ -90,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);
@@ -249,21 +315,12 @@
}
/*!
- Delete the entry.
- */
-void NotesViewManager::deleteEntryFromView(ulong entryId)
-{
- if (showDeleteConfirmationQuery(entryId)) {
- // Delete the given note.
- mAgendaUtil->deleteEntry(entryId);
- }
-}
-
-/*!
Loads other views from the docml file.
*/
void NotesViewManager::loadOtherViews()
{
+ mMainView->setupAfterViewReady();
+
// Load the collection view.
loadNotesCollectionView();
// Load the to-do view.
@@ -280,38 +337,77 @@
this, SLOT(loadOtherViews()));
}
-/* !
- Show the delete confirmation query.
+/*!
+ Delete the entry.
*/
-bool NotesViewManager::showDeleteConfirmationQuery(ulong noteId)
+void NotesViewManager::deleteEntryFromView(ulong entryId)
{
- bool retValue(false);
-
- HbMessageBox confirmationQuery(HbMessageBox::MessageTypeQuestion);
- confirmationQuery.setDismissPolicy(HbDialog::NoDismiss);
- confirmationQuery.setTimeout(HbDialog::NoTimeout);
- confirmationQuery.setIconVisible(true);
+ mEntryId = entryId;
+ HbMessageBox *confirmationQuery = new HbMessageBox(
+ HbMessageBox::MessageTypeQuestion);
+ confirmationQuery->setDismissPolicy(HbDialog::NoDismiss);
+ confirmationQuery->setTimeout(HbDialog::NoTimeout);
+ confirmationQuery->setIconVisible(true);
QString displayText;
QString x;
- AgendaEntry entry = mAgendaUtil->fetchById(noteId);
+ AgendaEntry entry = mAgendaUtil->fetchById(entryId);
if (AgendaEntry::TypeTodo == entry.type()) {
displayText += hbTrId("txt_notes_info_delete_todo_note");
} else {
displayText += hbTrId("txt_notes_info_delete_note");
}
- confirmationQuery.setText(displayText);
+ 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();
+
+ // Add delete and cancel actions
+ mDeleteAction = new HbAction(hbTrId("txt_notes_button_dialog_delete"));
+ mCancelAction = new HbAction(hbTrId("txt_common_button_cancel"));
+
+ confirmationQuery->addAction(mDeleteAction);
+ confirmationQuery->addAction(mCancelAction);
+
+ confirmationQuery->open(this, SLOT(selectedAction(HbAction*)));
+}
- confirmationQuery.setPrimaryAction(new HbAction(
- hbTrId("txt_notes_button_dialog_delete"), &confirmationQuery));
- confirmationQuery.setSecondaryAction(new HbAction(
- hbTrId("txt_common_button_cancel"), &confirmationQuery));
- HbAction *selected = confirmationQuery.exec();
- if (selected == confirmationQuery.primaryAction()) {
- retValue = true;
+/*!
+ Slot to handle the delete action
+ */
+void NotesViewManager::selectedAction(HbAction *action)
+{
+ if (action == mDeleteAction) {
+ // Delete the given note.
+ mAgendaUtil->deleteEntry(mEntryId);
}
+}
- return retValue;
+/*!
+ Slot to handle instance view creation complete.
+ */
+void NotesViewManager::handleInstanceViewCreationCompleted(int status)
+{
+ Q_UNUSED(status)
+
+ // Update the title for main view.
+ mMainView->updateTitle();
+
+ // Populate collections view.
+ mCollectionView->populateListView();
+
+ // 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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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/notescollectionview.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/inc/notescollectionview.h Mon Jun 28 15:22:02 2010 +0530
@@ -47,6 +47,7 @@
public:
NOTESVIEWS_EXPORT void setupView(
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
+ NOTESVIEWS_EXPORT void populateListView();
private slots:
void displayAllNotesView();
@@ -60,7 +61,7 @@
void handleActionStateChanged();
private:
- void populateListView();
+
int todosCount();
int recentNotesCount();
--- a/notes/notesui/notesviews/inc/notesfavoriteview.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/inc/notesfavoriteview.h Mon Jun 28 15:22:02 2010 +0530
@@ -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);
@@ -67,7 +69,10 @@
void handleActionStateChanged();
void handleOrientationChanged(Qt::Orientation);
void openNote();
-
+ void selectedMenuAction(HbAction *action);
+ void handleMenuClosed();
+ void updateView(ulong id=0);
+
private:
HbListView *mListView;
HbAbstractViewItem *mSelectedItem;
@@ -79,7 +84,9 @@
HbAction *mRemoveFavoriteAction;
HbAction *mMarkTodoAction;
HbAction *mOpenAction;
-
+
+ HbLabel *mEmptyListLabel;
+
AgendaUtil *mAgendaUtil;
NotesAppControllerIf *mAppControllerIf;
@@ -87,6 +94,7 @@
NotesModel *mNotesModel;
NotesSortFilterProxyModel *mProxyModel;
NotesEditor *mNotesEditor;
+ bool mIsLongTop;
};
#endif // NOTESFAVORITEVIEW_H
--- a/notes/notesui/notesviews/inc/notesmainview.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/inc/notesmainview.h Mon Jun 28 15:22:02 2010 +0530
@@ -53,6 +53,10 @@
public:
NOTESVIEWS_EXPORT void setupView(
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
+ NOTESVIEWS_EXPORT void setupAfterViewReady();
+ NOTESVIEWS_EXPORT void updateTitle();
+ NOTESVIEWS_EXPORT void captureScreenShot(bool captureScreenShot = false);
+
signals:
void deleteEntry(ulong entryId);
@@ -74,7 +78,10 @@
void updateSubTitle(ulong id=0);
void markNoteAsTodo();
void openNote();
-
+ void selectedMenuAction(HbAction *action);
+ void handleMenuClosed();
+ void saveActivity();
+
private:
HbListView *mListView;
HbAbstractViewItem *mSelectedItem;
@@ -93,6 +100,7 @@
HbAction *mOpenAction;
HbGroupBox *mSubTitle;
+ HbLabel *mEmptyListLabel;
AgendaUtil *mAgendaUtil;
@@ -102,6 +110,9 @@
NotesSortFilterProxyModel *mProxyModel;
NotesEditor *mNotesEditor;
AgendaEventViewer *mAgendaEventViewer;
+ bool mIsLongTop;
+ bool mIsScreenShotCapruted; // check if the screenshot captured is valid
+ QVariantHash mScreenShot; // screenshot
};
#endif // NOTESMAINVIEW_H
--- a/notes/notesui/notesviews/inc/notesnoteview.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/inc/notesnoteview.h Mon Jun 28 15:22:02 2010 +0530
@@ -32,6 +32,7 @@
class HbListView;
class HbAction;
class HbAbstractViewItem;
+class HbLabel;
class NotesModel;
class NotesDocLoader;
class AgendaUtil;
@@ -49,7 +50,9 @@
public:
NOTESVIEWS_EXPORT void setupView(
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
-
+ NOTESVIEWS_EXPORT void updateNoteView();
+
+
signals:
void deleteEntry(ulong entryId);
@@ -67,6 +70,9 @@
void handleActionStateChanged();
void handleOrientationChanged(Qt::Orientation);
void openNote();
+ void selectedMenuAction(HbAction *action);
+ void handleMenuClosed();
+ void updateView(ulong id=0);
private:
HbListView *mListView;
@@ -81,6 +87,8 @@
HbAction *mMarkTodoAction;
HbAction *mOpenAction;
+ HbLabel *mEmptyListLabel;
+
AgendaUtil *mAgendaUtil;
NotesAppControllerIf *mAppControllerIf;
@@ -88,6 +96,7 @@
NotesModel *mNotesModel;
NotesSortFilterProxyModel *mProxyModel;
NotesEditor *mNotesEditor;
+ bool mIsLongTop;
};
#endif // NOTESNOTEVIEW_H
--- a/notes/notesui/notesviews/inc/notestodoview.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/inc/notestodoview.h Mon Jun 28 15:22:02 2010 +0530
@@ -32,6 +32,7 @@
class HbAction;
class HbAbstractViewItem;
class HbGroupBox;
+class HbLabel;
class NotesModel;
class NotesDocLoader;
class AgendaUtil;
@@ -50,7 +51,8 @@
public:
NOTESVIEWS_EXPORT void setupView(
NotesAppControllerIf &controllerIf, NotesDocLoader *docLoader);
-
+ NOTESVIEWS_EXPORT void updateTitle();
+
signals:
void deleteEntry(ulong entryId);
@@ -71,6 +73,8 @@
void handleOrientationChanged(Qt::Orientation);
void updateSubTitle(ulong id=0);
void openTodo();
+ void selectedMenuAction(HbAction *action);
+ void handleMenuClosed();
private:
HbListView *mListView;
@@ -85,7 +89,8 @@
HbAction *mOpenAction;
HbGroupBox *mSubTitle;
-
+ HbLabel *mEmptyListLabel;
+
AgendaUtil *mAgendaUtil;
NotesAppControllerIf *mAppControllerIf;
@@ -94,6 +99,7 @@
NotesSortFilterProxyModel *mProxyModel;
NotesEditor *mNotesEditor;
AgendaEventViewer *mAgendaEventViewer;
+ bool mIsLongTop;
};
#endif // NOTESTODOVIEW_H
--- a/notes/notesui/notesviews/inc/notesviewsdefines.h Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/inc/notesviewsdefines.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/src/notescollectionview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -117,9 +117,6 @@
mListView, SIGNAL(activated(const QModelIndex &)),
this, SLOT(handleActivated(const QModelIndex &)));
- // Populate the content of the view.
- populateListView();
-
// Get the toolbar/menu actions.
mAllNotesAction = static_cast<HbAction *> (
mDocLoader->findObject("allNotesAction"));
@@ -158,6 +155,46 @@
}
/*!
+ Populate the content of the view.
+ */
+void NotesCollectionView::populateListView()
+{
+ QStandardItemModel *model = new QStandardItemModel(this);
+ model->setColumnCount(1);
+
+ QString countString(hbTrId("txt_notes_list_note_count"));
+
+ // Add To-do's item.
+ QStandardItem *item = new QStandardItem();
+ QStringList todoStringList;
+ todoStringList.append(hbTrId("txt_notes_list_todos"));
+ todoStringList.append(countString.arg(QString::number(todosCount())));
+ item->setData(todoStringList, Qt::DisplayRole);
+ model->appendRow(item);
+
+ // Add Favorites item.
+ item = new QStandardItem();
+ QStringList favStringList;
+ favStringList.append(hbTrId("txt_notes_list_favorites"));
+ favStringList.append(countString.arg(mFavouriteModel->rowCount()));
+ item->setData(favStringList, Qt::DisplayRole);
+ model->appendRow(item);
+
+ // Add Recent notes item.
+ item = new QStandardItem();
+ QStringList notesStringList;
+ notesStringList.append(hbTrId("txt_notes_list_plain_notes"));
+ notesStringList.append(
+ countString.arg(QString::number(recentNotesCount())));
+ item->setData(notesStringList, Qt::DisplayRole);
+ model->appendRow(item);
+
+ HbStyleLoader::registerFilePath(":/style");
+ mListView->setLayoutName("custom");
+ mListView->setModel(model);
+}
+
+/*!
Displays all notes view.
*/
void NotesCollectionView::displayAllNotesView()
@@ -215,6 +252,8 @@
// Cleanup.
mNotesEditor->deleteLater();
+
+ mAppControllerIf->switchToView(NotesNamespace::NotesMainViewId);
}
/*!
@@ -297,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);
+ }
}
/*!
@@ -315,46 +358,6 @@
mViewCollectionAction->setChecked(true);
}
-/*!
- Populate the content of the view.
- */
-void NotesCollectionView::populateListView()
-{
- QStandardItemModel *model = new QStandardItemModel(this);
- model->setColumnCount(1);
-
- QString countString(hbTrId("txt_notes_list_note_count"));
-
- // Add To-do's item.
- QStandardItem *item = new QStandardItem();
- QStringList todoStringList;
- todoStringList.append(hbTrId("txt_notes_list_todos"));
- todoStringList.append(countString.arg(QString::number(todosCount())));
- item->setData(todoStringList, Qt::DisplayRole);
- model->appendRow(item);
-
- // Add Favorites item.
- item = new QStandardItem();
- QStringList favStringList;
- favStringList.append(hbTrId("txt_notes_list_favorites"));
- favStringList.append(countString.arg(mFavouriteModel->rowCount()));
- item->setData(favStringList, Qt::DisplayRole);
- model->appendRow(item);
-
- // Add Recent notes item.
- item = new QStandardItem();
- QStringList notesStringList;
- notesStringList.append(hbTrId("txt_notes_list_plain_notes"));
- notesStringList.append(
- countString.arg(QString::number(recentNotesCount())));
- item->setData(notesStringList, Qt::DisplayRole);
- model->appendRow(item);
-
- HbStyleLoader::registerFilePath(":/style");
- mListView->setLayoutName("custom");
- mListView->setModel(model);
-}
-
/*!
Returns the todos count
--- a/notes/notesui/notesviews/src/notesfavoriteview.cpp Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/src/notesfavoriteview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -30,6 +30,7 @@
#include <HbAbstractViewItem>
#include <HbGroupBox>
#include <HbListViewItem>
+#include <HbNotificationDialog>
// User includes
#include "notesfavoriteview.h"
@@ -56,7 +57,8 @@
NotesFavoriteView::NotesFavoriteView(QGraphicsWidget *parent)
:HbView(parent),
mSelectedItem(0),
- mDeleteAction(0)
+ mDeleteAction(0),
+ mIsLongTop(false)
{
// Nothing yet.
}
@@ -116,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"));
@@ -131,8 +137,7 @@
mViewCollectionAction = static_cast<HbAction *> (
mDocLoader->findObject("displayCollectionsAction"));
- mViewCollectionAction->setCheckable(true);
- mViewCollectionAction->setChecked(true);
+
connect(
mViewCollectionAction, SIGNAL(changed()),
this, SLOT(handleActionStateChanged()));
@@ -147,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.
@@ -176,35 +199,37 @@
*/
void NotesFavoriteView::handleItemReleased(const QModelIndex &index)
{
- // Sanity check.
- if (!index.isValid()) {
- return;
- }
+ if (!mIsLongTop) {
+ // Sanity check.
+ if (!index.isValid()) {
+ return;
+ }
- // First get the id of the note and get the corresponding information from
- // agendautil.
- ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
+ // First get the id of the note and get the corresponding information from
+ // agendautil.
+ ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
- if (0 >= noteId) {
- // Something wrong.
- return;
- }
+ if (0 >= noteId) {
+ // Something wrong.
+ return;
+ }
- // Get the entry details.
- AgendaEntry entry = mAgendaUtil->fetchById(noteId);
+ // Get the entry details.
+ AgendaEntry entry = mAgendaUtil->fetchById(noteId);
+
+ if (entry.isNull()) {
- if (entry.isNull()) {
+ // Entry invalid.
+ return;
+ }
- // Entry invalid.
- return;
+ // Now launch the editor with the obtained info.
+ mNotesEditor = new NotesEditor(mAgendaUtil, this);
+ connect(
+ mNotesEditor, SIGNAL(editingCompleted(bool)),
+ this, SLOT(handleEditingCompleted(bool)));
+ mNotesEditor->edit(entry);
}
-
- // Now launch the editor with the obtained info.
- mNotesEditor = new NotesEditor(mAgendaUtil, this);
- connect(
- mNotesEditor, SIGNAL(editingCompleted(bool)),
- this, SLOT(handleEditingCompleted(bool)));
- mNotesEditor->edit(entry);
}
/*!
@@ -219,6 +244,7 @@
HbAbstractViewItem *item, const QPointF &coords)
{
mSelectedItem = item;
+ mIsLongTop = true;
// Get the entry of the selected item.
ulong noteId = item->modelIndex().data(
@@ -227,37 +253,28 @@
// Display a context specific menu.
HbMenu *contextMenu = new HbMenu();
+ connect(
+ contextMenu,SIGNAL(aboutToClose()),
+ this, SLOT(handleMenuClosed()));
// Add actions to the context menu.
mOpenAction =
contextMenu->addAction(hbTrId("txt_common_menu_open"));
- connect(
- mOpenAction, SIGNAL(triggered()),
- this, SLOT(openNote()));
mDeleteAction =
contextMenu->addAction(hbTrId("txt_common_menu_delete"));
- connect(
- mDeleteAction, SIGNAL(triggered()),
- this, SLOT(deleteNote()));
mRemoveFavoriteAction =
contextMenu->addAction(
hbTrId("txt_notes_menu_remove_from_favorites"));
- connect(
- mRemoveFavoriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsNotFavourite()));
-
mMarkTodoAction =
contextMenu->addAction(
hbTrId("txt_notes_menu_make_it_as_todo_note"));
- connect(
- mMarkTodoAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsTodo()));
// Show the menu.
- contextMenu->exec(coords);
+ contextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ contextMenu->setPreferredPos(coords);
}
/*!
@@ -352,6 +369,14 @@
// Delete the old entry.
mAgendaUtil->deleteEntry(entry.id());
+
+ // Show the soft notification.
+ HbNotificationDialog *notificationDialog = new HbNotificationDialog();
+ notificationDialog->setTimeout(
+ HbNotificationDialog::ConfirmationNoteTimeout);
+ notificationDialog->setTitle(
+ hbTrId("txt_notes_dpopinfo_note_moved_to_todos"));
+ notificationDialog->show();
}
/*!
@@ -430,5 +455,47 @@
// Launch the notes editor with the obtained info.
mNotesEditor->edit(entry);
}
+
+/*
+ Slot to handle the context menu actions.
+ */
+void NotesFavoriteView::selectedMenuAction(HbAction *action)
+{
+ if(action == mOpenAction) {
+ openNote();
+ } else if (action == mDeleteAction) {
+ deleteNote();
+ } else if (action ==mRemoveFavoriteAction){
+ markNoteAsNotFavourite();
+ } else if (action == mMarkTodoAction) {
+ markNoteAsTodo();
+ }
+}
+
+/*!
+ Slot to handle the context menu closed.
+ */
+void NotesFavoriteView::handleMenuClosed()
+{
+ 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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/src/notesmainview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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
@@ -57,7 +60,9 @@
NotesMainView::NotesMainView(QGraphicsWidget *parent)
:HbView(parent),
mSelectedItem(0),
- mDeleteAction(0)
+ mDeleteAction(0),
+ mIsLongTop(false),
+ mIsScreenShotCapruted(false)
{
// Nothing yet.
}
@@ -121,10 +126,41 @@
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 *> (
+ mSubTitle = static_cast<HbGroupBox *>(
mDocLoader->findWidget("viewHeading"));
+ // Handles the orientation change for list items
+ HbMainWindow *window = hbInstance->allMainWindows().first();
+ handleOrientationChanged(window->orientation());
+ connect(
+ window, SIGNAL(orientationChanged(Qt::Orientation)),
+ this, SLOT(handleOrientationChanged(Qt::Orientation)));
+
+ // 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()
+{
// Get the toolbar/menu actions.
mAddNoteAction = static_cast<HbAction *> (
mDocLoader->findObject("newNoteAction"));
@@ -159,19 +195,6 @@
mViewCollectionAction, SIGNAL(triggered()),
this, SLOT(displayCollectionView()));
- mSubTitle = static_cast<HbGroupBox *>(
- mDocLoader->findWidget("viewHeading"));
-
- // Handles the orientation change for list items
- HbMainWindow *window = hbInstance->allMainWindows().first();
- handleOrientationChanged(window->orientation());
- connect(
- window, SIGNAL(orientationChanged(Qt::Orientation)),
- this, SLOT(handleOrientationChanged(Qt::Orientation)));
-
- // Update sub heading text for main view.
- updateSubTitle();
-
connect(
mAgendaUtil, SIGNAL(entryAdded(ulong)),
this,SLOT(updateSubTitle(ulong)));
@@ -181,10 +204,14 @@
connect(
mAgendaUtil, SIGNAL(entryUpdated(ulong)),
this, SLOT(updateSubTitle(ulong)));
+}
- // Set the graphics size for the icons.
- HbListViewItem *prototype = mListView->listItemPrototype();
- prototype->setGraphicsSize(HbListViewItem::SmallIcon);
+/*
+ Updates the title text for the first launch
+ */
+void NotesMainView::updateTitle()
+{
+ updateSubTitle();
}
/*!
@@ -200,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);
}
/*!
@@ -212,46 +242,51 @@
*/
void NotesMainView::handleItemReleased(const QModelIndex &index)
{
- // Sanity check.
- if (!index.isValid()) {
- return;
- }
+ if(!mIsLongTop) {
+ // Sanity check.
+ if (!index.isValid()) {
+ return;
+ }
+
+ // First get the id of the note and get the corresponding information from
+ // agendautil.
+ ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
- // First get the id of the note and get the corresponding information from
- // agendautil.
- ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
+ if (0 >= noteId) {
+ // Something wrong.
+ return;
+ }
- if (0 >= noteId) {
- // Something wrong.
- return;
- }
+ // Get the entry details.
+ AgendaEntry entry = mAgendaUtil->fetchById(noteId);
+ if (entry.isNull()) {
+ // Entry invalid.
+ return;
+ }
- // Get the entry details.
- AgendaEntry entry = mAgendaUtil->fetchById(noteId);
- if (entry.isNull()) {
- // Entry invalid.
- return;
- }
-
- if(AgendaEntry::TypeTodo == entry.type()) {
- // Construct agenda event viewer.
- mAgendaEventViewer = new AgendaEventViewer(mAgendaUtil, this);
+ if(AgendaEntry::TypeTodo == entry.type()) {
+ // Construct agenda event viewer.
+ mAgendaEventViewer = new AgendaEventViewer(mAgendaUtil, this);
- connect(
- mAgendaEventViewer, SIGNAL(viewingCompleted(const QDate)),
- this, SLOT(handleViewingCompleted()));
- // Launch agenda event viewer
- mAgendaEventViewer->view(
- entry, AgendaEventViewer::ActionEditDelete);
- }else if(AgendaEntry::TypeNote == entry.type()) {
- // Construct notes editor.
- mNotesEditor = new NotesEditor(mAgendaUtil, this);
- connect(
- mNotesEditor, SIGNAL(editingCompleted(bool)),
- this, SLOT(handleEditingCompleted(bool)));
+ connect(
+ mAgendaEventViewer, SIGNAL(viewingCompleted(const QDate)),
+ this, SLOT(handleViewingCompleted()));
+ // Launch agenda event viewer
+ mAgendaEventViewer->view(
+ entry, AgendaEventViewer::ActionEditDelete);
+ }else if(AgendaEntry::TypeNote == entry.type()) {
+ // Construct notes editor.
+ mNotesEditor = new NotesEditor(mAgendaUtil, this);
+ connect(
+ mNotesEditor, SIGNAL(editingCompleted(bool)),
+ this, SLOT(handleEditingCompleted(bool)));
- // Launch the notes editor with the obtained info.
- mNotesEditor->edit(entry);
+ // 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);
}
}
@@ -266,6 +301,7 @@
void NotesMainView::handleItemLongPressed(
HbAbstractViewItem *item, const QPointF &coords)
{
+ mIsLongTop = true;
mSelectedItem = item;
ulong noteId = item->modelIndex().data(
@@ -274,74 +310,48 @@
// Display a context specific menu.
HbMenu *contextMenu = new HbMenu();
+ connect(
+ contextMenu,SIGNAL(aboutToClose()),
+ this, SLOT(handleMenuClosed()));
+
mOpenAction =
contextMenu->addAction(hbTrId("txt_common_menu_open"));
- connect(
- mOpenAction, SIGNAL(triggered()),
- this, SLOT(openNote()));
// Add actions to the context menu.
if (AgendaEntry::TypeTodo == entry.type()) {
mEditTodoAction =
contextMenu->addAction(hbTrId("txt_common_menu_edit"));
- connect(
- mEditTodoAction, SIGNAL(triggered()),
- this, SLOT(editTodo()));
}
mDeleteAction =
contextMenu->addAction(hbTrId("txt_common_menu_delete"));
- connect(
- mDeleteAction, SIGNAL(triggered()),
- this, SLOT(deleteNote()));
if (AgendaEntry::TypeNote == entry.type()) {
if (entry.favourite()) {
mMakeFavouriteAction = contextMenu->addAction(
hbTrId("txt_notes_menu_remove_from_favorites"));
-
- connect(
- mMakeFavouriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsFavourite()));
-
} else {
mMakeFavouriteAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_favorite"));
-
- connect(
- mMakeFavouriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsFavourite()));
}
mMarkTodoAction =
contextMenu->addAction(
hbTrId("txt_notes_menu_make_it_as_todo_note"));
- connect(
- mMarkTodoAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsTodo()));
} else if (AgendaEntry::TypeTodo == entry.type()) {
if (AgendaEntry::TodoNeedsAction == entry.status()) {
mTodoStatusAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_done"));
-
- connect(
- mTodoStatusAction , SIGNAL(triggered()),
- this, SLOT(markTodoStatus()));
-
} else if (AgendaEntry::TodoCompleted == entry.status()) {
mTodoStatusAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_not_done"));
-
- connect(
- mTodoStatusAction , SIGNAL(triggered()),
- this, SLOT(markTodoStatus()));
}
}
// Show the menu.
- contextMenu->exec(coords);
-
+ contextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ contextMenu->setPreferredPos(coords);
}
/*!
@@ -422,7 +432,9 @@
// Cleanup.
mNotesEditor->deleteLater();
-
+ // set captured screenshot as invalid as the control is returned back
+ // to the main view
+ captureScreenShot(false);
}
/*!
@@ -430,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);
@@ -453,10 +466,10 @@
*/
void NotesMainView::handleViewingCompleted()
{
-
-
mAgendaEventViewer->deleteLater();
-
+ // set captured screenshot as invalid as the control is returned back
+ // to the main view
+ captureScreenShot(false);
}
/*!
@@ -473,7 +486,6 @@
void NotesMainView::editTodo()
{
-
// Get the selected list item index
QModelIndex index = mSelectedItem->modelIndex();
if (!index.isValid()) {
@@ -494,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);
}
@@ -527,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()));
}
@@ -618,5 +641,77 @@
mAgendaEventViewer->view(
entry, AgendaEventViewer::ActionEditDelete);
}
+ // capture screenshot for future use, if application
+ // is exited/Quit from notesEditor/eventViewer
+ captureScreenShot(true);
}
+
+/*!
+ Slot to handle the selected context menu actions
+ */
+void NotesMainView::selectedMenuAction(HbAction *action)
+{
+ if (action == mOpenAction) {
+ openNote();
+ } else if (action == mEditTodoAction) {
+ editTodo();
+ } else if (action == mDeleteAction) {
+ deleteNote();
+ } else if (action == mMakeFavouriteAction) {
+ markNoteAsFavourite();
+ } else if (action == mMarkTodoAction) {
+ markNoteAsTodo();
+ } else if (action == mTodoStatusAction) {
+ markTodoStatus();
+ }
+}
+
+/*!
+ Slot to handle the context menu closed.
+ */
+void NotesMainView::handleMenuClosed()
+{
+ 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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/src/notesnoteview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -26,6 +26,8 @@
#include <HbGroupBox>
#include <HbListViewItem>
#include <HbInstance>
+#include <HbNotificationDialog>
+#include <HbLabel>
// User includes
#include "notesnoteview.h"
@@ -53,7 +55,8 @@
NotesNoteView::NotesNoteView(QGraphicsWidget *parent)
:HbView(parent),
mSelectedItem(0),
- mDeleteAction(0)
+ mDeleteAction(0),
+ mIsLongTop(false)
{
// Nothing yet.
}
@@ -97,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.
@@ -111,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"));
@@ -126,8 +134,7 @@
mViewCollectionAction = static_cast<HbAction *> (
mDocLoader->findObject("displayCollectionsAction"));
- mViewCollectionAction->setCheckable(true);
- mViewCollectionAction->setChecked(true);
+
connect(
mViewCollectionAction, SIGNAL(changed()),
this, SLOT(handleActionStateChanged()));
@@ -142,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.
*/
@@ -170,34 +197,36 @@
*/
void NotesNoteView::handleItemReleased(const QModelIndex &index)
{
- // Sanity check.
- if (!index.isValid()) {
- return;
- }
+ if(!mIsLongTop) {
+ // Sanity check.
+ if (!index.isValid()) {
+ return;
+ }
- // First get the id of the note and get the corresponding information from
- // agendautil.
- ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
+ // First get the id of the note and get the corresponding information from
+ // agendautil.
+ ulong noteId = index.data(NotesNamespace::IdRole).value<qulonglong>();
- if (0 >= noteId) {
- // Something wrong.
- return;
- }
+ if (0 >= noteId) {
+ // Something wrong.
+ return;
+ }
- // Get the entry details.
- AgendaEntry entry = mAgendaUtil->fetchById(noteId);
+ // Get the entry details.
+ AgendaEntry entry = mAgendaUtil->fetchById(noteId);
- if (entry.isNull()) {
- // Entry invalid.
- return;
+ if (entry.isNull()) {
+ // Entry invalid.
+ return;
+ }
+
+ // Now launch the editor with the obtained info.
+ mNotesEditor = new NotesEditor(mAgendaUtil, this);
+ connect(
+ mNotesEditor, SIGNAL(editingCompleted(bool)),
+ this, SLOT(handleEditingCompleted(bool)));
+ mNotesEditor->edit(entry);
}
-
- // Now launch the editor with the obtained info.
- mNotesEditor = new NotesEditor(mAgendaUtil, this);
- connect(
- mNotesEditor, SIGNAL(editingCompleted(bool)),
- this, SLOT(handleEditingCompleted(bool)));
- mNotesEditor->edit(entry);
}
/*!
@@ -212,6 +241,7 @@
HbAbstractViewItem *item, const QPointF &coords)
{
mSelectedItem = item;
+ mIsLongTop = true;
ulong noteId = item->modelIndex().data(
NotesNamespace::IdRole).value<qulonglong>();
@@ -219,48 +249,32 @@
// Display a context specific menu.
HbMenu *contextMenu = new HbMenu();
+ connect(
+ contextMenu,SIGNAL(aboutToClose()),
+ this, SLOT(handleMenuClosed()));
// Add actions to the context menu.
mOpenAction =
contextMenu->addAction(hbTrId("txt_common_menu_open"));
- connect(
- mOpenAction, SIGNAL(triggered()),
- this, SLOT(openNote()));
mDeleteAction =
contextMenu->addAction(hbTrId("txt_common_menu_delete"));
- connect(
- mDeleteAction, SIGNAL(triggered()),
- this, SLOT(deleteNote()));
if (AgendaEntry::TypeNote == entry.type()) {
if (entry.favourite()) {
- mMakeFavouriteAction =
- contextMenu->addAction(
+ mMakeFavouriteAction = contextMenu->addAction(
hbTrId("txt_notes_menu_remove_from_favorites"));
-
- connect(
- mMakeFavouriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsFavourite()));
-
} else {
- mMakeFavouriteAction =
- contextMenu->addAction(
+ mMakeFavouriteAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_favorite"));
-
- connect(
- mMakeFavouriteAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsFavourite()));
}
mMarkTodoAction = contextMenu->addAction(
hbTrId("txt_notes_menu_make_it_as_todo_note"));
- connect(
- mMarkTodoAction, SIGNAL(triggered()),
- this, SLOT(markNoteAsTodo()));
}
// Show the menu.
- contextMenu->exec(coords);
+ contextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ contextMenu->setPreferredPos(coords);
}
/*!
@@ -357,6 +371,13 @@
// Delete the old entry.
mAgendaUtil->deleteEntry(entry.id());
+ // Show the soft notification.
+ HbNotificationDialog *notificationDialog = new HbNotificationDialog();
+ notificationDialog->setTimeout(
+ HbNotificationDialog::ConfirmationNoteTimeout);
+ notificationDialog->setTitle(
+ hbTrId("txt_notes_dpopinfo_note_moved_to_todos"));
+ notificationDialog->show();
}
/*!
@@ -437,5 +458,47 @@
// Launch the notes editor with the obtained info.
mNotesEditor->edit(entry);
}
+
+/*!
+ Slot to handle context menu actions.
+ */
+void NotesNoteView::selectedMenuAction(HbAction *action)
+{
+ if (action == mOpenAction) {
+ openNote();
+ } else if (action == mDeleteAction) {
+ deleteNote();
+ } else if (action == mMakeFavouriteAction) {
+ markNoteAsFavourite();
+ } else if (action == mMarkTodoAction) {
+ markNoteAsTodo();
+ }
+}
+
+/*!
+ Slot to handle the context menu closed.
+ */
+void NotesNoteView::handleMenuClosed()
+{
+ 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 Mon May 03 12:30:32 2010 +0300
+++ b/notes/notesui/notesviews/src/notestodoview.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -57,7 +57,8 @@
NotesTodoView::NotesTodoView(QGraphicsWidget *parent)
:HbView(parent),
mSelectedItem(0),
- mDeleteAction(0)
+ mDeleteAction(0),
+ mIsLongTop(false)
{
// Nothing yet.
}
@@ -114,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"));
@@ -130,8 +135,7 @@
mViewCollectionAction = static_cast<HbAction *> (
mDocLoader->findObject("displayCollectionsAction"));
- mViewCollectionAction->setCheckable(true);
- mViewCollectionAction->setChecked(true);
+
connect(
mViewCollectionAction, SIGNAL(changed()),
this, SLOT(handleActionStateChanged()));
@@ -149,9 +153,6 @@
mSubTitle = static_cast<HbGroupBox *>(
mDocLoader->findWidget("subtitleGroupBox"));
- // Update sub heading text for to-do collections view.
- updateSubTitle();
-
connect(
mAgendaUtil, SIGNAL(entryAdded(ulong)),
this,SLOT(updateSubTitle(ulong)));
@@ -167,6 +168,14 @@
prototype->setGraphicsSize(HbListViewItem::SmallIcon);
}
+/*
+ Updates the title text for the first launch
+ */
+void NotesTodoView::updateTitle()
+{
+ updateSubTitle();
+}
+
/*!
Opens the to-do editor to create a new to-do.
*/
@@ -190,28 +199,30 @@
*/
void NotesTodoView::handleItemReleased(const QModelIndex &index)
{
- // Sanity check.
- if (!index.isValid()) {
- return;
- }
+ if(!mIsLongTop) {
+ // Sanity check.
+ if (!index.isValid()) {
+ return;
+ }
- // First get the id of the to-do and get the corresponding information from
- // agendautil.
- ulong toDoId = index.data(NotesNamespace::IdRole).value<qulonglong>();
+ // First get the id of the to-do and get the corresponding information from
+ // agendautil.
+ ulong toDoId = index.data(NotesNamespace::IdRole).value<qulonglong>();
- if (0 >= toDoId) {
- // Something wrong.
- return;
- }
+ if (0 >= toDoId) {
+ // Something wrong.
+ return;
+ }
- // Construct agenda event viewer.
- mAgendaEventViewer = new AgendaEventViewer(mAgendaUtil, this);
+ // Construct agenda event viewer.
+ mAgendaEventViewer = new AgendaEventViewer(mAgendaUtil, this);
- connect(
- mAgendaEventViewer, SIGNAL(viewingCompleted(const QDate)),
- this, SLOT(handleViewingCompleted()));
- // Launch agenda event viewer
- mAgendaEventViewer->view(toDoId, AgendaEventViewer::ActionEditDelete);
+ connect(
+ mAgendaEventViewer, SIGNAL(viewingCompleted(const QDate)),
+ this, SLOT(handleViewingCompleted()));
+ // Launch agenda event viewer
+ mAgendaEventViewer->view(toDoId, AgendaEventViewer::ActionEditDelete);
+ }
}
/*!
@@ -226,6 +237,7 @@
HbAbstractViewItem *item, const QPointF &coords)
{
mSelectedItem = item;
+ mIsLongTop = true;
// Get the entry of the selected item.
ulong noteId = item->modelIndex().data(
@@ -234,46 +246,34 @@
// Display a context specific menu.
HbMenu *contextMenu = new HbMenu();
+ connect(
+ contextMenu,SIGNAL(aboutToClose()),
+ this, SLOT(handleMenuClosed()));
// Add actions to the context menu.
mOpenAction =
contextMenu->addAction(hbTrId("txt_common_menu_open"));
- connect(
- mOpenAction, SIGNAL(triggered()),
- this, SLOT(openTodo()));
mEditAction = contextMenu->addAction(
hbTrId("txt_common_menu_edit"));
- connect(
- mEditAction, SIGNAL(triggered()),
- this, SLOT(editTodo()));
mDeleteAction = contextMenu->addAction(
hbTrId("txt_common_menu_delete"));
- connect(
- mDeleteAction, SIGNAL(triggered()),
- this, SLOT(deleteTodo()));
if (AgendaEntry::TypeTodo == entry.type()) {
if (AgendaEntry::TodoNeedsAction == entry.status()) {
mTodoStatusAction = contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_done"));
- connect(
- mTodoStatusAction , SIGNAL(triggered()),
- this, SLOT(markTodoStatus()));
-
} else if (AgendaEntry::TodoCompleted == entry.status()) {
mTodoStatusAction =
contextMenu->addAction(
hbTrId("txt_notes_menu_mark_as_not_done"));
- connect(
- mTodoStatusAction , SIGNAL(triggered()),
- this, SLOT(markTodoStatus()));
}
}
// Show the menu.
- contextMenu->exec(coords);
+ contextMenu->open(this, SLOT(selectedMenuAction(HbAction*)));
+ contextMenu->setPreferredPos(coords);
}
/*!
@@ -442,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();
+ }
}
/*
@@ -465,4 +473,28 @@
entry, AgendaEventViewer::ActionEditDelete);
}
+/*
+ Slot to handle the context menu actions.
+ */
+void NotesTodoView::selectedMenuAction(HbAction *action)
+{
+ if (action == mOpenAction) {
+ openTodo();
+ } else if (action == mEditAction) {
+ editTodo();
+ } else if (action == mDeleteAction) {
+ deleteTodo();
+ } else if (action == mTodoStatusAction) {
+ markTodoStatus();
+ }
+}
+
+
+/*!
+ Slot to handle the context menu closed.
+ */
+void NotesTodoView::handleMenuClosed()
+{
+ mIsLongTop = false;
+}
// End of file --Don't remove this.
--- a/notes/rom/notes.iby Mon May 03 12:30:32 2010 +0300
+++ b/notes/rom/notes.iby Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_info/organizer_metadata/organizer_metadata.mrp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_interface_api/inc/agendaentry.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_interface_api/inc/agendautil.h Mon Jun 28 15:22:02 2010 +0530
@@ -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(
@@ -120,6 +120,8 @@
void entryDeleted(ulong id);
void entryUpdated(ulong id);
void entriesDeleted(int status);
+ void entryViewCreationCompleted(int status);
+ void instanceViewCreationCompleted(int status);
private:
friend class AgendaUtilPrivate;
--- a/organizer_plat/agenda_interface_api/tsrc/tsrc.pro Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_interface_api/tsrc/tsrc.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_interface_api/tsrc/unittest_agendautil/src/unittest_agendautil.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_interface_api/tsrc/unittest_agendautil/unittest_agendautil.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_versit_2_api/tsrc/group/testagnversit2.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/agenda_versit_2_api/tsrc/src/testagnversit2.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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/unittest_caleneditor.pro Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_editor_api/tsrc/unittest_caleneditor/unittest_caleneditor.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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_exporter_api/inc/CalenExporter.h Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_exporter_api/inc/CalenExporter.h Mon Jun 28 15:22:02 2010 +0530
@@ -25,7 +25,7 @@
#include <e32base.h>
#include <f32file.h> // for TParse
#include <s32mem.h>
-#include <agnexportobserver.h>
+#include <AgnExportObserver.h>
// FORWARD DECLARATIONS
--- a/organizer_plat/calendar_importer_api/inc/CalenImporter.h Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_importer_api/inc/CalenImporter.h Mon Jun 28 15:22:02 2010 +0530
@@ -23,7 +23,7 @@
// INCLUDES
#include <e32base.h>
#include <f32file.h>
-#include <agnimportobserver.h>
+#include <AgnImportObserver.h>
--- a/organizer_plat/calendar_importer_api/tsrc/src/calenimportertestblocks.cpp Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_importer_api/tsrc/src/calenimportertestblocks.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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/inc/CalenLauncher.h Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,47 +0,0 @@
-/*
-* 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: Calendar Launcher
-*
-*/
-#include <qobject>
-#include <qdatetime.h>
-
-#ifdef CALENLAUNCHER_LIB
-# define CALENLAUNCHER_EXPORT Q_DECL_EXPORT
-#else
-# define CALENLAUNCHER_EXPORT Q_DECL_IMPORT
-#endif
-class CALENLAUNCHER_EXPORT CalenLauncher : public QObject
-{
-Q_OBJECT
-
-public:
- enum CalenView{
- MonthView = 0,
- DayView
- };
- CalenLauncher(QObject* parent = 0);
- ~CalenLauncher();
-
- void launchCalendarApp(CalenView view, QDateTime& dateTime,
- bool synchronousLaunch = true);
-
-signals:
- void calendarLaunchFailed(int error);
-
-public slots:
- void handleError(int error);
-};
-
-// End of file --Don't remove this.
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/organizer_plat/calendar_launcher_api/inc/calenlauncher.h Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,47 @@
+/*
+* 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: Calendar Launcher
+*
+*/
+#include <qobject>
+#include <qdatetime.h>
+
+#ifdef CALENLAUNCHER_LIB
+# define CALENLAUNCHER_EXPORT Q_DECL_EXPORT
+#else
+# define CALENLAUNCHER_EXPORT Q_DECL_IMPORT
+#endif
+class CALENLAUNCHER_EXPORT CalenLauncher : public QObject
+{
+Q_OBJECT
+
+public:
+ enum CalenView{
+ MonthView = 0,
+ DayView
+ };
+ CalenLauncher(QObject* parent = 0);
+ ~CalenLauncher();
+
+ void launchCalendarApp(CalenView view, QDateTime& dateTime,
+ bool synchronousLaunch = true);
+
+signals:
+ void calendarLaunchFailed(int error);
+
+public slots:
+ void handleError(int error);
+};
+
+// End of file --Don't remove this.
--- a/organizer_plat/calendar_launcher_api/tsrc/tsrc.pro Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_launcher_api/tsrc/tsrc.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_launcher_api/tsrc/unittest_calenlauncher/src/unittest_calenlauncher.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/calendar_launcher_api/tsrc/unittest_calenlauncher/unittest_calenlauncher.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,1 @@
+/*
* 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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,1 @@
+/*
* 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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,1 @@
+#include <noteseditorinterface.h>
\ No newline at end of file
--- a/organizer_plat/notes_editor_api/inc/noteseditor.h Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/notes_editor_api/notes_editor_api.pri Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon May 03 12:30:32 2010 +0300
+++ /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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_plat/organizer_plat.pro Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/organizer_pub/calendar_interim_utils2_api/tsrc/bc/calendar/group/BCTestCalendar2.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/bwins/caltestlibu.def Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/client/src/calattachment.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/client/src/calcalendarinfoimpl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/client/src/calclient.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/client/src/calentryimpl.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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());
}
@@ -1510,8 +1510,6 @@
void CCalEntryImpl::SetDTStampL(const TCalTime& aDTStampTime)
{
- __ASSERT_ALWAYS( EntryTypeL() != CCalEntry::ENote,
- User::Leave(KErrNotSupported));
LoadFullEntryL();
iFullEntry->SetDTStampUtcL(aDTStampTime.TimeUtcL());
}
--- a/pimappservices/calendar/eabi/caltestlibu.def Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/eabi/caltestlibu.def Mon Jun 28 15:22:02 2010 +0530
@@ -52,4 +52,5 @@
_ZTV15CCalTestLibrary @ 51 NONAME
_ZN15CCalTestLibrary24WaitForAgendaServerCloseEv @ 52 NONAME
_ZN15CCalTestLibrary17WaitForAlarmEventEi17TAlarmChangeEvent11TAlarmStatei @ 53 NONAME
+ _ZN15CCalTestLibrary20CreateCalSubSessionLERK7TDesC16 @ 54 NONAME
--- a/pimappservices/calendar/inc/calchangecallback.h Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/inc/calchangecallback.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/inc/agsentrymodel.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsalarm.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsasyncdelete.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsattachmentindex.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsentrymanager.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsentrymodel.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsfilemanager.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -1243,7 +1243,7 @@
}
else
{
- iAgnServer.AlarmServer().SetAlarmStatusForCalendarFile(fileName, EAlarmStatusEnabled);
+ QueueAlarmsImmediately();
}
User::LeaveIfError(iStore->Commit());
--- a/pimappservices/calendar/server/src/agsmain.cpp Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agsmain.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agssess.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/server/src/agstzruleindex.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmcalendarinfo.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmcalendartime.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -101,6 +101,14 @@
iTime = AgnDateTime::MaxDate();
}
iLocalOffsetInMinutes = KOffsetUnspecified;
+ if ( ! aFloating)
+ {
+ SetFloatingFlag(EFalse);
+ }
+ else
+ {
+ SetFloatingFlag(ETrue);
+ }
}
else
{
--- a/pimappservices/calendar/shared/src/agmrptdef.cpp Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmrptdef.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/shared/src/agmsimpleentry.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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/Integration/TestCalApiPolicing/generated/BLD.INF Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,31 +0,0 @@
-// Copyright (c) 2006-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:
-//
-
-PRJ_TESTMMPFILES
-
-TestCalApiPolicing.mmp
-
-
-
-PRJ_TESTEXPORTS
-
-TestCalApiPolicing.bat \epoc32\tools\TestCalApiPolicing.bat
-Cap_80000004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_80000004_TestCalApiPolicingSub.script
-Cap_00010004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_00010004_TestCalApiPolicingSub.script
-Cap_00008004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_00008004_TestCalApiPolicingSub.script
-Cap_00000004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_00000004_TestCalApiPolicingSub.script
-TestCalApiPolicing.IBY \epoc32\rom\include\TestCalApiPolicing.IBY
-TestCalApiPolicing.script C:\testdata\scripts\TestCalApiPolicing.script
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappservices/calendar/tsrc/Integration/TestCalApiPolicing/generated/bld.inf Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,31 @@
+// Copyright (c) 2006-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:
+//
+
+PRJ_TESTMMPFILES
+
+TestCalApiPolicing.mmp
+
+
+
+PRJ_TESTEXPORTS
+
+TestCalApiPolicing.bat \epoc32\tools\TestCalApiPolicing.bat
+Cap_80000004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_80000004_TestCalApiPolicingSub.script
+Cap_00010004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_00010004_TestCalApiPolicingSub.script
+Cap_00008004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_00008004_TestCalApiPolicingSub.script
+Cap_00000004_TestCalApiPolicingSub.script C:\testdata\scripts\Cap_00000004_TestCalApiPolicingSub.script
+TestCalApiPolicing.IBY \epoc32\rom\include\TestCalApiPolicing.IBY
+TestCalApiPolicing.script C:\testdata\scripts\TestCalApiPolicing.script
+
--- a/pimappservices/calendar/tsrc/caltestlib.cpp Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/tsrc/caltestlib.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/tsrc/caltestlib.h Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/tsrc/instance_iterator/tcal_fetchinstance.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -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.mmp Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendar/tsrc/tcal_dataexchange.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -22,8 +22,10 @@
SOURCE tcal_dataexchange.cpp
USERINCLUDE .
+APP_LAYER_SYSTEMINCLUDE
SYSTEMINCLUDE /epoc32/include
+
LIBRARY calinterimapi.lib
LIBRARY euser.lib estor.lib efsrv.lib caltestlib.lib
LIBRARY pimtestclient.lib
--- a/pimappservices/calendarvcalplugin/src/agmvcalx.cpp Mon May 03 12:30:32 2010 +0300
+++ b/pimappservices/calendarvcalplugin/src/agmvcalx.cpp Mon Jun 28 15:22:02 2010 +0530
@@ -437,9 +437,10 @@
// DTSTAMP
TCalTime dTStamp = aEntry->DTStampL();
-
- if ( dTStamp.TimeUtcL() != Time::NullTTime() )
- {
+
+ if ( dTStamp.TimeUtcL() != Time::NullTTime() &&
+ CCalEntry::ENote != aEntry->EntryTypeL() )
+ {
AddDateTimePropertyL(aParser, KVersitTokenXDTSTAMP, dTStamp.TimeUtcL(), TVersitDateTime::EIsUTC, iTimeFlag);
}
--- a/pimappsupport/chinesecalendaralg/test/group/calcontable.mmp Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/chinesecalendaralg/test/group/calcontable.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -22,6 +22,8 @@
SOURCE calcontable.cpp
USERINCLUDE ../../calcontablesrc
USERINCLUDE ../../originalinc
+
+APP_LAYER_SYSTEMINCLUDE
SYSTEMINCLUDE /epoc32/include
LIBRARY euser.lib efsrv.lib cconoriginal.lib charconv.lib
--- a/pimappsupport/chinesecalendarconverter/group/BLD.INF Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,27 +0,0 @@
-// Copyright (c) 2002-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:
-// Calcon BLD.INF
-// Calendar conversion utilities
-//
-//
-
-PRJ_PLATFORMS
-PRJ_EXPORTS
-../inc/CalendarConverter.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(calendarconverter.h)
-../inc/calendarconverterplugin.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(calendarconverterplugin.h)
-../group/calcon.iby /epoc32/rom/include/calcon.iby
-
-PRJ_MMPFILES
-../group/CCon.mmp
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappsupport/chinesecalendarconverter/group/bld.inf Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,27 @@
+// Copyright (c) 2002-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:
+// Calcon BLD.INF
+// Calendar conversion utilities
+//
+//
+
+PRJ_PLATFORMS
+PRJ_EXPORTS
+../inc/CalendarConverter.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(calendarconverter.h)
+../inc/calendarconverterplugin.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(calendarconverterplugin.h)
+../group/calcon.iby /epoc32/rom/include/calcon.iby
+
+PRJ_MMPFILES
+../group/CCon.mmp
+
--- a/pimappsupport/vcardandvcal/TPerformance/iLine_long.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TPerformance/iLine_long.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -1,4 +1,4 @@
-BEGIN:VCARD
-ADR;CHARSET=ISO-8859-1;POSTAL;WORK:;;Example City 1;Example Ø;;ZZ99 EXP
-VERSION:2.1
-END:VCARD
+BEGIN:VCARD
+ADR;CHARSET=ISO-8859-1;POSTAL;WORK:;;Example City 1;Example Ø;;ZZ99 EXP
+VERSION:2.1
+END:VCARD
--- a/pimappsupport/vcardandvcal/TPerformance/iLine_short.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TPerformance/iLine_short.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -1,4 +1,4 @@
-BEGIN:VCARD
-FN:A N Example
-VERSION:2.1
-END:VCARD
+BEGIN:VCARD
+FN:A N Example
+VERSION:2.1
+END:VCARD
--- a/pimappsupport/vcardandvcal/TestFiles/NoEnd.VCF Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestFiles/NoEnd.VCF Mon Jun 28 15:22:02 2010 +0530
@@ -1,6 +1,6 @@
-begin:vcard
-n:;Example
-adr:;;;;;;
-version:2.1
-fn:A N Example
+begin:vcard
+n:;Example
+adr:;;;;;;
+version:2.1
+fn:A N Example
e „‘ `Ü"
\ No newline at end of file
--- a/pimappsupport/vcardandvcal/TestFiles/nolf.vcs Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestFiles/nolf.vcs Mon Jun 28 15:22:02 2010 +0530
@@ -14,3 +14,4 @@
+
\ No newline at end of file
--- a/pimappsupport/vcardandvcal/TestvCals/Various/6.vcs Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestvCals/Various/6.vcs Mon Jun 28 15:22:02 2010 +0530
@@ -1,13 +1,13 @@
-BEGIN:VCALENDAR
-BEGIN:VEVENT
-VERSION:1.0
-UID:60000001
-LAST-MODIFIED:20021212T084746Z
-SUMMARY:PAYE
-CLASS:PUBLIC
-DTSTART:20021231T090000Z
-DTEND:20021231T090000Z
-RRULE:MP1 5+ MO TU WE T090000Z
-X-EPOCAGENDAENTRYTYPE:REMINDER
-END:VEVENT
+BEGIN:VCALENDAR
+BEGIN:VEVENT
+VERSION:1.0
+UID:60000001
+LAST-MODIFIED:20021212T084746Z
+SUMMARY:PAYE
+CLASS:PUBLIC
+DTSTART:20021231T090000Z
+DTEND:20021231T090000Z
+RRULE:MP1 5+ MO TU WE T090000Z
+X-EPOCAGENDAENTRYTYPE:REMINDER
+END:VEVENT
END:VCALENDAR
\ No newline at end of file
--- a/pimappsupport/vcardandvcal/TestvCards/Encoded/1.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestvCards/Encoded/1.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -1,8 +1,8 @@
-BEGIN:VCARD
-FN;CHARSET=ISO-8859-1:A N Example
-N;CHARSET=ISO-8859-1:Example;A;N
-ADR;CHARSET=ISO-8859-1;POSTAL;WORK:;;Example Road 1;Example Town Ø;;ZZ99 EXP
-EMAIL;CHARSET=ISO-8859-1;INTERNET:symbian.foundation@exp.example.test
-ORG;CHARSET=ISO-8859-1:Symbian Foundation
-VERSION:2.1
-END:VCARD
+BEGIN:VCARD
+FN;CHARSET=ISO-8859-1:A N Example
+N;CHARSET=ISO-8859-1:Example;A;N
+ADR;CHARSET=ISO-8859-1;POSTAL;WORK:;;Example Road 1;Example Town Ø;;ZZ99 EXP
+EMAIL;CHARSET=ISO-8859-1;INTERNET:symbian.foundation@exp.example.test
+ORG;CHARSET=ISO-8859-1:Symbian Foundation
+VERSION:2.1
+END:VCARD
--- a/pimappsupport/vcardandvcal/TestvCards/Encoded/7.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestvCards/Encoded/7.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -141,7 +141,7 @@
4fuPNlmm
LZxgCt9Z1PfoKsVBvl1JYYwmMDLevpT7qJkgDKSDnnFcx2WsjJYfZrpLlWPyt83PUd66
WHD
- IGHIPOapkUtJPUrXWmPLqNteW7rHJGcMSOq9xWhdW5+yFl4K88Ur6amij7zOY1G0UjzohtmQ7
+ IGHIPOapkUtJPUrXWmPLqNteW7rHJGcMSOq9xWhdW5+yFl4K88Ur6amij7zOY1G0UjzohtmQ7
lYetdFYaimoaRHcJgS9HHfI603exlBqNS3cqXkksRIZCDjIrLtNbW01hIpCQJPl54FNCqTUX
dnYq
@@ -294,7 +294,7 @@
/Nu2j2rn
nkZpQGOcmoS1LqNqJ0+nW0VvCDGvJGST1q5bsXgVj1NJbGkUkiSVQ0LqRwQa4qdQGI96
qJF
- XYpPK0LrKhwyEMK39S1G4NshVgpfrtFEmZ0+pjHJ5J5NdNpVpDBbrIq5duSTS6GiWtzQAzTgO
+ XYpPK0LrKhwyEMK39S1G4NshVgpfrtFEmZ0+pjHJ5J5NdNpVpDBbrIq5duSTS6GiWtzQAzTgO
aDRbXHqM0Ec/hQgWpE/FRE8E+lV0BGNrV5NBCRG23PeuXLM5LMSTzUt6GNTexESRgZ9KqTsW
bbnH
--- a/pimappsupport/vcardandvcal/TestvCards/Invalid/1.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestvCards/Invalid/1.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -1,14 +1,14 @@
BEGIN:VCARD
-FN:A N Example
-N:Example;A;N;;
-ADR;TYPE=pref,work:;;Example Town;Greater Example;ZZ99 EXP;United Kingdom;Gubbins,More Gubbins,Huge heaps of Gubbins,Mountain of Gubbins, higher than is possibly feasible.,
-NOTE:634 Example Road,Example Town,Greater Example,ZZ99 EXP,United Kingdom,Gubbins,More Gubbins,Huge heaps of Gubbins,Mountain of Gubbins, higher than is possibly feasible.,
-TEL;TYPE=pref,voice,work:0163 296 0000
-TEL;TYPE=voice:(home) 0163 296 0001
-TEL;TYPE=fax:0163 296 0002
-EMAIL;TYPE=internet,pref,work:symbian.foundation@exp.example.test
-TITLE:Software Engineer
-ORG:Symbian Foundation.
+FN:A N Example
+N:Example;A;N
;;
+ADR;TYPE=pref,work:;;Example Town
;Greater Example
;ZZ99 EXP
;United Kingdom
;Gubbins
,More Gubbins
,Huge heaps of Gubbins
,Mountain of Gubbins, higher than is possibly feasible.
,
+NOTE:634 Example Road
,Example Town,Greater Example
,ZZ99 EXP
,United Kingdom
,Gubbins
,More Gubbins
,Huge heaps of Gubbins
,Mountain of Gubbins, higher than is possibly feasible.
,
+TEL;TYPE=pref,voice,work:0163 296 0000
+TEL;TYPE=voice:(home) 0163 296 0001
+TEL;TYPE=fax:0163 296 0002
+EMAIL;TYPE=internet,pref,work:symbian.foundation@exp.example.test
+TITLE:Software Engineer
+ORG:Symbian Foundation.
VERSION:3.0
CLASS:PUBLIC
END:VCARD
--- a/pimappsupport/vcardandvcal/TestvCards/Invalid/2.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestvCards/Invalid/2.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -1,18 +1,18 @@
-BEGIN:VCARD
-VERSION:2.1
-ICQ:31060745
-FN:Example A
-N:Example;A
-EMAIL;PREF;INTERNET:symbian.foundation@exp.example.test
-EMAIL;INTERNET:symbian.foundation@exp.example.test
-EMAIL;INTERNET:symbian.foundation@exp.example.test
-ORG:Symbian Foundation
-TITLE:The director
-ADR;WORK:;;;;;;Example Islands
-LABEL;WORK;ENCODING=QUOTED-PRINTABLE:=0D=0A=0D=0AExample Islands
-ADR;HOME:;;Example City;Earth;;;Example Town
-LABEL;HOME;ENCODING=QUOTED-PRINTABLE:Example City=0D=0AEarth=0D=0AExample Town
-URL:Coming soon!
-TEL;HOME;VOICE:+44 (2???) ????
-TEL;CELL;VOICE:+44 9???????
-END:VCARD
+BEGIN:VCARD
+VERSION:2.1
+ICQ:31060745
+FN:Example A
+N:Example;A
+EMAIL;PREF;INTERNET:symbian.foundation@exp.example.test
+EMAIL;INTERNET:symbian.foundation@exp.example.test
+EMAIL;INTERNET:symbian.foundation@exp.example.test
+ORG:Symbian Foundation
+TITLE:The director
+ADR;WORK:;;;;;;Example Islands
+LABEL;WORK;ENCODING=QUOTED-PRINTABLE:=0D=0A=0D=0AExample Islands
+ADR;HOME:;;Example City;Earth;;;Example Town
+LABEL;HOME;ENCODING=QUOTED-PRINTABLE:Example City=0D=0AEarth=0D=0AExample Town
+URL:Coming soon!
+TEL;HOME;VOICE:+44 (2???) ????
+TEL;CELL;VOICE:+44 9???????
+END:VCARD
--- a/pimappsupport/vcardandvcal/TestvCards/Invalid/3.vcf Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/TestvCards/Invalid/3.vcf Mon Jun 28 15:22:02 2010 +0530
@@ -1,1 +1,1 @@
-BEGIN:VCARDVERSION:2.1FN;QUOTED-PRINTABLE;CHARSET=ISO-8859-1:Example Ex=E4mp=E4leN;QUOTED-PRINTABLE;CHARSET=ISO-8859-1:Example Ex=E4mp=E4leORG:Symbian FoundationTITLE:Senior Design EngineerA.TEL;VOICE:+441632960000A.NOTE:GSMB.TEL;TYPE=FAX:+441632960001B.NOTE:GSMEMAIL:symbian.foundation@exp.example.testEND:VCARD
\ No newline at end of file
+BEGIN:VCARD
VERSION:2.1
FN;QUOTED-PRINTABLE;CHARSET=ISO-8859-1:Example Ex=E4mp=E4le
N;QUOTED-PRINTABLE;CHARSET=ISO-8859-1:Example Ex=E4mp=E4le
ORG:Symbian FoundationTITLE:Senior Design Engineer
A.TEL;VOICE:+441632960000
A.NOTE:GSM
B.TEL;TYPE=FAX:+441632960001
B.NOTE:GSM
EMAIL:symbian.foundation@exp.example.test
END:VCARD
\ No newline at end of file
--- a/pimappsupport/vcardandvcal/Ticket/VTicket.MMP Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/Ticket/VTicket.MMP Mon Jun 28 15:22:02 2010 +0530
@@ -22,6 +22,7 @@
SOURCEPATH ../Ticket
userinclude ../inc
+APP_LAYER_SYSTEMINCLUDE
systeminclude /epoc32/include
source VTicketMaster.CPP
--- a/pimappsupport/vcardandvcal/design/DESIGN.MDL Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/design/DESIGN.MDL Mon Jun 28 15:22:02 2010 +0530
@@ -1,3335 +1,3335 @@
-
-(object Petal
- version 42
- _written "Rose 4.5.8054.1"
- charSet 0)
-
-(object Design "Logical View"
- is_unit TRUE
- is_loaded TRUE
- defaults (object defaults
- rightMargin 0.250000
- leftMargin 0.250000
- topMargin 0.250000
- bottomMargin 0.500000
- pageOverlap 0.250000
- clipIconLabels TRUE
- autoResize TRUE
- snapToGrid TRUE
- gridX 16
- gridY 16
- defaultFont (object Font
- size 9
- face "helvetica"
- bold FALSE
- italics FALSE
- underline FALSE
- strike FALSE
- color 0
- default_color TRUE)
- showMessageNum 1
- showClassOfObject TRUE
- notation "Booch")
- root_usecase_package (object Class_Category "Use Case View"
- quid "355326EE003D"
- exportControl "Public"
- global TRUE
- logical_models (list unit_reference_list)
- logical_presentations (list unit_reference_list
- (object UseCaseDiagram "Main"
- quid "355326F5025B"
- title "Main"
- zoom 100
- max_height 28350
- max_width 21600
- origin_x 0
- origin_y 0
- items (list diagram_item_list))))
- root_category (object Class_Category "Logical View"
- quid "355326EE002A"
- exportControl "Public"
- global TRUE
- subsystem "Component View"
- quidu "355326EE003E"
- logical_models (list unit_reference_list
- (object Class "CVersitParser"
- quid "3553270E02EC"
- documentation "The base Versit parser class, providing functions to aid parsing a stream into a Versit object, as well as the facility to add properties and sub-entities to an existing object. The key methods are Internalize and Externalize, used to convert to and from stream form."
- fields (list has_relationship_list
- (object Has_Relationship
- quid "3553302402E7"
- supplier "Logical View::CParserPropertyHBufC"
- quidu "35532EC801C4"
- supplier_cardinality (value cardinality "0..n"))
- (object Has_Relationship
- quid "356EAC060148"
- label "0..n"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- operations (list Operations
- (object Operation "InternalizeL"
- quid "3553356B03C6"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "ExternalizeL"
- quid "355335B802EA"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "AddEntityL"
- quid "356E92480020"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "AddPropertyL"
- quid "356E925602FB"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "EntityL"
- quid "356E9265031B"
- result "CArrayPtrFlat<CVersitParser>"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "PropertyL"
- quid "356E9273039D"
- result "CArrayPtrFlat<CParserProperty>"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "GroupOfPropertiesL"
- quid "356E92C403A4"
- result "CArrayPtrFlat<CParserProperty>"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0))
- language "C++")
- (object Class "CParserVCard"
- quid "355327CA0301"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "35532D7202F9"
- supplier "Logical View::CVersitParser"
- quidu "3553270E02EC"))
- language "C++")
- (object Class "CParserVCal"
- quid "35532CB10020"
- fields (list has_relationship_list
- (object Has_Relationship
- quid "355331AE009F"
- supplier "Logical View::VCalToDoParse"
- quidu "35532D9A0057"
- supplier_cardinality (value cardinality "0..n"))
- (object Has_Relationship
- quid "355331D301B0"
- supplier "Logical View::CParserVCalEntity"
- quidu "35532DAE02CD"
- supplier_cardinality (value cardinality "0..n")))
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "35532D6A01AD"
- supplier "Logical View::CVersitParser"
- quidu "3553270E02EC"))
- language "C++")
- (object Class "VCalToDoParse"
- quid "35532D9A0057"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "35532DCF019E"
- supplier "Logical View::CVersitParser"
- quidu "3553270E02EC"))
- language "C++")
- (object Class "CParserVCalEntity"
- quid "35532DAE02CD"
- documentation "This class represents a Todo or Event sub-entity within the VCal object"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "35532DD8029B"
- supplier "Logical View::CVersitParser"
- quidu "3553270E02EC"))
- language "C++")
- (object Class "CParserParam"
- quid "35532EA700F4"
- documentation "A generic property parameter class, consisting of a Name and optionally a value, both in descriptor form."
- operations (list Operations
- (object Operation "Name"
- quid "356E942C00F8"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "Value"
- quid "356E943102AE"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "WriteValueToStream"
- quid "356E944D02F4"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0))
- language "C++")
- (object Class "CParserPropertyHBufC"
- quid "35532EC801C4"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "3553301D0016"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- language "C++")
- (object Class "CVTimeParam"
- quid "35532F2602EC"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "35532F4100CE"
- supplier "Logical View::CParserParam"
- quidu "35532EA700F4"))
- language "C++")
- (object Class "CParserProperty"
- quid "35532FAE025B"
- documentation "The Base property class, corresponding to a property, and storing its name and associated groups and parameters. Subclasses are identified by Uid."
- operations (list Operations
- (object Operation "ExternalizeL"
- quid "356EAE71035B"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "Param"
- quid "356EAE8300E0"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "AddParamL"
- quid "356EAE8B0019"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "Group"
- quid "356EAE92013C"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "Uid"
- quid "356EAE950190"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "Name"
- quid "356EAE9C000A"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "SetName"
- quid "356EAEA1007F"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0)
- (object Operation "WriteValueToStream"
- quid "356EAEAB028C"
- concurrency "Sequential"
- opExportControl "Public"
- uid 0))
- language "C++")
- (object Class "CPropertyProperty"
- quid "35532FED0021"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "3553302001B5"
- supplier "Logical View::CParserPropertyHBufC"
- quidu "35532EC801C4"))
- language "C++")
- (object Class "AgendaModelVCalWriter/Reader"
- quid "3556CADC02A2"
- used_nodes (list uses_relationship_list
- (object Uses_Relationship
- quid "3556CB2A03B3"
- supplier "Logical View::CParserPropertyHBufC"
- quidu "35532EC801C4")
- (object Uses_Relationship
- quid "3556CB4E0382"
- supplier "Logical View::CParserVCal"
- quidu "35532CB10020"))
- language "C++")
- (object Class "CVAgendaModelVCalReader"
- quid "3556CB0A008B"
- language "C++")
- (object Class "CParserPropertyDateTime"
- quid "356EAC6F029E"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "356EAC84026C"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- language "C++")
- (object Class "CParserPropertyCDesCArray"
- quid "356EAC720049"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "356EAC7E029F"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- language "C++")
- (object Class "CParserPropertyMultiDateTime"
- quid "356EAC790361"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "356EAC87007C"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- language "C++")
- (object Class "CParserPropertyInt"
- quid "356EAE41015D"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "356EAE460024"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- language "C++")
- (object Class "CParserPropertyAlarm"
- quid "356EAE5B001A"
- superclasses (list inheritance_relationship_list
- (object Inheritance_Relationship
- quid "356EAE660111"
- supplier "Logical View::CParserProperty"
- quidu "35532FAE025B"))
- language "C++")
- (object Class "ContactsApp"
- quid "356EAF280282"
- used_nodes (list uses_relationship_list
- (object Uses_Relationship
- quid "356EAF3802B7"
- supplier "Logical View::CParserVCard"
- quidu "355327CA0301"))
- language "C++"))
- logical_presentations (list unit_reference_list
- (object ClassDiagram "Main"
- quid "355326F5020A"
- title "Main"
- zoom 69
- max_height 28350
- max_width 21600
- origin_x 37
- origin_y 0
- items (list diagram_item_list
- (object ClassView "Class" "Logical View::CVersitParser" @1
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (1728, 480)
- label (object ItemLabel
- Parent_View @1
- location (1528, 266)
- nlines 2
- max_width 477
- justify 0
- label "CVersitParser")
- icon_style "Icon"
- quidu "3553270E02EC"
- compartment (object Compartment
- Parent_View @1
- location (1528, 329)
- icon_style "Icon"
- anchor 2
- nlines 9
- max_width 382
- justify 0)
- width 692
- height 624
- annotation 8
- autoResize TRUE)
- (object ClassView "Class" "Logical View::CParserVCal" @2
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (2112, 1312)
- label (object ItemLabel
- Parent_View @2
- location (1944, 1228)
- nlines 2
- max_width 396
- justify 0
- label "CParserVCal")
- icon_style "Icon"
- quidu "35532CB10020"
- compartment (object Compartment
- Parent_View @2
- location (1944, 1291)
- icon_style "Icon"
- anchor 2
- nlines 2
- max_width 312
- justify 0)
- width 574
- annotation 8
- autoResize TRUE)
- (object ClassView "Class" "Logical View::CParserVCard" @3
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (3088, 832)
- label (object ItemLabel
- Parent_View @3
- location (2984, 748)
- nlines 2
- max_width 240
- justify 0
- label "CParserVCard")
- icon_style "Icon"
- quidu "355327CA0301"
- annotation 8
- autoResize TRUE)
- (object InheritView "" @4
- stereotype TRUE
- quidu "35532D6A01AD"
- client @2
- supplier @1
- line_style 0)
- (object InheritView "" @5
- stereotype TRUE
- quidu "35532D7202F9"
- client @3
- supplier @1
- line_style 0)
- (object ClassView "Class" "Logical View::CParserVCalEntity" @6
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (2976, 1472)
- label (object ItemLabel
- Parent_View @6
- location (2872, 1388)
- nlines 2
- max_width 240
- justify 0
- label "CParserVCalEntity")
- icon_style "Icon"
- quidu "35532DAE02CD"
- annotation 8
- autoResize TRUE)
- (object InheritView "" @7
- stereotype TRUE
- quidu "35532DD8029B"
- client @6
- supplier @1
- line_style 0)
- (object ClassView "Class" "Logical View::CParserParam" @8
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (416, 208)
- label (object ItemLabel
- Parent_View @8
- location (239, 112)
- nlines 2
- max_width 418
- justify 0
- label "CParserParam")
- icon_style "Icon"
- quidu "35532EA700F4"
- compartment (object Compartment
- Parent_View @8
- location (239, 175)
- icon_style "Icon"
- anchor 2
- nlines 3
- max_width 344
- justify 0)
- width 606
- height 286
- annotation 8
- autoResize TRUE)
- (object HasView "" @9
- stereotype TRUE
- quidu "355331D301B0"
- client @2
- supplier @6
- line_style 0)
- (object ClassView "Class" "Logical View::AgendaModelVCalWriter/Reader" @10
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (1776, 1776)
- label (object ItemLabel
- Parent_View @10
- location (1644, 1692)
- nlines 2
- max_width 310
- justify 0
- label "AgendaModelVCalWriter/Reader")
- icon_style "Icon"
- quidu "3556CADC02A2"
- width 450
- annotation 8
- autoResize TRUE)
- (object UsesView "" @11
- stereotype TRUE
- quidu "3556CB4E0382"
- client @10
- supplier @2
- line_style 0)
- (object ClassView "Class" "Logical View::CParserProperty" @12
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (736, 896)
- label (object ItemLabel
- Parent_View @12
- location (555, 701)
- nlines 2
- max_width 430
- justify 0
- label "CParserProperty")
- icon_style "Icon"
- quidu "35532FAE025B"
- compartment (object Compartment
- Parent_View @12
- location (555, 764)
- icon_style "Icon"
- anchor 2
- nlines 8
- max_width 344
- justify 0)
- width 624
- height 570
- annotation 8
- autoResize TRUE)
- (object HasView "0..n" @13
- label (object ItemLabel
- Parent_View @13
- location (1282, 660)
- anchor_loc 1
- nlines 1
- max_width 450
- justify 0
- label "0..n")
- stereotype TRUE
- quidu "356EAC060148"
- client @1
- supplier @12
- line_style 0)
- (object ClassView "Class" "Logical View::CParserPropertyHBufC" @14
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (1296, 1552)
- label (object ItemLabel
- Parent_View @14
- location (1186, 1468)
- nlines 2
- max_width 256
- justify 0
- label "CParserPropertyHBufC")
- icon_style "Icon"
- quidu "35532EC801C4"
- width 372
- annotation 8
- autoResize TRUE)
- (object InheritView "" @15
- stereotype TRUE
- quidu "3553301D0016"
- client @14
- supplier @12
- line_style 0)
- (object ClassView "Class" "Logical View::CParserPropertyDateTime" @16
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (704, 1712)
- label (object ItemLabel
- Parent_View @16
- location (585, 1628)
- nlines 2
- max_width 278
- justify 0
- label "CParserPropertyDateTime")
- icon_style "Icon"
- quidu "356EAC6F029E"
- width 404
- annotation 8
- autoResize TRUE)
- (object ClassView "Class" "Logical View::CParserPropertyCDesCArray" @17
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (240, 1408)
- label (object ItemLabel
- Parent_View @17
- location (122, 1324)
- nlines 2
- max_width 274
- justify 0
- label "CParserPropertyCDesCArray")
- icon_style "Icon"
- quidu "356EAC720049"
- width 398
- annotation 8
- autoResize TRUE)
- (object ClassView "Class" "Logical View::CParserPropertyMultiDateTime" @18
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (336, 2000)
- label (object ItemLabel
- Parent_View @18
- location (220, 1916)
- nlines 2
- max_width 270
- justify 0
- label "CParserPropertyMultiDateTime")
- icon_style "Icon"
- quidu "356EAC790361"
- width 392
- annotation 8
- autoResize TRUE)
- (object InheritView "" @19
- stereotype TRUE
- quidu "356EAC7E029F"
- client @17
- supplier @12
- line_style 0)
- (object InheritView "" @20
- stereotype TRUE
- quidu "356EAC84026C"
- client @16
- supplier @12
- line_style 0)
- (object InheritView "" @21
- stereotype TRUE
- quidu "356EAC87007C"
- client @18
- supplier @12
- line_style 0)
- (object ClassView "Class" "Logical View::CParserPropertyInt" @22
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (1280, 1952)
- label (object ItemLabel
- Parent_View @22
- location (1176, 1868)
- nlines 2
- max_width 240
- justify 0
- label "CParserPropertyInt")
- icon_style "Icon"
- quidu "356EAE41015D"
- annotation 8
- autoResize TRUE)
- (object InheritView "" @23
- stereotype TRUE
- quidu "356EAE460024"
- client @22
- supplier @12
- line_style 0)
- (object ClassView "Class" "Logical View::CParserPropertyAlarm" @24
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (1136, 2288)
- label (object ItemLabel
- Parent_View @24
- location (1032, 2204)
- nlines 2
- max_width 242
- justify 0
- label "CParserPropertyAlarm")
- icon_style "Icon"
- quidu "356EAE5B001A"
- width 352
- annotation 8
- autoResize TRUE)
- (object InheritView "" @25
- stereotype TRUE
- quidu "356EAE660111"
- client @24
- supplier @12
- line_style 0)
- (object ClassView "Class" "Logical View::ContactsApp" @26
- IncludeAttribute TRUE
- IncludeOperation TRUE
- location (3392, 1216)
- label (object ItemLabel
- Parent_View @26
- location (3288, 1132)
- nlines 2
- max_width 240
- justify 0
- label "ContactsApp")
- icon_style "Icon"
- quidu "356EAF280282"
- annotation 8
- autoResize TRUE)
- (object UsesView "" @27
- stereotype TRUE
- quidu "356EAF3802B7"
- client @26
- supplier @3
- line_style 0)))))
- root_subsystem (object SubSystem "Component View"
- quid "355326EE003E"
- physical_models (list unit_reference_list)
- physical_presentations (list unit_reference_list
- (object Module_Diagram "Main"
- quid "355326F5025A"
- title "Main"
- zoom 100
- max_height 28350
- max_width 21600
- origin_x 0
- origin_y 0
- items (list diagram_item_list))))
- process_structure (object Processes
- quid "355326EE003F"
- ProcsNDevs (list
- (object Process_Diagram "Deployment View"
- quid "355326F5019C"
- title "Deployment View"
- zoom 100
- max_height 28350
- max_width 21600
- origin_x 0
- origin_y 0
- items (list diagram_item_list))))
- properties (object Properties
- attributes (list Attribute_Set
- (object Attribute
- tool "DDL"
- name "propertyId"
- value "809135966")
- (object Attribute
- tool "DDL"
- name "default__Project"
- value (list Attribute_Set
- (object Attribute
- tool "DDL"
- name "DataBase"
- value ("DataBaseSet" 800))
- (object Attribute
- tool "DDL"
- name "DataBaseSet"
- value (list Attribute_Set
- (object Attribute
- tool "DDL"
- name "ANSI"
- value 800)
- (object Attribute
- tool "DDL"
- name "Oracle"
- value 801)
- (object Attribute
- tool "DDL"
- name "SQLServer"
- value 802)
- (object Attribute
- tool "DDL"
- name "Sybase"
- value 803)
- (object Attribute
- tool "DDL"
- name "Watcom"
- value 804)))
- (object Attribute
- tool "DDL"
- name "PrimaryKeyColumnName"
- value "Id")
- (object Attribute
- tool "DDL"
- name "PrimaryKeyColumnType"
- value "NUMBER(5)")
- (object Attribute
- tool "DDL"
- name "ViewName"
- value "V_")
- (object Attribute
- tool "DDL"
- name "TableName"
- value "T_")
- (object Attribute
- tool "DDL"
- name "InheritSuffix"
- value "_V")
- (object Attribute
- tool "DDL"
- name "DropClause"
- value FALSE)
- (object Attribute
- tool "DDL"
- name "BaseViews"
- value FALSE)
- (object Attribute
- tool "DDL"
- name "DDLScriptFilename"
- value "DDL1.SQL")))
- (object Attribute
- tool "DDL"
- name "default__Attribute"
- value (list Attribute_Set
- (object Attribute
- tool "DDL"
- name "ColumnType"
- value "VARCHAR")
- (object Attribute
- tool "DDL"
- name "Length"
- value "")
- (object Attribute
- tool "DDL"
- name "NullsOK"
- value TRUE)
- (object Attribute
- tool "DDL"
- name "PrimaryKey"
- value FALSE)
- (object Attribute
- tool "DDL"
- name "Unique"
- value FALSE)
- (object Attribute
- tool "DDL"
- name "CompositeUnique"
- value FALSE)
- (object Attribute
- tool "DDL"
- name "CheckConstraint"
- value "")))
- (object Attribute
- tool "DDL"
- name "HiddenTool"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "propertyId"
- value "809135966")
- (object Attribute
- tool "IDL"
- name "default__Project"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "CreateMissingDirectories"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "StopOnError"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "Directory"
- value "AUTO GENERATE")
- (object Attribute
- tool "IDL"
- name "GeneratePreserveRegions"
- value TRUE)))
- (object Attribute
- tool "IDL"
- name "default__Class"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "ImplementationType"
- value "")
- (object Attribute
- tool "IDL"
- name "ConstValue"
- value "")
- (object Attribute
- tool "IDL"
- name "GenerateDefaultSpecifier"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "DefaultSpecifier"
- value "")
- (object Attribute
- tool "IDL"
- name "IDLElement"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "IDLSpecificationType"
- value ("IDLSpecSet" 22))
- (object Attribute
- tool "IDL"
- name "IDLSpecSet"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "Interface"
- value 22)
- (object Attribute
- tool "IDL"
- name "Typedef"
- value 54)
- (object Attribute
- tool "IDL"
- name "Enumeration"
- value 8)
- (object Attribute
- tool "IDL"
- name "Const"
- value 71)
- (object Attribute
- tool "IDL"
- name "Exception"
- value 61)
- (object Attribute
- tool "IDL"
- name "Struct"
- value 51)
- (object Attribute
- tool "IDL"
- name "Union"
- value 81)))))
- (object Attribute
- tool "IDL"
- name "default__Module-Spec"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "Generate"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "CmIdentification"
- value (value Text " %X% %Q% %Z% %W%"))
- (object Attribute
- tool "IDL"
- name "CopyrightNotice"
- value (value Text ""))
- (object Attribute
- tool "IDL"
- name "FileName"
- value "AUTO GENERATE")
- (object Attribute
- tool "IDL"
- name "GenerateIDLModule"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "InclusionProtectionSymbol"
- value "AUTO GENERATE")
- (object Attribute
- tool "IDL"
- name "AdditionalIncludes"
- value (value Text ""))
- (object Attribute
- tool "IDL"
- name "IncludeBySimpleName"
- value FALSE)))
- (object Attribute
- tool "IDL"
- name "default__Module-Body"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "CmIdentification"
- value (value Text " %X% %Q% %Z% %W%"))
- (object Attribute
- tool "IDL"
- name "CopyrightNotice"
- value (value Text ""))
- (object Attribute
- tool "IDL"
- name "FileName"
- value "AUTO GENERATE")
- (object Attribute
- tool "IDL"
- name "AdditionalIncludes"
- value (value Text ""))
- (object Attribute
- tool "IDL"
- name "IncludeBySimpleName"
- value FALSE)))
- (object Attribute
- tool "IDL"
- name "default__Operation"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "OperationIsOneWay"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "Context"
- value "")
- (object Attribute
- tool "IDL"
- name "Raises"
- value "")))
- (object Attribute
- tool "IDL"
- name "default__Attribute"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "CaseSpecifier"
- value "")
- (object Attribute
- tool "IDL"
- name "GenerateDataMember"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "DataMemberName"
- value "$relationship")
- (object Attribute
- tool "IDL"
- name "IsReadOnly"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "IsConst"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "ConstValue"
- value "")))
- (object Attribute
- tool "IDL"
- name "default__Has"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "NameIfUnlabeled"
- value "the_$supplier")
- (object Attribute
- tool "IDL"
- name "GenerateDataMember"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "DataMemberName"
- value "$relationship")
- (object Attribute
- tool "IDL"
- name "GenerateForwardReference"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "IsReadOnly"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "BoundedHasRelType"
- value ("HasRelTypeSet" 47))
- (object Attribute
- tool "IDL"
- name "HasRelTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "Array"
- value 24)
- (object Attribute
- tool "IDL"
- name "Sequence"
- value 47)))))
- (object Attribute
- tool "IDL"
- name "default__Role"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "NameIfUnlabeled"
- value "the_$supplier")
- (object Attribute
- tool "IDL"
- name "GenerateDataMember"
- value TRUE)
- (object Attribute
- tool "IDL"
- name "DataMemberName"
- value "$relationship")
- (object Attribute
- tool "IDL"
- name "GenerateForwardReference"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "IsReadOnly"
- value FALSE)
- (object Attribute
- tool "IDL"
- name "BoundedRoleType"
- value ("AssocTypeSet" 47))
- (object Attribute
- tool "IDL"
- name "AssocTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "Array"
- value 24)
- (object Attribute
- tool "IDL"
- name "Sequence"
- value 47)))))
- (object Attribute
- tool "IDL"
- name "default__Uses"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "GenerateForwardReference"
- value FALSE)))
- (object Attribute
- tool "IDL"
- name "default__Subsystem"
- value (list Attribute_Set
- (object Attribute
- tool "IDL"
- name "Directory"
- value "AUTO GENERATE")))
- (object Attribute
- tool "IDL"
- name "HiddenTool"
- value FALSE)
- (object Attribute
- tool "cg"
- name "propertyId"
- value "809135966")
- (object Attribute
- tool "cg"
- name "default__Project"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "UseMSVC"
- value FALSE)
- (object Attribute
- tool "cg"
- name "HeaderFileExtension"
- value "h")
- (object Attribute
- tool "cg"
- name "HeaderFileBackupExtension"
- value "h~")
- (object Attribute
- tool "cg"
- name "HeaderFileTemporaryExtension"
- value "h#")
- (object Attribute
- tool "cg"
- name "CodeFileExtension"
- value "cpp")
- (object Attribute
- tool "cg"
- name "CodeFileBackupExtension"
- value "cp~")
- (object Attribute
- tool "cg"
- name "CodeFileTemporaryExtension"
- value "cp#")
- (object Attribute
- tool "cg"
- name "CreateMissingDirectories"
- value TRUE)
- (object Attribute
- tool "cg"
- name "StopOnError"
- value FALSE)
- (object Attribute
- tool "cg"
- name "ErrorLimit"
- value 30)
- (object Attribute
- tool "cg"
- name "Directory"
- value "$ROSECPP_SOURCE")
- (object Attribute
- tool "cg"
- name "PathSeparator"
- value "")
- (object Attribute
- tool "cg"
- name "FileNameFormat"
- value "128vx_b")
- (object Attribute
- tool "cg"
- name "BooleanType"
- value "int")
- (object Attribute
- tool "cg"
- name "AllowTemplates"
- value TRUE)
- (object Attribute
- tool "cg"
- name "AllowProtectedInheritance"
- value TRUE)
- (object Attribute
- tool "cg"
- name "CommentWidth"
- value 60)
- (object Attribute
- tool "cg"
- name "OneByValueContainer"
- value "$targetClass")
- (object Attribute
- tool "cg"
- name "OneByReferenceContainer"
- value "$targetClass *")
- (object Attribute
- tool "cg"
- name "OptionalByValueContainer"
- value "OptionalByValue<$targetClass>")
- (object Attribute
- tool "cg"
- name "OptionalByReferenceContainer"
- value "$targetClass *")
- (object Attribute
- tool "cg"
- name "FixedByValueContainer"
- value "$targetClass[$limit]")
- (object Attribute
- tool "cg"
- name "UnorderedFixedByValueContainer"
- value "$targetClass[$limit]")
- (object Attribute
- tool "cg"
- name "FixedByReferenceContainer"
- value "$targetClass *[$limit]")
- (object Attribute
- tool "cg"
- name "UnorderedFixedByReferenceContainer"
- value "$targetClass *[$limit]")
- (object Attribute
- tool "cg"
- name "BoundedByValueContainer"
- value "BoundedListByValue<$targetClass,$limit>")
- (object Attribute
- tool "cg"
- name "UnorderedBoundedByValueContainer"
- value "BoundedSetByValue<$targetClass,$limit>")
- (object Attribute
- tool "cg"
- name "BoundedByReferenceContainer"
- value "BoundedListByReference<$targetClass,$limit>")
- (object Attribute
- tool "cg"
- name "UnorderedBoundedByReferenceContainer"
- value "BoundedSetByReference<$targetClass,$limit>")
- (object Attribute
- tool "cg"
- name "UnboundedByValueContainer"
- value "UnboundedListByValue<$targetClass>")
- (object Attribute
- tool "cg"
- name "UnorderedUnboundedByValueContainer"
- value "UnboundedSetByValue<$targetClass>")
- (object Attribute
- tool "cg"
- name "UnboundedByReferenceContainer"
- value "UnboundedListByReference<$targetClass>")
- (object Attribute
- tool "cg"
- name "UnorderedUnboundedByReferenceContainer"
- value "UnboundedSetByReference<$targetClass>")
- (object Attribute
- tool "cg"
- name "QualifiedByValueContainer"
- value "AssociationByValue<$qualtype, $qualcont>")
- (object Attribute
- tool "cg"
- name "UnorderedQualifiedByValueContainer"
- value "DictionaryByValue<$qualtype, $qualcont>")
- (object Attribute
- tool "cg"
- name "QualifiedByReferenceContainer"
- value "AssociationByReference<$qualtype, $qualcont>")
- (object Attribute
- tool "cg"
- name "UnorderedQualifiedByReferenceContainer"
- value "DictionaryByReference<$qualtype, $qualcont>")
- (object Attribute
- tool "cg"
- name "GeneratePreserveRegions"
- value TRUE)))
- (object Attribute
- tool "cg"
- name "default__Class"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "CodeName"
- value "")
- (object Attribute
- tool "cg"
- name "ImplementationType"
- value "")
- (object Attribute
- tool "cg"
- name "ClassKey"
- value "class")
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegions"
- value ("GenerateEmptyRegionSet" 3))
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegionSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "None"
- value 0)
- (object Attribute
- tool "cg"
- name "Preserved"
- value 1)
- (object Attribute
- tool "cg"
- name "Unpreserved"
- value 2)
- (object Attribute
- tool "cg"
- name "All"
- value 3)))
- (object Attribute
- tool "cg"
- name "PutBodiesInSpec"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateDefaultConstructor"
- value ("GenerateSet" 199))
- (object Attribute
- tool "cg"
- name "DefaultConstructorVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "InlineDefaultConstructor"
- value FALSE)
- (object Attribute
- tool "cg"
- name "ExplicitDefaultConstructor"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateCopyConstructor"
- value ("GenerateSet" 199))
- (object Attribute
- tool "cg"
- name "CopyConstructorVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "InlineCopyConstructor"
- value FALSE)
- (object Attribute
- tool "cg"
- name "ExplicitCopyConstructor"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateDestructor"
- value TRUE)
- (object Attribute
- tool "cg"
- name "DestructorVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "DestructorKind"
- value ("ThreeKindSet" 200))
- (object Attribute
- tool "cg"
- name "InlineDestructor"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateAssignmentOperation"
- value ("GenerateSet" 199))
- (object Attribute
- tool "cg"
- name "AssignmentVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "AssignmentKind"
- value ("ThreeKindSet" 200))
- (object Attribute
- tool "cg"
- name "InlineAssignmentOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateEqualityOperations"
- value ("GenerateSet" 199))
- (object Attribute
- tool "cg"
- name "EqualityVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "EqualityKind"
- value ("FriendKindSet" 200))
- (object Attribute
- tool "cg"
- name "InlineEqualityOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateRelationalOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "RelationalVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "RelationalKind"
- value ("FriendKindSet" 200))
- (object Attribute
- tool "cg"
- name "InlineRelationalOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateStorageMgmtOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "StorageMgmtVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "InlineStorageMgmtOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateSubscriptOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "SubscriptVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "SubscriptKind"
- value ("ThreeKindSet" 200))
- (object Attribute
- tool "cg"
- name "SubscriptResultType"
- value "")
- (object Attribute
- tool "cg"
- name "InlineSubscriptOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateDereferenceOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "DereferenceVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "DereferenceKind"
- value ("ThreeKindSet" 200))
- (object Attribute
- tool "cg"
- name "DereferenceResultType"
- value "")
- (object Attribute
- tool "cg"
- name "InlineDereferenceOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateIndirectionOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IndirectionVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "IndirectionKind"
- value ("ThreeKindSet" 200))
- (object Attribute
- tool "cg"
- name "IndirectionResultType"
- value "")
- (object Attribute
- tool "cg"
- name "InlineIndirectionOperation"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateStreamOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "StreamVisibility"
- value ("VisibilitySet" 45))
- (object Attribute
- tool "cg"
- name "InlineStreamOperations"
- value FALSE)
- (object Attribute
- tool "cg"
- name "ThreeKindSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)))
- (object Attribute
- tool "cg"
- name "KindSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)
- (object Attribute
- tool "cg"
- name "Static"
- value 203)))
- (object Attribute
- tool "cg"
- name "FriendKindSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)
- (object Attribute
- tool "cg"
- name "Friend"
- value 204)))
- (object Attribute
- tool "cg"
- name "GenerateSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "DeclareAndDefine"
- value 199)
- (object Attribute
- tool "cg"
- name "DeclareOnly"
- value 205)
- (object Attribute
- tool "cg"
- name "DoNotDeclare"
- value 206)))
- (object Attribute
- tool "cg"
- name "VisibilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Public"
- value 45)
- (object Attribute
- tool "cg"
- name "Protected"
- value 44)
- (object Attribute
- tool "cg"
- name "Private"
- value 43)
- (object Attribute
- tool "cg"
- name "Implementation"
- value 14)))
- (object Attribute
- tool "cg"
- name "ConstValue"
- value "")
- (object Attribute
- tool "cg"
- name "GenerateDefaultSpecifier"
- value FALSE)
- (object Attribute
- tool "cg"
- name "DefaultSpecifier"
- value "")))
- (object Attribute
- tool "cg"
- name "default__Module-Spec"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Generate"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegions"
- value ("GenerateEmptyRegionSet" 3))
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegionSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "None"
- value 0)
- (object Attribute
- tool "cg"
- name "Preserved"
- value 1)
- (object Attribute
- tool "cg"
- name "Unpreserved"
- value 2)
- (object Attribute
- tool "cg"
- name "All"
- value 3)))
- (object Attribute
- tool "cg"
- name "CmIdentification"
- value (value Text " %X% %Q% %Z% %W%"))
- (object Attribute
- tool "cg"
- name "CopyrightNotice"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "FileName"
- value "AUTO GENERATE")
- (object Attribute
- tool "cg"
- name "AllowExtensionlessFileName"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InclusionProtectionSymbol"
- value "AUTO GENERATE")
- (object Attribute
- tool "cg"
- name "IncludeFormat"
- value (value Text
-|// $package
-|#include "$file"
-|
- ))
- (object Attribute
- tool "cg"
- name "IncludeBySimpleName"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IncludePrecompiledHeader"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IncludeOrder"
- value "AMIR")
- (object Attribute
- tool "cg"
- name "AdditionalIncludes"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "InliningStyle"
- value ("InliningStyleSet" 207))
- (object Attribute
- tool "cg"
- name "InliningStyleSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "InClassDeclaration"
- value 208)
- (object Attribute
- tool "cg"
- name "FollowingClassDeclaration"
- value 207)))
- (object Attribute
- tool "cg"
- name "TypesDefined"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "IncludeClosure"
- value (value Text ""))))
- (object Attribute
- tool "cg"
- name "default__Module-Body"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Generate"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegions"
- value ("GenerateEmptyRegionSet" 3))
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegionSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "None"
- value 0)
- (object Attribute
- tool "cg"
- name "Preserved"
- value 1)
- (object Attribute
- tool "cg"
- name "Unpreserved"
- value 2)
- (object Attribute
- tool "cg"
- name "All"
- value 3)))
- (object Attribute
- tool "cg"
- name "CmIdentification"
- value (value Text " %X% %Q% %Z% %W%"))
- (object Attribute
- tool "cg"
- name "CopyrightNotice"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "FileName"
- value "AUTO GENERATE")
- (object Attribute
- tool "cg"
- name "AllowExtensionlessFileName"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IncludeFormat"
- value (value Text
-|// $package
-|#include "$file"
-|
- ))
- (object Attribute
- tool "cg"
- name "IncludeBySimpleName"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IncludePrecompiledHeader"
- value TRUE)
- (object Attribute
- tool "cg"
- name "IncludeOrder"
- value "AMIR")
- (object Attribute
- tool "cg"
- name "AdditionalIncludes"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "InliningStyle"
- value ("InliningStyleSet" 207))
- (object Attribute
- tool "cg"
- name "InliningStyleSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "InClassDeclaration"
- value 208)
- (object Attribute
- tool "cg"
- name "FollowingClassDeclaration"
- value 207)))
- (object Attribute
- tool "cg"
- name "TypesDefined"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "IncludeClosure"
- value (value Text ""))))
- (object Attribute
- tool "cg"
- name "default__Operation"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "CodeName"
- value "")
- (object Attribute
- tool "cg"
- name "OperationKind"
- value ("OperationKindSet" 200))
- (object Attribute
- tool "cg"
- name "OperationKindSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)
- (object Attribute
- tool "cg"
- name "Static"
- value 203)
- (object Attribute
- tool "cg"
- name "Friend"
- value 204)))
- (object Attribute
- tool "cg"
- name "OperationIsConst"
- value FALSE)
- (object Attribute
- tool "cg"
- name "OperationIsExplicit"
- value FALSE)
- (object Attribute
- tool "cg"
- name "Inline"
- value FALSE)
- (object Attribute
- tool "cg"
- name "EntryCode"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "ExitCode"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegions"
- value ("GenerateEmptyRegionSet" 3))
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegionSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "None"
- value 0)
- (object Attribute
- tool "cg"
- name "Preserved"
- value 1)
- (object Attribute
- tool "cg"
- name "Unpreserved"
- value 2)
- (object Attribute
- tool "cg"
- name "All"
- value 3)))
- (object Attribute
- tool "cg"
- name "BodyAnnotations"
- value "")
- (object Attribute
- tool "cg"
- name "OperationIsOneWay"
- value FALSE)
- (object Attribute
- tool "cg"
- name "Context"
- value "")
- (object Attribute
- tool "cg"
- name "Raises"
- value "")))
- (object Attribute
- tool "cg"
- name "default__Has"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "CodeName"
- value "")
- (object Attribute
- tool "cg"
- name "Ordered"
- value TRUE)
- (object Attribute
- tool "cg"
- name "NameIfUnlabeled"
- value "the_$supplier")
- (object Attribute
- tool "cg"
- name "GenerateDataMember"
- value TRUE)
- (object Attribute
- tool "cg"
- name "DataMemberName"
- value "$relationship")
- (object Attribute
- tool "cg"
- name "DataMemberVisibility"
- value ("DataMemberVisibilitySet" 14))
- (object Attribute
- tool "cg"
- name "DataMemberVisibilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Public"
- value 45)
- (object Attribute
- tool "cg"
- name "Protected"
- value 44)
- (object Attribute
- tool "cg"
- name "Private"
- value 43)
- (object Attribute
- tool "cg"
- name "Implementation"
- value 14)
- (object Attribute
- tool "cg"
- name "AtRelationshipVisibility"
- value 210)))
- (object Attribute
- tool "cg"
- name "DataMemberMutability"
- value ("DataMemberMutabilitySet" 0))
- (object Attribute
- tool "cg"
- name "DataMemberMutabilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Unrestricted"
- value 0)
- (object Attribute
- tool "cg"
- name "Mutable"
- value 1)
- (object Attribute
- tool "cg"
- name "Const"
- value 2)))
- (object Attribute
- tool "cg"
- name "DataMemberIsVolatile"
- value FALSE)
- (object Attribute
- tool "cg"
- name "DataMemberFieldSize"
- value "")
- (object Attribute
- tool "cg"
- name "InitialValue"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "GenerateGetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateSetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GetName"
- value "get_$relationship")
- (object Attribute
- tool "cg"
- name "SetName"
- value "set_$relationship")
- (object Attribute
- tool "cg"
- name "GetSetKinds"
- value ("GetSetKindsSet" 200))
- (object Attribute
- tool "cg"
- name "GetSetKindsSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)
- (object Attribute
- tool "cg"
- name "Static"
- value 203)
- (object Attribute
- tool "cg"
- name "Friend"
- value 204)))
- (object Attribute
- tool "cg"
- name "ContainerClass"
- value "")
- (object Attribute
- tool "cg"
- name "SelectorName"
- value "")
- (object Attribute
- tool "cg"
- name "SelectorType"
- value "")
- (object Attribute
- tool "cg"
- name "GetIsConst"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GetResultIsConst"
- value ("GetResultIsConstSet" 2))
- (object Attribute
- tool "cg"
- name "GetResultIsConstSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "False"
- value 0)
- (object Attribute
- tool "cg"
- name "True"
- value 1)
- (object Attribute
- tool "cg"
- name "Same_As_Function"
- value 2)))
- (object Attribute
- tool "cg"
- name "GetSetByReference"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineGet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "SetReturnsValue"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineSet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "ForwardReferenceOnly"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateForwardReference"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IsReadOnly"
- value FALSE)
- (object Attribute
- tool "cg"
- name "BoundedHasRelType"
- value ("HasRelTypeSet" 47))
- (object Attribute
- tool "cg"
- name "HasRelTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Array"
- value 24)
- (object Attribute
- tool "cg"
- name "Sequence"
- value 47)))))
- (object Attribute
- tool "cg"
- name "default__Association"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "NameIfUnlabeled"
- value "the_$targetClass")))
- (object Attribute
- tool "cg"
- name "default__Inherit"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "InstanceArguments"
- value "")))
- (object Attribute
- tool "cg"
- name "default__Role"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "CodeName"
- value "")
- (object Attribute
- tool "cg"
- name "ForwardReferenceOnly"
- value FALSE)
- (object Attribute
- tool "cg"
- name "NameIfUnlabeled"
- value "the_$targetClass")
- (object Attribute
- tool "cg"
- name "GenerateDataMember"
- value TRUE)
- (object Attribute
- tool "cg"
- name "DataMemberName"
- value "$target")
- (object Attribute
- tool "cg"
- name "DataMemberVisibility"
- value ("DataMemberVisibilitySet" 14))
- (object Attribute
- tool "cg"
- name "DataMemberVisibilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Public"
- value 45)
- (object Attribute
- tool "cg"
- name "Protected"
- value 44)
- (object Attribute
- tool "cg"
- name "Private"
- value 43)
- (object Attribute
- tool "cg"
- name "Implementation"
- value 14)
- (object Attribute
- tool "cg"
- name "AtRelationshipVisibility"
- value 210)))
- (object Attribute
- tool "cg"
- name "DataMemberMutability"
- value ("DataMemberMutabilitySet" 0))
- (object Attribute
- tool "cg"
- name "DataMemberMutabilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Unrestricted"
- value 0)
- (object Attribute
- tool "cg"
- name "Mutable"
- value 1)
- (object Attribute
- tool "cg"
- name "Const"
- value 2)))
- (object Attribute
- tool "cg"
- name "DataMemberIsVolatile"
- value FALSE)
- (object Attribute
- tool "cg"
- name "DataMemberFieldSize"
- value "")
- (object Attribute
- tool "cg"
- name "InitialValue"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "ContainerClass"
- value "")
- (object Attribute
- tool "cg"
- name "ContainerGet"
- value "$data.get($keys)")
- (object Attribute
- tool "cg"
- name "ContainerSet"
- value "$data.set($keys,$value)")
- (object Attribute
- tool "cg"
- name "QualifiedContainer"
- value "")
- (object Attribute
- tool "cg"
- name "AssocClassContainer"
- value "$supplier *")
- (object Attribute
- tool "cg"
- name "AssocClassInitialValue"
- value (value Text ""))
- (object Attribute
- tool "cg"
- name "GetSetKinds"
- value ("GetSetKindsSet" 200))
- (object Attribute
- tool "cg"
- name "GetSetKindsSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)
- (object Attribute
- tool "cg"
- name "Static"
- value 203)
- (object Attribute
- tool "cg"
- name "Friend"
- value 204)))
- (object Attribute
- tool "cg"
- name "GetSetByReference"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateGetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GetName"
- value "get_$target")
- (object Attribute
- tool "cg"
- name "GetIsConst"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GetResultIsConst"
- value ("GetResultIsConstSet" 2))
- (object Attribute
- tool "cg"
- name "GetResultIsConstSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "False"
- value 0)
- (object Attribute
- tool "cg"
- name "True"
- value 1)
- (object Attribute
- tool "cg"
- name "Same_As_Function"
- value 2)))
- (object Attribute
- tool "cg"
- name "InlineGet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateSetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "SetName"
- value "set_$target")
- (object Attribute
- tool "cg"
- name "SetReturnsValue"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineSet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "QualifiedGetSetByReference"
- value ("QualifiedGetSetByReferenceSet" 2))
- (object Attribute
- tool "cg"
- name "QualifiedGetSetByReferenceSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "False"
- value 0)
- (object Attribute
- tool "cg"
- name "True"
- value 1)
- (object Attribute
- tool "cg"
- name "Same_As_GetSetByReference"
- value 2)))
- (object Attribute
- tool "cg"
- name "GenerateQualifiedGetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "QualifiedGetName"
- value "get_$target")
- (object Attribute
- tool "cg"
- name "QualifiedGetIsConst"
- value TRUE)
- (object Attribute
- tool "cg"
- name "QualifiedGetResultIsConst"
- value ("GetResultIsConstSet" 2))
- (object Attribute
- tool "cg"
- name "InlineQualifiedGet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateQualifiedSetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "QualifiedSetName"
- value "set_$target")
- (object Attribute
- tool "cg"
- name "QualifiedSetReturnsValue"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineQualifiedSet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateAssocClassDataMember"
- value TRUE)
- (object Attribute
- tool "cg"
- name "AssocClassDataMemberName"
- value "$target")
- (object Attribute
- tool "cg"
- name "AssocClassDataMemberVisibility"
- value ("DataMemberVisibilitySet" 14))
- (object Attribute
- tool "cg"
- name "DataMemberVisibilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Public"
- value 45)
- (object Attribute
- tool "cg"
- name "Protected"
- value 44)
- (object Attribute
- tool "cg"
- name "Private"
- value 43)
- (object Attribute
- tool "cg"
- name "Implementation"
- value 14)
- (object Attribute
- tool "cg"
- name "AtRelationshipVisibility"
- value 210)))
- (object Attribute
- tool "cg"
- name "AssocClassDataMemberMutability"
- value ("DataMemberMutabilitySet" 0))
- (object Attribute
- tool "cg"
- name "DataMemberMutabilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Unrestricted"
- value 0)
- (object Attribute
- tool "cg"
- name "Mutable"
- value 1)
- (object Attribute
- tool "cg"
- name "Const"
- value 2)))
- (object Attribute
- tool "cg"
- name "AssocClassDataMemberIsVolatile"
- value FALSE)
- (object Attribute
- tool "cg"
- name "AssocClassGetSetKinds"
- value ("GetSetKindsSet" 200))
- (object Attribute
- tool "cg"
- name "GenerateAssocClassGetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "AssocClassGetName"
- value "get_$target")
- (object Attribute
- tool "cg"
- name "AssocClassGetIsConst"
- value TRUE)
- (object Attribute
- tool "cg"
- name "AssocClassGetResultIsConst"
- value ("GetResultIsConstSet" 2))
- (object Attribute
- tool "cg"
- name "InlineAssocClassGet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateAssocClassSetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "AssocClassSetName"
- value "set_$target")
- (object Attribute
- tool "cg"
- name "AssocClassSetReturnsValue"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineAssocClassSet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "AssocClassForwardReferenceOnly"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateForwardReference"
- value FALSE)
- (object Attribute
- tool "cg"
- name "IsReadOnly"
- value FALSE)
- (object Attribute
- tool "cg"
- name "BoundedRoleType"
- value ("AssocTypeSet" 47))
- (object Attribute
- tool "cg"
- name "AssocTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Array"
- value 24)
- (object Attribute
- tool "cg"
- name "Sequence"
- value 47)))))
- (object Attribute
- tool "cg"
- name "default__Attribute"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "CodeName"
- value "")
- (object Attribute
- tool "cg"
- name "GenerateDataMember"
- value TRUE)
- (object Attribute
- tool "cg"
- name "DataMemberName"
- value "$attribute")
- (object Attribute
- tool "cg"
- name "DataMemberVisibility"
- value ("DataMemberVisibilitySet" 14))
- (object Attribute
- tool "cg"
- name "DataMemberVisibilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Public"
- value 45)
- (object Attribute
- tool "cg"
- name "Protected"
- value 44)
- (object Attribute
- tool "cg"
- name "Private"
- value 43)
- (object Attribute
- tool "cg"
- name "Implementation"
- value 14)
- (object Attribute
- tool "cg"
- name "AtAttributeVisibility"
- value 211)))
- (object Attribute
- tool "cg"
- name "DataMemberMutability"
- value ("DataMemberMutabilitySet" 0))
- (object Attribute
- tool "cg"
- name "DataMemberMutabilitySet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Unrestricted"
- value 0)
- (object Attribute
- tool "cg"
- name "Mutable"
- value 1)
- (object Attribute
- tool "cg"
- name "Const"
- value 2)))
- (object Attribute
- tool "cg"
- name "DataMemberIsVolatile"
- value FALSE)
- (object Attribute
- tool "cg"
- name "DataMemberFieldSize"
- value "")
- (object Attribute
- tool "cg"
- name "GenerateGetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GenerateSetOperation"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GetName"
- value "get_$attribute")
- (object Attribute
- tool "cg"
- name "SetName"
- value "set_$attribute")
- (object Attribute
- tool "cg"
- name "GetSetKinds"
- value ("GetSetKindsSet" 200))
- (object Attribute
- tool "cg"
- name "GetSetKindsSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Common"
- value 200)
- (object Attribute
- tool "cg"
- name "Virtual"
- value 201)
- (object Attribute
- tool "cg"
- name "Abstract"
- value 202)
- (object Attribute
- tool "cg"
- name "Static"
- value 203)
- (object Attribute
- tool "cg"
- name "Friend"
- value 204)))
- (object Attribute
- tool "cg"
- name "GetIsConst"
- value TRUE)
- (object Attribute
- tool "cg"
- name "GetResultIsConst"
- value ("GetResultIsConstSet" 2))
- (object Attribute
- tool "cg"
- name "GetResultIsConstSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "False"
- value 0)
- (object Attribute
- tool "cg"
- name "True"
- value 1)
- (object Attribute
- tool "cg"
- name "Same_As_Function"
- value 2)))
- (object Attribute
- tool "cg"
- name "GetSetByReference"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineGet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "SetReturnsValue"
- value FALSE)
- (object Attribute
- tool "cg"
- name "InlineSet"
- value TRUE)
- (object Attribute
- tool "cg"
- name "CaseSpecifier"
- value "")
- (object Attribute
- tool "cg"
- name "IsReadOnly"
- value FALSE)))
- (object Attribute
- tool "cg"
- name "default__Uses"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "ForwardReferenceOnly"
- value FALSE)
- (object Attribute
- tool "cg"
- name "BodyReferenceOnly"
- value FALSE)
- (object Attribute
- tool "cg"
- name "GenerateForwardReference"
- value FALSE)))
- (object Attribute
- tool "cg"
- name "default__Subsystem"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "Directory"
- value "AUTO GENERATE")
- (object Attribute
- tool "cg"
- name "DirectoryIsOnSearchList"
- value FALSE)
- (object Attribute
- tool "cg"
- name "PrecompiledHeader"
- value "")))
- (object Attribute
- tool "cg"
- name "default__Category"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "IsNamespace"
- value FALSE)
- (object Attribute
- tool "cg"
- name "Indent"
- value 2)
- (object Attribute
- tool "cg"
- name "CodeName"
- value "")
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegions"
- value ("GenerateEmptyRegionSet" 3))
- (object Attribute
- tool "cg"
- name "GenerateEmptyRegionSet"
- value (list Attribute_Set
- (object Attribute
- tool "cg"
- name "None"
- value 0)
- (object Attribute
- tool "cg"
- name "Preserved"
- value 1)
- (object Attribute
- tool "cg"
- name "Unpreserved"
- value 2)
- (object Attribute
- tool "cg"
- name "All"
- value 3)))))
- (object Attribute
- tool "MSVC"
- name "propertyId"
- value "809135966")
- (object Attribute
- tool "MSVC"
- name "default__Project"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Version"
- value "5.0")))
- (object Attribute
- tool "MSVC"
- name "default__Class"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Type"
- value ("MSVCClassTypeSet" 0))
- (object Attribute
- tool "MSVC"
- name "MSVCClassTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Normal"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Interface_Part"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Connection_Part"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Class_Factory"
- value 3)))
- (object Attribute
- tool "MSVC"
- name "CObjectFunctionality"
- value ("CObjectFunctionalitySet" 0))
- (object Attribute
- tool "MSVC"
- name "CObjectFunctionalitySet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "None"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Dynamic"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Dyncreate"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Serial"
- value 3)))
- (object Attribute
- tool "MSVC"
- name "GenerateOverrideGroup"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "GenerateDataGroup"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_DATA_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateFieldGroup"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_FIELD_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateMessageGroup"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "GenerateMessageMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_MSG_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "MESSAGE_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "OLEFactory"
- value ("OLEFactorySet" 0))
- (object Attribute
- tool "MSVC"
- name "OLEFactorySet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "None"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Built_in"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Simple"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Licensed"
- value 3)))
- (object Attribute
- tool "MSVC"
- name "OLEName"
- value "")
- (object Attribute
- tool "MSVC"
- name "OLEClassID"
- value "")
- (object Attribute
- tool "MSVC"
- name "GenerateOLECtlType"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "OLECtlType"
- value "")
- (object Attribute
- tool "MSVC"
- name "GenerateOLETypeLib"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "OLETypeLibID"
- value "")
- (object Attribute
- tool "MSVC"
- name "OLETypeLibMajor"
- value "")
- (object Attribute
- tool "MSVC"
- name "OLETypeLibMinor"
- value "")
- (object Attribute
- tool "MSVC"
- name "GeneratePropPageIDs"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "OLEPropPageIDs"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateDispatchMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_DISPATCH_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "AFX_DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "StockProperties"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "StockFunctions"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DispatchDefValue"
- value "")
- (object Attribute
- tool "MSVC"
- name "GenerateDispIdEnum"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_DISP_ID_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateInterfaceMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "INTERFACE_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "InitInterface"
- value "")
- (object Attribute
- tool "MSVC"
- name "GenerateEventMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_EVENT_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "AFX_EVENT_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "EVENT_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "StockEvents"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateEventSinkMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_EVENTSINK_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "AFX_EVENTSINK_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "EVENTSINK_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "PropNotifySinks"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateConnectionMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "CONNECTION_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "ConnectionPointIID"
- value "")
- (object Attribute
- tool "MSVC"
- name "InheritanceType"
- value "")
- (object Attribute
- tool "MSVC"
- name "DeclSpec"
- value "")
- (object Attribute
- tool "MSVC"
- name "OLECommands"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "MFCDeclares"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "MFCImplements"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "ATL_Declares"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateCOMMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "COM_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateConnectionPointMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "CONNECTION_POINT_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateMsgMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "MSG_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GeneratePropertyMap"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "PROPERTY_MAP_Entries"
- value (value Text ""))))
- (object Attribute
- tool "MSVC"
- name "default__Operation"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Type"
- value ("MSVCOperationTypeSet" 0))
- (object Attribute
- tool "MSVC"
- name "MSVCOperationTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Normal"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Virtual_Override"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Message_Handler"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Dispatch_Handler"
- value 3)
- (object Attribute
- tool "MSVC"
- name "Event_Firing_Function"
- value 4)
- (object Attribute
- tool "MSVC"
- name "Event_Sink_Handler"
- value 5)
- (object Attribute
- tool "MSVC"
- name "Std_OLE_Method"
- value 6)
- (object Attribute
- tool "MSVC"
- name "Command_Parser"
- value 7)
- (object Attribute
- tool "MSVC"
- name "Property_Get_Function"
- value 8)
- (object Attribute
- tool "MSVC"
- name "Property_Set_Function"
- value 9)
- (object Attribute
- tool "MSVC"
- name "Property_Notify_Function"
- value 10)
- (object Attribute
- tool "MSVC"
- name "Macro_Generated_Function"
- value 11)))
- (object Attribute
- tool "MSVC"
- name "AFX_MSG_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "MESSAGE_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "AFX_DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "AFX_EVENT_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "EVENT_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "AFX_EVENTSINK_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "EVENTSINK_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "CallType"
- value "")
- (object Attribute
- tool "MSVC"
- name "DeclSpec"
- value "")
- (object Attribute
- tool "MSVC"
- name "BodyImage"
- value (value Text ""))))
- (object Attribute
- tool "MSVC"
- name "default__Role"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Type"
- value ("MSVCAttributeTypeSet" 0))
- (object Attribute
- tool "MSVC"
- name "MSVCAttributeTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Normal"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Member_Property"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Get_Set_Property"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Dialog_Data"
- value 3)
- (object Attribute
- tool "MSVC"
- name "Field_Data"
- value 4)
- (object Attribute
- tool "MSVC"
- name "Stock_Property"
- value 5)))
- (object Attribute
- tool "MSVC"
- name "AFX_DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DeclSpec"
- value "")
- (object Attribute
- tool "MSVC"
- name "PointerBase"
- value "")
- (object Attribute
- tool "MSVC"
- name "CallType"
- value "")
- (object Attribute
- tool "MSVC"
- name "StockPropertyImplementation"
- value "")))
- (object Attribute
- tool "MSVC"
- name "default__Has"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Type"
- value ("MSVCAttributeTypeSet" 0))
- (object Attribute
- tool "MSVC"
- name "MSVCAttributeTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Normal"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Member_Property"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Get_Set_Property"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Dialog_Data"
- value 3)
- (object Attribute
- tool "MSVC"
- name "Field_Data"
- value 4)
- (object Attribute
- tool "MSVC"
- name "Stock_Property"
- value 5)))
- (object Attribute
- tool "MSVC"
- name "AFX_DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DeclSpec"
- value "")
- (object Attribute
- tool "MSVC"
- name "PointerBase"
- value "")
- (object Attribute
- tool "MSVC"
- name "CallType"
- value "")
- (object Attribute
- tool "MSVC"
- name "StockPropertyImplementation"
- value "")))
- (object Attribute
- tool "MSVC"
- name "default__Attribute"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Type"
- value ("MSVCAttributeTypeSet" 0))
- (object Attribute
- tool "MSVC"
- name "MSVCAttributeTypeSet"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "Normal"
- value 0)
- (object Attribute
- tool "MSVC"
- name "Member_Property"
- value 1)
- (object Attribute
- tool "MSVC"
- name "Get_Set_Property"
- value 2)
- (object Attribute
- tool "MSVC"
- name "Dialog_Data"
- value 3)
- (object Attribute
- tool "MSVC"
- name "Field_Data"
- value 4)
- (object Attribute
- tool "MSVC"
- name "Stock_Property"
- value 5)))
- (object Attribute
- tool "MSVC"
- name "AFX_DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DISPATCH_MAP_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "DeclSpec"
- value "")
- (object Attribute
- tool "MSVC"
- name "PointerBase"
- value "")
- (object Attribute
- tool "MSVC"
- name "CallType"
- value "")
- (object Attribute
- tool "MSVC"
- name "StockPropertyImplementation"
- value "")))
- (object Attribute
- tool "MSVC"
- name "default__Module-Spec"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "GenerateIncludesGroup"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_INCLUDES_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateInsertLocation"
- value FALSE)))
- (object Attribute
- tool "MSVC"
- name "default__Module-Body"
- value (list Attribute_Set
- (object Attribute
- tool "MSVC"
- name "GenerateIncludesGroup"
- value FALSE)
- (object Attribute
- tool "MSVC"
- name "AFX_INCLUDES_Entries"
- value (value Text ""))
- (object Attribute
- tool "MSVC"
- name "GenerateInsertLocation"
- value FALSE)))
- (object Attribute
- tool "cg"
- name "HiddenTool"
- value FALSE)
- (object Attribute
- tool "SCC"
- name "HiddenTool"
- value FALSE))
- quid "355326EE0040"))
+
+(object Petal
+ version 42
+ _written "Rose 4.5.8054.1"
+ charSet 0)
+
+(object Design "Logical View"
+ is_unit TRUE
+ is_loaded TRUE
+ defaults (object defaults
+ rightMargin 0.250000
+ leftMargin 0.250000
+ topMargin 0.250000
+ bottomMargin 0.500000
+ pageOverlap 0.250000
+ clipIconLabels TRUE
+ autoResize TRUE
+ snapToGrid TRUE
+ gridX 16
+ gridY 16
+ defaultFont (object Font
+ size 9
+ face "helvetica"
+ bold FALSE
+ italics FALSE
+ underline FALSE
+ strike FALSE
+ color 0
+ default_color TRUE)
+ showMessageNum 1
+ showClassOfObject TRUE
+ notation "Booch")
+ root_usecase_package (object Class_Category "Use Case View"
+ quid "355326EE003D"
+ exportControl "Public"
+ global TRUE
+ logical_models (list unit_reference_list)
+ logical_presentations (list unit_reference_list
+ (object UseCaseDiagram "Main"
+ quid "355326F5025B"
+ title "Main"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list))))
+ root_category (object Class_Category "Logical View"
+ quid "355326EE002A"
+ exportControl "Public"
+ global TRUE
+ subsystem "Component View"
+ quidu "355326EE003E"
+ logical_models (list unit_reference_list
+ (object Class "CVersitParser"
+ quid "3553270E02EC"
+ documentation "The base Versit parser class, providing functions to aid parsing a stream into a Versit object, as well as the facility to add properties and sub-entities to an existing object. The key methods are Internalize and Externalize, used to convert to and from stream form."
+ fields (list has_relationship_list
+ (object Has_Relationship
+ quid "3553302402E7"
+ supplier "Logical View::CParserPropertyHBufC"
+ quidu "35532EC801C4"
+ supplier_cardinality (value cardinality "0..n"))
+ (object Has_Relationship
+ quid "356EAC060148"
+ label "0..n"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ operations (list Operations
+ (object Operation "InternalizeL"
+ quid "3553356B03C6"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "ExternalizeL"
+ quid "355335B802EA"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "AddEntityL"
+ quid "356E92480020"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "AddPropertyL"
+ quid "356E925602FB"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "EntityL"
+ quid "356E9265031B"
+ result "CArrayPtrFlat<CVersitParser>"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "PropertyL"
+ quid "356E9273039D"
+ result "CArrayPtrFlat<CParserProperty>"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "GroupOfPropertiesL"
+ quid "356E92C403A4"
+ result "CArrayPtrFlat<CParserProperty>"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0))
+ language "C++")
+ (object Class "CParserVCard"
+ quid "355327CA0301"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "35532D7202F9"
+ supplier "Logical View::CVersitParser"
+ quidu "3553270E02EC"))
+ language "C++")
+ (object Class "CParserVCal"
+ quid "35532CB10020"
+ fields (list has_relationship_list
+ (object Has_Relationship
+ quid "355331AE009F"
+ supplier "Logical View::VCalToDoParse"
+ quidu "35532D9A0057"
+ supplier_cardinality (value cardinality "0..n"))
+ (object Has_Relationship
+ quid "355331D301B0"
+ supplier "Logical View::CParserVCalEntity"
+ quidu "35532DAE02CD"
+ supplier_cardinality (value cardinality "0..n")))
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "35532D6A01AD"
+ supplier "Logical View::CVersitParser"
+ quidu "3553270E02EC"))
+ language "C++")
+ (object Class "VCalToDoParse"
+ quid "35532D9A0057"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "35532DCF019E"
+ supplier "Logical View::CVersitParser"
+ quidu "3553270E02EC"))
+ language "C++")
+ (object Class "CParserVCalEntity"
+ quid "35532DAE02CD"
+ documentation "This class represents a Todo or Event sub-entity within the VCal object"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "35532DD8029B"
+ supplier "Logical View::CVersitParser"
+ quidu "3553270E02EC"))
+ language "C++")
+ (object Class "CParserParam"
+ quid "35532EA700F4"
+ documentation "A generic property parameter class, consisting of a Name and optionally a value, both in descriptor form."
+ operations (list Operations
+ (object Operation "Name"
+ quid "356E942C00F8"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "Value"
+ quid "356E943102AE"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "WriteValueToStream"
+ quid "356E944D02F4"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0))
+ language "C++")
+ (object Class "CParserPropertyHBufC"
+ quid "35532EC801C4"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "3553301D0016"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ language "C++")
+ (object Class "CVTimeParam"
+ quid "35532F2602EC"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "35532F4100CE"
+ supplier "Logical View::CParserParam"
+ quidu "35532EA700F4"))
+ language "C++")
+ (object Class "CParserProperty"
+ quid "35532FAE025B"
+ documentation "The Base property class, corresponding to a property, and storing its name and associated groups and parameters. Subclasses are identified by Uid."
+ operations (list Operations
+ (object Operation "ExternalizeL"
+ quid "356EAE71035B"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "Param"
+ quid "356EAE8300E0"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "AddParamL"
+ quid "356EAE8B0019"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "Group"
+ quid "356EAE92013C"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "Uid"
+ quid "356EAE950190"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "Name"
+ quid "356EAE9C000A"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "SetName"
+ quid "356EAEA1007F"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0)
+ (object Operation "WriteValueToStream"
+ quid "356EAEAB028C"
+ concurrency "Sequential"
+ opExportControl "Public"
+ uid 0))
+ language "C++")
+ (object Class "CPropertyProperty"
+ quid "35532FED0021"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "3553302001B5"
+ supplier "Logical View::CParserPropertyHBufC"
+ quidu "35532EC801C4"))
+ language "C++")
+ (object Class "AgendaModelVCalWriter/Reader"
+ quid "3556CADC02A2"
+ used_nodes (list uses_relationship_list
+ (object Uses_Relationship
+ quid "3556CB2A03B3"
+ supplier "Logical View::CParserPropertyHBufC"
+ quidu "35532EC801C4")
+ (object Uses_Relationship
+ quid "3556CB4E0382"
+ supplier "Logical View::CParserVCal"
+ quidu "35532CB10020"))
+ language "C++")
+ (object Class "CVAgendaModelVCalReader"
+ quid "3556CB0A008B"
+ language "C++")
+ (object Class "CParserPropertyDateTime"
+ quid "356EAC6F029E"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "356EAC84026C"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ language "C++")
+ (object Class "CParserPropertyCDesCArray"
+ quid "356EAC720049"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "356EAC7E029F"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ language "C++")
+ (object Class "CParserPropertyMultiDateTime"
+ quid "356EAC790361"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "356EAC87007C"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ language "C++")
+ (object Class "CParserPropertyInt"
+ quid "356EAE41015D"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "356EAE460024"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ language "C++")
+ (object Class "CParserPropertyAlarm"
+ quid "356EAE5B001A"
+ superclasses (list inheritance_relationship_list
+ (object Inheritance_Relationship
+ quid "356EAE660111"
+ supplier "Logical View::CParserProperty"
+ quidu "35532FAE025B"))
+ language "C++")
+ (object Class "ContactsApp"
+ quid "356EAF280282"
+ used_nodes (list uses_relationship_list
+ (object Uses_Relationship
+ quid "356EAF3802B7"
+ supplier "Logical View::CParserVCard"
+ quidu "355327CA0301"))
+ language "C++"))
+ logical_presentations (list unit_reference_list
+ (object ClassDiagram "Main"
+ quid "355326F5020A"
+ title "Main"
+ zoom 69
+ max_height 28350
+ max_width 21600
+ origin_x 37
+ origin_y 0
+ items (list diagram_item_list
+ (object ClassView "Class" "Logical View::CVersitParser" @1
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1728, 480)
+ label (object ItemLabel
+ Parent_View @1
+ location (1528, 266)
+ nlines 2
+ max_width 477
+ justify 0
+ label "CVersitParser")
+ icon_style "Icon"
+ quidu "3553270E02EC"
+ compartment (object Compartment
+ Parent_View @1
+ location (1528, 329)
+ icon_style "Icon"
+ anchor 2
+ nlines 9
+ max_width 382
+ justify 0)
+ width 692
+ height 624
+ annotation 8
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::CParserVCal" @2
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (2112, 1312)
+ label (object ItemLabel
+ Parent_View @2
+ location (1944, 1228)
+ nlines 2
+ max_width 396
+ justify 0
+ label "CParserVCal")
+ icon_style "Icon"
+ quidu "35532CB10020"
+ compartment (object Compartment
+ Parent_View @2
+ location (1944, 1291)
+ icon_style "Icon"
+ anchor 2
+ nlines 2
+ max_width 312
+ justify 0)
+ width 574
+ annotation 8
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::CParserVCard" @3
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (3088, 832)
+ label (object ItemLabel
+ Parent_View @3
+ location (2984, 748)
+ nlines 2
+ max_width 240
+ justify 0
+ label "CParserVCard")
+ icon_style "Icon"
+ quidu "355327CA0301"
+ annotation 8
+ autoResize TRUE)
+ (object InheritView "" @4
+ stereotype TRUE
+ quidu "35532D6A01AD"
+ client @2
+ supplier @1
+ line_style 0)
+ (object InheritView "" @5
+ stereotype TRUE
+ quidu "35532D7202F9"
+ client @3
+ supplier @1
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserVCalEntity" @6
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (2976, 1472)
+ label (object ItemLabel
+ Parent_View @6
+ location (2872, 1388)
+ nlines 2
+ max_width 240
+ justify 0
+ label "CParserVCalEntity")
+ icon_style "Icon"
+ quidu "35532DAE02CD"
+ annotation 8
+ autoResize TRUE)
+ (object InheritView "" @7
+ stereotype TRUE
+ quidu "35532DD8029B"
+ client @6
+ supplier @1
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserParam" @8
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (416, 208)
+ label (object ItemLabel
+ Parent_View @8
+ location (239, 112)
+ nlines 2
+ max_width 418
+ justify 0
+ label "CParserParam")
+ icon_style "Icon"
+ quidu "35532EA700F4"
+ compartment (object Compartment
+ Parent_View @8
+ location (239, 175)
+ icon_style "Icon"
+ anchor 2
+ nlines 3
+ max_width 344
+ justify 0)
+ width 606
+ height 286
+ annotation 8
+ autoResize TRUE)
+ (object HasView "" @9
+ stereotype TRUE
+ quidu "355331D301B0"
+ client @2
+ supplier @6
+ line_style 0)
+ (object ClassView "Class" "Logical View::AgendaModelVCalWriter/Reader" @10
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1776, 1776)
+ label (object ItemLabel
+ Parent_View @10
+ location (1644, 1692)
+ nlines 2
+ max_width 310
+ justify 0
+ label "AgendaModelVCalWriter/Reader")
+ icon_style "Icon"
+ quidu "3556CADC02A2"
+ width 450
+ annotation 8
+ autoResize TRUE)
+ (object UsesView "" @11
+ stereotype TRUE
+ quidu "3556CB4E0382"
+ client @10
+ supplier @2
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserProperty" @12
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (736, 896)
+ label (object ItemLabel
+ Parent_View @12
+ location (555, 701)
+ nlines 2
+ max_width 430
+ justify 0
+ label "CParserProperty")
+ icon_style "Icon"
+ quidu "35532FAE025B"
+ compartment (object Compartment
+ Parent_View @12
+ location (555, 764)
+ icon_style "Icon"
+ anchor 2
+ nlines 8
+ max_width 344
+ justify 0)
+ width 624
+ height 570
+ annotation 8
+ autoResize TRUE)
+ (object HasView "0..n" @13
+ label (object ItemLabel
+ Parent_View @13
+ location (1282, 660)
+ anchor_loc 1
+ nlines 1
+ max_width 450
+ justify 0
+ label "0..n")
+ stereotype TRUE
+ quidu "356EAC060148"
+ client @1
+ supplier @12
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserPropertyHBufC" @14
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1296, 1552)
+ label (object ItemLabel
+ Parent_View @14
+ location (1186, 1468)
+ nlines 2
+ max_width 256
+ justify 0
+ label "CParserPropertyHBufC")
+ icon_style "Icon"
+ quidu "35532EC801C4"
+ width 372
+ annotation 8
+ autoResize TRUE)
+ (object InheritView "" @15
+ stereotype TRUE
+ quidu "3553301D0016"
+ client @14
+ supplier @12
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserPropertyDateTime" @16
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (704, 1712)
+ label (object ItemLabel
+ Parent_View @16
+ location (585, 1628)
+ nlines 2
+ max_width 278
+ justify 0
+ label "CParserPropertyDateTime")
+ icon_style "Icon"
+ quidu "356EAC6F029E"
+ width 404
+ annotation 8
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::CParserPropertyCDesCArray" @17
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (240, 1408)
+ label (object ItemLabel
+ Parent_View @17
+ location (122, 1324)
+ nlines 2
+ max_width 274
+ justify 0
+ label "CParserPropertyCDesCArray")
+ icon_style "Icon"
+ quidu "356EAC720049"
+ width 398
+ annotation 8
+ autoResize TRUE)
+ (object ClassView "Class" "Logical View::CParserPropertyMultiDateTime" @18
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (336, 2000)
+ label (object ItemLabel
+ Parent_View @18
+ location (220, 1916)
+ nlines 2
+ max_width 270
+ justify 0
+ label "CParserPropertyMultiDateTime")
+ icon_style "Icon"
+ quidu "356EAC790361"
+ width 392
+ annotation 8
+ autoResize TRUE)
+ (object InheritView "" @19
+ stereotype TRUE
+ quidu "356EAC7E029F"
+ client @17
+ supplier @12
+ line_style 0)
+ (object InheritView "" @20
+ stereotype TRUE
+ quidu "356EAC84026C"
+ client @16
+ supplier @12
+ line_style 0)
+ (object InheritView "" @21
+ stereotype TRUE
+ quidu "356EAC87007C"
+ client @18
+ supplier @12
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserPropertyInt" @22
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1280, 1952)
+ label (object ItemLabel
+ Parent_View @22
+ location (1176, 1868)
+ nlines 2
+ max_width 240
+ justify 0
+ label "CParserPropertyInt")
+ icon_style "Icon"
+ quidu "356EAE41015D"
+ annotation 8
+ autoResize TRUE)
+ (object InheritView "" @23
+ stereotype TRUE
+ quidu "356EAE460024"
+ client @22
+ supplier @12
+ line_style 0)
+ (object ClassView "Class" "Logical View::CParserPropertyAlarm" @24
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (1136, 2288)
+ label (object ItemLabel
+ Parent_View @24
+ location (1032, 2204)
+ nlines 2
+ max_width 242
+ justify 0
+ label "CParserPropertyAlarm")
+ icon_style "Icon"
+ quidu "356EAE5B001A"
+ width 352
+ annotation 8
+ autoResize TRUE)
+ (object InheritView "" @25
+ stereotype TRUE
+ quidu "356EAE660111"
+ client @24
+ supplier @12
+ line_style 0)
+ (object ClassView "Class" "Logical View::ContactsApp" @26
+ IncludeAttribute TRUE
+ IncludeOperation TRUE
+ location (3392, 1216)
+ label (object ItemLabel
+ Parent_View @26
+ location (3288, 1132)
+ nlines 2
+ max_width 240
+ justify 0
+ label "ContactsApp")
+ icon_style "Icon"
+ quidu "356EAF280282"
+ annotation 8
+ autoResize TRUE)
+ (object UsesView "" @27
+ stereotype TRUE
+ quidu "356EAF3802B7"
+ client @26
+ supplier @3
+ line_style 0)))))
+ root_subsystem (object SubSystem "Component View"
+ quid "355326EE003E"
+ physical_models (list unit_reference_list)
+ physical_presentations (list unit_reference_list
+ (object Module_Diagram "Main"
+ quid "355326F5025A"
+ title "Main"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list))))
+ process_structure (object Processes
+ quid "355326EE003F"
+ ProcsNDevs (list
+ (object Process_Diagram "Deployment View"
+ quid "355326F5019C"
+ title "Deployment View"
+ zoom 100
+ max_height 28350
+ max_width 21600
+ origin_x 0
+ origin_y 0
+ items (list diagram_item_list))))
+ properties (object Properties
+ attributes (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "DDL"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "DataBase"
+ value ("DataBaseSet" 800))
+ (object Attribute
+ tool "DDL"
+ name "DataBaseSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "ANSI"
+ value 800)
+ (object Attribute
+ tool "DDL"
+ name "Oracle"
+ value 801)
+ (object Attribute
+ tool "DDL"
+ name "SQLServer"
+ value 802)
+ (object Attribute
+ tool "DDL"
+ name "Sybase"
+ value 803)
+ (object Attribute
+ tool "DDL"
+ name "Watcom"
+ value 804)))
+ (object Attribute
+ tool "DDL"
+ name "PrimaryKeyColumnName"
+ value "Id")
+ (object Attribute
+ tool "DDL"
+ name "PrimaryKeyColumnType"
+ value "NUMBER(5)")
+ (object Attribute
+ tool "DDL"
+ name "ViewName"
+ value "V_")
+ (object Attribute
+ tool "DDL"
+ name "TableName"
+ value "T_")
+ (object Attribute
+ tool "DDL"
+ name "InheritSuffix"
+ value "_V")
+ (object Attribute
+ tool "DDL"
+ name "DropClause"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "BaseViews"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "DDLScriptFilename"
+ value "DDL1.SQL")))
+ (object Attribute
+ tool "DDL"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "DDL"
+ name "ColumnType"
+ value "VARCHAR")
+ (object Attribute
+ tool "DDL"
+ name "Length"
+ value "")
+ (object Attribute
+ tool "DDL"
+ name "NullsOK"
+ value TRUE)
+ (object Attribute
+ tool "DDL"
+ name "PrimaryKey"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "Unique"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "CompositeUnique"
+ value FALSE)
+ (object Attribute
+ tool "DDL"
+ name "CheckConstraint"
+ value "")))
+ (object Attribute
+ tool "DDL"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "IDL"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "CreateMissingDirectories"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "StopOnError"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "Directory"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "GeneratePreserveRegions"
+ value TRUE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "ImplementationType"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "ConstValue"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDefaultSpecifier"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "DefaultSpecifier"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "IDLElement"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "IDLSpecificationType"
+ value ("IDLSpecSet" 22))
+ (object Attribute
+ tool "IDL"
+ name "IDLSpecSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Interface"
+ value 22)
+ (object Attribute
+ tool "IDL"
+ name "Typedef"
+ value 54)
+ (object Attribute
+ tool "IDL"
+ name "Enumeration"
+ value 8)
+ (object Attribute
+ tool "IDL"
+ name "Const"
+ value 71)
+ (object Attribute
+ tool "IDL"
+ name "Exception"
+ value 61)
+ (object Attribute
+ tool "IDL"
+ name "Struct"
+ value 51)
+ (object Attribute
+ tool "IDL"
+ name "Union"
+ value 81)))))
+ (object Attribute
+ tool "IDL"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "IDL"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "GenerateIDLModule"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "InclusionProtectionSymbol"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "IncludeBySimpleName"
+ value FALSE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "IDL"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "IDL"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "IDL"
+ name "IncludeBySimpleName"
+ value FALSE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "OperationIsOneWay"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "Context"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "Raises"
+ value "")))
+ (object Attribute
+ tool "IDL"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "CaseSpecifier"
+ value "")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "IDL"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "IsConst"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "ConstValue"
+ value "")))
+ (object Attribute
+ tool "IDL"
+ name "default__Has"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "NameIfUnlabeled"
+ value "the_$supplier")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "IDL"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "BoundedHasRelType"
+ value ("HasRelTypeSet" 47))
+ (object Attribute
+ tool "IDL"
+ name "HasRelTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "IDL"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "IDL"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "NameIfUnlabeled"
+ value "the_$supplier")
+ (object Attribute
+ tool "IDL"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "IDL"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "IDL"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "IDL"
+ name "BoundedRoleType"
+ value ("AssocTypeSet" 47))
+ (object Attribute
+ tool "IDL"
+ name "AssocTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "IDL"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "IDL"
+ name "default__Uses"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "GenerateForwardReference"
+ value FALSE)))
+ (object Attribute
+ tool "IDL"
+ name "default__Subsystem"
+ value (list Attribute_Set
+ (object Attribute
+ tool "IDL"
+ name "Directory"
+ value "AUTO GENERATE")))
+ (object Attribute
+ tool "IDL"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "cg"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "UseMSVC"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "HeaderFileExtension"
+ value "h")
+ (object Attribute
+ tool "cg"
+ name "HeaderFileBackupExtension"
+ value "h~")
+ (object Attribute
+ tool "cg"
+ name "HeaderFileTemporaryExtension"
+ value "h#")
+ (object Attribute
+ tool "cg"
+ name "CodeFileExtension"
+ value "cpp")
+ (object Attribute
+ tool "cg"
+ name "CodeFileBackupExtension"
+ value "cp~")
+ (object Attribute
+ tool "cg"
+ name "CodeFileTemporaryExtension"
+ value "cp#")
+ (object Attribute
+ tool "cg"
+ name "CreateMissingDirectories"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "StopOnError"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ErrorLimit"
+ value 30)
+ (object Attribute
+ tool "cg"
+ name "Directory"
+ value "$ROSECPP_SOURCE")
+ (object Attribute
+ tool "cg"
+ name "PathSeparator"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "FileNameFormat"
+ value "128vx_b")
+ (object Attribute
+ tool "cg"
+ name "BooleanType"
+ value "int")
+ (object Attribute
+ tool "cg"
+ name "AllowTemplates"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AllowProtectedInheritance"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "CommentWidth"
+ value 60)
+ (object Attribute
+ tool "cg"
+ name "OneByValueContainer"
+ value "$targetClass")
+ (object Attribute
+ tool "cg"
+ name "OneByReferenceContainer"
+ value "$targetClass *")
+ (object Attribute
+ tool "cg"
+ name "OptionalByValueContainer"
+ value "OptionalByValue<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "OptionalByReferenceContainer"
+ value "$targetClass *")
+ (object Attribute
+ tool "cg"
+ name "FixedByValueContainer"
+ value "$targetClass[$limit]")
+ (object Attribute
+ tool "cg"
+ name "UnorderedFixedByValueContainer"
+ value "$targetClass[$limit]")
+ (object Attribute
+ tool "cg"
+ name "FixedByReferenceContainer"
+ value "$targetClass *[$limit]")
+ (object Attribute
+ tool "cg"
+ name "UnorderedFixedByReferenceContainer"
+ value "$targetClass *[$limit]")
+ (object Attribute
+ tool "cg"
+ name "BoundedByValueContainer"
+ value "BoundedListByValue<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedBoundedByValueContainer"
+ value "BoundedSetByValue<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "BoundedByReferenceContainer"
+ value "BoundedListByReference<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedBoundedByReferenceContainer"
+ value "BoundedSetByReference<$targetClass,$limit>")
+ (object Attribute
+ tool "cg"
+ name "UnboundedByValueContainer"
+ value "UnboundedListByValue<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedUnboundedByValueContainer"
+ value "UnboundedSetByValue<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "UnboundedByReferenceContainer"
+ value "UnboundedListByReference<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedUnboundedByReferenceContainer"
+ value "UnboundedSetByReference<$targetClass>")
+ (object Attribute
+ tool "cg"
+ name "QualifiedByValueContainer"
+ value "AssociationByValue<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedQualifiedByValueContainer"
+ value "DictionaryByValue<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "QualifiedByReferenceContainer"
+ value "AssociationByReference<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "UnorderedQualifiedByReferenceContainer"
+ value "DictionaryByReference<$qualtype, $qualcont>")
+ (object Attribute
+ tool "cg"
+ name "GeneratePreserveRegions"
+ value TRUE)))
+ (object Attribute
+ tool "cg"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ImplementationType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ClassKey"
+ value "class")
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "PutBodiesInSpec"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateDefaultConstructor"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "DefaultConstructorVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineDefaultConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ExplicitDefaultConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateCopyConstructor"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "CopyConstructorVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineCopyConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ExplicitCopyConstructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateDestructor"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DestructorVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "DestructorKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineDestructor"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateAssignmentOperation"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "AssignmentVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "AssignmentKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineAssignmentOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateEqualityOperations"
+ value ("GenerateSet" 199))
+ (object Attribute
+ tool "cg"
+ name "EqualityVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "EqualityKind"
+ value ("FriendKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineEqualityOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateRelationalOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "RelationalVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "RelationalKind"
+ value ("FriendKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "InlineRelationalOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateStorageMgmtOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "StorageMgmtVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineStorageMgmtOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSubscriptOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "SubscriptVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "SubscriptKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "SubscriptResultType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InlineSubscriptOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateDereferenceOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DereferenceVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "DereferenceKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "DereferenceResultType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InlineDereferenceOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateIndirectionOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IndirectionVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "IndirectionKind"
+ value ("ThreeKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "IndirectionResultType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InlineIndirectionOperation"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateStreamOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "StreamVisibility"
+ value ("VisibilitySet" 45))
+ (object Attribute
+ tool "cg"
+ name "InlineStreamOperations"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "ThreeKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)))
+ (object Attribute
+ tool "cg"
+ name "KindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)))
+ (object Attribute
+ tool "cg"
+ name "FriendKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "GenerateSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "DeclareAndDefine"
+ value 199)
+ (object Attribute
+ tool "cg"
+ name "DeclareOnly"
+ value 205)
+ (object Attribute
+ tool "cg"
+ name "DoNotDeclare"
+ value 206)))
+ (object Attribute
+ tool "cg"
+ name "VisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)))
+ (object Attribute
+ tool "cg"
+ name "ConstValue"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateDefaultSpecifier"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DefaultSpecifier"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "cg"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "AllowExtensionlessFileName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InclusionProtectionSymbol"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "IncludeFormat"
+ value (value Text
+|// $package
+|#include "$file"
+|
+ ))
+ (object Attribute
+ tool "cg"
+ name "IncludeBySimpleName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludePrecompiledHeader"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludeOrder"
+ value "AMIR")
+ (object Attribute
+ tool "cg"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "InliningStyle"
+ value ("InliningStyleSet" 207))
+ (object Attribute
+ tool "cg"
+ name "InliningStyleSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "InClassDeclaration"
+ value 208)
+ (object Attribute
+ tool "cg"
+ name "FollowingClassDeclaration"
+ value 207)))
+ (object Attribute
+ tool "cg"
+ name "TypesDefined"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "IncludeClosure"
+ value (value Text ""))))
+ (object Attribute
+ tool "cg"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Generate"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "CmIdentification"
+ value (value Text " %X% %Q% %Z% %W%"))
+ (object Attribute
+ tool "cg"
+ name "CopyrightNotice"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "FileName"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "AllowExtensionlessFileName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludeFormat"
+ value (value Text
+|// $package
+|#include "$file"
+|
+ ))
+ (object Attribute
+ tool "cg"
+ name "IncludeBySimpleName"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IncludePrecompiledHeader"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "IncludeOrder"
+ value "AMIR")
+ (object Attribute
+ tool "cg"
+ name "AdditionalIncludes"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "InliningStyle"
+ value ("InliningStyleSet" 207))
+ (object Attribute
+ tool "cg"
+ name "InliningStyleSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "InClassDeclaration"
+ value 208)
+ (object Attribute
+ tool "cg"
+ name "FollowingClassDeclaration"
+ value 207)))
+ (object Attribute
+ tool "cg"
+ name "TypesDefined"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "IncludeClosure"
+ value (value Text ""))))
+ (object Attribute
+ tool "cg"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "OperationKind"
+ value ("OperationKindSet" 200))
+ (object Attribute
+ tool "cg"
+ name "OperationKindSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "OperationIsConst"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "OperationIsExplicit"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "Inline"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "EntryCode"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "ExitCode"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))
+ (object Attribute
+ tool "cg"
+ name "BodyAnnotations"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "OperationIsOneWay"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "Context"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "Raises"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Has"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "Ordered"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "NameIfUnlabeled"
+ value "the_$supplier")
+ (object Attribute
+ tool "cg"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberName"
+ value "$relationship")
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtRelationshipVisibility"
+ value 210)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberFieldSize"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InitialValue"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "GenerateGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetName"
+ value "get_$relationship")
+ (object Attribute
+ tool "cg"
+ name "SetName"
+ value "set_$relationship")
+ (object Attribute
+ tool "cg"
+ name "GetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GetSetKindsSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "ContainerClass"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "SelectorName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "SelectorType"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConstSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_Function"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "GetSetByReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "SetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "ForwardReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "BoundedHasRelType"
+ value ("HasRelTypeSet" 47))
+ (object Attribute
+ tool "cg"
+ name "HasRelTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "cg"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "cg"
+ name "default__Association"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "NameIfUnlabeled"
+ value "the_$targetClass")))
+ (object Attribute
+ tool "cg"
+ name "default__Inherit"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "InstanceArguments"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ForwardReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "NameIfUnlabeled"
+ value "the_$targetClass")
+ (object Attribute
+ tool "cg"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberName"
+ value "$target")
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtRelationshipVisibility"
+ value 210)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberFieldSize"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "InitialValue"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "ContainerClass"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "ContainerGet"
+ value "$data.get($keys)")
+ (object Attribute
+ tool "cg"
+ name "ContainerSet"
+ value "$data.set($keys,$value)")
+ (object Attribute
+ tool "cg"
+ name "QualifiedContainer"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "AssocClassContainer"
+ value "$supplier *")
+ (object Attribute
+ tool "cg"
+ name "AssocClassInitialValue"
+ value (value Text ""))
+ (object Attribute
+ tool "cg"
+ name "GetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GetSetKindsSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "GetSetByReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetName"
+ value "get_$target")
+ (object Attribute
+ tool "cg"
+ name "GetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConstSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_Function"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "InlineGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "SetName"
+ value "set_$target")
+ (object Attribute
+ tool "cg"
+ name "SetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetSetByReference"
+ value ("QualifiedGetSetByReferenceSet" 2))
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetSetByReferenceSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_GetSetByReference"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "GenerateQualifiedGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetName"
+ value "get_$target")
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedGetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "InlineQualifiedGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateQualifiedSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "QualifiedSetName"
+ value "set_$target")
+ (object Attribute
+ tool "cg"
+ name "QualifiedSetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineQualifiedSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateAssocClassDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberName"
+ value "$target")
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtRelationshipVisibility"
+ value 210)))
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "AssocClassDataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GenerateAssocClassGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetName"
+ value "get_$target")
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassGetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "InlineAssocClassGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateAssocClassSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassSetName"
+ value "set_$target")
+ (object Attribute
+ tool "cg"
+ name "AssocClassSetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineAssocClassSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "AssocClassForwardReferenceOnly"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateForwardReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "IsReadOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "BoundedRoleType"
+ value ("AssocTypeSet" 47))
+ (object Attribute
+ tool "cg"
+ name "AssocTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Array"
+ value 24)
+ (object Attribute
+ tool "cg"
+ name "Sequence"
+ value 47)))))
+ (object Attribute
+ tool "cg"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateDataMember"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberName"
+ value "$attribute")
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibility"
+ value ("DataMemberVisibilitySet" 14))
+ (object Attribute
+ tool "cg"
+ name "DataMemberVisibilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Public"
+ value 45)
+ (object Attribute
+ tool "cg"
+ name "Protected"
+ value 44)
+ (object Attribute
+ tool "cg"
+ name "Private"
+ value 43)
+ (object Attribute
+ tool "cg"
+ name "Implementation"
+ value 14)
+ (object Attribute
+ tool "cg"
+ name "AtAttributeVisibility"
+ value 211)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutability"
+ value ("DataMemberMutabilitySet" 0))
+ (object Attribute
+ tool "cg"
+ name "DataMemberMutabilitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Unrestricted"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Mutable"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Const"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "DataMemberIsVolatile"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "DataMemberFieldSize"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateGetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GenerateSetOperation"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetName"
+ value "get_$attribute")
+ (object Attribute
+ tool "cg"
+ name "SetName"
+ value "set_$attribute")
+ (object Attribute
+ tool "cg"
+ name "GetSetKinds"
+ value ("GetSetKindsSet" 200))
+ (object Attribute
+ tool "cg"
+ name "GetSetKindsSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Common"
+ value 200)
+ (object Attribute
+ tool "cg"
+ name "Virtual"
+ value 201)
+ (object Attribute
+ tool "cg"
+ name "Abstract"
+ value 202)
+ (object Attribute
+ tool "cg"
+ name "Static"
+ value 203)
+ (object Attribute
+ tool "cg"
+ name "Friend"
+ value 204)))
+ (object Attribute
+ tool "cg"
+ name "GetIsConst"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConst"
+ value ("GetResultIsConstSet" 2))
+ (object Attribute
+ tool "cg"
+ name "GetResultIsConstSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "False"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "True"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Same_As_Function"
+ value 2)))
+ (object Attribute
+ tool "cg"
+ name "GetSetByReference"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineGet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "SetReturnsValue"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "InlineSet"
+ value TRUE)
+ (object Attribute
+ tool "cg"
+ name "CaseSpecifier"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "IsReadOnly"
+ value FALSE)))
+ (object Attribute
+ tool "cg"
+ name "default__Uses"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "ForwardReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "BodyReferenceOnly"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "GenerateForwardReference"
+ value FALSE)))
+ (object Attribute
+ tool "cg"
+ name "default__Subsystem"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "Directory"
+ value "AUTO GENERATE")
+ (object Attribute
+ tool "cg"
+ name "DirectoryIsOnSearchList"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "PrecompiledHeader"
+ value "")))
+ (object Attribute
+ tool "cg"
+ name "default__Category"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "IsNamespace"
+ value FALSE)
+ (object Attribute
+ tool "cg"
+ name "Indent"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "CodeName"
+ value "")
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegions"
+ value ("GenerateEmptyRegionSet" 3))
+ (object Attribute
+ tool "cg"
+ name "GenerateEmptyRegionSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "cg"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "cg"
+ name "Preserved"
+ value 1)
+ (object Attribute
+ tool "cg"
+ name "Unpreserved"
+ value 2)
+ (object Attribute
+ tool "cg"
+ name "All"
+ value 3)))))
+ (object Attribute
+ tool "MSVC"
+ name "propertyId"
+ value "809135966")
+ (object Attribute
+ tool "MSVC"
+ name "default__Project"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Version"
+ value "5.0")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Class"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCClassTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCClassTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Interface_Part"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Connection_Part"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Class_Factory"
+ value 3)))
+ (object Attribute
+ tool "MSVC"
+ name "CObjectFunctionality"
+ value ("CObjectFunctionalitySet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "CObjectFunctionalitySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Dynamic"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Dyncreate"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Serial"
+ value 3)))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateOverrideGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "GenerateDataGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DATA_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateFieldGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_FIELD_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateMessageGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "GenerateMessageMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_MSG_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MESSAGE_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "OLEFactory"
+ value ("OLEFactorySet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "OLEFactorySet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "None"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Built_in"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Simple"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Licensed"
+ value 3)))
+ (object Attribute
+ tool "MSVC"
+ name "OLEName"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLEClassID"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateOLECtlType"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "OLECtlType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateOLETypeLib"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "OLETypeLibID"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLETypeLibMajor"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLETypeLibMinor"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GeneratePropPageIDs"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "OLEPropPageIDs"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateDispatchMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "StockProperties"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "StockFunctions"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DispatchDefValue"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateDispIdEnum"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISP_ID_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateInterfaceMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "INTERFACE_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "InitInterface"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "GenerateEventMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENT_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "StockEvents"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateEventSinkMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENTSINK_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "PropNotifySinks"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateConnectionMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "CONNECTION_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "ConnectionPointIID"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "InheritanceType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "OLECommands"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MFCDeclares"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MFCImplements"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "ATL_Declares"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateCOMMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "COM_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateConnectionPointMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "CONNECTION_POINT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateMsgMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "MSG_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GeneratePropertyMap"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "PROPERTY_MAP_Entries"
+ value (value Text ""))))
+ (object Attribute
+ tool "MSVC"
+ name "default__Operation"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCOperationTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCOperationTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Virtual_Override"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Message_Handler"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dispatch_Handler"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Event_Firing_Function"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Event_Sink_Handler"
+ value 5)
+ (object Attribute
+ tool "MSVC"
+ name "Std_OLE_Method"
+ value 6)
+ (object Attribute
+ tool "MSVC"
+ name "Command_Parser"
+ value 7)
+ (object Attribute
+ tool "MSVC"
+ name "Property_Get_Function"
+ value 8)
+ (object Attribute
+ tool "MSVC"
+ name "Property_Set_Function"
+ value 9)
+ (object Attribute
+ tool "MSVC"
+ name "Property_Notify_Function"
+ value 10)
+ (object Attribute
+ tool "MSVC"
+ name "Macro_Generated_Function"
+ value 11)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_MSG_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "MESSAGE_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENT_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "EVENTSINK_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "BodyImage"
+ value (value Text ""))))
+ (object Attribute
+ tool "MSVC"
+ name "default__Role"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCAttributeTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCAttributeTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Member_Property"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Get_Set_Property"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dialog_Data"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Field_Data"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Stock_Property"
+ value 5)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "PointerBase"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "StockPropertyImplementation"
+ value "")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Has"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCAttributeTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCAttributeTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Member_Property"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Get_Set_Property"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dialog_Data"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Field_Data"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Stock_Property"
+ value 5)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "PointerBase"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "StockPropertyImplementation"
+ value "")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Attribute"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Type"
+ value ("MSVCAttributeTypeSet" 0))
+ (object Attribute
+ tool "MSVC"
+ name "MSVCAttributeTypeSet"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "Normal"
+ value 0)
+ (object Attribute
+ tool "MSVC"
+ name "Member_Property"
+ value 1)
+ (object Attribute
+ tool "MSVC"
+ name "Get_Set_Property"
+ value 2)
+ (object Attribute
+ tool "MSVC"
+ name "Dialog_Data"
+ value 3)
+ (object Attribute
+ tool "MSVC"
+ name "Field_Data"
+ value 4)
+ (object Attribute
+ tool "MSVC"
+ name "Stock_Property"
+ value 5)))
+ (object Attribute
+ tool "MSVC"
+ name "AFX_DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DISPATCH_MAP_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "DeclSpec"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "PointerBase"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "CallType"
+ value "")
+ (object Attribute
+ tool "MSVC"
+ name "StockPropertyImplementation"
+ value "")))
+ (object Attribute
+ tool "MSVC"
+ name "default__Module-Spec"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "GenerateIncludesGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_INCLUDES_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateInsertLocation"
+ value FALSE)))
+ (object Attribute
+ tool "MSVC"
+ name "default__Module-Body"
+ value (list Attribute_Set
+ (object Attribute
+ tool "MSVC"
+ name "GenerateIncludesGroup"
+ value FALSE)
+ (object Attribute
+ tool "MSVC"
+ name "AFX_INCLUDES_Entries"
+ value (value Text ""))
+ (object Attribute
+ tool "MSVC"
+ name "GenerateInsertLocation"
+ value FALSE)))
+ (object Attribute
+ tool "cg"
+ name "HiddenTool"
+ value FALSE)
+ (object Attribute
+ tool "SCC"
+ name "HiddenTool"
+ value FALSE))
+ quid "355326EE0040"))
--- a/pimappsupport/vcardandvcal/group/BLD.INF Mon May 03 12:30:32 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,338 +0,0 @@
-// Copyright (c) 1999-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:
-// VCard/vCal converters
-//
-//
-
-#include <platform_paths.hrh>
-
-PRJ_PLATFORMS
-DEFAULT WINC
-
-PRJ_EXPORTS
-// specify the source file followed by its destination here
-// copy will be used to copy the source file to its destination
-// If there's no destination then the source file will be copied
-// to the same name in \epoc32\include
-
-../inc/VCAL.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcal.h)
-../inc/VCAL.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcal.inl)
-../inc/VCARD.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcard.h)
-../inc/VCARD.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcard.inl)
-../inc/VERSIT.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(versit.h)
-../inc/VERSIT.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(versit.inl)
-../inc/VPROP.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vprop.h)
-../inc/VPROP.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vprop.inl)
-../inc/VTOKEN.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vtoken.h)
-../inc/VUID.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vuid.h)
-../inc/VRECUR.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vrecur.h)
-../inc/VRECUR.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vrecur.inl)
-../inc/vstaticutils.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vstaticutils.h)
-../inc/VUTIL.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vutil.h)
-../inc/VersitTls.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(versittls.h)
-../inc/VObserv.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vobserv.h)
-#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
-../inc/versitlinereaderext.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(versitlinereaderext.h)
-../inc/vpropbinaryfile.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(vpropbinaryfile.h)
-../inc/vcard3.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(vcard3.h)
-#endif
-
-./versit.iby /epoc32/rom/include/versit.iby
-./versitrecognizer.iby /epoc32/rom/include/versitrecognizer.iby
-./versitrecognizer.iby CORE_APP_LAYER_IBY_EXPORT_PATH(versitrecognizer.iby)
-
-PRJ_MMPFILES
-
-./VERSIT.MMP
-./VCal.MMP
-./VCard.MMP
-#ifndef WINC
-../rec/VersitRecog.mmp
-#endif
-
-PRJ_TESTMMPFILES
-// specify the .mmp files required for building any test programs here
-//
-// you can specify "manual" to denote that a test should be listed in a generated
-// batch file for running a group of tests which require user input during testing.
-// you can specify "support" to denote that a file is a test support file and shouldn't
-// be listed in a batch file for running a group of tests
-// By default, each test will be listed in a batch file for running a group of tests
-// which can be left to run without requiring watching over by the person running the tests,
-// i.e. tests where no user input is required. The default will apply if neither "manual"
-// or "support" is specified.
-../tsrc/TVERSIT.MMP
-../tsrc/tvgen.mmp
-../tsrc/TCharsetvCard.mmp
-../tsrc/TBugFix.MMP
-../tsrc/toom.mmp
-../tsrc/tPerformance.mmp
-../tsrc/TDefaultCharset.mmp
-../tsrc/Test_saveloadbin.mmp
-../tsrc/Test_saveloadbinoom.mmp
-../Ticket/VTicket.MMP support
-../tsrc/TJapaneseSoundProperty.mmp
-../tsrc/Test_recognizer.mmp
-
-// PREQ1375 Unit tests for PBAPSupport
-../tsrc/UnitTest_PBAPSupport/group/TestExternalize.mmp
-
-
-PRJ_TESTEXPORTS
-
-../group/VersitTest.iby /epoc32/rom/include/versittest.iby
-
-// WINSCW UDEB Z
-
-../TestvCards/Encoded/1.vcf z:/testvcards/encoded/1.vcf
-../TestvCards/Encoded/2.vcf z:/testvcards/encoded/2.vcf
-../TestvCards/Encoded/3.vcf z:/testvcards/encoded/3.vcf
-../TestvCards/Encoded/4.vcf z:/testvcards/encoded/4.vcf
-../TestvCards/Encoded/5.vcf z:/testvcards/encoded/5.vcf
-../TestvCards/Encoded/6.vcf z:/testvcards/encoded/6.vcf
-../TestvCards/Encoded/7.vcf z:/testvcards/encoded/7.vcf
-
-../TestvCards/Epoc/1.vcf z:/testvcards/epoc/1.vcf
-../TestvCards/Epoc/2.vcf z:/testvcards/epoc/2.vcf
-../TestvCards/Epoc/3.vcf z:/testvcards/epoc/3.vcf
-../TestvCards/Epoc/4.vcf z:/testvcards/epoc/4.vcf
-../TestvCards/Epoc/5.vcf z:/testvcards/epoc/5.vcf
-../TestvCards/Epoc/6.vcf z:/testvcards/epoc/6.vcf
-../TestvCards/Epoc/7.vcf z:/testvcards/epoc/7.vcf
-../TestvCards/Epoc/8.vcf z:/testvcards/epoc/8.vcf
-
-../TestvCards/ER5Regression/1.vcf z:/testvcards/er5regression/1.vcf
-../TestvCards/ER5Regression/2.vcf z:/testvcards/er5regression/2.vcf
-../TestvCards/ER5Regression/3.vcf z:/testvcards/er5regression/3.vcf
-../TestvCards/ER5Regression/4.vcf z:/testvcards/er5regression/4.vcf
-../TestvCards/ER5Regression/5.vcf z:/testvcards/er5regression/5.vcf
-
-../TestvCards/Invalid/1.vcf z:/testvcards/invalid/1.vcf
-../TestvCards/Invalid/2.vcf z:/testvcards/invalid/2.vcf
-../TestvCards/Invalid/3.vcf z:/testvcards/invalid/3.vcf
-../TestvCards/Invalid/4.vcf z:/testvcards/invalid/4.vcf
-../TestvCards/Invalid/5.vcf z:/testvcards/invalid/5.vcf
-../TestvCards/Invalid/6.vcf z:/testvcards/invalid/6.vcf
-../TestvCards/Invalid/7.vcf z:/testvcards/invalid/7.vcf
-../TestvCards/Invalid/8.vcf z:/testvcards/invalid/8.vcf
-
-../TestvCards/Various/1.vcf z:/testvcards/various/1.vcf
-../TestvCards/Various/2.vcf z:/testvcards/various/2.vcf
-../TestvCards/Various/3.vcf z:/testvcards/various/3.vcf
-../TestvCards/Various/4.vcf z:/testvcards/various/4.vcf
-../TestvCards/Various/5.vcf z:/testvcards/various/5.vcf
-../TestvCards/Various/6.vcf z:/testvcards/various/6.vcf
-../TestvCards/Various/7.vcf z:/testvcards/various/7.vcf
-../TestvCards/Various/8.vcf z:/testvcards/various/8.vcf
-../TestvCards/Various/9.vcf z:/testvcards/various/9.vcf
-../TestvCards/Various/10.vcf z:/testvcards/various/10.vcf
-../TestvCards/Various/11.vcf z:/testvcards/various/11.vcf
-../TestvCards/Various/12.vcf z:/testvcards/various/12.vcf
-../TestvCards/Various/nulldate.vcf z:/testvcards/various/nulldate.vcf
-../TestvCards/Various/HugeVCard.vcf z:/testvcards/various/HugeVCard.vcf
-
-// TBugfix the number of files=82
-../TestvCals/Various/6.vcs z:/testvcards/various/6.vcs
-../TestFiles/CShJisEs.VCF z:/testfiles/cshjises.vcf
-../TestFiles/CTabs.VCS z:/testfiles/ctabs.vcs
-../TestFiles/IShJisEs.VCF z:/testfiles/ishjises.vcf
-../TestFiles/ITabs.VCS z:/testfiles/itabs.vcs
-../TestFiles/ITimePer.VCS z:/testfiles/itimeper.vcs
-../TestFiles/iDalarm.vcs z:/testfiles/idalarm.vcs
-../TestFiles/cDalarm.vcs z:/testfiles/cdalarm.vcs
-../TestFiles/IAgent.VCF z:/testfiles/iagent.vcf
-../TestFiles/IBase64.VCF z:/testfiles/ibase64.vcf
-../TestFiles/IBase64ws.vcf z:/testfiles/ibase64ws.vcf
-../TestFiles/IDalarm2.VCS z:/testfiles/idalarm2.vcs
-../TestFiles/IWrap.VCS z:/testfiles/iwrap.vcs
-../TestFiles/CAgent.VCF z:/testfiles/cagent.vcf
-../TestFiles/CBase64.VCF z:/testfiles/cbase64.vcf
-../TestFiles/CBase64ws.vcf z:/testfiles/cbase64ws.vcf
-../TestFiles/CDalarm2.VCS z:/testfiles/cdalarm2.vcs
-../TestFiles/CWrap.VCS z:/testfiles/cwrap.vcs
-../TestFiles/Test5_ASCII_Input.vcf z:/testfiles/test5_ascii_input.vcf
-../TestFiles/iAsciiLineFolding.vcf z:/testfiles/iasciilinefolding.vcf
-../TestFiles/cAsciiLineFolding.vcf z:/testfiles/casciilinefolding.vcf
-../TestFiles/iBase64LineFolding.vcf z:/testfiles/ibase64linefolding.vcf
-../TestFiles/cBase64LineFolding.VCF z:/testfiles/cbase64linefolding.vcf
-../TestFiles/cBase64NoSpaceLineFolding.vcf z:/testfiles/cbase64nospacelinefolding.vcf
-../TestFiles/iQPLineFolding.vcf z:/testfiles/iqplinefolding.vcf
-../TestFiles/cQPLineFolding.VCF z:/testfiles/cqplinefolding.vcf
-../TestFiles/iTest7.vcf z:/testfiles/itest7.vcf
-../TestFiles/iTestVcard.vcf z:/testfiles/itestvcard.vcf
-../TestFiles/iTestVcal.vcs z:/testfiles/itestvcal.vcs
-../TestFiles/cTestVCard.vcf z:/testfiles/ctestvcard.vcf
-../TestFiles/cTestVCal.vcs z:/testfiles/ctestvcal.vcs
-../TestFiles/iGroupedProperty.vcf z:/testfiles/igroupedproperty.vcf
-../TestFiles/iTimeZoneN.vcs z:/testfiles/itimezonen.vcs
-../TestFiles/cTimeZoneN.VCS z:/testfiles/ctimezonen.vcs
-../TestFiles/iTimeZoneP.vcs z:/testfiles/itimezonep.vcs
-../TestFiles/cTimeZoneP.VCS z:/testfiles/ctimezonep.vcs
-../TestFiles/IGBK.VCF z:/testfiles/igbk.vcf
-../TestFiles/IShiftJis.VCS z:/testfiles/ishiftjis.vcs
-../TestFiles/CShiftJis.VCS z:/testfiles/cshiftjis.vcs
-../TestFiles/IvCard.VCF z:/testfiles/ivcard.vcf
-../TestFiles/CvCard.VCF z:/testfiles/cvcard.vcf
-../TestFiles/IvCal.VCS z:/testfiles/ivcal.vcs
-../TestFiles/IRDailyVCal.VCS z:/testfiles/irdailyvcal.vcs
-../TestFiles/CvCal.VCS z:/testfiles/cvcal.vcs
-../TestFiles/NoEnd.VCF z:/testfiles/noend.vcf
-../TestFiles/HalfLine.VCF z:/testfiles/halfline.vcf
-../TestFiles/Feb29.VCS z:/testfiles/feb29.vcs
-../TestFiles/EnName1.VCS z:/testfiles/enname1.vcs
-../TestFiles/EnName2.VCS z:/testfiles/enname2.vcs
-../TestFiles/EnName3.VCF z:/testfiles/enname3.vcf
-../TestFiles/EnName4.VCF z:/testfiles/enname4.vcf
-../TestFiles/Begin2.VCF z:/testfiles/begin2.vcf
-../TestFiles/Begin3.VCS z:/testfiles/begin3.vcs
-../TestFiles/End2.VCF z:/testfiles/end2.vcf
-../TestFiles/IEndBa64.VCS z:/testfiles/iendba64.vcs
-../TestFiles/CEndBa64.VCS z:/testfiles/cendba64.vcs
-../TestFiles/CNullPar.VCS z:/testfiles/cnullpar.vcs
-../TestFiles/CTZone.VCS z:/testfiles/ctzone.vcs
-../TestFiles/CTZone2.VCS z:/testfiles/ctzone2.vcs
-../TestFiles/CWrap2.VCS z:/testfiles/cwrap2.vcs
-../TestFiles/IESlash.VCF z:/testfiles/ieslash.vcf
-../TestFiles/CESlash.VCF z:/testfiles/ceslash.vcf
-../TestFiles/INullPar.VCS z:/testfiles/inullpar.vcs
-../TestFiles/ITZone.VCS z:/testfiles/itzone.vcs
-../TestFiles/ITZone2.VCS z:/testfiles/itzone2.vcs
-../TestFiles/IWrap2.VCS z:/testfiles/iwrap2.vcs
-../TestFiles/Base64.VCF z:/testfiles/base64.vcf
-../TestFiles/vCard.VCF z:/testfiles/vcard.vcf
-../TestFiles/IAutoD.VCF z:/testfiles/iautod.vcf
-../TestFiles/IAutoD2.VCS z:/testfiles/iautod2.vcs
-../TestFiles/CAutoD.VCF z:/testfiles/cautod.vcf
-../TestFiles/CAutoD2.VCS z:/testfiles/cautod2.vcs
-../TestFiles/IYenEsc1.VCF z:/testfiles/iyenesc1.vcf
-../TestFiles/IYenEsc2.VCF z:/testfiles/iyenesc2.vcf
-../TestFiles/IParamE.VCF z:/testfiles/iparame.vcf
-../TestFiles/CYenEsc1.VCF z:/testfiles/cyenesc1.vcf
-../TestFiles/CYenEsc2.VCF z:/testfiles/cyenesc2.vcf
-../TestFiles/CParamE.VCF z:/testfiles/cparame.vcf
-../TestFiles/IUK.VCS z:/testfiles/iuk.vcs
-../TestFiles/INewYork.VCS z:/testfiles/inewyork.vcs
-../TestFiles/IJapan.VCS z:/testfiles/ijapan.vcs
-../TestFiles/CUK.VCS z:/testfiles/cuk.vcs
-../TestFiles/CNewYork.VCS z:/testfiles/cnewyork.vcs
-../TestFiles/CJapan.VCS z:/testfiles/cjapan.vcs
-../TestFiles/IFred.VCF z:/testfiles/ifred.vcf
-../TestFiles/iNonStandardAgent.vcf z:/testfiles/inonstandardagent.vcf
-../TestFiles/cNonStandardAgent.vcf z:/testfiles/cnonstandardagent.vcf
-../TestFiles/iRRule.vcs z:/testfiles/irrule.vcs
-../TestFiles/iBlankLines.vcf z:/testfiles/iblanklines.vcf
-../TestFiles/cBlankLines.VCF z:/testfiles/cblanklines.vcf
-../TestFiles/iLineFeed.vcs z:/testfiles/ilinefeed.vcs
-../TestFiles/cLineFeed.VCS z:/testfiles/clinefeed.vcs
-../TestFiles/IJunkLine.VCS z:/testfiles/ijunkline.vcs
-../TestFiles/CJunkLine.VCS z:/testfiles/cjunkline.vcs
-../TestFiles/iattachment.vcs z:/testfiles/iattachment.vcs
-../TestFiles/cattachment.vcs z:/testfiles/cattachment.vcs
-../TestFiles/iAlarmRepeatCount.vcs z:/testfiles/ialarmrepeatcount.vcs
-../TestFiles/DefaultCharSetInput.vcf z:/testfiles/defaultcharsetinput.vcf
-../TestFiles/inewbase64.vcf z:/testfiles/inewbase64.vcf
-../TestFiles/inewbase64.vcs z:/testfiles/inewbase64.vcs
-../TestFiles/ivtrigger.vcf z:/testfiles/ivtrigger.vcf
-../TestFiles/cnewbase64.VCF z:/testfiles/cnewbase64.vcf
-../TestFiles/cnewbase64.VCS z:/testfiles/cnewbase64.vcs
-../TestFiles/cvtrigger.VCF z:/testfiles/cvtrigger.vcf
-../TestFiles/nolf.vcs z:/testfiles/nolf.vcs
-../TestFiles/nestedagent.vcf z:/testfiles/nestedagent.vcf
-
-// TPerformance muber of files=21
-../TPerformance/iLine_short.vcf z:/tperformance/inputfile/line_short.vcf
-../TPerformance/iLine_photo.vcf z:/tperformance/inputfile/line_photo.vcf
-../TPerformance/iLine_long.vcf z:/tperformance/inputfile/line_long.vcf
-../TPerformance/iLine_alarm.vcs z:/tperformance/inputfile/line_alarm.vcs
-../TPerformance/iFileUTF8_QP.vcf z:/tperformance/inputfile/fileutf8_qp.vcf
-../TPerformance/iFileUTF8_Base64.vcf z:/tperformance/inputfile/fileutf8_base64.vcf
-../TPerformance/iFileShiftJIS_QP.vcf z:/tperformance/inputfile/fileshiftjis_qp.vcf
-../TPerformance/iFileShiftJIS_Base64.vcf z:/tperformance/inputfile/fileshiftjis_base64.vcf
-../TPerformance/iFileGBK_QP.vcf z:/tperformance/inputfile/filegbk_qp.vcf
-../TPerformance/iFileGBK_Base64.vcf z:/tperformance/inputfile/filegbk_base64.vcf
-../TPerformance/iFileASCII_QP.vcf z:/tperformance/inputfile/fileascii_qp.vcf
-../TPerformance/iFileASCII_None.vcf z:/tperformance/inputfile/fileascii_none.vcf
-../TPerformance/iFileASCII_Base64.vcf z:/tperformance/inputfile/fileascii_base64.vcf
-../TPerformance/iFile05entity.vcs z:/tperformance/inputfile/file05entity.vcs
-../TPerformance/iFile10entity.vcs z:/tperformance/inputfile/file10entity.vcs
-../TPerformance/iFile15entity.vcs z:/tperformance/inputfile/file15entity.vcs
-../TPerformance/iFile20entity.vcs z:/tperformance/inputfile/file20entity.vcs
-../TPerformance/iFile25entity.vcs z:/tperformance/inputfile/file25entity.vcs
-../TPerformance/iFile30entity.vcs z:/tperformance/inputfile/file30entity.vcs
-../TPerformance/iFile35entity.vcs z:/tperformance/inputfile/file35entity.vcs
-../TPerformance/iFile40entity.vcs z:/tperformance/inputfile/file40entity.vcs
-
-// Shift-JIS and other data files=34
-../TestFiles/K3Data/ITest01.VCF z:/k3data/itest01.vcf
-../TestFiles/K3Data/ITest02.VCF z:/k3data/itest02.vcf
-../TestFiles/K3Data/ITest03.VCS z:/k3data/itest03.vcs
-../TestFiles/K3Data/ITest04.VCF z:/k3data/itest04.vcf
-../TestFiles/K3Data/ITest05.VCF z:/k3data/itest05.vcf
-../TestFiles/K3Data/ITest06.VCF z:/k3data/itest06.vcf
-../TestFiles/K3Data/ITest07.VCF z:/k3data/itest07.vcf
-../TestFiles/K3Data/ITest08.VCF z:/k3data/itest08.vcf
-../TestFiles/K3Data/ITest09.VCF z:/k3data/itest09.vcf
-../TestFiles/K3Data/ITest10.VCF z:/k3data/itest10.vcf
-../TestFiles/K3Data/ITest11.VCF z:/k3data/itest11.vcf
-../TestFiles/K3Data/STest01.VCF z:/k3data/stest01.vcf
-../TestFiles/K3Data/STest02.VCF z:/k3data/stest02.vcf
-../TestFiles/K3Data/STest03.VCS z:/k3data/stest03.vcs
-../TestFiles/K3Data/STest04.VCF z:/k3data/stest04.vcf
-../TestFiles/K3Data/STest05.VCF z:/k3data/stest05.vcf
-../TestFiles/K3Data/STest06.VCF z:/k3data/stest06.vcf
-../TestFiles/K3Data/STest07.VCF z:/k3data/stest07.vcf
-../TestFiles/K3Data/STest08.VCF z:/k3data/stest08.vcf
-../TestFiles/K3Data/STest09.VCF z:/k3data/stest09.vcf
-../TestFiles/K3Data/STest10.VCF z:/k3data/stest10.vcf
-../TestFiles/K3Data/STest11.VCF z:/k3data/stest11.vcf
-
-// Japanese SOUND vCard test files (WINSCW UDEB)
-../TestvCards/VersitJapaneseVCards/amano.vcf z:/versitjapanesevcards/amano.vcf
-../TestvCards/VersitJapaneseVCards/aoki.vcf z:/versitjapanesevcards/aoki.vcf
-../TestvCards/VersitJapaneseVCards/barbara.vcf z:/versitjapanesevcards/barbara.vcf
-../TestvCards/VersitJapaneseVCards/Digit1.vcf z:/versitjapanesevcards/digit1.vcf
-../TestvCards/VersitJapaneseVCards/Digit2.vcf z:/versitjapanesevcards/digit2.vcf
-../TestvCards/VersitJapaneseVCards/haga.vcf z:/versitjapanesevcards/haga.vcf
-../TestvCards/VersitJapaneseVCards/kasai.vcf z:/versitjapanesevcards/kasai.vcf
-../TestvCards/VersitJapaneseVCards/kitajima.vcf z:/versitjapanesevcards/kitajima.vcf
-../TestvCards/VersitJapaneseVCards/Longest.vcf z:/versitjapanesevcards/longest.vcf
-../TestvCards/VersitJapaneseVCards/matsui.vcf z:/versitjapanesevcards/matsui.vcf
-../TestvCards/VersitJapaneseVCards/miyazaki.vcf z:/versitjapanesevcards/miyazaki.vcf
-../TestvCards/VersitJapaneseVCards/nakai.vcf z:/versitjapanesevcards/nakai.vcf
-../TestvCards/VersitJapaneseVCards/powell.vcf z:/versitjapanesevcards/powell.vcf
-../TestvCards/VersitJapaneseVCards/prolongedsound.vcf z:/versitjapanesevcards/prolongedsound.vcf
-../TestvCards/VersitJapaneseVCards/SpecialCharacter1.vcf z:/versitjapanesevcards/specialcharacter1.vcf
-../TestvCards/VersitJapaneseVCards/SpecialCharacter2.vcf z:/versitjapanesevcards/specialcharacter2.vcf
-../TestvCards/VersitJapaneseVCards/takashiro.vcf z:/versitjapanesevcards/takashiro.vcf
-../TestvCards/VersitJapaneseVCards/escaped.vcf z:/versitjapanesevcards/escaped.vcf
-../TestvCards/VersitJapaneseVCards/Multiplesounds.vcf z:/versitjapanesevcards/multiplesounds.vcf
-
-// PREQ1375 Unit testdata for PBAPSupport
-../tsrc/UnitTest_PBAPSupport/testdata/CBase64LineFolding.vcf z:/pbapsupport/cbase64linefolding.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CBinaryEncoding.vcf z:/pbapsupport/cbinaryencoding.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CDisableCharset.vcf z:/pbapsupport/cdisablecharset.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CEscapeBackslash.vcf z:/pbapsupport/cescapebackslash.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CEscapeComma.vcf z:/pbapsupport/cescapecomma.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CEscapeSemicolon.vcf z:/pbapsupport/cescapesemicolon.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CLongPropertyName.vcf z:/pbapsupport/clongpropertyname.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CLongPropertyParam.vcf z:/pbapsupport/clongpropertyparam.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CLongPropertyValue.vcf z:/pbapsupport/clongpropertyvalue.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CQPEncodingTest1.vcf z:/pbapsupport/cqpencodingtest1.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CQPEncodingTest2.vcf z:/pbapsupport/cqpencodingtest2.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CShortAsciiLine.vcf z:/pbapsupport/cshortasciiline.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/CUseUTF8.vcf z:/pbapsupport/cuseutf8.vcf
-../tsrc/UnitTest_PBAPSupport/testdata/IBase64LineFolding.vcf z:/pbapsupport/ibase64linefolding.vcf
-
-
-
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/pimappsupport/vcardandvcal/group/bld.inf Mon Jun 28 15:22:02 2010 +0530
@@ -0,0 +1,338 @@
+// Copyright (c) 1999-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:
+// VCard/vCal converters
+//
+//
+
+#include <platform_paths.hrh>
+
+PRJ_PLATFORMS
+DEFAULT WINC
+
+PRJ_EXPORTS
+// specify the source file followed by its destination here
+// copy will be used to copy the source file to its destination
+// If there's no destination then the source file will be copied
+// to the same name in \epoc32\include
+
+../inc/VCAL.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcal.h)
+../inc/VCAL.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcal.inl)
+../inc/VCARD.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcard.h)
+../inc/VCARD.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vcard.inl)
+../inc/VERSIT.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(versit.h)
+../inc/VERSIT.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(versit.inl)
+../inc/VPROP.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vprop.h)
+../inc/VPROP.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vprop.inl)
+../inc/VTOKEN.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vtoken.h)
+../inc/VUID.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vuid.h)
+../inc/VRECUR.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vrecur.h)
+../inc/VRECUR.INL SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vrecur.inl)
+../inc/vstaticutils.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vstaticutils.h)
+../inc/VUTIL.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vutil.h)
+../inc/VersitTls.h SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(versittls.h)
+../inc/VObserv.H SYMBIAN_APP_LAYER_PUBLIC_EXPORT_PATH(vobserv.h)
+#ifdef SYMBIAN_ENABLE_SPLIT_HEADERS
+../inc/versitlinereaderext.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(versitlinereaderext.h)
+../inc/vpropbinaryfile.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(vpropbinaryfile.h)
+../inc/vcard3.h SYMBIAN_APP_LAYER_PLATFORM_EXPORT_PATH(vcard3.h)
+#endif
+
+./versit.iby /epoc32/rom/include/versit.iby
+./versitrecognizer.iby /epoc32/rom/include/versitrecognizer.iby
+./versitrecognizer.iby CORE_APP_LAYER_IBY_EXPORT_PATH(versitrecognizer.iby)
+
+PRJ_MMPFILES
+
+./VERSIT.MMP
+./VCal.MMP
+./VCard.MMP
+#ifndef WINC
+../rec/VersitRecog.mmp
+#endif
+
+PRJ_TESTMMPFILES
+// specify the .mmp files required for building any test programs here
+//
+// you can specify "manual" to denote that a test should be listed in a generated
+// batch file for running a group of tests which require user input during testing.
+// you can specify "support" to denote that a file is a test support file and shouldn't
+// be listed in a batch file for running a group of tests
+// By default, each test will be listed in a batch file for running a group of tests
+// which can be left to run without requiring watching over by the person running the tests,
+// i.e. tests where no user input is required. The default will apply if neither "manual"
+// or "support" is specified.
+../tsrc/TVERSIT.MMP
+../tsrc/tvgen.mmp
+../tsrc/TCharsetvCard.mmp
+../tsrc/TBugFix.MMP
+../tsrc/toom.mmp
+../tsrc/tPerformance.mmp
+../tsrc/TDefaultCharset.mmp
+../tsrc/Test_saveloadbin.mmp
+../tsrc/Test_saveloadbinoom.mmp
+../Ticket/VTicket.MMP support
+../tsrc/TJapaneseSoundProperty.mmp
+../tsrc/Test_recognizer.mmp
+
+// PREQ1375 Unit tests for PBAPSupport
+../tsrc/UnitTest_PBAPSupport/group/TestExternalize.mmp
+
+
+PRJ_TESTEXPORTS
+
+../group/VersitTest.iby /epoc32/rom/include/versittest.iby
+
+// WINSCW UDEB Z
+
+../TestvCards/Encoded/1.vcf z:/testvcards/encoded/1.vcf
+../TestvCards/Encoded/2.vcf z:/testvcards/encoded/2.vcf
+../TestvCards/Encoded/3.vcf z:/testvcards/encoded/3.vcf
+../TestvCards/Encoded/4.vcf z:/testvcards/encoded/4.vcf
+../TestvCards/Encoded/5.vcf z:/testvcards/encoded/5.vcf
+../TestvCards/Encoded/6.vcf z:/testvcards/encoded/6.vcf
+../TestvCards/Encoded/7.vcf z:/testvcards/encoded/7.vcf
+
+../TestvCards/Epoc/1.vcf z:/testvcards/epoc/1.vcf
+../TestvCards/Epoc/2.vcf z:/testvcards/epoc/2.vcf
+../TestvCards/Epoc/3.vcf z:/testvcards/epoc/3.vcf
+../TestvCards/Epoc/4.vcf z:/testvcards/epoc/4.vcf
+../TestvCards/Epoc/5.vcf z:/testvcards/epoc/5.vcf
+../TestvCards/Epoc/6.vcf z:/testvcards/epoc/6.vcf
+../TestvCards/Epoc/7.vcf z:/testvcards/epoc/7.vcf
+../TestvCards/Epoc/8.vcf z:/testvcards/epoc/8.vcf
+
+../TestvCards/ER5Regression/1.vcf z:/testvcards/er5regression/1.vcf
+../TestvCards/ER5Regression/2.vcf z:/testvcards/er5regression/2.vcf
+../TestvCards/ER5Regression/3.vcf z:/testvcards/er5regression/3.vcf
+../TestvCards/ER5Regression/4.vcf z:/testvcards/er5regression/4.vcf
+../TestvCards/ER5Regression/5.vcf z:/testvcards/er5regression/5.vcf
+
+../TestvCards/Invalid/1.vcf z:/testvcards/invalid/1.vcf
+../TestvCards/Invalid/2.vcf z:/testvcards/invalid/2.vcf
+../TestvCards/Invalid/3.vcf z:/testvcards/invalid/3.vcf
+../TestvCards/Invalid/4.vcf z:/testvcards/invalid/4.vcf
+../TestvCards/Invalid/5.vcf z:/testvcards/invalid/5.vcf
+../TestvCards/Invalid/6.vcf z:/testvcards/invalid/6.vcf
+../TestvCards/Invalid/7.vcf z:/testvcards/invalid/7.vcf
+../TestvCards/Invalid/8.vcf z:/testvcards/invalid/8.vcf
+
+../TestvCards/Various/1.vcf z:/testvcards/various/1.vcf
+../TestvCards/Various/2.vcf z:/testvcards/various/2.vcf
+../TestvCards/Various/3.vcf z:/testvcards/various/3.vcf
+../TestvCards/Various/4.vcf z:/testvcards/various/4.vcf
+../TestvCards/Various/5.vcf z:/testvcards/various/5.vcf
+../TestvCards/Various/6.vcf z:/testvcards/various/6.vcf
+../TestvCards/Various/7.vcf z:/testvcards/various/7.vcf
+../TestvCards/Various/8.vcf z:/testvcards/various/8.vcf
+../TestvCards/Various/9.vcf z:/testvcards/various/9.vcf
+../TestvCards/Various/10.vcf z:/testvcards/various/10.vcf
+../TestvCards/Various/11.vcf z:/testvcards/various/11.vcf
+../TestvCards/Various/12.vcf z:/testvcards/various/12.vcf
+../TestvCards/Various/nulldate.vcf z:/testvcards/various/nulldate.vcf
+../TestvCards/Various/HugeVCard.vcf z:/testvcards/various/HugeVCard.vcf
+
+// TBugfix the number of files=82
+../TestvCals/Various/6.vcs z:/testvcards/various/6.vcs
+../TestFiles/CShJisEs.VCF z:/testfiles/cshjises.vcf
+../TestFiles/CTabs.VCS z:/testfiles/ctabs.vcs
+../TestFiles/IShJisEs.VCF z:/testfiles/ishjises.vcf
+../TestFiles/ITabs.VCS z:/testfiles/itabs.vcs
+../TestFiles/ITimePer.VCS z:/testfiles/itimeper.vcs
+../TestFiles/iDalarm.vcs z:/testfiles/idalarm.vcs
+../TestFiles/cDalarm.vcs z:/testfiles/cdalarm.vcs
+../TestFiles/IAgent.VCF z:/testfiles/iagent.vcf
+../TestFiles/IBase64.VCF z:/testfiles/ibase64.vcf
+../TestFiles/IBase64ws.vcf z:/testfiles/ibase64ws.vcf
+../TestFiles/IDalarm2.VCS z:/testfiles/idalarm2.vcs
+../TestFiles/IWrap.VCS z:/testfiles/iwrap.vcs
+../TestFiles/CAgent.VCF z:/testfiles/cagent.vcf
+../TestFiles/CBase64.VCF z:/testfiles/cbase64.vcf
+../TestFiles/CBase64ws.vcf z:/testfiles/cbase64ws.vcf
+../TestFiles/CDalarm2.VCS z:/testfiles/cdalarm2.vcs
+../TestFiles/CWrap.VCS z:/testfiles/cwrap.vcs
+../TestFiles/Test5_ASCII_Input.vcf z:/testfiles/test5_ascii_input.vcf
+../TestFiles/iAsciiLineFolding.vcf z:/testfiles/iasciilinefolding.vcf
+../TestFiles/cAsciiLineFolding.vcf z:/testfiles/casciilinefolding.vcf
+../TestFiles/iBase64LineFolding.vcf z:/testfiles/ibase64linefolding.vcf
+../TestFiles/cBase64LineFolding.VCF z:/testfiles/cbase64linefolding.vcf
+../TestFiles/cBase64NoSpaceLineFolding.vcf z:/testfiles/cbase64nospacelinefolding.vcf
+../TestFiles/iQPLineFolding.vcf z:/testfiles/iqplinefolding.vcf
+../TestFiles/cQPLineFolding.VCF z:/testfiles/cqplinefolding.vcf
+../TestFiles/iTest7.vcf z:/testfiles/itest7.vcf
+../TestFiles/iTestVcard.vcf z:/testfiles/itestvcard.vcf
+../TestFiles/iTestVcal.vcs z:/testfiles/itestvcal.vcs
+../TestFiles/cTestVCard.vcf z:/testfiles/ctestvcard.vcf
+../TestFiles/cTestVCal.vcs z:/testfiles/ctestvcal.vcs
+../TestFiles/iGroupedProperty.vcf z:/testfiles/igroupedproperty.vcf
+../TestFiles/iTimeZoneN.vcs z:/testfiles/itimezonen.vcs
+../TestFiles/cTimeZoneN.VCS z:/testfiles/ctimezonen.vcs
+../TestFiles/iTimeZoneP.vcs z:/testfiles/itimezonep.vcs
+../TestFiles/cTimeZoneP.VCS z:/testfiles/ctimezonep.vcs
+../TestFiles/IGBK.VCF z:/testfiles/igbk.vcf
+../TestFiles/IShiftJis.VCS z:/testfiles/ishiftjis.vcs
+../TestFiles/CShiftJis.VCS z:/testfiles/cshiftjis.vcs
+../TestFiles/IvCard.VCF z:/testfiles/ivcard.vcf
+../TestFiles/CvCard.VCF z:/testfiles/cvcard.vcf
+../TestFiles/IvCal.VCS z:/testfiles/ivcal.vcs
+../TestFiles/IRDailyVCal.VCS z:/testfiles/irdailyvcal.vcs
+../TestFiles/CvCal.VCS z:/testfiles/cvcal.vcs
+../TestFiles/NoEnd.VCF z:/testfiles/noend.vcf
+../TestFiles/HalfLine.VCF z:/testfiles/halfline.vcf
+../TestFiles/Feb29.VCS z:/testfiles/feb29.vcs
+../TestFiles/EnName1.VCS z:/testfiles/enname1.vcs
+../TestFiles/EnName2.VCS z:/testfiles/enname2.vcs
+../TestFiles/EnName3.VCF z:/testfiles/enname3.vcf
+../TestFiles/EnName4.VCF z:/testfiles/enname4.vcf
+../TestFiles/Begin2.VCF z:/testfiles/begin2.vcf
+../TestFiles/Begin3.VCS z:/testfiles/begin3.vcs
+../TestFiles/End2.VCF z:/testfiles/end2.vcf
+../TestFiles/IEndBa64.VCS z:/testfiles/iendba64.vcs
+../TestFiles/CEndBa64.VCS z:/testfiles/cendba64.vcs
+../TestFiles/CNullPar.VCS z:/testfiles/cnullpar.vcs
+../TestFiles/CTZone.VCS z:/testfiles/ctzone.vcs
+../TestFiles/CTZone2.VCS z:/testfiles/ctzone2.vcs
+../TestFiles/CWrap2.VCS z:/testfiles/cwrap2.vcs
+../TestFiles/IESlash.VCF z:/testfiles/ieslash.vcf
+../TestFiles/CESlash.VCF z:/testfiles/ceslash.vcf
+../TestFiles/INullPar.VCS z:/testfiles/inullpar.vcs
+../TestFiles/ITZone.VCS z:/testfiles/itzone.vcs
+../TestFiles/ITZone2.VCS z:/testfiles/itzone2.vcs
+../TestFiles/IWrap2.VCS z:/testfiles/iwrap2.vcs
+../TestFiles/Base64.VCF z:/testfiles/base64.vcf
+../TestFiles/vCard.VCF z:/testfiles/vcard.vcf
+../TestFiles/IAutoD.VCF z:/testfiles/iautod.vcf
+../TestFiles/IAutoD2.VCS z:/testfiles/iautod2.vcs
+../TestFiles/CAutoD.VCF z:/testfiles/cautod.vcf
+../TestFiles/CAutoD2.VCS z:/testfiles/cautod2.vcs
+../TestFiles/IYenEsc1.VCF z:/testfiles/iyenesc1.vcf
+../TestFiles/IYenEsc2.VCF z:/testfiles/iyenesc2.vcf
+../TestFiles/IParamE.VCF z:/testfiles/iparame.vcf
+../TestFiles/CYenEsc1.VCF z:/testfiles/cyenesc1.vcf
+../TestFiles/CYenEsc2.VCF z:/testfiles/cyenesc2.vcf
+../TestFiles/CParamE.VCF z:/testfiles/cparame.vcf
+../TestFiles/IUK.VCS z:/testfiles/iuk.vcs
+../TestFiles/INewYork.VCS z:/testfiles/inewyork.vcs
+../TestFiles/IJapan.VCS z:/testfiles/ijapan.vcs
+../TestFiles/CUK.VCS z:/testfiles/cuk.vcs
+../TestFiles/CNewYork.VCS z:/testfiles/cnewyork.vcs
+../TestFiles/CJapan.VCS z:/testfiles/cjapan.vcs
+../TestFiles/IFred.VCF z:/testfiles/ifred.vcf
+../TestFiles/iNonStandardAgent.vcf z:/testfiles/inonstandardagent.vcf
+../TestFiles/cNonStandardAgent.vcf z:/testfiles/cnonstandardagent.vcf
+../TestFiles/iRRule.vcs z:/testfiles/irrule.vcs
+../TestFiles/iBlankLines.vcf z:/testfiles/iblanklines.vcf
+../TestFiles/cBlankLines.VCF z:/testfiles/cblanklines.vcf
+../TestFiles/iLineFeed.vcs z:/testfiles/ilinefeed.vcs
+../TestFiles/cLineFeed.VCS z:/testfiles/clinefeed.vcs
+../TestFiles/IJunkLine.VCS z:/testfiles/ijunkline.vcs
+../TestFiles/CJunkLine.VCS z:/testfiles/cjunkline.vcs
+../TestFiles/iattachment.vcs z:/testfiles/iattachment.vcs
+../TestFiles/cattachment.vcs z:/testfiles/cattachment.vcs
+../TestFiles/iAlarmRepeatCount.vcs z:/testfiles/ialarmrepeatcount.vcs
+../TestFiles/DefaultCharSetInput.vcf z:/testfiles/defaultcharsetinput.vcf
+../TestFiles/inewbase64.vcf z:/testfiles/inewbase64.vcf
+../TestFiles/inewbase64.vcs z:/testfiles/inewbase64.vcs
+../TestFiles/ivtrigger.vcf z:/testfiles/ivtrigger.vcf
+../TestFiles/cnewbase64.VCF z:/testfiles/cnewbase64.vcf
+../TestFiles/cnewbase64.VCS z:/testfiles/cnewbase64.vcs
+../TestFiles/cvtrigger.VCF z:/testfiles/cvtrigger.vcf
+../TestFiles/nolf.vcs z:/testfiles/nolf.vcs
+../TestFiles/nestedagent.vcf z:/testfiles/nestedagent.vcf
+
+// TPerformance muber of files=21
+../TPerformance/iLine_short.vcf z:/tperformance/inputfile/line_short.vcf
+../TPerformance/iLine_photo.vcf z:/tperformance/inputfile/line_photo.vcf
+../TPerformance/iLine_long.vcf z:/tperformance/inputfile/line_long.vcf
+../TPerformance/iLine_alarm.vcs z:/tperformance/inputfile/line_alarm.vcs
+../TPerformance/iFileUTF8_QP.vcf z:/tperformance/inputfile/fileutf8_qp.vcf
+../TPerformance/iFileUTF8_Base64.vcf z:/tperformance/inputfile/fileutf8_base64.vcf
+../TPerformance/iFileShiftJIS_QP.vcf z:/tperformance/inputfile/fileshiftjis_qp.vcf
+../TPerformance/iFileShiftJIS_Base64.vcf z:/tperformance/inputfile/fileshiftjis_base64.vcf
+../TPerformance/iFileGBK_QP.vcf z:/tperformance/inputfile/filegbk_qp.vcf
+../TPerformance/iFileGBK_Base64.vcf z:/tperformance/inputfile/filegbk_base64.vcf
+../TPerformance/iFileASCII_QP.vcf z:/tperformance/inputfile/fileascii_qp.vcf
+../TPerformance/iFileASCII_None.vcf z:/tperformance/inputfile/fileascii_none.vcf
+../TPerformance/iFileASCII_Base64.vcf z:/tperformance/inputfile/fileascii_base64.vcf
+../TPerformance/iFile05entity.vcs z:/tperformance/inputfile/file05entity.vcs
+../TPerformance/iFile10entity.vcs z:/tperformance/inputfile/file10entity.vcs
+../TPerformance/iFile15entity.vcs z:/tperformance/inputfile/file15entity.vcs
+../TPerformance/iFile20entity.vcs z:/tperformance/inputfile/file20entity.vcs
+../TPerformance/iFile25entity.vcs z:/tperformance/inputfile/file25entity.vcs
+../TPerformance/iFile30entity.vcs z:/tperformance/inputfile/file30entity.vcs
+../TPerformance/iFile35entity.vcs z:/tperformance/inputfile/file35entity.vcs
+../TPerformance/iFile40entity.vcs z:/tperformance/inputfile/file40entity.vcs
+
+// Shift-JIS and other data files=34
+../TestFiles/K3Data/ITest01.VCF z:/k3data/itest01.vcf
+../TestFiles/K3Data/ITest02.VCF z:/k3data/itest02.vcf
+../TestFiles/K3Data/ITest03.VCS z:/k3data/itest03.vcs
+../TestFiles/K3Data/ITest04.VCF z:/k3data/itest04.vcf
+../TestFiles/K3Data/ITest05.VCF z:/k3data/itest05.vcf
+../TestFiles/K3Data/ITest06.VCF z:/k3data/itest06.vcf
+../TestFiles/K3Data/ITest07.VCF z:/k3data/itest07.vcf
+../TestFiles/K3Data/ITest08.VCF z:/k3data/itest08.vcf
+../TestFiles/K3Data/ITest09.VCF z:/k3data/itest09.vcf
+../TestFiles/K3Data/ITest10.VCF z:/k3data/itest10.vcf
+../TestFiles/K3Data/ITest11.VCF z:/k3data/itest11.vcf
+../TestFiles/K3Data/STest01.VCF z:/k3data/stest01.vcf
+../TestFiles/K3Data/STest02.VCF z:/k3data/stest02.vcf
+../TestFiles/K3Data/STest03.VCS z:/k3data/stest03.vcs
+../TestFiles/K3Data/STest04.VCF z:/k3data/stest04.vcf
+../TestFiles/K3Data/STest05.VCF z:/k3data/stest05.vcf
+../TestFiles/K3Data/STest06.VCF z:/k3data/stest06.vcf
+../TestFiles/K3Data/STest07.VCF z:/k3data/stest07.vcf
+../TestFiles/K3Data/STest08.VCF z:/k3data/stest08.vcf
+../TestFiles/K3Data/STest09.VCF z:/k3data/stest09.vcf
+../TestFiles/K3Data/STest10.VCF z:/k3data/stest10.vcf
+../TestFiles/K3Data/STest11.VCF z:/k3data/stest11.vcf
+
+// Japanese SOUND vCard test files (WINSCW UDEB)
+../TestvCards/VersitJapaneseVCards/amano.vcf z:/versitjapanesevcards/amano.vcf
+../TestvCards/VersitJapaneseVCards/aoki.vcf z:/versitjapanesevcards/aoki.vcf
+../TestvCards/VersitJapaneseVCards/barbara.vcf z:/versitjapanesevcards/barbara.vcf
+../TestvCards/VersitJapaneseVCards/Digit1.vcf z:/versitjapanesevcards/digit1.vcf
+../TestvCards/VersitJapaneseVCards/Digit2.vcf z:/versitjapanesevcards/digit2.vcf
+../TestvCards/VersitJapaneseVCards/haga.vcf z:/versitjapanesevcards/haga.vcf
+../TestvCards/VersitJapaneseVCards/kasai.vcf z:/versitjapanesevcards/kasai.vcf
+../TestvCards/VersitJapaneseVCards/kitajima.vcf z:/versitjapanesevcards/kitajima.vcf
+../TestvCards/VersitJapaneseVCards/Longest.vcf z:/versitjapanesevcards/longest.vcf
+../TestvCards/VersitJapaneseVCards/matsui.vcf z:/versitjapanesevcards/matsui.vcf
+../TestvCards/VersitJapaneseVCards/miyazaki.vcf z:/versitjapanesevcards/miyazaki.vcf
+../TestvCards/VersitJapaneseVCards/nakai.vcf z:/versitjapanesevcards/nakai.vcf
+../TestvCards/VersitJapaneseVCards/powell.vcf z:/versitjapanesevcards/powell.vcf
+../TestvCards/VersitJapaneseVCards/prolongedsound.vcf z:/versitjapanesevcards/prolongedsound.vcf
+../TestvCards/VersitJapaneseVCards/SpecialCharacter1.vcf z:/versitjapanesevcards/specialcharacter1.vcf
+../TestvCards/VersitJapaneseVCards/SpecialCharacter2.vcf z:/versitjapanesevcards/specialcharacter2.vcf
+../TestvCards/VersitJapaneseVCards/takashiro.vcf z:/versitjapanesevcards/takashiro.vcf
+../TestvCards/VersitJapaneseVCards/escaped.vcf z:/versitjapanesevcards/escaped.vcf
+../TestvCards/VersitJapaneseVCards/Multiplesounds.vcf z:/versitjapanesevcards/multiplesounds.vcf
+
+// PREQ1375 Unit testdata for PBAPSupport
+../tsrc/UnitTest_PBAPSupport/testdata/CBase64LineFolding.vcf z:/pbapsupport/cbase64linefolding.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CBinaryEncoding.vcf z:/pbapsupport/cbinaryencoding.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CDisableCharset.vcf z:/pbapsupport/cdisablecharset.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CEscapeBackslash.vcf z:/pbapsupport/cescapebackslash.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CEscapeComma.vcf z:/pbapsupport/cescapecomma.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CEscapeSemicolon.vcf z:/pbapsupport/cescapesemicolon.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CLongPropertyName.vcf z:/pbapsupport/clongpropertyname.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CLongPropertyParam.vcf z:/pbapsupport/clongpropertyparam.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CLongPropertyValue.vcf z:/pbapsupport/clongpropertyvalue.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CQPEncodingTest1.vcf z:/pbapsupport/cqpencodingtest1.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CQPEncodingTest2.vcf z:/pbapsupport/cqpencodingtest2.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CShortAsciiLine.vcf z:/pbapsupport/cshortasciiline.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/CUseUTF8.vcf z:/pbapsupport/cuseutf8.vcf
+../tsrc/UnitTest_PBAPSupport/testdata/IBase64LineFolding.vcf z:/pbapsupport/ibase64linefolding.vcf
+
+
+
--- a/pimappsupport/vcardandvcal/tsrc/TJapaneseSoundProperty.mmp Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/tsrc/TJapaneseSoundProperty.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -21,7 +21,9 @@
sourcepath .
userinclude .
-userinclude ../inc
+userinclude ../inc
+
+APP_LAYER_SYSTEMINCLUDE
systeminclude /epoc32/include
source TJapaneseSoundProperty.cpp
--- a/pimappsupport/vcardandvcal/tsrc/Test_saveloadbinoom.mmp Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/tsrc/Test_saveloadbinoom.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -23,6 +23,7 @@
userinclude ../tsrc
userinclude ../inc
+APP_LAYER_SYSTEMINCLUDE
systeminclude /epoc32/include
source Test_saveloadbinoom.cpp
library euser.lib estor.lib efsrv.lib
--- a/pimappsupport/vcardandvcal/tsrc/UnitTest_PBAPSupport/group/TestExternalize.mmp Mon May 03 12:30:32 2010 +0300
+++ b/pimappsupport/vcardandvcal/tsrc/UnitTest_PBAPSupport/group/TestExternalize.mmp Mon Jun 28 15:22:02 2010 +0530
@@ -21,6 +21,8 @@
SOURCEPATH ../src
USERINCLUDE ../inc
USERINCLUDE ../../../inc
+
+APP_LAYER_SYSTEMINCLUDE
SYSTEMINCLUDE /epoc32/include
SOURCE TestExternalize.cpp
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/tsrc/group/bld.inf Mon Jun 28 15:22:02 2010 +0530
@@ -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 Mon Jun 28 15:22:02 2010 +0530
@@ -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