sipplugins/sippsipsettingsui/src/sipsettingsplugin.cpp
changeset 0 307788aac0a8
child 1 dd3853b8dc3f
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/sipplugins/sippsipsettingsui/src/sipsettingsplugin.cpp	Tue Feb 02 01:03:15 2010 +0200
@@ -0,0 +1,755 @@
+/*
+* Copyright (c) 2005 Nokia Corporation and/or its subsidiary(-ies).
+* All rights reserved.
+* This component and the accompanying materials are made available
+* under the terms of "Eclipse Public License v1.0"
+* which accompanies this distribution, and is available
+* at the URL "http://www.eclipse.org/legal/epl-v10.html".
+*
+* Initial Contributors:
+* Nokia Corporation - initial contribution.
+*
+* Contributors:
+*
+* Description:  SIP Settings view controller
+*
+*/
+
+
+// INCLUDE FILES
+#include    <uikon.hrh>
+#include    <aknradiobuttonsettingpage.h>
+#include    <aknnotewrappers.h>
+#include    <StringLoader.h>
+#include    <hlplch.h>
+#include    <featmgr.h>
+#include     <bautils.h>
+#include     <gsfwviewuids.h>     //for KGSConPluginUid
+#include    <gssipsettingspluginrsc.rsg> //GUI Resource
+#include    <gssipsettingsplugin.mbg>
+#include    "sipsettingsplugin.h"
+#include    "sipsettingsmodel.h"
+#include    "sipsettingscontainer.h"
+#include     "gssipmodel.h"
+#include    "sipsettlistsipprofsetview.h"
+#include    "sipsettlistsipprxsetview.h"
+#include    "sipsettlistsipregsetview.h"
+#include    "gssipsettingsplugin.hrh"
+#include    "viewid.h"
+#include    "gsprivatepluginproviderids.h"
+#include    "gssippluginlogger.h"
+
+#include "gssipsettingspluginrsc.rsg"
+
+#include <aknappui.h>
+// LOCAL CONSTANTS AND MACROS
+// Middle Softkey control ID.
+const TInt KGSMSKControlID = 3;
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::CSIPSettingsPlugin
+// C++ default constructor can NOT contain any code, that
+// might leave.
+// -----------------------------------------------------------------------------
+//
+CSIPSettingsPlugin::CSIPSettingsPlugin() 
+    : iResourceLoader( *iCoeEnv ), iMskCommandFlag(ETrue)
+    {
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::CSIPSettingsPlugin()" )
+    }
+
+// ---------------------------------------------------------------------------
+// CSIPSettingsPlugin::~CSIPSettingsPlugin()
+// Destructor
+//
+// ---------------------------------------------------------------------------
+//
+CSIPSettingsPlugin::~CSIPSettingsPlugin()
+    {
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::~CSIPSettingsPlugin()" )
+    
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer=NULL;
+        }
+    iResourceLoader.Close();
+    
+    delete iModel;
+       delete iHandler;
+    }
+
+// -----------------------------------------------------------------------------
+// When this method is called, view checks based on highlight focus, if the MSK
+// label is correct.
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::CheckMiddleSoftkeyLabelL()
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::CheckMiddleSoftkeyLabelL " )
+    const TInt currentFeatureId = iContainer->CurrentFeatureId();
+    // First remove any previous commands.
+    RemoveCommandFromMSK( iMskCommandFlag );
+    if ( currentFeatureId >= 0 )
+        {
+         //Set middle softkey as Change. 
+        SetMiddleSoftKeyLabelL( R_PROFILES_MSK_EDIT,
+                                EGSMSKCmdAppChange );
+        // This way we set which command is set for MSK
+        iMskCommandFlag = ETrue;
+        }
+     else
+        {
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// Remove unnecessary commands from Middle softkey.
+// @flag = ETrue means presently MSK value is "Change" so we remove that
+// @flag = EFalse means presently no MSK value is currently on
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::RemoveCommandFromMSK(const TBool flag )
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::RemoveCommandFromMSK " )
+    CEikButtonGroupContainer* cbaGroup = Cba();
+    if ( cbaGroup )
+        {
+        if ( flag )
+            {
+                cbaGroup->RemoveCommandFromStack( 
+                                KGSMSKControlID, EGSMSKCmdAppChange );
+            }
+        else
+            {
+            }
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Sets middle softkey label.
+// ---------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::SetMiddleSoftKeyLabelL( 
+    const TInt aResourceId, const TInt aCommandId )
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::SetMiddleSoftKeyLabelL" )
+    CEikButtonGroupContainer* cbaGroup = Cba();
+    if ( cbaGroup )
+        {
+        HBufC* middleSKText = StringLoader::LoadLC( aResourceId );
+        TPtr mskPtr = middleSKText->Des();
+        cbaGroup->AddCommandToStackL( 
+            KGSMSKControlID, 
+            aCommandId, 
+            mskPtr );
+        CleanupStack::PopAndDestroy( middleSKText );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// CSIPSettingsPlugin::ConstructL(const TRect& aRect)
+// Symbian OS two-phased constructor
+// (other items were commented in a header).
+// ---------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::ConstructL()
+    {
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::ConstructL()" )
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] Loading resource from : z:GSSIPSettingsPluginRsc.rsc" )
+    
+    
+    // Find the resource file
+    TParse parse;
+    parse.Set( KSIPSettingsResourceFileName, &KDC_RESOURCE_FILES_DIR, NULL );
+    TFileName fileName( parse.FullName() );
+
+    // Get language of resource file
+    BaflUtils::NearestLanguageFile( iCoeEnv->FsSession(), fileName );
+
+    // Open resource file
+    iResourceLoader.OpenL( fileName );
+    
+    iHandler = CGSSIPModel::NewL();
+    iHandler->CreateEngineL( this );
+    iModel = CSIPSettingsModel::NewL( iHandler );
+    
+    // Construct views
+    CAknView* view;
+
+    view = CSIPSettListSIPProfSetView::NewLC( iHandler );
+    AppUi()->AddViewL( view );    // transfer ownership to CAknViewAppUi
+    CleanupStack::Pop( view );    
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::ConstructL: View created" )
+    
+    view = CSIPSettListSIPPrxSetView::NewLC( iHandler );
+    AppUi()->AddViewL( view );    // transfer ownership to CAknViewAppUi
+    CleanupStack::Pop( view );    
+    __GSLOGSTRING( 
+        "[GSSIPSettingsPlugin] CSIPSettingsPlugin::ConstructL: SIP prx srv View created" )
+    
+    view = CSIPSettListSIPRegSetView::NewLC( iHandler );
+    AppUi()->AddViewL( view );    // transfer ownership to CAknViewAppUi
+    CleanupStack::Pop( view );    
+    __GSLOGSTRING(
+        "[GSSIPSettingsPlugin] CSIPSettingsPlugin::ConstructL: SIP reg srv View created" )
+        
+    iListBoxEventPenDown = EFalse;
+    BaseConstructL( R_GS_SIP_PROFILE_LIST_VIEW );       
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::NewL
+// Static constructor
+// -----------------------------------------------------------------------------
+//
+CSIPSettingsPlugin* CSIPSettingsPlugin::NewL( TAny* /*aInitParams*/ )
+    {
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::NewL()" )
+
+    CSIPSettingsPlugin* self = 
+        new ( ELeave ) CSIPSettingsPlugin( );
+    
+    CleanupStack::PushL( self );
+    self->ConstructL();    
+    CleanupStack::Pop(self);
+    return self;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::Id
+//
+// Returns the UID of the view
+// -----------------------------------------------------------------------------
+//
+TUid CSIPSettingsPlugin::Id() const
+    {    
+    return KGSSIPSettingsPluginUID;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::HandleClientRectChange
+//
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::HandleClientRectChange()
+    {
+    __GSLOGSTRING("[GSSIPSettingsPlugin] CSIPSettingsPlugin::HandleClientRectChange()" )
+    if ( iContainer && iContainer->iListBox )
+        {
+        iContainer->SetRect( ClientRect() );
+        }
+    }
+    
+
+// -----------------------------------------------------------------------------
+// CSIPSettListSIPProfListView::DoActivateL()
+// Activates the view, creates View and Model
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::DoActivateL( 
+    const TVwsViewId& aPrevViewId, 
+    TUid /*aCustomMessageId*/, 
+    const TDesC8& /*aCustomMessage*/ )
+    {
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::DoActivateL()" )
+    __GSLOGSTRING1( "[GSSIPSettingsPlugin] Previous vied id: %d" , aPrevViewId.iViewUid.iUid )
+    iPrevViewId = aPrevViewId;
+
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer=NULL;
+        }
+
+    iContainer = new (ELeave) CSIPSettingsContainer( this );    
+    __ASSERT_DEBUG(
+        iContainer, 
+        User::Panic(_L( "CSIPSettingsPlugin::iContainer == NULL" ), 0 ) );
+    iContainer->SetMopParent( this );
+
+    TRAPD( error, iContainer->ConstructL( ClientRect(), iActiveIndex, iModel ) );
+
+    if ( error && iContainer )
+        {
+        delete iContainer;
+        iContainer = NULL;
+        User::Leave( error );
+        }
+
+    iContainer->SetMiddleSoftkeyObserver( this );
+    AppUi()->AddToViewStackL( *this, iContainer );
+       // This way we set which command is set for MSK
+    iMskCommandFlag = ETrue;
+    CheckMiddleSoftkeyLabelL();
+    
+    __GSLOGSTRING("[GSSIPSettingsPlugin] CSIPSettingsPlugin::DoActivateL done" )
+    }
+        
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::DoDeactivate()
+// Deactivates the view
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::DoDeactivate()
+    {
+    __GSLOGSTRING( "[GSSIPSettingsPlugin] CSIPSettingsPlugin::DoDeactivate()" )
+    if ( iContainer )
+        {
+        AppUi()->RemoveFromViewStack( *this, iContainer );
+        delete iContainer;
+        iContainer = NULL;
+        }
+    }
+   
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::HandleCommandL
+// Handles the user interaction
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::HandleCommandL( TInt aCommand )
+    {
+    __GSLOGSTRING1("CSIPSettingsPlugin::HandleCommandL aCommand: %d", aCommand)
+    TBool exitNow( ETrue ); 
+    TVwsViewId id;
+    AppUi()->GetActiveViewId( id ); // Current view id.
+    
+    switch ( aCommand )
+        {   
+        // "Add new..Use existing profile" menu item
+        case EGSCmdAppNewExist:
+            CreateFromExisitingProfileL();
+            break;
+        
+        // "Add new..Use default profile" menu item
+        case EGSCmdAppNewDefault:
+            CreateNewProfileL( KUnknownProfileIndex );
+            break;
+
+        // "Edit" menu item / Select pressed
+        case EGSMSKCmdAppChange:
+        case EGSCmdAppEdit:
+            EditProfileL();
+            break;
+
+        // "Delete" menu item / 'c' pressed
+        case EGSCmdAppDelete:
+            DeleteProfileL();
+            break;
+
+        // "Default profile" menu item
+        case EGSCmdAppDefault:
+            ChangeDefaultProfileL();
+            break;
+
+        // Updates the list as registration status has changed
+        // or a new list item is added
+        case EGSCmdUpdateList:
+            if ( iContainer )
+                {
+                iContainer->ListItemModifiedL( iHandler->AddedProfileIndex() );
+                CheckMiddleSoftkeyLabelL();
+                }
+            break;
+
+        // Called when a profile is deleted
+        case EGSCmdProfileDeleted:
+            if ( iContainer )
+                {
+                iContainer->ListItemDeletedL();
+                CheckMiddleSoftkeyLabelL();          
+                }
+            break;
+        
+        // Activate 'Connection' or 'Administrative Settings' view
+        case EAknSoftkeyBack:
+            iActiveIndex = 0;
+#if defined (RD_CONTROL_PANEL)                
+            AppUi()->ActivateLocalViewL( KGSAdminPluginUid );
+#else           
+            AppUi()->ActivateLocalViewL( KGSConPluginUid );
+#endif  // RD_CONTROL_PANEL             
+            break;
+            
+        case EAknCmdHelp:
+            {
+            if ( FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+                {
+                HlpLauncher::LaunchHelpApplicationL(
+                    iEikonEnv->WsSession(), AppUi()->AppHelpContextL() );
+                }
+            break;
+            }
+            
+        case EAknCmdExit:
+            iActiveIndex = 0;
+            iHandler->QuitAfterSave();
+            if ( ( id.iViewUid == KSettListSIPProfileSettingView || 
+                id.iViewUid == KSettListSIPProxyServerView ||
+                id.iViewUid == KSettListSIPRegistrarServerView ) &&
+                iHandler->SaveProfileL() )
+                {
+                exitNow = EFalse;
+                }
+            
+            // Exit?
+            if ( exitNow )
+                {
+                AppUi()->HandleCommandL( aCommand );                
+                }
+            break;
+        
+
+        case EGSCmdAppShutterExit:
+        default:
+            AppUi()->HandleCommandL( aCommand );
+            break;
+        }
+    }
+    
+// ========================= From CGSPluginInterface ==================
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::GetCaptionL
+// 
+// Method for getting caption of this plugin. This should be the
+// localized name of the settings view to be shown in parent view.
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::GetCaptionL( TDes& aCaption ) const
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::GetCaptionL " )
+    HBufC* result = StringLoader::LoadL( R_GS_SIPSETTINGS_PLUGIN_CAPTION );
+    aCaption.Copy( *result );
+    delete result;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::PluginProviderCategory
+// Method for reading the ID of the plugin provider category.
+// -----------------------------------------------------------------------------
+//
+TInt CSIPSettingsPlugin::PluginProviderCategory() const
+    {
+    return KGSPluginProviderInternal;
+    }
+    
+// ---------------------------------------------------------------------------
+// CSIPSettingsPlugin::CreateIconL
+//
+// Return the icon, if has one.
+// ---------------------------------------------------------------------------
+//
+CGulIcon* CSIPSettingsPlugin::CreateIconL( const TUid aIconType )
+    {
+    __GSLOGSTRING( "[CSIPSettingsPlugin] CreateIconL()|->" )
+    //EMbm<Mbm_file_name><Bitmap_name>
+    CGulIcon* icon;
+
+    if( aIconType == KGSIconTypeLbxItem )
+        {
+        icon = AknsUtils::CreateGulIconL(
+        AknsUtils::SkinInstance(),
+        KAknsIIDQgnPropSetConnSip,
+        KGSDefaultSIPIconFileName,
+        EMbmGssipsettingspluginQgn_prop_set_conn_sip,
+        EMbmGssipsettingspluginQgn_prop_set_conn_sip_mask );
+        }
+     else
+        {
+        icon = CGSPluginInterface::CreateIconL( aIconType );
+        }
+
+    __GSLOGSTRING( "[CSIPSettingsPlugin] CreateIconL()-|" )
+    return icon;
+    }
+
+// ========================= MEikMenuObserver =================================
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::HandleListBoxEventL
+// Handles the list box events
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::HandleListBoxEventL( 
+    CEikListBox* /*aListBox*/,
+    TListBoxEvent aEventType )
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::HandleListBoxEventL " )
+    __GSLOGSTRING1("CSIPSettingsPlugin::HandleListBoxEventL aEventType: %d", aEventType)
+     
+    if( EEventPenDownOnItem == aEventType )
+        {
+        iContainer->LongTapDetector()->PointerEventL( iContainer->PointerEvent() );
+        return;
+        }
+    if( EEventItemSingleClicked == aEventType ||
+    		  EEventEnterKeyPressed == aEventType )
+	    {
+    	if ( !iContainer->LongPressStatus() )
+    	    {
+    	    EditProfileL();
+    	    }
+	    }
+	    iContainer ->SetLongPress( EFalse );
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::ChangeDefaultProfileL
+// Shows the pop-up list for changing the default profile
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::ChangeDefaultProfileL()
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::ChangeDefaultProfileL Start " )
+    TInt selectedIndex = iModel->DefaultProfileIndex();  
+    TInt oldProfileIndex = selectedIndex;  
+    
+    // Get the array of the profile names, ownership changes
+    CDesCArray* array = iModel->ListOfProfileNamesL();    
+    CleanupStack::PushL( array );
+    
+    // Create and display the pop-up list
+    CAknRadioButtonSettingPage* defaultPopUp = 
+        new ( ELeave ) CAknRadioButtonSettingPage( 
+            R_SIP_PROFILE_LIST_VIEW_DEFAULT_SETTING_PAGE,
+            selectedIndex,
+            array );
+    if ( defaultPopUp->ExecuteLD( CAknSettingPage::EUpdateWhenChanged ) )
+        {
+        if ( selectedIndex != oldProfileIndex )
+            {
+            // User has changed the default profile, set new setting
+            // to persistent storage
+            iModel->SetDefaultProfileL( selectedIndex );
+            }
+        }
+
+    CleanupStack::PopAndDestroy( array );  // array
+    __GSLOGSTRING("CSIPSettingsPlugin::ChangeDefaultProfileL End" )
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::CreateFromExistingProfileL
+// Shows pop-up list for user to choose the cloned profile
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::CreateFromExisitingProfileL()
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::CreateFromExisitingProfileL Start " )
+    // Creates list box for the pop-up list
+    CEikFormattedCellListBox* listBox = new ( ELeave ) 
+        CAknSinglePopupMenuStyleListBox;
+    CleanupStack::PushL( listBox );
+
+    // Create pop-up list
+    CAknPopupList* popupList = CreatePopupListL( listBox );
+
+    // Show the pop-up list
+    TBool profileSelected = popupList->ExecuteLD();
+    TInt index = listBox->CurrentItemIndex();
+
+    CleanupStack::PopAndDestroy( listBox );  
+
+    if ( profileSelected )
+        {
+        CreateNewProfileL( index );
+        }
+    __GSLOGSTRING("CSIPSettingsPlugin::CreateFromExisitingProfileL End" )
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::CreatePopupListL
+// Creates pop-up list for choosing the cloned profile
+// -----------------------------------------------------------------------------
+//
+CAknPopupList* CSIPSettingsPlugin::CreatePopupListL(
+    CEikFormattedCellListBox* aListBox )
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::CreatePopupListL" )
+    // Create and initialize the popup list
+    CAknPopupList* popupList = CAknPopupList::NewL(
+        aListBox, R_AVKON_SOFTKEYS_SELECT_CANCEL__SELECT,
+        AknPopupLayouts::EPopupSNotePopupWindow );
+    CleanupStack::PushL( popupList );
+
+    // Set the title of the pop-up list
+    HBufC* titleBuf = StringLoader::LoadLC( 
+        R_PROFILE_LIST_VIEW_NEW_PROFILE_LIST_TITLE );
+    popupList->SetTitleL( *titleBuf );
+    CleanupStack::PopAndDestroy( titleBuf );
+
+    // Initialize list box
+    aListBox->ConstructL( popupList,
+                          EAknListBoxSelectionList );
+    aListBox->CreateScrollBarFrameL( ETrue );
+    aListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
+    aListBox->Model()->SetItemTextArray( iModel->ListOfProfileNamesL() );
+
+    CleanupStack::Pop( popupList ); 
+
+    return popupList;
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::CreateNewProfileL
+// Creates a new profile and changes the view to another
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::CreateNewProfileL( 
+    TInt aIndex )
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::CreateNewProfileL" )
+    iActiveIndex = iContainer->CurrentIndex();
+    iModel->CreateNewProfileL( aIndex );
+    AppUi()->ActivateLocalViewL( KSettListSIPProfileSettingView );
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettListSIPProfListView::DeleteProfileL
+// Confirms from the user and then deletes the profile
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::DeleteProfileL()
+    {  
+    __GSLOGSTRING("CSIPSettingsPlugin::DeleteProfileL Start" )
+    TUint count = iModel->NumOfProfiles();
+    if ( count == 0 )
+        {
+        // No profiles to be deleted, so return
+        return;
+        }
+    
+    TBool isUse( EFalse );
+    TBool isDefault( EFalse );
+    TBool isLocked( EFalse );
+    iModel->CheckProfileForDeleteL( iContainer->CurrentIndex(), isUse, 
+                                isDefault, isLocked );
+
+    // Don't allow delete profile which is in use.    
+    if ( isUse )
+        {
+        HBufC* txtErr = StringLoader::LoadLC( 
+            R_QTN_SIP_ERROR_UNABLE_TO_DELETE );
+        CAknErrorNote* note = new ( ELeave ) CAknErrorNote( ETrue );
+        note->ExecuteLD( txtErr->Des() );
+        CleanupStack::PopAndDestroy( txtErr );
+        }
+    // Don't allow delete default profile until it's last one.    
+    else if ( isDefault && count > 1 )
+        {
+        HBufC* txtErr = StringLoader::LoadLC(
+            R_QTN_SIP_ERROR_UNABLE_TO_DELETE_DEFAULT );
+        CAknErrorNote* note = new ( ELeave ) CAknErrorNote( ETrue );
+        note->ExecuteLD( txtErr->Des() );
+        CleanupStack::PopAndDestroy( txtErr );
+        }
+    // Don't allow to delete profile which is locked
+    else if ( isLocked )
+        {
+        HBufC* txtErr = StringLoader::LoadLC(
+            R_QTN_SIP_ERROR_UNABLE_TO_DEL_LOCKED );
+        CAknErrorNote* note = new ( ELeave ) CAknErrorNote( ETrue );
+        note->ExecuteLD( txtErr->Des() );
+        CleanupStack::PopAndDestroy( txtErr );
+        }
+    else
+        {
+        // Load and initialize the dialog text
+        HBufC* txtBuf = iModel->ProfileNameLC( iContainer->CurrentIndex() );    
+        HBufC* dlgTxt = StringLoader::LoadLC( 
+            R_QTN_CONF_PROFILE_DELETE_LABEL, *txtBuf );       
+
+        CAknQueryDialog* dlg = CAknQueryDialog::NewL();
+        CleanupStack::PushL( dlg );
+        dlg->SetPromptL( *dlgTxt );
+        CleanupStack::Pop( dlg );
+        
+        if ( dlg->ExecuteLD( R_SIP_DELETE_CONFIRMATION_DLG ) )
+            {
+            iModel->DeleteProfileL( iContainer->CurrentIndex() );    
+            if ( iActiveIndex && iActiveIndex == iContainer->CurrentIndex())    
+                {
+                iActiveIndex--;
+                }
+            }
+
+        CleanupStack::PopAndDestroy( dlgTxt );      
+        CleanupStack::PopAndDestroy( txtBuf );   
+        }  
+    __GSLOGSTRING("CSIPSettingsPlugin::DeleteProfileL End" )
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettingsPlugin::EditProfileL
+// Edits existing profile
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::EditProfileL()
+    {
+    __GSLOGSTRING("CSIPSettingsPlugin::EditProfileL" )
+    if ( iContainer->CurrentIndex() < 0 )
+        {
+        return;
+        }
+        
+    TBool moveNxtView = iModel->EditProfileL( iContainer->CurrentIndex() );
+    
+    if ( moveNxtView )
+        {
+        iActiveIndex = iContainer->CurrentIndex();
+        AppUi()->ActivateLocalViewL( KSettListSIPProfileSettingView );  
+        }
+    }
+
+// -----------------------------------------------------------------------------
+// CSIPSettListSIPProfListView::DynInitMenuPaneL
+// Initializes the menu dynamically before it is shown to the user
+// -----------------------------------------------------------------------------
+//
+void CSIPSettingsPlugin::DynInitMenuPaneL( 
+    TInt aResourceId,
+    CEikMenuPane* aMenuPane )
+    {    
+    __GSLOGSTRING("CSIPSettingsPlugin::DynInitMenuPaneL" )
+    // Delete Help item if feature is not supported
+    if( aResourceId == R_GS_SIP_PROFILE_LIST_VIEW_MENU ) 
+        {
+        if ( iContainer->IfPointerEvent() )
+            {
+            aMenuPane->SetItemDimmed( EGSCmdAppEdit, ETrue );
+            aMenuPane->SetItemDimmed( EGSCmdAppDelete, ETrue );
+            aMenuPane->SetItemDimmed( EGSCmdAppDefault, ETrue );
+            }
+        if( !FeatureManager::FeatureSupported( KFeatureIdHelp ) )
+            {
+            aMenuPane->DeleteMenuItem( EAknCmdHelp );
+            }
+        }    
+        
+    if ( aResourceId == R_GS_SIP_PROFILE_LIST_VIEW_MENU && 
+         iModel->NumOfProfiles() == 0 )
+        {
+        // No profiles exist, time to dim some menu items
+        aMenuPane->SetItemDimmed( EGSCmdAppEdit, ETrue );
+        aMenuPane->SetItemDimmed( EGSCmdAppDelete, ETrue );
+        aMenuPane->SetItemDimmed( EGSCmdAppDefault, ETrue );        
+        }
+    else if ( aResourceId == R_GS_SIP_PROFILE_LIST_ADD_NEW_MENU && 
+              iModel->NumOfProfiles() == 0 )
+        {
+        // No profiles exist, time to dim some menu items
+        aMenuPane->SetItemDimmed( EGSCmdAppNewExist, ETrue );        
+        }
+    else
+        {
+        // Do nothing
+        }
+    }
+
+//  End of File