diff -r 473321461bba -r e06095241a65 vpnui/vpnmanagementui/src/serversettingconnectionsettingitem.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/vpnui/vpnmanagementui/src/serversettingconnectionsettingitem.cpp Wed Sep 01 12:23:21 2010 +0100 @@ -0,0 +1,149 @@ +/* +* Copyright (c) 2008-2009 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: +* Nokia Corporation +* +* Description: Setting item for the connection settings. +* +*/ + +#include "serversettingconnectionsettingitem.h" + +#include +#include +#include +#include +#include + +using namespace CMManager; + +CServerSettingConnectionSettingItem::CServerSettingConnectionSettingItem(TInt aIdentifier, + TCmSettingSelection& aSelection) +:CAknSettingItem(aIdentifier), iExternalValue(aSelection) + { + } + + +CServerSettingConnectionSettingItem::~CServerSettingConnectionSettingItem() + { + delete iSettingText; + } + + +void CServerSettingConnectionSettingItem::StoreL() + { + iExternalValue = iInternalValue; + } + + +void CServerSettingConnectionSettingItem::LoadL() + { + iInternalValue = iExternalValue; + UpdateSettingTextL(); + } + + +void CServerSettingConnectionSettingItem::EditItemL( TBool /*aCalledFromMenu*/ ) + { + RCmManagerExt cmManager; + cmManager.OpenLC(); + // Get supported bearer filter types + const TInt KArrayGranularity = 10; + RArray bearers = RArray( KArrayGranularity ); + CleanupClosePushL( bearers ); + cmManager.SupportedBearersL( bearers ); + // Do not include VPN bearer + TInt index = bearers.Find( KPluginVPNBearerTypeUid ); + if ( index != KErrNotFound ) + { + bearers.Remove( index ); + } + // Show settings page + + CCmApplicationSettingsUi* settings = CCmApplicationSettingsUi::NewL(); + CleanupStack::PushL( settings ); + TBool selected = settings->RunApplicationSettingsL( iInternalValue, + EShowDestinations | + EShowConnectionMethods, + bearers ); + CleanupStack::PopAndDestroy( 2 ); // settings, bearers + + if ( selected ) + { + UpdateSettingTextL(); + UpdateListBoxTextL(); + } + + CleanupStack::PopAndDestroy(); // cmManager + + } + + +const TDesC& CServerSettingConnectionSettingItem::SettingTextL() + { + if (iSettingText == NULL) + { + return CAknSettingItem::SettingTextL(); + } + else + { + return *iSettingText; + } + } + + +void CServerSettingConnectionSettingItem::UpdateSettingTextL() + { + delete iSettingText; + iSettingText = NULL; + + if ((iInternalValue.iResult == EDestination || + iInternalValue.iResult == EConnectionMethod) && + iInternalValue.iId != 0) + { + + RCmManagerExt cmManager; + cmManager.OpenLC(); + + if ( iInternalValue.iResult == EDestination ) + { + // Destination selected + RCmDestinationExt dest; + TRAPD( err, dest = cmManager.DestinationL( iInternalValue.iId ) ); + + if( KErrNone == err ) + { + CleanupClosePushL( dest ); + iSettingText = dest.NameLC(); + CleanupStack::Pop(iSettingText); + CleanupStack::PopAndDestroy(); // dest + } + } + else if ( iInternalValue.iResult == EConnectionMethod ) + { + // Connection method selected + RCmConnectionMethodExt conn; + TRAPD( err, conn = cmManager.ConnectionMethodL( iInternalValue.iId ) ); + + if( KErrNone == err ) + { + CleanupClosePushL( conn ); + iSettingText = conn.GetStringAttributeL( ECmName ); + CleanupStack::PopAndDestroy(); // conn + } + } + + CleanupStack::PopAndDestroy(); // cmManager + } + } + +/***/