wvuing/IMPSServiceSettingsUI/Src/CWVSettingsUIServerSelector.cpp
changeset 0 094583676ce7
--- /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