--- a/cmmanager/cmmgr/Framework/Src/cmdlg.cpp Fri Apr 16 15:21:37 2010 +0300
+++ /dev/null Thu Jan 01 00:00:00 1970 +0000
@@ -1,1974 +0,0 @@
-/*
-* Copyright (c) 2006-2008 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: Implementation of CCmDlg
-*
-*/
-
-#include <avkon.hrh>
-#include <eikdef.h>
-#include <eikenv.h>
-#include <eikedwin.h>
-#include <cmmanager.rsg>
-#include <data_caging_path_literals.hrh>
-#include <aknnavide.h>
-#include <akntitle.h>
-#include <eikmenup.h>
-#include <StringLoader.h>
-#include <AknIconArray.h>
-#include <aknnavilabel.h>
-#include <cmmanager.mbg>
-#include <cmpluginembdestinationdef.h>
-#include <featmgr.h>
-
-#include <hlplch.h>
-#include <csxhelp/cp.hlp.hrh>
-
-#include "cmdlg.h"
-#include "cmmanager.hrh"
-#include "cmlistitem.h"
-#include "cmlistitemlist.h"
-#include <cmpluginbaseeng.h>
-#include <cmpluginbase.h>
-#include "cmdestinationimpl.h"
-#include <cmcommonui.h>
-#include <cmcommonconstants.h>
-#include <cmpbasesettingsdlg.h>
-#include "cmwizard.h"
-#include "selectdestinationdlg.h"
-#include <cmmanagerdef.h>
-#include <mcmdexec.h>
-#include "ccmdexec.h"
-#include "destdlg.h"
-#include "cmlogger.h"
-#include "cmconnsettingsuiimpl.h"
-
-using namespace CMManager;
-using namespace CommsDat;
-
-// ---------------------------------------------------------------------------
-// CCmDlg::ConstructAndRunLD
-// Constructs the dialog and runs it.
-// ---------------------------------------------------------------------------
-//
-TInt CCmDlg::ConstructAndRunLD( TUint32 aHighlight,
- TUint32& aSelected )
- {
- CleanupStack::PushL( this );
-
- iHighlight = aHighlight;
- iSelected = &aSelected;
-
- ConstructL( R_CM_MENUBAR );
- PrepareLC( R_CM_DIALOG );
- CleanupStack::Pop( this );
-
- iModel = new( ELeave )CCmListboxModel();
-
- iCmDestinationImpl = iCmManager->DestinationL( iDestUid );
-
- iInfoPopupNoteController = CAknInfoPopupNoteController::NewL();
-
- // Trace changes in CommsDat
- iCmManager->WatcherRegisterL( this );
-
- return RunLD();
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::NewL()
-// Two-phase dconstructor, second phase is ConstructAndRunLD
-// ---------------------------------------------------------------------------
-//
-CCmDlg* CCmDlg::NewL(CCmManagerImpl* aCmManager, TUint32 aDestUid,
- CDestDlg* aDestDlg)
- {
- CCmDlg* self = new (ELeave) CCmDlg( aCmManager, aDestUid, aDestDlg );
- return self;
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::CCmDlg()
-// ---------------------------------------------------------------------------
-//
-CCmDlg::CCmDlg( CCmManagerImpl* aCmManager, TUint32 aDestUid,
- CDestDlg* aDestDlg )
- : iModelPassed( EFalse )
- , iCmManager( aCmManager )
- , iDestUid ( aDestUid )
- , iPrioritising ( EFalse )
- , iExitReason( KDialogUserBack )
- , iEscapeArrived( EFalse )
- , iExitduringProcessing( EFalse )
- , iBackduringProcessing( EFalse )
- , iDestDlg( aDestDlg )
- {
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::~CCmDlg
-// Destructor
-// ---------------------------------------------------------------------------
-//
-CCmDlg::~CCmDlg()
- {
- // iModel is deleted by the ListBox because LB owns the model...
- // of course only after we passed ownership...
- if ( !iModelPassed )
- {
- delete iModel;
- }
-
- delete iNaviDecorator;
-
- if ( iTitlePane )
- {
- // set old text back, if we have it...
- if ( iOldTitleText )
- {
- TRAP_IGNORE( iTitlePane->SetTextL( *iOldTitleText ) );
- delete iOldTitleText; iOldTitleText = NULL;
- }
- }
-
- delete iOldTitleText;
-
- if(iCmDestinationImpl)
- {
- delete iCmDestinationImpl;
- iCmDestinationImpl = NULL;
- }
-
- if ( iInfoPopupNoteController )
- {
- delete iInfoPopupNoteController;
- }
-
- if( iCmWizard )
- {
- delete iCmWizard;
- }
- iItemIndex.Close();
-
- delete iCmdExec;
- iCmdExec = NULL;
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::PreLayoutDynInitL();
-// called by framework before dialog is shown
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::PreLayoutDynInitL()
- {
- iListbox = STATIC_CAST( CCmListbox*, Control( KCmListboxId ) );
- iListbox->CreateScrollBarFrameL( ETrue );
- iListbox->ScrollBarFrame()->SetScrollBarVisibilityL
- ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
- iListbox->SetListBoxObserver( this );
-
- iListbox->Model()->SetItemTextArray( iModel );
- iModelPassed = ETrue;
- InitTextsL();
- HandleListboxDataChangeL();
- iListbox->HandleItemAdditionL();
-
- if ( iHighlight )
- {
- iListbox->ScrollToMakeItemVisible( iHighlight );
- iListbox->SetCurrentItemIndexAndDraw( iHighlight );
- }
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::DynInitMenuPaneL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::DynInitMenuPaneL( TInt aResourceId,
- CEikMenuPane* aMenuPane )
- {
- CAknDialog::DynInitMenuPaneL( aResourceId, aMenuPane );
- if ( aResourceId == R_CM_MENU )
- {
- if (aResourceId == R_CM_MENU && !iCmManager->IsHelpOn())
- {
- aMenuPane->DeleteMenuItem( EAknCmdHelp );
- }
- // Menu items
- TBool hideEdit ( EFalse );
- TBool hideAdd ( EFalse );
- TBool hideRename ( EFalse );
- TBool hideDelete ( EFalse );
- TBool hideCopy ( EFalse );
- TBool hideMove ( EFalse );
- TBool hidePrioritise( EFalse );
-
- // Edit, Rename, Delete and Organise menu items are hidden if:
- // 1. CM List is empty
- // 2. Embedded Destinations
- if ( !( iListbox->Model()->ItemTextArray()->MdcaCount() ) )
- {
- hidePrioritise = ETrue;
- hideEdit = ETrue;
- hideRename = ETrue;
- hideDelete = ETrue;
- hideCopy = ETrue;
- hideMove = ETrue;
- }
- // Embedded destinations can be deleted but not edited
- else if ( ( CurrentCML()->GetBoolAttributeL(ECmDestination) ) )
- {
- hideRename = ETrue;
- }
- // Only one CM in the list OR highlighted CM is a virtual CM
- else if ( ( iListbox->Model()->ItemTextArray()->MdcaCount() == 1 ) )
- {
- hidePrioritise = ETrue;
- }
- // virtual CMs pointing to destinations
- else if ( CurrentCML()->GetBoolAttributeL( ECmVirtual ) )
- {
- if ( CurrentCML()->GetIntAttributeL( ECmNextLayerSNAPId ) )
- {
- hidePrioritise = ETrue;
- }
- }
-
- // Show or hide menu items
- if ( aResourceId == R_CM_MENU )
- {
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmEdit, hideEdit );
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmAdd, hideAdd );
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmRename, hideRename );
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmDelete, hideDelete );
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmPrioritise, hidePrioritise );
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmMoveToOtherDestination, hideMove );
- aMenuPane->SetItemDimmed( ECmManagerUiCmdCmCopyToOtherDestination, hideCopy );
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::InitTextsL
-// called before the dialog is shown
-// to initialize localized textual data
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::InitTextsL()
- {
- // set pane text if neccessary...
- // pane text needed if not pop-up...
- HBufC* primary =
- iEikonEnv->AllocReadResourceLC( R_CMMANAGERUI_EMPTY_METHOD_VIEW_PRIMARY );
- HBufC* secondary =
- iEikonEnv->AllocReadResourceLC( R_CMMANAGERUI_EMPTY_METHOD_VIEW_SECONDARY );
- CDesCArrayFlat* items = new (ELeave) CDesCArrayFlat(2);
- CleanupStack::PushL(items);
- items->AppendL(primary->Des());
- items->AppendL(secondary->Des());
- HBufC* emptyText =
- StringLoader::LoadLC( R_TWO_STRING_FOR_EMPTY_VIEW , *items);
- iListbox->View()->SetListEmptyTextL( *emptyText );
- CleanupStack::PopAndDestroy( emptyText );
- CleanupStack::PopAndDestroy( items );
- CleanupStack::PopAndDestroy( secondary );
- CleanupStack::PopAndDestroy( primary );
-
- iStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
- iTitlePane = ( CAknTitlePane* )iStatusPane->ControlL(
- TUid::Uid( EEikStatusPaneUidTitle ) );
-
- iOldTitleText = iTitlePane->Text()->AllocL();
- HBufC* name = iCmDestinationImpl->NameLC();
- iTitlePane->SetTextL( *name );
- CleanupStack::PopAndDestroy( name );
-
- iNaviPane = ( CAknNavigationControlContainer* )
- iStatusPane->ControlL(
- TUid::Uid( EEikStatusPaneUidNavi ) );
- iNaviDecorator = iNaviPane->CreateNavigationLabelL( KNullDesC );
- iNaviPane->PushL( *iNaviDecorator );
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::SetNoOfCMsL
-// ---------------------------------------------------------------------------
-//
-
-void CCmDlg::SetNoOfCMsL(TInt aCount)
- {
- if ( iNaviDecorator )
- {
- if ( iNaviDecorator->ControlType() ==
- CAknNavigationDecorator::ENaviLabel)
- {
- CAknNaviLabel* naviLabel =
- (CAknNaviLabel*)iNaviDecorator->DecoratedControl();
- if (aCount)
- {
- HBufC* title = NULL;
-
- if (aCount == 1)
- {
- title = StringLoader::LoadLC(
- R_CMMANAGERUI_NAVI_ONE_CONN_METHOD );
- }
- else
- {
- title = StringLoader::LoadLC(
- R_CMMANAGERUI_NAVI_MANY_CONN_METHODS,
- aCount );
- }
-
- naviLabel->SetTextL(*title);
- CleanupStack::PopAndDestroy( title );
- }
- else
- {
- naviLabel->SetTextL(KNullDesC);
- }
-
- iNaviPane->PushL( *iNaviDecorator );
- }
- }
-
- }
-
-//----------------------------------------------------------
-// CCmDlg::CreateCustomControlL
-//----------------------------------------------------------
-//
-SEikControlInfo CCmDlg::CreateCustomControlL( TInt aControlType )
- {
- SEikControlInfo controlInfo;
- controlInfo.iTrailerTextId = 0;
- controlInfo.iFlags = 0;
- if ( aControlType == KCmListboxType )
- {
- controlInfo.iControl = new ( ELeave ) CCmListbox;
- }
- else
- {
- controlInfo.iControl = NULL;
- }
- return controlInfo;
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::OkToExitL
-// Good to know : EAknSoftkeyCancel is never called, because
-// EEikDialogFlagNotifyEsc flag is not set in the resource.
-// ---------------------------------------------------------------------------
-//
-TBool CCmDlg::OkToExitL( TInt aButtonId )
- {
- LOGGER_ENTERFN( "CCmDlg::OkToExitL" );
-
- // Translate the button presses into commands for the appui & current
- // view to handle
- // Dialog should not exit
- TBool retVal( EFalse );
-
- switch ( aButtonId )
- {
- case EAknSoftkeyOk:
- case ECmManagerUiCmdCmEdit:
- {
- if ( !iProcessing )
- {
- if ( CMCount() )
- {
- iProcessing = ETrue;
- ProcessCommandL( aButtonId );
- iProcessing = EFalse;
- }
- else
- {
- iProcessing = ETrue;
- AddConnectionMethodL();
- iProcessing = EFalse;
- }
- }
- break;
- }
- case EAknSoftkeyClear:
- {
- ProcessCommandL( aButtonId );
- break;
- }
- case ECmManagerUiCmdCmPrioOk:
- {
- if ( iPrioritising )
- {
- FinishPriorizingL( ETrue );
- }
-
- break;
- }
- case ECmManagerUiCmdCmPrioCancel:
- {
- if ( !MenuShowing() )
- {
- if ( iPrioritising )
- {
- FinishPriorizingL( EFalse );
- }
- }
- break;
- }
- case ECmManagerUiCmdCmUserExit:
- {
- iCmManager->WatcherUnRegister();
-
- iExitReason = KDialogUserExit;
- break;
- }
- case EAknSoftkeyBack:
- {
- iCmManager->WatcherUnRegister();
-
- if ( !iProcessing )
- {
- *iSelected = 0;
- TryExitL( iExitReason );
- }
- else
- {
- iBackduringProcessing = ETrue;
- }
- break;
- }
- default:
- {
- if ( !iProcessing )
- {
- if ( aButtonId == EAknSoftkeyOptions )
- {
- DisplayMenuL();
- }
- else
- {
- retVal = ETrue;
- }
- }
- if ( iProcessing )
- {
- iExitduringProcessing = ETrue;
- if( aButtonId == KDialogUserExit )
- {
- retVal = ETrue;
- }
- }
- break;
- }
- }
- return retVal;
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::HandleListBoxEventL
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::HandleListBoxEventL( CEikListBox* /*aListBox*/,
- TListBoxEvent aEventType )
- {
- LOGGER_ENTERFN( "CCmDlg::HandleListBoxEventL" );
-
- switch ( aEventType )
- {
- case EEventEnterKeyPressed:
- {
- if ( iPrioritising )
- {
- FinishPriorizingL( ETrue );
- }
- else
- {
- if ( !iProcessing )
- {
- delete iCmdExec;
- iCmdExec = NULL;
- iCmdExec = new (ELeave) CCmdExec(*this);
- iCmdExec->Execute();
- }
- }
- break;
- }
- case EEventItemSingleClicked:
- {
- if ( !iProcessing )
- {
- delete iCmdExec;
- iCmdExec = NULL;
- iCmdExec = new (ELeave) CCmdExec(*this);
- iCmdExec->Execute();
- }
- break;
- }
- case EEventEditingStarted:
- {
- break;
- }
- case EEventEditingStopped:
- {
- break;
- }
- default:
- {
- break;
- };
- };
- }
-
-
-// ---------------------------------------------------------------------------
-// CCmDlg::ProcessCommandL
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::ProcessCommandL( TInt aCommandId )
- {
- LOGGER_ENTERFN( "CCmDlg::ProcessCommandL" );
-
- if ( MenuShowing() )
- {
- HideMenu();
- }
-
- switch ( aCommandId )
- {
- // Connection Method Modification Commands
- case ECmManagerUiCmdCmAdd:
- {
- if ( !iProcessing )
- {
- iProcessing = ETrue;
- TRAPD( err, AddConnectionMethodL() );
- // Memory full
- if (err == KLeaveWithoutAlert || err == KErrNoMemory)
- {
- iProcessing = EFalse;
- return;
- }
- iProcessing = EFalse;
-
- if ( iBackduringProcessing )
- {
- iBackduringProcessing = EFalse;
- TryExitL( KDialogUserBack );
- }
- }
- break;
- }
-
- case ECmManagerUiCmdCmRename:
- {
- RenameConnectionMethodL();
- break;
- }
-
- case EAknSoftkeyClear:
- case ECmManagerUiCmdCmDelete:
- {
- if ( iPrioritising )
- {
- // Delete cannot be done if priorising has started.
- break;
- }
- DeleteCurrentCmL();
- break;
- }
-
- case ECmManagerUiCmdCmPrioritise:
- {
- PrioritiseConnectionMethodL();
- break;
- }
-
- case ECmManagerUiCmdCmCopyToOtherDestination:
- {
- CopyConnectionMethodL();
- break;
- }
-
- case ECmManagerUiCmdCmMoveToOtherDestination:
- {
- MoveConnectionMethodL();
- break;
- }
-
- case EAknSoftkeyOk:
- case ECmManagerUiCmdCmEdit:
- {
- EditConnectionMethodL();
- break;
- }
-
- // Button Selection commands
- case EAknSoftkeyOptions:
- {
- DisplayMenuL();
- break;
- }
-
- case ECmManagerUiCmdCmUserExit:
- {
- iExitReason = KDialogUserExit;
- }
-
- case EAknSoftkeyBack:
- {
- if (!iProcessing)
- {
- *iSelected = 0;
- TryExitL( iExitReason );
- }
- break;
- }
- case EAknCmdHelp:
- {
- HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
- iEikonEnv->EikAppUi()->AppHelpContextL() );
- }
- break;
-
- default:
- {
- break;
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::DeleteCurrentCmL
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::DeleteCurrentCmL( )
- {
- LOGGER_ENTERFN( "CCmDlg::DeleteCurrentCmL" );
-
- TCmDefConnValue oldConn;
- if (iCmManager->IsDefConnSupported())
- {
- iCmManager->ReadDefConnL( oldConn );
- }
- CCmPluginBase* cm = CurrentCML();
- if ( !cm )
- {
- return;
- }
-
- if ( cm->GetBoolAttributeL( ECmProtected ) )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
-
- return;
- }
-
- if ( cm->GetBoolAttributeL( ECmIsLinked ) )//same check as KErrLocked below
- {
- TCmCommonUi::ShowNoteL(
- R_QTN_NETW_CONSET_INFO_CANNOT_DELETE_VIRTUAL_REF,
- TCmCommonUi::ECmErrorNote );
-
- return;
- }
-
- if ( cm->GetBoolAttributeL( ECmConnected ) )//same check as KErrInUse below
- {
- TCmCommonUi::ShowNoteL( R_CMMANAGERUI_INFO_CM_IN_USE_CANNOT_DELETE,
- TCmCommonUi::ECmErrorNote );
-
- return;
- }
-
- // EKOA-74KC3L: check if it is the last CM in a destination being referenced
- // by a VPN
- if ( iCmDestinationImpl &&
- iCmDestinationImpl->ConnectionMethodCount() == 1 )
- {
- // it is definitely the last, but is it referenced?
-
- // for each IAP in CM manager
- // 1. check if it is virtual
- // if not => goto 1.
- // if yes:
- // 2. check if it links to the destination of this CM
- // if yes => carryOn = EFalse, ERROR
- // if not: carryOn = ETrue
-
- CommsDat::CMDBRecordSet<CommsDat::CCDIAPRecord>* iaps =
- iCmManager->AllIapsL();
-
- CleanupStack::PushL( iaps );
-
- TBool carryOn = ETrue;
- TUint32 destId = iCmDestinationImpl->Id();
-
- // for each IAP in CM manager
- for ( TInt i = 0; carryOn && i < iaps->iRecords.Count(); ++i )
- {
- CommsDat::CCDIAPRecord* rec = (*iaps)[i];
- TUint32 bearerType = 0;
-
- TRAP_IGNORE( bearerType =
- iCmManager->BearerTypeFromIapRecordL( rec ) );
- if ( !bearerType )
- {
- continue;
- }
-
- // check if it is virtual
- if ( iCmManager->GetBearerInfoBoolL( bearerType, ECmVirtual ) )
- {
- // check if it links to the current destination
- CCmPluginBase* plugin = NULL;
- TRAP_IGNORE( plugin = iCmManager->GetConnectionMethodL(
- rec->RecordId() ) );
-
- if ( !plugin )
- {
- continue;
- }
-
- if ( plugin->IsLinkedToSnap( destId ) )
- {
- // the CM links to this destination, deletion not allowed
- carryOn = EFalse;
- }
-
- delete plugin;
- }
-
- }
-
- CleanupStack::PopAndDestroy( iaps );
-
- if ( !carryOn )
- {
- TCmCommonUi::ShowNoteL( R_QTN_NETW_CONSET_INFO_CANNOT_DELETE_VIRTUAL_REF,
- TCmCommonUi::ECmErrorNote );
- return;
- }
-
- }
-
-
- // If it's an embedded destination, show a warning
- TBool showCmDeleteQuery( ETrue );
- if ( cm->GetBoolAttributeL( ECmDestination ) )
- {
- if ( TCmCommonUi::ShowConfirmationQueryL(
- R_CMMANAGERUI_QUEST_EMBEDDED_DEST_DELETE ) )
- {
- // user wants to delete, set flag to avoid 2nd query message
- showCmDeleteQuery = EFalse;
- }
- else
- {
- return; // user cancelled delete request
- }
- }
-
- HBufC* cmName = cm->GetStringAttributeL( ECmName );
- CleanupStack::PushL( cmName );
-
- // Query for CM deletion - which will be skipped in the case of embedded
- // destintations
- // Protected CM's cannot be deleted either
- if ( !showCmDeleteQuery || iAlreadyConfirmedDelete ||
- TCmCommonUi::ShowConfirmationQueryL(
- R_CMMANAGERUI_QUEST_CM_DELETE,
- *cmName ) )
- {
- TInt err = KErrNone;
- if ( iCmDestinationImpl )
- {
- TRAP( err, iCmDestinationImpl->DeleteConnectionMethodL( *cm ) );
- }
- else
- {
- TRAP( err, (void)cm->DeleteL( ETrue ) );
- }
-
- switch ( err )
- {
- case KErrInUse: //shouldn't get here, already checked above
- {
- TCmCommonUi::ShowNoteL
- ( R_CMMANAGERUI_INFO_CM_IN_USE_CANNOT_DELETE,
- TCmCommonUi::ECmErrorNote );
- }
- break;
-
- case KErrLocked://shouldn't get here, already checked above
- {
- TCmCommonUi::ShowNoteL
- ( R_QTN_NETW_CONSET_INFO_CANNOT_DELETE_VIRTUAL_REF,
- TCmCommonUi::ECmErrorNote );
- }
- break;
-
- case KErrNone:
- {
- if ( iCmDestinationImpl )
- {
- iCmDestinationImpl->UpdateL();
- }
- if (iCmManager->IsDefConnSupported())
- {
- iDestDlg->ShowDefaultConnectionNoteL( oldConn );
- }
- HandleListboxDataChangeL();
- }
- break;
-
- default:
- {
- }
- break;
- }
- }
-
- CleanupStack::PopAndDestroy( cmName );
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::RenameConnectionMethodL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::RenameConnectionMethodL()
- {
- LOGGER_ENTERFN( "CCmDlg::RenameConnectionMethodL" );
-
- CCmPluginBase* cm = CurrentCML();
- if ( !cm )
- {
- return;
- }
-
- if ( cm->GetBoolAttributeL( ECmProtected ) )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- return;
- }
-
- if ( CurrentCmInUseL() )
- {
- return;
- }
-
- TBuf<KConnMethodNameMaxLength> buf;
-
- HBufC* cmName = cm->GetStringAttributeL(ECmName);
- CleanupStack::PushL(cmName);
- buf.Copy(*cmName);
-
- // Saves the recent naming method and set it to "Not accept"
- TUint32 savedNM = cm->GetIntAttributeL( ECmNamingMethod );
- cm->SetIntAttributeL( ECmNamingMethod, ENamingNotAccept );
-
- // Asks the new name
- TBool go = ETrue;
- TInt ret = TCmCommonUi::ShowConfirmationQueryWithInputL(
- R_CMMANAGERUI_PRMPT_CM_MAME,
- buf );
-
- // While the name is not unique or cancel pressed
- while( ret && go )
- {
- // Tries to save the nem name. If it is not unique
- // then ret == KErrArgument
- TRAPD( err, cm->SetStringAttributeL( ECmName, buf ) );
-
- if( KErrArgument == err )
- {
- // Opens a info note
- HBufC* noteLine = StringLoader::LoadLC(
- R_CMMANAGERUI_INFO_CM_ALREADY_IN_USE, buf );
-
- TCmCommonUi::ShowNoteL( *noteLine, TCmCommonUi::ECmInfoNote );
-
- CleanupStack::PopAndDestroy( noteLine );
-
- // Asks the new name again
- ret = TCmCommonUi::ShowConfirmationQueryWithInputL(
- R_CMMANAGERUI_PRMPT_CM_MAME,
- buf );
- }
- else
- {
- // New name is unique loop can stop
- go = EFalse;
- }
- }
-
- // Sets back the original naming method
- cm->SetIntAttributeL( ECmNamingMethod, savedNM );
-
- // If not cancel pressed the new name is set
- if( ret )
- {
- cm->UpdateL();
-
- HandleListboxDataChangeL();
- }
-
- CleanupStack::PopAndDestroy( cmName );
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::PrioritiseConnectionMethodL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::PrioritiseConnectionMethodL()
- {
- LOGGER_ENTERFN( "CCmDlg::PrioritiseConnectionMethodL" );
-
- ButtonGroupContainer().SetCommandSetL( R_SOFTKEYS_PRIO_OK_CANCEL__OK );
- iListbox->View()->SelectItemL( iListbox->CurrentItemIndex() );
- iListbox->View()->DrawItem( iListbox->CurrentItemIndex() );
- ButtonGroupContainer().DrawNow();
- iPrioritising = ETrue;
- iCmToPrioritise = iListbox->CurrentItemIndex();
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::AddConnectionMethodL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::AddConnectionMethodL()
- {
- LOGGER_ENTERFN( "CCmDlg::AddConnectionMethodL" );
-
- // Check first if parent destination is protected
- if ( iCmDestinationImpl &&
- iCmDestinationImpl->ProtectionLevel() == CMManager::EProtLevel1 )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- return;
- }
-
- // Opens a Connection method creation wizard
- iCmWizard = new (ELeave) CCmWizard( *iCmManager );
-
- TInt itemstemp = iListbox->Model()->NumberOfItems();
-
- TInt ret( KErrNone );
- TRAPD( err, ret = iCmWizard->CreateConnectionMethodL( iCmDestinationImpl ) );
- if ( err )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- ret = KErrCancel;
- }
- delete iCmWizard;
- iCmWizard = NULL;
-
-
- // If application wanted to be closed before then RunAppShutter()
- // should be called here
- if( iEscapeArrived )
- {
- ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->RunAppShutter();
- }
-
- if( ret != KErrCancel )
- {
- iHighlight = ret;
-
-
- // Update the middle soft key if this is the first cm added
- if ( CMCount() == 1 )
- {
- HBufC* text = StringLoader::LoadLC( R_QTN_MSK_EDIT );
- ButtonGroupContainer().SetCommandL( ECmManagerUiCmdCmEdit,
- *text );
- CleanupStack::PopAndDestroy( text );
- }
-
- //HandleListboxDataChangeL();
- TRAP( err, HandleListboxDataChangeL() );
- if ( err )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- return;
- }
- iListbox->HandleItemAdditionL();
-
- if (itemstemp < iListbox->Model()->NumberOfItems())
- {
- //first item cannot be deleted
- iListbox->ScrollToMakeItemVisible(
- iListbox->Model()->NumberOfItems() -1 );
- iListbox->SetCurrentItemIndexAndDraw( iHighlight );
- }
- }
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::CopyConnectionMethodL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::CopyConnectionMethodL()
- {
- LOGGER_ENTERFN( "CCmDlg::CopyConnectionMethodL" );
-
- CCmPluginBase* cm = CurrentCML();
- if ( !cm )
- {
- return;
- }
-
- if ( cm->GetBoolAttributeL( ECmProtected ) ||
- ( iCmDestinationImpl &&
- iCmDestinationImpl->ProtectionLevel() == CMManager::EProtLevel1 ) )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- return;
- }
-
- TUint32 destId( 0 );
-
- // build an array of possible parent destinations
- TInt destCount=0;
- TRAPD( retVal, destCount = iCmManager->DestinationCountL() );
- if( retVal != KErrNone || destCount < 1 )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_NO_DESTINATION,
- TCmCommonUi::ECmErrorNote );
- return;
- }
-
- RArray<TUint32> destArray( iCmManager->DestinationCountL() );
- CleanupClosePushL( destArray );
-
- iCmManager->AllDestinationsL( destArray );
-
- // drop current destination (don't ask why)
- if ( iCmDestinationImpl )
- {
- destId = iCmDestinationImpl->Id();
-
- TInt index = destArray.Find( destId );
- if ( index != KErrNotFound )
- {
- destArray.Remove( index );
- }
- }
-
-
- // now filter the destinations
- CurrentCML()->FilterPossibleParentsL( destArray );
-
- // check if there are any remaining destinations
- if ( !destArray.Count() )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_NO_VPN_STACKING,
- TCmCommonUi::ECmErrorNote );
- CleanupStack::PopAndDestroy( &destArray );
- return;
- }
-
- // ok, there is at least 1, pop up the dialog
- CSelectDestinationDlg* dlg = CSelectDestinationDlg::NewL( destId,
- *iCmManager,
- &destArray );
-
- if ( dlg->ExecuteLD( R_CMMANAGER_LIST_QUERY_WITH_MSGBOX ) )
- {
- CCmDestinationImpl* dest = iCmManager->DestinationL( destId );
- CleanupStack::PushL( dest );
- if ( iCmDestinationImpl )
- {
- // create a copy of the current connection method
- CCmPluginBase* cmCopy = cm->CreateCopyL();
- CleanupStack::PushL( cmCopy );
- // store it in commsdat
- cmCopy->UpdateL();
- dest->AddConnectionMethodL( *cmCopy );
-
- CleanupStack::PopAndDestroy( cmCopy );
- }
- else
- {
- iCmManager->CopyConnectionMethodL( *dest, *( cm ) );
- }
-
- // Rare but UpdateL can leave that cause crash
- TRAPD( err, dest->UpdateL() );
- if( err < 0 )
- {
- CLOG_WRITE_1( "CCmDlg::CopyConnectionMethodL UpdateL: %d", err );
- }
-
- CleanupStack::PopAndDestroy( dest );
- HandleListboxDataChangeL();
- }
- else
- {
- CleanupStack::PopAndDestroy( &destArray );
- User::Leave( KErrCancel );
- }
-
- CleanupStack::PopAndDestroy( &destArray );
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::MoveConnectionMethodL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::MoveConnectionMethodL()
- {
- LOGGER_ENTERFN( "CCmDlg::MoveConnectionMethodL" );
-
- CCmPluginBase* cm = CurrentCML();
- if ( !cm )
- {
- return;
- }
-
- if ( cm->GetBoolAttributeL( ECmProtected ) ||
- iCmDestinationImpl->ProtectionLevel() == CMManager::EProtLevel1 )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- return;
- }
-
- if ( CurrentCmInUseL() )
- {
- return;
- }
-
- // build an array of possible parent destinations
- RArray<TUint32> destArray( iCmManager->DestinationCountL() );
- CleanupClosePushL( destArray );
-
- iCmManager->AllDestinationsL( destArray );
-
- TUint32 destId( 0 );
-
- // first remove the current parent (makes no sense moving a CM to its
- // original destination)
- if ( iCmDestinationImpl )
- {
- destId = iCmDestinationImpl->Id();
-
- TInt index = destArray.Find( destId );
- if ( index != KErrNotFound )
- {
- destArray.Remove( index );
- }
- }
-
- // now filter the destinations
- CurrentCML()->FilterPossibleParentsL( destArray );
-
- // check if there are any remaining destinations
- if ( !destArray.Count() )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_NO_VPN_STACKING,
- TCmCommonUi::ECmErrorNote );
- CleanupStack::PopAndDestroy( &destArray );
- return;
- }
-
-
- CSelectDestinationDlg* dlg = CSelectDestinationDlg::NewL( destId,
- *iCmManager,
- &destArray );
-
- if ( dlg->ExecuteLD( R_CMMANAGER_LIST_QUERY_WITH_MSGBOX ) )
- {
- CCmDestinationImpl* dest = iCmManager->DestinationL( destId );
- CleanupStack::PushL( dest );
- iCmManager->MoveConnectionMethodL( *iCmDestinationImpl,
- *dest,
- *( CurrentCML() ) );
- CleanupStack::PopAndDestroy( dest );
- iCmDestinationImpl->UpdateL();
-
- HandleListboxDataChangeL();
- }
-
- CleanupStack::PopAndDestroy( &destArray );
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::EditConnectionMethodL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::EditConnectionMethodL()
- {
- LOGGER_ENTERFN( "CCmDlg::EditConnectionMethodL" );
-
- CCmPluginBase* cm = NULL;
-
- TRAPD( err, cm = CurrentCML() );
-
- if( err == KErrNotSupported )
- {
- return;
- }
- else
- {
- User::LeaveIfError( err );
- }
-
- // Must reload here in case another app changed the data (CurrentCML loads
- // only if not already loaded)
- cm->ReLoadL();
-
- if ( cm->GetBoolAttributeL( ECmProtected ) ||
- cm->GetBoolAttributeL( ECmDestination ) )
- {
- TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
- TCmCommonUi::ECmErrorNote );
- }
- else if ( cm->GetBoolAttributeL( ECmBearerHasUi ) )
- {
- // check if the cm is in use
- if ( !CurrentCmInUseL() )
- {
- TInt ret = cm->RunSettingsL();
- if ( ret == KDialogUserExit )
- {
- TryExitL( KDialogUserExit );
- }
- else
- {
- if ( ret == KDialogUserDeleteConfirmed )
- {
- iAlreadyConfirmedDelete = ETrue;
- DeleteCurrentCmL();
- iAlreadyConfirmedDelete = EFalse;
- }
- if ( ret == KDialogUserDelete )
- {
- DeleteCurrentCmL();
- }
-
- // Reorder according to priorities, if needed
- ReOrderCMsL();
-
- HandleListboxDataChangeL();
- }
- }
- }
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::OfferKeyEventL
-// ---------------------------------------------------------------------------
-//
-TKeyResponse CCmDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent,
- TEventCode aType )
- {
- LOGGER_ENTERFN( "CCmDlg::OfferKeyEventL" );
- CLOG_WRITE_1("Key iCode: %d", aKeyEvent.iCode );
-
- TKeyResponse retVal ( EKeyWasNotConsumed );
-
- if ( aKeyEvent.iCode == EKeyBackspace )
- {
- // While priorising delete item is disabled
- if( !iPrioritising )
- {
- ProcessCommandL( ECmManagerUiCmdCmDelete );
- }
- retVal = EKeyWasConsumed;
- }
- else if ( aKeyEvent.iCode == EKeyEscape )
- {
- // Handling application close needs special care
- // because of iCmWizard
- if ( iCmWizard )
- {
- // if wizard alives then escape should do after wizard has ended.
- CLOG_WRITE( "CCmDlg::OfferKeyEventL: Wizard in long process" );
- iEscapeArrived = ETrue;
- retVal = EKeyWasConsumed;
- }
- else
- {
- CLOG_WRITE( "CCmDlg::OfferKeyEventL:Escape" );
- retVal = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
- }
- }
- else
- {
- retVal = iListbox->OfferKeyEventL(aKeyEvent, aType);
- }
-
- return retVal;
- }
-// ---------------------------------------------------------------------------
-// CCmDlg::HandleInfoPopupNoteEvent
-// called before the dialog is shown to initialize listbox data
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::HandleInfoPopupNoteEvent(
- CAknInfoPopupNoteController* /*aController*/,
- TAknInfoPopupNoteEvent /*aEvent*/ )
- {
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::CurrentCML
-// Currently selected connection method in the list
-// ---------------------------------------------------------------------------
-//
-CCmPluginBase* CCmDlg::CurrentCML()
- {
- if ( iItemIndex.Count() == 0 )
- {
- return NULL;
- }
- return iCmDestinationImpl->GetConnectionMethodL(
- iItemIndex[iListbox->CurrentItemIndex()]);
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::CMByIndexL
-// a connection method in the list
-// ---------------------------------------------------------------------------
-//
-CCmPluginBase* CCmDlg::CMByIndexL( TInt aIndex )
- {
- return iCmDestinationImpl->GetConnectionMethodL( aIndex );
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::CMCount
-// number of cms in the list
-// ---------------------------------------------------------------------------
-//
-TInt CCmDlg::CMCount()
- {
- return iCmDestinationImpl->ConnectionMethodCount();
- }
-
-// ---------------------------------------------------------------------------
-// CCmDlg::HandleListboxDataChangeL
-// called before the dialog is shown to initialize listbox data
-// ---------------------------------------------------------------------------
-//
-void CCmDlg::HandleListboxDataChangeL()
- {
- TInt selected = 0;
- if ( iListbox->CurrentItemIndex() )
- {
- selected = iListbox->CurrentItemIndex();
- }
-
- LOGGER_ENTERFN( "CCmDlg::HandleListboxDataChangeL" );
- iCmManager->OpenTransactionLC();
-
- RArray<TUint32> cmIds;
- ConstructCMArrayL( cmIds );
- CleanupClosePushL( cmIds );
-
- // Remove hidden Connection Methods from the array if uncat folder
- if ( !iCmDestinationImpl )
- {
- ClearHiddenCMsFromArrayL( cmIds );
- }
-
- /// Using test values for now.
- CArrayPtr< CGulIcon >* icons = new( ELeave ) CAknIconArray( KCMGranularity );
- CleanupStack::PushL( icons );
- iModel->ResetAndDestroy();
-
- MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
- TParse mbmFile;
- User::LeaveIfError( mbmFile.Set( KManagerIconFilename,
- &KDC_APP_BITMAP_DIR,
- NULL ) );
-
-
- icons->AppendL( AknsUtils::CreateGulIconL(
- skinInstance,
- KAknsIIDQgnIndiSettProtectedAdd,
- mbmFile.FullName(),
- EMbmCmmanagerQgn_indi_sett_protected_add,
- EMbmCmmanagerQgn_indi_sett_protected_add_mask ) );
-
- //0..1 are reserved indexes!
- CFbsBitmap* bitmap = NULL;
- CFbsBitmap* mask = NULL;
-
- AknsUtils::CreateColorIconLC( skinInstance,
- KAknsIIDQgnIndiDefaultConnAdd,
- KAknsIIDQsnIconColors,
- EAknsCIQsnIconColorsCG13,
- bitmap,
- mask,
- mbmFile.FullName(),
- EMbmCmmanagerQgn_indi_default_conn_add,
- EMbmCmmanagerQgn_indi_default_conn_add_mask,
- AKN_LAF_COLOR( 215 ) );
-
- CGulIcon* icon = CGulIcon::NewL( bitmap, mask ); // Ownership transferred
- CleanupStack::Pop( 2 ); // bitmap, mask
-
- CleanupStack::PushL( icon );
- icons->AppendL( icon );
- CleanupStack::Pop( icon );
-
- RArray<TUint> bearerIdArray = RArray<TUint>( KCmArrayBigGranularity );
- CleanupClosePushL( bearerIdArray );
-
- TCmDefConnValue sel;
- TInt defUid = KErrNotFound;
- if ( iCmManager->IsDefConnSupported() )
- {
- iCmManager->ReadDefConnL(sel);
- if ( sel.iType == EDCConnectionMethod )
- {
- defUid = sel.iId;
- }
- }
- iItemIndex.Reset();
- for ( TInt i = 0; i < cmIds.Count(); i++ )
- {
- TInt iconId = KErrNotFound;
- CCDAccessPointRecord* destAPRecord = NULL;
- CCDIAPRecord* iapRecord = NULL;
- HBufC* name = NULL;
- TBool isDest( cmIds[i] > KCmDefaultDestinationAPTagId );
- TUint recId( 0 );
- TBool protect;
- TUint32 bearerType( 0 );
-
- if( isDest )
- {
- destAPRecord = static_cast<CCDAccessPointRecord *>(
- CCDRecordBase::RecordFactoryL( KCDTIdAccessPointRecord ) );
- CleanupStack::PushL( destAPRecord );
- destAPRecord->iRecordTag = cmIds[i];
- if ( !destAPRecord->FindL( iCmManager->Session() ) )
- {
- User::Leave( KErrNotFound );
- }
-
- name = TPtrC( destAPRecord->iRecordName ).AllocLC();
-
- TProtectionLevel protLev = CCmDestinationImpl::ProtectionLevelL( *iCmManager, cmIds[i] );
-
- protect = (protLev == EProtLevel1) || (protLev == EProtLevel2);
-
- HBufC* destName = StringLoader::LoadL( R_QTN_NETW_CONSET_EMBEDDED_DEST,
- *name );
-
- CleanupStack::PopAndDestroy( name );
- name = destName;
- CleanupStack::PushL( name );
-
- bearerType = KUidEmbeddedDestination;
- }
- else
- {
- recId = cmIds[i];
- iapRecord = static_cast<CCDIAPRecord *>
- (CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
- CleanupStack::PushL( iapRecord );
-
- iapRecord->SetRecordId( recId );
- iapRecord->LoadL( iCmManager->Session() );
-
- TRAPD( err, bearerType = iCmManager->BearerTypeFromIapRecordL( iapRecord ) );
-
- if( err == KErrNotSupported )
- // This is unsupported connection method -> don't add it to the list
- {
- CleanupStack::PopAndDestroy( iapRecord );
- continue;
- }
- else
- {
- User::LeaveIfError( err );
- }
- name = TPtrC( iapRecord->iRecordName ).AllocLC();
- protect = iapRecord->Attributes() & ECDProtectedWrite;
-
- if ( bearerIdArray.Count() )
- {
- for ( TInt j = 0; j<bearerIdArray.Count(); j++ )
- {
- if ( bearerType == bearerIdArray[j] )
- {
- iconId = j+KCmReservedIconIndexCount;
- }
- }
- }
- }
-
- if ( iconId == KErrNotFound )
- {
- TInt iconInt( 0 );
- if( isDest )
- // Embedded destinations has not constant icon.
- {
- iconInt = (TInt)CCmDestinationImpl::IconIdL( *iCmManager,
- cmIds[i] );
- }
- else
- {
- iconInt = iCmManager->GetBearerInfoIntL( bearerType,
- ECmBearerIcon );
- }
-
- if (iconInt)
- {
- if ( isDest )
- {
- // append zero - assuming that bearer type values differ from zero
- bearerIdArray.Append( 0 );
- }
- else
- {
- bearerIdArray.Append( bearerType );
- }
-
- icons->AppendL( (CGulIcon*)iconInt );
- iconId = bearerIdArray.Count()-1+KCmReservedIconIndexCount;
- }
- else
- {
- iconId = KCmReservedIconIndexCount;
- }
- }
- TBool def = EFalse;
- if ( defUid == recId )
- {
- def = ETrue;
- }
-
- TInt nextLayerSnapId = 0;
- if( !isDest )
- {
- // Check if it is VPN over destination
- // If yes the list item should have single line
- CCmPluginBase* plugin = iCmManager->GetConnectionMethodL( cmIds[i] );
- CleanupStack::PushL( plugin );
-
- if( plugin->GetBoolAttributeL( ECmVirtual ) )
- {
- nextLayerSnapId = plugin->GetIntAttributeL( ECmNextLayerSNAPId );
- }
-
- CleanupStack::PopAndDestroy( plugin );
- }
-
- CCmListItem* item =
- CCmListItem::NewLC(
- recId,
- name,
- i,
- iconId,
- protect,
- (nextLayerSnapId ? ETrue : EFalse),
- // reasons for single line
- ( isDest || !iCmDestinationImpl),
- def );
- CleanupStack::Pop( item );
- CleanupStack::Pop( name );
- CleanupStack::PopAndDestroy(); // iapRecord or nwRecord
- CleanupStack::PushL( item );
- iModel->AppendL( item );
- CleanupStack::Pop( item );
- iItemIndex.Append(i);
- }
-
- TInt cmCount = iItemIndex.Count();
- SetNoOfCMsL( cmCount );
-
- if ( !cmCount && iCmDestinationImpl )
- {
- HBufC* buf = 0;
- // rare case probably only caused by bad configuration
- if ( iCmDestinationImpl->ProtectionLevel() == EProtLevel1 )
- {
- buf = StringLoader::LoadLC( R_TEXT_SOFTKEY_OPTION );
- }
- else
- {
- buf = StringLoader::LoadLC( R_CMMANAGERUI_MSK_ADD_METHOD );
- }
- ButtonGroupContainer().SetCommandL( ECmManagerUiCmdCmEdit, *buf );
- ButtonGroupContainer().DrawDeferred();
- CleanupStack::PopAndDestroy( buf );
- }
-
- CleanupStack::PopAndDestroy( &bearerIdArray );
-
- CArrayPtr<CGulIcon>* oldIcons =
- iListbox->ItemDrawer()->ColumnData()->IconArray();
- if ( oldIcons )
- {
- oldIcons->ResetAndDestroy();
- delete oldIcons;
- }
-
- iListbox->ItemDrawer()->ColumnData()->SetIconArray( icons );
-
- CleanupStack::Pop( icons );
- CleanupStack::PopAndDestroy( &cmIds );
-
- iCmManager->CommitTransactionL( KErrNone );
-
- iListbox->DrawNow();
- iListbox->UpdateScrollBarsL();
-
- TInt count = iListbox->Model()->NumberOfItems();
- if ( count )
- {
- if ( count <= selected )
- {
- selected = count - 1; // index, so --
- }
- if ( selected >= 0 )
- {
- iListbox->ScrollToMakeItemVisible( selected);
- iListbox->SetCurrentItemIndexAndDraw( selected );
- }
- }
- }
-
-
-// --------------------------------------------------------------------------
-// CCmDlg::CurrentCmInUseL
-// --------------------------------------------------------------------------
-//
-TBool CCmDlg::CurrentCmInUseL()
- {
- TBool retVal = CurrentCML()->GetBoolAttributeL( ECmConnected );
- if ( retVal )
- {
- TCmCommonUi::ShowNoteL( R_QTN_SET_NOTE_AP_IN_USE_EDIT,
- TCmCommonUi::ECmErrorNote );
- retVal = ETrue;
- }
- return retVal;
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::ConstructCMArrayL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::ConstructCMArrayL( RArray<TUint32>& aCmIds )
- {
- iCmDestinationImpl->ReLoadConnectionMethodsL();
- iCmDestinationImpl->ConnectMethodIdArrayL( aCmIds );
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::ClearHiddenCMsFromArrayL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::ClearHiddenCMsFromArrayL( RArray<TUint32>& aCmIds )
- {
- TBool hidden( EFalse );
- TInt err( KErrNone );
- for ( TInt index = 0; index < aCmIds.Count(); index++ )
- {
- TUint recId = aCmIds[index];
- TRAP( err, hidden = iCmManager->GetConnectionMethodInfoBoolL( recId, ECmHidden ) );
- if ( err || hidden )
- {
- aCmIds.Remove( index );
- index--;
- }
- }
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::GetHelpContext
-// --------------------------------------------------------------------------
-//
-void CCmDlg::GetHelpContext( TCoeHelpContext& aContext ) const
- {
- aContext.iMajor = KHelpUidPlugin;
- aContext.iContext = KSET_HLP_CONN_METHODS_VIEW;
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::FinishPriorizingL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::FinishPriorizingL( TBool aOkPushed )
- {
- LOGGER_ENTERFN( "CCmDlg::FinishPriorizing" );
-
- iListbox->ClearSelection();
- iPrioritising = EFalse;
-
- if( aOkPushed )
- {
- if ( CurrentCML()->GetBoolAttributeL( ECmDestination ) ||
- (CurrentCML()->GetBoolAttributeL( ECmVirtual ) &&
- CurrentCML()->GetIntAttributeL( ECmNextLayerSNAPId )) )
- {
- // Priorising not possible
- TCmCommonUi::ShowNoteL( R_CMMANAGERUI_INFO_PRIO_NOT_POSSIBLE,
- TCmCommonUi::ECmInfoNote );
- }
- else
- {
- CCmPluginBase* cm = CMByIndexL(iCmToPrioritise);
- iCmDestinationImpl->ModifyPriorityL(
- *cm,
- iListbox->CurrentItemIndex());
- iCmDestinationImpl->UpdateL();
- HandleListboxDataChangeL();
- }
- }
- // Set the softkeys back
- ButtonGroupContainer().SetCommandSetL(
- R_SOFTKEYS_OPTIONS_BACK__EDIT );
- ButtonGroupContainer().DrawDeferred();
- }
-
-
-// --------------------------------------------------------------------------
-// CCmDlg::Execute
-// --------------------------------------------------------------------------
-//
-void CCmDlg::Execute()
- {
- LOGGER_ENTERFN( "CCmDlg::Execute" );
-
- iInfoPopupNoteController->HideInfoPopupNote();
-
- if(iPrioritising)
- {
- TRAPD( err, FinishPriorizingL( ETrue ) );
- if ( err )
- {
- HandleLeaveError( err );
- }
- }
- else
- {
- iProcessing = ETrue;
-
- TRAPD( err, ProcessCommandL(ECmManagerUiCmdCmEdit) );
- if ( err )
- {
- HandleLeaveError( err );
- }
-
- iProcessing = EFalse;
- }
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::HandleLeaveError
-// --------------------------------------------------------------------------
-//
-void CCmDlg::HandleLeaveError( TInt /*aError*/ )
- {
- if(iProcessing)
- {
- iProcessing = EFalse;
- }
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::HandleResourceChange
-// --------------------------------------------------------------------------
-//
-void CCmDlg::HandleResourceChange( TInt aType )
- {
- CCoeControl::HandleResourceChange( aType );
-
- if( aType == KEikDynamicLayoutVariantSwitch )
- {
- DrawNow();
- }
-
- CAknDialog::HandleResourceChange(aType);
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::GetInsertIndexL
-// --------------------------------------------------------------------------
-//
-TInt CCmDlg::GetInsertIndexL( TInt aCount, TUint32 aPriority )
- {
- TInt ret = -1;
- TUint32 priority;
-
- for ( TInt index = 0; index < aCount; index++ )
- {
- CCmPluginBase* cm = iCmDestinationImpl->GetConnectionMethodL( iItemIndex[index] );
-
- if ( cm->GetBoolAttributeL( ECmVirtual ) &&
- !cm->GetIntAttributeL( ECmNextLayerSNAPId ) )
- {
- TUint32 underlying = cm->GetIntAttributeL( ECmNextLayerIapId );
- if ( underlying != 0 )
- {
- // Find the index that this VPN Iap should be inserted
- TUint32 underlyingBearer = iCmManager->BearerTypeFromCmIdL( underlying );
- priority = iCmManager->GetBearerInfoIntL( underlyingBearer, ECmDefaultPriority );
- }
- else
- {
- priority = KDataMobilitySelectionPolicyPriorityWildCard;
- }
- }
- else
- {
- priority = cm->Plugin()->GetIntAttributeL( ECmDefaultPriority );
- }
-
- if (priority > aPriority)
- {
- ret = index;
- break;
- }
- }
-
- return ret;
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::ReBuildItemIndexArrayL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::ReBuildItemIndexArrayL()
- {
- iCmManager->OpenTransactionLC();
-
- RArray<TUint32> cmIds;
- ConstructCMArrayL( cmIds );
- CleanupClosePushL( cmIds );
-
- // Remove hidden Connection Methods from the array if uncat folder
- if ( !iCmDestinationImpl )
- {
- ClearHiddenCMsFromArrayL( cmIds );
- }
-
- iItemIndex.Reset();
- for ( TInt i = 0; i < cmIds.Count(); i++ )
- {
- iItemIndex.Append(i);
- }
-
- CleanupStack::PopAndDestroy( &cmIds );
-
- iCmManager->CommitTransactionL( KErrNone );
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::ReOrderCMsL
-// --------------------------------------------------------------------------
-//
-void CCmDlg::ReOrderCMsL()
- {
- ReBuildItemIndexArrayL();
-
- TBool prioAllowed = ETrue;
- TInt firstNotAllowedEntry = 0;
- TInt index = 0;
- TInt count = iItemIndex.Count();
-
- if (!iCmDestinationImpl)
- {
- return;
- }
-
- // This part is to move a SANP-referred VPN Iap to the end of list if the VPN Iap is changed from
- // IAP-referred to SNAP-referred.
- for ( index = 0; index < count; index++ )
- {
- CCmPluginBase* cm = iCmDestinationImpl->GetConnectionMethodL( iItemIndex[index] );
-
- if ( cm->GetBoolAttributeL( ECmDestination ) ||
- (cm->GetBoolAttributeL( ECmVirtual ) &&
- cm->GetIntAttributeL( ECmNextLayerSNAPId )) )
- {
- prioAllowed = EFalse;
- firstNotAllowedEntry = index;
- }
- else
- {
- if ( !prioAllowed )
- {
- iCmDestinationImpl->ModifyPriorityL(*cm, firstNotAllowedEntry);
- iCmDestinationImpl->UpdateL();
- // start from the beginning
- index = 0;
- prioAllowed = ETrue;
- continue;
- }
- }
- }
-
- // This part is to move a IAP-referred VPN Iap to a proper location of priority in list
- // if the VAP Iap is changed from SNAP-referred to IAP-referred.
- for ( index = 0; index < count; index++ )
- {
- CCmPluginBase* cm = iCmDestinationImpl->GetConnectionMethodL( iItemIndex[index] );
-
- if ( cm->GetBoolAttributeL( ECmVirtual ) &&
- !cm->GetIntAttributeL( ECmNextLayerSNAPId ) )
- {
- TUint32 underlying = cm->GetIntAttributeL( ECmNextLayerIapId );
- if ( underlying != 0 )
- {
- // Find the index that this VPN Iap should be inserted
- TUint32 underlyingBearer = iCmManager->BearerTypeFromCmIdL( underlying );
- TUint32 underlyingPrio = iCmManager->GetBearerInfoIntL( underlyingBearer, ECmDefaultPriority );
- TInt insertAt = GetInsertIndexL( index, underlyingPrio );
-
- // Modify the priority of this VPN Iap
- if (insertAt != -1)
- {
- iCmDestinationImpl->ModifyPriorityL( *cm, insertAt );
- iCmDestinationImpl->UpdateL();
- break;
- }
- }
- }
- }
- }
-
-// --------------------------------------------------------------------------
-// CCmDlg::CommsDatChanges
-// --------------------------------------------------------------------------
-//
-void CCmDlg::CommsDatChangesL()
- {
- if (iCmDestinationImpl)
- {
- // If the destination that is currently working on disappears
- // with some reason then go back to parent view
- if( !iCmManager->DestinationStillExistedL( iCmDestinationImpl ) )
- {
- iCmManager->WatcherUnRegister();
- TryExitL( iExitReason );
- return;
- }
- }
-
- // Update list box
- HandleListboxDataChangeL();
- }