calendarui/caleneditor/src/caleneditorrepeatfield.cpp
changeset 68 a5a1242fd2e8
parent 58 ef813d54df51
child 77 b0711afde476
--- a/calendarui/caleneditor/src/caleneditorrepeatfield.cpp	Wed Aug 18 09:47:38 2010 +0300
+++ b/calendarui/caleneditor/src/caleneditorrepeatfield.cpp	Thu Sep 02 20:25:23 2010 +0300
@@ -32,6 +32,7 @@
 // User Included
 #include "caleneditorrepeatfield.h"
 #include "caleneditorcustomitem.h"
+#include "caleneditorreminderfield.h"
 #include "calendateutils.h"
 #include "OstTraceDefinitions.h"
 #ifdef OST_TRACE_COMPILER_IN_USE
@@ -290,102 +291,108 @@
 		repeatPropertyChange = false;
 	}
 	QDate repeatUntilDate = mRepeatUntilDate;
-
-	if (value != mRepeatRoleValue)
-	{
-	    mRepeatRoleValue = value;
-	    switch (value) {
-		case DailyRole: {
-			if (!mRepeatUntilItemAdded) {
-				insertRepeatUntilItem();
+	// Update the repeat type only if its has been changed
+	// ie. if the previous repeatrole is different from the current repeat role
+	if (value != mRepeatRoleValue) {
+		mRepeatRoleValue = value;
+		switch (value) {
+			case DailyRole: {
+				if (!mRepeatUntilItemAdded) {
+					insertRepeatUntilItem();
+				}
+				if (mCustomRepeatUntilItem) {
+					// Show default repeat until date till one year for daily rule 
+					mRepeatUntilDate = 
+						mCalenEditor->editedEntry()->startTime().date().addYears(1);
+					mCustomRepeatUntilItem->setContentWidgetData( "text", 
+						locale.format( 
+								mRepeatUntilDate, r_qtn_date_usual_with_zero));
+				}
+				mRepeatRuleType = AgendaRepeatRule::DailyRule;
 			}
-			if (mCustomRepeatUntilItem) {
-				// Show default repeat until date till one year for daily rule 
-				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
-				mCustomRepeatUntilItem->setContentWidgetData( "text", 
-												locale.format( mRepeatUntilDate,
-												r_qtn_date_usual_with_zero));
+			break;
+			case WorkdaysRole: {
+				if (!mRepeatUntilItemAdded) {
+					insertRepeatUntilItem();
+				}
+				if (mCustomRepeatUntilItem) {
+					// Show default repeat until date till one year for workdays rule
+					mRepeatUntilDate = 
+						mCalenEditor->editedEntry()->startTime().date().addYears(1);
+					mCustomRepeatUntilItem->setContentWidgetData( "text",
+						locale.format( 
+								mRepeatUntilDate, r_qtn_date_usual_with_zero));
+				}
+				mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
+				mIsWorkdays = true;
 			}
-			mRepeatRuleType = AgendaRepeatRule::DailyRule;
-		}
-		break;
-		case WorkdaysRole: {
-			if (!mRepeatUntilItemAdded) {
-				insertRepeatUntilItem();
+			break;
+			case WeeklyRole: {
+				if (!mRepeatUntilItemAdded) {
+					insertRepeatUntilItem();
+				}
+				if (mCustomRepeatUntilItem) {
+					// Show default repeat until date till one year for weekly rule
+					mRepeatUntilDate = 
+						mCalenEditor->editedEntry()->startTime().date().addYears(1);
+					mCustomRepeatUntilItem->setContentWidgetData( "text",
+						locale.format( 
+								mRepeatUntilDate, r_qtn_date_usual_with_zero));
+				}
+				mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
 			}
-			if (mCustomRepeatUntilItem) {
-				// Show default repeat until date till one year for workdays rule
-				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
-				mCustomRepeatUntilItem->setContentWidgetData( "text",
-												locale.format( mRepeatUntilDate,
-												r_qtn_date_usual_with_zero));
+			break;
+			case BiWeeklyRole: {
+				if (!mRepeatUntilItemAdded) {
+					insertRepeatUntilItem();
+				}
+				if (mCustomRepeatUntilItem) {
+					// Show default repeat until date till one year for bi-weekly rule
+					mRepeatUntilDate = 
+						mCalenEditor->editedEntry()->startTime().date().addYears(1);
+					mCustomRepeatUntilItem->setContentWidgetData( "text",
+						locale.format( 
+							mRepeatUntilDate, r_qtn_date_usual_with_zero));
+				}
+				mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
+				mIsBiWeekly = true;
 			}
-			mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
-			mIsWorkdays = true;
-		}
-		break;
-		case WeeklyRole: {
-			if (!mRepeatUntilItemAdded) {
-				insertRepeatUntilItem();
+			break;
+			case MonthlyRole: {
+				if (!mRepeatUntilItemAdded) {
+					insertRepeatUntilItem();
+				}
+				if (mCustomRepeatUntilItem) {
+					// Show default repeat until date till one year for monthly rule
+					mRepeatUntilDate = 
+						mCalenEditor->editedEntry()->startTime().date().addYears(1);
+					mCustomRepeatUntilItem->setContentWidgetData( "text",
+						locale.format(
+								mRepeatUntilDate, r_qtn_date_usual_with_zero));
+				}
+				mRepeatRuleType = AgendaRepeatRule::MonthlyRule;
 			}
-			if (mCustomRepeatUntilItem) {
-				// Show default repeat until date till one year for weekly rule
-				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
-				mCustomRepeatUntilItem->setContentWidgetData( "text",
-												locale.format( mRepeatUntilDate,
-												r_qtn_date_usual_with_zero));
+			break;
+			case YearlyRole: {
+				if (!mRepeatUntilItemAdded) {
+					insertRepeatUntilItem();
+				}
+				if (mCustomRepeatUntilItem) {
+					// Show default repeat until date till ten years for yearly rule
+					mRepeatUntilDate = 
+						mCalenEditor->editedEntry()->startTime().date().addYears(10);
+					mCustomRepeatUntilItem->setContentWidgetData( "text",
+						locale.format(
+							mRepeatUntilDate, r_qtn_date_usual_with_zero));
+				}
+				mRepeatRuleType = AgendaRepeatRule::YearlyRule;
 			}
-			mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
+			break;
+			default: {
+				removeRepeatUntilItem();
+			}
+			break;
 		}
-		break;
-		case BiWeeklyRole: {
-			if (!mRepeatUntilItemAdded) {
-				insertRepeatUntilItem();
-			}
-			if (mCustomRepeatUntilItem) {
-				// Show default repeat until date till one year for bi-weekly rule
-				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
-				mCustomRepeatUntilItem->setContentWidgetData( "text",
-												locale.format( mRepeatUntilDate,
-												r_qtn_date_usual_with_zero));
-			}
-			mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
-			mIsBiWeekly = true;
-		}
-		break;
-		case MonthlyRole: {
-			if (!mRepeatUntilItemAdded) {
-				insertRepeatUntilItem();
-			}
-			if (mCustomRepeatUntilItem) {
-				// Show default repeat until date till one year for monthly rule
-				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
-				mCustomRepeatUntilItem->setContentWidgetData( "text",
-												locale.format( mRepeatUntilDate,
-												r_qtn_date_usual_with_zero));
-			}
-			mRepeatRuleType = AgendaRepeatRule::MonthlyRule;
-		}
-		break;
-		case YearlyRole: {
-			if (!mRepeatUntilItemAdded) {
-				insertRepeatUntilItem();
-			}
-			if (mCustomRepeatUntilItem) {
-				// Show default repeat until date till ten years for yearly rule
-				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(10);
-				mCustomRepeatUntilItem->setContentWidgetData( "text",
-												locale.format( mRepeatUntilDate,
-												r_qtn_date_usual_with_zero));
-			}
-			mRepeatRuleType = AgendaRepeatRule::YearlyRule;
-		}
-		break;
-		default: {
-			removeRepeatUntilItem();
-		}
-		break;
-	}
 	}
 	if(!mCalenEditor->isNewEntry()) {
 		mCalenEditor->addDiscardAction();
@@ -394,6 +401,18 @@
 	// the reminder choices are updated 
 	if(repeatPropertyChange || repeatUntilDate != mRepeatUntilDate) {
 		mCalenEditor->updateReminderChoices();
+		// Once the entry is changed from  non repeating to repeating 
+		// and if the alarm set is off 
+		// Then change the reminder option to the default 'one day before' 
+		// if the option is valid
+		if (mCalenEditor->isAllDayEvent() && 
+					repeatPropertyChange && mRepeatUntilItemAdded) {
+			if(!mCalenEditor->isReminderTimeForAllDayAdded() &&
+					mCalenEditor->getReminderCount() >= 3) {
+				mCalenEditor->setCurrentIndexOfReminderField(
+							CalenEditorReminderField::ReminderOneDayBefore);
+			}
+		}
 	}
 	OstTraceFunctionExit0( CALENEDITORREPEATFIELD_HANDLEREPEATINDEXCHANGED_EXIT );
 }
@@ -517,6 +536,8 @@
 void CalenEditorRepeatField::setRepeatUntilDate()
 {
 	OstTraceFunctionEntry0( CALENEDITORREPEATFIELD_SETREPEATUNTILDATE_ENTRY );
+	//Get the previous date which was set
+	QDate previousDate = mRepeatUntilDate;
 	mRepeatUntilDate = mDatePicker->date();
 	if (mRepeatUntilDate.isValid()) {
 		HbExtendedLocale locale = HbExtendedLocale::system();
@@ -525,6 +546,18 @@
 		mCustomRepeatUntilItem->setContentWidgetData("text", dateString);
 	}
 	mCalenEditor->updateReminderChoices();
+	// If the entry's  repeatuntil date is changed from past to a future date
+	// And if the alarm set set is off 
+	// Then change the reminder option to the default 'one day before' 
+	// if the option is valid
+	if (mCalenEditor->isAllDayEvent() && previousDate <= QDate::currentDate()) {
+		if(mRepeatUntilDate > QDate::currentDate() && 
+							!mCalenEditor->isReminderTimeForAllDayAdded() &&
+							 mCalenEditor->getReminderCount() >= 3) {
+			mCalenEditor->setCurrentIndexOfReminderField(
+							CalenEditorReminderField::ReminderOneDayBefore);
+		}
+	}
 	OstTraceFunctionExit0( CALENEDITORREPEATFIELD_SETREPEATUNTILDATE_EXIT );
 }
 
@@ -668,8 +701,17 @@
 	//Connecting back the slot for repeat index change before setting index.
 	connect(mRepeatComboBox, SIGNAL(currentIndexChanged(int)), this,
 				SLOT(handleRepeatIndexChanged(int)));
+	// By default the repeat combobox index will be 0
 	// Set the previous user's choice
 	mRepeatComboBox->setCurrentIndex(choice);
+	// If the previous user's choice is also zero, then slot 
+	// handleRepeatIndexChanged will not be called as 
+	// there is no change in current index
+	// So explicitly call updateReminderChoices to update the reminder choices
+	// for choice : 0 (Not repeated)
+	if(choice == 0) {
+		mCalenEditor->updateReminderChoices();
+	}
 	OstTraceFunctionExit0( DUP1_CALENEDITORREPEATFIELD_UPDATEREPEATCHOICES_EXIT );
 }