diff -r 000000000000 -r c8caa15ef882 XDMSettingsUI/src/XDMPluginSettinglist.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/XDMSettingsUI/src/XDMPluginSettinglist.cpp Tue Feb 02 01:05:17 2010 +0200 @@ -0,0 +1,316 @@ +/* +* Copyright (c) 2005-2007 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: XDM GS plugin, Setting List class implementation +* +*/ + + + + +// INCLUDE FILES +#include "XDMExternalInterface.h" + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "XDMPlugin.hrh" +#include "XDMPluginSettinglist.h" +#include "SettingsData.h" + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::NewL(CSettingsData &aData) +// ----------------------------------------------------------------------------- +// +CXDMPluginSettinglist *CXDMPluginSettinglist::NewL(CSettingsData &aData) + { + CXDMPluginSettinglist* self = CXDMPluginSettinglist::NewLC(aData); + CleanupStack::Pop(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::NewLC(CSettingsData &aData) +// ----------------------------------------------------------------------------- +// +CXDMPluginSettinglist *CXDMPluginSettinglist::NewLC(CSettingsData &aData) + { + CXDMPluginSettinglist* self = new (ELeave) CXDMPluginSettinglist(aData); + CleanupStack::PushL(self); + return self; + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::CXDMPluginSettinglist(CSettingsData &aData) +// ----------------------------------------------------------------------------- +// +CXDMPluginSettinglist::CXDMPluginSettinglist(CSettingsData &aData) : + CAknSettingItemList(), + iSettingsData(aData) + { + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::~CXDMPluginSettinglist() +// ----------------------------------------------------------------------------- +// +CXDMPluginSettinglist::~CXDMPluginSettinglist() + { + // no specific destruction code required - no owned data + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::SizeChanged() +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::SizeChanged() + { + // if size changes, make sure component takes whole available space + if (ListBox()) + { + ListBox()->SetRect(Rect()); + } + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::EditCurrentItemL() +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::EditCurrentItemL() + { + // invoke EditItemL on the current item + TInt index = ListBox()->CurrentItemIndex(); + + //Cause SIP setting is hidden + if(index >= 3) //ESipURLIndex == 3 + index++; + + // if access point need to be edit + if (index == EAccessPointIndex) + { + EditAccessPointL(); + SaveSettingL(index); + } + else + EditItemL(index,ETrue); // invoked from menu + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::EditItemL (TInt aIndex, TBool aCalledFromMenu) +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::EditItemL (TInt aIndex, TBool aCalledFromMenu) + { + if (aIndex == EAccessPointIndex) + { + EditAccessPointL(); + } + else + { + CAknSettingItemList::EditItemL(aIndex, aCalledFromMenu); + } + (*SettingItemArray())[aIndex]->StoreL(); + SaveSettingL(aIndex); + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::SaveSettingL(TInt aIndex) +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::SaveSettingL(TInt aIndex) + { + + switch (aIndex) + { + case ESettingNameIndex: + SetTitlePaneTextL(iSettingsData.iSettingNameDisp); + break; + + case EAccessPointIndex: + if (iSettingsData.iAccessPoint > -1) // if Valid AP number + { + (iSettingsData.iAccessPointDes).Num(iSettingsData.iAccessPoint); + GetAccessPointNameL(iSettingsData.iAccessPoint, + iSettingsData.iAccessPointName); + } + LoadSettingsL(); + break; + + case EServerAddressIndex: + break; + + + case ESipURLIndex: + break; + case EUserIDIndex: + break; + + case EPasswordIndex: + break; + + default: + break; + } + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::CreateSettingItemL (TInt aIdentifier) +// ----------------------------------------------------------------------------- +// +CAknSettingItem * CXDMPluginSettinglist::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 ESettingItemSettingName: + + settingItem = new (ELeave) CAknTextSettingItem ( aIdentifier, + iSettingsData.iSettingNameDisp); + break; + + case ESettingItemAccessPoint: + GetAccessPointNameL(iSettingsData.iAccessPoint, iSettingsData.iAccessPointName); + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, iSettingsData.iAccessPointName); + break; + + case ESettingItemServerAddress: + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, + iSettingsData.iServerAddress); + break; + + + + case ESettingItemSipURL: + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, + iSettingsData.iSipURL); + settingItem->SetHidden(ETrue); + break; + + + case ESettingItemUserID: + settingItem = new (ELeave) CAknTextSettingItem ( + aIdentifier, + iSettingsData.iUserID); + break; + case ESettingItemPassword: + settingItem = new (ELeave) CAknPasswordSettingItem ( + aIdentifier, + CAknPasswordSettingItem::EAlpha, + iSettingsData.iPassword); + break; + default: + break; + } + return settingItem; + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::EditAccessPoint() +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::EditAccessPointL() + { + // After dialog server for access point selection (RGenConAgentDialogServer) + // has deprecated wins emulator mode needs a different technique to show + // emulator-lan access point. + + CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP ); + CleanupStack::PushL(commsDb); + CApUtils* aPUtils = CApUtils::NewLC( *commsDb ); + + CApSettingsHandler *apUi = CApSettingsHandler::NewLC( + ETrue, + EApSettingsSelListIsPopUp, + EApSettingsSelMenuSelectNormal, + KEApIspTypeAll, + EApBearerTypeAllBearers, + KEApSortNameAscending, + EIPv4 | EIPv6 + ); + TUint32 id; + + TRAP_IGNORE(id = aPUtils->WapIdFromIapIdL(iSettingsData.iAccessPoint)); + + //err can also be in case this is new set, iSettingsData.iAccessPoint = -1 + //so ignoring the error + + if ( apUi->RunSettingsL( id, id ) == KApUiEventSelected) + { + iSettingsData.iAccessPoint = aPUtils->IapIdFromWapIdL(id); + } + CleanupStack::PopAndDestroy(3, commsDb); //commsDb, aPUtils, apUi + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::GetAccessPointNameL(TInt32 aAP, TDes& aAccessPoint) +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::GetAccessPointNameL(TInt32 aAP, TDes& aAccessPoint) + { +#if defined __WINS__ && defined _DEBUG // handled differently in wins+debug + if (aAP != KErrNotFound) // if access point is defined take a general name + StringLoader::Load ( aAccessPoint, R_STR_XDM_AP_NAME_FOR_DEBUG_ONLY); +#else + CCommsDatabase* commsDb = CCommsDatabase::NewL( EDatabaseTypeIAP ); + CleanupStack::PushL(commsDb); + CApUtils* aPUtils = CApUtils::NewLC( *commsDb ); + TInt err(KErrNone); + // to remove id bug + TRAP(err, aAP = aPUtils->WapIdFromIapIdL(aAP)); + TRAP(err, aPUtils->NameL(aAP, aAccessPoint)); + // dont do anything if name not found or if some error occur + CleanupStack::PopAndDestroy(2); // commsDb, aPUtils +#endif + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::SetTitlePaneTextL( const TDesC& aTitleText ) const +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::SetTitlePaneTextL( const TDesC& aTitleText ) const + { + CAknTitlePane* title = static_cast< CAknTitlePane* > + ( CEikonEnv::Static()->AppUiFactory()->StatusPane()->ControlL( + TUid::Uid( EEikStatusPaneUidTitle ) ) ); + if ( !title ) + { + User::Leave( KErrNotSupported ); + } + + title->SetTextL( aTitleText ); + } + +// ----------------------------------------------------------------------------- +// CXDMPluginSettinglist::ResetItemIndex() +// ----------------------------------------------------------------------------- +// +void CXDMPluginSettinglist::ResetItemIndex() + { + ListBox()->SetCurrentItemIndexAndDraw(NULL); + } + +// End of File