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