wlanutilities/cpwlansettingsplugin/src/cpwlansettingsgroupitemdata.cpp
changeset 56 de27cc8389dd
parent 50 d4198dcb9983
--- a/wlanutilities/cpwlansettingsplugin/src/cpwlansettingsgroupitemdata.cpp	Wed Aug 18 10:52:46 2010 +0300
+++ b/wlanutilities/cpwlansettingsplugin/src/cpwlansettingsgroupitemdata.cpp	Thu Sep 02 21:36:44 2010 +0300
@@ -18,11 +18,6 @@
 
 // System includes
 
-#include <HbGlobal>
-#include <HbDataFormModelItem>
-#include <HbLineEdit>
-#include <HbValidator>
-#include <HbMessageBox>
 #include <QStringList>
 #include <cpsettingformitemdata.h>
 
@@ -45,16 +40,16 @@
 // External function prototypes
 
 // Local constants
-/**  Maximum Value for Scan Interval. */
-const int KMaximumScanInterval = 30;
-/**  Minimum Value for Scan Interval. */
-const int KMinimumScanInterval = 0;
-/**  To Enable the setting of a widget propery. */
-const int KEnableOption = 1;
-/**  Maximum widgets allowed for this Item Data. */
-const int KMaxWidgets = 4;
-/**  Index of Slider widget for Scan Interval. */
-const int KSliderIndex = 2;
+
+//! To Enable the setting of a widget propery. */
+static const int KEnableOption = 1;
+//! Maximum widgets allowed for this Item Data. */
+static const int KMaxWidgets = 4;
+//! Index of Slider widget for Scan Interval. */
+static const int KSliderIndex = 2;
+//! Default value for user defined scan interval
+static const int KDefaultUserDefinedScanInterval = 5;
+
 
 // ======== MEMBER FUNCTIONS ========
 
@@ -68,13 +63,12 @@
             "txt_occ_subhead_wlan_settings")),
             mItemDataHelper(itemDataHelper)
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_ENTRY, this);
-    
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_ENTRY );
+
     initialise();
-    
     createWlanSettingItems();
-    
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_EXIT, this);
+
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_EXIT );
 }
 
 /*!
@@ -83,8 +77,8 @@
 
 CpWlanSettingsGroupItemData::~CpWlanSettingsGroupItemData()
 {
-    OstTraceFunctionEntry1(DUP1_CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_ENTRY, this);
-    OstTraceFunctionExit1(DUP1_CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_EXIT, this);
+    OstTraceFunctionEntry0( DUP1_CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_ENTRY );
+    OstTraceFunctionExit0( DUP1_CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_EXIT );
 }
 
 /*!
@@ -93,19 +87,27 @@
 
 void CpWlanSettingsGroupItemData::initialise()
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_INITIALISE_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_INITIALISE_ENTRY );
     
     mWlanSettings.reset(new WlanSettings);
     
+    bool connectStatus = connect(
+        mWlanSettings.data(),
+        SIGNAL(devicePowerSavingUpdated()),
+        this,
+        SLOT(devicePowerSavingChanged()));
+    Q_ASSERT(connectStatus);
+
     //Error needs to be handled.
     int error = mWlanSettings->init();
     
     //Error needs to be handled.
     error = mWlanSettings->loadSettings();
-    
+
+    mUserDefinedScanInterval = KDefaultUserDefinedScanInterval;
     mUserDefinedItem = NULL;
     
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_INITIALISE_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_INITIALISE_EXIT );
 }
 
 /*!
@@ -114,7 +116,7 @@
 
 void CpWlanSettingsGroupItemData::createWlanSettingItems()
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_CREATEWLANSETTINITEMS_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_CREATEWLANSETTINGITEMS_ENTRY );
     
     mJoinWlanItem = new CpSettingFormItemData(
         HbDataFormModelItem::ComboBoxItem,
@@ -172,11 +174,17 @@
 
     mScanNetworkItem->setContentWidgetData("currentIndex", scanType);
 
-    if (scanType == WlanSettings::EScanNetworkUserDefined) {
+    //In case of PSM mode for device user-defined value is not 
+    //allowed,make it automatic forcefully.
+    if (mWlanSettings->isDevicePowerSavingEnabled()) {
+        mScanNetworkItem->setContentWidgetData(
+            "currentIndex",
+            WlanSettings::EScanNetworkAuto);
+        mScanNetworkItem->setContentWidgetData("enabled", false);
+    } else if (scanType == WlanSettings::EScanNetworkUserDefined) {
         createScanIntervalItem();
-        this->appendChild(mUserDefinedItem);
     }
-
+    
     mPowerSavingItem = new CpSettingFormItemData(
         HbDataFormModelItem::ComboBoxItem,
         hbTrId("txt_occ_setlabel_power_saving"));
@@ -195,7 +203,7 @@
 
     mPowerSavingItem->setContentWidgetData(
         "currentIndex",
-        mWlanSettings->isPowerSavingEnabled());
+        mWlanSettings->isWlanPowerSavingEnabled());
 
     mItemDataHelper.addConnection(
         mPowerSavingItem,
@@ -205,7 +213,7 @@
 
     this->appendChild(mPowerSavingItem);
 
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_CREATEWLANSETTINITEMS_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_CREATEWLANSETTINGITEMS_EXIT );
 }
 
 /*!
@@ -214,143 +222,204 @@
 
 void CpWlanSettingsGroupItemData::createScanIntervalItem()
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_CREATESCANINTERVALITEM_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_CREATESCANINTERVALITEM_ENTRY );
     
-    mUserDefinedItem = new CpSettingFormItemData(
-        HbDataFormModelItem::SliderItem,
-        hbTrId("txt_occ_setlabel_scan_interval_minutes"));
-
-    mUserDefinedItem->setContentWidgetData("maximum", KMaximumScanInterval);
-    mUserDefinedItem->setContentWidgetData("minimum", KMinimumScanInterval);
-    mUserDefinedItem->setContentWidgetData("toolTipVisible", KEnableOption);
-    mUserDefinedItem->setContentWidgetData("tracking", KEnableOption);
-
-    mItemDataHelper.addConnection(
-        mUserDefinedItem,
-        SIGNAL(valueChanged (int)),
-        this,
-        SLOT(scanValueChanged (int)));
+    //Add Scan Interval Slider, if it doesn't already exist.
+    if (this->childCount() < KMaxWidgets) {
+        mUserDefinedItem = new CpSettingFormItemData(
+            HbDataFormModelItem::SliderItem,
+            hbTrId("txt_occ_setlabel_scan_interval_minutes"));
+    
+        mUserDefinedItem->setContentWidgetData("maximum", WlanSettings::ScanNetworkMax);
+        mUserDefinedItem->setContentWidgetData("minimum", WlanSettings::ScanNetworkMin);
+        mUserDefinedItem->setContentWidgetData("toolTipVisible", KEnableOption);
+        mUserDefinedItem->setContentWidgetData("tracking", KEnableOption);
     
-    mItemDataHelper.addConnection(
-        mUserDefinedItem,
-        SIGNAL(sliderReleased ()),
-        this,
-        SLOT(scanSliderReleased ()));
+        mItemDataHelper.addConnection(
+            mUserDefinedItem,
+            SIGNAL(valueChanged (int)),
+            this,
+            SLOT(scanValueChanged (int)));
+        
+        mItemDataHelper.addConnection(
+            mUserDefinedItem,
+            SIGNAL(sliderReleased ()),
+            this,
+            SLOT(scanSliderReleased ()));
+        
+        mItemDataHelper.addConnection(
+            mUserDefinedItem,
+            SIGNAL(sliderPressed ()),
+            this,
+            SLOT(scanSliderPressed ()));
+
+        int interval = mWlanSettings->scanInterval();
+        if (interval == WlanSettings::ScanNetworkAuto) {
+            interval = mUserDefinedScanInterval;
+        }
+        mUserDefinedItem->setContentWidgetData("value", interval);
     
-    mItemDataHelper.addConnection(
-        mUserDefinedItem,
-        SIGNAL(sliderPressed ()),
-        this,
-        SLOT(scanSliderPressed ()));
+        this->insertChild(KSliderIndex, mUserDefinedItem);
+    }
 
-    mScanInterval = mWlanSettings->scanInterval();
-
-    mUserDefinedItem->setContentWidgetData("value", mScanInterval);
-    
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_CREATESCANINTERVALITEM_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_CREATESCANINTERVALITEM_EXIT );
 }
 
 /*!
-    Slot for handling pressed singal of scan interval slider widget.
+    Removes the slider widget, if it exists.
+*/
+
+void CpWlanSettingsGroupItemData::removeScanIntervalItem()
+{
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_REMOVESCANINTERVALITEM_ENTRY );
+    
+    if (KMaxWidgets == this->childCount()) {
+        this->removeChild(KSliderIndex);
+        mUserDefinedItem = NULL;    //removeChild() will delete the item.
+    }
+
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_REMOVESCANINTERVALITEM_EXIT );
+}
+
+/*!
+    Slot for handling pressed signal of scan interval slider widget.
 */
 
 void CpWlanSettingsGroupItemData::scanSliderPressed()
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERPRESSED_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERPRESSED_ENTRY );
+
+    int interval = mWlanSettings->scanInterval();
+    if (interval == WlanSettings::ScanNetworkAuto) {
+        interval = mUserDefinedScanInterval;
+    }
+    mUserDefinedItem->setContentWidgetData(
+        "text",
+        QString("%1").arg(interval));
     
-    mUserDefinedItem->setContentWidgetData("text",QString("%1").arg(mScanInterval));
-    
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERPRESSED_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERPRESSED_EXIT );
 }
 
 /*!
-    Slot for handling value changed singal of scan interval slider widget.
+    Slot for handling value changed signal of scan interval slider widget.
 */
 
 void CpWlanSettingsGroupItemData::scanValueChanged(int value)
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_SCANVALUECHANGED_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANVALUECHANGED_ENTRY );
     
     mUserDefinedItem->setContentWidgetData("text",QString("%1").arg(value));
-    mScanInterval = value;
+    mUserDefinedScanInterval = value;
     
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_SCANVALUECHANGED_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANVALUECHANGED_EXIT );
 }
 
 /*!
-    Slot for handling Released singal of scan interval slider widget.
+    Slot for handling Released signal of scan interval slider widget.
     Current value will be commited to database.
 */
 
 void CpWlanSettingsGroupItemData::scanSliderReleased()
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERRELEASED_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERRELEASED_ENTRY );
     
-    mWlanSettings->setWlanScanInterval(mScanInterval);
+    mWlanSettings->setWlanScanInterval(mUserDefinedScanInterval);
     
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERRELEASED_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERRELEASED_EXIT );
 }
 
 /*!
-    Slot for handling item changed singal of Scan for network combo box widget.
+    Slot for handling item changed signal of Scan for network combo box widget.
 */
 
 void CpWlanSettingsGroupItemData::scanItemChanged(const QString &text)
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_SCANITEMCHANGED_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANITEMCHANGED_ENTRY );
     
     if (hbTrId("txt_occ_setlabel_scan_for_networks_val_userdefine") == text) {
-        //In case of PSM mode for device user-defined value is not 
-        //allowed,make it automatic forcefully.
-        if (mWlanSettings->isPsmEnabled()) {
-            //Need to check for dimming of the combobox option.
-            mScanNetworkItem->setContentWidgetData("currentIndex",
-                    WlanSettings::EScanNetworkAuto);
-        }
-        else {
-            //Add Scan Interval Slider, if it was not added.
-            if (this->childCount() < KMaxWidgets) {
-                createScanIntervalItem();
-                this->insertChild(KSliderIndex,mUserDefinedItem);
-                mWlanSettings->setWlanScanInterval(mWlanSettings->scanInterval());
-            }
-        }
-    }
-    else {
-        //Remove Scan Interval slider, if user selects automatic option
-        //for Scan network setting and if slider was added earlier.
-        if (KMaxWidgets == this->childCount()) {
-            this->removeChild(KSliderIndex);
-            mUserDefinedItem = NULL;    //removeChild() will delete the item.
-            mWlanSettings->setWlanScanInterval(KWlanSettingsScanNetworkAuto);
-        }
+        // User defined mode
+        mWlanSettings->setWlanScanInterval(mUserDefinedScanInterval);
+        createScanIntervalItem();
+    } else {
+        // Automatic mode
+        removeScanIntervalItem();
+        mWlanSettings->setWlanScanInterval(WlanSettings::ScanNetworkAuto);
     }
     
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_SCANITEMCHANGED_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANITEMCHANGED_EXIT );
 }
 
 /*!
-    Slot for handling item changed singal of Power saving combo box widget.
+    Slot for handling item changed signal of Power saving combo box widget.
 */
 
 void CpWlanSettingsGroupItemData::powerSavingItemChanged(int index)
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_POWERSAVINGITEMCHANGED_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_POWERSAVINGITEMCHANGED_ENTRY );
     
     mWlanSettings->setWlanPowerSaving(index);
     
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_POWERSAVINGITEMCHANGED_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_POWERSAVINGITEMCHANGED_EXIT );
 }
 
 /*!
-    Slot for handling item changed singal of Join WLAN networks combo box widget.
+    Slot for handling item changed signal of Join WLAN networks combo box widget.
 */
 
 void CpWlanSettingsGroupItemData::joinWlanItemChanged(int index)
 {
-    OstTraceFunctionEntry1(CPWLANSETTINGSGROUPITEMDATA_JOINWLANITEMCHANGED_ENTRY, this);
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_JOINWLANITEMCHANGED_ENTRY );
     
     mWlanSettings->setJoinWlanMode(index);
     
-    OstTraceFunctionExit1(CPWLANSETTINGSGROUPITEMDATA_JOINWLANITEMCHANGED_EXIT, this);
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_JOINWLANITEMCHANGED_EXIT );
 }
+
+/*!
+    Slot for handling device power saving mode update signal.
+*/
+
+void CpWlanSettingsGroupItemData::devicePowerSavingChanged()
+{
+    OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_DEVICEPOWERSAVINGCHANGED_ENTRY );
+    
+    // Disconnect the handling of currentIndexChanged, because
+    // we will programmatically update the index in this function.
+    mItemDataHelper.removeConnection(
+        mScanNetworkItem,
+        SIGNAL(currentIndexChanged (const QString &)),
+        this,
+        SLOT(scanItemChanged (const QString &)));
+    
+    if (mWlanSettings->isDevicePowerSavingEnabled()) {
+        // If device power saving mode is activated, force the scan
+        // setting to automatic, and disable the setting combo box
+        mScanNetworkItem->setContentWidgetData(
+            "currentIndex",
+            WlanSettings::EScanNetworkAuto);
+        mScanNetworkItem->setContentWidgetData("enabled", false);
+        removeScanIntervalItem();
+    } else {
+        // If device power saving mode is deactivated, enable the
+        // setting combo box, and make sure the setting is in the
+        // same mode it was before power saving mode was activated
+        mScanNetworkItem->setContentWidgetData("enabled", true);
+        if (mWlanSettings->scanNetworkType() ==
+            WlanSettings::EScanNetworkUserDefined) {
+            mScanNetworkItem->setContentWidgetData(
+                "currentIndex",
+                WlanSettings::EScanNetworkUserDefined);
+            createScanIntervalItem();
+        }
+    }
+
+    // Reconnect the handling of currentIndexChanged since we are
+    // done with the updates.
+    mItemDataHelper.addConnection(
+        mScanNetworkItem,
+        SIGNAL(currentIndexChanged (const QString &)),
+        this,
+        SLOT(scanItemChanged (const QString &)));
+
+    OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_DEVICEPOWERSAVINGCHANGED_EXIT );
+}