--- a/calendarui/caleneditor/src/caleneditorreminderfield.cpp Wed Aug 18 09:47:38 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditorreminderfield.cpp Thu Sep 02 20:25:23 2010 +0300
@@ -90,6 +90,13 @@
void CalenEditorReminderField::setReminderChoices()
{
OstTraceFunctionEntry0( CALENEDITORREMINDERFIELD_SETREMINDERCHOICES_ENTRY );
+
+ // Disconnect the slot and connect it back again at end to avoid unnecessary
+ // calls to handleReminderIndexChanged slot. Or else the slot gets called
+ // when we add all of items to the repeat combobox.
+ mEditorForm->removeConnection(mReminderItem,
+ SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleReminderIndexChanged(int)));
// Create the reminder choices
QStringList reminderChoices;
reminderChoices << hbTrId("txt_calendar_setlabel_reminder_val_off")
@@ -99,15 +106,11 @@
<< hbTrId("txt_calendar_setlabel_reminder_val_1_hour_before");
mReminderItem->setContentWidgetData("items", reminderChoices);
- mReminderItem->setContentWidgetData("objectName", "remainderItem");
-
- // 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);
+
+ mEditorForm->addConnection(mReminderItem,
+ SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleReminderIndexChanged(int)));
OstTraceFunctionExit0( CALENEDITORREMINDERFIELD_SETREMINDERCHOICES_EXIT );
}
@@ -134,6 +137,29 @@
}
/*!
+ Set the current reminder index with the value which was saved
+ before, if it is valid or else default the value to 15MinsBefore
+ or AtTheStart whichever is appropriate
+ */
+void CalenEditorReminderField::setSavedMeetingReminderIndex()
+{
+ // Get the reminder offset value.
+ int reminderOffset =
+ mCalenEditor->editedEntry()->alarm().timeOffset();
+ // Get the index value for the reminder combo box from the hash
+ // table. 2nd argument is defaultKey if the hash contains no item mapped to value
+ //TODO: Need to confirm the default reminder to set if none of the choices are met like in case of synch from outlook.
+ int index = mReminderHash.key(reminderOffset, Reminder15MinsBefore);
+
+ if (index < reminderItemsCount())
+ setCurrentIndex(index);
+ else if (reminderItemsCount() == (ReminderAtStart + 1)) //+1 because enum starts from 0.
+ setCurrentIndex(ReminderAtStart);
+ else
+ setCurrentIndex(Reminder15MinsBefore);
+}
+
+/*!
Populates reminder item with available choices to the user
\param newEntry bool value to indicate if its a new entry
*/
@@ -142,7 +168,17 @@
OstTraceFunctionEntry0( CALENEDITORREMINDERFIELD_POPULATEREMINDERITEM_ENTRY );
AgendaAlarm reminder;
bool pastEvent = false;
+ bool repeatingEntry = false;
+ bool sameDay = false;
+ mReminderItem->setContentWidgetData("objectName", "remainderItem");
+ // Build the hash map for the reminder.
+ mReminderHash[ReminderOff] = -1; // OFF.
+ mReminderHash[ReminderAtStart] = 0;
+ mReminderHash[Reminder15MinsBefore] = 15;
+ mReminderHash[Reminder30MinsBefore] = 30;
+ mReminderHash[Reminder1HourBefore] = 60;
+
// Set reference date to start date or repeat until date accordingly to
// decide whether its a past event or not.
QDate referenceDate;
@@ -151,6 +187,7 @@
referenceDate = mCalenEditor->editedEntry()->startTime().date();
} else {
referenceDate = mCalenEditor->editedEntry()->repeatRule().until().date();
+ repeatingEntry = true;
}
if ((referenceDate < QDate::currentDate()) ||
@@ -163,39 +200,55 @@
if (mCalenEditor->isAllDayEvent()) {
updateReminderChoicesForAllDay(referenceDate);
} else {
+ if((referenceDate == QDate::currentDate())
+ && !pastEvent) {
+ UpdateReminderChoicesForSameDay(mCalenEditor->editedEntry()->startTime().time());
+ sameDay = true;
+ }
+ else {
setReminderChoices();
+ }
}
// Set the default reminder value to 15 minutes
if (newEntry) {
if (!pastEvent) {
- mReminderItem->setContentWidgetData("currentIndex", 2);
+ int defaultIndex = Reminder15MinsBefore;
+ if (reminderItemsCount() == (ReminderAtStart + 1)) //If 15MinsBefore option is not available
+ defaultIndex = ReminderAtStart;
+
+ setCurrentIndex(defaultIndex);
// Save the reminder alarm for the entry
- reminder.setTimeOffset(mReminderHash.value(2));
+ reminder.setTimeOffset(mReminderHash.value(defaultIndex));
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);
+ setReminderOff();
}
} else {
+ int offsetInMins = mCalenEditor->editedEntry()->alarm().timeOffset();
// 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", ReminderOff);
+ setCurrentIndex(ReminderOff);
if(mReminderTimeAdded) {
removeReminderTimeField();
}
} else if (!mCalenEditor->isAllDayEvent()) {
- // Get the reminder offset value.
- 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);
+ QTime currentTime = QTime::currentTime();
+
+ //TODO: Still need confirmation for proper behaviour when entry is edited after alarm has expired.
+ if (!repeatingEntry && sameDay && (currentTime.addSecs(offsetInMins * 60) >= mCalenEditor->editedEntry()->startTime().time())) {
+ setCurrentIndex(ReminderOff); //Alarm has expired already, so making it off.
+ //The slot for index 0 is not called, since after UpdateReminderChoicesForSameDay()
+ //index is 0 itself and there is no change. So explicitly calling it here.
+ handleReminderIndexChanged(0);
+ }
+ else {
+ setSavedMeetingReminderIndex();
+ }
} else {
// Insert reminder time field and display entry's reminder time.
// If past then disable the field.
@@ -205,31 +258,9 @@
if (pastEvent && mReminderTimeAdded) {
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", ReminderOnEventDay);
- mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
- * 60));
- } else if (offsetInMins < numberOfMinutesInADay) {
- mReminderItem->setContentWidgetData("currentIndex", ReminderOneDayBefore);
- mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
- * 60));
- } else {
- mReminderItem->setContentWidgetData("currentIndex", ReminderTwoDaysBefore);
- offsetInMins %= (24 * 60);
- mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
- * 60));
- }
+ // Get the appropriate reminder index depending on the value of time offset.
+ int index = getReminderIndexBasedOnEntryAlarm();
+ mReminderItem->setContentWidgetData("currentIndex", index);
setDisplayTime();
}
if (pastEvent) {
@@ -243,7 +274,7 @@
}
/*!
- Triggerd from tapping on reminder item.
+ Triggered from tapping on reminder item.
Handles the reminder time change and updates the same in the event.
\param index The new index chosen in the reminder list.
*/
@@ -269,7 +300,7 @@
reminder.setAlarmSoundName(QString(" "));
}
} else {
- QDateTime reminderDateTimeForAllDay;
+ QDateTime reminderDateTimeForAllDay;
QDateTime
startDateTimeForAllDay(
mCalenEditor->editedEntry()->startTime().date(),
@@ -285,16 +316,21 @@
offset = 2;
}
if(!mReminderTimeAdded) {
- insertReminderTimeField()
-; }
+ 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();
}
+ }else {
+ // For the reminder options other than ReminderOnEventDay
+ // reset the default values since the time set for one option
+ // may not be valid for the other option
+ mReminderTimeForAllDay.setHMS(18, 0, 0, 0);
}
+ setDisplayTime();
reminderDateTimeForAllDay.setDate(
mCalenEditor->editedEntry()->startTime().date().addDays(
-offset));
@@ -370,6 +406,78 @@
}
/*!
+ Update the reminder choices when the meeting is on same day,
+ based on the time available from current time to start time of the event.
+ */
+void CalenEditorReminderField::UpdateReminderChoicesForSameDay(QTime startTime)
+{
+ QTime currentTime = QTime::currentTime();
+ int offset = currentTime.secsTo(startTime);
+
+ // Disconnect the slot and connect it back again at end to avoid unnecessary
+ // calls to handleReminderIndexChanged slot. Or else the slot gets called
+ // when we add all of items to the repeat combobox.
+ mEditorForm->removeConnection(mReminderItem,
+ SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleReminderIndexChanged(int)));
+
+ //The event start time is within 15mins from current time of today,
+ //then we cannot have alarms "15 mins before", "30mins before" and "1 hour before"
+ if (offset <= SecsIn15Mins)
+ {
+ QStringList reminderChoices;
+ //First to clear all items, we just set items with empty list.
+ mReminderItem->setContentWidgetData("items", reminderChoices);
+ reminderChoices << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_at_the_start");
+ mReminderItem->setContentWidgetData("items", reminderChoices);
+ }
+ //The event start time is within half and hour from current time of today
+ //then we cannot have alarms "30mins before" and "1 hour before"
+ else if (offset <= SecsIn30Mins)
+ {
+ QStringList reminderChoices;
+ //First to clear all items, we just set items with empty list.
+ mReminderItem->setContentWidgetData("items", 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");
+ mReminderItem->setContentWidgetData("items", reminderChoices);
+ }
+ //The event start time is within an hour of the current time of today,
+ //then cannot have alarm "1 hour before".
+ else if (offset <= SecsInOneHour)
+ {
+ QStringList reminderChoices;
+ //First to clear all items, we just set items with empty list.
+ mReminderItem->setContentWidgetData("items", 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");
+ mReminderItem->setContentWidgetData("items", reminderChoices);
+ }
+ // The event start time is more than one hour from current time
+ // then we can have all choices for alarm.
+ else
+ {
+ QStringList reminderChoices;
+ //First to clear all items, we just set items with empty list.
+ mReminderItem->setContentWidgetData("items", 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("items", reminderChoices);
+ }
+ mReminderItem->setEnabled(true);
+ mEditorForm->addConnection(mReminderItem,
+ SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleReminderIndexChanged(int)));
+}
+
+/*!
Updates the reminder choices for an all day event.
\param referenceDate to indicate past or not.
*/
@@ -379,69 +487,91 @@
if (!mReminderTimeAdded){
insertReminderTimeField();
}
+ // This functions rearranges the reminder options based on the date and time
+ // To avoid the unecessary call to handleReminderIndexChanged
+ // the connection is removed.
+ mEditorForm->removeConnection(mReminderItem,
+ SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleReminderIndexChanged(int)));
+
+ // Since the combox box is not updated as per the current datetime
+ // there can be a conflict between the previousIndex set on the combobox
+ // and the actual index. This comes while populating an existing entry.
+ // So the index has to be taken from the entry alarm
+
+ AgendaAlarm actualAlarm = mCalenEditor->editedEntry()->alarm();
+ // Get the actual alarm index from the entry alarm which is been set
+ int actualIndex = getReminderIndexBasedOnEntryAlarm();
+ int offsetInMins = actualAlarm.timeOffset();
+
+ // Calculate the alarm time
+ QDateTime alarmDateTime;
+ alarmDateTime.setDate(referenceDate);
+ alarmDateTime.setTime(mCalenEditor->editedEntry()->startTime().time());
+ QTime checkTime = alarmDateTime.time().addSecs(-(offsetInMins * 60));
+ alarmDateTime.setTime(checkTime);
+
+ // The combox is updated based on the reference date which is beed passed.
+ // And the reminder time has to be set acoordingly
QStringList reminderChoicesForAllDay;
QDate tomorrow = QDate::currentDate().addDays(1);
QDate theDayAfterTomorrow = QDate::currentDate().addDays(2);
-
- // Get the previous index to retain if the alarm is valid
- QVariant countVariant = mReminderItem->contentWidgetData("currentIndex");
- int previousIndex = countVariant.toInt();
- AgendaAlarm previousAlarm = mCalenEditor->editedEntry()->alarm();
-
- // Update the reminder choices only if the alarm set is not valid
- // Get the alarm offset to check for the validity
- int offset = mCalenEditor->editedEntry()->alarm().timeOffset();
- bool update = true;
-
- // Calculate the alarm time
- QDateTime refDateTime;
- refDateTime.setDate(referenceDate);
- refDateTime.setTime(mCalenEditor->editedEntry()->startTime().time());
- QTime checkTime = refDateTime.time().addSecs(-(offset * 60));
- refDateTime.setTime(checkTime);
- // Check for valid alarm offset
- if(offset >= 0) {
- // If the alarm which was already set is valid,
- // then dont update the reminder choices
- if ((refDateTime > QDateTime::currentDateTime()) ||
- (refDateTime.date() == QDate::currentDate() && (
- refDateTime.time() > QTime::currentTime()))) {
- update = false;
- }
- }
+
// If the event is on a past date the default alarm will be off.
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);
+ reminderChoicesForAllDay);
mReminderItem->setEnabled(false);
// Remove the reminder field if it was added
if(mReminderTimeAdded) {
removeReminderTimeField();
}
- } else if (theDayAfterTomorrow < referenceDate ||
- theDayAfterTomorrow == referenceDate) {
+ } else if (theDayAfterTomorrow < referenceDate) {
// If the event is on a future date which is two days after the current date
// The options are off, on event day, 1 day before and 2 days before
reminderChoicesForAllDay
+ << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day")
+ << hbTrId("txt_calendar_setlabel_reminder_val_1_day_before")
+ << hbTrId("txt_calendar_setlabel_reminder_val_2_days_before");
+ mReminderItem->setEnabled(true);
+ mCustomReminderTimeItem->setEnabled(true);
+ mReminderItem->setContentWidgetData(QString("items"),
+ reminderChoicesForAllDay);
+ } else if (theDayAfterTomorrow == referenceDate) {
+ // If the event is on a future date which is two days after the current date
+ // If the current time is before 6.00 pm (default for 2 days before)
+ // The options are off, on event day, 1 day before and 2 days before
+ if (QTime::currentTime() < QTime(18, 0, 0, 0)) {
+ 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");
+ }else {
+ // If the event is on a future date which is two days after the current date
+ // the current time is after 6.00 pm (default for 2 days before)
+ // If its after the default time don't show the 2 days before option
+ 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);
mReminderItem->setContentWidgetData(QString("items"),
- reminderChoicesForAllDay);
- } else if (QTime::currentTime() < QTime(18, 0, 0, 0)) {
+ reminderChoicesForAllDay);
+ }else if (QTime::currentTime() < QTime(18, 0, 0, 0)) {
// If the event is on a future date which is one day after the current date
// and current time is before 6.00 pm.
// The options are off, on event day and 1 day before
reminderChoicesForAllDay
- << hbTrId("txt_calendar_setlabel_reminder_val_off")
- << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day")
- << hbTrId("txt_calendar_setlabel_reminder_val_1_day_before");
+ << 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);
mReminderItem->setContentWidgetData(QString("items"),
@@ -451,52 +581,87 @@
// and current time is after 6.00 pm.
// The options are off and on event day
reminderChoicesForAllDay
- << hbTrId("txt_calendar_setlabel_reminder_val_off")
- << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day");
+ << hbTrId("txt_calendar_setlabel_reminder_val_off")
+ << hbTrId("txt_calendar_setlabel_reminder_val_on_event_day");
mReminderItem->setEnabled(true);
mCustomReminderTimeItem->setEnabled(true);
mReminderItem->setContentWidgetData(QString("items"),
reminderChoicesForAllDay);
}
- // Set the proper index based on the validity of the previous index
+ // Get the count of the reminder options after the rearrangement
+ // based on the date and time
int count = reminderItemsCount();
- // By default, in case of reminder updation, its been agreed to set
- // ReminderOneDayBefore even though ReminderTwoDaysBefore holds good
- // If the ReminderOneDayBefore option is available set it or
- // else set it to ReminderOff
- if(count > ReminderOneDayBefore) {
- // Don't make the reminder off since
- // the valid reminder options are there in the combobox
- // So check for ReminderOff is needed
- if (update &&
- (previousIndex == ReminderOff || previousIndex >= ReminderOneDayBefore)) {
- // If the index has to be updated check the previous index value
- // And set the default reminder as 1 day before.
- mReminderItem->setContentWidgetData("currentIndex",
- ReminderOneDayBefore);
- }else {
- // Set the previous index since the alarm is valid
- mReminderItem->setContentWidgetData("currentIndex", previousIndex);
- // Set the previous alarm also as the value will be changed to default value
- // when the current index is been changed
- mCalenEditor->editedEntry()->setAlarm(previousAlarm);
+ // Set the reminder index
+
+ if (count <= actualIndex ||
+ alarmDateTime < QDateTime::currentDateTime() ||
+ actualIndex == ReminderOff) {
+ // This will be executed when the actual index is not
+ // available in the combobox or the alarm time is already passed
+ // or the actual alarm is off
+ // So set it as off
+ mReminderItem->setContentWidgetData("currentIndex", ReminderOff);
+ actualAlarm = AgendaAlarm();
+ mCalenEditor->editedEntry()->setAlarm(actualAlarm);
+ removeReminderTimeField();
+ }else {
+ // Set the actual reminder index
+ mReminderItem->setContentWidgetData("currentIndex", actualIndex);
+ if( actualIndex != ReminderOff) {
+ if(!mReminderTimeAdded) {
+ insertReminderTimeField();
+ }
+ mCalenEditor->editedEntry()->setAlarm(actualAlarm);
// Get the alarm time from the offset
- QTime alarmTime = refDateTime.time();
+ QTime alarmTime = alarmDateTime.time();
// Set the alarm time and display it on the button
mReminderTimeForAllDay.setHMS(
alarmTime.hour(),alarmTime.minute(),alarmTime.second());
setDisplayTime();
+ }else {
+ actualAlarm = AgendaAlarm();
+ removeReminderTimeField();
}
- }else {
- // Enters this condition if the previous index set is not valid or
- // the index is ReminderOff
- mReminderItem->setContentWidgetData("currentIndex", ReminderOff);
}
-
+ // Connect the slot for the index change
+ mEditorForm->addConnection(mReminderItem,
+ SIGNAL(currentIndexChanged(int)), this,
+ SLOT(handleReminderIndexChanged(int)));
+
OstTraceFunctionExit0( CALENEDITORREMINDERFIELD_UPDATEREMINDERCHOICESFORALLDAY_EXIT );
}
/*!
+ Gets the reminder index for all day events based on the alarm
+ which is saved for the entry
+ */
+int CalenEditorReminderField::getReminderIndexBasedOnEntryAlarm()
+{
+ // Get the appropriate reminder index depending on the value of time offset.
+ AgendaAlarm actualAlarm = mCalenEditor->editedEntry()->alarm();
+ QTime referenceTime(0, 0, 0);
+ int index = ReminderOff;
+ int offsetInMins = actualAlarm.timeOffset();
+ if(offsetInMins == -1) {
+ index = ReminderOff;
+ }else if (offsetInMins < 0 || offsetInMins == 0) {
+ index = ReminderOnEventDay;
+ mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
+ * 60));
+ } else if (offsetInMins <= numberOfMinutesInADay) {
+ index = ReminderOneDayBefore;
+ mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
+ * 60));
+ } else {
+ index = ReminderTwoDaysBefore;
+ offsetInMins %= (24 * 60);
+ mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
+ * 60));
+ }
+ return index;
+}
+
+/*!
Insert the reminder time field for an all day event.
*/
void CalenEditorReminderField::insertReminderTimeField()
@@ -549,6 +714,8 @@
{
OstTraceFunctionEntry0( CALENEDITORREMINDERFIELD_REMOVEREMINDERTIMEFIELD_ENTRY );
mReminderTimeAdded = false;
+ mEditorForm->removeConnection(mCustomReminderTimeItem, SIGNAL(clicked()),
+ this, SLOT(launchReminderTimePicker()));
if (mCustomReminderTimeItem) {
QModelIndex reminderIndex =
mCalenEditorModel->indexFromItem(mCustomReminderTimeItem);
@@ -576,11 +743,29 @@
HbExtendedLocale locale = HbExtendedLocale::system();
mTimePicker = new HbDateTimePicker(mReminderTimeForAllDay);
+ // Set the display format
if(locale.timeStyle() == HbExtendedLocale::Time12) {
mTimePicker->setDisplayFormat("hh:mm ap");
}else {
mTimePicker->setDisplayFormat("hh:mm");
}
+
+ // Check if the entry is repeating based on the repeatuntil item
+ if(!mCalenEditor->isRepeatUntilItemAdded()) {
+ int index = currentReminderIndex();
+ QDate checkDate = mCalenEditor->editedEntry()->startTime().date();
+ // Restrict the time picker to show the valid time
+ // depending on the reminder options
+ // Take an offset of 5 mins
+ QTime minTime = QTime::currentTime().addSecs(5 * 60);
+ if(index == ReminderTwoDaysBefore && checkDate.addDays(-2) == QDate::currentDate()) {
+ mTimePicker->setMinimumTime(minTime);
+ }else if(index == ReminderOneDayBefore && checkDate.addDays(-1) == QDate::currentDate()) {
+ mTimePicker->setMinimumTime(minTime);
+ }else if(index == ReminderOnEventDay && checkDate == QDate::currentDate()) {
+ mTimePicker->setMinimumTime(minTime);
+ }
+ }
mTimePicker->setTime(mReminderTimeForAllDay);
popUp->setContentWidget(mTimePicker);
@@ -603,7 +788,28 @@
if (mReminderTimeForAllDay.isValid()) {
// Change the time displayed to that selected by the user.
setDisplayTime();
- handleReminderIndexChanged(currentReminderIndex());
+ int offset = 0;
+ if (currentReminderIndex() == ReminderOneDayBefore) {
+ offset = 1;
+ } else if (currentReminderIndex() == ReminderTwoDaysBefore) {
+ offset = 2;
+ }
+ QDateTime startDateTimeForAllDay(
+ mCalenEditor->editedEntry()->startTime().date(), QTime(0, 0, 0));
+ QDateTime reminderDateTimeForAllDay;
+ reminderDateTimeForAllDay.setDate(
+ mCalenEditor->editedEntry()->startTime().date().addDays(
+ -offset));
+ reminderDateTimeForAllDay.setTime(mReminderTimeForAllDay);
+ int seconds =
+ reminderDateTimeForAllDay.secsTo(startDateTimeForAllDay);
+ int timeOffset = seconds / 60;
+ mCustomReminderTimeItem->setEnabled(true);
+ AgendaAlarm reminder;
+ reminder.setTimeOffset(timeOffset);
+ reminder.setAlarmSoundName(QString(" "));
+ // Set the reminder to the entry.
+ mCalenEditor->editedEntry()->setAlarm(reminder);
}
OstTraceFunctionExit0( CALENEDITORREMINDERFIELD_SETREMINDERTIMEFORALLDAY_EXIT );
}