--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/wvuing/IMPSServiceSettingsUI/Src/CWVSettingsUIServerSelector.cpp Thu Dec 17 08:41:52 2009 +0200
@@ -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 <aknpopupsettingpage.h> // CAknPopupSettingPage
+#include <badesca.h>
+#include <CWVSettingsUING.rsg> // Application resources
+#include <cimpssapsettingsstore.h>
+#include <cimpssapsettingslist.h>
+#include <cimpssapsettings.h>
+
+// ================= 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