diff -r 88ee4cf65e19 -r 1aa8c82cb4cb remotestoragefw/gsplugin/src/rsfwgspluginsettinglist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/remotestoragefw/gsplugin/src/rsfwgspluginsettinglist.cpp Wed Sep 01 12:15:08 2010 +0100 @@ -0,0 +1,347 @@ +/* +* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies). +* All rights reserved. +* This component and the accompanying materials are made available +* under the terms of "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: Rsfw GS plugin, Setting List class implementation +* +*/ + + +// INCLUDE FILES +#include +#include +#include +#include +#include +#include +#include + +#include "rsfwgspluginsettinglist.h" +#include "rsfwgssettingsdata.h" +#include "mdebug.h" + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::NewL(CRsfwGsSettingsData &aData) +// ----------------------------------------------------------------------------- +// +CRsfwGsPluginSettingsList *CRsfwGsPluginSettingsList::NewL(CRsfwGsSettingsData &aData) + { + CRsfwGsPluginSettingsList* self = CRsfwGsPluginSettingsList::NewLC(aData); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::NewLC(CRsfwGsSettingsData &aData) +// ----------------------------------------------------------------------------- +// +CRsfwGsPluginSettingsList *CRsfwGsPluginSettingsList::NewLC(CRsfwGsSettingsData &aData) + { + CRsfwGsPluginSettingsList* self = new (ELeave) CRsfwGsPluginSettingsList(aData); + CleanupStack::PushL(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::CRsfwGsPluginSettingsList(CRsfwGsSettingsData &aData) +// ----------------------------------------------------------------------------- +// +CRsfwGsPluginSettingsList::CRsfwGsPluginSettingsList(CRsfwGsSettingsData &aData) : + CAknSettingItemList(), + iSettingsData(aData) + { + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::~CRsfwGsPluginSettingsList() +// ----------------------------------------------------------------------------- +// +CRsfwGsPluginSettingsList::~CRsfwGsPluginSettingsList() + { +#if defined __WINS__ + iDlgSrv.Close(); +#endif + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::SizeChanged() +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::SizeChanged() + { + // if size changes, make sure component takes whole available space + if (ListBox()) + { + ListBox()->SetRect(Rect()); + } + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::EditCurrentItemL() +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::EditCurrentItemL() + { + // invoke EditItemL on the current item + + TInt index = ListBox()->CurrentItemIndex(); + EditItemL(index,ETrue); // invoked from menu + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::EditItemL (TInt aIndex, TBool aCalledFromMenu) +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::EditItemL (TInt aIndex, TBool aCalledFromMenu) + { + if (aIndex == EAccessPointIndex) + { + EditAccessPointL(); + } + else + { + TInt cflags = (*SettingItemArray())[aIndex]->SettingPageFlags(); + // allow user to exit address field without typing anything, + // if he e.g. realizes that he does not remember the address + if ((aIndex == EUserIDIndex) || (aIndex == EServerAddressIndex)) + { + cflags |= CAknTextSettingPage::EZeroLengthAllowed; + } + else + { + //coverity[logical_vs_bitwise] + cflags &= (!CAknTextSettingPage::EZeroLengthAllowed); + } + (*SettingItemArray())[aIndex]->SetSettingPageFlags(cflags); + CAknSettingItemList::EditItemL(aIndex, aCalledFromMenu); + (*SettingItemArray())[aIndex]->StoreL(); + } + SaveSettingL(aIndex); + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::SaveSettingL(TInt aIndex) +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::SaveSettingL(TInt aIndex) + { + + switch (aIndex) + { + case ESettingNameIndex: + SetTitlePaneTextL(iSettingsData.iSettingName); + break; + case EServerAddressIndex: + break; + + case EAccessPointIndex: + if (iSettingsData.iAccessPoint > -1) // if Valid AP number + { + (iSettingsData.iAccessPointDes).Num(iSettingsData.iAccessPoint); + GetAccessPointNameL(iSettingsData.iAccessPoint, + iSettingsData.iAccessPointName); + } + break; + case EUserIDIndex: + break; + + case EPasswordIndex: + break; + + default: + break; + } + LoadSettingsL(); + DrawNow(); + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::CreateSettingItemL (TInt aIdentifier) +// ----------------------------------------------------------------------------- +// +CAknSettingItem * CRsfwGsPluginSettingsList::CreateSettingItemL (TInt aIdentifier) + { + // method is used to create specific setting item as required at run-time. + // aIdentifier is used to determine what kind of setting item should be + // created + + CAknSettingItem* settingItem = NULL; + + switch (aIdentifier) + { + case ESettingItemDriveName: + settingItem = new (ELeave) CAknTextSettingItem ( aIdentifier, + iSettingsData.iSettingName); + break; + case ESettingItemURL: + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, + iSettingsData.iURL); + break; + + case ESettingItemAccessPoint: + GetAccessPointNameL(iSettingsData.iAccessPoint, iSettingsData.iAccessPointName); + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, iSettingsData.iAccessPointName); + break; + + + + case ESettingItemUserID: + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, + iSettingsData.iUserID); + settingItem->SetEmptyItemTextL(KNullDesC); + settingItem->LoadL(); + break; + case ESettingItemPassword: + settingItem = new (ELeave) CAknPasswordSettingItem ( + aIdentifier, + CAknPasswordSettingItem::EAlpha, + iSettingsData.iPassword); + break; + default: + break; + } + return settingItem; + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::EditAccessPoint() +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::EditAccessPointL() + { + + CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP ); + CleanupStack::PushL(commsDb); + CApUtils* aPUtils = CApUtils::NewLC( *commsDb ); + + TUint32 id = 0; + TRAP_IGNORE(id = aPUtils->WapIdFromIapIdL(iSettingsData.iAccessPoint)); + + CConnectionUiUtilities* connUiUtils = + CConnectionUiUtilities::NewL(); + CleanupStack::PushL( connUiUtils ); + + TCuuAlwaysAskResults result; + // determine how radio button will be initially displayed to the user + // (depending on what is the current IAP choice) + iSettingsData.iAccessPoint < 0 ? result = ECuuAlwaysAsk : result = ECuuUserDefined; + + if (connUiUtils->AlwaysAskPageL(result)) + { + if (result == ECuuUserDefined) + { + +#if defined __WINS__ + // In wins emulator mode we need to show emulator-lan access point so we + // different technique + TConnectionPrefs prefs; + + User::LeaveIfError(iDlgSrv.Connect()); + + prefs.iRank = 1; + prefs.iDirection = ECommDbConnectionDirectionOutgoing; + prefs.iBearerSet = ECommDbBearerCSD | ECommDbBearerWcdma | ECommDbBearerVirtual; + + TUint32 id = iSettingsData.iAccessPoint; + + TRAPD( err, iDlgSrv.IapConnection( id, prefs, iStatus ) ); + User::LeaveIfError( err ); + + User::WaitForRequest( iStatus ); + iSettingsData.iAccessPoint = id; + iDlgSrv.Close(); + +#else + CApSettingsHandler *ApUi = CApSettingsHandler::NewLC( + ETrue, + EApSettingsSelListIsPopUp, + EApSettingsSelMenuSelectNormal, + KEApIspTypeAll, + EApBearerTypeAllBearers, + KEApSortNameAscending, + EIPv4 | EIPv6 + ); + ApUi->RunSettingsL( id, id ); + CleanupStack::PopAndDestroy(ApUi); + iSettingsData.iAccessPoint = aPUtils->IapIdFromWapIdL(id); +#endif + } + else if (result == ECuuAlwaysAsk) + { + iSettingsData.iAccessPoint = -1; + iSettingsData.iAccessPointDes = KNullDesC; + iSettingsData.iAccessPointName = KNullDesC; + } + } + + + CleanupStack::PopAndDestroy(3); //commsDb, aPUtils, CConnectionUtilities + + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::GetAccessPointNameL(TInt32 aAP, TDes& aAccessPoint) +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::GetAccessPointNameL(TInt32 aAP, TDes& aAccessPoint) + { + // Fetch CommDB data for a matching IAP Id or IAP Name + CCommsDatabase* commsDb = CCommsDatabase::NewL(); + CleanupStack::PushL(commsDb); + CCommsDbTableView* table; + table = commsDb->OpenViewMatchingUintLC(TPtrC(IAP), + TPtrC(COMMDB_ID), + aAP); + + TInt err = table->GotoFirstRecord(); + if (err != KErrNone) + { + CleanupStack::PopAndDestroy(2, commsDb); // table, commsDb + return; + } + + // Read name for IAP information + table->ReadTextL(TPtrC(COMMDB_NAME), aAccessPoint); + CleanupStack::PopAndDestroy(2, commsDb); // table, commsDb + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::SetTitlePaneTextL( const TDesC& aTitleText ) const +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::SetTitlePaneTextL( const TDesC& aTitleText ) const + { + DEBUGSTRING(("CRsfwGsPluginSettingsList::SetTitlePaneTextL")); + CAknTitlePane* title = static_cast< CAknTitlePane* > + ( iEikonEnv->AppUiFactory()->StatusPane()->ControlL( + TUid::Uid( EEikStatusPaneUidTitle ) ) ); + if ( !title ) + { + User::Leave( KErrNotSupported ); + } + + title->SetTextL( aTitleText ); + } + +// ----------------------------------------------------------------------------- +// CRsfwGsPluginSettingsList::ResetItemIndex() +// ----------------------------------------------------------------------------- +// +void CRsfwGsPluginSettingsList::ResetItemIndex() + { + ListBox()->SetCurrentItemIndex(NULL); + } + +// End of File