calendarui/settings/src/calensettings.cpp
branchRCL_3
changeset 65 12af337248b1
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/calendarui/settings/src/calensettings.cpp	Tue Aug 31 15:13:43 2010 +0300
@@ -0,0 +1,388 @@
+/*
+ * Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+ * All rights reserved.
+ * This component and the accompanying materials are made available
+ * under the terms of "Eclipse Public License v1.0"
+ * which accompanies this distribution, and is available
+ * at the URL "http://www.eclipse.org/legal/epl-v10.html".
+ *
+ * Initial Contributors:
+ * Nokia Corporation - initial contribution.
+ *
+ * Contributors:
+ *
+ * Description:
+ *
+ */
+
+#include <QModelIndex>
+#include <hbdataform.h>
+#include <hbdataformmodel.h>
+#include <hbdataformmodelitem.h>
+#include <hbdataformviewitem.h>
+#include <hbabstractbutton.h>
+#include <xqsettingsmanager.h>
+#include <xqsettingskey.h>
+#include <HbExtendedLocale.h>
+
+#include "calensettings.h"
+#include "calenservices.h"
+#include "calendarprivatecrkeys.h"
+
+// Constants
+const int KValueZero( 0 );
+const int KValueOne( 1 );
+
+
+CalenSettings::CalenSettings(MCalenServices& services, HbDataForm *form, QObject *parent)
+:QObject(parent),
+ mServices(services),
+ mSettingsForm(form),
+ mSettingsModel(NULL),
+ mAlarmSnoozeTimeItem(NULL),
+ mShowWeekNumberItem(NULL),		 
+ mShowRegionalInfoItem(NULL),
+ mShowWeekStartOnInfoItem(NULL),
+ mStartOfWeekItem(NULL),
+ mWeekNumberItemAdded(false),
+ mRegionalpluginActive(false)
+{   
+	mSettingsManager = new XQSettingsManager(this);
+	mAlarmSnoozeCenrepKey = new XQSettingsKey(
+			XQSettingsKey::TargetCentralRepository,
+			KCRUidCalendar, KCalendarSnoozeTime);
+	mWeekNumberCenrepKey = new XQSettingsKey(
+			XQSettingsKey::TargetCentralRepository,
+			KCRUidCalendar, KCalendarShowWeekNum);
+	mShowRegionalInfoKey = new XQSettingsKey(
+			XQSettingsKey::TargetCentralRepository,
+			KCRUidCalendar, KCalendarShowRegionalInfo);
+}
+
+/*!
+	Destructor
+ */
+CalenSettings::~CalenSettings()
+{
+	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.
+	if (mSettingsForm->model()) {
+		delete mSettingsForm->model();
+		mSettingsForm->setModel(0);
+		mSettingsModel = 0;
+	}
+
+	// Create a model and set it.
+	mSettingsModel = new HbDataFormModel(mSettingsForm);
+	
+	// Create the alarm snooze choices
+	QStringList alarmSnoozeChoices;
+	alarmSnoozeChoices << hbTrId(
+						"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_reminder_snooze_time")));
+
+	mAlarmSnoozeTimeItem->setContentWidgetData(QString("items"), 
+												alarmSnoozeChoices);
+	mAlarmSnoozeTimeItem->setContentWidgetData(QString("currentIndex"), 0);
+	mSettingsForm->addConnection(mAlarmSnoozeTimeItem, 
+								SIGNAL(currentIndexChanged(int)),
+								this, SLOT(handleAlarmSnoozeTimeChange(int)));
+	mAlarmSnoozeTimeItem->setContentWidgetData("objectName", "alarmSnoozeTime");
+	mSettingsModel->appendDataFormItem(mAlarmSnoozeTimeItem);
+	
+	// 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"));
+	
+	// Get start of week from the locale.
+    HbExtendedLocale locale = HbExtendedLocale::system();
+    mStartOfWeek = locale.startOfWeek();
+	mShowWeekStartOnInfoItem->setContentWidgetData("items", weekdaysList);
+	mShowWeekStartOnInfoItem->setContentWidgetData(
+			"currentIndex", mStartOfWeek);
+	mShowWeekStartOnInfoItem->setContentWidgetData("objectName", "startOfWeek");
+	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(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")));
+	mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"), 
+								QString(hbTrId("txt_calendar_button_yes")));
+	mShowRegionalInfoItem->setContentWidgetData(
+			"objectName", "showRegionalInfo");
+	mSettingsForm->addConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
+								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)
+{
+	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"))) {
+		// User has made it OFF.
+		mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, KValueZero);
+	} else if (!value.compare(hbTrId("txt_calendar_button_yes"))) {
+		// User has made it ON.
+		mSettingsManager->writeItemValue(*mWeekNumberCenrepKey, KValueOne);
+	}
+}
+
+/*!
+	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.
+		mSettingsManager->writeItemValue(*mShowRegionalInfoKey, KValueOne);
+	}
+}
+
+/*!
+	Populates the settings model
+ */
+void CalenSettings::populateSettingList()
+{   
+	// 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")));
+	mShowWeekNumberItem->setContentWidgetData("objectName", "showWeekNumber");
+
+	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