--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/clock/clockui/clocksettingsview/src/settingscustomitem.cpp Tue Aug 31 15:13:43 2010 +0300
@@ -0,0 +1,487 @@
+/*
+* 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:
+* Definition file for class ClockSettingsView.
+*
+*/
+
+// System includes
+#include <QGraphicsLinearLayout>
+#include <QItemSelectionModel>
+#include <HbDataFormModelItem>
+#include <HbDataFormModel>
+#include <HbPushButton>
+#include <HbLabel>
+#include <HbDateTimePicker>
+#include <HbAction>
+#include <HbListWidget>
+#include <HbExtendedLocale>
+#include <HbListWidgetItem>
+#include <HbStyleLoader>
+
+// User includes
+#include "settingscustomitem.h"
+#include "settingsdatatypes.h"
+#include "settingsutility.h"
+#include "clockcityselectionlist.h"
+#include "timezoneclient.h"
+#include "clockregionalsettingsview.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "settingscustomitemTraces.h"
+#endif
+
+
+/*!
+ \class SettingsCustomItem
+
+ This class is responsible for creating custom items for clock settings.
+ */
+
+/*!
+ Default Constructor.
+
+ \param parent The parent.
+ */
+
+SettingsCustomItem::SettingsCustomItem(QGraphicsItem *parent, bool launchedByClock)
+:HbDataFormViewItem(parent), mLaunchedByClock(launchedByClock)
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_SETTINGSCUSTOMITEM_ENTRY );
+ // Construct the settignsutility.
+ mSettingsUtility = new SettingsUtility();
+ // Construct the timezone client.
+ mTimezoneClient = TimezoneClient::getInstance();
+ // Register for the css.
+ HbStyleLoader::registerFilePath(":/style/settingscustomitem.css");
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_SETTINGSCUSTOMITEM_EXIT );
+}
+
+/*!
+ Destructor.
+ */
+SettingsCustomItem::~SettingsCustomItem()
+{
+ OstTraceFunctionEntry0( DUP1_SETTINGSCUSTOMITEM_SETTINGSCUSTOMITEM_ENTRY );
+ // Unregister the css.
+ HbStyleLoader::unregisterFilePath(":/style/settingscustomitem.css");
+ OstTraceFunctionExit0( DUP1_SETTINGSCUSTOMITEM_SETTINGSCUSTOMITEM_EXIT );
+}
+
+/*!
+ \reimp
+ Creates SettingsCustomItem.
+ */
+HbAbstractViewItem* SettingsCustomItem::createItem()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_CREATEITEM_ENTRY );
+ return new SettingsCustomItem(*this);
+}
+
+/*!
+
+ \sa
+ */
+bool SettingsCustomItem::canSetModelIndex(const QModelIndex &index) const
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_CANSETMODELINDEX_ENTRY );
+ HbDataFormModelItem::DataItemType itemType =
+ static_cast<HbDataFormModelItem::DataItemType>(
+ index.data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ if(itemType >= HbDataFormModelItem::CustomItemBase &&
+ itemType <= (HbDataFormModelItem::CustomItemBase + 50)) {
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_CANSETMODELINDEX_EXIT );
+ return true;
+ } else {
+ OstTraceFunctionExit0( DUP1_SETTINGSCUSTOMITEM_CANSETMODELINDEX_EXIT );
+ return false;
+ }
+
+}
+
+void SettingsCustomItem::restore()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_RESTORE_ENTRY );
+ HbDataFormModelItem::DataItemType itemType =
+ static_cast<HbDataFormModelItem::DataItemType>(
+ modelIndex().data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ HbDataFormModel* model =
+ static_cast<HbDataFormModel*>(
+ static_cast<HbAbstractViewItem*>(this)->itemView()->model());
+ HbDataFormModelItem* modlItem = model->itemFromIndex(modelIndex());
+
+ switch (itemType) {
+ case (TimeItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ mTimeWidget->setProperty(
+ "text", modlItem->contentWidgetData("text"));
+ mTimeWidget->setProperty(
+ "objectName", modlItem->contentWidgetData("objectName"));
+ break;
+ }
+ case (DateItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ mDateWidget->setProperty(
+ "text", modlItem->contentWidgetData("text"));
+ mDateWidget->setProperty(
+ "objectName", modlItem->contentWidgetData("objectName"));
+ break;
+ }
+ case (PlaceItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ mPlaceWidget->setProperty(
+ "text", modlItem->contentWidgetData("text"));
+ mPlaceWidget->setProperty(
+ "objectName", modlItem->contentWidgetData("objectName"));
+ break;
+ }
+ case (RegionalItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ mRegSettingsWidget->setProperty(
+ "text", modlItem->contentWidgetData("text"));
+ mRegSettingsWidget->setProperty(
+ "objectName", modlItem->contentWidgetData("objectName"));
+ break;
+ }
+ case (50 + HbDataFormModelItem::CustomItemBase):
+ {
+ mWorkdaysWidget->setProperty(
+ "objectName", modlItem->contentWidgetData("objectName"));
+ break;
+ }
+ default:
+ break;
+ }
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_RESTORE_EXIT );
+}
+
+void SettingsCustomItem::setWeekdaysList(QStringList list)
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_SETWEEKDAYSLIST_ENTRY );
+ mWeekdaysList = list;
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_SETWEEKDAYSLIST_EXIT );
+}
+
+/*!
+ \reimp
+ Creates custom data form item.
+ */
+HbWidget* SettingsCustomItem::createCustomWidget()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_CREATECUSTOMWIDGET_ENTRY );
+ HbDataFormModelItem::DataItemType itemType =
+ static_cast<HbDataFormModelItem::DataItemType>(modelIndex()
+ .data(HbDataFormModelItem::ItemTypeRole).toInt());
+
+ switch (itemType) {
+ case (TimeItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ setProperty("expandItem", false);
+ mTimeWidget = new HbPushButton(this);
+ connect(
+ mTimeWidget, SIGNAL(clicked()),
+ this, SLOT(launchTimePicker()));
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_CREATECUSTOMWIDGET_EXIT );
+ return mTimeWidget;
+ }
+
+ case (DateItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ setProperty("expandItem", false);
+ mDateWidget = new HbPushButton(this);
+ connect(
+ mDateWidget, SIGNAL(clicked()),
+ this, SLOT(launchDatePicker()));
+ OstTraceFunctionExit0( DUP1_SETTINGSCUSTOMITEM_CREATECUSTOMWIDGET_EXIT );
+ return mDateWidget;
+ }
+
+ case (PlaceItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ setProperty("expandItem", false);
+ mPlaceWidget = new HbPushButton(this);
+ connect(
+ mPlaceWidget, SIGNAL(clicked()),
+ this, SLOT(launchCitySelectionList()));
+ OstTraceFunctionExit0( DUP2_SETTINGSCUSTOMITEM_CREATECUSTOMWIDGET_EXIT );
+ return mPlaceWidget;
+ }
+
+ case (RegionalItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ setProperty("expandItem", false);
+ mRegSettingsWidget = new HbPushButton(this);
+ connect(
+ mRegSettingsWidget, SIGNAL(clicked()),
+ this, SLOT(launchRegSettingsView()));
+ OstTraceFunctionExit0( DUP3_SETTINGSCUSTOMITEM_CREATECUSTOMWIDGET_EXIT );
+ return mRegSettingsWidget;
+ }
+
+ case (WorkdaysItemOffset + HbDataFormModelItem::CustomItemBase):
+ {
+ // Set the property so that the custom item layout
+ // will be the same for both portrait and landscape
+ setProperty("expandItem", true);
+ mWorkdaysWidget = new HbListWidget(this);
+ mWorkdaysWidget->setSelectionMode(HbAbstractItemView::MultiSelection);
+ mWorkdaysWidget->setScrollDirections(0);
+ mWorkdaysWidget->ungrabGesture(Qt::PanGesture);
+
+ QItemSelectionModel *model = 0;
+ model = mWorkdaysWidget->selectionModel();
+ for (int index = 0; index < mWeekdaysList.count(); ++index) {
+ mWorkdaysWidget->addItem(mWeekdaysList.at(index));
+ }
+
+ QString workdaysString = workdaysSetting();
+ for (int i = 0, index = workdaysString.size() - 1;
+ index >= 0; ++i, index--) {
+ if (workdaysString.at(index) == QChar('0')) {
+ // Not a workday.
+ model->select(
+ model->model()->index(i,0),
+ QItemSelectionModel::Deselect);
+ } else {
+ // Workday.
+ model->select(
+ model->model()->index(i,0),
+ QItemSelectionModel::Select);
+ }
+ }
+
+ OstTraceFunctionExit0( DUP4_SETTINGSCUSTOMITEM_CREATECUSTOMWIDGET_EXIT );
+ return mWorkdaysWidget;
+ }
+
+ default:
+ return 0;
+ }
+}
+
+/*!
+ Launches the time picker dialog.
+ */
+void SettingsCustomItem::launchTimePicker()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_LAUNCHTIMEPICKER_ENTRY );
+ if (mTimePickerDialog) {
+ delete mTimePickerDialog;
+ }
+
+ // Create the dialog.
+ mTimePickerDialog = new HbDialog;
+ mTimePickerDialog->setTimeout(HbDialog::NoTimeout);
+ mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+ mTimePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true );
+
+ // Set the heading for the dialog.
+ HbLabel * timeLabel =
+ new HbLabel(hbTrId("txt_clock_setlabel_time"), mTimePickerDialog);
+ mTimePickerDialog->setHeadingWidget(timeLabel);
+
+ QStringList timeSeparator;
+ int index = mSettingsUtility->timeFormat(timeSeparator);
+ QString tumblerDisplayFormat = mSettingsUtility->timeFormatString()
+ .replace(timeSeparator.at(index), QString("."));
+
+ // Create the tumbler.
+ HbDateTimePicker *timePicker = new HbDateTimePicker(mTimePickerDialog);
+ timePicker->setDisplayFormat(tumblerDisplayFormat);
+ // Set the tumbler as the content widget.
+ mTimePickerDialog->setContentWidget(timePicker);
+ timePicker->setTime(QTime::currentTime());
+
+ mOkAction = new HbAction(
+ QString(hbTrId("txt_common_button_ok")), mTimePickerDialog);
+ mCancelAction = new HbAction(
+ QString(hbTrId("txt_common_button_cancel")), mTimePickerDialog);
+
+ mTimePickerDialog->addAction(mOkAction);
+ mTimePickerDialog->addAction(mCancelAction);
+
+ mTimePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_LAUNCHTIMEPICKER_EXIT );
+}
+
+/*!
+ Handles the ok action of time/date picker dialog.
+ */
+void SettingsCustomItem::handleOkAction()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_HANDLEOKACTION_ENTRY );
+ if (mTimePickerDialog) {
+ // Get the time from the time picker.
+ QTime newTime = static_cast<HbDateTimePicker *> (
+ mTimePickerDialog->contentWidget())->time();
+
+ QString timeFormatString = mSettingsUtility->timeFormatString();
+
+ // If time returned by the picker is valid, then only update.
+ if (newTime.isValid()) {
+ // Update the display text on form item.
+ mTimeWidget->setText(newTime.toString(timeFormatString));
+ // Update the system time.
+ mTimezoneClient->setDateTime(
+ QDateTime(QDate::currentDate(), newTime));
+ }
+ } else if(mDatePickerDialog) {
+ // Get the time from the time picker.
+ QDate newDate = static_cast<HbDateTimePicker *> (
+ mDatePickerDialog->contentWidget())->date();
+
+ QString dateFormatString = mSettingsUtility->dateFormatString();
+
+ // If date returned by the picker is valid, then only update.
+ if (newDate.isValid()) {
+ // Update the display text on form item.
+ mDateWidget->setText(newDate.toString(dateFormatString));
+ // Update the system date.
+ mTimezoneClient->setDateTime(
+ QDateTime(newDate, QTime::currentTime()));
+ }
+ }
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_HANDLEOKACTION_EXIT );
+}
+
+/*!
+ Launches the date picker dialog.
+ */
+void SettingsCustomItem::launchDatePicker()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_LAUNCHDATEPICKER_ENTRY );
+ if (mDatePickerDialog) {
+ delete mDatePickerDialog;
+ }
+
+ // Create the dialog.
+ mDatePickerDialog = new HbDialog;
+ mDatePickerDialog->setTimeout(HbDialog::NoTimeout);
+ mDatePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+ mDatePickerDialog->setAttribute(Qt::WA_DeleteOnClose, true );
+
+ // Set the heading for the dialog.
+ HbLabel * timeLabel =
+ new HbLabel(hbTrId("txt_clock_setlabel_date"), mDatePickerDialog);
+ mDatePickerDialog->setHeadingWidget(timeLabel);
+
+ // Create the tumbler.
+ HbDateTimePicker *datePicker = new HbDateTimePicker(mDatePickerDialog);
+ datePicker->setDisplayFormat(mSettingsUtility->dateFormatString());
+ datePicker->setMinimumDate(QDate(2010, 01, 01));
+ // Set the tumbler as the content widget.
+ mDatePickerDialog->setContentWidget(datePicker);
+ datePicker->setDate(QDate::currentDate());
+
+ mOkAction = new HbAction(
+ QString(hbTrId("txt_common_button_ok")), mDatePickerDialog);
+
+ mCancelAction = new HbAction(
+ QString(hbTrId("txt_common_button_cancel")),mDatePickerDialog);
+
+ mDatePickerDialog->addAction(mOkAction);
+ mDatePickerDialog->addAction(mCancelAction);
+
+ mDatePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_LAUNCHDATEPICKER_EXIT );
+}
+
+/*!
+ Launches cityselectionlist for timezone selection.
+ */
+void SettingsCustomItem::launchCitySelectionList()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_LAUNCHCITYSELECTIONLIST_ENTRY );
+ mCitySelectionList = new ClockCitySelectionList(mTimezoneClient, this);
+ connect(
+ mCitySelectionList, SIGNAL(citySelected(LocationInfo)),
+ this, SLOT(updatePlaceItem(LocationInfo)));
+
+ mCitySelectionList->showCityList();
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_LAUNCHCITYSELECTIONLIST_EXIT );
+}
+
+/*!
+ Launches cityselectionlist for timezone selection.
+
+ \param info Will contain the location info selected by the user.
+ */
+void SettingsCustomItem::updatePlaceItem(LocationInfo info)
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_UPDATEPLACEITEM_ENTRY );
+ if (-1 != info.timezoneId) {
+ mTimezoneClient->setAsCurrentLocationL(info);
+ }
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_UPDATEPLACEITEM_EXIT );
+}
+
+/*!
+ Launches the regional settings view.
+ */
+void SettingsCustomItem::launchRegSettingsView()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_LAUNCHREGSETTINGSVIEW_ENTRY );
+ ClockRegionalSettingsView *view =
+ new ClockRegionalSettingsView(0, mLaunchedByClock);
+
+ connect(mTimezoneClient, SIGNAL(timechanged()),
+ view, SLOT(updateWeekStartOn()));
+ view->showView();
+
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_LAUNCHREGSETTINGSVIEW_EXIT );
+}
+
+/*!
+ Slot to handle the selected action.
+ */
+void SettingsCustomItem::selectedAction(HbAction *action)
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_SELECTEDACTION_ENTRY );
+ if (action==mOkAction) {
+ handleOkAction();
+ }
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_SELECTEDACTION_EXIT );
+}
+
+/*!
+ Returns the workdays setting string based on start of week setting.
+ */
+QString SettingsCustomItem::workdaysSetting()
+{
+ OstTraceFunctionEntry0( SETTINGSCUSTOMITEM_WORKDAYSSETTING_ENTRY );
+ HbExtendedLocale locale = HbExtendedLocale::system();
+ // 0(Sun)0(sat)1(Fri)1(Thu)1(Wed)1(Tue)1(Mon)
+ QString workdaysString = locale.workDays();
+ QString workdays = workdaysString;
+ HbExtendedLocale::WeekDay startOfWeekIndex =
+ HbExtendedLocale::system().startOfWeek();
+ int max = workdaysString.size() - 1;
+ for (int index = max - startOfWeekIndex, i = max; i >= 0; i--) {
+ QChar ch = workdaysString.at(index);
+ workdays.replace(i, 1, ch);
+ if (index == 0) {
+ index = max;
+ } else {
+ index--;
+ }
+ }
+// workdays.append('\0');
+
+ OstTraceFunctionExit0( SETTINGSCUSTOMITEM_WORKDAYSSETTING_EXIT );
+ return workdays;
+}
+
+// End of file --Don't remove this.