clock/clockmw/clocksettingsutility/src/settingsutility.cpp
changeset 18 c198609911f9
child 26 a949c2543c15
child 45 b6db4fd4947b
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockmw/clocksettingsutility/src/settingsutility.cpp	Fri Apr 16 14:57:40 2010 +0300
@@ -0,0 +1,524 @@
+/*
+ * Copyright (c) 2009-2010 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:   Definition file for the class SettingsUtility
+ *
+ */
+
+// System includes
+#include <e32std.h>
+#include <QTime>
+#include <QDateTime>
+#include <HbGlobal>
+
+// User includes
+#include "settingsutility.h"
+#include "timezoneclient.h"
+#include "clockdatatypes.h"
+
+/*!
+	\class SettingsUtility.
+ */
+
+/*!
+	Default constructor.
+ */
+SettingsUtility::SettingsUtility(QObject *parent)
+:QObject(parent)
+{
+	qDebug("clock: SettingsUtility::SettingsUtility -->");
+
+	mTimeSeparatorList << tr(".") << tr(":");
+	mClockTypeList << tr("Analog") << tr("Digital");
+	mTimeFormatList << hbTrId("txt_clk_setlabel_val_24_hour") << hbTrId("txt_clk_setlabel_val_12_hour");
+	mDateFormatList << hbTrId("txt_clk_setlabel_val_dd_mm_yyyy") << hbTrId("txt_clk_setlabel_val_mm_dd_yyyy") << hbTrId("txt_clk_setlabel_val_yyyy_mm_dd");
+	mDateSeparatorList << tr(".") << tr(":") << tr("/") << tr("-");
+	mAutoUpdateValueList << tr("ON") << tr("OFF");
+	mSnoozeValueList << tr("5 minutes") << tr("15 minutes") << tr(" 30 minutes") << tr("1 hour");
+
+	mTimeZoneClient = new TimezoneClient(this);
+
+	qDebug("clock: SettingsUtility::SettingsUtility <--");
+
+//	mSettingsMamager = new XQSettingsManager(this);
+}
+
+/*!
+	Destructor.
+ */
+SettingsUtility::~SettingsUtility()
+{
+	// Nothing yet.
+}
+
+/*!
+
+ */
+void SettingsUtility::setTime(const QString &time)
+{
+	QTime newTime = QTime::fromString(time, timeFormatString());
+
+	if (newTime.isValid()) {
+		mTimeZoneClient->setDateTime(QDateTime(QDate::currentDate(), newTime));
+	}
+}
+
+/*!
+
+ */
+QString SettingsUtility::time()
+{
+	return QTime::currentTime().toString(timeFormatString());
+}
+
+/*!
+
+ */
+void SettingsUtility::setTimeZone(const QString &timezone)
+{
+	Q_UNUSED(timezone)
+}
+
+/*!
+
+ */
+QString SettingsUtility::timeZone()
+{
+	QStringList dummyList;
+
+	// Get the current zone info.
+	LocationInfo currentZoneInfo = mTimeZoneClient->getCurrentZoneInfoL();
+
+	// Construct the GMT +/- X string.
+	QString gmtOffset(hbTrId("txt_common_common_gmt"));
+
+	int utcOffset = currentZoneInfo.zoneOffset;
+	int offsetInHours (utcOffset/60);
+	int offsetInMinutes (utcOffset%60);
+
+	// Check wether the offset is +ve or -ve.
+	if (0 < utcOffset) {
+		// We have a positive offset. Append the '+' character.
+		gmtOffset += tr("+ ");
+	} else if (0 > utcOffset) {
+		// We have a negative offset. Append the '-' character.
+		gmtOffset += tr("- ");
+		offsetInHours = -offsetInHours;
+	} else {
+		// We dont have an offset. We are at GMT zone.
+	}
+
+	// Append the hour component.
+	gmtOffset += QString::number(offsetInHours);
+
+	// Append the time separator.
+	gmtOffset += mTimeSeparatorList.at(timeSeparator(dummyList));
+
+	// Append the minute component.
+	// If minute component is less less than 10, append a '00'
+	if (0 <= offsetInMinutes && offsetInMinutes < 10) {
+		gmtOffset += tr("00");
+	} else {
+		gmtOffset += QString::number(offsetInMinutes);
+	}
+
+	gmtOffset += tr(" ");
+	// TODO: append city name when more than one cities else country name.
+	gmtOffset += currentZoneInfo.cityName;
+
+	return gmtOffset;
+}
+
+/*!
+
+ */
+void SettingsUtility::setTimeFormat(const QString& format)
+{
+	TLocale locale;
+
+	if (format == mTimeFormatList.at(0)) {
+		locale.SetTimeFormat(ETime24);
+	} else if (format == mTimeFormatList.at(1)) {
+		locale.SetTimeFormat(ETime12);
+	} else {
+		// Nothing to do.
+	}
+	locale.Set();
+}
+
+/*!
+
+ */
+int SettingsUtility::timeFormat(QStringList &format)
+{
+	TLocale locale;
+	int value = -1;
+
+	if (ETime24 == locale.TimeFormat()) {
+		value = 0;
+	} else if (ETime12 == locale.TimeFormat()) {
+		value = 1;
+	}
+
+	format = mTimeFormatList;
+
+	return value;
+}
+
+/*!
+
+ */
+void SettingsUtility::setClockType(const QString &type)
+{
+	TLocale locale;
+
+	if (type == mClockTypeList.at(0)) {
+	    locale.SetClockFormat(EClockAnalog);
+    } else if (type == mClockTypeList.at(1)) {
+	    locale.SetClockFormat(EClockDigital);
+    } else {
+    	// Nothing to do.
+    }
+	locale.Set();
+}
+
+/*!
+
+ */
+int SettingsUtility::clockType(QStringList &list)
+{
+	TLocale locale;
+	int value = -1;
+
+	if (EClockAnalog == locale.ClockFormat()) {
+	    value = 0;
+    } else if (EClockDigital == locale.ClockFormat()){
+    	value = 1;
+    } else {
+    	// Nothing to do.
+    }
+
+	list = mClockTypeList;
+
+	return value;
+}
+
+/*!
+
+ */
+void SettingsUtility::setTimeSeparator(const QString &separator)
+{
+	if (mTimeSeparatorList.contains(separator)) {
+	    TLocale locale;
+
+		locale.SetTimeSeparator(TChar(separator.unicode()->unicode()), 1);
+		locale.SetTimeSeparator(TChar(separator.unicode()->unicode()), 2);
+
+		locale.Set();
+    }
+}
+
+/*!
+
+ */
+int SettingsUtility::timeSeparator(QStringList &list)
+{
+	qDebug() << "clock: SettingsUtility::timeSeparator -->";
+
+	TLocale locale;
+	TChar separatorChar = locale.TimeSeparator(1);
+	int value = -1;
+
+	if (separatorChar == (mTimeSeparatorList.at(0).unicode())->unicode()) {
+		value = 0;
+	} else if (separatorChar == (mTimeSeparatorList.at(1).unicode())->unicode()) {
+		value = 1;
+	} else {
+		// Nothing to do.
+	}
+
+	list = mTimeSeparatorList;
+
+	qDebug() << "clock: SettingsUtility::timeSeparator <--";
+
+	return value;
+}
+
+/*!
+
+ */
+void SettingsUtility::setAutoUpdate(const QString &value)
+{
+	// TODO: implement the changes after server is in place.
+	// 1. Inform the server about the setting.
+	// 2. Get the status of the change from server
+	// 3. Emit the signal to inform the clients of the change in the settings item,
+	// pass the enum of settings item changed and the updated value.
+
+	if (0 == value.compare(tr("ON"), Qt::CaseInsensitive)) {
+		mTimeZoneClient->setTimeUpdateOn(true);
+    } else {
+    	mTimeZoneClient->setTimeUpdateOn(false);
+    }
+
+	emit settingsChanged(AutoTimeUpdate, value);
+}
+
+/*!
+
+ */
+int SettingsUtility::autoUpdate(QStringList &list)
+{
+	// TODO: implement properly. this is jst a dummy implementation.
+	int value = 1;
+
+	bool autoUpdate = mTimeZoneClient->timeUpdateOn();
+
+	if (autoUpdate) {
+	    value = 0;
+    }
+	list = mAutoUpdateValueList;
+	return value;
+}
+
+/*!
+
+ */
+void SettingsUtility::setDate(const QString &date)
+{
+	QDate newDate = QDate::fromString(date, dateFormatString());
+
+	if (newDate.isValid()) {
+		mTimeZoneClient->setDateTime(QDateTime(newDate, QTime::currentTime()));
+    }
+}
+
+/*!
+
+ */
+QString SettingsUtility::date()
+{
+	qDebug() << "clock: SettingsUtility::date -->";
+
+	qDebug() << "clock: SettingsUtility::date <--";
+
+	return QDate::currentDate().toString(dateFormatString());
+}
+
+/*!
+
+ */
+void SettingsUtility::setDateFormat(const QString &format)
+{
+	TLocale locale;
+	int index;
+
+	for (index = 0; index < mDateFormatList.count(); ++index) {
+		if (format == mDateFormatList.at(index)) {
+			break;
+		}
+	}
+
+	switch (index) {
+		case 0:
+			locale.SetDateFormat(EDateEuropean);
+			break;
+		case 1:
+			locale.SetDateFormat(EDateAmerican);
+			break;
+		case 2:
+			locale.SetDateFormat(EDateJapanese);
+			break;
+		default:
+			//Nothing to do.
+			break;
+	}
+
+	locale.Set();
+}
+
+/*!
+
+ */
+int SettingsUtility::dateFormat(QStringList &format)
+{
+	TLocale locale;
+	int index = -1;
+
+	switch (locale.DateFormat()) {
+		case EDateEuropean:
+			index = 0;
+			break;
+		case EDateAmerican:
+			index = 1;
+			break;
+		case EDateJapanese:
+			index = 2;
+			break;
+		default:
+			// Nothing yet.
+			break;
+	}
+
+	format = mDateFormatList;
+
+	return index;
+}
+
+/*!
+
+ */
+void SettingsUtility::setDateSeparator(const QString &separator)
+{
+	TLocale locale;
+	locale.SetDateSeparator(
+			TChar(separator.unicode()->unicode()), 1);
+	locale.SetDateSeparator(
+			TChar(separator.unicode()->unicode()), 2);
+	locale.Set();
+}
+
+/*!
+
+ */
+int SettingsUtility::dateSeparator(QStringList &separator)
+{
+	TLocale locale;
+	TChar separatorChar = locale.DateSeparator(1);
+
+	const int at0 = (mDateSeparatorList.at(0).unicode())->unicode();
+	int at1 = (mDateSeparatorList.at(1).unicode())->unicode();
+	int at2 = (mDateSeparatorList.at(2).unicode())->unicode();
+	int at3 = (mDateSeparatorList.at(3).unicode())->unicode();
+	int value = 0;
+
+	if (separatorChar == (mDateSeparatorList.at(0).unicode())->unicode()) {
+		value = 0;
+	} else if (separatorChar ==
+			(mDateSeparatorList.at(1).unicode())->unicode()) {
+		value = 1;
+	} else if (separatorChar ==
+			(mDateSeparatorList.at(2).unicode())->unicode()) {
+		value = 2;
+	} else if (separatorChar ==
+			(mDateSeparatorList.at(3).unicode())->unicode()) {
+		value = 3;
+	}
+
+	separator = mDateSeparatorList;
+
+	return value;
+}
+
+/*!
+	Sets a new list of workdays.
+
+	\param workdays The new list of workdays selected.
+ */
+void SettingsUtility::setWorkdays(const QString &workdays)
+{
+	Q_UNUSED(workdays)
+}
+
+/*!
+	Returns the workdays list selected by the user.
+
+	\param workdaysList A string list of workdays selected in the locale.
+	\return int Index of the item selected.
+ */
+int SettingsUtility::workdays(QStringList &workdaysList)
+{
+	Q_UNUSED(workdaysList)
+
+	return 0;
+}
+
+/*!
+	Returns a string based on the locale set, to format time.
+
+	\return QString String to be used to format time.
+ */
+QString SettingsUtility::timeFormatString()
+{
+	QString format;
+	TLocale locale;
+	QStringList dummyList;
+
+	if (ETime24 == locale.TimeFormat()) {
+		format = QString("h:mm");
+	} else if (ETime12 == locale.TimeFormat()) {
+		format = QString("h:mm ap");
+	}
+
+	QString separator = mTimeSeparatorList.at(timeSeparator(dummyList));
+
+	format.replace(QString(":"), separator);
+
+	return format;
+}
+
+/*!
+	Returns a string based on the locale set, to format date.
+
+	\return QString String to be used to format date.
+ */
+QString SettingsUtility::dateFormatString()
+{
+	QStringList dummyList;
+	QString format(mDateFormatList.at(dateFormat(dummyList)));
+	QString separator = mDateSeparatorList.at(dateSeparator(dummyList));
+
+	format.replace(QString(" "), separator);
+	format.replace(QString("mm"), QString("MM"));
+
+	return format;
+}
+
+/*!
+	Sets the snooze time value selected by the user.
+
+	\param index The index of the preset snooze time values.
+ */
+void SettingsUtility::setSnoozeTime(int index)
+{
+	Q_UNUSED(index)
+}
+
+/*!
+	Returns a list of default snooze time values.
+
+	\param snoozeValueList A string list of preset values.
+	\return int The index of the item in the list to be focused.
+ */
+int SettingsUtility::snoozeTime(QStringList &snoozeValueList)
+{
+	int index = -1;
+
+	snoozeValueList = mSnoozeValueList;
+	return index;
+}
+
+/*!
+	Sets the start of week value selected by the user.
+
+	\param index The index of the selected value.
+ */
+void SettingsUtility::setStartOfWeek(int index)
+{
+	TLocale locale;
+	TDay day = (TDay)index;
+	locale.SetStartOfWeek(day);
+	locale.Set();
+}
+// End of file	--Don't remove this.