email/imum/Utils/Src/IMSSettingsUi.cpp
changeset 0 72b543305e3a
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/email/imum/Utils/Src/IMSSettingsUi.cpp	Thu Dec 17 08:44:11 2009 +0200
@@ -0,0 +1,728 @@
+/*
+* Copyright (c) 2006 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: 
+*       Class implementation file
+*
+*/
+
+
+// INCLUDE FILES
+#include <e32base.h>
+#include <msvapi.h>                 // CMsvSession
+#include <eikfrlb.h>                // CEikFormattedCellListBox
+#include <eikappui.h>
+#include <avkon.hrh>                // EAknSoftkeyCancel
+#include <aknappui.h>               // CAknAppUi
+#include <AknsDrawUtils.h>
+#include <eikspane.h>               // CEikStatusPane
+#include <akntitle.h>               // CAknTitlePane
+#include <hlplch.h>                 // HlpLauncher
+#include <msvids.h>                 // KMsvNullIndexEntryId
+#include <muiuflagger.h>            // CFlags
+#include <eikrted.h>                // CEikRichTextEditor
+#include <txtrich.h>                // CRichText
+#include <f32file.h>                // TParse
+#include <ImumInSettingsData.h>     // CImumInSettingsData
+#include <bldvariant.hrh>
+#include <csxhelp/mce.hlp.hrh>
+#include <ImumUtils.rsg>
+#include <AiwServiceHandler.h>      //CAiwServiceHandler
+#include <AiwCommon.h>              //CAiwCriteriaItem
+#include <AiwVariant.h>             //TAiwVariant
+#include <AknIconArray.h>
+#include <aknlists.h>
+#include <pathinfo.h>
+#include <muiu.mbg>
+#include <data_caging_path_literals.hrh>
+#include <aknlayoutscalable_apps.cdl.h>
+
+#include <aknViewAppUi.h>           //CAknViewAppUi
+#include <akninputblock.h>          // CAknInputBlock
+#include <eikapp.h>                 // CEikApplication
+
+#include "ImumInternalApiImpl.h"    // CImumInternalApiImpl
+#include "IMSSettingsUi.h"
+#include "IMSSettingsBaseUi.h"
+#include "IMSSettingsWizard.h"
+#include "IMSSettingsDialog.h"
+#include "ImumMboxManager.h"
+#include "ImumPanic.h"
+#include "EmailFeatureUtils.h"
+#include "EmailUtils.H"
+#include "ImumUtilsLogging.h"
+#include "IMSWizardControl.h"
+
+// EXTERNAL DATA STRUCTURES
+// EXTERNAL FUNCTION PROTOTYPES
+// CONSTANTS
+const TInt KIMSOptionsMenuItemCount = 4;
+
+const TInt KIMSMaxEmailAddressSize = 100;
+
+_LIT( KMuiuBitmapFile, "z:muiu.MBM" );
+
+const TInt KMceUid = 0x100058C5;
+
+// MACROS
+// LOCAL CONSTANTS AND MACROS
+// MODULE DATA STRUCTURES
+// LOCAL FUNCTION PROTOTYPES
+// FORWARD DECLARATIONS
+
+// ============================ MEMBER FUNCTIONS ===============================
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::NewAccountL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TMsvId CIMSSettingsUi::NewAccountL(
+    TImumUiExitCodes& aExitCode,
+    CImumInSettingsData& aMailboxSettings,
+    CMsvSession& aMsvSession )
+    {
+    IMUM_STATIC_CONTEXT( CIMSSettingsUi::NewAccountL, 0, utils, KLogUi );
+
+    return NewAccountL( aExitCode,
+			aMailboxSettings,
+			aMsvSession,
+			EFalse );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::NewAccountL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C TMsvId CIMSSettingsUi::NewAccountL(
+    TImumUiExitCodes& aExitCode,
+    CImumInSettingsData& aMailboxSettings,
+    CMsvSession& aMsvSession,
+    TBool aDefaultWizOnly )
+    {
+    CEikApplication* app = reinterpret_cast<CAknViewAppUi*>(
+        CEikonEnv::Static()->EikAppUi())->Application();
+
+    TMsvId emailID = 0;
+    TInt err = KErrGeneral;
+    RBuf email;
+    email.Create( KIMSMaxEmailAddressSize );
+    CleanupClosePushL( email );
+
+    if( !aDefaultWizOnly )
+    	{
+    	// If tried to launch outside of MCE, external-wizard shouldn't be launched
+    	if ( app->AppDllUid() == TUid::Uid( KMceUid ) )
+    		{
+    		TRAP( err, LaunchExtWizardL( email, emailID ) );
+    		}
+    	}
+
+    // Check how the launch ended, if no external wizard was found
+    // err is set to KErrGeneral
+    if ( err == KErrCancel )
+    	{
+    	aExitCode = EImumUiNoChanges;
+    	}
+    // Red key pressed while in external-wizard
+    else if ( err == KLeaveExit )
+    	{
+    	aExitCode = EImumUiExit;
+    	}
+    else if ( err == KErrNone )
+    	{
+    	aExitCode = EImumUiExtWizardCreated;
+    	aMailboxSettings.SetAttr( TImumDaSettings::EKeyMailboxId, emailID );
+    	}
+    else
+    	{
+    	CAknInputBlock::NewLC();
+    	StartL(
+    			R_IMAS_SETTINGS_WIZARD_DIALOG,
+                aExitCode,
+                aMailboxSettings,
+                aMsvSession,
+                email );
+    	CleanupStack::PopAndDestroy(); // CAknInputBlock
+    	}
+
+    CleanupStack::PopAndDestroy(); // email
+
+    return emailID;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::EditAccountL
+// ----------------------------------------------------------------------------
+//
+EXPORT_C void CIMSSettingsUi::EditAccountL(
+    TImumUiExitCodes& aExitCode,
+    CImumInSettingsData& aMailboxSettings,
+    CMsvSession& aMsvSession )
+    {
+    IMUM_STATIC_CONTEXT( CIMSSettingsUi::EditAccountL, 0, utils, KLogUi );
+
+    TBufC<1> dummy; // CSI: 47 # Dummy TBuf.
+
+    StartL(
+        R_IMAS_SETTINGS_DIALOG,
+        aExitCode,
+        aMailboxSettings,
+        aMsvSession,
+        dummy );
+    }
+
+// ---------------------------------------------------------------------------
+// CIMSSettingsUi::StartL()
+// ---------------------------------------------------------------------------
+//
+void CIMSSettingsUi::StartL(
+    TInt aResource,
+    TImumUiExitCodes& aExitCode,
+    CImumInSettingsData& aMailboxSettings,
+    CMsvSession& aMsvSession,
+    const TDesC& aEmailAddress )
+    {
+    IMUM_STATIC_CONTEXT( CIMSSettingsUi::StartL, 0, utils, KLogUi );
+
+    // Create the dialog
+    CIMSSettingsUi* self =
+        new ( ELeave ) CIMSSettingsUi( aExitCode, aMailboxSettings );
+    CleanupStack::PushL( self );
+    self->SettingsConstructL( aResource, aMsvSession, aEmailAddress );
+    CleanupStack::Pop( self );
+
+    self->ExecuteLD( aResource );
+    }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::CIMSSettingsUi
+// ----------------------------------------------------------------------------
+//
+CIMSSettingsUi::CIMSSettingsUi(
+    TImumUiExitCodes& aExitCode,
+    CImumInSettingsData& aMailboxSettings )
+    :
+    iFlags( NULL ),
+    iExitCode( aExitCode ),
+    iMailboxSettings( aMailboxSettings ),
+    iListBox( NULL ),
+    iSettings( NULL ),
+    iResourceLoader( *iCoeEnv ),
+    iEmailAddress( NULL ),
+    iWizardContainer( NULL )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::CIMSSettingsUi, 0, KLogUi );
+
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::~CIMSSettingsUi()
+// ----------------------------------------------------------------------------
+//
+CIMSSettingsUi::~CIMSSettingsUi()
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::~CIMSSettingsUi, 0, KLogUi );
+
+    iResourceLoader.Close();
+    delete iSettings;
+    iSettings = NULL;
+
+    // Prevents CONE 8 panics.
+    if ( iFlags->Flag( EImumSettingsWizard ) )
+        {
+        // We created the listbox --> we delete it.
+        delete iListBox;
+        iListBox = NULL;
+        }
+    else
+        {
+        // Control function created the listbox
+        // --> we don't own it --> we don't delete it
+        iListBox = NULL;
+        }
+
+
+    delete iFlags;
+    iFlags = NULL;
+
+    delete iMailboxApi;
+    iMailboxApi = NULL;
+    delete iEmailAddress;
+    iEmailAddress = NULL;
+
+    // not owned:
+    iWizardContainer = NULL;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::SettingsConstructL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::SettingsConstructL(
+    const TInt aResource,
+    CMsvSession& aMsvSession,
+    const TDesC& aEmailAddress )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::SettingsConstructL, 0, KLogUi );
+
+    iEmailAddress = aEmailAddress.AllocL();
+
+    // Create connection to mailbox interface
+    iMailboxApi = CImumInternalApiImpl::NewL( &aMsvSession );
+
+    // Create flags object
+    iFlags = MsvEmailMtmUiFeatureUtils::EmailFeaturesLC( ETrue, ETrue );
+    CleanupStack::Pop( iFlags );
+
+    if ( aResource == R_IMAS_SETTINGS_WIZARD_DIALOG )
+        {
+        iFlags->SetFlag( EImumSettingsWizard );
+        iResourceMenuBar = R_IMAS_SETTINGS_WIZARD_MENUBAR;
+        }
+    else
+        {
+        iResourceMenuBar = R_IMAS_MENUBAR;
+        }
+
+    // Call the base ConstructL
+    ConstructL( iResourceMenuBar );
+
+    MsvEmailMtmUiUtils::LoadResourceFileL( iResourceLoader );
+    }
+
+// ---------------------------------------------------------------------------
+// From class .
+// CIMSSettingsUi::ExitCode()
+// ---------------------------------------------------------------------------
+//
+TImumUiExitCodes CIMSSettingsUi::ExitCode()
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::ExitCode, 0, KLogUi );
+
+    if ( iFlags->Flag( EImumSettingShouldClose ) )
+        {
+        return iFlags->Flag( EImumSettingSave ) ?
+            EImumUiSaveAndClose : EImumUiClose;
+        }
+    else if ( iFlags->Flag( EImumSettingShouldExit ) )
+        {
+        return iFlags->Flag( EImumSettingSave ) ?
+            EImumUiSaveAndExit : EImumUiExit;
+        }
+    else
+        {
+        __ASSERT_DEBUG(
+            EFalse, User::Panic( KIMSSettingsDialogPanic, KErrUnknown ) );
+        return EImumUiNoChanges;
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::OkToExitL
+// ----------------------------------------------------------------------------
+//
+TBool CIMSSettingsUi::OkToExitL( TInt aButtonId )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::OkToExitL, 0, KLogUi );
+
+    TBool allowQuit = EFalse;
+
+    // Exit not issued, forward the call to command processor
+    if ( !iFlags->Flag( EImumSettingShouldExit ) &&
+         !iFlags->Flag( EImumSettingShouldClose ) )
+        {
+        iSettings->ProcessCommandL( aButtonId );
+        }
+    else
+        {
+        // Should quit
+        allowQuit = iSettings->OkToExitL( aButtonId );
+
+        // Clear the flag after usage
+        iFlags->ClearFlag( EImumSettingQueryClose );
+
+        // If quit is allowed, store the settings, otherwise clear the flag
+        if ( allowQuit )
+            {
+            // Failing to store the settings should cause panic, to prevent
+            // the settings to stop into unwanted errors
+            TRAP_IGNORE( iSettings->StoreSettingsToAccountL(
+                iMailboxSettings ) );
+
+            // Set the exitcode
+            iExitCode = ExitCode();
+            }
+        else
+            {
+            // Clear the flags
+            iFlags->ClearFlag( EImumSettingShouldExit );
+            iFlags->ClearFlag( EImumSettingShouldClose );
+            }
+
+        // Exit, now
+        if ( allowQuit )
+            {
+            allowQuit = CAknDialog::OkToExitL( EAknSoftkeyCancel );
+            }
+        }
+
+    return allowQuit;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::HandleResourceChange
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::HandleResourceChange( TInt aType )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::HandleResourceChange, 0, KLogUi );
+
+    CAknDialog::HandleResourceChange( aType );
+
+    if ( iListBox && aType == KEikDynamicLayoutVariantSwitch )
+        {
+        TRect rect = Rect();
+        iListBox->SetRect( rect );
+        iListBox->HandleResourceChange( aType );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+//  CIMSSettingsUi::SetSizeAndPosition()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::SetSizeAndPosition( const TSize& aSize )
+    {
+    CAknDialog::SetSizeAndPosition( aSize );
+
+    // this is fail safe check because iWizardContainer is created
+    // in by framework not in constuctors
+    if ( iWizardContainer )
+        {
+        iWizardContainer->SetRect(Rect());
+        }
+
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::PreLayoutDynInitL
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::PreLayoutDynInitL()
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::PreLayoutDynInitL, 0, KLogUi );
+
+
+    // Get the pointer to titlepane
+    CEikStatusPane* sp =
+        static_cast<CAknAppUi*>(
+            iEikonEnv->EikAppUi() )->StatusPane();
+    CAknTitlePane* title = static_cast<CAknTitlePane*>(
+        sp->ControlL( TUid::Uid( EEikStatusPaneUidTitle ) ) );
+
+    CEikButtonGroupContainer& cba = ButtonGroupContainer();
+
+    // In case no email account created, start the wizard, otherwise
+    // launch the normal settings menu
+    if ( iFlags->Flag( EImumSettingsWizard ) )
+        {
+        // Prepare the dummy listbox, needed by CIMSSettingsWizard and its
+        // super classes.
+        iListBox = new (ELeave) CEikFormattedCellListBox;
+        iListBox->ConstructL( this, EAknListBoxSelectionList );
+
+        iSettings = CIMSSettingsWizard::NewL(
+            *this, *iMailboxApi,
+            *iListBox, *iWizardContainer, *title, cba, *iFlags, *iEmailAddress );
+
+        MAknsControlContext* context =
+            AknsDrawUtils::ControlContext( iListBox );
+
+        // iWizardContainer is created by framework not in constructors
+        // leave if it not created
+        if ( iWizardContainer == NULL )
+            {
+            User::Leave(0);
+            }
+        iWizardContainer->SetBackgroundContext( context );
+        }
+    else
+        {
+        // Prepare the listbox
+        iListBox = static_cast<CEikFormattedCellListBox*>(
+            Control( EImasCIDListBox ) );
+
+        //Check if mail settings are locked
+        if( iFlags->GF( EMailFeatureIdSapPolicyManagement ) )
+            {
+            LoadListboxIconArrayL();
+            }
+
+        iSettings = CIMSSettingsDialog::NewL(
+            *this, *iMailboxApi,
+            *iListBox, *title, cba, *iFlags, iMailboxSettings );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::LaunchExtWizardL
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::LaunchExtWizardL( TDes& aEmailAddress, TMsvId& aMailboxId )
+    {
+    CAiwGenericParamList* outParamList = CAiwGenericParamList::NewLC();
+
+    // Create AIW service handler
+    CAiwServiceHandler* serviceHandler = CAiwServiceHandler::NewLC();
+
+    // Attach the interest to the AIW framework.
+    serviceHandler->AttachL( R_AIW_EMAIL_CRITERIA );
+
+    serviceHandler->ExecuteServiceCmdL(
+        KAiwCmdSettingWizardEmailView,
+        serviceHandler->InParamListL(),
+        *outParamList );
+
+    TInt error = KErrGeneral;
+    if ( outParamList->Count() )
+        {
+        TInt paramPos = 0; //Just to send something
+        const TAiwGenericParam* errorParam =
+            outParamList->FindFirst( paramPos, EGenericParamError );
+
+        error = errorParam->Value().AsTInt32();
+        if ( error == KErrGeneral )
+            {
+            const TAiwGenericParam* emailParam = outParamList->FindFirst(
+                paramPos,
+                EGenericParamEmailAddress );
+			if ( emailParam )
+				{
+	            aEmailAddress = emailParam->Value().AsDes();
+				}
+            }
+        else if ( error == KErrNone )
+            {
+            const TAiwGenericParam* idParam = outParamList->FindNext( paramPos,
+                EGenericParamMessageItemMbox );
+            aMailboxId = idParam->Value().AsTInt32();
+            }
+        }
+
+    CleanupStack::PopAndDestroy( 2, outParamList ); // CSI: 47 # serviceHandler, outParamList.
+    serviceHandler = NULL;
+    outParamList = NULL;
+
+    User::LeaveIfError( error );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::ProcessCommandL
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::ProcessCommandL( TInt aCommandId )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::ProcessCommandL, 0, KLogUi );
+
+    // Forward the commands
+    CAknDialog::ProcessCommandL( aCommandId );
+
+    // Forward command either to wizard or setting dialog
+    iSettings->ProcessCommandL( aCommandId );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::OfferKeyEventL
+// ----------------------------------------------------------------------------
+//
+TKeyResponse CIMSSettingsUi::OfferKeyEventL(
+    const TKeyEvent& aKeyEvent,
+    TEventCode aType )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::OfferKeyEventL, 0, KLogUi );
+
+
+    // Offer the key event to existing mailbox setting handler
+    TKeyResponse ret = iSettings->OfferKeyEventL( aKeyEvent, aType );
+
+    if ( ret != EKeyWasConsumed )
+        {
+        ret = CAknDialog::OfferKeyEventL( aKeyEvent, aType );
+        }
+
+    return ret;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::DynInitMenuPaneL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::DynInitMenuPaneL(
+    TInt /* aResourceId */,
+    CEikMenuPane* aMenuPane )
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::DynInitMenuPaneL, 0, KLogUi );
+
+    if ( aMenuPane->NumberOfItemsInPane() == KIMSOptionsMenuItemCount )
+        {
+        aMenuPane->SetItemDimmed(
+            EAknSoftkeyOpen, !iFlags->Flag( EImumSettingPositionSubMenu ) );
+        aMenuPane->SetItemDimmed(
+            EAknSoftkeySelect, iFlags->Flag( EImumSettingPositionSubMenu ) );
+        aMenuPane->SetItemDimmed(
+            EAknCmdHelp, !iFlags->GF( EMailFeatureHelp ) );
+        }
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::DoQuitL()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::DoQuitL()
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::DoQuitL, 0, KLogUi );
+
+    // Start the exit process, the query is shown during TryExitL call
+    if ( iFlags->Flag( EImumSettingShouldExit ) )
+        {
+        TryExitL( EAknSoftkeyExit );
+        }
+    else
+        {
+        TryExitL( EAknSoftkeyCancel );
+        }
+    }
+
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::GetHelpContext()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::GetHelpContext( TCoeHelpContext& aContext ) const
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::GetHelpContext, 0, KLogUi );
+
+    iSettings->GetHelpContext( aContext );
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::LaunchHelp()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::LaunchHelp()
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::LaunchHelp, 0, KLogUi );
+
+    CCoeAppUi* appUi = static_cast<CCoeAppUi*>( ControlEnv()->AppUi() );
+    // codescanner gives false positive here for leaving function called in
+    // non-leaving function as it does not detect the trap in previous line
+    TRAP_IGNORE( HlpLauncher::LaunchHelpApplicationL( iEikonEnv->WsSession(),
+    		appUi->AppHelpContextL() ) ); // CSI: 42 # see comment above
+    }
+
+// ----------------------------------------------------------------------------
+// CFindItemDialog::CreateCustomControlL
+// from MEikDialogPageObserver
+// ----------------------------------------------------------------------------
+//
+SEikControlInfo CIMSSettingsUi::CreateCustomControlL( TInt aControlType )
+    {
+    SEikControlInfo info = { 0, 0, 0 };
+    if ( aControlType == EIMSWizardRichTxtEditorContainer )
+        {
+        iWizardContainer = new (ELeave) CIMSWizardControl;
+        info.iControl = iWizardContainer;
+        }
+    return info;
+    }
+
+// ----------------------------------------------------------------------------
+// CIMSSettingsUi::ExecFlags()
+// ----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::ExecFlags()
+    {
+    IMUM_CONTEXT( CIMSSettingsUi::ExecFlags, 0, KLogUi );
+    IMUM_IN();
+
+    // Execute commands requested by flags
+
+    // Show the menu, if asked
+    if ( iFlags->Flag( EImumSettingOpenOptionsMenu ) )
+        {
+        iFlags->ClearFlag( EImumSettingOpenOptionsMenu );
+        TMuiuDynSettingsType type = iSettings->CurrentItem()->iItemType;
+        iFlags->ChangeFlag(
+            EImumSettingPositionSubMenu, ( type == EMuiuDynSetMenuArray ) );
+
+        TRAP_IGNORE( DisplayMenuL() );
+        }
+    else if ( iFlags->Flag( EImumSettingShouldExit ) ||
+        iFlags->Flag( EImumSettingShouldClose ) )
+        {
+        // Exit has been issued
+        TRAP_IGNORE( iSettings->DoQuitL() );
+        }
+    else
+        {
+        // lint
+        }
+    IMUM_OUT();
+    }
+
+// -----------------------------------------------------------------------------
+// CIMSSettingsUi::LoadListboxIconArrayL
+//
+// (other items were commented in a header).
+// -----------------------------------------------------------------------------
+//
+void CIMSSettingsUi::LoadListboxIconArrayL()
+	{
+	IMUM_CONTEXT( CIMSSettingsUi::LoadListboxIconArrayL, 0, KLogUi );
+	IMUM_IN();
+
+	// Create array for listbox graphics
+	CAknIconArray* icons = new ( ELeave ) CAknIconArray( 1 ); // one icon in array
+	CleanupStack::PushL( icons );
+
+    TFileName bitmapfilepath;
+    TParse tp;
+    tp.Set( KMuiuBitmapFile, &KDC_APP_BITMAP_DIR, NULL );
+    bitmapfilepath.Copy( tp.FullName() );
+
+    CFbsBitmap* bitmap = NULL;
+    CFbsBitmap* mask = NULL;
+    TAknsItemID aid;
+
+    aid.Set( KAknsIIDQgnIndiSettProtectedAdd );
+    AknsUtils::CreateIconLC( AknsUtils::SkinInstance(),
+        aid, bitmap, mask, bitmapfilepath,
+        EMbmMuiuQgn_indi_sett_protected_add,
+        EMbmMuiuQgn_indi_sett_protected_add_mask );
+
+    icons->AppendL( CGulIcon::NewL( bitmap, mask ) );
+    CleanupStack::Pop( 2, bitmap ); // CSI: 47 # mask, bitmap
+    bitmap = NULL;
+    mask = NULL;
+
+    iListBox->ItemDrawer()->FormattedCellData()->SetIconArrayL( icons );
+
+    CleanupStack::Pop( icons );
+    icons = NULL;
+
+    IMUM_OUT();
+	}
+
+//  End of File