cmmanager/cppacketdataapplugin/src/cppacketdataapadvancedview.cpp
branchRCL_3
changeset 57 05bc53fe583b
equal deleted inserted replaced
55:fc7b30ed2058 57:05bc53fe583b
       
     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 packet data 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 #include <etelpckt.h>
       
    34 
       
    35 // User includes
       
    36 #include "cpipv4filter.h"
       
    37 #include "cpipv6filter.h"
       
    38 #include "cppacketdataapadvancedview.h"
       
    39 
       
    40 #include "OstTraceDefinitions.h"
       
    41 #ifdef OST_TRACE_COMPILER_IN_USE
       
    42 #include "cppacketdataapadvancedviewTraces.h"
       
    43 #endif
       
    44 
       
    45 /*!
       
    46     \class CpPacketDataApAdvancedView
       
    47     \brief Implements the advanced settings view for packet data bearer
       
    48            access points.
       
    49 */
       
    50 
       
    51 // External function prototypes
       
    52 
       
    53 // Local constants
       
    54 
       
    55 // ======== LOCAL FUNCTIONS ========
       
    56 
       
    57 // ======== MEMBER FUNCTIONS ========
       
    58 
       
    59 /*!
       
    60     Constructor.
       
    61 */
       
    62 CpPacketDataApAdvancedView::CpPacketDataApAdvancedView(
       
    63     CmConnectionMethodShim *cmConnectionMethod,
       
    64     QGraphicsItem *parent) :
       
    65         CpBaseSettingView(0, parent),
       
    66         mForm(0),
       
    67         mModel(0),
       
    68         mCmConnectionMethod(cmConnectionMethod),
       
    69         mIpGroup(0),
       
    70         mNetworkType(0),
       
    71         mIpv4Automatic(0),
       
    72         mIpv4Address(0),
       
    73         mIpv4DnsAutomatic(0),
       
    74         mIpv4DnsAddress1(0),
       
    75         mIpv4DnsAddress2(0),
       
    76         mIpv6DnsAutomatic(0),
       
    77         mIpv6DnsAddress1(0),
       
    78         mIpv6DnsAddress2(0),
       
    79         mProxyGroup(0),
       
    80         mProxyServer(0),
       
    81         mProxyPort(0),
       
    82         mMessageBox(0),
       
    83         mIpv6Supported(false),
       
    84         mCurrentNetworkType(NetworkTypeIpv4)
       
    85 {
       
    86     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_ENTRY);
       
    87     
       
    88     // Construct packet data 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(CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_EXIT);
       
   101 }
       
   102 
       
   103 /*!
       
   104     Destructor.
       
   105 */
       
   106 CpPacketDataApAdvancedView::~CpPacketDataApAdvancedView()
       
   107 {
       
   108     OstTraceFunctionEntry0(DUP1_CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_ENTRY);
       
   109     
       
   110     OstTraceFunctionExit0(DUP1_CPPACKETDATAAPADVANCEDVIEW_CPPACKETDATAAPADVANCEDVIEW_EXIT);
       
   111 }
       
   112 
       
   113 /*!
       
   114     Creates all advanced settings groups.
       
   115 */
       
   116 void CpPacketDataApAdvancedView::createAdvancedSettings()
       
   117 {
       
   118     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_ENTRY);
       
   119     
       
   120     // Create settings groups
       
   121     createIpGroup();
       
   122     createProxyGroup();
       
   123     
       
   124     // Read values and update UI
       
   125     updateIpGroup();
       
   126     updateProxyGroup();
       
   127     
       
   128     // Connect signal to initialize settings item widgets
       
   129     bool status = connect(
       
   130         mForm,
       
   131         SIGNAL(itemShown(const QModelIndex)),
       
   132         this,
       
   133         SLOT(setEditorPreferences(const QModelIndex)));
       
   134     Q_ASSERT(status);
       
   135     
       
   136     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEADVANCEDSETTINGS_EXIT);
       
   137 }
       
   138 
       
   139 /*!
       
   140     Creates the IP settings group.
       
   141 */
       
   142 void CpPacketDataApAdvancedView::createIpGroup()
       
   143 {
       
   144     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPGROUP_ENTRY);
       
   145     
       
   146     // IP settings group
       
   147     mIpGroup = new CpSettingFormItemData(
       
   148         HbDataFormModelItem::GroupItem,
       
   149         hbTrId("txt_occ_subhead_ip_settings"));
       
   150     mModel->appendDataFormItem(mIpGroup);
       
   151     
       
   152     if (mIpv6Supported) {
       
   153         // IPv6 supported
       
   154         // Network type
       
   155         mNetworkType = new CpSettingFormItemData(
       
   156             HbDataFormModelItem::ComboBoxItem,
       
   157             hbTrId("txt_occ_setlabel_network_type"));
       
   158         QStringList networkTypeList;
       
   159         networkTypeList
       
   160             << hbTrId("txt_occ_setlabel_network_type_val_ipv4")
       
   161             << hbTrId("txt_occ_setlabel_network_type_val_ipv6");
       
   162         mNetworkType->setContentWidgetData("items", networkTypeList);
       
   163         mForm->addConnection(
       
   164             mNetworkType,
       
   165             SIGNAL(currentIndexChanged(int)),
       
   166             this,
       
   167             SLOT(changeNetworkType(int)));
       
   168         mNetworkType->setContentWidgetData("objectName", "networkTypeCB");
       
   169         mIpGroup->appendChild(mNetworkType);
       
   170         
       
   171         mCurrentNetworkType = getNetworkType();
       
   172         if (mCurrentNetworkType == NetworkTypeIpv4) {
       
   173             // IPv4
       
   174             createIpv4SettingItems();
       
   175         } else {
       
   176             // IPv6
       
   177             createIpv6SettingItems();
       
   178         }
       
   179     } else {
       
   180         // IPv6 not supported, create IPv4 settings items
       
   181         createIpv4SettingItems();
       
   182     }
       
   183     
       
   184     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPGROUP_EXIT);
       
   185 }
       
   186 
       
   187 /*!
       
   188     Reads attribute values and updates the IP settings group.
       
   189 */
       
   190 void CpPacketDataApAdvancedView::updateIpGroup()
       
   191 {
       
   192     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_UPDATEIPGROUP_ENTRY);
       
   193     
       
   194     // Network type
       
   195     if (mNetworkType) {
       
   196         // Every time update is called we check if network type (IPv4/IPv6)
       
   197         // has changed and update items on UI if necessary.
       
   198     
       
   199         // Get network type from CommsDat
       
   200         NetworkType newNetworkType = getNetworkType();
       
   201         if (newNetworkType != mCurrentNetworkType) {
       
   202             // Network type has changed, update UI
       
   203             if (newNetworkType == NetworkTypeIpv6) {
       
   204                 // IPv4 -> IPv6
       
   205                 deleteIpv4SettingItems();
       
   206                 createIpv6SettingItems();
       
   207             } else {
       
   208                 // IPv6 -> IPv4
       
   209                 deleteIpv6SettingItems();
       
   210                 createIpv4SettingItems();
       
   211             }
       
   212             mCurrentNetworkType = newNetworkType;
       
   213         }
       
   214         mNetworkType->setContentWidgetData("currentIndex", newNetworkType);
       
   215     }
       
   216     
       
   217     // Phone IP address (IPv4)
       
   218     // "Automatic" checkbox
       
   219     if (mIpv4Automatic) {
       
   220         bool ipAddressFromServer = mCmConnectionMethod->getBoolAttribute(
       
   221             CMManagerShim::PacketDataIPAddrFromServer);
       
   222         Qt::CheckState state = Qt::Unchecked;
       
   223         if (ipAddressFromServer) {
       
   224             state = Qt::Checked;
       
   225         }
       
   226         mIpv4Automatic->setContentWidgetData("checkState", state);
       
   227 
       
   228         // Enable/disable user defined IP address fields
       
   229         enableIpv4AddressFields(state);
       
   230     }
       
   231 
       
   232     // Phone IP address (IPv4)
       
   233     if (mIpv4Address) {
       
   234         QString string = getIpAddress(CMManagerShim::CmIPAddress);
       
   235         mIpv4Address->setContentWidgetData("text", string);
       
   236     }
       
   237     
       
   238     // IPv4 DNS addresses
       
   239     // "Automatic" checkbox
       
   240     if (mIpv4DnsAutomatic) {
       
   241         Qt::CheckState state = Qt::Unchecked;
       
   242         if (mCmConnectionMethod->getBoolAttribute(
       
   243             CMManagerShim::CmIPDNSAddrFromServer)) {
       
   244             state = Qt::Checked;
       
   245         }
       
   246         mIpv4DnsAutomatic->setContentWidgetData("checkState", state);
       
   247 
       
   248         // Enable/disable user defined DNS address fields
       
   249         enableIpv4DnsFields(state);
       
   250     }
       
   251     
       
   252     // IPv4 primary DNS address
       
   253     if (mIpv4DnsAddress1) {
       
   254         QString string = getIpAddress(CMManagerShim::CmIPNameServer1);
       
   255         mIpv4DnsAddress1->setContentWidgetData("text", string);
       
   256     }
       
   257     
       
   258     // IPv4 secondary DNS address
       
   259     if (mIpv4DnsAddress2) {
       
   260         QString string = getIpAddress(CMManagerShim::CmIPNameServer2);
       
   261         mIpv4DnsAddress2->setContentWidgetData("text", string);
       
   262     }
       
   263     
       
   264     // IPv6 DNS addresses
       
   265     // Automatic/well-known/user defined combobox
       
   266     if (mIpv6DnsAutomatic) {
       
   267         uint type = getIpv6DnsType();
       
   268         mIpv6DnsAutomatic->setContentWidgetData("currentIndex", type);
       
   269 
       
   270         // Enable/disable user defined DNS address fields
       
   271         enableIpv6DnsFields(type);
       
   272     }
       
   273     
       
   274     // IPv6 primary DNS address
       
   275     if (mIpv6DnsAddress1) {
       
   276         QString string = getIpAddress(CMManagerShim::CmIP6NameServer1);
       
   277         mIpv6DnsAddress1->setContentWidgetData("text", string);
       
   278     }
       
   279     
       
   280     // IPv6 secondary DNS address
       
   281     if (mIpv6DnsAddress2) {
       
   282         QString string = getIpAddress(CMManagerShim::CmIP6NameServer2);
       
   283         mIpv6DnsAddress2->setContentWidgetData("text", string);
       
   284     }
       
   285     
       
   286     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_UPDATEIPGROUP_EXIT);
       
   287 }
       
   288 
       
   289 /*!
       
   290     Creates the IPv4 setting items.
       
   291 */
       
   292 void CpPacketDataApAdvancedView::createIpv4SettingItems()
       
   293 {
       
   294     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV4SETTINGITEMS_ENTRY);
       
   295 
       
   296     // Phone IP address
       
   297     // "Automatic" checkbox
       
   298     mIpv4Automatic = new CpSettingFormItemData(
       
   299         HbDataFormModelItem::CheckBoxItem,
       
   300         hbTrId("txt_occ_setlabel_phone_ip_address"));
       
   301     mIpv4Automatic->setContentWidgetData(
       
   302         "text",
       
   303         hbTrId("txt_occ_setlabel_val_automatic"));
       
   304     mForm->addConnection(
       
   305         mIpv4Automatic,
       
   306         SIGNAL(stateChanged(int)),
       
   307         this,
       
   308         SLOT(changeIpv4AddressMode(int)));
       
   309     mIpv4Automatic->setContentWidgetData("objectName", "ipv4AutomaticCB");
       
   310     mIpGroup->appendChild(mIpv4Automatic);
       
   311     
       
   312     // Phone IP address
       
   313     mIpv4Address = new CpSettingFormItemData(
       
   314         HbDataFormModelItem::TextItem,
       
   315         hbTrId("txt_occ_setlabel_phone_ip_address"));
       
   316     mForm->addConnection(
       
   317         mIpv4Address,
       
   318         SIGNAL(editingFinished()),
       
   319         this,
       
   320         SLOT(changeIpv4Address()));
       
   321     mIpv4Address->setContentWidgetData("objectName", "ipv4AddressEdit");
       
   322     mIpGroup->appendChild(mIpv4Address);
       
   323     
       
   324     // DNS addresses
       
   325     // "Automatic" checkbox
       
   326     mIpv4DnsAutomatic = new CpSettingFormItemData(
       
   327         HbDataFormModelItem::CheckBoxItem,
       
   328         hbTrId("txt_occ_setlabel_dns_addresses"));
       
   329     mIpv4DnsAutomatic->setContentWidgetData(
       
   330         "text",
       
   331         hbTrId("txt_occ_setlabel_val_automatic"));
       
   332     mForm->addConnection(
       
   333         mIpv4DnsAutomatic,
       
   334         SIGNAL(stateChanged(int)), 
       
   335         this,
       
   336         SLOT(changeIpv4DnsMode(int)));
       
   337     mIpv4DnsAutomatic->setContentWidgetData("objectName", "ipv4DnsAutomaticCB");
       
   338     mIpGroup->appendChild(mIpv4DnsAutomatic);
       
   339     
       
   340     // Primary DNS address
       
   341     mIpv4DnsAddress1 = new CpSettingFormItemData(
       
   342         HbDataFormModelItem::TextItem,
       
   343         hbTrId("txt_occ_setlabel_primary_name_server"));
       
   344     mForm->addConnection(
       
   345         mIpv4DnsAddress1,
       
   346         SIGNAL(editingFinished()), 
       
   347         this,
       
   348         SLOT(changeIpv4PrimaryDnsAddress()));
       
   349     mIpv4DnsAddress1->setContentWidgetData("objectName", "ipv4DnsAddress1Edit");
       
   350     mIpGroup->appendChild(mIpv4DnsAddress1);
       
   351     
       
   352     // Secondary DNS address
       
   353     mIpv4DnsAddress2 = new CpSettingFormItemData(
       
   354         HbDataFormModelItem::TextItem,
       
   355         hbTrId("txt_occ_setlabel_secondary_name_server"));
       
   356     mForm->addConnection(
       
   357         mIpv4DnsAddress2,
       
   358         SIGNAL(editingFinished()), 
       
   359         this,
       
   360         SLOT(changeIpv4SecondaryDnsAddress()));
       
   361     mIpv4DnsAddress2->setContentWidgetData("objectName", "ipv4DnsAddress2Edit");
       
   362     mIpGroup->appendChild(mIpv4DnsAddress2);
       
   363     
       
   364     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV4SETTINGITEMS_EXIT);
       
   365 }
       
   366 
       
   367 /*!
       
   368     Deletes the IPv4 setting items.
       
   369 */
       
   370 void CpPacketDataApAdvancedView::deleteIpv4SettingItems()
       
   371 {
       
   372     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV4SETTINGITEMS_ENTRY);
       
   373 
       
   374     // Phone IP address
       
   375     // "Automatic" checkbox
       
   376     if (mIpv4Automatic) {
       
   377         mIpGroup->removeChild(mIpGroup->indexOf(mIpv4Automatic));
       
   378         mIpv4Automatic = NULL;
       
   379     }
       
   380     
       
   381     // Phone IP address
       
   382     if (mIpv4Address) {
       
   383         mIpGroup->removeChild(mIpGroup->indexOf(mIpv4Address));
       
   384         mIpv4Address = NULL;
       
   385     }
       
   386     
       
   387     // DNS addresses
       
   388     // "Automatic" checkbox
       
   389     if (mIpv4DnsAutomatic) {
       
   390         mIpGroup->removeChild(mIpGroup->indexOf(mIpv4DnsAutomatic));
       
   391         mIpv4DnsAutomatic = NULL;
       
   392     }
       
   393     
       
   394     // Primary DNS address
       
   395     if (mIpv4DnsAddress1) {
       
   396         mIpGroup->removeChild(mIpGroup->indexOf(mIpv4DnsAddress1));
       
   397         mIpv4DnsAddress1 = NULL;
       
   398     }
       
   399     
       
   400     // Secondary DNS address
       
   401     if (mIpv4DnsAddress2) {
       
   402         mIpGroup->removeChild(mIpGroup->indexOf(mIpv4DnsAddress2));
       
   403         mIpv4DnsAddress2 = NULL;
       
   404     }
       
   405     
       
   406     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV4SETTINGITEMS_EXIT);
       
   407 }
       
   408 
       
   409 /*!
       
   410     Creates the IPv6 setting items.
       
   411 */
       
   412 void CpPacketDataApAdvancedView::createIpv6SettingItems()
       
   413 {
       
   414     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV6SETTINGITEMS_ENTRY);
       
   415     
       
   416     // DNS addresses
       
   417     // Automatic/well-known/user defined combobox
       
   418     mIpv6DnsAutomatic = new CpSettingFormItemData(
       
   419         HbDataFormModelItem::ComboBoxItem,
       
   420         hbTrId("txt_occ_setlabel_dns_addresses"));
       
   421     QStringList dnsModeList;
       
   422     // Order of the list must match the Ipv6DnsType enum
       
   423     dnsModeList
       
   424         << hbTrId("txt_occ_setlabel_val_automatic")
       
   425         << hbTrId("txt_occ_setlabel_dns_addresses_val_wellknown")
       
   426         << hbTrId("txt_occ_setlabel_dns_addresses_val_user_defined");
       
   427     mIpv6DnsAutomatic->setContentWidgetData("items", dnsModeList);
       
   428     mForm->addConnection(
       
   429         mIpv6DnsAutomatic,
       
   430         SIGNAL(currentIndexChanged(int)),
       
   431         this,
       
   432         SLOT(changeIpv6DnsMode(int)));
       
   433     mIpv6DnsAutomatic->setContentWidgetData("objectName", "ipv6DnsAutomaticCB");
       
   434     mIpGroup->appendChild(mIpv6DnsAutomatic);
       
   435     
       
   436     // Primary DNS address
       
   437     mIpv6DnsAddress1 = new CpSettingFormItemData(
       
   438         HbDataFormModelItem::TextItem,
       
   439         hbTrId("txt_occ_setlabel_primary_name_server"));
       
   440     mForm->addConnection(
       
   441         mIpv6DnsAddress1,
       
   442         SIGNAL(editingFinished()),
       
   443         this,
       
   444         SLOT(changeIpv6PrimaryDnsAddress()));
       
   445     mIpv6DnsAddress1->setContentWidgetData("objectName", "ipv6DnsAddress1Edit");
       
   446     mIpGroup->appendChild(mIpv6DnsAddress1);
       
   447     
       
   448     // Secondary DNS address
       
   449     mIpv6DnsAddress2 = new CpSettingFormItemData(
       
   450         HbDataFormModelItem::TextItem,
       
   451         hbTrId("txt_occ_setlabel_secondary_name_server"));
       
   452     mForm->addConnection(
       
   453         mIpv6DnsAddress2,
       
   454         SIGNAL(editingFinished()),
       
   455         this,
       
   456         SLOT(changeIpv6SecondaryDnsAddress()));
       
   457     mIpv6DnsAddress2->setContentWidgetData("objectName", "ipv6DnsAddress2Edit");
       
   458     mIpGroup->appendChild(mIpv6DnsAddress2);
       
   459     
       
   460     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEIPV6SETTINGITEMS_EXIT);
       
   461 }
       
   462 
       
   463 /*!
       
   464     Deletes the IPv6 setting items.
       
   465 */
       
   466 void CpPacketDataApAdvancedView::deleteIpv6SettingItems()
       
   467 {
       
   468     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV6SETTINGITEMS_ENTRY);
       
   469     
       
   470     // DNS addresses
       
   471     // Automatic/well-known/user defined combobox
       
   472     if (mIpv6DnsAutomatic) {
       
   473         mIpGroup->removeChild(mIpGroup->indexOf(mIpv6DnsAutomatic));
       
   474         mIpv6DnsAutomatic = NULL;
       
   475     }
       
   476     
       
   477     // Primary DNS address
       
   478     if (mIpv6DnsAddress1) {
       
   479         mIpGroup->removeChild(mIpGroup->indexOf(mIpv6DnsAddress1));
       
   480         mIpv6DnsAddress1 = NULL;
       
   481     }
       
   482     
       
   483     // Secondary DNS address
       
   484     if (mIpv6DnsAddress2) {
       
   485         mIpGroup->removeChild(mIpGroup->indexOf(mIpv6DnsAddress2));
       
   486         mIpv6DnsAddress2 = NULL;
       
   487     }
       
   488     
       
   489     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_DELETEIPV6SETTINGITEMS_EXIT);
       
   490 }
       
   491 
       
   492 /*!
       
   493     Creates the proxy settings group.
       
   494 */
       
   495 void CpPacketDataApAdvancedView::createProxyGroup()
       
   496 {
       
   497     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CREATEPROXYGROUP_ENTRY);
       
   498     
       
   499     // Proxy settings group
       
   500     mProxyGroup = new CpSettingFormItemData(
       
   501         HbDataFormModelItem::GroupItem, 
       
   502         hbTrId("txt_occ_subhead_proxy_settings"));
       
   503     mModel->appendDataFormItem(mProxyGroup);
       
   504     
       
   505     // Proxy server address
       
   506     mProxyServer = new CpSettingFormItemData(
       
   507         HbDataFormModelItem::TextItem,
       
   508         hbTrId("txt_occ_setlabel_proxy_server_address"));
       
   509     mForm->addConnection(
       
   510         mProxyServer,
       
   511         SIGNAL(editingFinished()),
       
   512         this,
       
   513         SLOT(changeProxyServer()));
       
   514     mProxyServer->setContentWidgetData("objectName", "proxyServerEdit");
       
   515     mProxyGroup->appendChild(mProxyServer);
       
   516     
       
   517     // Proxy port number
       
   518     mProxyPort = new CpSettingFormItemData(
       
   519         HbDataFormModelItem::TextItem,
       
   520         hbTrId("txt_occ_setlabel_proxy_port_number"));
       
   521     mForm->addConnection(
       
   522         mProxyPort,
       
   523         SIGNAL(editingFinished()),
       
   524         this,
       
   525         SLOT(changeProxyPort()));
       
   526     mProxyPort->setContentWidgetData("objectName", "proxyPortEdit");
       
   527     mProxyGroup->appendChild(mProxyPort);
       
   528     
       
   529     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CREATEPROXYGROUP_EXIT);
       
   530 }
       
   531 
       
   532 /*!
       
   533     Reads attribute values and updates the proxy settings group.
       
   534 */
       
   535 void CpPacketDataApAdvancedView::updateProxyGroup()
       
   536 {
       
   537     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_UPDATEPROXYGROUP_ENTRY);
       
   538     
       
   539     // Proxy server address
       
   540     QString serverAddress = mCmConnectionMethod->getStringAttribute(
       
   541         CMManagerShim::CmProxyServerName);
       
   542     mProxyServer->setContentWidgetData("text", serverAddress);
       
   543     
       
   544     // Proxy port number
       
   545     uint portNumber = mCmConnectionMethod->getIntAttribute(
       
   546         CMManagerShim::CmProxyPortNumber);
       
   547     if (portNumber > 0) {
       
   548         mProxyPort->setContentWidgetData("text", QVariant(portNumber));
       
   549     } else {
       
   550         mProxyPort->setContentWidgetData("text", "");
       
   551     }
       
   552     
       
   553     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_UPDATEPROXYGROUP_EXIT);
       
   554 }
       
   555 
       
   556 /*!
       
   557     Reads network type (IPv4/IPv6) from CommsDat.
       
   558 */
       
   559 CpPacketDataApAdvancedView::NetworkType CpPacketDataApAdvancedView::getNetworkType()
       
   560 {
       
   561     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_GETNETWORKTYPE_ENTRY);
       
   562 
       
   563     uint networkType = mCmConnectionMethod->getIntAttribute(
       
   564         CMManagerShim::PacketDataPDPType);
       
   565     
       
   566     if (networkType == RPacketContext::EPdpTypeIPv6) {
       
   567         OstTraceFunctionExit0(DUP1_CPPACKETDATAAPADVANCEDVIEW_GETNETWORKTYPE_EXIT);
       
   568         return NetworkTypeIpv6;
       
   569     }
       
   570 
       
   571     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_GETNETWORKTYPE_EXIT);
       
   572     return NetworkTypeIpv4;
       
   573 }
       
   574 
       
   575 /*!
       
   576     Reads an IP address from CommsDat with given attribute. If string is
       
   577     empty, a zero address (0.0.0.0 or 0:0:0:0:0:0:0:0) is returned.
       
   578 */
       
   579 QString CpPacketDataApAdvancedView::getIpAddress(
       
   580     CMManagerShim::ConnectionMethodAttribute attribute)
       
   581 {
       
   582     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_GETIPADDRESS_ENTRY);
       
   583     
       
   584     QString ipAddress = mCmConnectionMethod->getStringAttribute(attribute);
       
   585     
       
   586     if (ipAddress.isEmpty()) {
       
   587         // String is empty, return a zero address instead
       
   588         switch (attribute) {
       
   589             case CMManagerShim::CmIPAddress:
       
   590             case CMManagerShim::CmIPNameServer1:
       
   591             case CMManagerShim::CmIPNameServer2:
       
   592                 // IPv4 address
       
   593                 ipAddress = CMManagerShim::UnspecifiedIpv4Address; 
       
   594                 break;
       
   595             
       
   596             case CMManagerShim::CmIP6NameServer1:
       
   597             case CMManagerShim::CmIP6NameServer2:
       
   598                 // IPv6 address
       
   599                 ipAddress = CMManagerShim::DynamicIpv6Address;
       
   600                 break;
       
   601         }
       
   602     }
       
   603     
       
   604     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_GETIPADDRESS_EXIT);
       
   605     return ipAddress;
       
   606 }
       
   607 
       
   608 /*!
       
   609     Resolves IPv6 DNS address type.
       
   610 */
       
   611 CpPacketDataApAdvancedView::Ipv6DnsType CpPacketDataApAdvancedView::getIpv6DnsType()
       
   612 {
       
   613     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_GETIPV6DNSTYPE_ENTRY);
       
   614     
       
   615     // Read "DNS address from server" flag
       
   616     bool dnsAddressFromServer = mCmConnectionMethod->getBoolAttribute(
       
   617         CMManagerShim::CmIP6DNSAddrFromServer);
       
   618     
       
   619     // Read IPv6 DNS addresses from CommsDat
       
   620     QString primaryAddress = mCmConnectionMethod->getStringAttribute(
       
   621         CMManagerShim::CmIP6NameServer1);
       
   622     QString secondaryAddress = mCmConnectionMethod->getStringAttribute(
       
   623         CMManagerShim::CmIP6NameServer2);
       
   624 
       
   625     // Resolve IPv6 DNS address type
       
   626     Ipv6DnsType type = Ipv6DnsTypeUserDefined;
       
   627     if (dnsAddressFromServer) {
       
   628         // Automatic
       
   629         type = Ipv6DnsTypeAutomatic;
       
   630     } else if (primaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer1
       
   631         && secondaryAddress.toLower() == CMManagerShim::KnownIpv6NameServer2) {
       
   632         // Well-known IPv6 DNS addresses
       
   633         type = Ipv6DnsTypeWellKnown;
       
   634     }
       
   635 
       
   636     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_GETIPV6DNSTYPE_EXIT);
       
   637     return type;
       
   638 }
       
   639 
       
   640 /*!
       
   641     Sets IPv4 address field enabled/disabled.
       
   642 */
       
   643 void CpPacketDataApAdvancedView::enableIpv4AddressFields(int state)
       
   644 {
       
   645     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_ENTRY);
       
   646     
       
   647     if (state == Qt::Checked) {
       
   648         // Automatic, disable text field
       
   649         if (mIpv4Address) {
       
   650             mIpv4Address->setEnabled(false);
       
   651         }
       
   652     } else {
       
   653         // User defined, enable text field
       
   654         if (mIpv4Address) {
       
   655             mIpv4Address->setEnabled(true);
       
   656         }
       
   657     }
       
   658     
       
   659     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4ADDRESSFIELDS_EXIT);
       
   660 }
       
   661 
       
   662 /*!
       
   663     Sets IPv4 DNS address fields enabled/disabled.
       
   664 */
       
   665 void CpPacketDataApAdvancedView::enableIpv4DnsFields(int state)
       
   666 {
       
   667     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_ENTRY);
       
   668     
       
   669     if (state == Qt::Checked) {
       
   670         // Automatic, disable text fields
       
   671         if (mIpv4DnsAddress1) {
       
   672             mIpv4DnsAddress1->setEnabled(false);
       
   673         }
       
   674         if (mIpv4DnsAddress2) {
       
   675             mIpv4DnsAddress2->setEnabled(false);
       
   676         }
       
   677     } else {
       
   678         // User defined, enable text fields
       
   679         if (mIpv4DnsAddress1) {
       
   680             mIpv4DnsAddress1->setEnabled(true);
       
   681         }
       
   682         if (mIpv4DnsAddress2) {
       
   683             mIpv4DnsAddress2->setEnabled(true);
       
   684         }
       
   685     }
       
   686     
       
   687     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV4DNSFIELDS_EXIT);
       
   688 }
       
   689 
       
   690 /*!
       
   691     Sets IPv6 DNS address fields enabled/disabled.
       
   692 */
       
   693 void CpPacketDataApAdvancedView::enableIpv6DnsFields(int selectionIndex)
       
   694 {
       
   695     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_ENTRY);
       
   696     
       
   697     // Check combobox value
       
   698     if (selectionIndex == Ipv6DnsTypeUserDefined) {
       
   699         // User-defined, enable text fields
       
   700         if (mIpv6DnsAddress1) {
       
   701             mIpv6DnsAddress1->setEnabled(true);
       
   702         }
       
   703         if (mIpv6DnsAddress2) {
       
   704             mIpv6DnsAddress2->setEnabled(true);
       
   705         }
       
   706     } else {
       
   707         // Automatic or well-known, disable text fields
       
   708         if (mIpv6DnsAddress1) {
       
   709             mIpv6DnsAddress1->setEnabled(false);
       
   710         }
       
   711         if (mIpv6DnsAddress2) {
       
   712             mIpv6DnsAddress2->setEnabled(false);
       
   713         }
       
   714     }
       
   715     
       
   716     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_ENABLEIPV6DNSFIELDS_EXIT);
       
   717 }
       
   718 
       
   719 /*!
       
   720     Validates an IP address and saves it to CommsDat in case it was a valid
       
   721     address or an empty string. In case the address is not valid, an error
       
   722     note is shown to the user and previous setting is restored to the UI.
       
   723 */
       
   724 bool CpPacketDataApAdvancedView::validateAndSaveIpAddress(
       
   725     HbDataFormModelItem *item,
       
   726     CMManagerShim::ConnectionMethodAttribute attribute,
       
   727     QAbstractSocket::NetworkLayerProtocol protocol)
       
   728 {
       
   729     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_ENTRY);
       
   730     
       
   731     bool success = false;
       
   732     
       
   733     // Check address
       
   734     QString address = item->contentWidgetData("text").toString();
       
   735     QHostAddress hostAddress;
       
   736     if (hostAddress.setAddress(address)
       
   737         && hostAddress.protocol() == protocol) {
       
   738         // Proper address, convert to lower case (IPv6)
       
   739         address = hostAddress.toString().toLower();
       
   740     } else if (address.isEmpty()) {
       
   741         // Empty string, replace with 0.0.0.0 or 0:0:0:0:0:0:0:0
       
   742         if (protocol == QAbstractSocket::IPv4Protocol) {
       
   743             address = CMManagerShim::UnspecifiedIpv4Address;
       
   744         } else {
       
   745             address = CMManagerShim::DynamicIpv6Address;
       
   746         }
       
   747     } else {
       
   748         // Invalid address
       
   749         address.clear();
       
   750     }
       
   751 
       
   752     if (!address.isEmpty()) {
       
   753         // Save to CommsDat
       
   754         mCmConnectionMethod->setStringAttribute(attribute, address);
       
   755         if (tryUpdate()) {
       
   756             success = true;
       
   757             item->setContentWidgetData("text", address);
       
   758         }
       
   759     } else {
       
   760         // Inform user of invalid name
       
   761         showMessageBox(
       
   762             HbMessageBox::MessageTypeInformation,
       
   763             hbTrId("txt_occ_info_invalid_input"));
       
   764         // Restore previous setting
       
   765         address = getIpAddress(attribute);
       
   766         item->setContentWidgetData("text", address);
       
   767     }
       
   768     
       
   769     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_VALIDATEANDSAVEIPADDRESS_EXIT);
       
   770     return success;
       
   771 }
       
   772 
       
   773 /*!
       
   774     Shows message box with "OK" button using given text.
       
   775 */
       
   776 void CpPacketDataApAdvancedView::showMessageBox(
       
   777     HbMessageBox::MessageBoxType type,
       
   778     const QString &text)
       
   779 {
       
   780     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_SHOWMESSAGEBOX_ENTRY);
       
   781     
       
   782     // Create a message box
       
   783     mMessageBox = QSharedPointer<HbMessageBox>(new HbMessageBox(type));
       
   784     mMessageBox->setText(text);
       
   785     mMessageBox->setModal(true);
       
   786     mMessageBox->setTimeout(HbPopup::NoTimeout);
       
   787     mMessageBox->open();
       
   788     
       
   789     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_SHOWMESSAGEBOX_EXIT);
       
   790 }
       
   791 
       
   792 /*!
       
   793     Tries to update connection method changes to CommsDat.
       
   794     Returns "true" if success, "false" if some error happened. 
       
   795 */
       
   796 bool CpPacketDataApAdvancedView::tryUpdate()
       
   797 {
       
   798     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_TRYUPDATE_ENTRY);
       
   799     
       
   800     // Try update
       
   801     try {
       
   802         mCmConnectionMethod->update();
       
   803     }
       
   804     catch (const std::exception&) {
       
   805         // Handle error
       
   806         handleUpdateError();
       
   807         
       
   808         OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_TRYUPDATE_EXIT);
       
   809         return false;
       
   810     }
       
   811 
       
   812     OstTraceFunctionExit0(DUP1_CPPACKETDATAAPADVANCEDVIEW_TRYUPDATE_EXIT);
       
   813     return true;
       
   814 }
       
   815 
       
   816 /*!
       
   817     Handles failed CommsDat update.
       
   818  */
       
   819 void CpPacketDataApAdvancedView::handleUpdateError()
       
   820 {
       
   821     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_HANDLEUPDATEERROR_ENTRY);
       
   822     
       
   823     // Show error note to user
       
   824     showMessageBox(
       
   825         HbMessageBox::MessageTypeWarning,
       
   826         hbTrId("txt_occ_info_unable_to_save_setting"));
       
   827     // Reload settings from CommsDat and update UI
       
   828     try {
       
   829         mCmConnectionMethod->refresh();
       
   830     }
       
   831     catch (const std::exception&) {
       
   832         // Ignore error from refresh. Most likely this will not happen, but
       
   833         // if it does, there isn't very much we can do.
       
   834         OstTrace0(
       
   835             TRACE_ERROR,
       
   836             CPPACKETDATAAPPADVANCEDVIEW_HANDLEUPDATEERROR,
       
   837             "Refresh failed");
       
   838     };
       
   839     updateIpGroup();
       
   840     updateProxyGroup();
       
   841     
       
   842     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_HANDLEUPDATEERROR_EXIT);
       
   843 }
       
   844 
       
   845 /*!
       
   846     Initializes all settings groups.
       
   847 */
       
   848 void CpPacketDataApAdvancedView::setEditorPreferences(const QModelIndex index)
       
   849 {
       
   850     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_SETEDITORPREFERENCES_ENTRY);
       
   851     
       
   852     HbDataFormViewItem *viewItem = qobject_cast<HbDataFormViewItem *>
       
   853         (mForm->itemByIndex(index));
       
   854     HbDataFormModelItem *modelItem = mModel->itemFromIndex(index);
       
   855 
       
   856     if (modelItem == mIpv4Address
       
   857         || modelItem == mIpv4DnsAddress1
       
   858         || modelItem == mIpv4DnsAddress2
       
   859         || modelItem == mIpv6DnsAddress1
       
   860         || modelItem == mIpv6DnsAddress2
       
   861         || modelItem == mProxyServer
       
   862         || modelItem == mProxyPort) {
       
   863         // HbLineEdit items, get editor and editor interface
       
   864         HbLineEdit *edit = qobject_cast<HbLineEdit *>
       
   865             (viewItem->dataItemContentWidget());
       
   866         HbEditorInterface editorInterface(edit);
       
   867 
       
   868         if (modelItem == mIpv4Address
       
   869             || modelItem == mIpv4DnsAddress1
       
   870             || modelItem == mIpv4DnsAddress2) {
       
   871                 // IPv4 IP address
       
   872                 editorInterface.setMode(HbInputModeNumeric);
       
   873                 editorInterface.setFilter(CpIpv4Filter::instance());
       
   874                 edit->setMaxLength(CMManagerShim::CmIP4AddressLength);
       
   875         } else if (modelItem == mIpv6DnsAddress1
       
   876             || modelItem == mIpv6DnsAddress2) {
       
   877                 // IPv6 IP address
       
   878                 editorInterface.setInputConstraints(
       
   879                     HbEditorConstraintLatinAlphabetOnly);
       
   880                 editorInterface.setFilter(CpIpv6Filter::instance());
       
   881                 edit->setInputMethodHints(
       
   882                     Qt::ImhNoPredictiveText
       
   883                     | Qt::ImhPreferLowercase);
       
   884                 edit->setMaxLength(CMManagerShim::CmIP6NameServerLength);
       
   885         } else if (modelItem == mProxyServer) {                
       
   886                 // Proxy server address
       
   887                 editorInterface.setMode(HbInputModeNone);
       
   888                 editorInterface.setInputConstraints(
       
   889                     HbEditorConstraintLatinAlphabetOnly);
       
   890                 editorInterface.setFilter(HbUrlFilter::instance());
       
   891                 editorInterface.setEditorClass(HbInputEditorClassUrl);
       
   892                 editorInterface.setDigitType(HbDigitTypeNone);
       
   893                 edit->setInputMethodHints(
       
   894                     Qt::ImhNoPredictiveText
       
   895                     | Qt::ImhPreferLowercase);
       
   896                 edit->setMaxLength(CMManagerShim::CmProxyServerNameLength);
       
   897         } else { /* mProxyPort */                
       
   898                 // Proxy port number
       
   899                 editorInterface.setMode(HbInputModeNumeric);
       
   900                 edit->setInputMethodHints(Qt::ImhDigitsOnly);
       
   901                 edit->setMaxLength(CMManagerShim::CmProxyPortNumberLength);
       
   902         }
       
   903     }
       
   904     
       
   905     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_SETEDITORPREFERENCES_EXIT);
       
   906 }
       
   907 
       
   908 /*!
       
   909     Handles change to network type (IPv4/IPv6).
       
   910 */
       
   911 void CpPacketDataApAdvancedView::changeNetworkType(int type)
       
   912 {
       
   913     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGENETWORKTYPE_ENTRY);
       
   914 
       
   915     // Save network type to CommsDat
       
   916     int pdpType;
       
   917     if (type == NetworkTypeIpv6) {
       
   918         pdpType = RPacketContext::EPdpTypeIPv6;
       
   919     } else {
       
   920         pdpType = RPacketContext::EPdpTypeIPv4;
       
   921     }
       
   922     mCmConnectionMethod->setIntAttribute(
       
   923         CMManagerShim::PacketDataPDPType,
       
   924         pdpType);
       
   925     if (tryUpdate())
       
   926         {
       
   927         // This will handle updating the UI with correct setting items 
       
   928         updateIpGroup();
       
   929         }
       
   930     
       
   931     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGENETWORKTYPE_EXIT);
       
   932 }
       
   933 
       
   934 /*!
       
   935     Handles change to IPv4 address mode (automatic/user defined).
       
   936 */
       
   937 void CpPacketDataApAdvancedView::changeIpv4AddressMode(int state)
       
   938 {
       
   939     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_ENTRY);
       
   940     
       
   941     bool ipv4AddressFromServer;
       
   942     if (state == Qt::Checked) {
       
   943         ipv4AddressFromServer = true;
       
   944     } else {
       
   945         ipv4AddressFromServer = false;
       
   946     }
       
   947     
       
   948     if (!ipv4AddressFromServer
       
   949         && getIpAddress(CMManagerShim::CmIPAddress) ==
       
   950             CMManagerShim::UnspecifiedIpv4Address) {
       
   951         // User defined IP address selected, but no valid address is stored.
       
   952         // Just enable the UI IP editors, because CMManager will update the
       
   953         // "IP address from server" flag by itself when a valid IP address
       
   954         // is stored.
       
   955         enableIpv4AddressFields(state);
       
   956     } else {
       
   957         // Save setting to CommsDat
       
   958         mCmConnectionMethod->setBoolAttribute(
       
   959             CMManagerShim::CmIPAddrFromServer,
       
   960             ipv4AddressFromServer);
       
   961         if (tryUpdate()) {
       
   962             enableIpv4AddressFields(state);
       
   963         }
       
   964     }
       
   965     
       
   966     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESSMODE_EXIT);
       
   967 }
       
   968 
       
   969 /*!
       
   970     Saves IPv4 address to CommsDat.
       
   971 */
       
   972 void CpPacketDataApAdvancedView::changeIpv4Address()
       
   973 {
       
   974     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESS_ENTRY);
       
   975     
       
   976     if (validateAndSaveIpAddress(
       
   977         mIpv4Address,
       
   978         CMManagerShim::CmIPAddress,
       
   979         QAbstractSocket::IPv4Protocol)) {
       
   980         // In case the IP address is empty or 0.0.0.0, CMManager changes the
       
   981         // "IP address from server" flag to true. We need to refresh the UI to
       
   982         // make sure we are in sync.
       
   983         updateIpGroup();
       
   984     }
       
   985 
       
   986     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4ADDRESS_EXIT);
       
   987 }
       
   988 
       
   989 /*!
       
   990     Handles change to IPv4 DNS mode (automatic/user defined).
       
   991 */
       
   992 void CpPacketDataApAdvancedView::changeIpv4DnsMode(int state)
       
   993 {
       
   994     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4DNSMODE_ENTRY);
       
   995     
       
   996     bool dnsAddressFromServer;
       
   997     if (state == Qt::Checked) {
       
   998         dnsAddressFromServer = true;
       
   999     } else {
       
  1000         dnsAddressFromServer = false;
       
  1001     }
       
  1002     // Save setting to CommsDat
       
  1003     mCmConnectionMethod->setBoolAttribute(
       
  1004         CMManagerShim::CmIPDNSAddrFromServer,
       
  1005         dnsAddressFromServer);
       
  1006     if (tryUpdate()) {
       
  1007         enableIpv4DnsFields(state);
       
  1008     }
       
  1009     
       
  1010     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4DNSMODE_EXIT);
       
  1011 }
       
  1012 
       
  1013 /*!
       
  1014     Saves IPv4 primary DNS address to CommsDat.
       
  1015 */
       
  1016 void CpPacketDataApAdvancedView::changeIpv4PrimaryDnsAddress()
       
  1017 {
       
  1018     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_ENTRY);
       
  1019     
       
  1020     if (validateAndSaveIpAddress(
       
  1021         mIpv4DnsAddress1,
       
  1022         CMManagerShim::CmIPNameServer1,
       
  1023         QAbstractSocket::IPv4Protocol)) {
       
  1024         // Address saved successfully, update "DNS address from server" flag
       
  1025         mCmConnectionMethod->setBoolAttribute(
       
  1026             CMManagerShim::CmIPDNSAddrFromServer,
       
  1027             false);
       
  1028         if (tryUpdate()) {
       
  1029             // In case primary DNS address is empty or 0.0.0.0, CMManager will
       
  1030             // check secondary DNS address and in case it is a valid address,
       
  1031             // move it to the primary DNS address. We need to refresh the
       
  1032             // UI to make sure we are in sync. If tryUpdate() fails it does
       
  1033             // the refresh automatically, so only success case is handled
       
  1034             // here.
       
  1035             updateIpGroup();            
       
  1036         }
       
  1037     }
       
  1038     
       
  1039     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4PRIMARYDNSADDRESS_EXIT);
       
  1040 }
       
  1041 
       
  1042 /*!
       
  1043     Saves IPv4 secondary DNS address to CommsDat.
       
  1044 */
       
  1045 void CpPacketDataApAdvancedView::changeIpv4SecondaryDnsAddress()
       
  1046 {
       
  1047     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_ENTRY);
       
  1048     
       
  1049     if (validateAndSaveIpAddress(
       
  1050         mIpv4DnsAddress2,
       
  1051         CMManagerShim::CmIPNameServer2,
       
  1052         QAbstractSocket::IPv4Protocol)) {
       
  1053         // Address saved successfully, update "DNS address from server" flag
       
  1054         mCmConnectionMethod->setBoolAttribute(
       
  1055             CMManagerShim::CmIPDNSAddrFromServer,
       
  1056             false);
       
  1057         if (tryUpdate()) {
       
  1058             // In case primary DNS address is empty or 0.0.0.0, CMManager will
       
  1059             // write the address there instead of secondary DNS address, so we
       
  1060             // need to refresh the UI to make sure we are in sync. If
       
  1061             // tryUpdate() fails it does the refresh automatically, so only
       
  1062             // success case is handled here.
       
  1063             updateIpGroup();
       
  1064         }
       
  1065     }
       
  1066     
       
  1067     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV4SECONDARYDNSADDRESS_EXIT);
       
  1068 }
       
  1069 
       
  1070 /*!
       
  1071     Handles change to IPv6 DNS mode (automatic/well-known/user defined).
       
  1072 */
       
  1073 void CpPacketDataApAdvancedView::changeIpv6DnsMode(int state)
       
  1074 {
       
  1075     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6DNSMODE_ENTRY);
       
  1076     
       
  1077     // Update "DNS address from server" flag
       
  1078     if (state == Ipv6DnsTypeAutomatic) {
       
  1079         // Automatic
       
  1080         mCmConnectionMethod->setBoolAttribute(
       
  1081             CMManagerShim::CmIP6DNSAddrFromServer,
       
  1082             true);
       
  1083     } else {
       
  1084         // User defined or well-known address
       
  1085         mCmConnectionMethod->setBoolAttribute(
       
  1086             CMManagerShim::CmIP6DNSAddrFromServer,
       
  1087             false);
       
  1088         
       
  1089         if (state == Ipv6DnsTypeWellKnown) {
       
  1090             // Well-known address, set DNS addresses and update UI
       
  1091             mCmConnectionMethod->setStringAttribute(
       
  1092                 CMManagerShim::CmIP6NameServer1,
       
  1093                 CMManagerShim::KnownIpv6NameServer1);
       
  1094             mIpv6DnsAddress1->setContentWidgetData(
       
  1095                 "text",
       
  1096                 CMManagerShim::KnownIpv6NameServer1);
       
  1097             mCmConnectionMethod->setStringAttribute(
       
  1098                 CMManagerShim::CmIP6NameServer2,
       
  1099                 CMManagerShim::KnownIpv6NameServer2);
       
  1100             mIpv6DnsAddress2->setContentWidgetData(
       
  1101                 "text",
       
  1102                 CMManagerShim::KnownIpv6NameServer2);        
       
  1103         }
       
  1104     }
       
  1105 
       
  1106     if (tryUpdate()) {
       
  1107         enableIpv6DnsFields(state);
       
  1108     }
       
  1109     
       
  1110     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6DNSMODE_EXIT);
       
  1111 }
       
  1112 
       
  1113 /*!
       
  1114     Saves IPv6 primary DNS address to CommsDat.
       
  1115 */
       
  1116 void CpPacketDataApAdvancedView::changeIpv6PrimaryDnsAddress()
       
  1117 {
       
  1118     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_ENTRY);
       
  1119     
       
  1120     if (validateAndSaveIpAddress(
       
  1121         mIpv6DnsAddress1,
       
  1122         CMManagerShim::CmIP6NameServer1,
       
  1123         QAbstractSocket::IPv6Protocol)) {
       
  1124         // Address saved successfully, update "DNS address from server" flag
       
  1125         mCmConnectionMethod->setBoolAttribute(
       
  1126             CMManagerShim::CmIP6DNSAddrFromServer,
       
  1127             false);
       
  1128         if (tryUpdate()) {
       
  1129             // In case primary DNS address is empty or 0:0:0:0:0:0:0:0,
       
  1130             // CMManager will check secondary DNS address and in case it is a
       
  1131             // valid address, move it to the primary DNS address. We need to
       
  1132             // refresh the UI to make sure we are in sync. If tryUpdate()
       
  1133             // fails it does the refresh automatically, so only success case
       
  1134             // is handled here.
       
  1135             updateIpGroup();            
       
  1136         }
       
  1137     }
       
  1138     
       
  1139     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6PRIMARYDNSADDRESS_EXIT);
       
  1140 }
       
  1141 
       
  1142 /*!
       
  1143     Saves IPv6 secondary DNS address to CommsDat.
       
  1144 */
       
  1145 void CpPacketDataApAdvancedView::changeIpv6SecondaryDnsAddress()
       
  1146 {
       
  1147     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_ENTRY);
       
  1148     
       
  1149     if (validateAndSaveIpAddress(
       
  1150         mIpv6DnsAddress2,
       
  1151         CMManagerShim::CmIP6NameServer2,
       
  1152         QAbstractSocket::IPv6Protocol)) {
       
  1153         // Address saved successfully, update "DNS address from server" flag
       
  1154         mCmConnectionMethod->setBoolAttribute(
       
  1155             CMManagerShim::CmIP6DNSAddrFromServer,
       
  1156             false);
       
  1157         if (tryUpdate()) {
       
  1158             // In case primary DNS address is empty or 0:0:0:0:0:0:0:0,
       
  1159             // CMManager will write the address there instead of secondary DNS
       
  1160             // address, so we need to refresh the UI to make sure we are in
       
  1161             // sync. If tryUpdate() fails it does the refresh automatically,
       
  1162             // so only success case is handled here.
       
  1163             updateIpGroup();
       
  1164         }
       
  1165     }
       
  1166     
       
  1167     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEIPV6SECONDARYDNSADDRESS_EXIT);
       
  1168 }
       
  1169 
       
  1170 /*!
       
  1171     Saves proxy server address to CommsDat.
       
  1172 */
       
  1173 void CpPacketDataApAdvancedView::changeProxyServer()
       
  1174 {
       
  1175     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYSERVER_ENTRY);
       
  1176     
       
  1177     QString proxyServer = mProxyServer->contentWidgetData("text").toString();
       
  1178     mCmConnectionMethod->setStringAttribute(
       
  1179         CMManagerShim::CmProxyServerName,
       
  1180         proxyServer);
       
  1181     (void)tryUpdate();
       
  1182     
       
  1183     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYSERVER_EXIT);
       
  1184 }
       
  1185 
       
  1186 /*!
       
  1187     Saves proxy port to CommsDat.
       
  1188 */
       
  1189 void CpPacketDataApAdvancedView::changeProxyPort()
       
  1190 {
       
  1191     OstTraceFunctionEntry0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYPORT_ENTRY);
       
  1192     
       
  1193     uint proxyPort = mProxyPort->contentWidgetData("text").toInt();
       
  1194     if (proxyPort <= 65535) {
       
  1195         if (proxyPort == 0) {
       
  1196             // Don't show zero
       
  1197             mProxyPort->setContentWidgetData("text", "");
       
  1198         }
       
  1199         mCmConnectionMethod->setIntAttribute(
       
  1200             CMManagerShim::CmProxyPortNumber,
       
  1201             proxyPort);
       
  1202         (void)tryUpdate();
       
  1203     } else {
       
  1204         // Inform user of invalid value
       
  1205         showMessageBox(
       
  1206             HbMessageBox::MessageTypeInformation,
       
  1207             hbTrId("txt_occ_info_invalid_input"));
       
  1208         // Restore previous setting
       
  1209         proxyPort = mCmConnectionMethod->getIntAttribute(
       
  1210             CMManagerShim::CmProxyPortNumber);
       
  1211         if (proxyPort > 0) {
       
  1212             mProxyPort->setContentWidgetData("text", QVariant(proxyPort));
       
  1213         } else {
       
  1214             mProxyPort->setContentWidgetData("text", "");
       
  1215         }
       
  1216     }
       
  1217     
       
  1218     OstTraceFunctionExit0(CPPACKETDATAAPADVANCEDVIEW_CHANGEPROXYPORT_EXIT);
       
  1219 }