wlansecuritysettings/wepsecuritysettingsui/src/WEPSecuritySettingsDlg.cpp
changeset 0 c8830336c852
child 1 a3e2bfb0107c
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/wlansecuritysettings/wepsecuritysettingsui/src/WEPSecuritySettingsDlg.cpp	Thu Dec 17 08:47:43 2009 +0200
@@ -0,0 +1,1319 @@
+/*
+* Copyright (c) 2001-2009 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of the License "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: Implementation of dialog.  
+*
+*/
+
+
+// INCLUDE FILES
+#include <aknnavide.h>
+#include <akntitle.h>
+#include <aknradiobuttonsettingpage.h>
+#include <aknmfnesettingpage.h>
+#include <barsread.h>
+#include <akntabgrp.h>
+#include <StringLoader.h>
+#include <aknnotewrappers.h>
+#include <WEPSecuritySettingsUI.h>
+
+#include <WEPSecuritySettingsUI.rsg>
+
+#include "WEPSecuritySettingsImpl.h"
+#include "WEPSecuritySettingsUiPanic.h"
+#include "WEPSecuritySettingsDlg.h"
+#include "WepKeyDataTextSettingPage.h"
+
+#include "WEPSecuritySettingsUI.hrh"
+
+#include <hlplch.h>
+#include <csxhelp/cp.hlp.hrh>
+
+#include <FeatMgr.h>
+
+
+// CONSTANT DECLARATIONS
+
+// Number of fields of main view
+LOCAL_D const TInt KNumOfFieldsMain = 3;
+
+// Number of fields of key configuration view
+LOCAL_D const TInt KNumOfFieldsKeyConfiguration = 3;
+
+// Ratio of ascii and hex key sizes
+LOCAL_D const TInt KAsciiHexRatio = 2;
+
+
+// ================= MEMBER FUNCTIONS =======================
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::CWEPSecuritySettingsDlg
+// ---------------------------------------------------------
+//
+CWEPSecuritySettingsDlg::CWEPSecuritySettingsDlg( TInt& aEventStore )
+: iNaviPane( NULL ), 
+iTabGroup( NULL ),
+iActiveTab( 0 ),
+iLevel( 0 ),
+iEventStore( &aEventStore )
+    {
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::~CWEPSecuritySettingsDlg
+// ---------------------------------------------------------
+//
+CWEPSecuritySettingsDlg::~CWEPSecuritySettingsDlg()
+    {
+    if ( iNaviDecoratorEmpty )
+        {
+        delete iNaviDecoratorEmpty;
+        }
+
+    if ( iNaviDecoratorTabbed )
+        {
+        delete iNaviDecoratorTabbed;
+        }
+
+    if ( iTitlePane )
+        {
+        // set old text back, if we have it...
+        if ( iOldTitleText )
+            {
+            TRAP_IGNORE( iTitlePane->SetTextL( *iOldTitleText ) );
+            delete iOldTitleText;
+            }
+        }
+     
+     FeatureManager::UnInitializeLib();
+     }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::NewL
+// ---------------------------------------------------------
+//
+CWEPSecuritySettingsDlg* CWEPSecuritySettingsDlg::NewL( TInt& aEventStore )
+    {
+    CWEPSecuritySettingsDlg* secSett = 
+                        new ( ELeave )CWEPSecuritySettingsDlg( aEventStore );
+    return secSett;
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::ConstructAndRunLD
+// ---------------------------------------------------------
+//
+TInt CWEPSecuritySettingsDlg::ConstructAndRunLD( 
+                                CWEPSecuritySettingsImpl* aSecuritySettings,
+                                const TDesC& aTitle )
+    {
+	CleanupStack::PushL( this );
+
+    const TInt Titles_Wep_Main[KNumOfFieldsMain] =
+        {
+        R_WEP_KEY_IN_USE,
+        R_WEP_AUTHENTICATION,
+        R_WEP_KEY_CONFIGURATION
+        };
+
+    const TInt Fields_Wep_Main[KNumOfFieldsMain] =
+        {
+        CWEPSecuritySettings::EWepKeyInUse,
+        CWEPSecuritySettings::EWepAuthentication,
+        CWEPSecuritySettings::EWepKeyConfiguration
+        };
+
+    const TInt Fields_Wep_Key_Configuration[KNumOfFieldsKeyConfiguration] =
+        {
+        CWEPSecuritySettings::EWepKeyLength,
+        CWEPSecuritySettings::EWepKeyFormat,
+        CWEPSecuritySettings::EWepKeyData
+        };
+
+    const TInt Titles_Wep_Key_Configuration[KNumOfFieldsKeyConfiguration] =
+        {
+        R_WEP_KEY_LENGTH,
+        R_WEP_KEY_FORMAT,
+        R_WEP_KEY_DATA
+        };
+
+    iSecuritySettings = aSecuritySettings;
+    iConnectionName = aTitle;
+
+    iFieldsMain = ( CWEPSecuritySettings::TWepMember* ) Fields_Wep_Main;
+    iTitlesMain = MUTABLE_CAST( TInt*, Titles_Wep_Main );
+
+    iFieldsKeyConfiguration = ( CWEPSecuritySettings::TWepMember* ) 
+                                                  Fields_Wep_Key_Configuration;
+    iTitlesKeyConfiguration = MUTABLE_CAST( TInt*, 
+                                                Titles_Wep_Key_Configuration );
+
+    FeatureManager::InitializeLibL();
+
+    ConstructL( R_WEP_SECURITY_SETTINGS_MENUBAR );
+    
+    // ExecuteLD will PushL( this ), so we have to Pop it...
+    CleanupStack::Pop( this ); // this
+	
+    return ExecuteLD( R_WEPSETTINGS_DIALOG );
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::OkToExitL
+// ---------------------------------------------------------
+//
+TBool CWEPSecuritySettingsDlg::OkToExitL( TInt aButtonId )
+{
+    // Translate the button presses into commands for the appui & current
+    // view to handle
+    TBool retval( EFalse );
+    if ( aButtonId == EAknSoftkeyOptions )
+        {
+        DisplayMenuL();
+        }
+    else if ( aButtonId == EEikCmdExit )        // ShutDown requested
+        {
+        *iEventStore |= CWEPSecuritySettings::EShutDownReq;
+        retval = ETrue;
+        }
+    else if ( aButtonId == EAknSoftkeyBack || aButtonId == EAknCmdExit )
+        {
+        if ( iSecuritySettings->IsValid() )
+            {
+            *iEventStore |= CWEPSecuritySettings::EValid;
+            retval = ETrue;
+            }
+        else if ( aButtonId == EAknSoftkeyBack )
+            {
+            HBufC* stringHolder = StringLoader::LoadL( 
+                                        R_WEP_DATA_MISSING, iEikonEnv );
+            CleanupStack::PushL( stringHolder );
+
+            CAknQueryDialog *queryDialog = new (ELeave) CAknQueryDialog();
+
+            queryDialog->PrepareLC( R_WEP_SEC_SETT_CONF_QUERY );
+            queryDialog->SetPromptL( stringHolder->Des() );
+            if ( queryDialog->RunLD() )
+                {
+                retval = ETrue;
+                }
+            else
+                {
+                iActiveTab = iSecuritySettings->KeyInUse();
+                iTabGroup->SetActiveTabByIndex( iActiveTab );
+                HandleListboxDataChangeL();
+                }
+            CleanupStack::PopAndDestroy( stringHolder );   // stringHolder
+            }
+        else
+            {
+            retval = ETrue;
+            }
+
+        if ( aButtonId == EAknCmdExit )
+            {
+            *iEventStore |= CWEPSecuritySettings::EExitReq;
+            }
+        }
+    else if( aButtonId == EWepSelCmdChange )
+        {
+        ChangeSettingsL( ETrue );
+        retval = EFalse; // don't exit the dialog
+        }
+
+    return retval;
+}
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::OfferKeyEventL
+// ---------------------------------------------------------
+//
+TKeyResponse CWEPSecuritySettingsDlg::OfferKeyEventL( 
+                                const TKeyEvent& aKeyEvent, TEventCode aType )
+    {
+    TKeyResponse retval( EKeyWasNotConsumed );
+    TChar charCode( aKeyEvent.iCode );
+
+    // Only interested in standard key events
+    if ( aType == EEventKey )
+        {
+        // If a menu is showing offer key events to it.
+        if ( CAknDialog::MenuShowing() )
+            {
+            retval = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+            }
+        else
+            {
+            if ( iList )
+                {
+                // as list IS consuming, must handle because it IS the SHUTDOWN...
+                // or, a view switch is shutting us down...
+                if ( aKeyEvent.iCode == EKeyEscape )
+                    {
+                    ProcessCommandL( EEikCmdExit );
+                    retval = EKeyWasConsumed;
+                    }
+                else if ( iLevel && ( charCode == EKeyLeftArrow || 
+                                      charCode == EKeyRightArrow ) )
+                    {
+                    if ( iTabGroup )
+                        {
+                        return iTabGroup->OfferKeyEventL( aKeyEvent, aType );
+                        }
+                    }
+                else
+                    {
+                    retval = iList->OfferKeyEventL( aKeyEvent, aType );
+                    }
+                }
+            else
+                {
+                if ( aKeyEvent.iCode == EKeyOK )
+                    {
+                    ProcessCommandL( EWepSelCmdChange );
+                    retval = EKeyWasConsumed;
+                    }
+                }
+            }
+        }
+
+    return retval;
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::HandleListboxDataChangeL
+// ---------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::HandleListboxDataChangeL()
+    {
+    // fill up our new list with data
+    CDesCArrayFlat* itemArray = new ( ELeave ) CDesCArrayFlat( 4 );
+    CleanupStack::PushL( itemArray );
+
+    if ( iLevel )
+        {
+        FillListWithDataL( *itemArray, *iFieldsKeyConfiguration,
+                           KNumOfFieldsKeyConfiguration,
+                           iTitlesKeyConfiguration );
+
+        iNaviPane->ReplaceL( *iNaviDecoratorEmpty, *iNaviDecoratorTabbed );
+        }
+    else
+        {
+        FillListWithDataL( *itemArray, *iFieldsMain, KNumOfFieldsMain, 
+                           iTitlesMain );
+        iNaviPane->ReplaceL( *iNaviDecoratorTabbed, *iNaviDecoratorEmpty );
+        }
+
+    iList->Model()->SetItemTextArray( itemArray );
+    
+    CleanupStack::Pop( itemArray ); // now it is owned by the LB, so pop it
+    iItemArray = itemArray;
+
+    iList->HandleItemAdditionL();
+    }
+
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::ProcessCommandL
+// ---------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::ProcessCommandL( TInt aCommandId )
+    {
+    if ( MenuShowing() )
+        {
+        HideMenu();
+        }
+
+    switch ( aCommandId )
+        {
+        case EWepSelCmdChange:
+            {
+            ChangeSettingsL( EFalse );
+            break;
+            }
+
+        case EAknCmdHelp:
+            {
+            HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+                                    iEikonEnv->EikAppUi()->AppHelpContextL() );
+            break;
+            }
+
+        case EAknSoftkeyBack:
+        case EAknCmdExit:
+        case EEikCmdExit:
+            {
+            TryExitL( aCommandId );
+            break;
+            }
+
+        default:
+            {
+            // silently ignore it
+            break;
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::HandleListBoxEventL
+// ---------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+                                                   TListBoxEvent aEventType )
+    {
+    switch ( aEventType )
+        {
+        case EEventEnterKeyPressed:
+            // both handled in the same way for now...
+        case EEventItemSingleClicked:
+            {
+            ChangeSettingsL( ETrue );
+            break;
+            }
+
+        case EEventEditingStarted:
+        case EEventEditingStopped:
+        case EEventPenDownOnItem:
+        case EEventItemDraggingActioned:
+            {
+            break;
+            }
+
+
+        default:
+            {
+            __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
+            break;
+            };
+        };
+    }
+
+
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::PreLayoutDynInitL()
+// ---------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::PreLayoutDynInitL()
+    {
+    // first get StatusPane
+    CEikStatusPane* statusPane = iEikonEnv->AppUiFactory()->StatusPane();
+
+    // then get TitlePane
+    iTitlePane = ( CAknTitlePane* ) statusPane->ControlL( TUid::Uid( 
+                                                    EEikStatusPaneUidTitle ) );
+    // if not already stored, store it for restoring
+    if ( !iOldTitleText )
+        {
+        iOldTitleText = iTitlePane->Text()->AllocL();
+        }
+
+    // set new titlepane text
+    iTitlePane->SetTextL( iConnectionName );
+
+    // Fetch pointer to the default navi pane control
+    iNaviPane = ( CAknNavigationControlContainer* ) 
+                    statusPane->ControlL( TUid::Uid( EEikStatusPaneUidNavi ) );
+
+    _LIT( KEmpty, "" );
+    if ( !iNaviDecoratorEmpty )
+        {
+        iNaviDecoratorEmpty = iNaviPane->CreateNavigationLabelL( KEmpty );
+        }
+
+    if ( !iNaviDecoratorTabbed )
+        {
+        iNaviDecoratorTabbed = iNaviPane->CreateTabGroupL();
+        
+        if (iNaviDecoratorTabbed)
+            {
+            iTabGroup = static_cast< CAknTabGroup* >
+                                    ( iNaviDecoratorTabbed->DecoratedControl() );
+            
+            HBufC16* tabText = iEikonEnv->AllocReadResourceLC( R_WEP_TAB_KEY_1 );
+            TPtr localizedTabText( tabText->Des() );
+            AknTextUtils::LanguageSpecificNumberConversion( localizedTabText );
+            iTabGroup->AddTabL( EWEPSecuritySettingsTab1, *tabText );
+            CleanupStack::PopAndDestroy( tabText ); // tabText
+            
+            tabText = iEikonEnv->AllocReadResourceLC( R_WEP_TAB_KEY_2 );
+            localizedTabText.Set( tabText->Des() );
+            AknTextUtils::LanguageSpecificNumberConversion( localizedTabText );
+            iTabGroup->AddTabL( EWEPSecuritySettingsTab2, *tabText );
+            CleanupStack::PopAndDestroy( tabText ); // tabText
+            
+            tabText = iEikonEnv->AllocReadResourceLC( R_WEP_TAB_KEY_3 );
+            localizedTabText.Set( tabText->Des() );
+            AknTextUtils::LanguageSpecificNumberConversion( localizedTabText );
+            iTabGroup->AddTabL( EWEPSecuritySettingsTab3, *tabText );
+            CleanupStack::PopAndDestroy( tabText ); // tabText
+            
+            tabText = iEikonEnv->AllocReadResourceLC( R_WEP_TAB_KEY_4 );
+            localizedTabText.Set( tabText->Des() );
+            AknTextUtils::LanguageSpecificNumberConversion( localizedTabText );
+            iTabGroup->AddTabL( EWEPSecuritySettingsTab4, *tabText );
+            CleanupStack::PopAndDestroy( tabText ); // tabText
+            
+            iTabGroup->SetTabFixedWidthL( EAknTabWidthWithFourTabs );
+            iTabGroup->SetActiveTabByIndex( 0 );
+                
+            iTabGroup->SetObserver( this );
+            }
+        }
+
+    iNaviPane->PushL( *iNaviDecoratorEmpty );
+    iList = STATIC_CAST( CAknSettingStyleListBox*, 
+                                        Control( KWepMainSettingsListboxId ) );
+
+    iList->CreateScrollBarFrameL( ETrue );
+    iList->ScrollBarFrame()->SetScrollBarVisibilityL
+        ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+
+    HandleListboxDataChangeL();
+
+    iList->SetCurrentItemIndex( 0 );
+    iList->SetListBoxObserver( this );
+    }
+
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::DynInitMenuPaneL
+// ---------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::DynInitMenuPaneL( TInt aResourceId, 
+                                                CEikMenuPane* aMenuPane )
+    {
+    CAknDialog::DynInitMenuPaneL( aResourceId, aMenuPane );
+    if ( aResourceId == R_WEP_SECURITY_SETTINGS_MENU )
+        {
+        if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+            {
+            aMenuPane->DeleteMenuItem( EAknCmdHelp );
+            }
+        }
+    }
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::FillListWithDataL
+//----------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::FillListWithDataL( CDesCArrayFlat& aItemArray,
+                                   const CWEPSecuritySettings::TWepMember& arr, 
+                                   TInt aLength,
+                                   const TInt* aRes )
+    {
+    _LIT( KTxtMenuListItemFormat, " \t%S\t\t" );
+    const TInt KSpaceAndTabsLength = 4;
+
+    CWEPSecuritySettings::TWepMember* wepMember = 
+                       MUTABLE_CAST( CWEPSecuritySettings::TWepMember*, &arr );
+
+    for( TInt i = 0; i < aLength; i++ )
+        {
+        if ( *wepMember == CWEPSecuritySettings::EWepKeyConfiguration )
+            {
+            // Define a heap descriptor to hold all the item text
+            // HBufC is non-modifiable
+            HBufC* title = iEikonEnv->AllocReadResourceLC( *aRes );
+
+            // Define a heap descriptor to hold all the item text
+            HBufC* itemText = HBufC::NewLC( title->Length() + 
+                                            KSpaceAndTabsLength );
+
+            // Define a modifiable pointer descriptor to be able to append
+            // text to the non-modifiable heap descriptor itemText
+            TPtr itemTextPtr = itemText->Des();
+            itemTextPtr.Format( KTxtMenuListItemFormat, title );
+
+            aItemArray.AppendL( *itemText );
+
+            CleanupStack::PopAndDestroy( 2, title );   // itemText, title
+            }
+        else
+            {
+            HBufC* itemText = CreateTextualListBoxItemL( *wepMember, 
+                                                         *aRes );
+            CleanupStack::PushL( itemText );
+            aItemArray.AppendL( itemText->Des() );
+            CleanupStack::PopAndDestroy( itemText );
+            }
+
+        wepMember++;
+        aRes++;
+        }
+    }
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::UpdateListBoxItemL
+//----------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::UpdateListBoxItemL( 
+                                    CWEPSecuritySettings::TWepMember aMember, 
+                                    TInt aRes, TInt aPos )
+    {
+    HBufC* itemText = CreateTextualListBoxItemL( aMember, aRes );
+    CleanupStack::PushL( itemText );
+    // first try to add, if Leaves, list will be untouched
+    iItemArray->InsertL( aPos, itemText->Des() );
+    // if successful, previous item is scrolled up with one,
+    // so delete that one...
+    if ( ++aPos < iItemArray->MdcaCount() )
+        {
+        iItemArray->Delete( aPos );
+        }
+    CleanupStack::PopAndDestroy( itemText );
+    }
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::CreateTextualListBoxItemL
+//----------------------------------------------------------
+//
+HBufC* CWEPSecuritySettingsDlg::CreateTextualListBoxItemL( 
+                                      CWEPSecuritySettings::TWepMember aMember,
+                                      TInt aRes )
+    {
+    // Define a heap descriptor to hold all the item text
+    // HBufC is non-modifiable
+    HBufC* title = iEikonEnv->AllocReadResourceLC( aRes );
+
+    // both variables needed independently of the following conditions so I
+    // must declare them here...
+    HBufC16* value;
+    TUint32 valueResourceID;
+
+    switch ( aMember )
+        {
+        case CWEPSecuritySettings::EWepKeyInUse:
+            {
+            switch ( iSecuritySettings->KeyInUse() )
+                {
+                case CWEPSecuritySettings::EKeyNumber1:
+                    {
+                    valueResourceID = R_WEP_KEY_NUMBER_1;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::EKeyNumber2:
+                    {
+                    valueResourceID = R_WEP_KEY_NUMBER_2;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::EKeyNumber3:
+                    {
+                    valueResourceID = R_WEP_KEY_NUMBER_3;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::EKeyNumber4:
+                    {
+                    valueResourceID = R_WEP_KEY_NUMBER_4;
+                    break;
+                    }
+
+                default:
+                    {
+                    valueResourceID = 0;
+                    break;
+                    }
+                }
+            break;
+            }
+        
+        case CWEPSecuritySettings::EWepAuthentication:
+            {
+            switch ( iSecuritySettings->Authentication() )
+                {
+                case CWEPSecuritySettings::EAuthOpen:
+                    {
+                    valueResourceID = R_WEP_AUTHENTICATION_OPEN;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::EAuthShared:
+                    {
+                    valueResourceID = R_WEP_AUTHENTICATION_SHARED;
+                    break;
+                    }
+
+                default:
+                    {
+                    valueResourceID = 0;
+                    break;
+                    }
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyLength:
+            {
+            switch ( iSecuritySettings->KeyLength( iActiveTab ) )
+                {
+                case CWEPSecuritySettings::E40Bits:
+                    {
+                    valueResourceID = R_WEP_KEY_LENGTH_64_BITS;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::E104Bits:
+                    {
+                    valueResourceID = R_WEP_KEY_LENGTH_128_BITS;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::E232Bits:
+                    {
+                    valueResourceID = iSecuritySettings->WEP256Enabled() ? 
+                                                R_WEP_KEY_LENGTH_256_BITS : 0;
+                    break;
+                    }
+
+                default:
+                    {
+                    valueResourceID = 0;
+                    break;
+                    }
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyFormat:
+            {
+            switch ( iSecuritySettings->KeyFormat( iActiveTab ) )
+                {
+                case CWEPSecuritySettings::EAscii:
+                    {
+                    valueResourceID = R_WEP_KEY_FORMAT_ASCII;
+                    break;
+                    }
+
+                case CWEPSecuritySettings::EHexadecimal:
+                    {
+                    valueResourceID = R_WEP_KEY_FORMAT_HEX;
+                    break;
+                    }
+
+                default:
+                    {
+                    valueResourceID = 0;
+                    break;
+                    }
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyData:
+            {
+            if ( !iSecuritySettings->KeyData( iActiveTab )->Length() )
+                {
+                valueResourceID = R_WEP_KEY_DATA_MUST_BE_DEFINED;
+                }
+            else
+                {
+                valueResourceID = 0;
+                }
+
+            break;
+            }
+
+        default:
+            {
+            valueResourceID = 0;
+            break;
+            }
+        }
+
+    _LIT( KStars, "****" );
+    _LIT( KTxtListItemFormat, " \t%S\t\t%S" );
+    const TInt KSpaceAndTabsLength = 4;
+    _LIT( KTxtCompulsory, "\t*" );
+
+    if ( valueResourceID )
+        {
+        // Read up value text from resource
+        value = iEikonEnv->AllocReadResourceLC( valueResourceID );
+        if( aMember == CWEPSecuritySettings::EWepKeyInUse )
+            {
+            TPtr localizedValue( value->Des() );
+            AknTextUtils::LanguageSpecificNumberConversion( localizedValue );
+            }
+        }
+    else
+        {
+        value = HBufC::NewLC( KStars().Length() );
+        value->Des().Copy( KStars ); 
+        }
+
+    // Define a heap descriptor to hold all the item text
+    // +4 for space and tab characters
+    TInt length = title->Length() + value->Length() + KSpaceAndTabsLength;
+    if ( aMember == CWEPSecuritySettings::EWepKeyData )  // Compulsory
+        {
+        length += KTxtCompulsory().Length();
+        }
+
+    HBufC* itemText = HBufC::NewLC( length );
+
+    // Define a modifiable pointer descriptor to be able to append text to the
+    // non-modifiable heap descriptor itemText
+    TPtr itemTextPtr = itemText->Des();
+    itemTextPtr.Format( KTxtListItemFormat, title, value );
+    if ( aMember == CWEPSecuritySettings::EWepKeyData )  // Compulsory
+        {
+        itemTextPtr.Append( KTxtCompulsory );
+        }
+    CleanupStack::Pop( itemText );    // itemtext,
+
+    CleanupStack::PopAndDestroy( 2, title ); // title, value
+
+    return itemText;
+    }
+
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::ShowPopupSettingPageL
+//----------------------------------------------------------
+//
+TBool CWEPSecuritySettingsDlg::ShowPopupSettingPageL( 
+                                       CWEPSecuritySettings::TWepMember aData )
+    {
+    TInt currvalue( 0 );
+    TBool retval( EFalse );
+    CDesCArrayFlat* items = FillPopupSettingPageLC( aData,  currvalue );
+
+    TInt attr_resid( 0 );
+
+    // not text based ones:
+    switch ( aData )
+        {
+        case CWEPSecuritySettings::EWepKeyInUse:
+            {
+            attr_resid = R_WEP_KEY_IN_USE;
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepAuthentication:
+            {
+            attr_resid = R_WEP_AUTHENTICATION;
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyLength:
+            {
+            attr_resid = R_WEP_KEY_LENGTH;
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyFormat:
+            {
+            attr_resid = R_WEP_KEY_FORMAT;
+            break;
+            }
+
+        default:
+            {
+            __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
+            attr_resid = 0;
+            break;
+            }
+        }
+
+    HBufC* titlebuf;
+    CAknRadioButtonSettingPage* dlg;
+    if ( attr_resid )
+        {
+        titlebuf = iEikonEnv->AllocReadResourceLC( attr_resid );
+        dlg = new ( ELeave )CAknRadioButtonSettingPage( 
+                            R_RADIO_BUTTON_SETTING_PAGE, currvalue, items );
+        CleanupStack::PushL( dlg ); 
+        TPtrC ptr( titlebuf->Des() );
+        dlg->SetSettingTextL( ptr );
+        CleanupStack::Pop( dlg ); // dlg
+        }
+    else
+        {
+        dlg = new ( ELeave )CAknRadioButtonSettingPage( 
+                            R_RADIO_BUTTON_SETTING_PAGE, currvalue, items );
+        }
+    if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) )
+        {
+    	retval = UpdateFromPopupSettingPage( aData, currvalue );
+	    }
+
+    if ( attr_resid )
+        {
+        CleanupStack::PopAndDestroy( titlebuf ); // titlebuf
+        }
+
+    CleanupStack::PopAndDestroy( items );   // items. It deletes also all 
+                                            // elements in the array.
+    return retval;
+    }
+
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::ShowPopupTextSettingPageL
+//----------------------------------------------------------
+//
+TBool CWEPSecuritySettingsDlg::ShowPopupTextSettingPageL()
+    {
+    TBool retval( EFalse );
+
+    CWEPSecuritySettings::TWEPKeyFormat keyFormat = 
+                                    iSecuritySettings->KeyFormat( iActiveTab );
+    TInt expectedLength = iSecuritySettings->ExpectedLengthOfKeyData( 
+                                iSecuritySettings->KeyLength( iActiveTab ) );
+
+    if ( keyFormat == CWEPSecuritySettings::EAscii )
+        {
+        expectedLength /= KAsciiHexRatio; //Ascii key is half the length of Hex
+        }
+
+    HBufC16* bufKeyData = HBufC16::NewLC( expectedLength );
+    TPtr16 ptrKeyData( bufKeyData->Des() );
+
+    TBool showPage( ETrue );
+    while ( showPage )
+        {
+        CWEPKeyDataTextSettingPage* dlg = 
+            new( ELeave )CWEPKeyDataTextSettingPage( ptrKeyData, 
+                                                     expectedLength,
+                                                     keyFormat );
+
+        if ( dlg->ExecuteLD( CAknSettingPage::EUpdateWhenAccepted ) )
+            {
+            HBufC8* buf8 = HBufC8::NewLC( bufKeyData->Des().Length() );
+            buf8->Des().Copy( bufKeyData->Des() ); 
+
+            TInt err = iSecuritySettings->VerifyKeyData( *buf8, expectedLength,
+                                iSecuritySettings->KeyFormat( iActiveTab ) );
+            if ( err == KErrNone )
+                {
+                if ( keyFormat == CWEPSecuritySettings::EAscii )
+                    {
+                    HBufC8* buf8Conv = 
+                                HBufC8::NewLC( bufKeyData->Des().Length()
+                                                            * KAsciiHexRatio );
+                                        // Ascii key is half the length of Hex
+
+                    iSecuritySettings->ConvertAsciiToHex( buf8->Des(), 
+                                                          buf8Conv );
+                    iSecuritySettings->SetKeyData( iActiveTab, 
+                                                   buf8Conv->Des() );
+                    CleanupStack::PopAndDestroy( buf8Conv ); // buf8Conv
+                    }
+                else
+                    {
+                    iSecuritySettings->SetKeyData( iActiveTab, buf8->Des() );
+                    }
+
+                retval = ETrue;
+                showPage = EFalse;
+                }
+            else
+                {
+                HBufC* stringLabel;
+                
+                if ( err == KErrInvalidLength )
+                    {
+                    stringLabel = StringLoader::LoadL( R_INFO_WEP_KEY_TOO_SHORT,
+                                                       expectedLength, 
+                                                       iEikonEnv );
+                    }
+                else
+                    {
+                    stringLabel = StringLoader::LoadL( 
+                                                R_INFO_WEP_KEY_ILLEGAL_CHARS,
+                                                iEikonEnv );
+                    }
+
+                CleanupStack::PushL( stringLabel );
+
+	            CAknInformationNote* dialog = new (ELeave)CAknInformationNote( 
+                                                                        ETrue );
+                CleanupStack::Pop( stringLabel );
+
+                dialog->ExecuteLD( *stringLabel );
+
+                CleanupStack::PopAndDestroy( stringLabel );   // stringLabel
+
+                ptrKeyData.Zero();
+                }
+
+            CleanupStack::PopAndDestroy( buf8 ); // buf8
+            }
+        else
+            {
+            showPage = EFalse;
+            }
+        }
+
+    CleanupStack::PopAndDestroy( bufKeyData ); // bufKeyData
+
+    return retval;
+    }
+
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::FillPopupSettingPageLC
+// ---------------------------------------------------------
+//
+CDesCArrayFlat* CWEPSecuritySettingsDlg::FillPopupSettingPageLC( 
+                                       CWEPSecuritySettings::TWepMember aData,
+                                       TInt& aCurrvalue )
+    {
+    CDesCArrayFlat* items = new( ELeave)CDesCArrayFlat( 1 );
+    CleanupStack::PushL( items );
+
+    switch ( aData )
+        {
+        case CWEPSecuritySettings::EWepKeyInUse:
+            {
+            RBuf16 convert( iEikonEnv->AllocReadResourceL( 
+                                                        R_WEP_KEY_NUMBER_1 ) );
+            AknTextUtils::LanguageSpecificNumberConversion( convert );
+            items->AppendL( convert );
+            convert.Close();
+            
+            convert.Assign( iEikonEnv->AllocReadResourceL(
+                                                        R_WEP_KEY_NUMBER_2 ) );
+            AknTextUtils::LanguageSpecificNumberConversion( convert );
+            items->AppendL( convert );
+            convert.Close();
+            
+            convert.Assign( iEikonEnv->AllocReadResourceL(
+                                                        R_WEP_KEY_NUMBER_3 ) );
+            AknTextUtils::LanguageSpecificNumberConversion( convert );
+            items->AppendL( convert );
+            convert.Close();
+            
+            convert.Assign( iEikonEnv->AllocReadResourceL(
+                                                        R_WEP_KEY_NUMBER_4 ) );
+            AknTextUtils::LanguageSpecificNumberConversion( convert );
+            items->AppendL( convert );
+            convert.Close();
+
+            aCurrvalue = iSecuritySettings->KeyInUse();
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepAuthentication:
+            {
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_AUTHENTICATION_OPEN ) );
+            CleanupStack::PopAndDestroy();
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_AUTHENTICATION_SHARED ) );
+            CleanupStack::PopAndDestroy();
+
+            aCurrvalue = iSecuritySettings->Authentication();
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyLength:
+            {
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_KEY_LENGTH_64_BITS ) );
+            CleanupStack::PopAndDestroy();
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_KEY_LENGTH_128_BITS ) );
+            CleanupStack::PopAndDestroy();
+
+            if ( iSecuritySettings->WEP256Enabled() )
+                {
+                items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_KEY_LENGTH_256_BITS ) );
+                CleanupStack::PopAndDestroy();
+                }
+
+            aCurrvalue = iSecuritySettings->KeyLength( iActiveTab );
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyFormat:
+            {
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_KEY_FORMAT_ASCII ) );
+            CleanupStack::PopAndDestroy();
+            items->AppendL( *iEikonEnv->AllocReadResourceLC( 
+                                            R_WEP_KEY_FORMAT_HEX ) );
+            CleanupStack::PopAndDestroy();
+
+            aCurrvalue = iSecuritySettings->KeyFormat( iActiveTab );
+            break;
+            }
+
+        default:
+            {
+            __ASSERT_DEBUG( EFalse, Panic ( EUnknownCase ) );
+            break;
+            }
+        }
+    return items;
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::UpdateFromPopupSettingPage
+// ---------------------------------------------------------
+//
+TBool CWEPSecuritySettingsDlg::UpdateFromPopupSettingPage( 
+                                        CWEPSecuritySettings::TWepMember aData,
+                                        TInt aCurrvalue )
+    {
+    TBool retVal( EFalse );
+
+    switch ( aData )
+        {
+        case CWEPSecuritySettings::EWepKeyInUse:
+            {
+            if ( iSecuritySettings->KeyInUse() != 
+                             ( CWEPSecuritySettings::TWEPKeyInUse )aCurrvalue )
+                {
+                iSecuritySettings->SetKeyInUse( 
+                            ( CWEPSecuritySettings::TWEPKeyInUse )aCurrvalue );
+                retVal = ETrue;
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepAuthentication:
+            {
+            if ( iSecuritySettings->Authentication() != 
+                 ( CWEPSecuritySettings::TWEPAuthentication )aCurrvalue )
+                {
+                iSecuritySettings->SetAuthentication( 
+                      ( CWEPSecuritySettings::TWEPAuthentication )aCurrvalue );
+                retVal = ETrue;
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyLength:
+            {
+            if ( iSecuritySettings->KeyLength( iActiveTab ) != 
+                 ( CWEPSecuritySettings::TWEPKeyLength )aCurrvalue )
+                {
+                iSecuritySettings->SetKeyLength( iActiveTab, 
+                           ( CWEPSecuritySettings::TWEPKeyLength )aCurrvalue );
+                retVal = ETrue;
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyFormat:
+            {
+            if ( iSecuritySettings->KeyFormat( iActiveTab ) != 
+                 ( CWEPSecuritySettings::TWEPKeyFormat )aCurrvalue )
+                {
+                iSecuritySettings->SetKeyFormat( iActiveTab, 
+                           ( CWEPSecuritySettings::TWEPKeyFormat )aCurrvalue );
+                retVal = ETrue;
+                }
+            break;
+            }
+
+        default:
+            {
+            __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
+            break;
+            }
+        }
+
+    return retVal;
+    }
+
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::ChangeSettingsL
+//----------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::ChangeSettingsL( TBool aQuick )
+    {
+    TInt itemIndex = ( Max( iList->CurrentItemIndex(), 0 ) );
+    CWEPSecuritySettings::TWepMember* ptr = 
+                  (iLevel ? iFieldsKeyConfiguration : iFieldsMain) + itemIndex;
+    TInt* tptr = ( iLevel ? iTitlesKeyConfiguration : iTitlesMain ) + itemIndex;
+
+    const TInt KShiftFromKeyLengthToKeyData = 2;
+    switch ( *ptr  )
+        {
+        case CWEPSecuritySettings::EWepKeyInUse:
+        case CWEPSecuritySettings::EWepKeyLength:
+            { // Pop-up setting item
+            if ( ShowPopupSettingPageL( *ptr ) )
+                {
+                UpdateListBoxItemL( *ptr, *tptr, itemIndex );
+                *iEventStore |= CWEPSecuritySettings::EModified;
+                if ( *ptr == CWEPSecuritySettings::EWepKeyLength )
+                    {
+                    ptr += KShiftFromKeyLengthToKeyData;
+                    tptr += KShiftFromKeyLengthToKeyData;
+                    iSecuritySettings->KeyData( iActiveTab )->Zero();
+                    UpdateListBoxItemL( *ptr, *tptr, 
+                                    itemIndex+KShiftFromKeyLengthToKeyData );
+                    iList->SetCurrentItemIndexAndDraw( itemIndex+
+                                                KShiftFromKeyLengthToKeyData );
+                    }
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepAuthentication:
+        case CWEPSecuritySettings::EWepKeyFormat:
+            { // Setting item with two available values
+            TBool changed( ETrue );
+            if ( aQuick )
+                {
+                InvertSettings( *ptr );
+                }
+            else
+                {
+                changed = ShowPopupSettingPageL( *ptr );
+                }
+
+            if ( changed )
+                {
+                UpdateListBoxItemL( *ptr, *tptr, itemIndex );
+                if ( *ptr == CWEPSecuritySettings::EWepAuthentication )
+                    {
+                    *iEventStore |= CWEPSecuritySettings::EModified;
+                    }
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyData:
+            { // Text setting item
+            if ( ShowPopupTextSettingPageL() )
+                {
+                UpdateListBoxItemL( *ptr, *tptr, itemIndex );
+                *iEventStore |= CWEPSecuritySettings::EModified;
+                }
+            break;
+            }
+
+        case CWEPSecuritySettings::EWepKeyConfiguration:
+            {
+            iLevel = 1;
+
+            iActiveTab = iSecuritySettings->KeyInUse();
+            iTabGroup->SetActiveTabByIndex( iActiveTab );
+
+            HandleListboxDataChangeL();
+            itemIndex = 0;
+
+            break;
+            }
+
+        default:
+            {
+            __ASSERT_DEBUG( EFalse, Panic( EUnknownCase ) );
+            break;
+            }
+        }
+
+    iList->ScrollToMakeItemVisible( itemIndex );
+    iList->SetCurrentItemIndexAndDraw( itemIndex );
+    }
+
+
+
+
+//----------------------------------------------------------
+// CWEPSecuritySettingsDlg::InvertSettings
+//----------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::InvertSettings( CWEPSecuritySettings::TWepMember 
+                                                                  aDataMember )
+    {
+    if ( aDataMember == CWEPSecuritySettings::EWepAuthentication )
+        {
+        if ( iSecuritySettings->Authentication() == 
+                                              CWEPSecuritySettings::EAuthOpen )
+            {
+            iSecuritySettings->SetAuthentication( 
+                                            CWEPSecuritySettings::EAuthShared );
+            }
+        else
+            {
+            iSecuritySettings->SetAuthentication( 
+                                              CWEPSecuritySettings::EAuthOpen );
+            }
+        }
+    else if ( aDataMember == CWEPSecuritySettings::EWepKeyFormat )
+        {
+        if ( iSecuritySettings->KeyFormat( iActiveTab ) == 
+                                                 CWEPSecuritySettings::EAscii )
+            {
+            iSecuritySettings->SetKeyFormat( iActiveTab, 
+                                          CWEPSecuritySettings::EHexadecimal );
+            }
+        else
+            {
+            iSecuritySettings->SetKeyFormat( iActiveTab, 
+                                                 CWEPSecuritySettings::EAscii );
+            }
+        }
+    }
+
+
+// ---------------------------------------------------------
+// CWEPSecuritySettingsDlg::GetHelpContext
+// ---------------------------------------------------------
+//
+void CWEPSecuritySettingsDlg::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    aContext.iMajor = KWEPSecuritySettingsUiHelpMajor;
+    if ( iLevel )
+        {
+        aContext.iContext = KSET_HLP_WLAN_WEP_KEY_SETT;
+        }
+    else
+        {
+        aContext.iContext = KSET_HLP_WLAN_WEP_MAIN;
+        }
+    }
+
+
+// -----------------------------------------------------------------------------
+// CWEPSecuritySettingsDlg::TabChangedL( TInt aIndex )
+// -----------------------------------------------------------------------------
+// 
+void CWEPSecuritySettingsDlg::TabChangedL( TInt aIndex )
+    {
+    iActiveTab = aIndex;
+    HandleListboxDataChangeL();
+    }
+
+
+// End of File