--- /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