diff -r 000000000000 -r c8830336c852 wlansecuritysettings/wepsecuritysettingsui/src/WEPSecuritySettingsDlg.cpp --- /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 +#include +#include +#include +#include +#include +#include +#include +#include + +#include + +#include "WEPSecuritySettingsImpl.h" +#include "WEPSecuritySettingsUiPanic.h" +#include "WEPSecuritySettingsDlg.h" +#include "WepKeyDataTextSettingPage.h" + +#include "WEPSecuritySettingsUI.hrh" + +#include +#include + +#include + + +// 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