vpnui/vpnmanagementui/src/vpnmanagementuiserversettingscontainer.cpp
author Dremov Kirill (Nokia-D-MSW/Tampere) <kirill.dremov@nokia.com>
Wed, 13 Oct 2010 15:42:16 +0300
branchRCL_3
changeset 49 5960d2d03390
parent 41 e06095241a65
permissions -rw-r--r--
Revision: 201038 Kit: 201041

/*
* Copyright (c) 2003-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:
*
* Description: The container is responsible of showing policy server details. 
*
*/

// INCLUDE FILES
#include <akntextsettingpage.h>
#include <aknnotewrappers.h>
#include <cmmanagerext.h>
#include <cmsettingsui.h>
#include <cmapplicationsettingsui.h>
#include <cmdestinationext.h>
#include <cmpluginvpndef.h>
#include <commdb.h>
#include <vpnmanagementuirsc.rsg>
#include "vpnuiloader.h"
#include "vpnmanagementuiserversettingscontainer.h"
#include "vpnmanagementuidefs.h"
#include "serversettingconnectionsettingitem.h"
#include "vpnmanagementui.hrh"
#include "log_vpnmanagementui.h"


#ifdef __SERIES60_HELP
#include <csxhelp/vpn.hlp.hrh> // for help context of VPN Management UI
#endif //__SERIES60_HELP

using namespace CMManager;

// ================= MEMBER FUNCTIONS =======================

CServerSettingsContainer* CServerSettingsContainer::NewL(
    CVpnUiLoader& aLoader, TInt aServerIndex )
    {
    CServerSettingsContainer* self = new(ELeave) CServerSettingsContainer(
        aLoader, aServerIndex );
    CleanupStack::PushL(self);
    self->ConstructL();
    CleanupStack::Pop(self);    
    return self;
    }

// ---------------------------------------------------------
// CServerSettingsContainer::CServerSettingsContainer()
// ---------------------------------------------------------
//
CServerSettingsContainer::CServerSettingsContainer(
    CVpnUiLoader& aLoader, TInt aServerIndex )
    :iLoader(aLoader), iServerIndex(aServerIndex)
    {
    ASSERT(aServerIndex >= KErrNotFound);
	}

// ---------------------------------------------------------
// CServerSettingsContainer::~CServerSettingsContainer()
// Destructor
// ---------------------------------------------------------
//
CServerSettingsContainer::~CServerSettingsContainer()
    {
    }


// ---------------------------------------------------------------------------
// CreateSettingItemL
// ---------------------------------------------------------------------------
//
CAknSettingItem* CServerSettingsContainer::CreateSettingItemL( 
    TInt /* aSettingId */)
    {
    CAknSettingItem* settingItem(NULL);
    /*** NSSM support is discontinued.
         Code is kept in comments temporarily because similar UI functionality
         might be needed for another purpose.
    switch (aSettingId)
        {
        case EVpnUiSettingServerName:
            settingItem = new (ELeave) CAknTextSettingItem(
                aSettingId, iServerDetails.iServerNameLocal );
            break;
        case EVpnUiSettingServerAddress:
            if (iServerDetails.iServerUrl.Length() > 0)
                {                
                iServerAddressBuffer.Copy(iServerDetails.iServerUrl);
                }
            settingItem = new (ELeave) CAknTextSettingItem(
                aSettingId, iServerAddressBuffer );
            break;
        case EVpnUiSettingIap:                        
            settingItem = new (ELeave) CServerSettingConnectionSettingItem(
                aSettingId, iServerDetails.iSelection);
            break;
        default:
            // Do nothing
            break;
            }
    ***/
    return settingItem;
    }
    
    
// ---------------------------------------------------------------------------
// CServerSettingsContainer::ConstructL()
// ---------------------------------------------------------------------------
//
void CServerSettingsContainer::ConstructL()
    {
	// Server settings view sets iServerIndex to -1 when creating a new 
	// server
	/*** NSSM support is discontinued.
         Code is kept in comments temporarily because similar UI functionality
         might be needed for another purpose.
	if ( iServerIndex >= 0 )
	    {
	    iLoader.AcuApiWrapperL().GetServerDetailsL( 
	        iServerIndex, iServerDetails );
	    UpdateTitleL( iServerDetails.iServerNameLocal );    
	    }    
	***/  
    ConstructFromResourceL(R_VPN_SERVER_SETTING_LIST);	    
	}
	
	
// ---------------------------------------------------------------------------
// UpdateTitleL
// ---------------------------------------------------------------------------
//
void CServerSettingsContainer::UpdateTitleL( TDes& aText )
    {
    iLoader.ActivateTitleL(KViewTitleParametersView,aText);
    } 


// ---------------------------------------------------------------------------
// ServerNameExistsL
// ---------------------------------------------------------------------------
//
TBool CServerSettingsContainer::ServerNameExistsL( const TDesC& /* aText */) const
    {
    /*** NSSM support is discontinued.
         Code is kept in comments temporarily because similar UI functionality
         might be needed for another purpose.
    const CArrayFix<TAcuApiServerListElem>* serverList = iLoader.AcuApiWrapperL().ServerListL();
    TInt count = serverList->Count();

    for (TInt i = 0; i < count; ++i)
        {
        //If we are editing name, we don't want to compare itself
        if(i != iServerIndex)
            {
            if (serverList->At(i).iServerNameLocal.Compare(aText)==0)
                {
                //Name is already in use
                return ETrue;
                }
            }
        } ***/
    return EFalse;
    }


void CServerSettingsContainer::HandleListBoxEventL(CEikListBox* aListBox, TListBoxEvent aEventType)
    {
    switch(aEventType)
        {
        case EEventEnterKeyPressed: 
        case EEventItemSingleClicked:
            ChangeSettingValueL();            
            break;
        default:
            CAknSettingItemList::HandleListBoxEventL(aListBox, aEventType);
        }    
    }


// ---------------------------------------------------------------------------
// ChangeSettingValueL
// ---------------------------------------------------------------------------
//
void CServerSettingsContainer::ChangeSettingValueL()
    {
    /*** NSSM support is discontinued.
         Code is kept in comments temporarily because similar UI functionality
         might be needed for another purpose.
    TInt currentItem( ListBox()->CurrentItemIndex() );
           
    switch(currentItem)
        {        
        case EVpnUiSettingServerName:
            {
            TBool alreadyInUse = ETrue;
            while(alreadyInUse)
                {
                EditItemL(EVpnUiSettingServerName, ETrue);   
                SettingItemArray()->At(EVpnUiSettingServerName)->StoreL(); 
                alreadyInUse = ServerNameExistsL( iServerDetails.iServerNameLocal );
                if(alreadyInUse)
                    {
                    //Show an information note that server is currently in use
                    HBufC* noteText;
                    noteText = StringLoader::LoadLC( R_FLDR_NAME_ALREADY_USED, iServerDetails.iServerNameLocal );
                    CAknInformationNote* note = new(ELeave)CAknInformationNote(ETrue);
                    note->SetTimeout(CAknNoteDialog::ELongTimeout); //3sec
                    note->ExecuteLD(noteText->Des());
                    CleanupStack::PopAndDestroy();  // noteText                                
                    }

                }
            if (iServerDetails.iServerNameLocal.Length() > 0)
                {                
                UpdateTitleL( iServerDetails.iServerNameLocal );
                }
            }
            break;            
        case EVpnUiSettingServerAddress:
            {
            if( iServerDetails.iServerUrlReadOnly )
                {
                //Show an information note that server cannot be
                //modified
                HBufC* noteText;
                noteText = StringLoader::LoadLC( 
                    R_VPN_INFO_CANNOT_MODIFY_SERVER_DEF );
                CAknInformationNote* note = 
                    new(ELeave) CAknInformationNote(ETrue);
                note->SetTimeout(CAknNoteDialog::ELongTimeout); //3sec
                note->ExecuteLD(noteText->Des());
                CleanupStack::PopAndDestroy();  // noteText
                }
            else
                {            
                EditItemL(EVpnUiSettingServerAddress, ETrue);    
                }
            }
            break;
        case EVpnUiSettingIap:
            {
            EditItemL(EVpnUiSettingIap, ETrue);    
            }
            break;
        default:            
            User::Invariant();
            break;
        } ***/
    }


// ---------------------------------------------------------------------------
// ServerDetails
// ---------------------------------------------------------------------------
//
/*** NSSM support is discontinued.
         Code is kept in comments temporarily because similar UI functionality
         might be needed for another purpose.
const TAcuApiServerDetails& CServerSettingsContainer::ServerDetailsL()
    {
    StoreSettingsL();
    if (iServerAddressBuffer.Length() > 0)
        {
        iServerDetails.iServerUrl.Copy(iServerAddressBuffer);
        }

    //If server name is left empty, but we have an address,
    //set address as a server name.        
    if (iServerDetails.iServerNameLocal.Length() == 0 &&
        iServerDetails.iServerUrl.Length() > 0)
        {         

        //If the address is already in use as server name, generate
        //a new unique name.                
        TUint16 i = 1;
        do
            {
            static const TInt KSuffixLength = 10;
            _LIT(KSuffixFormat, "(%d)");
                        
            TBuf<KSuffixLength> suffix;                            
            suffix.Zero();
            if (i > 1)
                {
                suffix.Format(KSuffixFormat, i);                
                }
            i++;
            
            //First assumes that the address is too long to fit
            TInt numberOfCharactersCopiedFromAddress =
                          iServerDetails.iServerNameLocal.MaxLength() - suffix.Length();         

            //If this is not the case adjust the length                           
            if (numberOfCharactersCopiedFromAddress > iServerDetails.iServerUrl.Length())
                {
                numberOfCharactersCopiedFromAddress = iServerDetails.iServerUrl.Length();
                }
            
            TPtrC8 serverNameAddress = iServerDetails.iServerUrl.Left(numberOfCharactersCopiedFromAddress);
            iServerDetails.iServerNameLocal.Copy(serverNameAddress);             
            iServerDetails.iServerNameLocal.Append(suffix);                                                             
                           
            }while(ServerNameExistsL( iServerDetails.iServerNameLocal) );                                                          
        
        CAknSettingItem* item = SettingItemArray()->At(EVpnUiSettingServerName); 
        item->LoadL();
        item->UpdateListBoxTextL();        
        }
    return iServerDetails;
    }
***/

// ---------------------------------------------------------------------------
// GetIapNameL
// ---------------------------------------------------------------------------
//
HBufC* CServerSettingsContainer::GetDestinationNameL( TUint aId )
	{
    RCmManagerExt cmManager;    
	cmManager.OpenLC();
	RCmDestinationExt dest = cmManager.DestinationL( aId );
	CleanupClosePushL( dest );
	HBufC* name = dest.NameLC();   
	CleanupStack::Pop(name);
	CleanupStack::PopAndDestroy( 2 ); // dest, cmManager
	return name;
	}


HBufC* CServerSettingsContainer::GetConnectionMethodNameL( TUint aId )
	{
	RCmManagerExt cmManager;    
	cmManager.OpenLC();
	RCmConnectionMethodExt conn = cmManager.ConnectionMethodL( aId );
	CleanupClosePushL( conn );	
	HBufC* name = conn.GetStringAttributeL( ECmName );
	CleanupStack::PopAndDestroy( 2 ); // conn, cmManager
	return name;
	}


TInt CServerSettingsContainer::ServerIndex() const
    {
    return iServerIndex;
    }


// ---------------------------------------------------------
// CServerSettingsContainer::GetHelpContext
// ---------------------------------------------------------

#ifdef __SERIES60_HELP
void CServerSettingsContainer::GetHelpContext( TCoeHelpContext& aContext ) const
    {
	aContext.iMajor = KUidVpnManagementUi;
    aContext.iContext = KSET_HLP_VPN_POLICY_SERVER_SET;
    }
#endif //__SERIES60_HELP


// End of File