--- a/calendarui/caleneditor/src/caleneditorreminderfield.cpp Mon Jul 26 13:54:38 2010 +0530
+++ b/calendarui/caleneditor/src/caleneditorreminderfield.cpp Mon Aug 09 18:30:52 2010 +0530
@@ -31,6 +31,7 @@
#include <hbaction.h>
// User Includes
+#include "calenagendautils.h"
#include "caleneditorreminderfield.h"
#include "OstTraceDefinitions.h"
#ifdef OST_TRACE_COMPILER_IN_USE
@@ -183,12 +184,11 @@
// 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);
+ mReminderItem->setContentWidgetData("currentIndex", ReminderOff);
if(mReminderTimeAdded) {
removeReminderTimeField();
}
- } else if (mCalenEditor->editedEntry()->type()
- != AgendaEntry::TypeEvent) {
+ } else if (!mCalenEditor->isAllDayEvent()) {
// Get the reminder offset value.
int reminderOffset =
mCalenEditor->editedEntry()->alarm().timeOffset();
@@ -201,9 +201,9 @@
// If past then disable the field.
if (!mReminderTimeAdded) {
insertReminderTimeField();
- if (pastEvent) {
- mCustomReminderTimeItem->setEnabled(false);
- }
+ }
+ if (pastEvent && mReminderTimeAdded) {
+ mCustomReminderTimeItem->setEnabled(false);
}
QStringList reminderChoicesForAllDay;
reminderChoicesForAllDay << hbTrId("txt_calendar_setlabel_reminder_val_off")
@@ -217,15 +217,15 @@
reminder = mCalenEditor->editedEntry()->alarm();
int offsetInMins = reminder.timeOffset();
if (offsetInMins < 0 || offsetInMins == 0) {
- mReminderItem->setContentWidgetData("currentIndex", 1);
+ mReminderItem->setContentWidgetData("currentIndex", ReminderOnEventDay);
mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
* 60));
} else if (offsetInMins < numberOfMinutesInADay) {
- mReminderItem->setContentWidgetData("currentIndex", 2);
+ mReminderItem->setContentWidgetData("currentIndex", ReminderOneDayBefore);
mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
* 60));
} else {
- mReminderItem->setContentWidgetData("currentIndex", 3);
+ mReminderItem->setContentWidgetData("currentIndex", ReminderTwoDaysBefore);
offsetInMins %= (24 * 60);
mReminderTimeForAllDay = referenceTime.addSecs(-(offsetInMins
* 60));
@@ -274,14 +274,14 @@
startDateTimeForAllDay(
mCalenEditor->editedEntry()->startTime().date(),
QTime(0, 0, 0));
- if (mReminderItem->contentWidgetData("currentIndex") == 0) {
+ if (mReminderItem->contentWidgetData("currentIndex") == ReminderOff) {
reminder = AgendaAlarm();
- mCustomReminderTimeItem->setEnabled(false);
+ removeReminderTimeField();
} else {
int offset = 0;
- if (mReminderItem->contentWidgetData("currentIndex") == 2) {
+ if (mReminderItem->contentWidgetData("currentIndex") == ReminderOneDayBefore) {
offset = 1;
- } else if (mReminderItem->contentWidgetData("currentIndex") == 3) {
+ } else if (mReminderItem->contentWidgetData("currentIndex") == ReminderTwoDaysBefore) {
offset = 2;
}
if(!mReminderTimeAdded) {
@@ -301,9 +301,9 @@
reminderDateTimeForAllDay.setTime(mReminderTimeForAllDay);
int seconds =
reminderDateTimeForAllDay.secsTo(startDateTimeForAllDay);
- int timeOffest = seconds / 60;
+ int timeOffset = seconds / 60;
mCustomReminderTimeItem->setEnabled(true);
- reminder.setTimeOffset(timeOffest);
+ reminder.setTimeOffset(timeOffset);
reminder.setAlarmSoundName(QString(" "));
}
}
@@ -383,16 +383,48 @@
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);
- mReminderItem->setEnabled(false);
- removeReminderTimeField();
+ mReminderItem->setEnabled(false);
+ // Remove the reminder field if it was added
+ if(mReminderTimeAdded) {
+ removeReminderTimeField();
+ }
} else if (theDayAfterTomorrow < referenceDate ||
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")
@@ -400,18 +432,67 @@
<< hbTrId("txt_calendar_setlabel_reminder_val_2_days_before");
mReminderItem->setEnabled(true);
mCustomReminderTimeItem->setEnabled(true);
- } else {
+ mReminderItem->setContentWidgetData(QString("items"),
+ 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"),
+ reminderChoicesForAllDay);
+ }else {
+ // If the event is on a future date which is one day after the current date
+ // 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");
mReminderItem->setEnabled(true);
mCustomReminderTimeItem->setEnabled(true);
+ mReminderItem->setContentWidgetData(QString("items"),
+ reminderChoicesForAllDay);
}
- if (mReminderItem->isEnabled()) {
- mReminderItem->setContentWidgetData(QString("items"),
- reminderChoicesForAllDay);
+ // Set the proper index based on the validity of the previous index
+ 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);
+ // Get the alarm time from the offset
+ QTime alarmTime = refDateTime.time();
+ // Set the alarm time and display it on the button
+ mReminderTimeForAllDay.setHMS(
+ alarmTime.hour(),alarmTime.minute(),alarmTime.second());
+ setDisplayTime();
+ }
+ }else {
+ // Enters this condition if the previous index set is not valid or
+ // the index is ReminderOff
+ mReminderItem->setContentWidgetData("currentIndex", ReminderOff);
}
+
OstTraceFunctionExit0( CALENEDITORREMINDERFIELD_UPDATEREMINDERCHOICESFORALLDAY_EXIT );
}
@@ -485,18 +566,27 @@
void CalenEditorReminderField::launchReminderTimePicker()
{
OstTraceFunctionEntry0( CALENEDITORREMINDERFIELD_LAUNCHREMINDERTIMEPICKER_ENTRY );
- mTimePicker = new HbDateTimePicker(mReminderTimeForAllDay);
- mTimePicker->setTime(mReminderTimeForAllDay);
+
HbDialog *popUp = new HbDialog();
popUp->setDismissPolicy(HbDialog::NoDismiss);
popUp->setTimeout(HbDialog::NoTimeout);
- popUp->setContentWidget(mTimePicker);
+ popUp->setAttribute( Qt::WA_DeleteOnClose, true );
popUp->setHeadingWidget( new HbLabel(
- hbTrId("Reminder Time")));
- HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"));
+ hbTrId("Reminder Time")));
+
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ mTimePicker = new HbDateTimePicker(mReminderTimeForAllDay);
+ if(locale.timeStyle() == HbExtendedLocale::Time12) {
+ mTimePicker->setDisplayFormat("hh:mm ap");
+ }else {
+ mTimePicker->setDisplayFormat("hh:mm");
+ }
+ mTimePicker->setTime(mReminderTimeForAllDay);
+ popUp->setContentWidget(mTimePicker);
+
+ HbAction *okAction = new HbAction(hbTrId("txt_common_button_ok"), popUp);
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();