--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/cmmanager/cmmgr/Framework/Src/destdlg.cpp Wed Sep 01 12:23:51 2010 +0100
@@ -0,0 +1,1700 @@
+/*
+* 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: Dialog for setting the gateway. It's used temporarily.
+*
+*/
+
+#include <avkon.hrh>
+#include <eikdef.h>
+#include <eikenv.h>
+#include <eikedwin.h>
+#include <gulicon.h>
+#include <cmmanager.rsg>
+#include <data_caging_path_literals.hrh>
+#include <cmmanager.mbg>
+#include <badesca.h> // CDesCArray
+#include <aknnavide.h>
+#include <akntitle.h>
+#include <eikmenup.h>
+#include <StringLoader.h>
+#include <AknIconArray.h>
+#include <aknnavilabel.h>
+#include <textresolver.h>
+
+#include <hlplch.h>
+#include <csxhelp/cp.hlp.hrh>
+
+#include <cmcommonconstants.h>
+#include <cmdestination.h>
+#include <cmcommonui.h>
+#include <cmpluginbaseeng.h>
+#include <cmpluginbase.h>
+
+#include "cmmanager.hrh"
+#include "destlistitem.h"
+#include "destlistitemlist.h"
+#include "destdlg.h"
+#include "cmwizard.h"
+#include "uncatdlg.h"
+#include "cmdlg.h"
+#include "cmdesticondialog.h"
+#include "cmlistboxmodel.h"
+#include "cmlistitem.h"
+#include <mcmdexec.h>
+#include "ccmdexec.h"
+#include "cmlogger.h"
+
+using namespace CMManager;
+using namespace CommsDat;
+
+// ---------------------------------------------------------------------------
+// CDestDlg::ConstructAndRunLD
+// Constructs the dialog and runs it.
+// ---------------------------------------------------------------------------
+//
+TInt CDestDlg::ConstructAndRunLD( CCmManagerImpl* aCmManagerImpl,
+ TUint32 aHighlight,
+ TUint32& aSelected,
+ TBool& aExiting )
+ {
+ iHighlight = aHighlight;
+ iSelected = &aSelected;
+ iCmManagerImpl = aCmManagerImpl;
+ iExiting = &aExiting;
+ *iExiting = EFalse;
+
+ iCmdExec = new (ELeave) CCmdExec(*this);
+
+ ConstructL( R_DEST_MENUBAR );
+ PrepareLC( R_DEST_DIALOG );
+ iModel = new( ELeave )CDestListboxModel();
+ iConnSettingsImpl = CCmConnSettingsUiImpl::NewL( iCmManagerImpl );
+
+ // CommsDat notifier should be started with this first UI view for
+ // it will create active object
+ iCmManagerImpl->StartCommsDatNotifierL();
+ iCmManagerImpl->WatcherRegisterL( this );
+
+ return RunLD();
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::CDestDlg()
+// ---------------------------------------------------------------------------
+//
+CDestDlg::CDestDlg()
+ : iModelPassed( EFalse )
+ , iExitReason( KDialogUserExit )
+ , iEscapeArrived( EFalse )
+ {
+ CLOG_CREATE;
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::~CApSelectorDialog
+// Destructor
+// ---------------------------------------------------------------------------
+//
+CDestDlg::~CDestDlg()
+ {
+ // iModel is deleted by the ListBox because LB owns the model...
+ // of course only after we passed ownership...
+ if ( !iModelPassed )
+ {
+ delete iModel;
+ }
+ if ( iNaviDecorator )
+ {
+ delete iNaviDecorator;
+ }
+ if ( iTitlePane )
+ {
+ // set old text back, if we have it and if we are going back to
+ // Connectivity Settings view
+ if ( iOldTitleText )
+ {
+ if ( iExitReason == KDialogUserBack )
+ {
+ TRAP_IGNORE( iTitlePane->SetTextL( *iOldTitleText ) );
+ }
+ delete iOldTitleText;
+ }
+ }
+ if ( iConnSettingsImpl )
+ {
+ delete iConnSettingsImpl;
+ }
+
+ if( iCmWizard )
+ {
+ delete iCmWizard;
+ }
+
+ delete iCmdExec;
+
+ CLOG_CLOSE;
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::PreLayoutDynInitL();
+// called by framework before dialog is shown
+// ---------------------------------------------------------------------------
+//
+void CDestDlg::PreLayoutDynInitL()
+ {
+ iListbox =
+ STATIC_CAST( CDestListbox*, Control( KDestListboxId ) );
+ iListbox->CreateScrollBarFrameL( ETrue );
+ iListbox->ScrollBarFrame()->SetScrollBarVisibilityL
+ ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+ iListbox->SetListBoxObserver( this );
+
+ iListbox->Model()->SetItemTextArray( iModel );
+ iModelPassed = ETrue;
+ InitTextsL();
+ HandleListboxDataChangeL();
+ iListbox->HandleItemAdditionL();
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::DynInitMenuPaneL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::DynInitMenuPaneL( TInt aResourceId,
+ CEikMenuPane* aMenuPane )
+ {
+ switch ( aResourceId )
+ {
+ case R_DEST_MENU:
+ {
+ // Check if it is the 'New connection' list item
+ // rather than a real destination
+ TUint32 listItemUid = iListbox->CurrentItemUid();
+ if ( listItemUid == KDestItemNewConnection )
+ {
+ aMenuPane->SetItemDimmed( ECmManagerUiCmdDestEdit, ETrue );
+ aMenuPane->SetItemDimmed( ECmManagerUiCmdDestRename, ETrue );
+ aMenuPane->SetItemDimmed( ECmManagerUiCmdDestDelete, ETrue );
+ aMenuPane->SetItemDimmed( ECmManagerUiCmdDestChangeIcon, ETrue );
+ }
+ if ( !iCmManagerImpl->IsDefConnSupported() )
+ {
+ aMenuPane->SetItemDimmed( ECmManagerUiCmdDestDefaultConnection, ETrue );
+ }
+ if (!iCmManagerImpl->IsHelpOn())
+ {
+ aMenuPane->DeleteMenuItem( EAknCmdHelp );
+ }
+ break;
+ }
+ default:
+ break;
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::OfferKeyEventL
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CDestDlg::OfferKeyEventL( const TKeyEvent& aKeyEvent,
+ TEventCode aType )
+ {
+ LOGGER_ENTERFN( "CDestDlg::OfferKeyEventL" );
+ CLOG_WRITE_1("Key iCode: %d", aKeyEvent.iCode );
+
+ TKeyResponse retVal ( EKeyWasNotConsumed );
+
+ TBool down( EFalse );
+
+ switch ( aKeyEvent.iCode )
+ {
+ case 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( "CDestDlg::OfferKeyEventL: Wizard in long process" );
+ iEscapeArrived = ETrue;
+ retVal = EKeyWasConsumed;
+ }
+ else
+ {
+ CLOG_WRITE( "CDestDlg::OfferKeyEventL:Escape" );
+ retVal = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+ }
+ break;
+ }
+ case EKeyBackspace:
+ {
+ ProcessCommandL( ECmManagerUiCmdDestDelete );
+ retVal = EKeyWasConsumed;
+ break;
+ }
+ case EKeyDownArrow:
+ {
+ down = ETrue;
+ // intended flow-through
+ }
+ case EKeyUpArrow:
+ {
+ // When moving from the 'New connection' (first) item, MSK should be 'Open'
+ if ( iListbox->CurrentItemUid() == KDestItemNewConnection )
+ {
+ SetMskL( R_QTN_MSK_OPEN );
+ }
+
+ // When moving to the 'New connection' (first item)
+ else if ( ( iListbox->CurrentItemIndex() == 1 && !down ) ||
+ ( iListbox->CurrentItemIndex() + 1 ==
+ iModel->MdcaCount() && down ) )
+ {
+ SetMskL( R_QTN_MSK_SELECT );
+ }
+ // flow through to 'default' intended
+ }
+ default:
+ {
+ retVal = iListbox->OfferKeyEventL(aKeyEvent, aType);
+ break;
+ }
+ }
+ return retVal;
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::ShowDefaultSetNoteL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::ShowDefaultSetNoteL( TCmDefConnValue aSelection )
+ {
+ switch ( aSelection.iType )
+ {
+ case ECmDefConnDestination:
+ case ECmDefConnConnectionMethod:
+ {
+ HBufC* connName = iConnSettingsImpl->CreateDefaultConnectionNameL( aSelection );
+ CleanupStack::PushL(connName);
+ TCmCommonUi::ShowNoteL( R_CMMANAGERUI_DEFAULT_CONNECTION_SET_TO,
+ *connName,
+ TCmCommonUi::ECmOkNote );
+ CleanupStack::PopAndDestroy( connName );
+ }
+ }
+ }
+
+
+// ----------------------------------------------------------------------------
+// CDestDlg::SetDefaultNaviL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::SetDefaultNaviL( TCmDefConnValue aSelection )
+ {
+ HBufC* title = NULL;
+
+ switch ( aSelection.iType )
+ {
+ case ECmDefConnDestination:
+ case ECmDefConnConnectionMethod:
+ {
+ HBufC* connName = iConnSettingsImpl->CreateDefaultConnectionNameL( aSelection );
+ CleanupStack::PushL(connName);
+ title = StringLoader::LoadL( R_CMMANAGERUI_NAVI_DEFAULT, *connName );
+ CleanupStack::PopAndDestroy( connName );
+ CleanupStack::PushL( title );
+ break;
+ }
+ }
+
+ if ( iNaviDecorator )
+ {
+ if ( iNaviDecorator->ControlType() ==
+ CAknNavigationDecorator::ENaviLabel )
+ {
+ CAknNaviLabel* naviLabel =
+ (CAknNaviLabel*)iNaviDecorator->DecoratedControl();
+ if ( title )
+ {
+ naviLabel->SetTextL(*title);
+ }
+ else
+ {
+ naviLabel->SetTextL( KNullDesC );
+ }
+
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+ }
+
+ if ( title )
+ {
+ CleanupStack::PopAndDestroy( title );
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::ProcessCommandL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::ProcessCommandL( TInt aCommandId )
+ {
+ LOGGER_ENTERFN( "CDestDlg::ProcessCommandL" );
+ CLOG_WRITE_1("Command: %d", aCommandId );
+
+ if ( MenuShowing() )
+ {
+ HideMenu();
+ }
+
+ switch ( aCommandId )
+ {
+ case EAknSoftkeyOptions:
+ {
+ DisplayMenuL();
+ break;
+ }
+ case ECmManagerUiCmdDestUserExit:
+ {
+ CLOG_WRITE( "CDestDlg::ProcessCommandL command: exit");
+ iExitReason = KDialogUserExit;
+ iCmManagerImpl->WatcherUnRegister();
+ TryExitL( iExitReason );
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ iExitReason = KDialogUserBack;
+ iCmManagerImpl->WatcherUnRegister();
+ TryExitL( iExitReason );
+ break;
+ }
+ case ECmManagerUiCmdDestEdit:
+ {
+ OnCommandDestinationEditL();
+ break;
+ }
+ case ECmManagerUiCmdDestDefaultConnection:
+ {
+ TCmDCSettingSelection selection;
+ TCmDefConnValue defConnValue;
+ iCmManagerImpl->ReadDefConnL( defConnValue );
+ switch (defConnValue.iType)
+ {
+ case ECmDefConnConnectionMethod:
+ {
+ selection.iResult = EDCConnectionMethod;
+ selection.iId = defConnValue.iId;
+ break;
+ }
+ case ECmDefConnDestination:
+ {
+ selection.iResult = EDCDestination;
+ selection.iId = defConnValue.iId;
+ break;
+ }
+ default:
+ {
+ break;
+ }
+ }
+ if ( iConnSettingsImpl->RunDefaultConnecitonRBPageL( selection ) )
+ {
+ defConnValue = selection.ConvertToDefConn();
+
+ iCmManagerImpl->WriteDefConnL( defConnValue );
+ HandleListboxDataChangeL();
+ }
+ break;
+ }
+
+ case ECmManagerUiCmdDestChangeIcon:
+ {
+ // Check if this is UnCat
+ if ( iListbox->CurrentItemUid() == KDestItemUncategorized )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ break;
+ }
+
+ // Check that destination is not protected
+ CCmDestinationImpl* dest =
+ iCmManagerImpl->DestinationL( iListbox->CurrentItemUid() );
+ CleanupStack::PushL( dest );
+ if ( dest->ProtectionLevel() )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+
+ CleanupStack::PopAndDestroy( dest );
+ break;
+ }
+
+ TInt iconSelected = 0;
+ CCmDestinationIconDialog* popup =
+ new (ELeave) CCmDestinationIconDialog( iconSelected );
+ if ( popup->ExecuteLD() )
+ {
+ dest->SetIconL( iconSelected ); // subclass implements
+ dest->UpdateL();
+ CleanupStack::PopAndDestroy( dest );
+
+ HandleListboxDataChangeL();
+ break;
+ }
+
+ CleanupStack::PopAndDestroy( dest );
+
+ break;
+
+ }
+
+
+ case ECmManagerUiCmdDestAdd:
+ {
+ AddDestinationL();
+ break;
+ }
+
+ case EAknSoftkeyClear:
+ case ECmManagerUiCmdDestDelete:
+ {
+ OnCommandDestinationDeleteL();
+ break;
+
+ }
+
+ case ECmManagerUiCmdDestRename:
+ {
+ OnCommandDestinationRenameL();
+ break;
+ }
+
+ case EAknCmdHelp:
+ {
+ HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+ iEikonEnv->EikAppUi()->AppHelpContextL() );
+ }
+ break;
+
+ default:
+ {
+ break;
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::InitTextsL
+// called before the dialog is shown
+// to initialize localized textual data
+// ---------------------------------------------------------------------------
+//
+void CDestDlg::InitTextsL()
+ {
+ // set pane text if neccessary...
+ // pane text needed if not pop-up...
+ if ( iEikonEnv )
+ {
+ iStatusPane = iEikonEnv->AppUiFactory()->StatusPane();
+ iTitlePane =
+ ( CAknTitlePane* )iStatusPane->ControlL(
+ TUid::Uid( EEikStatusPaneUidTitle ) );
+
+ iOldTitleText = iTitlePane->Text()->AllocL();
+ iTitlePane->SetTextL(
+ *(StringLoader::LoadLC( R_CMMANAGERUI_NAVI )) );
+
+ CleanupStack::PopAndDestroy(); // resource R_CMMANAGERUI_NAVI
+ iNaviPane = ( CAknNavigationControlContainer* )
+ iStatusPane->ControlL(
+ TUid::Uid( EEikStatusPaneUidNavi ) );
+ iNaviDecorator = iNaviPane->CreateNavigationLabelL( KNullDesC );
+ iNaviPane->PushL( *iNaviDecorator );
+ if ( iCmManagerImpl->IsDefConnSupported() )
+ {
+ TCmDefConnValue selection;
+ selection.iType = ECmDefConnAlwaysAsk;
+ iCmManagerImpl->ReadDefConnL( selection );
+ SetDefaultNaviL( selection );
+ }
+ }
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::SetNoOfDestsL
+// ---------------------------------------------------------------------------
+//
+void CDestDlg::SetNoOfDestsL( TInt aCount )
+ {
+ HBufC* title = NULL;
+
+ if ( aCount == 1 )
+ {
+ title = StringLoader::LoadLC( R_QTN_NETW_CONSET_NAVI_ONE_DESTINATION );
+ }
+ else
+ {
+ title = StringLoader::LoadLC( R_QTN_NETW_CONSET_NAVI_NOF_DESTINATIONS,
+ aCount );
+ }
+ if (iNaviDecorator)
+ {
+ if ( iNaviDecorator->ControlType() ==
+ CAknNavigationDecorator::ENaviLabel )
+ {
+ CAknNaviLabel* naviLabel =
+ (CAknNaviLabel*)iNaviDecorator->DecoratedControl();
+ naviLabel->SetTextL(*title);
+ iNaviPane->PushL( *iNaviDecorator );
+ }
+ }
+
+ CleanupStack::PopAndDestroy( title );
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::CreateCustomControlL
+// ---------------------------------------------------------------------------
+//
+SEikControlInfo CDestDlg::CreateCustomControlL
+( TInt aControlType )
+ {
+ SEikControlInfo controlInfo;
+ controlInfo.iTrailerTextId = 0;
+ controlInfo.iFlags = 0;
+ if ( aControlType == KDestListboxType )
+ {
+ controlInfo.iControl = new ( ELeave ) CDestListbox;
+ }
+ else
+ {
+ controlInfo.iControl = NULL;
+ }
+ return controlInfo;
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::OkToExitL
+// Good to know : EAknSoftkeyCancel is never called, because
+// EEikDialogFlagNotifyEsc flag is not set in the resource.
+// ---------------------------------------------------------------------------
+//
+TBool CDestDlg::OkToExitL( TInt aButtonId )
+ {
+ CLOG_WRITE_1( "CDestDlg::OkToExitL buttonId: %d", aButtonId );
+
+ // Translate the button presses into commands for the appui & current
+ // view to handle
+ TBool retval( EFalse );
+ switch ( aButtonId )
+ {
+ case EAknSoftkeyOk:
+ case EAknSoftkeySelect:
+ case ECmManagerUiCmdCmAdd:
+ {
+ if ( !iProcessing )
+ {
+ iProcessing = ETrue;
+ ProcessCommandL( ECmManagerUiCmdDestEdit );
+ iProcessing = EFalse;
+ }
+ break;
+ }
+ case EAknSoftkeyBack:
+ {
+ if (!iProcessing)
+ {
+ *iExiting = EFalse;
+ iExitReason = KDialogUserBack;
+ retval = ETrue;
+ }
+ break;
+ }
+ case EAknSoftkeyOptions:
+ {
+ if ( !iProcessing )
+ {
+ DisplayMenuL();
+ }
+ break;
+ }
+ default:
+ {
+
+ CLOG_WRITE_1( "CDestDlg::OkToExitL: High level stop %d", aButtonId );
+
+ *iExiting = ETrue;
+ retval = ETrue;
+ break;
+ }
+ }
+ return retval;
+ }
+
+// ---------------------------------------------------------------------------
+// CDestDlg::HandleListBoxEventL
+// ---------------------------------------------------------------------------
+void CDestDlg::HandleListBoxEventL( CEikListBox* /*aListBox*/,
+ TListBoxEvent aEventType )
+ {
+ LOGGER_ENTERFN( "CDestDlg::HandleListBoxEventL" );
+
+ switch ( aEventType )
+ {
+ case EEventEnterKeyPressed:
+ case EEventItemSingleClicked:
+ {
+ if ( !iProcessing )
+ {
+ iCmdExec->Execute();
+ }
+ break;
+ }
+ case EEventEditingStarted:
+ {
+ break;
+ }
+ case EEventEditingStopped:
+ {
+ break;
+ }
+ default:
+ {
+ break;
+ };
+ };
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::HandleListboxDataChangeL
+// called before the dialog is shown to initialize listbox data
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::HandleListboxDataChangeL()
+ {
+ LOGGER_ENTERFN( "CDestDlg::HandleListboxDataChangeL" );
+
+ iCmManagerImpl->OpenTransactionLC();
+
+ iModel->ResetAndDestroy();
+ RArray<TUint32> destIdArray = RArray<TUint32>( KCmArrayBigGranularity );
+
+ CArrayPtr< CGulIcon >* icons = new( ELeave ) CAknIconArray( KGranularity );
+ CleanupStack::PushL( icons );
+
+ MAknsSkinInstance* skinInstance = AknsUtils::SkinInstance();
+
+ iCmManagerImpl->AllDestinationsL(destIdArray);
+
+ // Append the destinations to the list
+ CleanupClosePushL( destIdArray ); // 1
+
+ TCmDefConnValue defConnSel;
+ defConnSel.iType = ECmDefConnAlwaysAsk;//default value
+ if ( iCmManagerImpl->IsDefConnSupported() )
+ {
+ //refresh default connection in navi pane
+ iCmManagerImpl->ReadDefConnL(defConnSel);
+ SetDefaultNaviL( defConnSel );
+ }
+ else
+ {
+ SetNoOfDestsL( destIdArray.Count() );
+ }
+ ///!!!TEMP, no icon for add connection yet
+ TParse mbmFile;
+ User::LeaveIfError( mbmFile.Set( KManagerIconFilename,
+ &KDC_APP_BITMAP_DIR,
+ NULL ) );
+
+ CGulIcon* icon = AknsUtils::CreateGulIconL( //second, KDestReservedIconIndexProtected
+ skinInstance,
+ KAknsIIDQgnPropSetConnDestAdd,
+ mbmFile.FullName(),
+ EMbmCmmanagerQgn_prop_set_conn_dest_add,
+ EMbmCmmanagerQgn_prop_set_conn_dest_add_mask );
+ CleanupStack::PushL( icon );
+ icons->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ icon = AknsUtils::CreateGulIconL( //second, KDestReservedIconIndexProtected
+ skinInstance,
+ KAknsIIDQgnIndiSettProtectedAdd,
+ mbmFile.FullName(),
+ EMbmCmmanagerQgn_indi_sett_protected_add,
+ EMbmCmmanagerQgn_indi_sett_protected_add_mask );
+
+
+// Previous must me changed to following if any problems with theme colours
+/* AknsUtils::CreateColorIconLC( skinInstance,
+ KAknsIIDQgnIndiSettProtectedAdd,
+ KAknsIIDQsnIconColors,
+ EAknsCIQsnIconColorsCG13,
+ bitmap,
+ mask,
+ mbmFile.FullName(),
+ EMbmCmmanagerQgn_indi_sett_protected_add,
+ EMbmCmmanagerQgn_indi_sett_protected_add_mask,
+ AKN_LAF_COLOR( 215 ) );
+
+ icon = CGulIcon::NewL( bitmap, mask ); // Ownership transferred
+ CleanupStack::Pop( 2 ); // bitmap, mask*/
+
+ CleanupStack::PushL( icon );
+ icons->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ //third, uncategorized KDestReservedIconIndexUncategorized
+ icons->AppendL( iCmManagerImpl->UncategorizedIconL() );
+
+ //0..3 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 ) );
+
+ icon = CGulIcon::NewL( bitmap, mask ); // Ownership transferred
+ CleanupStack::Pop( 2 ); // bitmap, mask
+
+ CleanupStack::PushL( icon );
+ icons->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ // Add the New Connection Item
+ HBufC* newConnection = StringLoader::LoadLC(
+ R_CMMANAGERUI_NEW_CONNECTION ); // 2
+
+ CDestListItem* newConnItem =
+ CDestListItem::NewLC(
+ KDestItemNewConnection,
+ newConnection,
+ 0,
+ KDestReservedIconIndexNewConn, EProtLevel0, EFalse ); // 3
+ iModel->AppendL( newConnItem ); // ownership relinquished
+ CleanupStack::Pop( newConnItem );
+ CleanupStack::Pop( newConnection );
+
+ TTime destTime;
+
+//refresh default connection icon in list - no effect if feature flag is off (defConnSel
+// is ECmDefConnAlwaysAsk)
+ TInt defUid = KErrNotFound;
+ if ( defConnSel.iType == ECmDefConnDestination )
+ {
+ defUid = defConnSel.iId;
+ }
+
+
+ for (TInt i = 0; i < destIdArray.Count(); i++)
+ {
+ // Get the destinations from their IDs
+ CCmDestinationImpl* dest = NULL;
+
+
+ TRAPD( err, dest = iCmManagerImpl->DestinationL( destIdArray[i] ) );
+ if( err )
+ {
+ continue;
+ }
+ CleanupStack::PushL( dest );
+
+ // Check whether the MMS SNAP is in question.
+ // It should not be shown on the UI in the destinations list
+ TInt snapMetadata = 0;
+ TRAPD(metaErr, snapMetadata = dest->MetadataL( CMManager::ESnapMetadataPurpose ));
+ if ( metaErr == KErrNone && snapMetadata == CMManager::ESnapPurposeMMS )
+ {
+ // This is the MMS SNAP, skip this item
+ if( dest )
+ {
+ CleanupStack::PopAndDestroy( dest );
+ dest = NULL;
+ }
+ continue;
+ }
+
+ // Also hidden destinations are shown (TSW id ERUN-79KFAK)
+ icons->AppendL( dest->IconL() );
+ HBufC* name = dest->NameLC(); // 3
+ TBool def = EFalse;
+ if ( defUid == dest->Id() ) //this is the default destination, indicate it!
+ {
+ def = ETrue;
+ }
+
+ // The connection methods bound to this destination may have to be checked with
+ // validity. Some connection methods might be invalid.
+ TInt numOfCms = dest->ConnectionMethodCount();
+ if (numOfCms > 0)
+ {
+ RArray<TUint32> cmIds;
+ dest->ConnectMethodIdArrayL( cmIds );
+ CleanupClosePushL( cmIds );
+
+ for ( TInt j = 0; j < cmIds.Count(); j++ )
+ {
+ TUint recId = cmIds[j];
+
+ TRAP( err, TUint32 bearerType = iCmManagerImpl->BearerTypeFromCmIdL( recId ) );
+ if( err == KErrNotSupported )
+ {
+ CLOG_WRITE_1( "CDestDlg::HandleListboxDataChangeL, IAP(%d) unsupported", recId );
+ numOfCms = numOfCms -1;
+ }
+ }
+
+ CleanupStack::PopAndDestroy( &cmIds );
+ }
+
+ CDestListItem* item = CDestListItem::NewLC(
+ dest->Id(),
+ name,
+ numOfCms,
+ icons->Count()-1, dest->ProtectionLevel(), def ); // 4
+ iModel->AppendL( item ); // ownership passed
+ CleanupStack::Pop( item );
+ CleanupStack::Pop( name );
+ if( dest )
+ {
+ CleanupStack::PopAndDestroy( dest );
+ dest = NULL;
+ }
+ }
+
+ // Add the Uncategorised Item
+ RArray<TUint32> uncatArray(KCmArraySmallGranularity);
+ CleanupClosePushL(uncatArray);
+
+ iCmManagerImpl->ConnectionMethodL( uncatArray, ETrue );
+ TUint32 numberOfCMs = NumberOfCMsL( uncatArray );
+ if ( numberOfCMs )
+ {
+ icon = AknsUtils::CreateGulIconL(
+ skinInstance,
+ KAknsIIDQgnPropSetConnDestUncategorized,
+ mbmFile.FullName(),
+ EMbmCmmanagerQgn_prop_set_conn_dest_uncategorized,
+ EMbmCmmanagerQgn_prop_set_conn_dest_uncategorized_mask );
+ CleanupStack::PushL( icon );
+ icons->AppendL( icon );
+ CleanupStack::Pop( icon );
+
+ HBufC* uncat = StringLoader::LoadLC(
+ R_CMMANAGERUI_DEST_UNCATEGORIZED ); // 2
+
+ // Check the hidden connection methods
+ for ( TInt k = 0; k < uncatArray.Count(); k++ )
+ {
+ TUint recId = uncatArray[k];
+ if ( iCmManagerImpl->GetConnectionMethodInfoBoolL( recId, ECmHidden ) )
+ {
+ numberOfCMs = numberOfCMs -1;
+ }
+ }
+
+ CDestListItem* uncatItem =
+ CDestListItem::NewLC(
+ KDestItemUncategorized,
+ uncat,
+ numberOfCMs,
+ icons->Count()-1, EProtLevel0, EFalse ); // 3
+ iModel->AppendL( uncatItem ); // ownership relinquished
+ CleanupStack::Pop( uncatItem );
+ CleanupStack::Pop( uncat );
+ }
+
+ CleanupStack::PopAndDestroy( 2, &destIdArray ); // destIdArray
+
+ CArrayPtr<CGulIcon>* oldIcons =
+ iListbox->ItemDrawer()->ColumnData()->IconArray();
+ if( oldIcons )
+ {
+ oldIcons->ResetAndDestroy();
+ delete oldIcons;
+ }
+
+ iListbox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+ iListbox->HandleItemAdditionL();
+ iListbox->UpdateScrollBarsL();
+
+ if ( !iListbox->CurrentItemUid() && !numberOfCMs )
+ {
+ // selection is out of range (e.g. Uncategorized deleted)
+ iListbox->SetCurrentItemIndexAndDraw( 0 );
+ }
+
+ CleanupStack::Pop( icons );
+
+ iCmManagerImpl->RollbackTransaction();
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::NumberOfCMsL
+// ----------------------------------------------------------------------------
+//
+TUint32 CDestDlg::NumberOfCMsL(RArray<TUint32> cmArray)
+ {
+ LOGGER_ENTERFN( "CDestDlg::NumberOfCMsL" );
+
+ TUint32 cmCount = cmArray.Count();
+ TUint32 retValue = cmArray.Count();
+ CCDIAPRecord* iapRecord = NULL;
+ for ( TInt i = 0; i < cmCount; i++ )
+ {
+ if ( cmArray[i] <= 255 )// not embedded destination
+ {
+ iapRecord = static_cast<CCDIAPRecord *>
+ (CCDRecordBase::RecordFactoryL(KCDTIdIAPRecord));
+ CleanupStack::PushL( iapRecord );
+
+ iapRecord->SetRecordId( cmArray[i] );
+ iapRecord->LoadL( iCmManagerImpl->Session() );
+
+ TRAPD( err, iCmManagerImpl->BearerTypeFromIapRecordL( iapRecord ) );
+
+ if( err == KErrNotSupported )
+ // This is unsupported connection method -> don't display
+ {
+ retValue--;
+ }
+ else
+ {
+ User::LeaveIfError( err );
+ }
+ CleanupStack::PopAndDestroy( iapRecord );
+ }
+ }
+ return retValue;
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::AddDestinationL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::AddDestinationL()
+ {
+ LOGGER_ENTERFN( "CDestDlg::AddDestinationL" );
+
+ TBuf<KDestinationNameMaxLength> destName;
+
+ TBool okToAdd = EFalse;
+ TBool nameAccepted = ETrue;
+ do
+ {
+ okToAdd = TCmCommonUi::ShowConfirmationQueryWithInputL(
+ R_CMMANAGERUI_PRMPT_DESTINATION_NAME,
+ destName );
+ if ( okToAdd )
+ {
+ CCmDestinationImpl* dest = NULL;
+
+ TRAPD(err, dest = iCmManagerImpl->CreateDestinationL( destName ) );
+ if ( err == KErrAlreadyExists )
+ {
+ nameAccepted = EFalse;
+ TCmCommonUi::ShowNoteL
+ ( R_CMMANAGERUI_INFO_DEST_ALREADY_IN_USE,
+ destName,
+ TCmCommonUi::ECmErrorNote );
+ }
+ else if ( err == KErrDiskFull )
+ {
+ CTextResolver* iTextResolver = CTextResolver::NewLC(*iCoeEnv);
+ okToAdd = EFalse;
+ TPtrC buf;
+ buf.Set(iTextResolver->ResolveErrorString(err));
+ TCmCommonUi::ShowNoteL( buf, TCmCommonUi::ECmErrorNote );
+ CleanupStack::PopAndDestroy( iTextResolver );
+ }
+ else if ( err == KErrNone )
+ {
+ CleanupStack::PushL( dest );
+ nameAccepted = ETrue;
+ TInt index = 0;
+ TInt iconSelected = 0;
+ CCmDestinationIconDialog* popup =
+ new (ELeave) CCmDestinationIconDialog( iconSelected );
+
+ // Show the icon dialogs
+ if ( popup->ExecuteLD() )
+ {
+ index = iconSelected;
+
+ dest->SetIconL( index ); // subclass implements
+ //dest->UpdateL();
+ TRAPD( err, dest->UpdateL() );
+ if( err )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ }
+ else
+ {
+ TRAP( err, HandleListboxDataChangeL() );
+ if ( err )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ }
+ }
+
+ CDestListboxModel* lbmodel =
+ STATIC_CAST( CDestListboxModel*,
+ iListbox->Model()->ItemTextArray() );
+ CDestListItem* lbitem =
+ lbmodel->At( lbmodel->MdcaCount() - 1 );
+
+ //returns null if item is not present
+ if ( lbitem->Uid() == KDestItemUncategorized )
+ {
+ //last item is uncategorized
+ iListbox->ScrollToMakeItemVisible(
+ lbmodel->MdcaCount() - 2 );
+ //last item is uncategorized
+ iListbox->SetCurrentItemIndexAndDraw(
+ lbmodel->MdcaCount() - 2 );
+ }
+ else
+ {
+ iListbox->ScrollToMakeItemVisible(
+ lbmodel->MdcaCount() - 1 );
+ iListbox->SetCurrentItemIndexAndDraw(
+ lbmodel->MdcaCount() - 1 );
+ }
+
+ iListbox->HandleItemAdditionL();
+
+ // Sets the mittle soft key text to "Open"
+ SetMskL( R_QTN_MSK_OPEN );
+
+ }
+ if(dest)
+ {
+ CleanupStack::PopAndDestroy( dest );
+ dest = NULL;
+ }
+ }
+ }
+ } while ( !nameAccepted && okToAdd );
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::OnCommandDestinationEdit
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::OnCommandDestinationEditL()
+ {
+ LOGGER_ENTERFN( "CDestDlg::OnCommandDestinationEditL" );
+
+ // Check if memory full
+ TBool ret ( EFalse );
+ ret = iCmManagerImpl->IsMemoryLow();
+ if( ret )
+ {
+ CLOG_WRITE( "CDestDlg::OnCommandDestinationEditL: Memory Full, return!" );
+ return;
+ }
+
+ if ( iListbox->CurrentItemUid() == KDestItemNewConnection )
+ {
+ // If there's at least one uprotected destination available
+ if ( iCmManagerImpl->DestinationCountL() )
+ {
+ if ( iCmManagerImpl->HasUnprotectedDestinationsL() )
+ {
+ // Opens a Connection method creation wizard
+ CLOG_WRITE( "CDestDlg::OnCommandDestinationEditL iCmWizard constructing" );
+ iCmWizard = new (ELeave) CCmWizard( *iCmManagerImpl );
+ TInt ret( KErrNone );
+ TRAPD( err, ret = iCmWizard->CreateConnectionMethodL() );
+ if ( err == KErrDiskFull )
+ {
+ CTextResolver* iTextResolver = CTextResolver::NewLC(*iCoeEnv);
+ ret = KErrCancel;
+ TPtrC buf;
+ buf.Set(iTextResolver->ResolveErrorString(err));
+ TCmCommonUi::ShowNoteL( buf, TCmCommonUi::ECmErrorNote );
+ CleanupStack::PopAndDestroy( iTextResolver );
+ }
+ else if ( err )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ ret = KErrCancel;
+ }
+ delete iCmWizard;
+ iCmWizard = NULL;
+ CLOG_WRITE_1( "CDestDlg::iCmWizard ret %d", ret );
+
+ // If application wanted to be closed before then RunAppShutter()
+ // should be called here
+ if( iEscapeArrived )
+ {
+ CLOG_WRITE_1( "CDestDlg::iEscapeArrived %d", iEscapeArrived );
+ ( ( CAknAppUi* )iEikonEnv->EikAppUi() )->RunAppShutter();
+ }
+ else
+ {
+ if( ret != KErrCancel )
+ {
+ TRAP( err, HandleListboxDataChangeL() );
+ if ( err )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ return;
+ }
+ }
+ }
+
+ }
+ else
+ {
+ // Show a warning here
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_NO_UNPROTECTED_DESTINATION,
+ TCmCommonUi::ECmWarningNote );
+ }
+ }
+ else
+ {
+ // ... otherwise show a warning.
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_NO_DESTINATION,
+ TCmCommonUi::ECmWarningNote );
+ }
+ }
+ else
+ {
+ if ( iListbox->CurrentItemUid() == KDestItemUncategorized )
+ {
+ CUncatDlg* uncatDlg = CUncatDlg::NewL( iCmManagerImpl );
+
+ TUint32 selected = 0;
+ if ( uncatDlg->ConstructAndRunLD( 0, selected ) ==
+ KDialogUserExit)
+ {
+ TryExitL(ETrue);
+ }
+ else
+ {
+ HandleListboxDataChangeL();
+ }
+ }
+ else
+ {
+ CCmDlg* cmDlg = CCmDlg::NewL( iCmManagerImpl ,
+ iListbox->CurrentItemUid(), this );
+
+ TUint32 selected = 0;
+ if ( cmDlg->ConstructAndRunLD( 0, selected ) ==
+ KDialogUserExit )
+ {
+ TryExitL(ETrue);
+ }
+ else
+ {
+ HandleListboxDataChangeL();
+ }
+ }
+ }
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::OnCommandDestinationDelete
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::OnCommandDestinationDeleteL()
+ {
+ LOGGER_ENTERFN( "CDestDlg::OnCommandDestinationDeleteL" );
+
+ TCmDefConnValue oldConn;
+ if (iCmManagerImpl->IsDefConnSupported())
+ {
+ iCmManagerImpl->ReadDefConnL( oldConn );
+ }
+ TUint32 listItemUid = iListbox->CurrentItemUid();
+
+ if ( listItemUid == KDestItemNewConnection )
+ {
+ // ignore this command - it's not a destination
+ return;
+ }
+
+ if ( listItemUid == KDestItemUncategorized )
+ {
+ // Cannot delete Uncategoried Destination
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+
+ return;
+ }
+
+ TBool carryOn( ETrue );
+ // Cannot delete if the destination is embedded somewhere
+ CCmDestinationImpl* dest =
+ iCmManagerImpl->DestinationL( iListbox->CurrentItemUid() );
+ CleanupStack::PushL( dest );
+ // We need this trap only because this function is called from a trap
+ TRAPD( err, dest->CheckIfEmbeddedL( dest->Id() ) );
+ if ( err == KErrNotSupported )
+ {
+ CleanupStack::PopAndDestroy( dest );
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ return;
+ }
+ else if ( err )
+ {
+ CleanupStack::PopAndDestroy( dest );
+ User::Leave(err);
+ }
+
+ // Show an error message to the user
+ if ( dest->ProtectionLevel() )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ carryOn = EFalse;
+ }
+
+ if( carryOn )
+ {
+ if( dest->IsConnectedL() )
+ {
+ TCmCommonUi::ShowNoteL(
+ R_CMMANAGERUI_INFO_DEST_IN_USE_CANNOT_DELETE,
+ TCmCommonUi::ECmErrorNote );
+ carryOn = EFalse;
+ }
+ }
+
+ // check if it is linked by anybody
+
+ if ( carryOn )
+ {
+ // 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 to be deleted
+ // if yes => carryOn = EFalse, ERROR
+ // if not:
+ // 3. check if it links to any of the CMs in this destination
+ // if not => goto 1.
+ // if yes:
+ // 4. check if it is also in this destination
+ // if not => carryOn = EFalse, ERROR
+ // if yes => goto 1.
+ // As we need different notes in different cases:
+ TUint32 noteresId = R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED;
+ CommsDat::CMDBRecordSet<CommsDat::CCDIAPRecord>* iaps =
+ iCmManagerImpl->AllIapsL();
+
+ CleanupStack::PushL( iaps );
+
+ // 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 =
+ iCmManagerImpl->BearerTypeFromIapRecordL( rec ) );
+ if ( !bearerType )
+ {
+ continue;
+ }
+
+ // check if it is virtual
+ if ( iCmManagerImpl->GetBearerInfoBoolL( bearerType, ECmVirtual ) )
+ {
+ // check if it links to the destination to be deleted
+ CCmPluginBase* plugin = NULL;
+ TRAP_IGNORE( plugin = iCmManagerImpl->GetConnectionMethodL(
+ rec->RecordId() ) );
+
+ if ( !plugin )
+ {
+ continue;
+ }
+
+ CleanupStack::PushL( plugin );
+
+ if ( plugin->IsLinkedToSnap( dest->Id() ) )
+ {
+ // the CM links to this destination, deletion not allowed
+ carryOn = EFalse;
+ noteresId = R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED;
+ }
+ else
+ {
+
+ // check if the CM links to any of the CMs in this destination
+ for ( TInt j = 0; j < dest->ConnectionMethodCount(); ++j )
+ {
+ CCmPluginBase* destPlugin = NULL;
+
+ TRAP_IGNORE( destPlugin = dest->GetConnectionMethodL( j ) );
+ if ( !destPlugin )
+ {
+ continue;
+ }
+
+ if ( destPlugin->GetIntAttributeL( ECmId ) ==
+ rec->RecordId() )
+ {
+ // the CM shouldn't be compared to itself
+ continue;
+ }
+
+ if ( plugin->IsLinkedToIap(
+ destPlugin->GetIntAttributeL( ECmId ) ) )
+ {
+ // the CM links to at least one CM in this destination
+ carryOn = EFalse;
+ noteresId = R_QTN_NETW_CONSET_INFO_CANNOT_DELETE_VIRTUAL_REF;
+ break;
+ }
+ }
+
+ }
+
+ CleanupStack::PopAndDestroy( plugin );
+ }
+
+
+ }
+
+ CleanupStack::PopAndDestroy( iaps );
+
+ if ( !carryOn )
+ {
+ TCmCommonUi::ShowNoteL(
+ noteresId,
+ TCmCommonUi::ECmErrorNote );
+ }
+ }
+
+
+ // check if it has protected method
+ if( carryOn )
+ {
+ if( IsThereProtectedMethodL( dest ) )
+ {
+ TCmCommonUi::ShowNoteL(
+ R_QTN_NETW_CONSET_INFO_CANNOT_DELETE_DEST_PROT_CM,
+ TCmCommonUi::ECmErrorNote );
+ carryOn = EFalse;
+ }
+ }
+
+ if( carryOn )
+ {
+ HBufC* destName = dest->NameLC(); // 2
+ if ( TCmCommonUi::ShowConfirmationQueryL(
+ R_CMMANAGERUI_QUEST_DEST_DELETE, *destName ) )
+ {
+ CleanupStack::PopAndDestroy( destName );
+ TRAPD( err, dest->DeleteLD() );
+ switch ( err )
+ {
+ case KErrInUse:
+ {
+ TCmCommonUi::ShowNoteL(
+ R_CMMANAGERUI_INFO_DEST_IN_USE_CANNOT_DELETE,
+ TCmCommonUi::ECmErrorNote );
+ }
+ break;
+
+ case KErrLocked:
+ {
+ TCmCommonUi::ShowNoteL
+ ( R_QTN_NETW_CONSET_INFO_CANNOT_DELETE_VIRTUAL_REF,
+ TCmCommonUi::ECmErrorNote );
+ }
+ break;
+
+ case KErrNone:
+ {
+ if (iCmManagerImpl->IsDefConnSupported())
+ {
+ ShowDefaultConnectionNoteL(oldConn);
+ }
+ CleanupStack::Pop( dest );
+ dest = NULL;
+
+ TInt selected = iListbox->CurrentItemIndex();
+
+ HandleListboxDataChangeL();
+
+ if ( iListbox->Model()->NumberOfItems() )
+ {
+ if( selected == iListbox->Model()->NumberOfItems() )
+ {
+ --selected;
+ }
+
+ //first item cannot be deleted
+ iListbox->ScrollToMakeItemVisible( selected);
+ iListbox->SetCurrentItemIndexAndDraw( selected );
+ }
+ }
+ break;
+
+ default:
+ {
+ }
+ }
+ }
+ else
+ {
+ CleanupStack::PopAndDestroy( destName );
+ }
+ }
+
+ if( dest )
+ {
+ CleanupStack::PopAndDestroy( dest );
+ }
+
+ }
+
+
+// ----------------------------------------------------------------------------
+// CDestDlg::OnCommandDestinationRenameL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::OnCommandDestinationRenameL()
+ {
+ LOGGER_ENTERFN( "CDestDlg::OnCommandDestinationRenameL" );
+
+ // Check if this is UnCat
+ if ( iListbox->CurrentItemUid() == KDestItemUncategorized )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+ return;
+ }
+
+ // Get currently selected destination.
+ CCmDestinationImpl* dest =
+ iCmManagerImpl->DestinationL( iListbox->CurrentItemUid() );
+ CleanupStack::PushL( dest );
+
+ // Show an error message to the user
+ if ( dest->ProtectionLevel() )
+ {
+ TCmCommonUi::ShowNoteL( R_CMWIZARD_CANNOT_PERFORM_FOR_PROTECTED,
+ TCmCommonUi::ECmErrorNote );
+
+ CleanupStack::PopAndDestroy( dest );
+ return;
+ }
+
+ // Allocate max length for the buffer, since we don't know how long
+ // the new name will be. Copy the actual name of the destination
+ // into the buffer.
+ TBuf< KDestinationNameMaxLength > destName;
+ destName.Copy( *( dest->NameLC() ) );
+
+ TBool okToRename = EFalse;
+ TBool nameAccepted = ETrue;
+ do
+ {
+ okToRename = TCmCommonUi::ShowConfirmationQueryWithInputL(
+ R_CMMANAGERUI_PRMPT_DESTINATION_NAME,
+ destName );
+ if ( okToRename )
+ {
+ TRAPD(err, dest->SetNameL( destName ));
+ if ( err == KErrAlreadyExists )
+ {
+ nameAccepted = EFalse;
+ TCmCommonUi::ShowNoteL( R_CMMANAGERUI_INFO_DEST_ALREADY_IN_USE,
+ destName,
+ TCmCommonUi::ECmErrorNote );
+ }
+ else if ( err == KErrNone )
+ {
+ nameAccepted = ETrue;
+ dest->UpdateL();
+ HandleListboxDataChangeL();
+ }
+ }
+ } while ( !nameAccepted && okToRename );
+
+ // dest->NameLC()
+ CleanupStack::PopAndDestroy( );
+ CleanupStack::PopAndDestroy( dest );
+ }
+
+// ----------------------------------------------------------------------------
+// CDestDlg::IsThereProtectedMethodL
+// ----------------------------------------------------------------------------
+//
+TBool CDestDlg::IsThereProtectedMethodL( CCmDestinationImpl* aDest )
+ {
+ LOGGER_ENTERFN( "CDestDlg::IsThereProtectedMethodL" );
+
+ TInt count( aDest->ConnectionMethodCount() );
+
+ for( TInt i = 0; i < count; ++i )
+ {
+ CCmPluginBase* cm = aDest->GetConnectionMethodL( i );
+
+ if( cm->GetBoolAttributeL( ECmProtected ) )
+ {
+ return ETrue;
+ }
+ }
+
+ return EFalse;
+ }
+
+
+// ----------------------------------------------------------------------------
+// CDestDlg::SetMskL
+// ----------------------------------------------------------------------------
+//
+void CDestDlg::SetMskL( TInt aResourceId )
+ {
+ HBufC* text = StringLoader::LoadLC( aResourceId );
+ ButtonGroupContainer().SetCommandL( EAknSoftkeySelect, *text );
+ ButtonGroupContainer().DrawDeferred();
+ CleanupStack::PopAndDestroy( text );
+
+ }
+
+// --------------------------------------------------------------------------
+// CDestDlg::GetHelpContext
+// --------------------------------------------------------------------------
+//
+void CDestDlg::GetHelpContext( TCoeHelpContext& aContext ) const
+ {
+ aContext.iMajor = KHelpUidPlugin;
+ aContext.iContext = KSET_HLP_CONN_DEST_VIEW;
+ }
+
+// --------------------------------------------------------------------------
+// CDestDlg::Execute
+// --------------------------------------------------------------------------
+//
+void CDestDlg::Execute()
+ {
+ LOGGER_ENTERFN( "CDestDlg::Execute" );
+ iProcessing = ETrue;
+
+ TRAPD( err, ProcessCommandL(ECmManagerUiCmdDestEdit) );
+ if ( err )
+ {
+ HandleLeaveError( err );
+ }
+
+ iProcessing = EFalse;
+ }
+
+// --------------------------------------------------------------------------
+// CDestDlg::HandleResourceChange
+// --------------------------------------------------------------------------
+//
+
+void CDestDlg::HandleResourceChange( TInt aType )
+ {
+ CCoeControl::HandleResourceChange( aType );
+
+ if( aType == KEikDynamicLayoutVariantSwitch )
+ {
+ DrawNow();
+ }
+
+ CAknDialog::HandleResourceChange(aType);
+ }
+
+// --------------------------------------------------------------------------
+// CDestDlg::HandleLeaveError
+// --------------------------------------------------------------------------
+//
+void CDestDlg::HandleLeaveError( TInt aError )
+ {
+ LOGGER_ENTERFN( "CDestDlg::HandleLeaveError" );
+
+ switch( aError )
+ {
+ case KLeaveWithoutAlert:
+ case KErrNoMemory:
+ EnforcedResetCDestDlg();
+ break;
+ default:
+ // More leave errors may be handled if necessary
+ // Now other leave errors are ignored here
+ break;
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDestDlg::EnforcedResetCDestDlg
+// --------------------------------------------------------------------------
+//
+void CDestDlg::EnforcedResetCDestDlg()
+ {
+ LOGGER_ENTERFN( "CDestDlg::EnforcedResetCDestDlg" );
+
+ if( iCmWizard != NULL )
+ {
+ delete iCmWizard;
+ iCmWizard = NULL;
+ }
+
+ if( iProcessing )
+ {
+ iProcessing = EFalse;
+ }
+}
+
+// --------------------------------------------------------------------------
+// CDestDlg::ShowDefaultConnectionNoteL
+// --------------------------------------------------------------------------
+//
+void CDestDlg::ShowDefaultConnectionNoteL(TCmDefConnValue aOldDefConn)
+ {
+ LOGGER_ENTERFN( "CDestDlg::ShowDefaultConnectionNoteL" );
+ TCmDefConnValue newConn;
+
+ iCmManagerImpl->ReadDefConnL( newConn );
+
+ if ( newConn != aOldDefConn )
+ {
+ ShowDefaultSetNoteL( newConn );
+ }
+ }
+
+// --------------------------------------------------------------------------
+// CDestDlg::CommsDatChanges
+// --------------------------------------------------------------------------
+//
+void CDestDlg::CommsDatChangesL()
+ {
+ // Update list box
+ HandleListboxDataChangeL();
+ }