calendarui/caleneditor/src/caleneditorrepeatfield.cpp
changeset 68 a5a1242fd2e8
parent 58 ef813d54df51
child 77 b0711afde476
equal deleted inserted replaced
58:ef813d54df51 68:a5a1242fd2e8
    30 #include <agendautil.h>
    30 #include <agendautil.h>
    31 
    31 
    32 // User Included
    32 // User Included
    33 #include "caleneditorrepeatfield.h"
    33 #include "caleneditorrepeatfield.h"
    34 #include "caleneditorcustomitem.h"
    34 #include "caleneditorcustomitem.h"
       
    35 #include "caleneditorreminderfield.h"
    35 #include "calendateutils.h"
    36 #include "calendateutils.h"
    36 #include "OstTraceDefinitions.h"
    37 #include "OstTraceDefinitions.h"
    37 #ifdef OST_TRACE_COMPILER_IN_USE
    38 #ifdef OST_TRACE_COMPILER_IN_USE
    38 #include "caleneditorrepeatfieldTraces.h"
    39 #include "caleneditorrepeatfieldTraces.h"
    39 #endif
    40 #endif
   288 	}else {
   289 	}else {
   289 		// No change in repeat value
   290 		// No change in repeat value
   290 		repeatPropertyChange = false;
   291 		repeatPropertyChange = false;
   291 	}
   292 	}
   292 	QDate repeatUntilDate = mRepeatUntilDate;
   293 	QDate repeatUntilDate = mRepeatUntilDate;
   293 
   294 	// Update the repeat type only if its has been changed
   294 	if (value != mRepeatRoleValue)
   295 	// ie. if the previous repeatrole is different from the current repeat role
   295 	{
   296 	if (value != mRepeatRoleValue) {
   296 	    mRepeatRoleValue = value;
   297 		mRepeatRoleValue = value;
   297 	    switch (value) {
   298 		switch (value) {
   298 		case DailyRole: {
   299 			case DailyRole: {
   299 			if (!mRepeatUntilItemAdded) {
   300 				if (!mRepeatUntilItemAdded) {
   300 				insertRepeatUntilItem();
   301 					insertRepeatUntilItem();
   301 			}
   302 				}
   302 			if (mCustomRepeatUntilItem) {
   303 				if (mCustomRepeatUntilItem) {
   303 				// Show default repeat until date till one year for daily rule 
   304 					// Show default repeat until date till one year for daily rule 
   304 				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
   305 					mRepeatUntilDate = 
   305 				mCustomRepeatUntilItem->setContentWidgetData( "text", 
   306 						mCalenEditor->editedEntry()->startTime().date().addYears(1);
   306 												locale.format( mRepeatUntilDate,
   307 					mCustomRepeatUntilItem->setContentWidgetData( "text", 
   307 												r_qtn_date_usual_with_zero));
   308 						locale.format( 
   308 			}
   309 								mRepeatUntilDate, r_qtn_date_usual_with_zero));
   309 			mRepeatRuleType = AgendaRepeatRule::DailyRule;
   310 				}
       
   311 				mRepeatRuleType = AgendaRepeatRule::DailyRule;
       
   312 			}
       
   313 			break;
       
   314 			case WorkdaysRole: {
       
   315 				if (!mRepeatUntilItemAdded) {
       
   316 					insertRepeatUntilItem();
       
   317 				}
       
   318 				if (mCustomRepeatUntilItem) {
       
   319 					// Show default repeat until date till one year for workdays rule
       
   320 					mRepeatUntilDate = 
       
   321 						mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   322 					mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   323 						locale.format( 
       
   324 								mRepeatUntilDate, r_qtn_date_usual_with_zero));
       
   325 				}
       
   326 				mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
       
   327 				mIsWorkdays = true;
       
   328 			}
       
   329 			break;
       
   330 			case WeeklyRole: {
       
   331 				if (!mRepeatUntilItemAdded) {
       
   332 					insertRepeatUntilItem();
       
   333 				}
       
   334 				if (mCustomRepeatUntilItem) {
       
   335 					// Show default repeat until date till one year for weekly rule
       
   336 					mRepeatUntilDate = 
       
   337 						mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   338 					mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   339 						locale.format( 
       
   340 								mRepeatUntilDate, r_qtn_date_usual_with_zero));
       
   341 				}
       
   342 				mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
       
   343 			}
       
   344 			break;
       
   345 			case BiWeeklyRole: {
       
   346 				if (!mRepeatUntilItemAdded) {
       
   347 					insertRepeatUntilItem();
       
   348 				}
       
   349 				if (mCustomRepeatUntilItem) {
       
   350 					// Show default repeat until date till one year for bi-weekly rule
       
   351 					mRepeatUntilDate = 
       
   352 						mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   353 					mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   354 						locale.format( 
       
   355 							mRepeatUntilDate, r_qtn_date_usual_with_zero));
       
   356 				}
       
   357 				mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
       
   358 				mIsBiWeekly = true;
       
   359 			}
       
   360 			break;
       
   361 			case MonthlyRole: {
       
   362 				if (!mRepeatUntilItemAdded) {
       
   363 					insertRepeatUntilItem();
       
   364 				}
       
   365 				if (mCustomRepeatUntilItem) {
       
   366 					// Show default repeat until date till one year for monthly rule
       
   367 					mRepeatUntilDate = 
       
   368 						mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   369 					mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   370 						locale.format(
       
   371 								mRepeatUntilDate, r_qtn_date_usual_with_zero));
       
   372 				}
       
   373 				mRepeatRuleType = AgendaRepeatRule::MonthlyRule;
       
   374 			}
       
   375 			break;
       
   376 			case YearlyRole: {
       
   377 				if (!mRepeatUntilItemAdded) {
       
   378 					insertRepeatUntilItem();
       
   379 				}
       
   380 				if (mCustomRepeatUntilItem) {
       
   381 					// Show default repeat until date till ten years for yearly rule
       
   382 					mRepeatUntilDate = 
       
   383 						mCalenEditor->editedEntry()->startTime().date().addYears(10);
       
   384 					mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   385 						locale.format(
       
   386 							mRepeatUntilDate, r_qtn_date_usual_with_zero));
       
   387 				}
       
   388 				mRepeatRuleType = AgendaRepeatRule::YearlyRule;
       
   389 			}
       
   390 			break;
       
   391 			default: {
       
   392 				removeRepeatUntilItem();
       
   393 			}
       
   394 			break;
   310 		}
   395 		}
   311 		break;
       
   312 		case WorkdaysRole: {
       
   313 			if (!mRepeatUntilItemAdded) {
       
   314 				insertRepeatUntilItem();
       
   315 			}
       
   316 			if (mCustomRepeatUntilItem) {
       
   317 				// Show default repeat until date till one year for workdays rule
       
   318 				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   319 				mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   320 												locale.format( mRepeatUntilDate,
       
   321 												r_qtn_date_usual_with_zero));
       
   322 			}
       
   323 			mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
       
   324 			mIsWorkdays = true;
       
   325 		}
       
   326 		break;
       
   327 		case WeeklyRole: {
       
   328 			if (!mRepeatUntilItemAdded) {
       
   329 				insertRepeatUntilItem();
       
   330 			}
       
   331 			if (mCustomRepeatUntilItem) {
       
   332 				// Show default repeat until date till one year for weekly rule
       
   333 				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   334 				mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   335 												locale.format( mRepeatUntilDate,
       
   336 												r_qtn_date_usual_with_zero));
       
   337 			}
       
   338 			mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
       
   339 		}
       
   340 		break;
       
   341 		case BiWeeklyRole: {
       
   342 			if (!mRepeatUntilItemAdded) {
       
   343 				insertRepeatUntilItem();
       
   344 			}
       
   345 			if (mCustomRepeatUntilItem) {
       
   346 				// Show default repeat until date till one year for bi-weekly rule
       
   347 				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   348 				mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   349 												locale.format( mRepeatUntilDate,
       
   350 												r_qtn_date_usual_with_zero));
       
   351 			}
       
   352 			mRepeatRuleType = AgendaRepeatRule::WeeklyRule;
       
   353 			mIsBiWeekly = true;
       
   354 		}
       
   355 		break;
       
   356 		case MonthlyRole: {
       
   357 			if (!mRepeatUntilItemAdded) {
       
   358 				insertRepeatUntilItem();
       
   359 			}
       
   360 			if (mCustomRepeatUntilItem) {
       
   361 				// Show default repeat until date till one year for monthly rule
       
   362 				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(1);
       
   363 				mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   364 												locale.format( mRepeatUntilDate,
       
   365 												r_qtn_date_usual_with_zero));
       
   366 			}
       
   367 			mRepeatRuleType = AgendaRepeatRule::MonthlyRule;
       
   368 		}
       
   369 		break;
       
   370 		case YearlyRole: {
       
   371 			if (!mRepeatUntilItemAdded) {
       
   372 				insertRepeatUntilItem();
       
   373 			}
       
   374 			if (mCustomRepeatUntilItem) {
       
   375 				// Show default repeat until date till ten years for yearly rule
       
   376 				mRepeatUntilDate = mCalenEditor->editedEntry()->startTime().date().addYears(10);
       
   377 				mCustomRepeatUntilItem->setContentWidgetData( "text",
       
   378 												locale.format( mRepeatUntilDate,
       
   379 												r_qtn_date_usual_with_zero));
       
   380 			}
       
   381 			mRepeatRuleType = AgendaRepeatRule::YearlyRule;
       
   382 		}
       
   383 		break;
       
   384 		default: {
       
   385 			removeRepeatUntilItem();
       
   386 		}
       
   387 		break;
       
   388 	}
       
   389 	}
   396 	}
   390 	if(!mCalenEditor->isNewEntry()) {
   397 	if(!mCalenEditor->isNewEntry()) {
   391 		mCalenEditor->addDiscardAction();
   398 		mCalenEditor->addDiscardAction();
   392 	}
   399 	}
   393 	// Depending on repeatPropertyChange value and the repeatuntil date change 
   400 	// Depending on repeatPropertyChange value and the repeatuntil date change 
   394 	// the reminder choices are updated 
   401 	// the reminder choices are updated 
   395 	if(repeatPropertyChange || repeatUntilDate != mRepeatUntilDate) {
   402 	if(repeatPropertyChange || repeatUntilDate != mRepeatUntilDate) {
   396 		mCalenEditor->updateReminderChoices();
   403 		mCalenEditor->updateReminderChoices();
       
   404 		// Once the entry is changed from  non repeating to repeating 
       
   405 		// and if the alarm set is off 
       
   406 		// Then change the reminder option to the default 'one day before' 
       
   407 		// if the option is valid
       
   408 		if (mCalenEditor->isAllDayEvent() && 
       
   409 					repeatPropertyChange && mRepeatUntilItemAdded) {
       
   410 			if(!mCalenEditor->isReminderTimeForAllDayAdded() &&
       
   411 					mCalenEditor->getReminderCount() >= 3) {
       
   412 				mCalenEditor->setCurrentIndexOfReminderField(
       
   413 							CalenEditorReminderField::ReminderOneDayBefore);
       
   414 			}
       
   415 		}
   397 	}
   416 	}
   398 	OstTraceFunctionExit0( CALENEDITORREPEATFIELD_HANDLEREPEATINDEXCHANGED_EXIT );
   417 	OstTraceFunctionExit0( CALENEDITORREPEATFIELD_HANDLEREPEATINDEXCHANGED_EXIT );
   399 }
   418 }
   400 
   419 
   401 /*!
   420 /*!
   515 	Sets the repeat until date on the repeat until item
   534 	Sets the repeat until date on the repeat until item
   516  */
   535  */
   517 void CalenEditorRepeatField::setRepeatUntilDate()
   536 void CalenEditorRepeatField::setRepeatUntilDate()
   518 {
   537 {
   519 	OstTraceFunctionEntry0( CALENEDITORREPEATFIELD_SETREPEATUNTILDATE_ENTRY );
   538 	OstTraceFunctionEntry0( CALENEDITORREPEATFIELD_SETREPEATUNTILDATE_ENTRY );
       
   539 	//Get the previous date which was set
       
   540 	QDate previousDate = mRepeatUntilDate;
   520 	mRepeatUntilDate = mDatePicker->date();
   541 	mRepeatUntilDate = mDatePicker->date();
   521 	if (mRepeatUntilDate.isValid()) {
   542 	if (mRepeatUntilDate.isValid()) {
   522 		HbExtendedLocale locale = HbExtendedLocale::system();
   543 		HbExtendedLocale locale = HbExtendedLocale::system();
   523 		QString dateString = locale.format(mRepeatUntilDate,
   544 		QString dateString = locale.format(mRepeatUntilDate,
   524 									r_qtn_date_usual_with_zero);
   545 									r_qtn_date_usual_with_zero);
   525 		mCustomRepeatUntilItem->setContentWidgetData("text", dateString);
   546 		mCustomRepeatUntilItem->setContentWidgetData("text", dateString);
   526 	}
   547 	}
   527 	mCalenEditor->updateReminderChoices();
   548 	mCalenEditor->updateReminderChoices();
       
   549 	// If the entry's  repeatuntil date is changed from past to a future date
       
   550 	// And if the alarm set set is off 
       
   551 	// Then change the reminder option to the default 'one day before' 
       
   552 	// if the option is valid
       
   553 	if (mCalenEditor->isAllDayEvent() && previousDate <= QDate::currentDate()) {
       
   554 		if(mRepeatUntilDate > QDate::currentDate() && 
       
   555 							!mCalenEditor->isReminderTimeForAllDayAdded() &&
       
   556 							 mCalenEditor->getReminderCount() >= 3) {
       
   557 			mCalenEditor->setCurrentIndexOfReminderField(
       
   558 							CalenEditorReminderField::ReminderOneDayBefore);
       
   559 		}
       
   560 	}
   528 	OstTraceFunctionExit0( CALENEDITORREPEATFIELD_SETREPEATUNTILDATE_EXIT );
   561 	OstTraceFunctionExit0( CALENEDITORREPEATFIELD_SETREPEATUNTILDATE_EXIT );
   529 }
   562 }
   530 
   563 
   531 /*!
   564 /*!
   532 	Returns the repeatuntildate displayed.
   565 	Returns the repeatuntildate displayed.
   666 	}
   699 	}
   667 	
   700 	
   668 	//Connecting back the slot for repeat index change before setting index.
   701 	//Connecting back the slot for repeat index change before setting index.
   669 	connect(mRepeatComboBox, SIGNAL(currentIndexChanged(int)), this,
   702 	connect(mRepeatComboBox, SIGNAL(currentIndexChanged(int)), this,
   670 				SLOT(handleRepeatIndexChanged(int)));
   703 				SLOT(handleRepeatIndexChanged(int)));
       
   704 	// By default the repeat combobox index will be 0
   671 	// Set the previous user's choice
   705 	// Set the previous user's choice
   672 	mRepeatComboBox->setCurrentIndex(choice);
   706 	mRepeatComboBox->setCurrentIndex(choice);
       
   707 	// If the previous user's choice is also zero, then slot 
       
   708 	// handleRepeatIndexChanged will not be called as 
       
   709 	// there is no change in current index
       
   710 	// So explicitly call updateReminderChoices to update the reminder choices
       
   711 	// for choice : 0 (Not repeated)
       
   712 	if(choice == 0) {
       
   713 		mCalenEditor->updateReminderChoices();
       
   714 	}
   673 	OstTraceFunctionExit0( DUP1_CALENEDITORREPEATFIELD_UPDATEREPEATCHOICES_EXIT );
   715 	OstTraceFunctionExit0( DUP1_CALENEDITORREPEATFIELD_UPDATEREPEATCHOICES_EXIT );
   674 }
   716 }
   675 
   717 
   676 /*!
   718 /*!
   677 	Save RepeatRule to the edited entry
   719 	Save RepeatRule to the edited entry