wlanutilities/cpwlansettingsplugin/src/cpwlansettingsgroupitemdata.cpp
branchRCL_3
changeset 25 f28ada11abbf
parent 24 63be7eb3fc78
equal deleted inserted replaced
24:63be7eb3fc78 25:f28ada11abbf
     1 /*
       
     2 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
       
     3 * All rights reserved.
       
     4 * This component and the accompanying materials are made available
       
     5 * under the terms of "Eclipse Public License v1.0""
       
     6 * which accompanies this distribution, and is available
       
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
       
     8 *
       
     9 * Initial Contributors:
       
    10 * Nokia Corporation - initial contribution.
       
    11 *
       
    12 * Contributors:
       
    13 *
       
    14 * Description:  
       
    15 *
       
    16 */
       
    17 
       
    18 
       
    19 // System includes
       
    20 
       
    21 #include <QStringList>
       
    22 #include <cpsettingformitemdata.h>
       
    23 
       
    24 // User includes
       
    25 
       
    26 #include "cpwlansettingsgroupitemdata.h"
       
    27 #include "wlansettings.h"
       
    28 
       
    29 #include "OstTraceDefinitions.h"
       
    30 #ifdef OST_TRACE_COMPILER_IN_USE
       
    31 #include "cpwlansettingsgroupitemdataTraces.h"
       
    32 #endif
       
    33 
       
    34 /*!
       
    35     \class CpWlanSettingsGroupItemData
       
    36     \brief CpWlanSettingsGroupItemData class creates all widgets required for Manage 
       
    37     WLAN Settings.
       
    38 */
       
    39 
       
    40 // External function prototypes
       
    41 
       
    42 // Local constants
       
    43 
       
    44 //! To Enable the setting of a widget propery. */
       
    45 static const int KEnableOption = 1;
       
    46 //! Maximum widgets allowed for this Item Data. */
       
    47 static const int KMaxWidgets = 4;
       
    48 //! Index of Slider widget for Scan Interval. */
       
    49 static const int KSliderIndex = 2;
       
    50 //! Default value for user defined scan interval
       
    51 static const int KDefaultUserDefinedScanInterval = 5;
       
    52 
       
    53 
       
    54 // ======== MEMBER FUNCTIONS ========
       
    55 
       
    56 /*!
       
    57     Constructor.
       
    58 */
       
    59 
       
    60 CpWlanSettingsGroupItemData::CpWlanSettingsGroupItemData(
       
    61         CpItemDataHelper &itemDataHelper) :
       
    62     CpSettingFormItemData(HbDataFormModelItem::GroupItem, hbTrId(
       
    63             "txt_occ_subhead_wlan_settings")),
       
    64             mItemDataHelper(itemDataHelper)
       
    65 {
       
    66     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_ENTRY );
       
    67 
       
    68     initialise();
       
    69     createWlanSettingItems();
       
    70 
       
    71     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_EXIT );
       
    72 }
       
    73 
       
    74 /*!
       
    75     Destructor.
       
    76 */
       
    77 
       
    78 CpWlanSettingsGroupItemData::~CpWlanSettingsGroupItemData()
       
    79 {
       
    80     OstTraceFunctionEntry0( DUP1_CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_ENTRY );
       
    81     OstTraceFunctionExit0( DUP1_CPWLANSETTINGSGROUPITEMDATA_CPWLANSETTINGSGROUPITEMDATA_EXIT );
       
    82 }
       
    83 
       
    84 /*!
       
    85     Initialises the member variables and reads the values of WLAN Settings.
       
    86 */
       
    87 
       
    88 void CpWlanSettingsGroupItemData::initialise()
       
    89 {
       
    90     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_INITIALISE_ENTRY );
       
    91     
       
    92     mWlanSettings.reset(new WlanSettings);
       
    93     
       
    94     bool connectStatus = connect(
       
    95         mWlanSettings.data(),
       
    96         SIGNAL(devicePowerSavingUpdated()),
       
    97         this,
       
    98         SLOT(devicePowerSavingChanged()));
       
    99     Q_ASSERT(connectStatus);
       
   100 
       
   101     //Error needs to be handled.
       
   102     int error = mWlanSettings->init();
       
   103     
       
   104     //Error needs to be handled.
       
   105     error = mWlanSettings->loadSettings();
       
   106 
       
   107     mUserDefinedScanInterval = KDefaultUserDefinedScanInterval;
       
   108     mUserDefinedItem = NULL;
       
   109     
       
   110     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_INITIALISE_EXIT );
       
   111 }
       
   112 
       
   113 /*!
       
   114     Creates the Widgets for displaying WLAN Settings.
       
   115 */
       
   116 
       
   117 void CpWlanSettingsGroupItemData::createWlanSettingItems()
       
   118 {
       
   119     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_CREATEWLANSETTINGITEMS_ENTRY );
       
   120     
       
   121     mJoinWlanItem = new CpSettingFormItemData(
       
   122         HbDataFormModelItem::ComboBoxItem,
       
   123         hbTrId("txt_occ_setlabel_join_wlan_networks"));
       
   124     // name the object for test automation purposes
       
   125     mJoinWlanItem->setObjectName("switchToWlan");
       
   126     
       
   127     QStringList joinWlanItems;
       
   128     
       
   129     joinWlanItems.append(
       
   130         hbTrId("txt_occ_setlabel_join_wlan_networks_val_known"));
       
   131     
       
   132     joinWlanItems.append(
       
   133         hbTrId("txt_occ_setlabel_join_wlan_networks_val_manual"));
       
   134 
       
   135     mJoinWlanItem->setContentWidgetData("items", joinWlanItems);
       
   136 
       
   137     mItemDataHelper.addConnection(
       
   138         mJoinWlanItem,
       
   139         SIGNAL(currentIndexChanged (int)),
       
   140         this,
       
   141         SLOT(joinWlanItemChanged (int)));
       
   142 
       
   143     mJoinWlanItem->setContentWidgetData(
       
   144         "currentIndex",
       
   145         mWlanSettings->joinWlanMode());
       
   146 
       
   147     this->appendChild(mJoinWlanItem);
       
   148 
       
   149     mScanNetworkItem = new CpSettingFormItemData(
       
   150         HbDataFormModelItem::ComboBoxItem,
       
   151         hbTrId("txt_occ_setlabel_scan_for_networks"));
       
   152     // name the object for test automation purposes
       
   153     mScanNetworkItem->setObjectName("scanNetworkItem");
       
   154     
       
   155     QStringList scanNetworkItems;
       
   156     
       
   157     scanNetworkItems.append(
       
   158         hbTrId("txt_occ_setlabel_scan_for_networks_val_automatic"));
       
   159     
       
   160     scanNetworkItems.append(
       
   161         hbTrId("txt_occ_setlabel_scan_for_networks_val_userdefine"));
       
   162 
       
   163     mScanNetworkItem->setContentWidgetData("items", scanNetworkItems);
       
   164 
       
   165     mItemDataHelper.addConnection(
       
   166         mScanNetworkItem,
       
   167         SIGNAL(currentIndexChanged (const QString &)),
       
   168         this,
       
   169         SLOT(scanItemChanged (const QString &)));
       
   170 
       
   171     this->appendChild(mScanNetworkItem);
       
   172 
       
   173     WlanSettings::ScanNetworkType scanType = mWlanSettings->scanNetworkType();
       
   174 
       
   175     mScanNetworkItem->setContentWidgetData("currentIndex", scanType);
       
   176 
       
   177     //In case of PSM mode for device user-defined value is not 
       
   178     //allowed,make it automatic forcefully.
       
   179     if (mWlanSettings->isDevicePowerSavingEnabled()) {
       
   180         mScanNetworkItem->setContentWidgetData(
       
   181             "currentIndex",
       
   182             WlanSettings::EScanNetworkAuto);
       
   183         mScanNetworkItem->setContentWidgetData("enabled", false);
       
   184     } else if (scanType == WlanSettings::EScanNetworkUserDefined) {
       
   185         createScanIntervalItem();
       
   186     }
       
   187     
       
   188     mPowerSavingItem = new CpSettingFormItemData(
       
   189         HbDataFormModelItem::ComboBoxItem,
       
   190         hbTrId("txt_occ_setlabel_power_saving"));
       
   191     // name the object for test automation purposes
       
   192     mPowerSavingItem->setObjectName("powerSaving");
       
   193     
       
   194     QStringList powerSavingItems;
       
   195     
       
   196     powerSavingItems.append(
       
   197         hbTrId("txt_occ_setlabel_power_saving_val_disabled"));
       
   198     
       
   199     powerSavingItems.append(
       
   200         hbTrId("txt_occ_setlabel_power_saving_val_enabled"));
       
   201 
       
   202     mPowerSavingItem->setContentWidgetData("items", powerSavingItems);
       
   203 
       
   204     mPowerSavingItem->setContentWidgetData(
       
   205         "currentIndex",
       
   206         mWlanSettings->isWlanPowerSavingEnabled());
       
   207 
       
   208     mItemDataHelper.addConnection(
       
   209         mPowerSavingItem,
       
   210         SIGNAL(currentIndexChanged (int)),
       
   211         this,
       
   212         SLOT(powerSavingItemChanged (int)));
       
   213 
       
   214     this->appendChild(mPowerSavingItem);
       
   215 
       
   216     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_CREATEWLANSETTINGITEMS_EXIT );
       
   217 }
       
   218 
       
   219 /*!
       
   220     Creates the slider widget for displaying scan interval value.
       
   221 */
       
   222 
       
   223 void CpWlanSettingsGroupItemData::createScanIntervalItem()
       
   224 {
       
   225     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_CREATESCANINTERVALITEM_ENTRY );
       
   226     
       
   227     //Add Scan Interval Slider, if it doesn't already exist.
       
   228     if (this->childCount() < KMaxWidgets) {
       
   229         mUserDefinedItem = new CpSettingFormItemData(
       
   230             HbDataFormModelItem::SliderItem,
       
   231             hbTrId("txt_occ_setlabel_scan_interval_minutes"));
       
   232     
       
   233         mUserDefinedItem->setContentWidgetData("maximum", WlanSettings::ScanNetworkMax);
       
   234         mUserDefinedItem->setContentWidgetData("minimum", WlanSettings::ScanNetworkMin);
       
   235         mUserDefinedItem->setContentWidgetData("toolTipVisible", KEnableOption);
       
   236         mUserDefinedItem->setContentWidgetData("tracking", KEnableOption);
       
   237     
       
   238         mItemDataHelper.addConnection(
       
   239             mUserDefinedItem,
       
   240             SIGNAL(valueChanged (int)),
       
   241             this,
       
   242             SLOT(scanValueChanged (int)));
       
   243         
       
   244         mItemDataHelper.addConnection(
       
   245             mUserDefinedItem,
       
   246             SIGNAL(sliderReleased ()),
       
   247             this,
       
   248             SLOT(scanSliderReleased ()));
       
   249         
       
   250         mItemDataHelper.addConnection(
       
   251             mUserDefinedItem,
       
   252             SIGNAL(sliderPressed ()),
       
   253             this,
       
   254             SLOT(scanSliderPressed ()));
       
   255 
       
   256         int interval = mWlanSettings->scanInterval();
       
   257         if (interval == WlanSettings::ScanNetworkAuto) {
       
   258             interval = mUserDefinedScanInterval;
       
   259         }
       
   260         mUserDefinedItem->setContentWidgetData("value", interval);
       
   261     
       
   262         this->insertChild(KSliderIndex, mUserDefinedItem);
       
   263     }
       
   264 
       
   265     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_CREATESCANINTERVALITEM_EXIT );
       
   266 }
       
   267 
       
   268 /*!
       
   269     Removes the slider widget, if it exists.
       
   270 */
       
   271 
       
   272 void CpWlanSettingsGroupItemData::removeScanIntervalItem()
       
   273 {
       
   274     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_REMOVESCANINTERVALITEM_ENTRY );
       
   275     
       
   276     if (KMaxWidgets == this->childCount()) {
       
   277         this->removeChild(KSliderIndex);
       
   278         mUserDefinedItem = NULL;    //removeChild() will delete the item.
       
   279     }
       
   280 
       
   281     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_REMOVESCANINTERVALITEM_EXIT );
       
   282 }
       
   283 
       
   284 /*!
       
   285     Slot for handling pressed signal of scan interval slider widget.
       
   286 */
       
   287 
       
   288 void CpWlanSettingsGroupItemData::scanSliderPressed()
       
   289 {
       
   290     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERPRESSED_ENTRY );
       
   291 
       
   292     int interval = mWlanSettings->scanInterval();
       
   293     if (interval == WlanSettings::ScanNetworkAuto) {
       
   294         interval = mUserDefinedScanInterval;
       
   295     }
       
   296     mUserDefinedItem->setContentWidgetData(
       
   297         "text",
       
   298         QString("%1").arg(interval));
       
   299     
       
   300     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERPRESSED_EXIT );
       
   301 }
       
   302 
       
   303 /*!
       
   304     Slot for handling value changed signal of scan interval slider widget.
       
   305 */
       
   306 
       
   307 void CpWlanSettingsGroupItemData::scanValueChanged(int value)
       
   308 {
       
   309     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANVALUECHANGED_ENTRY );
       
   310     
       
   311     mUserDefinedItem->setContentWidgetData("text",QString("%1").arg(value));
       
   312     mUserDefinedScanInterval = value;
       
   313     
       
   314     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANVALUECHANGED_EXIT );
       
   315 }
       
   316 
       
   317 /*!
       
   318     Slot for handling Released signal of scan interval slider widget.
       
   319     Current value will be commited to database.
       
   320 */
       
   321 
       
   322 void CpWlanSettingsGroupItemData::scanSliderReleased()
       
   323 {
       
   324     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERRELEASED_ENTRY );
       
   325     
       
   326     mWlanSettings->setWlanScanInterval(mUserDefinedScanInterval);
       
   327     
       
   328     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANSLIDERRELEASED_EXIT );
       
   329 }
       
   330 
       
   331 /*!
       
   332     Slot for handling item changed signal of Scan for network combo box widget.
       
   333 */
       
   334 
       
   335 void CpWlanSettingsGroupItemData::scanItemChanged(const QString &text)
       
   336 {
       
   337     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_SCANITEMCHANGED_ENTRY );
       
   338     
       
   339     if (hbTrId("txt_occ_setlabel_scan_for_networks_val_userdefine") == text) {
       
   340         // User defined mode
       
   341         mWlanSettings->setWlanScanInterval(mUserDefinedScanInterval);
       
   342         createScanIntervalItem();
       
   343     } else {
       
   344         // Automatic mode
       
   345         removeScanIntervalItem();
       
   346         mWlanSettings->setWlanScanInterval(WlanSettings::ScanNetworkAuto);
       
   347     }
       
   348     
       
   349     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_SCANITEMCHANGED_EXIT );
       
   350 }
       
   351 
       
   352 /*!
       
   353     Slot for handling item changed signal of Power saving combo box widget.
       
   354 */
       
   355 
       
   356 void CpWlanSettingsGroupItemData::powerSavingItemChanged(int index)
       
   357 {
       
   358     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_POWERSAVINGITEMCHANGED_ENTRY );
       
   359     
       
   360     mWlanSettings->setWlanPowerSaving(index);
       
   361     
       
   362     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_POWERSAVINGITEMCHANGED_EXIT );
       
   363 }
       
   364 
       
   365 /*!
       
   366     Slot for handling item changed signal of Join WLAN networks combo box widget.
       
   367 */
       
   368 
       
   369 void CpWlanSettingsGroupItemData::joinWlanItemChanged(int index)
       
   370 {
       
   371     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_JOINWLANITEMCHANGED_ENTRY );
       
   372     
       
   373     mWlanSettings->setJoinWlanMode(index);
       
   374     
       
   375     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_JOINWLANITEMCHANGED_EXIT );
       
   376 }
       
   377 
       
   378 /*!
       
   379     Slot for handling device power saving mode update signal.
       
   380 */
       
   381 
       
   382 void CpWlanSettingsGroupItemData::devicePowerSavingChanged()
       
   383 {
       
   384     OstTraceFunctionEntry0( CPWLANSETTINGSGROUPITEMDATA_DEVICEPOWERSAVINGCHANGED_ENTRY );
       
   385     
       
   386     // Disconnect the handling of currentIndexChanged, because
       
   387     // we will programmatically update the index in this function.
       
   388     mItemDataHelper.removeConnection(
       
   389         mScanNetworkItem,
       
   390         SIGNAL(currentIndexChanged (const QString &)),
       
   391         this,
       
   392         SLOT(scanItemChanged (const QString &)));
       
   393     
       
   394     if (mWlanSettings->isDevicePowerSavingEnabled()) {
       
   395         // If device power saving mode is activated, force the scan
       
   396         // setting to automatic, and disable the setting combo box
       
   397         mScanNetworkItem->setContentWidgetData(
       
   398             "currentIndex",
       
   399             WlanSettings::EScanNetworkAuto);
       
   400         mScanNetworkItem->setContentWidgetData("enabled", false);
       
   401         removeScanIntervalItem();
       
   402     } else {
       
   403         // If device power saving mode is deactivated, enable the
       
   404         // setting combo box, and make sure the setting is in the
       
   405         // same mode it was before power saving mode was activated
       
   406         mScanNetworkItem->setContentWidgetData("enabled", true);
       
   407         if (mWlanSettings->scanNetworkType() ==
       
   408             WlanSettings::EScanNetworkUserDefined) {
       
   409             mScanNetworkItem->setContentWidgetData(
       
   410                 "currentIndex",
       
   411                 WlanSettings::EScanNetworkUserDefined);
       
   412             createScanIntervalItem();
       
   413         }
       
   414     }
       
   415 
       
   416     // Reconnect the handling of currentIndexChanged since we are
       
   417     // done with the updates.
       
   418     mItemDataHelper.addConnection(
       
   419         mScanNetworkItem,
       
   420         SIGNAL(currentIndexChanged (const QString &)),
       
   421         this,
       
   422         SLOT(scanItemChanged (const QString &)));
       
   423 
       
   424     OstTraceFunctionExit0( CPWLANSETTINGSGROUPITEMDATA_DEVICEPOWERSAVINGCHANGED_EXIT );
       
   425 }