diff -r b852595f5cbe -r 63be7eb3fc78 wlanutilities/wlanwizard/src/wlanwizardpagenetworkmode.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wlanutilities/wlanwizard/src/wlanwizardpagenetworkmode.cpp Tue Aug 31 16:18:40 2010 +0300 @@ -0,0 +1,321 @@ +/* +* Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "Eclipse Public License v1.0" +* which accompanies this distribution, and is available +* at the URL "http://www.eclipse.org/legal/epl-v10.html". +* +* Initial Contributors: +* Nokia Corporation - initial contribution. +* +* Contributors: +* +* Description: +* WLAN Wizard Page: Network mode Selection. +*/ + +// System includes +#include +#include +#include +#include +#include +#include + +// User includes +#include "wlanwizard_p.h" +#include "wlanwizard.h" +#include "wlanwizardpagenetworkmode.h" +#include "wlanwizardscanlist.h" +#include "OstTraceDefinitions.h" +#ifdef OST_TRACE_COMPILER_IN_USE +#include "wlanwizardpagenetworkmodeTraces.h" +#endif + +// Local constants + +/*! + * Constructor method for the network mode view object + * @param parent [in] pointer to parent object. + */ +WlanWizardPageNetworkMode::WlanWizardPageNetworkMode( + WlanWizardPrivate* parent) : + WlanWizardPageInternal(parent), + mWidget(NULL), + mList(NULL), + mLabel(NULL), + mLoader(NULL), + mValid(false) +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_WLANWIZARDPAGENETWORKMODE_ENTRY ); + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_WLANWIZARDPAGENETWORKMODE_EXIT ); +} + +/*! + * Destructor. Loader widget is deleted. + * All document widgets are deleted by wlanwizard_p destructor. + */ +WlanWizardPageNetworkMode::~WlanWizardPageNetworkMode() +{ + OstTraceFunctionEntry0( DUP1_WLANWIZARDPAGENETWORKMODE_WLANWIZARDPAGENETWORKMODE_ENTRY ); + delete mLoader; + OstTraceFunctionExit0( DUP1_WLANWIZARDPAGENETWORKMODE_WLANWIZARDPAGENETWORKMODE_EXIT ); +} + +/*! + * Page initialization. If view is already loaded, does nothing. + * Inherited from WlanWizardPage. + */ +HbWidget* WlanWizardPageNetworkMode::initializePage() +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_INITIALIZEPAGE_ENTRY ); + OstTrace0( TRACE_NORMAL, WLANWIZARDPAGENETWORKMODE_INITIALIZEPAGE, + "WlanWizardPageNetworkMode::initializePage" ); + + if (mWidget == NULL) { + mLoader = new HbDocumentLoader(mWizard->mainWindow()); + + bool ok; + + mLoader->load(":/docml/occ_add_wlan_02_03.docml", &ok); + Q_ASSERT(ok); + + loadDocmlSection(mWizard->mainWindow()->orientation()); + + mWidget = qobject_cast (mLoader->findWidget( + "occ_add_wlan_02")); + Q_ASSERT(mWidget != NULL); + + mList = qobject_cast (mLoader->findWidget("list")); + Q_ASSERT(mList != NULL); + + mLabel = qobject_cast (mLoader->findWidget("dialog_6")); + Q_ASSERT(mLabel != NULL); + + // Connect document loading to main window orientation changes. + ok = connect(mWizard->mainWindow(), + SIGNAL(orientationChanged(Qt::Orientation)), this, + SLOT(loadDocmlSection(Qt::Orientation))); + Q_ASSERT(ok); + + // Connect a function to a radio button selection. + ok = connect(mList, SIGNAL(itemSelected(int)), this, + SLOT(itemSelected())); + Q_ASSERT(ok); + + mLabel->setPlainText(hbTrId( + "txt_occ_dialog_select_network_mode_and_status")); + } + + QStringList items; + + populateRadioButtonList(items); + + mList->setItems(items); + + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_INITIALIZEPAGE_EXIT ); + return mWidget; +} + +/*! + * Evaluates the network mode selection and sets the configuration in + * the wlanwizard. + * @param [out] removeFromStack always returns false. + * @return WlanWizardPageSecurityMode page id. + */ +int WlanWizardPageNetworkMode::nextId(bool &removeFromStack) const +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_NEXTID_ENTRY ); + removeFromStack = false; + WlanNetworkSetting setting; + int index = mList->selected(); + int nextPage = WlanWizardPageInternal::PageNetworkSecurity; + + if (mWpsSupported.at(index)) { + nextPage = WlanWizardPageInternal::PageWpsStart; + } + else { + setting.mode = mNetworkModes.at(index); + setting.hidden = mIsHidden.at(index); + setting.wpsSupported = mWpsSupported.at(index); + + mWizard->setConfiguration( + WlanWizardPrivate::ConfNetworkMode, + setting.mode); + + mWizard->setConfiguration( + WlanWizardPrivate::ConfWlanScanSSID, + setting.hidden); + + mWizard->setConfiguration( + WlanWizardPrivate::ConfWpsSupported, + setting.wpsSupported); + + if (mWizard->configurationExists(WlanWizardPrivate::ConfAvailableNetworkOptions)) { + nextPage = selectNextPage(setting); + } + } + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_NEXTID_EXIT ); + return nextPage; +} + +/*! + * This method is overrides the default implementation from WlanWizardPage. + * It indicates whether the Next-button should be enabled or not. + * @return mValid, which is true if a radio button has been selected. + */ +bool WlanWizardPageNetworkMode::showPage() +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_SHOWPAGE_ENTRY ); + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_SHOWPAGE_EXIT ); + return mValid; +} + +/*! + * This function is invoked when user selects a mode from the radio button list. + * (HbRadioButtonList's itemSelected-signal) + */ +void WlanWizardPageNetworkMode::itemSelected() +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_ITEMSELECTED_ENTRY ); + OstTrace0( TRACE_BORDER, WLANWIZARDPAGENETWORKMODE_ITEMSELECTED, + "WlanWizardPageNetworkMode::itemSelected" ); + + mValid = true; + mWizard->enableNextButton(mValid); + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_ITEMSELECTED_EXIT ); +} + +/*! + * Loads the document orientation information from occ_add_wlan_02_03.docml. + * This is called each time phone orientation changes. + * @param [in] orientation indicates whether the phone is in portrait or + * landscape mode. + */ +void WlanWizardPageNetworkMode::loadDocmlSection(Qt::Orientation orientation) +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_LOADDOCMLSECTION_ENTRY ); + OstTrace1( TRACE_NORMAL, WLANWIZARDPAGENETWORKMODE_LOADDOCML, + "WlanWizardPageNetworkMode::loadDocml - Orientation;orientation=%x", + ( TUint )( orientation ) ); + + WlanWizardPageInternal::loadDocmlSection( + mLoader, + orientation, + ":/docml/occ_add_wlan_02_03.docml", + "portrait_section", + "landscape_section"); + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_LOADDOCMLSECTION_EXIT ); +} + +/*! + * A support function to map the radio button list to a generic network + * mode list. This enables the changing of button order without it + * affecting the entire class. + * In case previous scan has revealed multiple results with the same ssid, only + * available network mode options are shown in the radio button list. + * @param [out] list is the list of captions used for the radio buttons. + * @param [in] item is the caption to be added. + * @param [in] mode is the network mode to be added. + * @param [in] isHidden is the visibility status of the network. + * @param [in] wpsSupported is the possibility for wps support. + */ +void WlanWizardPageNetworkMode::addToList( + QStringList &list, + const QString &item, + int mode, + bool isHidden, + bool wpsSupported) +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_ADDTOLIST_ENTRY ); + + if (mWizard->configurationExists(WlanWizardHelper::ConfAvailableNetworkOptions)) { + WlanWizardScanList networkOptions = mWizard->configuration( + WlanWizardHelper::ConfAvailableNetworkOptions).value (); + + QList modes = networkOptions.getNetModes(); + + for (int i = 0; i < modes.size(); i++) { + if ( (modes[i].mode == mode + && modes[i].hidden == isHidden + && modes[i].wpsSupported == wpsSupported) + || (modes[i].wpsSupported && wpsSupported) ) { + list << item; + mNetworkModes.append(mode); + mIsHidden.append(isHidden); + mWpsSupported.append(wpsSupported); + } + } + } + else { + list << item; + mNetworkModes.append(mode); + mIsHidden.append(isHidden); + // If there are no known network options, WPS is not allowed to be + // selected. + mWpsSupported.append(false); + } + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_ADDTOLIST_EXIT ); +} + +/*! + * This function checks the sets up the radio button list for user input. + * @param [out] list is the list of captions used for the radio buttons. + */ +void WlanWizardPageNetworkMode::populateRadioButtonList(QStringList &list) +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_POPULATERADIOBUTTONLIST_ENTRY ); + list.clear(); + mNetworkModes.clear(); + mIsHidden.clear(); + mWpsSupported.clear(); + + // A list is created. Since there is no practical way of knowing whether + // the new contents are different from the previous contents (if there + // even were any in the first place) the validity is always reset. + mValid = false; + + addToList(list, hbTrId("txt_occ_dblist_val_infrastructure_public"), + CMManagerShim::Infra, false, false); + + addToList(list, hbTrId("txt_occ_list_infrastructure_hidden"), + CMManagerShim::Infra, true, false); + + addToList(list, hbTrId("txt_occ_list_adhoc_1"), CMManagerShim::Adhoc, + false, false); + + if (mWizard->configurationExists(WlanWizardHelper::ConfAvailableNetworkOptions)) { + // addToList with wpsSupported=true is only called, when there are available + // scan result options. If no network options exist, the user can not get to + // wps wizard from this view. Also, mode and isHidden are "don't care". + addToList(list, hbTrId("txt_occ_list_wifi_protected_setup"), NetworkModeNone, false, true); + } + OstTraceFunctionExit0( WLANWIZARDPAGENETWORKMODE_POPULATERADIOBUTTONLIST_EXIT ); +} + +/*! + * This function selects the next page. Security mode may be skipped in case + * scan results exist and only single option remains. + * @param [in] setting indicates the selected network mode. + * @return Security mode query page identifier unless it can be skipped. + */ +int WlanWizardPageNetworkMode::selectNextPage(const WlanNetworkSetting &setting) const +{ + OstTraceFunctionEntry0( WLANWIZARDPAGENETWORKMODE_SELECTNEXTPAGE_ENTRY ); + + int nextPage = WlanWizardPageInternal::PageNetworkSecurity; + + WlanWizardScanList networkOptions = mWizard->configuration( + WlanWizardHelper::ConfAvailableNetworkOptions).value(); + + if (networkOptions.secModes(setting) == SingleResult) { + WlanSecuritySetting secMode = networkOptions.getSecMode(setting); + mWizard->setConfiguration(WlanWizardHelper::ConfSecurityMode, secMode.mode); + mWizard->setConfiguration(WlanWizardHelper::ConfUsePsk, secMode.usePsk); + nextPage = secMode.nextPageId; + } + + OstTraceFunctionExit0( DUP1_WLANWIZARDPAGENETWORKMODE_SELECTNEXTPAGE_EXIT ); + return nextPage; +}