wlanutilities/wlanwizard/src/wlanwizardpagekeyquery.cpp
author hgs
Mon, 24 May 2010 21:11:39 +0300
changeset 31 e8f4211554fb
child 39 7b3e49e4608a
permissions -rw-r--r--
201021
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
31
hgs
parents:
diff changeset
     1
/*
hgs
parents:
diff changeset
     2
 * Copyright (c) 2010 Nokia Corporation and/or its subsidiary(-ies).
hgs
parents:
diff changeset
     3
 * All rights reserved.
hgs
parents:
diff changeset
     4
 * This component and the accompanying materials are made available
hgs
parents:
diff changeset
     5
 * under the terms of "Eclipse Public License v1.0"
hgs
parents:
diff changeset
     6
 * which accompanies this distribution, and is available
hgs
parents:
diff changeset
     7
 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
hgs
parents:
diff changeset
     8
 *
hgs
parents:
diff changeset
     9
 * Initial Contributors:
hgs
parents:
diff changeset
    10
 * Nokia Corporation - initial contribution.
hgs
parents:
diff changeset
    11
 *
hgs
parents:
diff changeset
    12
 * Contributors:
hgs
parents:
diff changeset
    13
 *
hgs
parents:
diff changeset
    14
 * Description: 
hgs
parents:
diff changeset
    15
 *   WLAN Wizard Page: Key query page for WEP and WPA (2).
hgs
parents:
diff changeset
    16
 *
hgs
parents:
diff changeset
    17
 */
hgs
parents:
diff changeset
    18
hgs
parents:
diff changeset
    19
// System includes
hgs
parents:
diff changeset
    20
#include <HbDocumentLoader>
hgs
parents:
diff changeset
    21
#include <HbMainWindow>
hgs
parents:
diff changeset
    22
#include <HbWidget>
hgs
parents:
diff changeset
    23
#include <HbLabel>
hgs
parents:
diff changeset
    24
#include <HbLineEdit>
hgs
parents:
diff changeset
    25
#include <HbEditorInterface>
hgs
parents:
diff changeset
    26
hgs
parents:
diff changeset
    27
// User includes
hgs
parents:
diff changeset
    28
#include "wlanwizard.h"
hgs
parents:
diff changeset
    29
#include "wlanwizard_p.h"
hgs
parents:
diff changeset
    30
#include "wlanwizardpagekeyquery.h"
hgs
parents:
diff changeset
    31
#include "wlanwizardutils.h"
hgs
parents:
diff changeset
    32
hgs
parents:
diff changeset
    33
/*!
hgs
parents:
diff changeset
    34
   \class WlanWizardPageKeyQuery
hgs
parents:
diff changeset
    35
   \brief Implements Key Query page for WEP and WPA. 
hgs
parents:
diff changeset
    36
 */
hgs
parents:
diff changeset
    37
hgs
parents:
diff changeset
    38
// External function prototypes
hgs
parents:
diff changeset
    39
hgs
parents:
diff changeset
    40
// Local constants
hgs
parents:
diff changeset
    41
hgs
parents:
diff changeset
    42
// ======== LOCAL FUNCTIONS ========
hgs
parents:
diff changeset
    43
hgs
parents:
diff changeset
    44
// ======== MEMBER FUNCTIONS ========
hgs
parents:
diff changeset
    45
hgs
parents:
diff changeset
    46
hgs
parents:
diff changeset
    47
/*!
hgs
parents:
diff changeset
    48
   Constructor.
hgs
parents:
diff changeset
    49
   
hgs
parents:
diff changeset
    50
   @param [in] parent pointer to private implementation of wizard.
hgs
parents:
diff changeset
    51
 */
hgs
parents:
diff changeset
    52
WlanWizardPageKeyQuery::WlanWizardPageKeyQuery(WlanWizardPrivate* parent) :
hgs
parents:
diff changeset
    53
    WlanWizardPageInternal(parent), 
hgs
parents:
diff changeset
    54
    mWidget(NULL), 
hgs
parents:
diff changeset
    55
    mLabelTitle(NULL),
hgs
parents:
diff changeset
    56
    mLineEdit(NULL), 
hgs
parents:
diff changeset
    57
    mLabelError(NULL), 
hgs
parents:
diff changeset
    58
    mDocLoader(NULL)
hgs
parents:
diff changeset
    59
{
hgs
parents:
diff changeset
    60
}
hgs
parents:
diff changeset
    61
hgs
parents:
diff changeset
    62
/*!
hgs
parents:
diff changeset
    63
   Destructor.
hgs
parents:
diff changeset
    64
 */
hgs
parents:
diff changeset
    65
WlanWizardPageKeyQuery::~WlanWizardPageKeyQuery()
hgs
parents:
diff changeset
    66
{
hgs
parents:
diff changeset
    67
    delete mDocLoader;
hgs
parents:
diff changeset
    68
    
hgs
parents:
diff changeset
    69
    // Wizard framework deletes the visualization (owns mWidget).
hgs
parents:
diff changeset
    70
}
hgs
parents:
diff changeset
    71
hgs
parents:
diff changeset
    72
/*!
hgs
parents:
diff changeset
    73
   See WlanWizardPage::initializePage()
hgs
parents:
diff changeset
    74
   
hgs
parents:
diff changeset
    75
   Initializes the key query page and initializes objects based on the security
hgs
parents:
diff changeset
    76
   mode.
hgs
parents:
diff changeset
    77
 */
hgs
parents:
diff changeset
    78
HbWidget* WlanWizardPageKeyQuery::initializePage()
hgs
parents:
diff changeset
    79
{
hgs
parents:
diff changeset
    80
    if (!mWidget) {
hgs
parents:
diff changeset
    81
        bool ok;
hgs
parents:
diff changeset
    82
        
hgs
parents:
diff changeset
    83
        mDocLoader = new HbDocumentLoader(mWizard->mainWindow());
hgs
parents:
diff changeset
    84
        
hgs
parents:
diff changeset
    85
        // Load document common part
hgs
parents:
diff changeset
    86
        mDocLoader->load(":/docml/occ_add_wlan_01_04.docml", &ok);
hgs
parents:
diff changeset
    87
        Q_ASSERT(ok);
hgs
parents:
diff changeset
    88
              
hgs
parents:
diff changeset
    89
        // Initialize orientation
hgs
parents:
diff changeset
    90
        loadDocmlSection(mWizard->mainWindow()->orientation());
hgs
parents:
diff changeset
    91
        
hgs
parents:
diff changeset
    92
        // Load widgets
hgs
parents:
diff changeset
    93
        mWidget = 
hgs
parents:
diff changeset
    94
            qobject_cast<HbWidget*> (mDocLoader->findWidget("occ_add_wlan_01"));
hgs
parents:
diff changeset
    95
        Q_ASSERT(mWidget != NULL);
hgs
parents:
diff changeset
    96
hgs
parents:
diff changeset
    97
        mLabelTitle = qobject_cast<HbLabel*> (mDocLoader->findWidget("dialog"));
hgs
parents:
diff changeset
    98
        Q_ASSERT(mLabelTitle != NULL);
hgs
parents:
diff changeset
    99
hgs
parents:
diff changeset
   100
        mLineEdit = qobject_cast<HbLineEdit*> (mDocLoader->findWidget("lineEditKey"));
hgs
parents:
diff changeset
   101
        Q_ASSERT(mLineEdit != NULL);
hgs
parents:
diff changeset
   102
hgs
parents:
diff changeset
   103
        mLabelError = 
hgs
parents:
diff changeset
   104
            qobject_cast<HbLabel*> (mDocLoader->findWidget("labelErrorNote"));
hgs
parents:
diff changeset
   105
        Q_ASSERT(mLabelError != NULL);
hgs
parents:
diff changeset
   106
        
hgs
parents:
diff changeset
   107
        ok = connect(
hgs
parents:
diff changeset
   108
            mWizard->mainWindow(), SIGNAL(orientationChanged(Qt::Orientation)),
hgs
parents:
diff changeset
   109
            this, SLOT(loadDocmlSection(Qt::Orientation)));
hgs
parents:
diff changeset
   110
        Q_ASSERT(ok);
hgs
parents:
diff changeset
   111
        
hgs
parents:
diff changeset
   112
        HbEditorInterface editInterface(mLineEdit);
hgs
parents:
diff changeset
   113
        editInterface.setInputConstraints(HbEditorConstraintLatinAlphabetOnly);
hgs
parents:
diff changeset
   114
        editInterface.setSmileyTheme(HbSmileyTheme());
hgs
parents:
diff changeset
   115
        mLineEdit->setInputMethodHints(
hgs
parents:
diff changeset
   116
            Qt::ImhNoPredictiveText | Qt::ImhPreferLowercase);
hgs
parents:
diff changeset
   117
        mLineEdit->installEventFilter(this);
hgs
parents:
diff changeset
   118
    }
hgs
parents:
diff changeset
   119
hgs
parents:
diff changeset
   120
    if (mWizard->configuration(WlanWizardHelper::ConfSecurityMode) ==
hgs
parents:
diff changeset
   121
        CMManagerShim::WlanSecModeWep) {
hgs
parents:
diff changeset
   122
        mLineEdit->setMaxLength(WlanWizardUtils::WepHex128BitMaxLength);    
hgs
parents:
diff changeset
   123
    } else {
hgs
parents:
diff changeset
   124
        mLineEdit->setMaxLength(WlanWizardUtils::WpaMaxLength);
hgs
parents:
diff changeset
   125
    }
hgs
parents:
diff changeset
   126
    
hgs
parents:
diff changeset
   127
    mLabelTitle->setPlainText(
hgs
parents:
diff changeset
   128
        hbTrId("txt_occ_dialog_enter_key_for_1").arg(mWizard->configuration(
hgs
parents:
diff changeset
   129
            WlanWizardPrivate::ConfSsid).toString()));
hgs
parents:
diff changeset
   130
    
hgs
parents:
diff changeset
   131
    return mWidget;
hgs
parents:
diff changeset
   132
}
hgs
parents:
diff changeset
   133
hgs
parents:
diff changeset
   134
/*!
hgs
parents:
diff changeset
   135
   Loads docml at initialization phase and when HbMainWindow sends orientation()
hgs
parents:
diff changeset
   136
   signal.
hgs
parents:
diff changeset
   137
   
hgs
parents:
diff changeset
   138
   @param [in] orientation to be loaded.
hgs
parents:
diff changeset
   139
 */
hgs
parents:
diff changeset
   140
void WlanWizardPageKeyQuery::loadDocmlSection(Qt::Orientation orientation)
hgs
parents:
diff changeset
   141
{
hgs
parents:
diff changeset
   142
    bool ok = false;
hgs
parents:
diff changeset
   143
    
hgs
parents:
diff changeset
   144
    // Load the orientation specific section
hgs
parents:
diff changeset
   145
    if (orientation == Qt::Horizontal) {
hgs
parents:
diff changeset
   146
        mDocLoader->load(
hgs
parents:
diff changeset
   147
            ":/docml/occ_add_wlan_01_04.docml", "landscape_section", &ok);
hgs
parents:
diff changeset
   148
        Q_ASSERT(ok);
hgs
parents:
diff changeset
   149
    } else {
hgs
parents:
diff changeset
   150
        Q_ASSERT(orientation == Qt::Vertical);
hgs
parents:
diff changeset
   151
        mDocLoader->load(
hgs
parents:
diff changeset
   152
            ":/docml/occ_add_wlan_01_04.docml", "portrait_section", &ok);
hgs
parents:
diff changeset
   153
        Q_ASSERT(ok);
hgs
parents:
diff changeset
   154
    }
hgs
parents:
diff changeset
   155
}
hgs
parents:
diff changeset
   156
hgs
parents:
diff changeset
   157
/*!
hgs
parents:
diff changeset
   158
   See WlanWizardPage::nextId()
hgs
parents:
diff changeset
   159
   
hgs
parents:
diff changeset
   160
   @param [in,out] removeFromStack return value is always false
hgs
parents:
diff changeset
   161
   
hgs
parents:
diff changeset
   162
   @return In case user has entered incorrect key an appropriate error text is
hgs
parents:
diff changeset
   163
   displayed and WlanWizardPage::PageNone is returned.
hgs
parents:
diff changeset
   164
   
hgs
parents:
diff changeset
   165
   In case user has entered a valid WEP or WPA key, the key is stored into
hgs
parents:
diff changeset
   166
   internal configuration and WlanWizardPage::PageProcessSettings is returned.
hgs
parents:
diff changeset
   167
   
hgs
parents:
diff changeset
   168
 */
hgs
parents:
diff changeset
   169
int WlanWizardPageKeyQuery::nextId(bool &removeFromStack) const
hgs
parents:
diff changeset
   170
{
hgs
parents:
diff changeset
   171
    WlanWizardUtils::KeyStatus status(WlanWizardUtils::KeyStatusOk);
hgs
parents:
diff changeset
   172
    int pageId = WlanWizardPage::PageNone;
hgs
parents:
diff changeset
   173
    int secMode = mWizard->configuration(
hgs
parents:
diff changeset
   174
        WlanWizardPrivate::ConfSecurityMode).toInt();
hgs
parents:
diff changeset
   175
    
hgs
parents:
diff changeset
   176
    if (secMode == CMManagerShim::WlanSecModeWep) {
hgs
parents:
diff changeset
   177
        status = WlanWizardUtils::validateWepKey(mLineEdit->text());   
hgs
parents:
diff changeset
   178
    }
hgs
parents:
diff changeset
   179
    else {
hgs
parents:
diff changeset
   180
        Q_ASSERT(
hgs
parents:
diff changeset
   181
            secMode == CMManagerShim::WlanSecModeWpa ||
hgs
parents:
diff changeset
   182
            secMode == CMManagerShim::WlanSecModeWpa2);
hgs
parents:
diff changeset
   183
        
hgs
parents:
diff changeset
   184
        status = WlanWizardUtils::validateWpaKey(mLineEdit->text());
hgs
parents:
diff changeset
   185
    }
hgs
parents:
diff changeset
   186
    QString errorString = keyStatusToErrorString(status);
hgs
parents:
diff changeset
   187
        
hgs
parents:
diff changeset
   188
    if (errorString.length() == 0 ) {
hgs
parents:
diff changeset
   189
        if (secMode == CMManagerShim::WlanSecModeWep) {
hgs
parents:
diff changeset
   190
            mWizard->setConfiguration(WlanWizardPrivate::ConfKeyWep1, mLineEdit->text());
hgs
parents:
diff changeset
   191
            mWizard->setConfiguration(WlanWizardPrivate::ConfKeyWep2, mLineEdit->text());
hgs
parents:
diff changeset
   192
            mWizard->setConfiguration(WlanWizardPrivate::ConfKeyWep3, mLineEdit->text());
hgs
parents:
diff changeset
   193
            mWizard->setConfiguration(WlanWizardPrivate::ConfKeyWep4, mLineEdit->text());
hgs
parents:
diff changeset
   194
            mWizard->setConfiguration(WlanWizardPrivate::ConfKeyWepDefault, 
hgs
parents:
diff changeset
   195
                CMManagerShim::WepKeyIndex1);
hgs
parents:
diff changeset
   196
        } else {
hgs
parents:
diff changeset
   197
            mWizard->setConfiguration(WlanWizardPrivate::ConfKeyWpa, mLineEdit->text());   
hgs
parents:
diff changeset
   198
        }
hgs
parents:
diff changeset
   199
        pageId = WlanWizardPage::PageProcessSettings;
hgs
parents:
diff changeset
   200
    }
hgs
parents:
diff changeset
   201
    else {
hgs
parents:
diff changeset
   202
        mLabelError->setPlainText(errorString);
hgs
parents:
diff changeset
   203
    }
hgs
parents:
diff changeset
   204
hgs
parents:
diff changeset
   205
    removeFromStack = false;
hgs
parents:
diff changeset
   206
    return pageId;
hgs
parents:
diff changeset
   207
}
hgs
parents:
diff changeset
   208
hgs
parents:
diff changeset
   209
/*!
hgs
parents:
diff changeset
   210
   See WlanWizardPage::showPage()
hgs
parents:
diff changeset
   211
 */
hgs
parents:
diff changeset
   212
bool WlanWizardPageKeyQuery::showPage()
hgs
parents:
diff changeset
   213
{
hgs
parents:
diff changeset
   214
    // Open virtual keyboard by setting focus to line edit
hgs
parents:
diff changeset
   215
    mLineEdit->setFocus();
hgs
parents:
diff changeset
   216
    
hgs
parents:
diff changeset
   217
    return true;
hgs
parents:
diff changeset
   218
}
hgs
parents:
diff changeset
   219
hgs
parents:
diff changeset
   220
/*!
hgs
parents:
diff changeset
   221
   When focus moves into the Key editor and there is visible error text, it
hgs
parents:
diff changeset
   222
   is cleared.
hgs
parents:
diff changeset
   223
   
hgs
parents:
diff changeset
   224
   @param [in] obj Pointer to the object the event was sent to
hgs
parents:
diff changeset
   225
   @param [in] event Pointer to the sent event.
hgs
parents:
diff changeset
   226
   
hgs
parents:
diff changeset
   227
   @return false. do not eat the event.
hgs
parents:
diff changeset
   228
 */
hgs
parents:
diff changeset
   229
bool WlanWizardPageKeyQuery::eventFilter(QObject *obj, QEvent *event)
hgs
parents:
diff changeset
   230
{
hgs
parents:
diff changeset
   231
    if (obj == mLineEdit && event->type() == QEvent::FocusIn) {
hgs
parents:
diff changeset
   232
        mLabelError->setPlainText("");
hgs
parents:
diff changeset
   233
    }
hgs
parents:
diff changeset
   234
    return false;
hgs
parents:
diff changeset
   235
}
hgs
parents:
diff changeset
   236
hgs
parents:
diff changeset
   237
/*!
hgs
parents:
diff changeset
   238
   Maps provided error code to error text.
hgs
parents:
diff changeset
   239
   
hgs
parents:
diff changeset
   240
   @param [in] status status of key validation
hgs
parents:
diff changeset
   241
   
hgs
parents:
diff changeset
   242
   @return An error text in case of error, empty string is returned on 
hgs
parents:
diff changeset
   243
   successful case.
hgs
parents:
diff changeset
   244
 */
hgs
parents:
diff changeset
   245
QString WlanWizardPageKeyQuery::keyStatusToErrorString(
hgs
parents:
diff changeset
   246
    WlanWizardUtils::KeyStatus status) const
hgs
parents:
diff changeset
   247
{
hgs
parents:
diff changeset
   248
    QString errorString;
hgs
parents:
diff changeset
   249
    switch (status) {
hgs
parents:
diff changeset
   250
    case WlanWizardUtils::KeyStatusIllegalCharacters:
hgs
parents:
diff changeset
   251
        errorString = hbTrId("txt_occ_dialog_illegal_characters_in_key_please_c");
hgs
parents:
diff changeset
   252
        break;
hgs
parents:
diff changeset
   253
hgs
parents:
diff changeset
   254
    case WlanWizardUtils::KeyStatusWpaTooShort:
hgs
parents:
diff changeset
   255
    case WlanWizardUtils::KeyStatusWpaTooLong:
hgs
parents:
diff changeset
   256
        errorString = hbTrId("txt_occ_dialog_preshared_key_too_short_at_least");
hgs
parents:
diff changeset
   257
        break;
hgs
parents:
diff changeset
   258
hgs
parents:
diff changeset
   259
    case WlanWizardUtils::KeyStatusWepInvalidLength:
hgs
parents:
diff changeset
   260
        errorString = hbTrId("txt_occ_dialog_key_is_of_incorrect_length_please");
hgs
parents:
diff changeset
   261
        break;
hgs
parents:
diff changeset
   262
hgs
parents:
diff changeset
   263
    case WlanWizardUtils::KeyStatusOk:
hgs
parents:
diff changeset
   264
    default:
hgs
parents:
diff changeset
   265
        Q_ASSERT(WlanWizardUtils::KeyStatusOk == status);
hgs
parents:
diff changeset
   266
        // nothing to do here.
hgs
parents:
diff changeset
   267
        break;
hgs
parents:
diff changeset
   268
    }
hgs
parents:
diff changeset
   269
    return errorString;
hgs
parents:
diff changeset
   270
}