clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp
changeset 45 b6db4fd4947b
parent 18 c198609911f9
child 51 0b38fc5b94c6
--- a/clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp	Mon May 03 12:30:32 2010 +0300
+++ b/clock/clockui/clockalarmeditor/src/clockalarmeditor.cpp	Mon Jun 28 15:22:02 2010 +0530
@@ -17,7 +17,6 @@
 
 // System includes
 #include <QDateTime>
-
 #include <HbDataForm>
 #include <HbDataFormModel>
 #include <HbDataFormModelItem>
@@ -25,21 +24,21 @@
 #include <HbInstance>
 #include <HbAction>
 #include <HbMenu>
-#include <HbToolBar>
-#include <HbLineEdit>
 #include <HbLabel>
-#include <HbComboBox>
-#include <HbPushButton>
 #include <HbNotificationDialog>
 #include <HbDialog>
 #include <HbDateTimePicker>
-#include <HbApplication>
+#include <HbCheckBox>
+#include <HbExtendedLocale>
+#include <HbGroupBox>
+#include <HbDocumentLoader>
+#include <HbTranslator>
 #include <xqsettingsmanager.h>
 #include <xqsettingskey.h>
-#include <QTranslator>
+
 
 // User includes
-#include "clockcommon.h"
+#include "clockprivatecrkeys.h"
 #include "clockalarmeditor.h"
 #include "alarmclient.h"
 #include "settingsutility.h"
@@ -52,6 +51,7 @@
 const int KOneMinute(1);
 const int KOneHour(1);
 const int KSecondsInOneDay(24 * 60 * 60);
+const int KDaysInWeek(7);
 
 /*!
     \class ClockAlarmEditor
@@ -68,9 +68,12 @@
     edit.
     \param parent The parent object.
  */
-ClockAlarmEditor::ClockAlarmEditor(int alarmId, QGraphicsWidget *parent)
-:HbView(parent),
+ClockAlarmEditor::ClockAlarmEditor(
+		AlarmClient &alarmClient, int alarmId,
+		QObject *parent)
+:QObject(parent),
  mAlarmId(alarmId),
+ mStartOfWeek(0),
  mAlarmDayItemInserted(false),
  mAlarmEditorForm(0),
  mAlarmEditorModel(0),
@@ -79,39 +82,14 @@
  mAlarmDayItem(0),
  mAlarmSoundItem(0),
  mAlarmDescription(0),
- mAlarmClient(0)
- {
- 	
+ mAlarmClient(alarmClient)
+{
  	// Load the translation file and install the alarmeditor specific translator
-	mTranslator = new QTranslator;
-	//QString lang = QLocale::system().name();
-	//QString path = "Z:/resource/qt/translations/";
-	mTranslator->load("clockalarmeditor",":/translations");
-	// TODO: Load the appropriate .qm file based on locale
-	//bool loaded = mTranslator->load("caleneditor_" + lang, path);
-	HbApplication::instance()->installTranslator(mTranslator);
-
-	// Create the Alarm Editor DataForm.
-	mAlarmEditorForm = new HbDataForm(this);
-
-	// Set the title text of the Clock Alarm Editor view.
-	setTitle(hbTrId("txt_common_common_clock"));
-
-	// Create the alarm client object.
-	mAlarmClient = new AlarmClient(this);
-
-	// Set the heading of the Alarm Editor DataForm.
-	if (mAlarmId && mAlarmClient) {
-		mAlarmEditorForm->setHeading(
-				hbTrId("txt_clock_subhead_alarm"));
-	}
-	else
-	{
-		mAlarmEditorForm->setHeading(hbTrId("txt_clock_subhead_new_alarm"));
-	}
-
+	mTranslator = new HbTranslator("clockalarmeditor");
+	mTranslator->loadCommon();
+	
 	// create the timezone client object
-	mTimezoneClient = new TimezoneClient(this);
+	mTimezoneClient = TimezoneClient::getInstance();
 	// Create the settings manager.
 	mSettingsManager = new XQSettingsManager(this);
 
@@ -124,31 +102,68 @@
 	// TODO: do i need to delete this object ??
 	SettingsUtility *settingsUtil = new SettingsUtility(this);
 	mTimeFormat = settingsUtil->timeFormatString();
+	
+	// Get start of week from the locale.
+    HbExtendedLocale locale = HbExtendedLocale::system();
+    mStartOfWeek = locale.startOfWeek();
+
+	// Create the HbDocumentLoader object.
+	HbDocumentLoader *loader = new HbDocumentLoader();
+	bool success;
+	loader->load(":/xml/clockalarmeditor.docml", &success);
+
+	mAlarmEditorView = qobject_cast<HbView *>(
+			loader->findWidget("alarmEditorView"));
+
+	// Get the subtitle groupBox.
+	HbGroupBox *subtitleGroupBox = qobject_cast<HbGroupBox *>(
+			loader->findWidget("subtitleGroupBox"));
+
+	// Set the heading of the subtitle groupBox.
+	if (mAlarmId) {
+		subtitleGroupBox->setHeading(hbTrId("txt_clock_subhead_alarm"));
+	} else {
+		subtitleGroupBox->setHeading(hbTrId("txt_clock_subhead_new_alarm"));
+	}
+
+	// Get the Alarm Editor DataForm.
+	mAlarmEditorForm = qobject_cast<HbDataForm *> (
+			loader->findWidget("alarmEditorForm"));
+
 
 	// Create the alarm info structure with desired values.
 	initAlarmInfo();
 
 	// Creates & initializes the DataFormModel for the AlarmEditor DataForm.
 	initModel();
-	
+
 	QList <HbAbstractViewItem*> prototypes = mAlarmEditorForm->itemPrototypes();
 	ClockAlarmCustomItem *customItem =
 			new ClockAlarmCustomItem(mAlarmEditorForm);
 	prototypes.append(customItem);
 	mAlarmEditorForm->setItemPrototypes(prototypes);
 
-	// Create the menu.
-	createMenu();
+	// Get the menu items for the alarm editor.
+	mDeleteAction = qobject_cast<HbAction *> (
+			loader->findObject("deleteAction"));
+	mDiscardAction = qobject_cast<HbAction *>(
+			loader->findObject("discardChanges"));
+
+	// Connect the signals for the menu item.
+	connect(
+			mDeleteAction, SIGNAL(triggered()),
+			this, SLOT(handleDeleteAction()));
+	connect(
+			mDiscardAction, SIGNAL(triggered()),
+			this, SLOT(handleDiscardAction()));
 
 	// Add the done soft key action.
-	mDoneAction = new HbAction(Hb::DoneAction);
+	mDoneAction = new HbAction(Hb::DoneNaviAction);
 	connect(
 			mDoneAction, SIGNAL(triggered()),
 			this, SLOT(handleDoneAction()));
-	setNavigationAction(mDoneAction);
+	mAlarmEditorView->setNavigationAction(mDoneAction);
 
-	// Sets the AlarmEditor DataForm to the Clock AlarmEditor view.
-	setWidget(mAlarmEditorForm);
 }
 
 /*!
@@ -156,16 +171,7 @@
  */
 ClockAlarmEditor::~ClockAlarmEditor()
 {
-	if (mAlarmClient) {
-		delete mAlarmClient;
-		mAlarmClient = 0;
-	}
-	if(mTimezoneClient) {
-		delete mTimezoneClient;
-		mTimezoneClient = 0;
-	}
 	// Remove the translator
-	HbApplication::instance()->removeTranslator(mTranslator);
 	if (mTranslator) {
 		delete mTranslator;
 		mTranslator = 0;
@@ -180,9 +186,8 @@
 {
 	// Store the current view and set alarm editor as current view.
 	HbMainWindow *window = hbInstance->allMainWindows().first();
-	mPreviousView = window->currentView();
-	window->addView(this);
-	window->setCurrentView(this);
+	window->addView(mAlarmEditorView);
+	window->setCurrentView(mAlarmEditorView);
 }
 
 /*!
@@ -193,6 +198,10 @@
 	int alarmDayIndex = -1;
 	if (mAlarmDayItemInserted) {
 		alarmDayIndex = mAlarmDayItem->contentWidgetData("currentIndex").toInt();
+		alarmDayIndex += mStartOfWeek;
+		if(alarmDayIndex >= KDaysInWeek){
+		   alarmDayIndex -= KDaysInWeek;
+		}
 	}
 
 	setAlarm(
@@ -229,24 +238,20 @@
 
 	// Reset alarm day item.
 	if (mAlarmDayItemInserted) {
+    	int currentIndex = mAlarmInfo.alarmDateTime.dayOfWeek() - 1;
+        currentIndex -= mStartOfWeek;
+        if(0 > currentIndex){
+           currentIndex += KDaysInWeek;
+        }
 		mAlarmDayItem->setContentWidgetData(
-				"currentIndex",
-				mAlarmInfo.alarmDateTime.dayOfWeek() - 1);
+				"currentIndex",currentIndex);
 	}
 
 	// Reset for alarm sound.
-	QStringList alarmSoundOptions;
-	alarmSoundOptions << tr("On")
-			<< tr("Off");
-
 	if (AlarmVolumeOn == mAlarmInfo.volumeStatus) {
-		mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[0]);
-		mAlarmSoundItem->setContentWidgetData(
-				"additionalText", alarmSoundOptions[1]);
+		mAlarmSoundItem->setContentWidgetData("checkState", Qt::Checked);
 	} else {
-		mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[1]);
-		mAlarmSoundItem->setContentWidgetData(
-				"additionalText", alarmSoundOptions[0]);
+		mAlarmSoundItem->setContentWidgetData("checkState", Qt::Unchecked);
 	}
 
 	mAlarmDescription->setContentWidgetData("text", mAlarmInfo.alarmDesc);
@@ -280,6 +285,11 @@
 			alarmDayIndex = 0;
 		}
 		if (mAlarmDayItemInserted) {
+  		    alarmDayIndex -= mStartOfWeek;
+
+            if(0 > alarmDayIndex){
+               alarmDayIndex += KDaysInWeek;
+            }
 			mAlarmDayItem->setContentWidgetData(
 					"currentIndex",
 					alarmDayIndex);
@@ -320,15 +330,14 @@
 					QString(hbTrId("txt_clock_formlabel_day")),
 					mAlarmEditorModel->invisibleRootItem());
 
+			// Add the alarm days beginning from the start of week.
 			QStringList alarmDays;
-			alarmDays << hbTrId("txt_clk_setlabel_val_monday")
-					<< hbTrId("txt_clk_setlabel_val_tuesday")
-					<< hbTrId("txt_clk_setlabel_val_wednesday")
-					<< hbTrId("txt_clk_setlabel_val_thursday")
-					<< hbTrId("txt_clk_setlabel_val_friday")
-					<< hbTrId("txt_clk_setlabel_val_saturday")
-					<< hbTrId("txt_clk_setlabel_val_sunday");
+			sortAlarmDaysList(alarmDays);
+			alarmDayIndex -= mStartOfWeek;
 
+			if(0 > alarmDayIndex){
+				alarmDayIndex += KDaysInWeek;
+			}
 			mAlarmDayItem->setContentWidgetData("items", alarmDays);
 			mAlarmDayItem->setContentWidgetData(
 					"currentIndex",
@@ -351,16 +360,6 @@
 }
 
 /*!
-	Called when `Cancel' is pressed on the Dialog.
- */
-void ClockAlarmEditor::handleCancelAction()
-{
-	// Close the dialog.
-	mTimePickerDialog->close();
-	mTimePickerDialog->deleteLater();
-}
-
-/*!
     Called when `OK' is pressed on the Dialog.
  */
 void ClockAlarmEditor::handleOkAction()
@@ -372,9 +371,6 @@
 	// Update the selected time value.
 	mAlarmTimeItem->setContentWidgetData("text",newAlarmTime.toString(mTimeFormat));
 
-	// Close the dialog.
-	handleCancelAction();
-
 	if (mAlarmInfo.nextDueTime != newAlarmTime ) {
 		handleTimeChange(newAlarmTime.toString(mTimeFormat));
 	}
@@ -385,65 +381,58 @@
  */
 void ClockAlarmEditor::launchTimePicker()
 {
-
-
-		if (mTimePickerDialog) {
-			delete mTimePickerDialog;
-		}
-
-		// Create the dialog.
-		mTimePickerDialog = new HbDialog;
-		mTimePickerDialog->setTimeout(HbDialog::NoTimeout);
-		mTimePickerDialog->setDismissPolicy(HbDialog::NoDismiss);
+	if (mTimePickerDialog) {
+		delete mTimePickerDialog;
+	}
 
-		// Set the heading for the dialog.
-		HbLabel * timeLabel =
-			new HbLabel(hbTrId("txt_tumbler_title_alarm_time"),
-			    mTimePickerDialog);
-		mTimePickerDialog->setHeadingWidget(timeLabel);
+	// 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_tumbler_title_alarm_time"),
+			mTimePickerDialog);
+	mTimePickerDialog->setHeadingWidget(timeLabel);
 
-		SettingsUtility *settingsUtil = new SettingsUtility(this);
-		QStringList timeSeparator;
-		int index = settingsUtil->timeFormat(timeSeparator);
-		QString tumblerDisplayFormat =
-				mTimeFormat.replace(timeSeparator.at(index), QString("."));
+	SettingsUtility *settingsUtil = new SettingsUtility(this);
+	QStringList timeSeparator;
+	int index = settingsUtil->timeFormat(timeSeparator);
+	
+	QString tumblerDisplayFormat =
+			mTimeFormat.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);
-		
-		QString timeString = mAlarmTimeItem->contentWidgetData("text").toString();
-		QTime time = QTime::fromString(timeString, mTimeFormat);
-		timePicker->setTime(time);
+	// Create the tumbler.
+	HbDateTimePicker *timePicker = new HbDateTimePicker(mTimePickerDialog);
+	timePicker->setDisplayFormat(tumblerDisplayFormat);
+
+	mTimePickerDialog->setContentWidget(timePicker);
+
+	QString timeString = mAlarmTimeItem->contentWidgetData("text").toString();
+	QTime time = QTime::fromString(timeString, mTimeFormat);
+	timePicker->setTime(time);
 
-		mOkAction =
-			new HbAction(QString(hbTrId("txt_common_button_ok")),
-			    mTimePickerDialog);
-		mTimePickerDialog->setPrimaryAction(mOkAction);
-		connect(
-				mOkAction, SIGNAL(triggered()),
-				this, SLOT(handleOkAction()));
+	mOkAction =
+		new HbAction(QString(hbTrId("txt_common_button_ok")),
+			mTimePickerDialog);
 
-		mCancelAction =
-			new HbAction(QString(hbTrId("txt_common_button_cancel")),
-			    mTimePickerDialog);
-		mTimePickerDialog->setSecondaryAction( mCancelAction );
-		connect(
-				mCancelAction, SIGNAL(triggered()),
-				this, SLOT(handleCancelAction()));
+	mCancelAction =
+		new HbAction(QString(hbTrId("txt_common_button_cancel")),
+			mTimePickerDialog);
 
-		mTimePickerDialog->exec();
+	mTimePickerDialog->addAction(mOkAction);
+	mTimePickerDialog->addAction(mCancelAction);
 
-
+	mTimePickerDialog->open(this, SLOT(selectedAction(HbAction*)));
 }
 
 /*!
 	Handles the alarm sound change.
  */
-void ClockAlarmEditor::handleAlarmSoundChanged()
+void ClockAlarmEditor::handleAlarmSoundChanged(int checkedState)
 {
+	Q_UNUSED(checkedState)
 	if (AlarmVolumeOff == mAlarmInfo.volumeStatus) {
 		mAlarmInfo.volumeStatus = AlarmVolumeOn;
 	} else {
@@ -452,6 +441,16 @@
 }
 
 /*!
+	Slot to handle the selected action
+ */
+void ClockAlarmEditor::selectedAction(HbAction *action)
+{
+	if (action == mOkAction) {
+		handleOkAction();
+	}
+}
+
+/*!
 	Initialises the Model & sets for the AlarmEditorForm.
  */
 void ClockAlarmEditor::initModel()
@@ -517,19 +516,18 @@
 					QString(hbTrId("txt_clk_setlabel_day")),
 					mAlarmEditorModel->invisibleRootItem());
 
+			// Add the alarm days beginning from the start of week.
 			QStringList alarmDays;
-			alarmDays << hbTrId("txt_clk_setlabel_val_monday")
-					<< hbTrId("txt_clk_setlabel_val_tuesday")
-					<< hbTrId("txt_clk_setlabel_val_wednesday")
-					<< hbTrId("txt_clk_setlabel_val_thursday")
-					<< hbTrId("txt_clk_setlabel_val_friday")
-					<< hbTrId("txt_clk_setlabel_val_saturday")
-					<< hbTrId("txt_clk_setlabel_val_sunday");
+			sortAlarmDaysList(alarmDays);
 
+			int currentIndex = mAlarmInfo.alarmDateTime.dayOfWeek() - 1;
+			currentIndex -= mStartOfWeek;
+			if(0 > currentIndex){
+			   currentIndex += KDaysInWeek;
+			}
 			mAlarmDayItem->setContentWidgetData("items", alarmDays);
 			mAlarmDayItem->setContentWidgetData(
-					"currentIndex",
-					mAlarmInfo.alarmDateTime.dayOfWeek() - 1);
+					"currentIndex",currentIndex);
 
 			mAlarmDayItemInserted = true;
 		}/* else { TODO: check and remove this else block.
@@ -543,23 +541,21 @@
 
 	// Alarm sound.
 	mAlarmSoundItem = mAlarmEditorModel->appendDataFormItem(
-			HbDataFormModelItem::ToggleValueItem,
-			QString(hbTrId("txt_clk_setlabel_alarm_sound")),
+			HbDataFormModelItem::CheckBoxItem,
+			QString(hbTrId("")),
 			mAlarmEditorModel->invisibleRootItem());
-	QStringList alarmSoundOptions;
-	alarmSoundOptions << tr("On")
-			<< tr("Off");
+
+	mAlarmSoundItem->setContentWidgetData(
+			"text", QString(hbTrId("txt_clk_setlabel_alarm_sound")));
 
 	if (AlarmVolumeOn == mAlarmInfo.volumeStatus) {
-		mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[0]);
-		mAlarmSoundItem->setContentWidgetData(
-				"additionalText", alarmSoundOptions[1]);
-	} else {
-		mAlarmSoundItem->setContentWidgetData("text", alarmSoundOptions[1]);
-		mAlarmSoundItem->setContentWidgetData(
-				"additionalText", alarmSoundOptions[0]);
+		mAlarmSoundItem->setContentWidgetData("checkState",Qt::Checked);
 	}
 
+	mAlarmEditorForm->addConnection(
+			mAlarmSoundItem, SIGNAL(stateChanged(int)),
+			this,SLOT(handleAlarmSoundChanged(int)));
+
 	// Description.
 	mAlarmDescription = mAlarmEditorModel->appendDataFormItem(
 			HbDataFormModelItem::TextItem,
@@ -592,36 +588,20 @@
 		mAlarmInfo.alarmDateTime = mAlarmInfo.alarmDateTime.addDays(1);
 	}
 
-	// Set the alarm volume on by default.
-	mAlarmInfo.volumeStatus = AlarmVolumeOn;
+	if (!mAlarmId) {
+		// Set the alarm volume On by default for new alarms..
+		mAlarmInfo.volumeStatus = AlarmVolumeOn;
+	}
 
 	// If editor state is a reset alarm, then its an already existing alarm
 	// get the alarm details and fill it in mAlarmInfo.
-	if (mAlarmId && mAlarmClient) {
-		mAlarmClient->getAlarmInfo(mAlarmId, mAlarmInfo);
-		mAlarmClient->deleteAlarm(mAlarmId);
+	if (mAlarmId) {
+		mAlarmClient.getAlarmInfo(mAlarmId, mAlarmInfo);
+		mAlarmClient.deleteAlarm(mAlarmId);
 	}
 }
 
 /*!
-    Creates menu items.
- */
-void ClockAlarmEditor::createMenu()
-{
-	// Set the menu for the alarm editor.
-	mDeleteAction = menu()->addAction(hbTrId("txt_clock_opt_delete"));
-	mDiscardAction = menu()->addAction(hbTrId("txt_clock_opt_discard_changes"));
-
-	// Connect the signals for the menu item.
-	connect(
-			mDeleteAction, SIGNAL(triggered()),
-			this, SLOT(handleDeleteAction()));
-	connect(
-			mDiscardAction, SIGNAL(triggered()),
-			this, SLOT(handleDiscardAction()));
-}
-
-/*!
 	Sets the alarm to the alarm server.
  */
 void ClockAlarmEditor::setAlarm(
@@ -653,7 +633,7 @@
 	alarmInfo.volumeStatus = mAlarmInfo.volumeStatus;
 
 	// Request the listener to set the alarm.
-	mAlarmClient->setAlarm(alarmInfo);
+	mAlarmClient.setAlarm(alarmInfo);
 
 	// Check if DST rule gets applied in 24hrs.
 	// If so we don't display the remaining time.
@@ -715,9 +695,8 @@
 {
 	// Remove the alarm editor.
 	HbMainWindow *window = hbInstance->allMainWindows().first();
-
-	window->removeView(this);
-	window->setCurrentView(mPreviousView);
+	window->removeView(mAlarmEditorView);
+	deleteLater();
 }
 
 /*!
@@ -733,7 +712,7 @@
 	hbTrId("txt_clock_dpopinfo_alarm_will_occur_at_1_after_au");
 	QString displayText = dstRollOverText.arg(alarmTime);
 	// show the note
-	HbNotificationDialog::launchDialog(displayText);
+	launchDialog(displayText);
 }
 
 /*!
@@ -797,7 +776,6 @@
 			break;
 	}
 	if (Enabled == alarmInfo.alarmStatus && !(displayText.isEmpty())) {
-		//HbNotificationDialog::launchDialog(displayText);
 		showDisplayText = true;
 	}
 
@@ -870,17 +848,16 @@
 				&& 	!(remainingTimeText.isEmpty())) {
 
 			if (!(displayText.isEmpty()) ) {
-				HbNotificationDialog::launchDialog(
-						displayText, remainingTimeText);
+				launchDialog(displayText, remainingTimeText);
 				showDisplayText = false;
 			}
 			else {
-				HbNotificationDialog::launchDialog(remainingTimeText);
+				launchDialog(remainingTimeText);
 			}
 		}
 	}
 	if (showDisplayText) {
-		HbNotificationDialog::launchDialog(displayText);
+		launchDialog(displayText);
 	}
 }
 
@@ -941,4 +918,35 @@
 	return remainingSeconds;
 }
 
+/*!
+	Launches the soft notification.
+ */
+void ClockAlarmEditor::launchDialog(QString title, QString text)
+{
+	HbNotificationDialog *notificationDialog = new HbNotificationDialog();
+	notificationDialog->setTitle(title);
+
+	if (!text.isNull()) {
+		notificationDialog->setText(text);
+	}
+
+	notificationDialog->setTimeout(HbPopup::ConfirmationNoteTimeout);
+	notificationDialog->show();
+}
+
+/*!
+    Sorts and appends alarm days on the basis of start of week.
+ */
+void ClockAlarmEditor::sortAlarmDaysList(QStringList& alarmDaysList)
+
+{
+    for(int index=(mStartOfWeek + 1),j=KDaysInWeek;j!=0 ;index++,j--){
+        if(index > KDaysInWeek){
+           index = index - KDaysInWeek;
+        }
+        QString alarmDayText;
+        getDayText(index, alarmDayText );
+        alarmDaysList.append(alarmDayText);
+    }
+}
 // End of file	--Don't remove this.