calendarui/settings/src/calensettings.cpp
changeset 45 b6db4fd4947b
parent 23 fd30d51f876b
child 51 0b38fc5b94c6
--- a/calendarui/settings/src/calensettings.cpp	Mon May 03 12:30:32 2010 +0300
+++ b/calendarui/settings/src/calensettings.cpp	Mon Jun 28 15:22:02 2010 +0530
@@ -23,42 +23,67 @@
 #include <hbabstractbutton.h>
 #include <xqsettingsmanager.h>
 #include <xqsettingskey.h>
+#include <HbExtendedLocale.h>
 
 #include "calensettings.h"
-#include <calendarinternalcrkeys.h>  // includes CalendarInternalCRKeys.h
+#include "calenservices.h"
+#include "calendarprivatecrkeys.h"
 
-CalenSettings::CalenSettings(HbDataForm *form, QObject *parent)
+// Constants
+const int KValueZero( 0 );
+const int KValueOne( 1 );
+
+
+CalenSettings::CalenSettings(MCalenServices& services, HbDataForm *form, QObject *parent)
 :QObject(parent),
+ mServices(services),
  mSettingsForm(form),
- mSettingsModel(0),
- mShowRegionalInfoItem(NULL)
+ mSettingsModel(NULL),
+ mAlarmSnoozeTimeItem(NULL),
+ mShowWeekNumberItem(NULL),		 
+ mShowRegionalInfoItem(NULL),
+ mShowWeekStartOnInfoItem(NULL),
+ mStartOfWeekItem(NULL),
+ mWeekNumberItemAdded(false),
+ mRegionalpluginActive(false)
 {   
-    mSettingsManager = new XQSettingsManager(this);
+	mSettingsManager = new XQSettingsManager(this);
 	mAlarmSnoozeCenrepKey = new XQSettingsKey(
-										XQSettingsKey::TargetCentralRepository, 
-										KCRUidCalendar, KCalendarSnoozeTime);
+			XQSettingsKey::TargetCentralRepository,
+			KCRUidCalendar, KCalendarSnoozeTime);
 	mWeekNumberCenrepKey = new XQSettingsKey(
-										XQSettingsKey::TargetCentralRepository, 
-										KCRUidCalendar, KCalendarWeekViewTitle);
-	mShowRegionalInfoKey = new XQSettingsKey(XQSettingsKey::TargetCentralRepository,
-	                                         KCRUidCalendar, KShowRegionalInformation);
-	
-	// Read the initial values from the cenrep
-	QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
-	mAlarmSnoozeTime = value.toUInt();
-	
-	value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
-	mShowWeekNumber = value.toUInt();
-	
-	value = mSettingsManager->readItemValue(*mShowRegionalInfoKey);
-	mShowRegionalInfo = value.toUInt();
+			XQSettingsKey::TargetCentralRepository,
+			KCRUidCalendar, KCalendarShowWeekNum);
+	mShowRegionalInfoKey = new XQSettingsKey(
+			XQSettingsKey::TargetCentralRepository,
+			KCRUidCalendar, KCalendarShowRegionalInfo);
 }
 
+/*!
+	Destructor
+ */
 CalenSettings::~CalenSettings()
 {
-	// Nothing yet.
+	if (mSettingsManager) {
+		delete mSettingsManager;
+	}
+	// Delete the cenrep keys
+	delete mAlarmSnoozeCenrepKey;
+	delete mWeekNumberCenrepKey;
+	delete mShowRegionalInfoKey;
+	
+	if (mSettingsModel) {
+		delete mSettingsModel;		
+	}
+	if (mAlarmSnoozeTimeHash.count()) {
+		// Clear the contents
+		mAlarmSnoozeTimeHash.clear();
+	}
 }
 
+/*!
+	Creates the settings model
+ */
 void CalenSettings::createModel()
 {
 	// Remove the model.
@@ -69,193 +94,289 @@
 	}
 
 	// Create a model and set it.
-	mSettingsModel = new HbDataFormModel();
+	mSettingsModel = new HbDataFormModel(mSettingsForm);
 	
 	// Create the alarm snooze choices
 	QStringList alarmSnoozeChoices;
 	alarmSnoozeChoices << hbTrId(
-						"txt_calendar_setlabel_alarm_snooze_time_val_5_minu")
-				<< hbTrId("txt_calendar_setlabel_alarm_snooze_time_val_10_min")
-				<< hbTrId("txt_calendar_setlabel_alarm_snooze_time_val_15_min")
-				<< hbTrId("txt_calendar_setlabel_alarm_snooze_time_val_30_min");
+						"txt_calendar_setlabel_reminder_snooze_time_val_5_m")
+				<< hbTrId("txt_calendar_setlabel_reminder_snooze_time_val_10")
+				<< hbTrId("txt_calendar_setlabel_reminder_snooze_time_val_15")
+				<< hbTrId("txt_calendar_setlabel_reminder_snooze_time_val_30");
+	// Build the hash map for the alarm snooze time.
+	// The values are five, ten, fifteen and thirty minutes
+	mAlarmSnoozeTimeHash[0] = 5;
+	mAlarmSnoozeTimeHash[1] = 10;
+	mAlarmSnoozeTimeHash[2] = 15;
+	mAlarmSnoozeTimeHash[3] = 30;
 	
 	// Append Alarm Snooze Time Setting item
 	mAlarmSnoozeTimeItem = new HbDataFormModelItem();
 	mAlarmSnoozeTimeItem->setType(HbDataFormModelItem::ComboBoxItem);
 	mAlarmSnoozeTimeItem->setData(HbDataFormModelItem::LabelRole, 
-					QString(hbTrId("txt_calendar_setlabel_alarm_snooze_time")));
+					QString(hbTrId("txt_calendar_setlabel_reminder_snooze_time")));
 
 	mAlarmSnoozeTimeItem->setContentWidgetData(QString("items"), 
-															alarmSnoozeChoices);
+												alarmSnoozeChoices);
 	mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"), 0);
 	mSettingsForm->addConnection(mAlarmSnoozeTimeItem, 
 								SIGNAL(currentIndexChanged(int)),
 								this, SLOT(handleAlarmSnoozeTimeChange(int)));
 	mSettingsModel->appendDataFormItem(mAlarmSnoozeTimeItem);
 	
-	// Append Show Week Number settings item
-	mShowWeekNumberItem = new HbDataFormModelItem();
-	mShowWeekNumberItem->setType(HbDataFormModelItem::ToggleValueItem);
-	QStringList values;
-	values << hbTrId("txt_calendar_button_no")
-            << hbTrId("txt_calendar_button_yes");
-	mShowWeekNumberItem->setData(HbDataFormModelItem::LabelRole, 
-								QString(hbTrId("txt_calendar_setlabel_show_week_numbers")));     
-	
+	// Create the weekday list based on start of week.
+	QStringList weekdaysList;
+	weekdaysList
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_monday")
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_tuesday")
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_wednesday")
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_thursday")
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_friday")
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_saturday")
+			<< hbTrId("txt_calendar_setlabel_week_starts_on_val_sunday");
+	// Start of week item.
+	mShowWeekStartOnInfoItem = mSettingsModel->appendDataFormItem(
+								HbDataFormModelItem::ComboBoxItem, 
+								hbTrId("txt_calendar_setlabel_week_starts_on"));
 	
-	// For HbPushButton type properties -- to be used for toggle value item
-	mShowWeekNumberItem->setContentWidgetData(QString("text"), 
-										QString(hbTrId("txt_calendar_button_no")));
-	mShowWeekNumberItem->setContentWidgetData(QString("additionalText"), 
-										QString(hbTrId("txt_calendar_button_yes")));
-	
-	mSettingsForm->addConnection(mShowWeekNumberItem, SIGNAL(clicked()), 
-	                             this, SLOT(handleWeekNumberChange()));
-	mSettingsModel->appendDataFormItem(mShowWeekNumberItem);
-	
-	// TODO: Append the regional information setting only if any regional plugins have been
-	// loaded by the customisation manager
+	// Get start of week from the locale.
+    HbExtendedLocale locale = HbExtendedLocale::system();
+    mStartOfWeek = locale.startOfWeek();
+	mShowWeekStartOnInfoItem->setContentWidgetData("items", weekdaysList);
+	mShowWeekStartOnInfoItem->setContentWidgetData("currentIndex", mStartOfWeek);
+	mSettingsForm->addConnection(mShowWeekStartOnInfoItem, 
+									SIGNAL(currentIndexChanged(int)),
+									this, SLOT(setStartDayOfWeek(int)));
+	// Add the show week number item in the model
+	addWeekNumberItem();
+
+	if (isPluginEnabled()) {
+		addRegionalInfoItem();
+	}
+}
+
+/*!
+	Adds the regional info item to the model
+ */
+void CalenSettings::addRegionalInfoItem()
+{
+	mRegionalpluginActive = true;
 	mShowRegionalInfoItem = new HbDataFormModelItem();
 	mShowRegionalInfoItem->setType(HbDataFormModelItem::ToggleValueItem);
 	mShowRegionalInfoItem->setData(HbDataFormModelItem::LabelRole, 
-	                               QString("Show regional info"));     
+				QString(hbTrId("txt_calendar_setlabel_show_lunar_calendar")));
 
 	// For HbPushButton type properties -- to be used for toggle value item
 	mShowRegionalInfoItem->setContentWidgetData(QString("text"), 
-	                                            QString(hbTrId("txt_calendar_button_no")));
+								QString(hbTrId("txt_calendar_button_no")));
 	mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"), 
-	                                            QString(hbTrId("txt_calendar_button_yes")));
+								QString(hbTrId("txt_calendar_button_yes")));
 	mSettingsForm->addConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
-	                             this, SLOT(handleRegionalInfoChange()));
+								this, SLOT(handleRegionalInfoChange()));
 	mSettingsModel->appendDataFormItem(mShowRegionalInfoItem);
 }
 
+/*!
+	Removes the regional info item from the model
+ */
+void CalenSettings::removeRegionalInfoItem()
+{
+	mSettingsForm->removeConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
+									this, SLOT(handleRegionalInfoChange()));
+	mSettingsModel->removeItem(mShowRegionalInfoItem);
+	mRegionalpluginActive = false;
+}
+
+/*!
+	Handles the alarm snooze time change
+ */
 void CalenSettings::handleAlarmSnoozeTimeChange(int index)
 {
-switch(index)
-    {
-    case 0:
-        {
-        mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 5);
-        }
-        break;
-    case 1:
-        {
-        mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 10);
-        }
-        break;
-    case 2:
-        {
-        mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 15);
-        }
-        break;
-    case 3:
-        {
-        mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, 30);
-        }
-        break;
-    default:
-        break;
-    }
-QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
-    uint time = value.toUInt();
+	if(mAlarmSnoozeTimeHash.value(index) > KValueZero) {
+		mSettingsManager->writeItemValue(*mAlarmSnoozeCenrepKey, mAlarmSnoozeTimeHash[index]);
+	}
 }
 
+/*!
+	Handles the week number change
+ */
 void CalenSettings::handleWeekNumberChange()
 {
 	QVariant data = mShowWeekNumberItem->contentWidgetData(QString("text"));
 	QString value = data.toString();
-	if(!value.compare(hbTrId("txt_calendar_button_no")))
-	{    
+	if (!value.compare(hbTrId("txt_calendar_button_no"))) {
 		// User has made it OFF.
-		mShowWeekNumber = 0;
-		mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, 0);
+		mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, KValueZero);
+	} else if (!value.compare(hbTrId("txt_calendar_button_yes"))) {
+		// User has made it ON.
+		mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, KValueOne);
 	}
-	else if(!value.compare(hbTrId("txt_calendar_button_yes")))
-	{
+}
+
+/*!
+	Handles the regional info option change
+ */
+void CalenSettings::handleRegionalInfoChange()
+{
+	QVariant data = mShowRegionalInfoItem->contentWidgetData(QString("text"));
+	QString value = data.toString();
+	if (!value.compare(hbTrId("txt_calendar_button_no"))) {
+		// User has made it OFF
+		mSettingsManager->writeItemValue(*mShowRegionalInfoKey, KValueZero);
+	} else if (!value.compare(hbTrId("txt_calendar_button_yes"))) {
 		// User has made it ON.
-		mShowWeekNumber = 1;
-		mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, 1);
+		mSettingsManager->writeItemValue(*mShowRegionalInfoKey, KValueOne);
 	}
 }
 
-void CalenSettings::handleRegionalInfoChange()
-{
-    QVariant data = mShowRegionalInfoItem->contentWidgetData(QString("text"));
-    QString value = data.toString();
-    if(!value.compare(hbTrId("txt_calendar_button_no"))) {    
-        // User has made it OFF
-        mShowRegionalInfo = 0;
-        mSettingsManager->writeItemValue(*mShowRegionalInfoKey, 0);
-    } else if(!value.compare(hbTrId("txt_calendar_button_yes"))) {
-        // User has made it ON.
-        mShowRegionalInfo = 1;
-        mSettingsManager->writeItemValue(*mShowRegionalInfoKey, 1);
-    }
-}
-
+/*!
+	Populates the settings model
+ */
 void CalenSettings::populateSettingList()
 {   
-    // Read the values from cenrep
-    // Read the initial values from the cenrep
-    QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
-    mAlarmSnoozeTime = value.toUInt();
-    
-    value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
-    mShowWeekNumber = value.toUInt();
-    
-    // set the value to the form
-    int choiceIndex = 0;
-    switch(mAlarmSnoozeTime)
-        {
-        case 5:
-            choiceIndex = 0;
-            break;
-        case 10:
-            choiceIndex = 1;
-            break;
-        case 15:
-            choiceIndex = 2;
-            break;
-        case 30:
-            choiceIndex = 3;
-            break;
-        default:
-            choiceIndex = 0;
-            break;
-        }
-    mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"), 
-												choiceIndex);
-    if(mShowWeekNumber)
-        {
-        mShowWeekNumberItem->setContentWidgetData(QString("text"), 
-												QString(hbTrId("txt_calendar_button_yes")));
-        mShowWeekNumberItem->setContentWidgetData(QString("additionalText"), 
-												QString(hbTrId("txt_calendar_button_no")));
-        }
-    else
-        {
-        mShowWeekNumberItem->setContentWidgetData(QString("text"), 
-												QString(hbTrId("txt_calendar_button_no")));
-        mShowWeekNumberItem->setContentWidgetData(QString("additionalText"), 
-												QString(hbTrId("txt_calendar_button_yes")));
-        }
-    
-    value = mSettingsManager->readItemValue(*mShowRegionalInfoKey);
-    mShowRegionalInfo = value.toUInt();
-    
-    if (mShowRegionalInfo) {
-        mShowRegionalInfoItem->setContentWidgetData(QString("text"), 
-                                                    QString(hbTrId("txt_calendar_button_yes")));
-        mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"), 
-                                                  QString(hbTrId("txt_calendar_button_no")));
-    } else {
-        mShowRegionalInfoItem->setContentWidgetData(QString("text"), 
-                                                    QString(hbTrId("txt_calendar_button_no")));
-        mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"), 
-                                                    QString(hbTrId("txt_calendar_button_yes")));
-    }
-    
-    mSettingsForm->setModel(mSettingsModel);
+	// Read the values from cenrep
+	// Read the initial values from the cenrep
+	QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
+	uint alarmSnoozeTime = value.toUInt();
+
+	// Get the value from the hash and set the value to the form
+	int choiceIndex = mAlarmSnoozeTimeHash.key(alarmSnoozeTime);
+	mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"), 
+														choiceIndex);
+	// Get start of week from the locale.
+	HbExtendedLocale locale = HbExtendedLocale::system();
+	mStartOfWeek = locale.startOfWeek();
+
+	mShowWeekStartOnInfoItem->setContentWidgetData("currentIndex", mStartOfWeek);
+	//update the show week number option
+	updateShowWeekItem();
+	// Check the the regional info plugin is loaded now or not
+	if (isPluginEnabled()) {
+		// If the plugin was already there just populate the item
+		// else add the regional info item and then populate
+		if (mRegionalpluginActive) {
+			populateRegionalInfo();
+		}else {
+			addRegionalInfoItem();
+			populateRegionalInfo();
+		}
+	}else {
+		// If the plugin is removed now and if it was loaded before
+		// remove the item
+		if (mRegionalpluginActive) {
+			removeRegionalInfoItem();
+		}
+	}
+	mSettingsForm->setModel(mSettingsModel);
+}
+
+/*!
+	Populates the regional info item
+ */
+void CalenSettings::populateRegionalInfo()
+{
+	QVariant value  = mSettingsManager->readItemValue(*mShowRegionalInfoKey);
+	uint showRegionalInfo = value.toUInt();
+
+	if (showRegionalInfo) {
+		mShowRegionalInfoItem->setContentWidgetData(
+				QString("text"), QString(hbTrId("txt_calendar_button_yes")));
+		mShowRegionalInfoItem->setContentWidgetData(
+				QString("additionalText"), QString(
+						hbTrId("txt_calendar_button_no")));
+	} else {
+		mShowRegionalInfoItem->setContentWidgetData(
+				QString("text"), QString(hbTrId("txt_calendar_button_no")));
+		mShowRegionalInfoItem->setContentWidgetData(
+				QString("additionalText"), QString(
+						hbTrId("txt_calendar_button_yes")));
+	}
+}
+
+/*!
+	Adds the week number item in the model
+ */
+void CalenSettings::addWeekNumberItem()
+{
+	mWeekNumberItemAdded = true;
+	// Append Show Week Number settings item
+	mShowWeekNumberItem = new HbDataFormModelItem();
+	mShowWeekNumberItem->setType(HbDataFormModelItem::ToggleValueItem);
+
+	QStringList values;
+	values << hbTrId("txt_calendar_button_no")
+			<< hbTrId("txt_calendar_button_yes");
+	mShowWeekNumberItem->setData(HbDataFormModelItem::LabelRole, 
+					QString(hbTrId("txt_calendar_setlabel_show_week_numbers")));
+
+	mSettingsModel->appendDataFormItem(mShowWeekNumberItem);
+	mSettingsForm->addConnection(mShowWeekNumberItem, SIGNAL(clicked()), 
+									this, SLOT(handleWeekNumberChange()));
+}
+
+/*!
+	Returns true if the regional plugin is loaded
+ */
+bool CalenSettings::isPluginEnabled()
+{
+	QString *pluginInfo = mServices.InfobarTextL();
+	if (!pluginInfo) {
+		return false;
+	} else {
+		return true;
+	}
+}
+
+/*!
+	Sets the start day of the week to the locale
+	Is called when user selects week day
+ */
+void CalenSettings::setStartDayOfWeek(const int index)
+{
+	TLocale locale;
+	TDay day = (TDay)index;
+	//set the start day of the week to locale
+	locale.SetStartOfWeek(day);
+	locale.Set();
+	updateShowWeekItem();
+}
+
+/*!
+	Updates the show  week number option
+ */
+void CalenSettings::updateShowWeekItem()
+{
+	// Get start of week from the locale.
+	HbExtendedLocale locale = HbExtendedLocale::system();
+	mStartOfWeek = locale.startOfWeek();
+	mShowWeekStartOnInfoItem->setContentWidgetData("currentIndex", mStartOfWeek);
+
+	// Read the value form cenrep
+	QVariant value = mSettingsManager->readItemValue(*mWeekNumberCenrepKey);
+	uint showWeekNumber = value.toUInt();
+
+	//if start day is not Monday
+	//set the show week number option dimmed ,
+	//else set to proper status
+	if(mStartOfWeek != HbExtendedLocale::Monday) {
+		mShowWeekNumberItem->setContentWidgetData(QString("text"), 
+									QString(hbTrId("txt_calendar_button_no")));
+		mShowWeekNumberItem->setContentWidgetData(QString("additionalText"), 
+									QString(hbTrId("txt_calendar_button_yes")));
+		mShowWeekNumberItem->setEnabled(false);
+	} else {
+		if(showWeekNumber) {
+			mShowWeekNumberItem->setContentWidgetData(QString("text"), 
+									QString(hbTrId("txt_calendar_button_yes")));
+			mShowWeekNumberItem->setContentWidgetData(QString("additionalText"), 
+									QString(hbTrId("txt_calendar_button_no")));
+		} else {
+			mShowWeekNumberItem->setContentWidgetData(QString("text"), 
+									QString(hbTrId("txt_calendar_button_no")));
+			mShowWeekNumberItem->setContentWidgetData(QString("additionalText"),
+									QString(hbTrId("txt_calendar_button_yes")));
+		}
+		mShowWeekNumberItem->setEnabled(true);
+	}
 }
 // End of file