calendarui/settings/src/calensettings.cpp
changeset 49 5de72ea7a065
parent 32 ea672fcb0ea0
child 50 579cc610882e
--- a/calendarui/settings/src/calensettings.cpp	Fri Jun 11 13:37:54 2010 +0300
+++ b/calendarui/settings/src/calensettings.cpp	Wed Jun 23 18:11:28 2010 +0300
@@ -23,15 +23,21 @@
 #include <hbabstractbutton.h>
 #include <xqsettingsmanager.h>
 #include <xqsettingskey.h>
+#include <HbExtendedLocale.h>
 
 #include "calensettings.h"
+#include "calenservices.h"
 #include "calendarprivatecrkeys.h"
 
-CalenSettings::CalenSettings(HbDataForm *form, QObject *parent)
+CalenSettings::CalenSettings(MCalenServices& services, HbDataForm *form, QObject *parent)
 :QObject(parent),
+ mServices(services),
  mSettingsForm(form),
  mSettingsModel(0),
- mShowRegionalInfoItem(NULL)
+ mShowRegionalInfoItem(NULL),
+ mShowWeekStartOnInfoItem(NULL),
+ mWeekNumberItemAdded(false),
+ mRegionalpluginActive(false)
 {   
     mSettingsManager = new XQSettingsManager(this);
 	mAlarmSnoozeCenrepKey = new XQSettingsKey(
@@ -94,44 +100,64 @@
 								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")));
-	
-	
-	// 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()));
+	// Create the weekday list based on start of week.
+	QStringList weekdaysList;
+	weekdaysList
+        << QString("Monday")//hbTrId("txt_clk_setlabel_val_monday")//@TODO set to proper localization strings once available
+        << QString("Tuesday")//hbTrId("txt_clk_setlabel_val_tuesday")
+        << QString("Wednesday")//hbTrId("txt_clk_setlabel_val_wednesday")
+        << QString("Thursday")//hbTrId("txt_clk_setlabel_val_thursday")
+        << QString("Friday")//hbTrId("txt_clk_setlabel_val_friday")
+        << QString("Saturday")//hbTrId("txt_clk_setlabel_val_saturday")
+	   << QString("Sunday");//hbTrId("txt_clk_setlabel_val_sunday");
+	// Start of week item.
+	mShowWeekStartOnInfoItem = mSettingsModel->appendDataFormItem(HbDataFormModelItem::ComboBoxItem,QString("Week Starts On"));
+                                                                 // hbTrId("txt_clock_setlabel_week_starts_on"));//@TODO set to proper localization strings once available
+	// 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 show week number item in the model
+
+        addWeekNumberItem();
 	mSettingsModel->appendDataFormItem(mShowWeekNumberItem);
-	
-	// TODO: Append the regional information setting only if any regional
-	// plugins have been loaded by the customisation manager
-	mShowRegionalInfoItem = new HbDataFormModelItem();
-	mShowRegionalInfoItem->setType(HbDataFormModelItem::ToggleValueItem);
-	mShowRegionalInfoItem->setData(HbDataFormModelItem::LabelRole, 
-	                               QString("Show regional info"));     
+	  
+	if(isPluginEnabled()) {
+		addRegionalInfoItem();
+	}
+}
+	  
+void CalenSettings::addRegionalInfoItem()
+{
+	mRegionalpluginActive = true;
+	// Regional info is the second item in the model
+	int index = mSettingsModel->indexFromItem(mAlarmSnoozeTimeItem).row() + 1;
+
+	mShowRegionalInfoItem = mSettingsModel->insertDataFormItem(
+				index ,
+				HbDataFormModelItem::ToggleValueItem,
+				QString(hbTrId("txt_calendar_setlabel_show_lunar_calendar")),
+				mSettingsModel->invisibleRootItem()); 
 
 	// 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(QString("text"), 
+									QString(hbTrId("txt_calendar_button_no")));
+	mShowRegionalInfoItem->setContentWidgetData(QString("additionalText"), 
+									QString(hbTrId("txt_calendar_button_yes")));
 	mSettingsForm->addConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
-	                             this, SLOT(handleRegionalInfoChange()));
-	mSettingsModel->appendDataFormItem(mShowRegionalInfoItem);
+									this, SLOT(handleRegionalInfoChange()));
+	
+}
+
+void CalenSettings::removeRegionalInfoItem()
+{
+	mSettingsForm->removeConnection(mShowRegionalInfoItem, SIGNAL(clicked()),
+									this, SLOT(handleRegionalInfoChange()));
+    mSettingsModel->removeItem(mShowRegionalInfoItem);
+    mRegionalpluginActive = false;
 }
 
 void CalenSettings::handleAlarmSnoozeTimeChange(int index)
@@ -161,7 +187,7 @@
     default:
         break;
     }
-QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
+	QVariant value = mSettingsManager->readItemValue(*mAlarmSnoozeCenrepKey);
     uint time = value.toUInt();
 }
 
@@ -230,40 +256,156 @@
         }
     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);
+}
+
+void CalenSettings::populateRegionalInfo()
+{
+    QVariant 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")));
+    }
+
+}
+
+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")));     
+
+
+    // For HbPushButton type properties -- to be used for toggle value item
     if(mShowWeekNumber)
         {
-        mShowWeekNumberItem->setContentWidgetData(
-        		QString("text"), QString(hbTrId("txt_calendar_button_yes")));
-        mShowWeekNumberItem->setContentWidgetData(
-        		QString("additionalText"), QString(
-        				hbTrId("txt_calendar_button_no")));
+        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->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")));
+
+    mSettingsForm->addConnection(mShowWeekNumberItem, SIGNAL(clicked()), 
+            this, SLOT(handleWeekNumberChange()));	
+}
+
+/*!
+ Returns true if plugin is loaded
+ */
+bool CalenSettings::isPluginEnabled()
+{
+    QString *pluginInfo = mServices.InfobarTextL();
+    if (!pluginInfo) {
+        return false;
     } else {
-        mShowRegionalInfoItem->setContentWidgetData(
-        		QString("text"), QString(hbTrId("txt_calendar_button_no")));
-        mShowRegionalInfoItem->setContentWidgetData(
-        		QString("additionalText"), QString(
-        				hbTrId("txt_calendar_button_yes")));
+        return true;
+    }
+}
+// ---------------------------------------------------------
+// CalenSettings::setStartDayOfWeek
+// sets the start day of the week to the locale
+// calls when user select 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();
     }
-    
-    mSettingsForm->setModel(mSettingsModel);
-}
+
+// ---------------------------------------------------------
+// CalenSettings::updateShowWeekItem
+// update 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);
+    //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(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")));
+            }
+        mShowWeekNumberItem->setEnabled(true);
+        }
+    }
 // End of file