cmmanager/cpwlanapplugin/src/cpwlanapadvancedview.cpp
branchRCL_3
changeset 58 83ca720e2b9a
parent 57 05bc53fe583b
child 62 bb1f80fb7db2
equal deleted inserted replaced
57:05bc53fe583b 58:83ca720e2b9a
     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 * Control Panel WLAN AP advanced settings view implementation.
       
    16 *
       
    17 */
       
    18 
       
    19 // System includes
       
    20 #include <QHostAddress>
       
    21 #include <HbCheckBox>
       
    22 #include <HbLineEdit>
       
    23 #include <HbDataFormViewItem>
       
    24 #include <HbWidget>
       
    25 #include <HbEditorInterface>
       
    26 #include <HbUrlFilter>
       
    27 #include <HbInputDialog>
       
    28 #include <HbDataForm>
       
    29 #include <HbDataFormModel>
       
    30 #include <cmconnectionmethod_shim.h>
       
    31 #include <cmmanagerdefines_shim.h>
       
    32 #include <cpsettingformitemdata.h>
       
    33 
       
    34 // User includes
       
    35 #include "cpipv4filter.h"
       
    36 #include "cpipv6filter.h"
       
    37 #include "cpwlanapadvancedview.h"
       
    38 
       
    39 #include "OstTraceDefinitions.h"
       
    40 #ifdef OST_TRACE_COMPILER_IN_USE
       
    41 #include "cpwlanapadvancedviewTraces.h"
       
    42 #endif
       
    43 
       
    44 /*!
       
    45     \class CpWlanApAdvancedView
       
    46     \brief This class implements the WLAN AP Control Panel advanced
       
    47            settings view.
       
    48 */
       
    49 
       
    50 // External function prototypes
       
    51 
       
    52 // Local constants
       
    53 
       
    54 // ======== LOCAL FUNCTIONS ========
       
    55 
       
    56 // ======== MEMBER FUNCTIONS ========
       
    57 
       
    58 /*!
       
    59     Constructor.
       
    60 */
       
    61 CpWlanApAdvancedView::CpWlanApAdvancedView(
       
    62     CmConnectionMethodShim *cmConnectionMethod,
       
    63     QGraphicsItem *parent) :
       
    64         CpBaseSettingView(0, parent),
       
    65         mForm(0),
       
    66         mModel(0),
       
    67         mCmConnectionMethod(cmConnectionMethod),
       
    68         mIpv4Group(0),
       
    69         mIpv4Automatic(0),
       
    70         mIpv4Address(0),
       
    71         mIpv4SubnetMask(0),
       
    72         mIpv4Gateway(0),
       
    73         mIpv4DnsAutomatic(0),
       
    74         mIpv4DnsAddress1(0),
       
    75         mIpv4DnsAddress2(0),
       
    76         mIpv6Group(0),
       
    77         mIpv6DnsAutomatic(0),
       
    78         mIpv6DnsAddress1(0),
       
    79         mIpv6DnsAddress2(0),
       
    80         mProxyGroup(0),
       
    81         mProxyServer(0),
       
    82         mProxyPort(0),
       
    83         mMessageBox(0),
       
    84         mIpv6Supported(false)
       
    85 {
       
    86     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_ENTRY);
       
    87     
       
    88     // Construct WLAN AP advanced settings UI
       
    89     mForm = new HbDataForm();
       
    90     this->setWidget(mForm);
       
    91     mModel = new HbDataFormModel(mForm);
       
    92     mForm->setModel(mModel);
       
    93 
       
    94     mIpv6Supported = mCmConnectionMethod->getBoolAttribute(
       
    95         CMManagerShim::CmIPv6Supported);
       
    96         
       
    97     // Add advanced settings groups
       
    98     createAdvancedSettings();
       
    99     
       
   100     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_EXIT);
       
   101 }
       
   102 
       
   103 /*!
       
   104     Destructor.
       
   105 */
       
   106 CpWlanApAdvancedView::~CpWlanApAdvancedView()
       
   107 {
       
   108     OstTraceFunctionEntry0(DUP1_CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_ENTRY);
       
   109     
       
   110     OstTraceFunctionExit0(DUP1_CPWLANAPADVANCEDVIEW_CPWLANAPADVANCEDVIEW_EXIT);
       
   111 }
       
   112 
       
   113 /*!
       
   114     Creates all advanced settings groups.
       
   115 */
       
   116 void CpWlanApAdvancedView::createAdvancedSettings()
       
   117 {
       
   118     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_ENTRY);
       
   119     
       
   120     // Create settings groups
       
   121     createIpv4Group();
       
   122     if (mIpv6Supported) {
       
   123         createIpv6Group();
       
   124     }
       
   125     createProxyGroup();
       
   126     
       
   127     // Read values and update UI
       
   128     updateIpv4Group();
       
   129     if (mIpv6Supported) {
       
   130         updateIpv6Group();
       
   131     }
       
   132     updateProxyGroup();
       
   133     
       
   134     // Connect signal to initialize settings item widgets
       
   135     bool status = connect(
       
   136         mForm,
       
   137         SIGNAL(itemShown(const QModelIndex)),
       
   138         this,
       
   139         SLOT(setEditorPreferences(const QModelIndex)));
       
   140     Q_ASSERT(status);
       
   141     
       
   142     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_EXIT);
       
   143 }
       
   144 
       
   145 /*!
       
   146     Creates the IPv4 settings group.
       
   147 */
       
   148 void CpWlanApAdvancedView::createIpv4Group()
       
   149 {
       
   150     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEIPV4GROUP_ENTRY);
       
   151     
       
   152     // IPv4 settings group
       
   153     mIpv4Group = new CpSettingFormItemData(
       
   154         HbDataFormModelItem::GroupItem,
       
   155         hbTrId("txt_occ_subhead_ipv4_settings"));
       
   156     mModel->appendDataFormItem(mIpv4Group);
       
   157     
       
   158     // Phone IP address
       
   159     // "Automatic" checkbox
       
   160     mIpv4Automatic = new CpSettingFormItemData(
       
   161         HbDataFormModelItem::CheckBoxItem,
       
   162         hbTrId("txt_occ_setlabel_phone_ip_address"));
       
   163     mIpv4Automatic->setContentWidgetData(
       
   164         "text",
       
   165         hbTrId("txt_occ_setlabel_val_automatic"));
       
   166     mForm->addConnection(
       
   167         mIpv4Automatic,
       
   168         SIGNAL(stateChanged(int)),
       
   169         this,
       
   170         SLOT(changeIpv4AddressMode(int)));
       
   171     mIpv4Automatic->setContentWidgetData("objectName", "ipv4AutomaticCB");
       
   172     mIpv4Group->appendChild(mIpv4Automatic);
       
   173     
       
   174     // Phone IP address
       
   175     mIpv4Address = new CpSettingFormItemData(
       
   176         HbDataFormModelItem::TextItem,
       
   177         hbTrId("txt_occ_setlabel_phone_ip_address"));
       
   178     mForm->addConnection(
       
   179         mIpv4Address,
       
   180         SIGNAL(editingFinished()),
       
   181         this,
       
   182         SLOT(changeIpv4Address()));
       
   183     mIpv4Address->setContentWidgetData("objectName", "ipv4AddressEdit");
       
   184     mIpv4Group->appendChild(mIpv4Address);
       
   185     
       
   186     // Subnet mask
       
   187     mIpv4SubnetMask = new CpSettingFormItemData(
       
   188         HbDataFormModelItem::TextItem,
       
   189         hbTrId("txt_occ_setlabel_subnet_mask"));
       
   190     mForm->addConnection(
       
   191         mIpv4SubnetMask,
       
   192         SIGNAL(editingFinished()),
       
   193         this,
       
   194         SLOT(changeIpv4SubnetMask()));
       
   195     mIpv4SubnetMask->setContentWidgetData("objectName", "ipv4SubnetmaskEdit");
       
   196     mIpv4Group->appendChild(mIpv4SubnetMask);
       
   197     
       
   198     // Gateway
       
   199     mIpv4Gateway = new CpSettingFormItemData(
       
   200         HbDataFormModelItem::TextItem,
       
   201         hbTrId("txt_occ_setlabel_default_gateway"));
       
   202     mForm->addConnection(
       
   203         mIpv4Gateway,
       
   204         SIGNAL(editingFinished()),
       
   205         this,
       
   206         SLOT(changeIpv4Gateway()));
       
   207     mIpv4Gateway->setContentWidgetData("objectName", "ipv4GatewayEdit");
       
   208     mIpv4Group->appendChild(mIpv4Gateway);
       
   209     
       
   210     // DNS addresses
       
   211     // "Automatic" checkbox
       
   212     mIpv4DnsAutomatic = new CpSettingFormItemData(
       
   213         HbDataFormModelItem::CheckBoxItem,
       
   214         hbTrId("txt_occ_setlabel_dns_addresses"));
       
   215     mIpv4DnsAutomatic->setContentWidgetData(
       
   216         "text",
       
   217         hbTrId("txt_occ_setlabel_val_automatic"));
       
   218     mForm->addConnection(
       
   219         mIpv4DnsAutomatic,
       
   220         SIGNAL(stateChanged(int)), 
       
   221         this,
       
   222         SLOT(changeIpv4DnsMode(int)));
       
   223     mIpv4DnsAutomatic->setContentWidgetData("objectName", "ipv4DnsAutomaticCB");
       
   224     mIpv4Group->appendChild(mIpv4DnsAutomatic);
       
   225     
       
   226     // Primary DNS address
       
   227     mIpv4DnsAddress1 = new CpSettingFormItemData(
       
   228         HbDataFormModelItem::TextItem,
       
   229         hbTrId("txt_occ_setlabel_primary_name_server"));
       
   230     mForm->addConnection(
       
   231         mIpv4DnsAddress1,
       
   232         SIGNAL(editingFinished()), 
       
   233         this,
       
   234         SLOT(changeIpv4PrimaryDnsAddress()));
       
   235     mIpv4DnsAddress1->setContentWidgetData("objectName", "ipv4DnsAddress1Edit");
       
   236     mIpv4Group->appendChild(mIpv4DnsAddress1);
       
   237     
       
   238     // Secondary DNS address
       
   239     mIpv4DnsAddress2 = new CpSettingFormItemData(
       
   240         HbDataFormModelItem::TextItem,
       
   241         hbTrId("txt_occ_setlabel_secondary_name_server"));
       
   242     mForm->addConnection(
       
   243         mIpv4DnsAddress2,
       
   244         SIGNAL(editingFinished()), 
       
   245         this,
       
   246         SLOT(changeIpv4SecondaryDnsAddress()));
       
   247     mIpv4DnsAddress2->setContentWidgetData("objectName", "ipv4DnsAddress2Edit");
       
   248     mIpv4Group->appendChild(mIpv4DnsAddress2);
       
   249     
       
   250     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEIPV4GROUP_EXIT);
       
   251 }
       
   252 
       
   253 /*!
       
   254     Reads attribute values and updates the IPv4 settings group.
       
   255 */
       
   256 void CpWlanApAdvancedView::updateIpv4Group()
       
   257 {
       
   258     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_UPDATEIPV4GROUP_ENTRY);
       
   259     
       
   260     // Phone IP address
       
   261     // "Automatic" checkbox
       
   262     bool ipAddressFromServer = mCmConnectionMethod->getBoolAttribute(
       
   263         CMManagerShim::CmIPAddrFromServer);
       
   264     Qt::CheckState state = Qt::Unchecked;
       
   265     if (ipAddressFromServer) {
       
   266         state = Qt::Checked;
       
   267     }
       
   268     mIpv4Automatic->setContentWidgetData("checkState", state);
       
   269 
       
   270     // Enable/disable user defined IP address fields
       
   271     enableIpv4AddressFields(state);
       
   272     
       
   273     // Phone IP address
       
   274     QString string = getIpAddress(CMManagerShim::CmIPAddress);
       
   275     mIpv4Address->setContentWidgetData("text", string);
       
   276     
       
   277     // Subnet mask
       
   278     string = getIpAddress(CMManagerShim::CmIPNetmask);
       
   279     mIpv4SubnetMask->setContentWidgetData("text", string);
       
   280     
       
   281     // Gateway
       
   282     string = getIpAddress(CMManagerShim::CmIPGateway);
       
   283     mIpv4Gateway->setContentWidgetData("text", string);
       
   284     
       
   285     // DNS addresses
       
   286     // "Automatic" checkbox
       
   287     state = Qt::Unchecked;
       
   288     if (mCmConnectionMethod->getBoolAttribute(
       
   289         CMManagerShim::CmIPDNSAddrFromServer)) {
       
   290         state = Qt::Checked;
       
   291     }
       
   292     mIpv4DnsAutomatic->setContentWidgetData("checkState", state);
       
   293 
       
   294     // Enable/disable user defined DNS address fields
       
   295     enableIpv4DnsFields(state);
       
   296     
       
   297     // Primary DNS address
       
   298     string = getIpAddress(CMManagerShim::CmIPNameServer1);
       
   299     mIpv4DnsAddress1->setContentWidgetData("text", string);
       
   300     
       
   301     // Secondary DNS address
       
   302     string = getIpAddress(CMManagerShim::CmIPNameServer2);
       
   303     mIpv4DnsAddress2->setContentWidgetData("text", string);
       
   304     
       
   305     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_UPDATEIPV4GROUP_EXIT);
       
   306 }
       
   307 
       
   308 /*!
       
   309     Creates the IPv6 settings group.
       
   310 */
       
   311 void CpWlanApAdvancedView::createIpv6Group()
       
   312 {
       
   313     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEIPV6GROUP_ENTRY);
       
   314     
       
   315     // IPv6 settings group
       
   316     mIpv6Group = new CpSettingFormItemData(
       
   317         HbDataFormModelItem::GroupItem, 
       
   318         hbTrId("txt_occ_subhead_ipv6_settings"));
       
   319     mModel->appendDataFormItem(mIpv6Group);
       
   320     
       
   321     // DNS addresses
       
   322     // Automatic/well-known/user defined combobox
       
   323     mIpv6DnsAutomatic = new CpSettingFormItemData(
       
   324         HbDataFormModelItem::ComboBoxItem,
       
   325         hbTrId("txt_occ_setlabel_dns_addresses"));
       
   326     QStringList dnsModeList;
       
   327     // Order of the list must match the Ipv6DnsType enum
       
   328     dnsModeList
       
   329         << hbTrId("txt_occ_setlabel_val_automatic")
       
   330         << hbTrId("txt_occ_setlabel_dns_addresses_val_wellknown")
       
   331         << hbTrId("txt_occ_setlabel_dns_addresses_val_user_defined");
       
   332     mIpv6DnsAutomatic->setContentWidgetData("items", dnsModeList);
       
   333     mForm->addConnection(
       
   334         mIpv6DnsAutomatic,
       
   335         SIGNAL(currentIndexChanged(int)),
       
   336         this,
       
   337         SLOT(changeIpv6DnsMode(int)));
       
   338     mIpv6DnsAutomatic->setContentWidgetData("objectName", "ipv6DnsAutomaticCB");
       
   339     mIpv6Group->appendChild(mIpv6DnsAutomatic);
       
   340     
       
   341     // Primary DNS address
       
   342     mIpv6DnsAddress1 = new CpSettingFormItemData(
       
   343         HbDataFormModelItem::TextItem,
       
   344         hbTrId("txt_occ_setlabel_primary_name_server"));
       
   345     mForm->addConnection(
       
   346         mIpv6DnsAddress1,
       
   347         SIGNAL(editingFinished()),
       
   348         this,
       
   349         SLOT(changeIpv6PrimaryDnsAddress()));
       
   350     mIpv6DnsAddress1->setContentWidgetData("objectName", "ipv6DnsAddress1Edit");
       
   351     mIpv6Group->appendChild(mIpv6DnsAddress1);
       
   352     
       
   353     // Secondary DNS address
       
   354     mIpv6DnsAddress2 = new CpSettingFormItemData(
       
   355         HbDataFormModelItem::TextItem,
       
   356         hbTrId("txt_occ_setlabel_secondary_name_server"));
       
   357     mForm->addConnection(
       
   358         mIpv6DnsAddress2,
       
   359         SIGNAL(editingFinished()),
       
   360         this,
       
   361         SLOT(changeIpv6SecondaryDnsAddress()));
       
   362     mIpv6DnsAddress2->setContentWidgetData("objectName", "ipv6DnsAddress2Edit");
       
   363     mIpv6Group->appendChild(mIpv6DnsAddress2);
       
   364     
       
   365     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEIPV6GROUP_EXIT);
       
   366 }
       
   367 
       
   368 /*!
       
   369     Reads attribute values and updates the IPv6 settings group.
       
   370 */
       
   371 void CpWlanApAdvancedView::updateIpv6Group()
       
   372 {
       
   373     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_UPDATEIPV6GROUP_ENTRY);
       
   374     
       
   375     // DNS addresses
       
   376     // Automatic/well-known/user defined combobox
       
   377     uint type = getIpv6DnsType();
       
   378     mIpv6DnsAutomatic->setContentWidgetData("currentIndex", type);
       
   379 
       
   380     // Enable/disable user defined DNS address fields
       
   381     enableIpv6DnsFields(type);
       
   382     
       
   383     // Primary DNS address
       
   384     QString string = getIpAddress(CMManagerShim::CmIP6NameServer1);
       
   385     mIpv6DnsAddress1->setContentWidgetData("text", string);
       
   386     
       
   387     // Secondary DNS address
       
   388     string = getIpAddress(CMManagerShim::CmIP6NameServer2);
       
   389     mIpv6DnsAddress2->setContentWidgetData("text", string);
       
   390     
       
   391     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_UPDATEIPV6GROUP_EXIT);
       
   392 }
       
   393 
       
   394 /*!
       
   395     Creates the proxy settings group.
       
   396 */
       
   397 void CpWlanApAdvancedView::createProxyGroup()
       
   398 {
       
   399     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CREATEPROXYGROUP_ENTRY);
       
   400     
       
   401     // Proxy settings group
       
   402     mProxyGroup = new CpSettingFormItemData(
       
   403         HbDataFormModelItem::GroupItem, 
       
   404         hbTrId("txt_occ_subhead_proxy_settings"));
       
   405     mModel->appendDataFormItem(mProxyGroup);
       
   406     
       
   407     // Proxy server address
       
   408     mProxyServer = new CpSettingFormItemData(
       
   409         HbDataFormModelItem::TextItem,
       
   410         hbTrId("txt_occ_setlabel_proxy_server_address"));
       
   411     mForm->addConnection(
       
   412         mProxyServer,
       
   413         SIGNAL(editingFinished()),
       
   414         this,
       
   415         SLOT(changeProxyServer()));
       
   416     mProxyServer->setContentWidgetData("objectName", "proxyServerEdit");
       
   417     mProxyGroup->appendChild(mProxyServer);
       
   418     
       
   419     // Proxy port number
       
   420     mProxyPort = new CpSettingFormItemData(
       
   421         HbDataFormModelItem::TextItem,
       
   422         hbTrId("txt_occ_setlabel_proxy_port_number"));
       
   423     mForm->addConnection(
       
   424         mProxyPort,
       
   425         SIGNAL(editingFinished()),
       
   426         this,
       
   427         SLOT(changeProxyPort()));
       
   428     mProxyPort->setContentWidgetData("objectName", "proxyPortEdit");
       
   429     mProxyGroup->appendChild(mProxyPort);
       
   430     
       
   431     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CREATEPROXYGROUP_EXIT);
       
   432 }
       
   433 
       
   434 /*!
       
   435     Reads attribute values and updates the proxy settings group.
       
   436 */
       
   437 void CpWlanApAdvancedView::updateProxyGroup()
       
   438 {
       
   439     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_UPDATEPROXYGROUP_ENTRY);
       
   440     
       
   441     // Proxy server address
       
   442     QString serverAddress = mCmConnectionMethod->getStringAttribute(
       
   443         CMManagerShim::CmProxyServerName);
       
   444     mProxyServer->setContentWidgetData("text", serverAddress);
       
   445     
       
   446     // Proxy port number
       
   447     uint portNumber = mCmConnectionMethod->getIntAttribute(
       
   448         CMManagerShim::CmProxyPortNumber);
       
   449     if (portNumber > 0) {
       
   450         mProxyPort->setContentWidgetData("text", QVariant(portNumber));
       
   451     } else {
       
   452         mProxyPort->setContentWidgetData("text", "");
       
   453     }
       
   454     
       
   455     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_UPDATEPROXYGROUP_EXIT);
       
   456 }
       
   457 
       
   458 /*!
       
   459     Reads an IP address from CommsDat with given attribute. If string is
       
   460     empty, a zero address (0.0.0.0 or 0:0:0:0:0:0:0:0) is returned.
       
   461 */
       
   462 QString CpWlanApAdvancedView::getIpAddress(
       
   463     CMManagerShim::ConnectionMethodAttribute attribute)
       
   464 {
       
   465     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_GETIPADDRESS_ENTRY);
       
   466     
       
   467     QString ipAddress = mCmConnectionMethod->getStringAttribute(attribute);
       
   468     
       
   469     if (ipAddress.isEmpty()) {
       
   470         // String is empty, return a zero address instead
       
   471         switch (attribute) {
       
   472         case CMManagerShim::CmIP6NameServer1:
       
   473         case CMManagerShim::CmIP6NameServer2:
       
   474             // IPv6 address
       
   475             ipAddress = CMManagerShim::DynamicIpv6Address;
       
   476             break;
       
   477         default:
       
   478             // IPv4 address
       
   479             ipAddress = CMManagerShim::UnspecifiedIpv4Address; 
       
   480             break;
       
   481         }
       
   482     }
       
   483     
       
   484     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_GETIPADDRESS_EXIT);
       
   485     return ipAddress;
       
   486 }
       
   487 
       
   488 /*!
       
   489     Resolves IPv6 DNS address type.
       
   490 */
       
   491 CpWlanApAdvancedView::Ipv6DnsType CpWlanApAdvancedView::getIpv6DnsType()
       
   492 {
       
   493     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_GETIPV6DNSTYPE_ENTRY);
       
   494     
       
   495     // Read "DNS address from server" flag
       
   496     bool dnsAddressFromServer = mCmConnectionMethod->getBoolAttribute(
       
   497         CMManagerShim::CmIP6DNSAddrFromServer);
       
   498     
       
   499     // Read IPv6 DNS addresses from CommsDat
       
   500     QString primaryAddress = mCmConnectionMethod->getStringAttribute(
       
   501         CMManagerShim::CmIP6NameServer1);
       
   502     QString secondaryAddress = mCmConnectionMethod->getStringAttribute(
       
   503         CMManagerShim::CmIP6NameServer2);
       
   504 
       
   505     // Resolve IPv6 DNS address type
       
   506     Ipv6DnsType type = Ipv6DnsTypeUserDefined;
       
   507     if (dnsAddressFromServer) {
       
   508         // Automatic
       
   509         type = Ipv6DnsTypeAutomatic;
       
   510     } else if (primaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer1
       
   511         && secondaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer2) {
       
   512         // Well-known IPv6 DNS addresses
       
   513         type = Ipv6DnsTypeWellKnown;
       
   514     }
       
   515 
       
   516     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_GETIPV6DNSTYPE_EXIT);
       
   517     return type;
       
   518 }
       
   519 
       
   520 /*!
       
   521     Sets IPv4 address field enabled/disabled.
       
   522 */
       
   523 void CpWlanApAdvancedView::enableIpv4AddressFields(int state)
       
   524 {
       
   525     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_ENTRY);
       
   526     
       
   527     if (state == Qt::Checked) {
       
   528         // Automatic, disable text field
       
   529         mIpv4Address->setEnabled(false);
       
   530         mIpv4SubnetMask->setEnabled(false);
       
   531         mIpv4Gateway->setEnabled(false);
       
   532     } else {
       
   533         // Manual, enable text field
       
   534         mIpv4Address->setEnabled(true);
       
   535         mIpv4SubnetMask->setEnabled(true);
       
   536         mIpv4Gateway->setEnabled(true);
       
   537     }
       
   538     
       
   539     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_EXIT);
       
   540 }
       
   541 
       
   542 /*!
       
   543     Sets IPv4 DNS address fields enabled/disabled.
       
   544 */
       
   545 void CpWlanApAdvancedView::enableIpv4DnsFields(int state)
       
   546 {
       
   547     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_ENTRY);
       
   548     
       
   549     if (state == Qt::Checked) {
       
   550         // Automatic, disable text fields
       
   551         mIpv4DnsAddress1->setEnabled(false);
       
   552         mIpv4DnsAddress2->setEnabled(false);
       
   553     } else {
       
   554         // Manual, enable text fields
       
   555         mIpv4DnsAddress1->setEnabled(true);
       
   556         mIpv4DnsAddress2->setEnabled(true);
       
   557     }
       
   558     
       
   559     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_EXIT);
       
   560 }
       
   561 
       
   562 /*!
       
   563     Sets IPv6 DNS address fields enabled/disabled.
       
   564 */
       
   565 void CpWlanApAdvancedView::enableIpv6DnsFields(int selectionIndex)
       
   566 {
       
   567     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_ENTRY);
       
   568     
       
   569     // Check combobox value
       
   570     if (selectionIndex == Ipv6DnsTypeUserDefined) {
       
   571         // User-defined, enable text fields
       
   572         mIpv6DnsAddress1->setEnabled(true);
       
   573         mIpv6DnsAddress2->setEnabled(true);
       
   574     } else {
       
   575         // Automatic or well-known, disable text fields
       
   576         mIpv6DnsAddress1->setEnabled(false);
       
   577         mIpv6DnsAddress2->setEnabled(false);
       
   578     }
       
   579     
       
   580     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_EXIT);
       
   581 }
       
   582 
       
   583 /*!
       
   584     Validates an IP address and saves it to CommsDat in case it was a valid
       
   585     address or an empty string. In case the address is not valid, an error
       
   586     note is shown to the user and previous setting is restored to the UI.
       
   587 */
       
   588 bool CpWlanApAdvancedView::validateAndSaveIpAddress(
       
   589     HbDataFormModelItem *item,
       
   590     CMManagerShim::ConnectionMethodAttribute attribute,
       
   591     QAbstractSocket::NetworkLayerProtocol protocol)
       
   592 {
       
   593     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_ENTRY);
       
   594     
       
   595     bool success = false;
       
   596     
       
   597     // Check address
       
   598     QString address = item->contentWidgetData("text").toString();
       
   599     QHostAddress hostAddress;
       
   600     if (hostAddress.setAddress(address)
       
   601         && hostAddress.protocol() == protocol) {
       
   602         // Proper address, convert to lower case (IPv6)
       
   603         address = hostAddress.toString().toLower();
       
   604     } else if (address.isEmpty()) {
       
   605         // Empty string, replace with 0.0.0.0 or 0:0:0:0:0:0:0:0
       
   606         if (protocol == QAbstractSocket::IPv4Protocol) {
       
   607             address = CMManagerShim::UnspecifiedIpv4Address;
       
   608         } else {
       
   609             address = CMManagerShim::DynamicIpv6Address;
       
   610         }
       
   611     } else {
       
   612         // Invalid address
       
   613         address.clear();
       
   614     }
       
   615 
       
   616     if (!address.isEmpty()) {
       
   617         // Save to CommsDat
       
   618         mCmConnectionMethod->setStringAttribute(attribute, address);
       
   619         if (tryUpdate()) {
       
   620             success = true;
       
   621             item->setContentWidgetData("text", address);
       
   622         }
       
   623     } else {
       
   624         // Inform user of invalid name
       
   625         showMessageBox(
       
   626             HbMessageBox::MessageTypeInformation,
       
   627             hbTrId("txt_occ_info_invalid_input"));
       
   628         // Restore previous setting
       
   629         address = getIpAddress(attribute);
       
   630         item->setContentWidgetData("text", address);
       
   631     }
       
   632     
       
   633     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_EXIT);
       
   634     return success;
       
   635 }
       
   636 
       
   637 /*!
       
   638     Shows message box with "OK" button using given text.
       
   639 */
       
   640 void CpWlanApAdvancedView::showMessageBox(
       
   641     HbMessageBox::MessageBoxType type,
       
   642     const QString &text)
       
   643 {
       
   644     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_SHOWMESSAGEBOX_ENTRY);
       
   645     
       
   646     // Create a message box
       
   647     mMessageBox = QSharedPointer<HbMessageBox>(new HbMessageBox(type));
       
   648     mMessageBox->setText(text);
       
   649     mMessageBox->setModal(true);
       
   650     mMessageBox->setTimeout(HbPopup::NoTimeout);
       
   651     mMessageBox->setDismissPolicy(HbPopup::NoDismiss);
       
   652     mMessageBox->open();
       
   653     
       
   654     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_SHOWMESSAGEBOX_EXIT);
       
   655 }
       
   656 
       
   657 /*!
       
   658     Tries to update connection method changes to CommsDat.
       
   659     Returns "true" if success, "false" if some error happened. 
       
   660 */
       
   661 bool CpWlanApAdvancedView::tryUpdate()
       
   662 {
       
   663     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_TRYUPDATE_ENTRY);
       
   664     
       
   665     // Try update
       
   666     bool success = true;
       
   667     try {
       
   668         mCmConnectionMethod->update();
       
   669     }
       
   670     catch (const std::exception&) {
       
   671         // Handle error
       
   672         handleUpdateError();
       
   673         
       
   674         success = false;
       
   675     }
       
   676 
       
   677     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_TRYUPDATE_EXIT);
       
   678     return success;
       
   679 }
       
   680 
       
   681 /*!
       
   682     Handles failed CommsDat update.
       
   683  */
       
   684 void CpWlanApAdvancedView::handleUpdateError()
       
   685 {
       
   686     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_HANDLEUPDATEERROR_ENTRY);
       
   687     
       
   688     // Show error note to user
       
   689     showMessageBox(
       
   690         HbMessageBox::MessageTypeWarning,
       
   691         hbTrId("txt_occ_info_unable_to_save_setting"));
       
   692     // Reload settings from CommsDat and update UI
       
   693     try {
       
   694         mCmConnectionMethod->refresh();
       
   695     }
       
   696     catch (const std::exception&) {
       
   697         // Ignore error from refresh. Most likely this will not happen, but
       
   698         // if it does, there isn't very much we can do.
       
   699         OstTrace0(
       
   700             TRACE_ERROR,
       
   701             CPWLANAPPADVANCEDVIEW_HANDLEUPDATEERROR,
       
   702             "Refresh failed");
       
   703     };
       
   704     updateIpv4Group();
       
   705     if (mIpv6Supported) {
       
   706         updateIpv6Group();
       
   707     }
       
   708     updateProxyGroup();
       
   709     
       
   710     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_HANDLEUPDATEERROR_EXIT);
       
   711 }
       
   712 
       
   713 /*!
       
   714     Initializes all settings groups.
       
   715 */
       
   716 void CpWlanApAdvancedView::setEditorPreferences(const QModelIndex index)
       
   717 {
       
   718     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_SETEDITORPREFERENCES_ENTRY);
       
   719     
       
   720     HbDataFormViewItem *viewItem = qobject_cast<HbDataFormViewItem *>
       
   721         (mForm->itemByIndex(index));
       
   722     HbDataFormModelItem *modelItem = mModel->itemFromIndex(index);
       
   723 
       
   724     if (modelItem == mIpv4Address
       
   725         || modelItem == mIpv4SubnetMask
       
   726         || modelItem == mIpv4Gateway
       
   727         || modelItem == mIpv4DnsAddress1
       
   728         || modelItem == mIpv4DnsAddress2
       
   729         || modelItem == mIpv6DnsAddress1
       
   730         || modelItem == mIpv6DnsAddress2
       
   731         || modelItem == mProxyServer
       
   732         || modelItem == mProxyPort) {
       
   733         // HbLineEdit items, get editor and editor interface
       
   734         HbLineEdit *edit = qobject_cast<HbLineEdit *>
       
   735             (viewItem->dataItemContentWidget());
       
   736         HbEditorInterface editorInterface(edit);
       
   737 
       
   738         if (modelItem == mIpv4Address
       
   739             || modelItem == mIpv4SubnetMask
       
   740             || modelItem == mIpv4Gateway
       
   741             || modelItem == mIpv4DnsAddress1
       
   742             || modelItem == mIpv4DnsAddress2) {
       
   743             // IPv4 IP address
       
   744             editorInterface.setMode(HbInputModeNumeric);
       
   745             editorInterface.setFilter(CpIpv4Filter::instance());
       
   746             edit->setMaxLength(CMManagerShim::CmIP4AddressLength);
       
   747         } else if (modelItem == mIpv6DnsAddress1
       
   748             || modelItem == mIpv6DnsAddress2) {
       
   749             // IPv6 IP address
       
   750             editorInterface.setInputConstraints(
       
   751                 HbEditorConstraintLatinAlphabetOnly);
       
   752             editorInterface.setFilter(CpIpv6Filter::instance());
       
   753             edit->setInputMethodHints(
       
   754                 Qt::ImhNoPredictiveText
       
   755                 | Qt::ImhPreferLowercase);
       
   756             edit->setMaxLength(CMManagerShim::CmIP6NameServerLength);
       
   757         } else if (modelItem == mProxyServer) {                
       
   758             // Proxy server address
       
   759             editorInterface.setMode(HbInputModeNone);
       
   760             editorInterface.setInputConstraints(
       
   761                 HbEditorConstraintLatinAlphabetOnly);
       
   762             editorInterface.setFilter(HbUrlFilter::instance());
       
   763             editorInterface.setEditorClass(HbInputEditorClassUrl);
       
   764             editorInterface.setDigitType(HbDigitTypeNone);
       
   765             edit->setInputMethodHints(
       
   766                 Qt::ImhNoPredictiveText
       
   767                 | Qt::ImhPreferLowercase);
       
   768             edit->setMaxLength(CMManagerShim::CmProxyServerNameLength);
       
   769         } else { /* mProxyPort */                
       
   770             // Proxy port number
       
   771             editorInterface.setMode(HbInputModeNumeric);
       
   772             edit->setInputMethodHints(Qt::ImhDigitsOnly);
       
   773             edit->setMaxLength(CMManagerShim::CmProxyPortNumberLength);
       
   774         }
       
   775     }
       
   776     
       
   777     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_SETEDITORPREFERENCES_EXIT);
       
   778 }
       
   779 
       
   780 /*!
       
   781     Handles change to IPv4 address mode (automatic/user defined).
       
   782 */
       
   783 void CpWlanApAdvancedView::changeIpv4AddressMode(int state)
       
   784 {
       
   785     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_ENTRY);
       
   786     
       
   787     bool ipv4AddressFromServer;
       
   788     if (state == Qt::Checked) {
       
   789         ipv4AddressFromServer = true;
       
   790     } else {
       
   791         ipv4AddressFromServer = false;
       
   792     }
       
   793     
       
   794     if (!ipv4AddressFromServer
       
   795         && getIpAddress(CMManagerShim::CmIPAddress) ==
       
   796             CMManagerShim::UnspecifiedIpv4Address) {
       
   797         // User defined IP address selected, but no valid address is stored.
       
   798         // Just enable the UI IP editors, because CMManager will update the
       
   799         // "IP address from server" flag by itself when a valid IP address
       
   800         // is stored.
       
   801         enableIpv4AddressFields(state);
       
   802     } else {
       
   803         // Save setting to CommsDat
       
   804         mCmConnectionMethod->setBoolAttribute(
       
   805             CMManagerShim::CmIPAddrFromServer,
       
   806             ipv4AddressFromServer);
       
   807         if (tryUpdate()) {
       
   808             enableIpv4AddressFields(state);
       
   809         }
       
   810     }
       
   811     
       
   812     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_EXIT);
       
   813 }
       
   814 
       
   815 /*!
       
   816     Saves IPv4 address to CommsDat.
       
   817 */
       
   818 void CpWlanApAdvancedView::changeIpv4Address()
       
   819 {
       
   820     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESS_ENTRY);
       
   821     
       
   822     if (validateAndSaveIpAddress(
       
   823         mIpv4Address,
       
   824         CMManagerShim::CmIPAddress,
       
   825         QAbstractSocket::IPv4Protocol)) {
       
   826         // In case the IP address is empty or 0.0.0.0, CMManager changes the
       
   827         // "IP address from server" flag to true. We need to refresh the UI to
       
   828         // make sure we are in sync.
       
   829         updateIpv4Group();
       
   830     }
       
   831 
       
   832     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4ADDRESS_EXIT);
       
   833 }
       
   834 
       
   835 /*!
       
   836     Saves IPv4 subnet mask to CommsDat.
       
   837 */
       
   838 void CpWlanApAdvancedView::changeIpv4SubnetMask()
       
   839 {
       
   840     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SUBNETMASK_ENTRY);
       
   841     
       
   842     (void)validateAndSaveIpAddress(
       
   843         mIpv4SubnetMask,
       
   844         CMManagerShim::CmIPNetmask,
       
   845         QAbstractSocket::IPv4Protocol);
       
   846     
       
   847     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SUBNETMASK_EXIT);
       
   848 }
       
   849 
       
   850 /*!
       
   851     Saves IPv4 gateway to CommsDat.
       
   852 */
       
   853 void CpWlanApAdvancedView::changeIpv4Gateway()
       
   854 {
       
   855     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4GATEWAY_ENTRY);
       
   856     
       
   857     (void)validateAndSaveIpAddress(
       
   858         mIpv4Gateway,
       
   859         CMManagerShim::CmIPGateway,
       
   860         QAbstractSocket::IPv4Protocol);
       
   861 
       
   862     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4GATEWAY_EXIT);
       
   863 }
       
   864 
       
   865 /*!
       
   866     Handles change to IPv4 DNS mode (automatic/user defined).
       
   867 */
       
   868 void CpWlanApAdvancedView::changeIpv4DnsMode(int state)
       
   869 {
       
   870     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4DNSMODE_ENTRY);
       
   871     
       
   872     bool dnsAddressFromServer;
       
   873     if (state == Qt::Checked) {
       
   874         dnsAddressFromServer = true;
       
   875     } else {
       
   876         dnsAddressFromServer = false;
       
   877     }
       
   878     // Save setting to CommsDat
       
   879     mCmConnectionMethod->setBoolAttribute(
       
   880         CMManagerShim::CmIPDNSAddrFromServer,
       
   881         dnsAddressFromServer);
       
   882     if (tryUpdate()) {
       
   883         enableIpv4DnsFields(state);
       
   884     }
       
   885     
       
   886     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4DNSMODE_EXIT);
       
   887 }
       
   888 
       
   889 /*!
       
   890     Saves IPv4 primary DNS address to CommsDat.
       
   891 */
       
   892 void CpWlanApAdvancedView::changeIpv4PrimaryDnsAddress()
       
   893 {
       
   894     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_ENTRY);
       
   895     
       
   896     if (validateAndSaveIpAddress(
       
   897         mIpv4DnsAddress1,
       
   898         CMManagerShim::CmIPNameServer1,
       
   899         QAbstractSocket::IPv4Protocol)) {
       
   900         // Address saved successfully, update "DNS address from server" flag
       
   901         mCmConnectionMethod->setBoolAttribute(
       
   902             CMManagerShim::CmIPDNSAddrFromServer,
       
   903             false);
       
   904         if (tryUpdate()) {
       
   905             // In case primary DNS address is empty or 0.0.0.0, CMManager will
       
   906             // check secondary DNS address and in case it is a valid address,
       
   907             // move it to the primary DNS address. We need to refresh the
       
   908             // UI to make sure we are in sync. If tryUpdate() fails it does
       
   909             // the refresh automatically, so only success case is handled
       
   910             // here.
       
   911             updateIpv4Group();            
       
   912         }
       
   913     }
       
   914     
       
   915     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_EXIT);
       
   916 }
       
   917 
       
   918 /*!
       
   919     Saves IPv4 secondary DNS address to CommsDat.
       
   920 */
       
   921 void CpWlanApAdvancedView::changeIpv4SecondaryDnsAddress()
       
   922 {
       
   923     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_ENTRY);
       
   924     
       
   925     if (validateAndSaveIpAddress(
       
   926         mIpv4DnsAddress2,
       
   927         CMManagerShim::CmIPNameServer2,
       
   928         QAbstractSocket::IPv4Protocol)) {
       
   929         // Address saved successfully, update "DNS address from server" flag
       
   930         mCmConnectionMethod->setBoolAttribute(
       
   931             CMManagerShim::CmIPDNSAddrFromServer,
       
   932             false);
       
   933         if (tryUpdate()) {
       
   934             // In case primary DNS address is empty or 0.0.0.0, CMManager will
       
   935             // write the address there instead of secondary DNS address, so we
       
   936             // need to refresh the UI to make sure we are in sync. If
       
   937             // tryUpdate() fails it does the refresh automatically, so only
       
   938             // success case is handled here.
       
   939             updateIpv4Group();
       
   940         }
       
   941     }
       
   942     
       
   943     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_EXIT);
       
   944 }
       
   945 
       
   946 /*!
       
   947     Handles change to IPv6 DNS mode (automatic/well-known/user defined).
       
   948 */
       
   949 void CpWlanApAdvancedView::changeIpv6DnsMode(int state)
       
   950 {
       
   951     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV6DNSMODE_ENTRY);
       
   952     
       
   953     // Update "DNS address from server" flag
       
   954     if (state == Ipv6DnsTypeAutomatic) {
       
   955         // Automatic
       
   956         mCmConnectionMethod->setBoolAttribute(
       
   957             CMManagerShim::CmIP6DNSAddrFromServer,
       
   958             true);
       
   959     } else {
       
   960         // User defined or well-known address
       
   961         mCmConnectionMethod->setBoolAttribute(
       
   962             CMManagerShim::CmIP6DNSAddrFromServer,
       
   963             false);
       
   964         
       
   965         if (state == Ipv6DnsTypeWellKnown) {
       
   966             // Well-known address, set DNS addresses and update UI
       
   967             mCmConnectionMethod->setStringAttribute(
       
   968                 CMManagerShim::CmIP6NameServer1,
       
   969                 CMManagerShim::KnownIpv6NameServer1);
       
   970             mIpv6DnsAddress1->setContentWidgetData(
       
   971                 "text",
       
   972                 CMManagerShim::KnownIpv6NameServer1);
       
   973             mCmConnectionMethod->setStringAttribute(
       
   974                 CMManagerShim::CmIP6NameServer2,
       
   975                 CMManagerShim::KnownIpv6NameServer2);
       
   976             mIpv6DnsAddress2->setContentWidgetData(
       
   977                 "text",
       
   978                 CMManagerShim::KnownIpv6NameServer2);        
       
   979         }
       
   980     }
       
   981 
       
   982     if (tryUpdate()) {
       
   983         enableIpv6DnsFields(state);
       
   984     }
       
   985     
       
   986     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV6DNSMODE_EXIT);
       
   987 }
       
   988 
       
   989 /*!
       
   990     Saves IPv6 primary DNS address to CommsDat.
       
   991 */
       
   992 void CpWlanApAdvancedView::changeIpv6PrimaryDnsAddress()
       
   993 {
       
   994     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_ENTRY);
       
   995     
       
   996     if (validateAndSaveIpAddress(
       
   997         mIpv6DnsAddress1,
       
   998         CMManagerShim::CmIP6NameServer1,
       
   999         QAbstractSocket::IPv6Protocol)) {
       
  1000         // Address saved successfully, update "DNS address from server" flag
       
  1001         mCmConnectionMethod->setBoolAttribute(
       
  1002             CMManagerShim::CmIP6DNSAddrFromServer,
       
  1003             false);
       
  1004         if (tryUpdate()) {
       
  1005             // In case primary DNS address is empty or 0:0:0:0:0:0:0:0,
       
  1006             // CMManager will check secondary DNS address and in case it is a
       
  1007             // valid address, move it to the primary DNS address. We need to
       
  1008             // refresh the UI to make sure we are in sync. If tryUpdate()
       
  1009             // fails it does the refresh automatically, so only success case
       
  1010             // is handled here.
       
  1011             updateIpv6Group();            
       
  1012         }
       
  1013     }
       
  1014     
       
  1015     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_EXIT);
       
  1016 }
       
  1017 
       
  1018 /*!
       
  1019     Saves IPv6 secondary DNS address to CommsDat.
       
  1020 */
       
  1021 void CpWlanApAdvancedView::changeIpv6SecondaryDnsAddress()
       
  1022 {
       
  1023     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_ENTRY);
       
  1024     
       
  1025     if (validateAndSaveIpAddress(
       
  1026         mIpv6DnsAddress2,
       
  1027         CMManagerShim::CmIP6NameServer2,
       
  1028         QAbstractSocket::IPv6Protocol)) {
       
  1029         // Address saved successfully, update "DNS address from server" flag
       
  1030         mCmConnectionMethod->setBoolAttribute(
       
  1031             CMManagerShim::CmIP6DNSAddrFromServer,
       
  1032             false);
       
  1033         if (tryUpdate()) {
       
  1034             // In case primary DNS address is empty or 0:0:0:0:0:0:0:0,
       
  1035             // CMManager will write the address there instead of secondary DNS
       
  1036             // address, so we need to refresh the UI to make sure we are in
       
  1037             // sync. If tryUpdate() fails it does the refresh automatically,
       
  1038             // so only success case is handled here.
       
  1039             updateIpv6Group();
       
  1040         }
       
  1041     }
       
  1042     
       
  1043     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_EXIT);
       
  1044 }
       
  1045 
       
  1046 /*!
       
  1047     Saves proxy server address to CommsDat.
       
  1048 */
       
  1049 void CpWlanApAdvancedView::changeProxyServer()
       
  1050 {
       
  1051     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEPROXYSERVER_ENTRY);
       
  1052     
       
  1053     QString proxyServer = mProxyServer->contentWidgetData("text").toString();
       
  1054     mCmConnectionMethod->setStringAttribute(
       
  1055         CMManagerShim::CmProxyServerName,
       
  1056         proxyServer);
       
  1057     if (tryUpdate()) {
       
  1058         // If proxy server name is empty, CMManager will also clear the
       
  1059         // proxy port. Therefore UI needs to be updated.
       
  1060         updateProxyGroup();
       
  1061     }
       
  1062     
       
  1063     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEPROXYSERVER_EXIT);
       
  1064 }
       
  1065 
       
  1066 /*!
       
  1067     Saves proxy port to CommsDat.
       
  1068 */
       
  1069 void CpWlanApAdvancedView::changeProxyPort()
       
  1070 {
       
  1071     OstTraceFunctionEntry0(CPWLANAPADVANCEDVIEW_CHANGEPROXYPORT_ENTRY);
       
  1072     
       
  1073     uint proxyPort = mProxyPort->contentWidgetData("text").toInt();
       
  1074     if (proxyPort <= 65535) {
       
  1075         if (proxyPort == 0) {
       
  1076             // Don't show zero
       
  1077             mProxyPort->setContentWidgetData("text", "");
       
  1078         }
       
  1079         mCmConnectionMethod->setIntAttribute(
       
  1080             CMManagerShim::CmProxyPortNumber,
       
  1081             proxyPort);
       
  1082         (void)tryUpdate();
       
  1083     } else {
       
  1084         // Inform user of invalid value
       
  1085         showMessageBox(
       
  1086             HbMessageBox::MessageTypeInformation,
       
  1087             hbTrId("txt_occ_info_invalid_input"));
       
  1088         // Restore previous setting
       
  1089         proxyPort = mCmConnectionMethod->getIntAttribute(
       
  1090             CMManagerShim::CmProxyPortNumber);
       
  1091         if (proxyPort > 0) {
       
  1092             mProxyPort->setContentWidgetData("text", QVariant(proxyPort));
       
  1093         } else {
       
  1094             mProxyPort->setContentWidgetData("text", "");
       
  1095         }
       
  1096     }
       
  1097     
       
  1098     OstTraceFunctionExit0(CPWLANAPADVANCEDVIEW_CHANGEPROXYPORT_EXIT);
       
  1099 }