calendarui/caleneditor/src/caleneditorrepeatfield.cpp
changeset 45 b6db4fd4947b
parent 23 fd30d51f876b
child 51 0b38fc5b94c6
--- 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);
 }
 
 /*!