--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cpwlanapplugin/src/cpwlanapview.cpp Tue Aug 31 15:35:44 2010 +0300
@@ -0,0 +1,856 @@
+/*
+* Copyright (c) 2010 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:
+* Control Panel WLAN AP settings view implementation.
+*
+*/
+
+// System includes
+#include <QString>
+#include <QVariant>
+#include <QDir>
+#include <QPluginLoader>
+#include <HbMainWindow>
+#include <HbMenu>
+#include <HbDataForm>
+#include <HbDataFormModel>
+#include <HbDataFormViewItem>
+#include <HbLineEdit>
+#include <HbEditorInterface>
+#include <HbUrlFilter>
+#include <HbPopup>
+#include <HbMessageBox>
+#include <HbAction>
+#include <HbStringUtil>
+#include <wlanmgmtcommon.h>
+#include <cpitemdatahelper.h>
+#include <cpsettingformitemdata.h>
+#include <cppluginutility.h>
+#include <cmconnectionmethod_shim.h>
+#include <cpwlansecurityplugininterface.h>
+
+// User includes
+#include "cpwlanapplugin.h"
+#include "cpwlanapview.h"
+#include "cpwlanapadvancedview.h"
+#include "OstTraceDefinitions.h"
+#ifdef OST_TRACE_COMPILER_IN_USE
+#include "cpwlanapviewTraces.h"
+#endif
+
+/*!
+ \class CpWlanApView
+ \brief This class implements the WLAN AP Control Panel settings view.
+*/
+
+// External function prototypes
+
+// Local constants
+
+static const QString wlanSecurityPluginsDir =
+ "\\resource\\qt\\plugins\\controlpanel\\wlansecurity";
+
+// ======== LOCAL FUNCTIONS ========
+
+// ======== MEMBER FUNCTIONS ========
+
+/*!
+ Constructor.
+*/
+CpWlanApView::CpWlanApView(
+ CmConnectionMethodShim *cmConnectionMethod,
+ QGraphicsItem *parent) :
+ CpBaseSettingView(0, parent),
+ mForm(0),
+ mModel(0),
+ mItemDataHelper(0),
+ mApSettingsGroupItem(0),
+ mConnectionNameItem(0),
+ mWlanNetworkNameItem(0),
+ mNetworkStatusItem(0),
+ mNetworkModeItem(0),
+ mAdHocChannelItem(0),
+ mSecurityModeItem(0),
+ mHomepageItem(0),
+ mSecuritySettingsGroupItem(0),
+ mAdvancedSettingsAction(0),
+ mCmConnectionMethod(cmConnectionMethod),
+ mMessageBox(0)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_CPWLANAPVIEW_ENTRY);
+
+ // Add "Advanced settings" menu item
+ HbMenu *menu = this->menu();
+ mAdvancedSettingsAction = menu->addAction(
+ hbTrId("txt_occ_opt_advanced_settings"));
+ bool status = connect(
+ menu,
+ SIGNAL(triggered(HbAction*)),
+ this,
+ SLOT(menuActionTriggered(HbAction*)));
+ Q_ASSERT(status);
+
+ // Construct WLAN AP settings UI
+ mForm = new HbDataForm();
+ this->setWidget(mForm);
+ CpPluginUtility::addCpItemPrototype(mForm);
+ mModel = new HbDataFormModel(mForm);
+
+ // The parameter given as 0 is a HbDataForm pointer, not parent
+ mItemDataHelper = new CpItemDataHelper(0);
+ mItemDataHelper->setParent(this);
+
+ // Add access point settings group
+ createAccessPointSettingsGroup();
+
+ mItemDataHelper->bindToForm(mForm);
+ mForm->setModel(mModel);
+
+ status = connect(
+ mForm,
+ SIGNAL(itemShown(const QModelIndex)),
+ this,
+ SLOT(setEditorPreferences(const QModelIndex)));
+ Q_ASSERT(status);
+
+ // Expand access point settings group
+ mForm->setExpanded(mModel->indexFromItem(mApSettingsGroupItem), TRUE);
+
+ // Add security settings group if necessary
+ updateSecurityGroup(
+ mSecurityModeItem->contentWidgetData("currentIndex").toInt());
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_CPWLANAPVIEW_EXIT);
+}
+
+/*!
+ Destructor.
+*/
+CpWlanApView::~CpWlanApView()
+{
+ OstTraceFunctionEntry0(DUP1_CPWLANAPVIEW_CPWLANAPVIEW_ENTRY);
+
+ OstTraceFunctionExit0(DUP1_CPWLANAPVIEW_CPWLANAPVIEW_EXIT);
+}
+
+/*!
+ Creates the WLAN "Access point settings" group.
+*/
+void CpWlanApView::createAccessPointSettingsGroup()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_CREATEACCESSPOINTSETTINGSGROUP_ENTRY);
+
+ // Access point settings group
+ mApSettingsGroupItem = new HbDataFormModelItem(
+ HbDataFormModelItem::GroupItem,
+ hbTrId("txt_occ_subhead_access_point_settings"));
+ mModel->appendDataFormItem(mApSettingsGroupItem);
+
+ // Connection name
+ mConnectionNameItem = new CpSettingFormItemData(
+ HbDataFormModelItem::TextItem,
+ hbTrId("txt_occ_setlabel_connection_name"));
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mConnectionNameItem,
+ SIGNAL(editingFinished()),
+ this,
+ SLOT(connectionNameChanged()));
+ mConnectionNameItem->setContentWidgetData("objectName", "connectionNameEdit");
+ mApSettingsGroupItem->appendChild(mConnectionNameItem);
+
+ // WLAN network name
+ mWlanNetworkNameItem = new CpSettingFormItemData(
+ HbDataFormModelItem::TextItem,
+ hbTrId("txt_occ_setlabel_wlan_network_name"));
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mWlanNetworkNameItem,
+ SIGNAL(editingFinished()),
+ this,
+ SLOT(wlanNetworkNameChanged()));
+ mWlanNetworkNameItem->setContentWidgetData("objectName", "wlanNetworkNameEdit");
+ mApSettingsGroupItem->appendChild(mWlanNetworkNameItem);
+
+ // Network status
+ mNetworkStatusItem = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_network_status"));
+ // Add items to combobox
+ QStringList networkStatusItems;
+ networkStatusItems
+ << hbTrId("txt_occ_setlabel_network_status_val_public")
+ << hbTrId("txt_occ_setlabel_network_status_val_hidden");
+ mNetworkStatusItem->setContentWidgetData("items", networkStatusItems);
+ // Construct map to link item indexes to setting values
+ mNetworkStatusMap.insert(0, false); // public
+ mNetworkStatusMap.insert(1, true); // hidden
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mNetworkStatusItem,
+ SIGNAL(currentIndexChanged(int)),
+ this,
+ SLOT(networkStatusChanged(int)));
+ mNetworkStatusItem->setContentWidgetData("objectName", "networkStatusCB");
+ mApSettingsGroupItem->appendChild(mNetworkStatusItem);
+
+ // Network mode
+ mNetworkModeItem = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_wlan_network_mode"));
+ // Add items to combobox
+ QStringList networkModeItems;
+ networkModeItems
+ << hbTrId("txt_occ_setlabel_wlan_network_mode_val_infrastruct")
+ << hbTrId("txt_occ_setlabel_wlan_network_mode_val_adhoc");
+ mNetworkModeItem->setContentWidgetData("items", networkModeItems);
+ // Construct map to link item indexes to setting values
+ mNetworkModeMap.insert(0, CMManagerShim::Infra); // infrastructure
+ mNetworkModeMap.insert(1, CMManagerShim::Adhoc); // adhoc
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mNetworkModeItem,
+ SIGNAL(currentIndexChanged(int)),
+ this,
+ SLOT(networkModeChanged(int)));
+ mNetworkModeItem->setContentWidgetData("objectName", "networkModeCB");
+ mApSettingsGroupItem->appendChild(mNetworkModeItem);
+
+ // Ad-hoc channel
+ // Added dynamically according to set network mode
+
+ // Security mode
+ mSecurityModeItem = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_wlan_security_mode"));
+ // Security modes added dynamically according to set network mode
+
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mSecurityModeItem,
+ SIGNAL(currentIndexChanged(int)),
+ this,
+ SLOT(securityModeChanged(int)));
+ mSecurityModeItem->setContentWidgetData("objectName", "securityModeCB");
+ mApSettingsGroupItem->appendChild(mSecurityModeItem);
+
+ // Homepage
+ mHomepageItem = new CpSettingFormItemData(
+ HbDataFormModelItem::TextItem,
+ hbTrId("txt_occ_setlabel_homepage"));
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mHomepageItem,
+ SIGNAL(editingFinished()),
+ this,
+ SLOT(homepageChanged()));
+ mHomepageItem->setContentWidgetData("objectName", "homepageEdit");
+ mApSettingsGroupItem->appendChild(mHomepageItem);
+
+ // Read settings from CommsDat and update widgets
+ updateAccessPointSettingsGroup();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_CREATEACCESSPOINTSETTINGSGROUP_EXIT);
+}
+
+/*!
+ Reads attribute values and updates "Access point settings" group settings.
+*/
+void CpWlanApView::updateAccessPointSettingsGroup()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_UPDATEACCESSPOINTSETTINGSGROUP_ENTRY);
+
+ // Get attributes from CommsDat and set values to UI widgets
+
+ // Connection name
+ QString connectionName = mCmConnectionMethod->getStringAttribute(
+ CMManagerShim::CmName);
+ mConnectionNameItem->setContentWidgetData("text", connectionName);
+
+ // WLAN network name
+ QString networkName = mCmConnectionMethod->getStringAttribute(
+ CMManagerShim::WlanSSID);
+ mWlanNetworkNameItem->setContentWidgetData("text", networkName);
+
+ // Network status
+ bool scanSsid = mCmConnectionMethod->getBoolAttribute(
+ CMManagerShim::WlanScanSSID);
+ mNetworkStatusItem->setContentWidgetData(
+ "currentIndex",
+ mNetworkStatusMap.key(scanSsid));
+
+ // Network mode
+ CMManagerShim::WlanConnMode networkMode =
+ static_cast<CMManagerShim::WlanConnMode>
+ (mCmConnectionMethod->getIntAttribute(
+ CMManagerShim::WlanConnectionMode));
+ mNetworkModeItem->setContentWidgetData(
+ "currentIndex",
+ mNetworkModeMap.key(networkMode));
+
+ // Ad-hoc channel
+ updateAdHocChannelItem(networkMode);
+
+ // Security mode
+ updateSecurityModeItem(networkMode);
+
+ // Homepage
+ QString homepage = mCmConnectionMethod->getStringAttribute(
+ CMManagerShim::CmStartPage);
+ mHomepageItem->setContentWidgetData("text", homepage);
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_UPDATEACCESSPOINTSETTINGSGROUP_EXIT);
+}
+
+/*!
+ Loads all WLAN security plugins.
+*/
+void CpWlanApView::loadSecurityPlugins(
+ CMManagerShim::WlanConnMode networkMode)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_LOADSECURITYPLUGINS_ENTRY);
+
+ // Load security plugins
+ QList<CpWlanSecurityPluginInterface *> plugins;
+ QDir pluginsDir(wlanSecurityPluginsDir);
+ foreach (QString fileName, pluginsDir.entryList(QDir::Files)) {
+ QPluginLoader loader(pluginsDir.absoluteFilePath(fileName));
+ CpWlanSecurityPluginInterface *plugin =
+ qobject_cast<CpWlanSecurityPluginInterface *>(loader.instance());
+ if (plugin) {
+ // Sort items based on the orderNumber()
+ QList<CpWlanSecurityPluginInterface *>::iterator i;
+ for (i = plugins.begin(); i != plugins.end(); ++i) {
+ if ((*i)->orderNumber() > plugin->orderNumber()) {
+ plugins.insert(i, plugin);
+ plugin = NULL;
+ break;
+ }
+ }
+ if (plugin) {
+ plugins.append(plugin);
+ }
+ }
+ }
+
+ // Add security plugins to map. If network mode is ad-hoc, only WEP
+ // is allowed.
+ int i;
+ i = mSecurityModeMap.size();
+ foreach (CpWlanSecurityPluginInterface *plugin, plugins) {
+ if (networkMode != CMManagerShim::Adhoc
+ || plugin->securityMode() == CMManagerShim::WlanSecModeWep) {
+ mSecurityModeMap.insert(i, plugin);
+ i++;
+ }
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_LOADSECURITYPLUGINS_EXIT);
+}
+
+/*!
+ Updates the "Security settings" group.
+*/
+void CpWlanApView::updateSecurityGroup(int index)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_UPDATESECURITYGROUP_ENTRY);
+
+ // Remove old security settings group
+ if (mSecuritySettingsGroupItem) {
+ mModel->removeItem(mSecuritySettingsGroupItem);
+ mSecuritySettingsGroupItem = NULL;
+ }
+
+ // Add new security settings group
+ if (index > 0) {
+ // Get correct security plugin
+ CpWlanSecurityPluginInterface *plugin = mSecurityModeMap.value(index);
+ if (plugin) {
+ // Ask plugin to create the security group
+ plugin->setReference(
+ mCmConnectionMethod,
+ mCmConnectionMethod->getIntAttribute(CMManagerShim::CmId));
+ mSecuritySettingsGroupItem = plugin->uiInstance(*mItemDataHelper);
+ if (mSecuritySettingsGroupItem) {
+ // And add it to dataform
+ mModel->appendDataFormItem(mSecuritySettingsGroupItem);
+ }
+ }
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_UPDATESECURITYGROUP_EXIT);
+}
+
+/*!
+ Shows message box with "OK" button using given text.
+*/
+void CpWlanApView::showMessageBox(
+ HbMessageBox::MessageBoxType type,
+ const QString &text)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_SHOWMESSAGEBOX_ENTRY);
+
+ // Create a message box
+ mMessageBox = QSharedPointer<HbMessageBox>(new HbMessageBox(type));
+ mMessageBox->setText(text);
+ mMessageBox->setModal(true);
+ mMessageBox->setTimeout(HbPopup::NoTimeout);
+ mMessageBox->open();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_SHOWMESSAGEBOX_EXIT);
+}
+
+/*!
+ Tries to update connection method changes to CommsDat.
+ Returns "true" if success, "false" if some error happened.
+*/
+bool CpWlanApView::tryUpdate()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_TRYUPDATE_ENTRY);
+
+ // Try update
+ try {
+ mCmConnectionMethod->update();
+ }
+ catch (const std::exception&) {
+ // Handle error
+ handleUpdateError();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_TRYUPDATE_EXIT);
+ return false;
+ }
+
+ OstTraceFunctionExit0(DUP1_CPWLANAPVIEW_TRYUPDATE_EXIT);
+ return true;
+}
+
+/*!
+ Handles failed CommsDat update.
+ */
+void CpWlanApView::handleUpdateError()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_HANDLEUPDATEERROR_ENTRY);
+
+ // Show error note to user
+ showMessageBox(
+ HbMessageBox::MessageTypeWarning,
+ hbTrId("txt_occ_info_unable_to_save_setting"));
+ // Reload settings from CommsDat and update UI
+ try {
+ mCmConnectionMethod->refresh();
+ }
+ catch (const std::exception&) {
+ // Ignore error from refresh. Most likely this will not happen, but
+ // if it does, there isn't very much we can do.
+ OstTrace0(
+ TRACE_ERROR,
+ CPWLANAPPLUGIN_HANDLEUPDATEERROR,
+ "Refresh failed");
+ };
+ updateAccessPointSettingsGroup();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_HANDLEUPDATEERROR_EXIT);
+}
+
+/*!
+ Updates Ad-hoc channel item. Setting item is shown if network mode is
+ ad-hoc, otherwise it is not shown.
+ */
+void CpWlanApView::updateAdHocChannelItem(
+ CMManagerShim::WlanConnMode networkMode)
+{
+ if (networkMode == CMManagerShim::Infra) {
+ // Infrastructure
+ if (mAdHocChannelItem) {
+ mApSettingsGroupItem->removeChild(
+ mApSettingsGroupItem->indexOf(mAdHocChannelItem));
+ mAdHocChannelItem = NULL;
+ }
+ } else {
+ // Ad-hoc
+ if (!mAdHocChannelItem) {
+ // Ad-hoc channel item not shown, add it
+ mAdHocChannelItem = new CpSettingFormItemData(
+ HbDataFormModelItem::ComboBoxItem,
+ hbTrId("txt_occ_setlabel_adhoc_channel"));
+ // Add items to combobox
+ QStringList adHocChannelItems;
+ adHocChannelItems
+ << hbTrId("txt_occ_setlabel_adhoc_channel_val_automatic");
+ for (int i = WlanAdHocChannelMinValue;
+ i <= WlanAdHocChannelMaxValue;
+ i++) {
+ QString channel;
+ channel.setNum(i);
+ adHocChannelItems << HbStringUtil::convertDigits(channel);
+ }
+ mAdHocChannelItem->setContentWidgetData(
+ "items",
+ adHocChannelItems);
+ // Connect signal and add item to group
+ mForm->addConnection(
+ mAdHocChannelItem,
+ SIGNAL(currentIndexChanged(int)),
+ this,
+ SLOT(adHocChannelChanged(int)));
+ // Add item after the network mode item
+ mApSettingsGroupItem->insertChild(
+ mApSettingsGroupItem->indexOf(mNetworkModeItem) + 1,
+ mAdHocChannelItem);
+ }
+ // Update ad-hoc item
+ int adHocChannelId = mCmConnectionMethod->getIntAttribute(
+ CMManagerShim::WlanChannelID);
+ mAdHocChannelItem->setContentWidgetData(
+ "currentIndex",
+ adHocChannelId);
+ }
+}
+
+/*!
+ Updates security mode item.
+ */
+void CpWlanApView::updateSecurityModeItem(
+ CMManagerShim::WlanConnMode networkMode)
+{
+ // Load WLAN security plugins and construct map
+ mSecurityModeMap.clear();
+ mSecurityModeMap.insert(0, NULL); // open mode
+ loadSecurityPlugins(networkMode);
+
+ // Add items to combobox
+ QStringList securityModeItems;
+ foreach (CpWlanSecurityPluginInterface *plugin, mSecurityModeMap) {
+ if (plugin) {
+ // Add security mode from plugin
+ securityModeItems
+ << hbTrId(plugin->securityModeTextId().toLatin1());
+ } else {
+ // Add open mode
+ securityModeItems
+ << hbTrId("txt_occ_setlabel_wlan_security_mode_val_open");
+ }
+ }
+ // Remove connection before setting new content, because combobox
+ // will emit currentIndexChanged signal and we don't want that.
+ mForm->removeConnection(
+ mSecurityModeItem,
+ SIGNAL(currentIndexChanged(int)),
+ this,
+ SLOT(securityModeChanged(int)));
+ mSecurityModeItem->setContentWidgetData("items", securityModeItems);
+ mForm->addConnection(
+ mSecurityModeItem,
+ SIGNAL(currentIndexChanged(int)),
+ this,
+ SLOT(securityModeChanged(int)));
+
+ uint securityMode = mCmConnectionMethod->getIntAttribute(
+ CMManagerShim::WlanSecurityMode);
+ // Iterate through the map to find correct security plugin and set
+ // mode index
+ int securityModeIndex = 0;
+ QMapIterator<int, CpWlanSecurityPluginInterface *> i(mSecurityModeMap);
+ while (i.hasNext()) {
+ i.next();
+ if (i.value()
+ && i.value()->securityMode() == securityMode) {
+ securityModeIndex = i.key();
+ }
+ }
+ mSecurityModeItem->setContentWidgetData("currentIndex",
+ securityModeIndex);
+
+ if (securityMode != CMManagerShim::WlanSecModeOpen
+ && securityModeIndex == 0) {
+ // Security plugin implementing the selected security mode not found,
+ // set security mode to open also in CommsDat
+ mCmConnectionMethod->setIntAttribute(
+ CMManagerShim::WlanSecurityMode,
+ CMManagerShim::WlanSecModeOpen);
+ // Try update
+ try {
+ mCmConnectionMethod->update();
+ }
+ catch (const std::exception&) {
+ // Error in update, but can't show error notes at this point
+ }
+ }
+}
+
+/*!
+ Stores connection name.
+*/
+void CpWlanApView::connectionNameChanged()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_CONNECTIONNAMECHANGED_ENTRY);
+
+ QString connectionName =
+ mConnectionNameItem->contentWidgetData("text").toString();
+ if (!connectionName.isEmpty()) {
+ // Update to CommsDat
+ mCmConnectionMethod->setStringAttribute(
+ CMManagerShim::CmName,
+ connectionName);
+ if (tryUpdate()) {
+ // Update successful
+ // Read name because in case the name already exists it will
+ // be made unique by CMManager
+ connectionName = mCmConnectionMethod->getStringAttribute(
+ CMManagerShim::CmName);
+ mConnectionNameItem->setContentWidgetData("text", connectionName);
+ }
+ } else {
+ // Inform user of invalid name
+ showMessageBox(
+ HbMessageBox::MessageTypeInformation,
+ hbTrId("txt_occ_info_invalid_name"));
+
+ // Empty name not allowed, revert back to old value
+ connectionName = mCmConnectionMethod->getStringAttribute(
+ CMManagerShim::CmName);
+ mConnectionNameItem->setContentWidgetData("text", connectionName);
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_CONNECTIONNAMECHANGED_EXIT);
+}
+
+/*!
+ Stores WLAN network name.
+*/
+void CpWlanApView::wlanNetworkNameChanged()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_WLANNETWORKNAMECHANGED_ENTRY);
+
+ // Update to CommsDat
+ QString wlanNetworkName =
+ mWlanNetworkNameItem->contentWidgetData("text").toString();
+ if (!wlanNetworkName.isEmpty()) {
+ mCmConnectionMethod->setStringAttribute(
+ CMManagerShim::WlanSSID,
+ wlanNetworkName);
+ (void)tryUpdate();
+ } else {
+ // Inform user of invalid name
+ showMessageBox(
+ HbMessageBox::MessageTypeInformation,
+ hbTrId("txt_occ_info_invalid_name"));
+
+ // Empty name not allowed, revert back to old value
+ wlanNetworkName = mCmConnectionMethod->getStringAttribute(
+ CMManagerShim::WlanSSID);
+ mWlanNetworkNameItem->setContentWidgetData("text", wlanNetworkName);
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_WLANNETWORKNAMECHANGED_EXIT);
+}
+
+/*!
+ Stores WLAN network status.
+*/
+void CpWlanApView::networkStatusChanged(int index)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_NETWORKSTATUSCHANGED_ENTRY);
+
+ // Update to CommsDat
+ mCmConnectionMethod->setBoolAttribute(
+ CMManagerShim::WlanScanSSID,
+ mNetworkStatusMap.value(index));
+ (void)tryUpdate();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_NETWORKSTATUSCHANGED_EXIT);
+}
+
+/*!
+ Stores WLAN network mode.
+*/
+void CpWlanApView::networkModeChanged(int index)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_NETWORKMODECHANGED_ENTRY);
+
+ // Update to CommsDat
+ mCmConnectionMethod->setIntAttribute(
+ CMManagerShim::WlanConnectionMode,
+ mNetworkModeMap.value(index));
+ if (tryUpdate()) {
+ // If mode is ad-hoc, ad-hoc channel item must be shown
+ CMManagerShim::WlanConnMode networkMode =
+ static_cast<CMManagerShim::WlanConnMode>
+ (mNetworkModeMap.value(index));
+ updateAdHocChannelItem(networkMode);
+ // Also security mode list may need updating
+ updateSecurityModeItem(networkMode);
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_NETWORKMODECHANGED_EXIT);
+}
+
+/*!
+ Stores ad-hoc channel ID.
+*/
+void CpWlanApView::adHocChannelChanged(int index)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_ADHOCCHANNELCHANGED_ENTRY);
+
+ // Update to CommsDat
+ mCmConnectionMethod->setIntAttribute(
+ CMManagerShim::WlanChannelID,
+ index);
+ (void)tryUpdate();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_ADHOCCHANNELCHANGED_EXIT);
+}
+
+/*!
+ Stores WLAN security mode.
+*/
+void CpWlanApView::securityModeChanged(int index)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_SECURITYMODECHANGED_ENTRY);
+
+ // Get security plugin
+ CpWlanSecurityPluginInterface *plugin = mSecurityModeMap.value(index);
+ // Update to CommsDat
+ if (plugin) {
+ mCmConnectionMethod->setIntAttribute(
+ CMManagerShim::WlanSecurityMode,
+ plugin->securityMode());
+ } else {
+ mCmConnectionMethod->setIntAttribute(
+ CMManagerShim::WlanSecurityMode,
+ CMManagerShim::WlanSecModeOpen);
+ }
+ (void)tryUpdate();
+
+ // Update UI
+ updateSecurityGroup(
+ mSecurityModeItem->contentWidgetData("currentIndex").toInt());
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_SECURITYMODECHANGED_EXIT);
+}
+
+/*!
+ Stores homepage.
+*/
+void CpWlanApView::homepageChanged()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_HOMEPAGECHANGED_ENTRY);
+
+ // Update to CommsDat
+ QString homepage = mHomepageItem->contentWidgetData("text").toString();
+ mCmConnectionMethod->setStringAttribute(
+ CMManagerShim::CmStartPage,
+ homepage);
+ (void)tryUpdate();
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_HOMEPAGECHANGED_EXIT);
+}
+
+/*!
+ Handles view menu actions.
+*/
+void CpWlanApView::menuActionTriggered(HbAction *action)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_MENUACTIONTRIGGERED_ENTRY);
+
+ if (action == mAdvancedSettingsAction) {
+ HbMainWindow *mainWindow = this->mainWindow();
+
+ // Create the advanced settings view
+ HbView *newView = new CpWlanApAdvancedView(mCmConnectionMethod);
+ // Connect signal to return back to the previous view
+ bool status = QObject::connect(
+ newView,
+ SIGNAL(aboutToClose()),
+ this,
+ SLOT(restoreCurrentView()));
+ Q_ASSERT(status);
+
+ mainWindow->addView(newView);
+ mainWindow->setCurrentView(newView);
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_MENUACTIONTRIGGERED_EXIT);
+}
+
+/*!
+ Removes current view from main window and sets this view as the
+ current view. Used when "back" button is pressed in "Advanced settings"
+ view.
+*/
+void CpWlanApView::restoreCurrentView()
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_RESTORECURRENTVIEW_ENTRY);
+
+ HbMainWindow *mainWindow = this->mainWindow();
+
+ // Remove the previous view and delete it
+ HbView *prevView = mainWindow->currentView();
+ mainWindow->removeView(prevView);
+ prevView->deleteLater();
+
+ // Set this view on top
+ mainWindow->setCurrentView(this);
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_RESTORECURRENTVIEW_EXIT);
+}
+
+/*!
+ Sets editor preferences for all HbLineEdit items.
+*/
+void CpWlanApView::setEditorPreferences(const QModelIndex modelIndex)
+{
+ OstTraceFunctionEntry0(CPWLANAPVIEW_SETEDITORPREFERENCES_ENTRY);
+
+ HbDataFormViewItem *viewItem = qobject_cast<HbDataFormViewItem *>
+ (mForm->itemByIndex(modelIndex));
+ HbDataFormModelItem *modelItem = mModel->itemFromIndex(modelIndex);
+
+ if (modelItem == mConnectionNameItem
+ || modelItem == mWlanNetworkNameItem
+ || modelItem == mHomepageItem ) {
+ // HbLineEdit items, get editor and editor interface
+ HbLineEdit *edit = qobject_cast<HbLineEdit *>
+ (viewItem->dataItemContentWidget());
+ HbEditorInterface editInterface(edit);
+
+ if (modelItem == mConnectionNameItem) {
+ // Setup editor for connection name
+ editInterface.setInputConstraints(HbEditorConstraintLatinAlphabetOnly);
+ edit->setInputMethodHints(Qt::ImhNoPredictiveText);
+ edit->setMaxLength(CMManagerShim::CmNameLength);
+ } else if (modelItem == mWlanNetworkNameItem) {
+ // Setup editor for WLAN SSID
+ editInterface.setMode(HbInputModeNone);
+ editInterface.setInputConstraints(HbEditorConstraintLatinAlphabetOnly);
+ editInterface.setEditorClass(HbInputEditorClassNetworkName);
+ editInterface.setDigitType(HbDigitTypeNone);
+ edit->setInputMethodHints(
+ Qt::ImhNoPredictiveText | Qt::ImhPreferLowercase);
+ edit->setMaxLength(CMManagerShim::WlanSSIDLength);
+ } else { /* mHomepageItem */
+ // Setup editor for URL
+ editInterface.setMode(HbInputModeNone);
+ editInterface.setInputConstraints(HbEditorConstraintLatinAlphabetOnly);
+ editInterface.setFilter(HbUrlFilter::instance());
+ editInterface.setEditorClass(HbInputEditorClassUrl);
+ editInterface.setDigitType(HbDigitTypeNone);
+ edit->setInputMethodHints(
+ Qt::ImhNoPredictiveText | Qt::ImhPreferLowercase);
+ edit->setMaxLength(CMManagerShim::CmStartPageLength);
+ }
+ }
+
+ OstTraceFunctionExit0(CPWLANAPVIEW_SETEDITORPREFERENCES_EXIT);
+}