diff -r 6ca72c0fe49a -r a941bc465d9f wvuing/IMPSServiceSettingsUI/Src/CWVSettingsUIServerSelector.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/wvuing/IMPSServiceSettingsUI/Src/CWVSettingsUIServerSelector.cpp Wed Sep 01 12:31:13 2010 +0100 @@ -0,0 +1,216 @@ +/* +* Copyright (c) 2003 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: Class for selecting servers +* +*/ + + +// INCLUDE FILES +#include "CWVSettingsUIServerSelector.h" +#include "CWVSettingsUIDialogImp.h" +#include // CAknPopupSettingPage +#include +#include // Application resources +#include +#include +#include + +// ================= MEMBER FUNCTIONS ======================= + +// --------------------------------------------------------- +// CWVSettingsUIServerSelector::ExecuteSelectionQueryLD +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CWVSettingsUIServerSelector::ExecuteSelectionQueryLD( + CIMPSSAPSettingsStore& aSAPSettingsStore, + CWVSettingsUIDialogImp& aDialog, + TBool aShowDefaultSAP /*= ETrue*/, + TBool aForceSelection /*= EFalse*/ ) + { + CWVSettingsUIServerSelector* self = new ( ELeave ) CWVSettingsUIServerSelector( + aSAPSettingsStore, + aShowDefaultSAP, + aForceSelection, + aDialog ); + CleanupStack::PushL( self ); + self->DoSelectionL(); + CleanupStack::PopAndDestroy( self ); + } + +// --------------------------------------------------------- +// CWVSettingsUIServerSelector::DoSelectionL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +void CWVSettingsUIServerSelector::DoSelectionL() + { + iSAPSettingsList = CIMPSSAPSettingsList::NewL(); + + iSAPSettingsStore.PopulateSAPSettingsListL( *iSAPSettingsList, EIMPSIMAccessGroup ); + + TInt popupResource( R_WVSETTINGSVIEW_SERVERLIST_SETTING_PAGE ); + if ( iForceSelection ) + { + popupResource = R_WVSETTINGSVIEW_SERVERLIST_SETTING_PAGE_FORCED; + } + + // Read server data to inner array + TInt currentServerIndex( 0 ); + iServerList = GenerateServerListL( currentServerIndex ); + + if ( !iServerList ) + { + return; + } + + // Initialize query array + CAknQueryValueTextArray* textArray = CAknQueryValueTextArray::NewLC(); + textArray->SetArray( *iServerList ); + + // Sets the same array and sets initial index. + CAknQueryValueText* queryValue = CAknQueryValueText::NewLC(); + queryValue->SetArrayL( textArray ); + queryValue->SetCurrentValueIndex( currentServerIndex ); + + // Creates Popup Setting Page object. + CAknPopupSettingPage* popup = + new( ELeave ) CAknPopupSettingPage( popupResource, *queryValue ); + + + // Displays Popup Setting Page screen. + TBool res = ETrue; + res = popup->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ); + + if ( res || iForceSelection ) + { + iSAPSettingsStore.SetToDefaultL( + TranslateSelectedIndexL( queryValue->CurrentValueIndex() ), EIMPSIMAccessGroup ); + } + + CleanupStack::PopAndDestroy( queryValue ); + CleanupStack::PopAndDestroy( textArray ); + } + +// --------------------------------------------------------- +// CWVSettingsUIServerSelector::GenerateServerListL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +CDesCArrayFlat* CWVSettingsUIServerSelector::GenerateServerListL( TInt& aCurrentServerIndex ) + { + + TInt srvCount( iSAPSettingsStore.SAPCountL( EIMPSIMAccessGroup ) ); + + // If there is no servers at all or there is only one server and default + // is not shown, then the list is empty + if ( ( srvCount == 0 ) || ( srvCount == 1 && !iShowDefaultSAP ) ) + { + return NULL; + } + + TUint32 defaultUID( KIMPSSettingsNullUid ); + iSAPSettingsStore.GetDefaultL( defaultUID, EIMPSIMAccessGroup ); + + // If we have only 2 servers, one of them is already default and + // default is notshown, AND we have forced selection, then we can + // automatically choose new default server. + if ( srvCount == 2 && !iShowDefaultSAP && iForceSelection ) + { + if ( iSAPSettingsList->At( 0 )->Uid() == defaultUID ) + { + iSAPSettingsStore.SetToDefaultL( iSAPSettingsList->At( 1 )->Uid(), EIMPSIMAccessGroup ); + } + else + { + iSAPSettingsStore.SetToDefaultL( iSAPSettingsList->At( 0 )->Uid(), EIMPSIMAccessGroup ); + } + return NULL; + } + + TBool isCurrentSAPDefault( EFalse ); + + //get existing server names + CDesCArrayFlat* serverNames = new( ELeave ) CDesCArrayFlat( srvCount ); + CleanupStack::PushL( serverNames ); + + for ( TInt ii( 0 ); ii < srvCount; ii++ ) + { + isCurrentSAPDefault = iSAPSettingsList->At( ii )->Uid() == defaultUID; + + if ( !iShowDefaultSAP ) + { + if ( !isCurrentSAPDefault ) + { + serverNames->AppendL( iSAPSettingsList->MdcaPoint( ii ) ); + } + } + else + { + serverNames->AppendL( iSAPSettingsList->MdcaPoint( ii ) ); + + if ( isCurrentSAPDefault ) + { + aCurrentServerIndex = ii; + } + } + + } + + CleanupStack::Pop( serverNames ); + return serverNames; + } + +// --------------------------------------------------------- +// CWVSettingsUIServerSelector::TranslateSelectedIndexL +// +// (other items were commented in a header). +// --------------------------------------------------------- +// +TUint32 CWVSettingsUIServerSelector::TranslateSelectedIndexL( TInt aIndex ) + { + TInt listIndex( 0 ); + if ( iSAPSettingsList->FindNameL( iServerList->MdcaPoint( aIndex ), listIndex ) == 0 ) + { + return iSAPSettingsList->UidForIndex( listIndex ); + } + + return KIMPSSettingsNullUid; + } + +// C++ default constructor can NOT contain any code, that +// might leave. +// +CWVSettingsUIServerSelector::CWVSettingsUIServerSelector( CIMPSSAPSettingsStore& aSAPSettingsStore, + TBool aShowDefaultSAP, + TBool aForceSelection, + CWVSettingsUIDialogImp& aDialog ) + : iSAPSettingsStore( aSAPSettingsStore ), + iForceSelection( aForceSelection ), + iShowDefaultSAP( aShowDefaultSAP ), + iDialog( aDialog ) + { + } + +// Destructor +CWVSettingsUIServerSelector::~CWVSettingsUIServerSelector() + { + delete iServerList; + delete iSAPSettingsList; + } + +// End of File