--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wlansecuritysettings/wepsecuritysettingsui/src/WEPSecuritySettingsDlg.cpp Wed Sep 01 12:23:57 2010 +0100
@@ -0,0 +1,1328 @@
+/*
+* 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.
+*
+*/
+
+/*
+* %version: tr1cfwln#8.1.23 %
+*/
+
+// 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 ( !iNaviDecoratorEmpty )
+ {
+ __ASSERT_DEBUG( EFalse, Panic( EGeneral ) );
+ }
+ 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 );
+ }
+ else
+ {
+ __ASSERT_DEBUG( EFalse, Panic( EGeneral ) );
+ }
+ }
+ 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 );
+
+ delete 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