cmmanager/cpwlanapplugin/src/cpwlanapview.cpp
branchRCL_3
changeset 57 05bc53fe583b
--- /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);
+}