remotestoragefw/gsplugin/src/rsfwgspluginsettinglist.cpp
branchRCL_3
changeset 16 1aa8c82cb4cb
--- /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 <akntitle.h>
+#include <ApSettingsHandlerUI.h>
+#include <ApUtils.h>
+#include <commdb.h>
+#include <eikspane.h>
+#include <akntextsettingpage.h>
+#include <ConnectionUiUtilities.h>
+
+#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