emailuis/emailui/src/FreestyleEmailUiSettingsList.cpp
branchRCL_3
changeset 64 3533d4323edc
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/emailuis/emailui/src/FreestyleEmailUiSettingsList.cpp	Wed Sep 01 12:28:57 2010 +0100
@@ -0,0 +1,1822 @@
+/*
+* Copyright (c) 2007 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: This file implements classes CPIMSettingItemListDlg, CFsEmailSettingsList.
+*
+*/
+
+
+// SYSTEM INCLUDES
+#include "emailtrace.h"
+#include <barsread.h>
+#include <StringLoader.h>
+#include <aknlists.h>
+#include <eikenv.h>
+#include <AknIconArray.h>
+#include <eikclbd.h>
+#include <aknViewAppUi.h>
+#include <eikappui.h>
+#include <aknlistquerydialog.h>
+#include <e32cmn.h>
+#include <FreestyleEmailUi.rsg>
+
+#include "cfsmailclient.h"
+#include "cfsmailbox.h"
+#include <AknGlobalConfirmationQuery.h> // confirmation
+#include <freestyleemailui.mbg> // icons
+#include "esmailsettingspluginuids.hrh"
+#include "esmailsettingsplugin.h"
+
+#include <aknnotewrappers.h> // for note
+#include <AknDialog.h> // for settings dialog
+#include <aknsettingitemlist.h> // for settings dialog
+
+// 9.11.2009: Temporary flagging SYMBIAN_ENABLE_SPLIT_HEADERS
+// Can be removed when header structure change is complete
+#ifndef SYMBIAN_ENABLE_SPLIT_HEADERS
+#include <eikctrlstatus.h> // EEikControlHasEars
+#else
+#include <uikon/eikctrlstatus.h> // EEikControlHasEars
+#endif // SYMBIAN_ENABLE_SPLIT_HEADERS
+
+// LOCAL INCLUDES
+#include "FreestyleEmailUiConstants.h"
+#include "FreestyleEmailUiSettingsListView.h"
+#include "FreestyleEmailUiSettingsList.h"
+#include "FreestyleEmailUiSettings.hrh"
+#include "FreestyleEmailUiConstants.h"
+#include "FreestyleEmailUiAppui.h"
+#include "FreestyleEmailUiLauncherGridVisualiser.h"
+#include "FreestyleEmailUiShortcutBinding.h"
+#include "FreestyleEmailUiUtilities.h"
+#include "FSEmail.pan"
+
+// CONSTANTS
+
+
+//** PIM selection dialog **
+
+//----------------------------------------------------------------------------
+// CPIMSettingsItem extends
+//----------------------------------------------------------------------------
+class CPIMSettingsItem : public CAknEnumeratedTextPopupSettingItem
+    {
+    public:
+        void SetDefaultPIM( TInt aNewValue );
+    };
+
+void CPIMSettingsItem::SetDefaultPIM( TInt aNewValue )
+    {
+    FUNC_LOG;
+    SetInternalValue( aNewValue );
+    SetSelectedIndex( aNewValue );
+    }
+
+//----------------------------------------------------------------------------
+// CSettingItemList class declaration
+//----------------------------------------------------------------------------
+class CSettingItemList : public CAknSettingItemList
+    {
+public:
+    CSettingItemList();
+
+    virtual CAknSettingItem* CreateSettingItemL(TInt aIdentifier);
+
+    TInt                iItemId;
+    CSettingItemList*   iSettingsList;
+    };
+
+//----------------------------------------------------------------------------
+// constructor CSettingItemList
+//----------------------------------------------------------------------------
+CSettingItemList::CSettingItemList()
+    {
+    FUNC_LOG;
+    }
+//----------------------------------------------------------------------------
+// CreateSettingItemL
+//----------------------------------------------------------------------------
+CAknSettingItem* CSettingItemList::CreateSettingItemL( TInt aIdentifier )
+    {
+    FUNC_LOG;
+    CAknSettingItem* settingitem = NULL;
+
+    switch (aIdentifier)
+        {
+        case 0:
+            {
+            settingitem = new (ELeave) CAknEnumeratedTextPopupSettingItem( aIdentifier, iItemId );
+            }
+        break;
+        }
+
+    return settingitem;
+    }
+
+//----------------------------------------------------------------------------
+// CPIMSettingItemListDlg Class declaration
+//----------------------------------------------------------------------------
+class CPIMSettingItemListDlg : public CAknDialog
+    {
+    public:
+        CPIMSettingItemListDlg( CFSMailClient& aMailClient );
+        ~CPIMSettingItemListDlg();
+        virtual SEikControlInfo CreateCustomControlL(TInt aControlType);
+        virtual CPIMSettingItemListDlg::TFormControlTypes ConvertCustomControlTypeToBaseControlType(TInt aControlType) const;
+
+        virtual void PostLayoutDynInitL();
+        void AddPIMSettingItemsL( TInt aIndex );
+
+        virtual TBool OkToExitL( TInt aButtonId );
+
+    protected:
+        CSettingItemList*   iSettingsList;
+        CFSMailClient&      iMailClient;
+        RArray<TUid>        iPluginUids;
+    };
+
+//----------------------------------------------------------------------------
+// CPIMSettingItemListDlg
+//----------------------------------------------------------------------------
+CPIMSettingItemListDlg::CPIMSettingItemListDlg( CFSMailClient& aMailClient)
+: iMailClient(aMailClient)
+    {
+    FUNC_LOG;
+    }
+
+//----------------------------------------------------------------------------
+// CPIMSettingItemListDlg::~CPIMSettingItemListDlg
+//----------------------------------------------------------------------------
+CPIMSettingItemListDlg::~CPIMSettingItemListDlg( )
+    {
+    FUNC_LOG;
+    iPluginUids.Close();
+    }
+
+//----------------------------------------------------------------------------
+// CreateCustomControlL
+//----------------------------------------------------------------------------
+SEikControlInfo CPIMSettingItemListDlg::CreateCustomControlL(TInt /*aControlType*/)
+    {
+    FUNC_LOG;
+    iSettingsList = new (ELeave) CSettingItemList;
+
+    SEikControlInfo controlInfo;
+    controlInfo.iFlags = EEikControlHasEars;
+    controlInfo.iTrailerTextId = 0;
+    controlInfo.iControl = iSettingsList;
+    STATIC_CAST(CSettingItemList*, controlInfo.iControl)->SetContainerWindowL(*this);
+
+    return controlInfo;
+    }
+
+//----------------------------------------------------------------------------
+// ConvertCustomControlTypeToBaseControlType
+//----------------------------------------------------------------------------
+CPIMSettingItemListDlg::TFormControlTypes CPIMSettingItemListDlg::ConvertCustomControlTypeToBaseControlType(TInt /*aControlType*/) const
+    {
+    FUNC_LOG;
+    return EPopfieldDerived;
+    }
+
+//----------------------------------------------------------------------------
+// PostLayoutDynInitL
+// This safely loads the dialog with the data
+//----------------------------------------------------------------------------
+void CPIMSettingItemListDlg::PostLayoutDynInitL()
+    {
+    FUNC_LOG;
+    // there are only one item in list
+    AddPIMSettingItemsL( 0 );
+    }
+
+//----------------------------------------------------------------------------
+// AddPIMSettingItemsL
+//
+//----------------------------------------------------------------------------
+void CPIMSettingItemListDlg::AddPIMSettingItemsL( TInt aIndex )
+    {
+    FUNC_LOG;
+    CPIMSettingsItem* item = static_cast<CPIMSettingsItem*>(
+            (*iSettingsList->SettingItemArray())[aIndex] );
+    CArrayPtr<CAknEnumeratedText>* texts = item->EnumeratedTextArray();
+    texts->ResetAndDestroy();
+
+    // Read mailboxes ****************************
+    RPointerArray<CFSMailBox> mailBoxes;
+    CleanupResetAndDestroyClosePushL( mailBoxes );
+    TFSMailMsgId plugin;
+    iMailClient.ListMailBoxes( plugin, mailBoxes );
+
+    TUid PIMpluginId;
+    TInt mailBoxesCount = mailBoxes.Count();
+    for ( TInt i = 0; i < mailBoxesCount; ++i )
+        {
+        // get mailbox name and insert it to listBox
+        CFSMailBox* mailBox = mailBoxes[i];
+
+        // Insert mailbox to dialog list if can handle PIM sync
+        if ( mailBox->GetSettingsUid() != TUid::Null() )
+            {
+            TUid pluginUid = mailBox->GetSettingsUid();
+            CESMailSettingsPlugin* settingsPlugin =
+                CESMailSettingsPlugin::NewL( pluginUid );
+            CleanupStack::PushL(settingsPlugin);
+            HBufC* itemTxt =
+                settingsPlugin->LocalizedProtocolName().AllocLC();
+            TBool canHandlePIMSync = settingsPlugin->CanHandlePIMSync();
+
+            if ( canHandlePIMSync && PIMpluginId != pluginUid )
+                {
+                PIMpluginId = pluginUid;
+                iPluginUids.Append( pluginUid );
+                // takes ownership of itemTxt
+                texts->AppendL(
+                    new ( ELeave ) CAknEnumeratedText( i, itemTxt ) );
+                // set as default item if selected for PIM sync
+                if ( settingsPlugin->IsSelectedForPIMSync() )
+                    {
+                    item->SetDefaultPIM( i );
+                    }
+                CleanupStack::Pop( itemTxt );
+                }
+            else
+                {
+                CleanupStack::PopAndDestroy( itemTxt );
+                }
+            CleanupStack::PopAndDestroy();//settingsPlugin
+            }
+        }
+    item->UpdateListBoxTextL();
+
+    CleanupStack::PopAndDestroy( &mailBoxes );
+    }
+
+//----------------------------------------------------------------------------
+// OkToExitL
+//
+//----------------------------------------------------------------------------
+TBool CPIMSettingItemListDlg::OkToExitL( TInt aButtonId )
+    {
+    FUNC_LOG;
+    if ( aButtonId == EFSEmailUiPIMDialogBack )
+        return ETrue;
+
+    if ( aButtonId == EFSEmailUiPIMDialogChange )
+        {
+        const TInt current = iSettingsList->ListBox()->CurrentItemIndex();
+        iSettingsList->EditItemL( current, ETrue );
+        iSettingsList->StoreSettingsL();
+
+        for ( TInt i=0; i < iPluginUids.Count(); ++i )
+            {
+            CESMailSettingsPlugin* settingsPlugin = CESMailSettingsPlugin::NewL( iPluginUids[i] );
+            if ( iSettingsList->iItemId == i )
+                {
+                settingsPlugin->SelectForPIMSync( ETrue );
+                }
+            else
+                {
+                settingsPlugin->SelectForPIMSync( EFalse );
+                }
+            delete settingsPlugin;
+            settingsPlugin = NULL;
+            }
+        iPluginUids.Close();
+        }
+
+    return EFalse;
+    }
+
+
+//**** CFsEmailSettingsList ****
+
+// ---------------------------------------------------------------------------
+// c++ Constructor
+//
+// First phase of Symbian two-phase construction. Should not
+// contain any code that could leave.
+// ---------------------------------------------------------------------------
+//
+CFsEmailSettingsList::CFsEmailSettingsList(CFreestyleEmailUiAppUi& aAppUi, CFSMailClient& aMailClient, CFsEmailSettingsListView& aView )
+:iAppUi(aAppUi), iMailClient(aMailClient), iView( aView )
+    {
+    FUNC_LOG;
+
+    iListBox = NULL;
+    iCurrentSubView = EFsEmailSettingsMainListView;
+    iPIMListActivation = EFalse;
+    iPIMServiceSettingsSelection = EFalse;
+    iPIMSyncMailboxIndex = -1;
+    iPIMSyncCount = 0;
+    iSelectedSubListIndex = 0;
+    }
+
+// ---------------------------------------------------------------------------
+// c++ destructor
+//
+// Destroy child controls
+// ---------------------------------------------------------------------------
+//
+CFsEmailSettingsList::~CFsEmailSettingsList()
+    {
+    FUNC_LOG;
+
+    if ( iListBox )
+        {
+        delete iListBox;
+        iListBox = NULL;
+        }
+
+    if ( iLongTapDetector )
+    	{
+    	delete iLongTapDetector;
+    	iLongTapDetector = NULL;
+    	}
+    }
+
+// ---------------------------------------------------------------------------
+// Construct the control (first phase).
+//
+// @param aRect bounding rectangle
+// @param aParent owning parent, or NULL
+// @param aAppUi pointer to AppUi
+// @param aMailClient reference to freestyle mail client
+// ---------------------------------------------------------------------------
+//
+CFsEmailSettingsList* CFsEmailSettingsList::NewL(
+        const TRect& aRect,
+        const CCoeControl* aParent,
+        CFreestyleEmailUiAppUi& aAppUi,
+        CFSMailClient& aMailClient,
+        CFsEmailSettingsListView& aView )
+    {
+    FUNC_LOG;
+
+    CFsEmailSettingsList* self = CFsEmailSettingsList::NewLC(
+            aRect,
+            aParent,
+            aAppUi,
+            aMailClient,
+            aView );
+    CleanupStack::Pop( self );
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Construct the control (first phase).
+//
+// @param aRect bounding rectangle
+// @param aParent owning parent, or NULL
+// @param aAppUi pointer to AppUi
+// @param aMailClient reference to freestyle mail client
+// ---------------------------------------------------------------------------
+//
+CFsEmailSettingsList* CFsEmailSettingsList::NewLC(
+        const TRect& aRect,
+        const CCoeControl* aParent,
+        CFreestyleEmailUiAppUi& aAppUi,
+        CFSMailClient& aMailClient,
+        CFsEmailSettingsListView& aView )
+    {
+    FUNC_LOG;
+
+    CFsEmailSettingsList* self = new ( ELeave ) CFsEmailSettingsList(aAppUi, aMailClient, aView );
+    CleanupStack::PushL( self );
+    self->ConstructL( aRect, aParent);
+
+    return self;
+    }
+
+// ---------------------------------------------------------------------------
+// Construct the control (first phase).
+//
+// @param aRect bounding rectangle
+// @param aParent owning parent, or NULL
+// @param aAppUi pointer to AppUi
+// @param aMailClient reference to freestyle mail client
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::ConstructL(
+        const TRect& aRect,
+        const CCoeControl* aParent )
+    {
+    FUNC_LOG;
+
+    if ( aParent == NULL )
+        {
+        CreateWindowL();
+        }
+    else
+        {
+        SetContainerWindowL( *aParent );
+        }
+
+    iFocusControl = NULL;
+    InitializeControlsL();
+    SetRect( aRect );
+    ActivateL();
+    }
+
+// ---------------------------------------------------------------------------
+// Return the number of controls in the container (override)
+// @return count
+// ---------------------------------------------------------------------------
+//
+TInt CFsEmailSettingsList::CountComponentControls() const
+    {
+    FUNC_LOG;
+    return ( int ) ELastControl;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the control with the given index
+// @param aIndex Control index [0...n) (limited by #CountComponentControls)
+// @return Pointer to control
+// ---------------------------------------------------------------------------
+//
+CCoeControl* CFsEmailSettingsList::ComponentControl( TInt aIndex ) const
+    {
+    FUNC_LOG;
+
+    switch ( aIndex )
+        {
+        case EListBox:
+            return iListBox;
+        }
+
+    return NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// SizeChanged
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SizeChanged()
+    {
+    FUNC_LOG;
+
+    CCoeControl::SizeChanged();
+    LayoutControls();
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// Layout components as specified in the UI Designer
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::LayoutControls()
+    {
+    FUNC_LOG;
+
+    iListBox->SetExtent( TPoint( 0, 0 ), iListBox->MinimumSize() );
+
+    }
+
+// ---------------------------------------------------------------------------
+// Handle events from listbox.
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::HandleListBoxEventL( CEikListBox *aListBox, TListBoxEvent aEventType )
+    {
+    FUNC_LOG;
+
+    if ( aListBox )
+        {
+        if ( aEventType == EEventItemSingleClicked ||
+        	 aEventType == EEventEnterKeyPressed )
+            {
+            HandleUserSelectionsL();
+            //  Fix for EJSA-82HB3F, improves fix for EELN-7Y78DM
+            //  Update title pane, needed for touch support
+            HBufC* text = CreateTitlePaneTextLC();
+            iAppUi.SetTitlePaneTextL( *text );
+            CleanupStack::PopAndDestroy( text );
+            }
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// HandleUserSelectionsL
+//
+// check where we are in navigation and decide where to go
+// based on selection commands
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::HandleUserSelectionsL()
+    {
+    FUNC_LOG;
+    
+    iView.HideStylusPopUpMenu();
+
+    TInt index = iListBox->CurrentItemIndex();
+    TInt count = Count();
+
+    // If we are at the main level
+    if ( iCurrentSubView == EFsEmailSettingsMainListView )
+        {
+        // Open global settings
+        if ( index == 0 )
+            {
+            // activate global settings list
+            SetSelectedMainListIndex( index );
+            iAppUi.EnterFsEmailViewL( GlobalSettingsViewId );
+            }
+        // Open selected mailbox settings
+        else if ( index > 0 && index <= iMailboxCount  )
+            {
+            // set mailbox info
+            CFSMailBox* mailbox = GetMailboxByIndexLC( index-1 );
+            iSelectedAccountInfo = mailbox->GetId();
+            iSelectedPluginSettings = mailbox->GetSettingsUid();
+            CleanupStack::PopAndDestroy( mailbox );
+            // don't active pimlist subview, set flag to false
+            iPIMListActivation = EFalse;
+            if ( iSelectedPluginSettings == TUid::Null() )
+                {
+                #ifdef _DEBUG
+                CAknInformationNote* informationNote = new (ELeave) CAknInformationNote;
+                informationNote->ExecuteLD(_L("No plugin Uid found"));
+                #endif // _DEBUG
+                }
+            else
+                {
+                SetSelectedMainListIndex( index );
+                CreatePluginSubviewListL( iSelectedPluginSettings );
+                }
+            }
+        // Create PIM settings as a second level items
+        else if ( index > iMailboxCount )
+            {
+            CFSMailBox* mailbox = GetMailboxByIndexLC( iPIMSyncMailboxIndex );
+            iSelectedAccountInfo = mailbox->GetId();
+            iSelectedPluginSettings = mailbox->GetSettingsUid();
+            CleanupStack::PopAndDestroy( mailbox );
+            iPIMListActivation = ETrue;
+            SetSelectedMainListIndex( index );
+            CreatePluginPIMListL( iSelectedPluginSettings );
+            }
+        else // index < 0; this should never happen
+            {
+            __ASSERT_DEBUG( EFalse, Panic(EFSEmailUiUnexpectedValue) );
+            }
+        }
+
+    // In second level list, activate selected plugin settings view or
+    // open PIM service dialog if first item selected in PIM list
+    else
+        {
+        if ( iPIMServiceSettingsSelection && index == 0 )
+            {
+            // open PIM service settings selection dialog
+            OpenPIMServiceDialogL();
+            }
+        else
+            {
+            ActivateMailSettingsPluginSubViewL( index );
+            }
+        }
+
+    }
+
+// ---------------------------------------------------------------------------
+// Handle key events.
+// ---------------------------------------------------------------------------
+//
+TKeyResponse CFsEmailSettingsList::OfferKeyEventL(
+        const TKeyEvent& aKeyEvent,
+        TEventCode aType )
+    {
+    FUNC_LOG;
+
+    // Handle shortcuts
+    if ( aType == EEventKey )
+        {
+        TInt commandId = iAppUi.ShortcutBinding().CommandForShortcutKey( aKeyEvent, CFSEmailUiShortcutBinding::EContextSettings );
+        if ( commandId >= 0 )
+            {
+            iAppUi.View( SettingsViewId )->HandleCommandL( commandId );
+            }
+        }
+
+    if ( aKeyEvent.iCode == EKeyLeftArrow
+        || aKeyEvent.iCode == EKeyRightArrow )
+        {
+        // Listbox takes all events even if it doesn't use them
+        return EKeyWasNotConsumed;
+        }
+
+    if ( iFocusControl != NULL
+        && iFocusControl->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
+        {
+        return EKeyWasConsumed;
+        }
+
+    return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Initialize each control upon creation.
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::InitializeControlsL()
+    {
+    FUNC_LOG;
+
+    // Create list box control
+    iListBox = new ( ELeave ) CSettingsListType;
+    iListBox->SetContainerWindowL( *this );
+        {
+        TResourceReader reader;
+        iEikonEnv->CreateResourceReaderLC( reader, R_FS_EMAIL_SETTINGS_LIST_LIST_BOX );
+        iListBox->ConstructFromResourceL( reader );
+        CleanupStack::PopAndDestroy(); // reader internal state
+        }
+    // the listbox owns the items in the list and will free them
+    iListBox->Model()->SetOwnershipType( ELbmOwnsItemArray );
+
+    // setup the icon array so graphics-style boxes work
+    SetupListBoxIconsL();
+
+    // Create scrollbar
+    iListBox->CreateScrollBarFrameL();
+    iListBox->ScrollBarFrame()->SetScrollBarVisibilityL(
+        CEikScrollBarFrame::EOff,
+        CEikScrollBarFrame::EAuto );
+
+    iListBox->SetFocus( ETrue );
+    iFocusControl = iListBox;
+
+    // event listener this class
+    iListBox->SetListBoxObserver( this );
+
+    // Construct the long tap detector.
+	iLongTapDetector = CAknLongTapDetector::NewL( this );
+    }
+
+
+// ---------------------------------------------------------------------------
+// Handle global resource changes, such as scalable UI or skin events (override)
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::HandleResourceChange( TInt aType )
+    {
+    FUNC_LOG;
+
+    CCoeControl::HandleResourceChange( aType );
+    SetRect( iAvkonViewAppUi->View( SettingsViewId )->ClientRect() );
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFsEmailSettingsList::HandlePointerEventL()
+// From CCoeControl.
+// -----------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::HandlePointerEventL(
+	const TPointerEvent& aPointerEvent )
+	{
+    // Pass the event to the long tap detector.
+	iLongTapDetector->PointerEventL( aPointerEvent );
+
+	if ( !iLongTapEventConsumed )
+		{
+		// Call HandlePointerEventL() of the base class.
+		CCoeControl::HandlePointerEventL( aPointerEvent );
+		}
+	else
+		{
+		iLongTapEventConsumed = EFalse;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// Draw container contents.
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::Draw( const TRect& aRect ) const
+    {
+    FUNC_LOG;
+
+    CWindowGc& gc = SystemGc();
+    gc.Clear( aRect );
+
+    }
+
+
+// ---------------------------------------------------------------------------
+// Count
+//
+// Retuns number of item in list
+// ---------------------------------------------------------------------------
+//
+TInt CFsEmailSettingsList::Count()
+    {
+    FUNC_LOG;
+
+    CDesCArray* itemArray = static_cast<CDesCArray*>( iListBox->Model()->ItemTextArray() );
+    TInt count( itemArray->Count() );
+
+    return count;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the listbox pointer.
+// ---------------------------------------------------------------------------
+//
+CSettingsListType* CFsEmailSettingsList::ListBox()
+    {
+    FUNC_LOG;
+    return iListBox;
+    }
+
+// ---------------------------------------------------------------------------
+// Get the listbox pointer.
+// ---------------------------------------------------------------------------
+//
+TBool CFsEmailSettingsList::PIMSyncItemVisible()
+    {
+    FUNC_LOG;
+    return ( iPIMSyncMailboxIndex == -1 ) ? EFalse : ETrue;
+    }
+
+
+// -----------------------------------------------------------------------------
+// CFsEmailSettingsList::HandleLongTapEventL()
+// From MAknLongTapDetectorCallBack.
+// -----------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::HandleLongTapEventL(
+	const TPoint& aPenEventLocation,
+	const TPoint& aPenEventScreenLocation )
+	{
+	// Get the item index based on the position of the tap event.
+	TInt itemIndex( 0 );
+	TBool itemSelected =
+		iListBox->View()->XYPosToItemIndex( aPenEventLocation,
+											itemIndex );
+
+	if ( itemSelected && itemIndex >= 0 )
+		{
+		// Update the item index based on the position of the tap event.
+		iListBox->SetCurrentItemIndex( itemIndex );
+
+		if ( SelectedItemIsMailbox() )
+			{
+			iView.DisplayStylusPopUpMenu( aPenEventScreenLocation );
+			}
+		
+		iLongTapEventConsumed = ETrue;
+		}
+	}
+
+
+// ---------------------------------------------------------------------------
+// Create a list box item for plain text
+// ---------------------------------------------------------------------------
+//
+HBufC* CFsEmailSettingsList::CreateListBoxItemLC(
+        const TDesC& aMainText )
+    {
+    FUNC_LOG;
+
+    _LIT ( KStringHeader, "\t%S" );
+    HBufC* temp = HBufC::NewLC( aMainText.Length() + KStringHeader().Length() );
+    TPtr tempPtr = temp->Des();
+    tempPtr.Format( KStringHeader(), &aMainText );
+
+    return temp;
+    }
+
+// ---------------------------------------------------------------------------
+// Create a list box item for text and icon
+// ---------------------------------------------------------------------------
+//
+HBufC* CFsEmailSettingsList::CreateListBoxItemLC(
+        const TDesC& aMainText,
+        TInt aIconNum )
+    {
+    FUNC_LOG;
+
+    _LIT ( KStringHeader, "\t%S\t%d" );
+    HBufC* temp = HBufC::NewLC( aMainText.Length() + KStringHeader().Length() );
+    TPtr tempPtr = temp->Des();
+    tempPtr.Format( KStringHeader(), &aMainText, aIconNum );
+
+    return temp;
+    }
+
+// ---------------------------------------------------------------------------
+// Insert given item in a list
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::AppendItemL( TDesC& aListItem )
+    {
+    FUNC_LOG;
+
+    CDesCArray* itemArray = static_cast<CDesCArray*>(
+            iListBox->Model()->ItemTextArray() );
+    itemArray->AppendL( aListItem );
+    }
+
+// ---------------------------------------------------------------------------
+// Set up the list's icon array.
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetupListBoxIconsL()
+    {
+    FUNC_LOG;
+
+    CArrayPtr<CGulIcon>* icons = new (ELeave) CArrayPtrFlat<CGulIcon>( 3 );
+    iListBox->ItemDrawer()->ColumnData()->SetIconArray( icons );
+    }
+
+// ---------------------------------------------------------------------------
+// ProtocolBrandingIconL
+//
+// Sets mailbox protocol branding icon to list box by given id
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::ProtocolBrandingIconL( TFSMailMsgId aMailBoxId )
+    {
+    FUNC_LOG;
+
+    MFSMailBrandManager& brandManager = iAppUi.GetMailClient()->GetBrandManagerL();
+    CGulIcon* mailBoxIcon(0);
+    TRAPD( err, mailBoxIcon = brandManager.GetGraphicL( EFSMailboxIcon,  aMailBoxId ) );
+
+    if ( err != KErrNone || !mailBoxIcon )
+        {
+        CFbsBitmap* bitmap(0);
+        CFbsBitmap* mask(0);
+
+        TFileName iconFileName;
+        TFsEmailUiUtility::GetFullIconFileNameL( iconFileName );
+
+// <cmail> icons changed
+        AknIconUtils::CreateIconL( bitmap , mask , iconFileName,
+                EMbmFreestyleemailuiQgn_indi_cmail_drop_email_account,
+                EMbmFreestyleemailuiQgn_indi_cmail_drop_email_account_mask );
+// </cmail>
+        CleanupStack::PushL( bitmap );
+        CleanupStack::PushL( mask );
+
+        // create default mailbox icon from bitmaps
+        mailBoxIcon = CGulIcon::NewL( bitmap, mask );
+        CleanupStack::Pop( mask );
+        CleanupStack::Pop( bitmap );
+        }
+
+    CArrayPtr<CGulIcon>* icons = iListBox->ItemDrawer()->ColumnData()->IconArray();
+    CleanupStack::PushL( mailBoxIcon );
+    icons->AppendL( mailBoxIcon );
+    CleanupStack::Pop( mailBoxIcon );
+    }
+
+
+// ---------------------------------------------------------------------------
+// ClearListL
+//
+// Removes all items from list
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::ClearListL()
+    {
+    FUNC_LOG;
+
+    CDesCArray* itemArray = static_cast<CDesCArray*>(
+            iListBox->Model()->ItemTextArray() );
+    itemArray->Reset();
+    iListBox->ItemDrawer()->ColumnData()->IconArray()->ResetAndDestroy();
+    iListBox->HandleItemRemovalL();
+    }
+
+// ---------------------------------------------------------------------------
+// GetMailboxByIndexLC
+//
+// @return CFSMailBox pointer, ownership is transferred
+// ---------------------------------------------------------------------------
+//
+CFSMailBox* CFsEmailSettingsList::GetMailboxByIndexLC( const TInt& aIndex ) const
+    {
+    FUNC_LOG;
+
+    RPointerArray<CFSMailBox> mailBoxes;
+    CleanupResetAndDestroyClosePushL( mailBoxes );
+    mailBoxes.Reset();
+    TFSMailMsgId plugin;
+    iMailClient.ListMailBoxes( plugin, mailBoxes );
+    CFSMailBox* mailbox = NULL;
+    if ( aIndex > -1 && aIndex < mailBoxes.Count() )
+        {
+        mailbox = iMailClient.GetMailBoxByUidL( mailBoxes[aIndex]->GetId() );
+        }
+    User::LeaveIfNull( mailbox );
+    CleanupStack::PopAndDestroy( &mailBoxes );
+    CleanupStack::PushL( mailbox );
+    return mailbox;
+    }
+
+// ---------------------------------------------------------------------------
+// GetMailBoxByIdL
+//
+// @return CFSMailBox pointer, ownership is transferred
+// ---------------------------------------------------------------------------
+//
+CFSMailBox* CFsEmailSettingsList::GetMailBoxByIdL( const TUint& aMailboxId ) const
+    {
+    FUNC_LOG;
+
+    RPointerArray<CFSMailBox> mailBoxes;
+    CleanupResetAndDestroyClosePushL( mailBoxes );
+    mailBoxes.Reset();
+    TFSMailMsgId plugin;
+    iMailClient.ListMailBoxes( plugin, mailBoxes );
+    CFSMailBox* mailbox = NULL;
+    for ( TInt i = 0; i < mailBoxes.Count(); ++i )
+        {
+         if ( mailBoxes[i]->GetId().Id() == aMailboxId )
+             {
+             TRAP_IGNORE( mailbox = iMailClient.GetMailBoxByUidL( mailBoxes[i]->GetId() ) );
+             break;
+             }
+        }
+    CleanupStack::PopAndDestroy( &mailBoxes );
+    return mailbox;
+    }
+
+// ---------------------------------------------------------------------------
+// GetMailboxCountL
+//
+// @return TInt amount of mailboxes
+// ---------------------------------------------------------------------------
+//
+TInt CFsEmailSettingsList::GetMailboxCountL() const
+    {
+    FUNC_LOG;
+
+    RPointerArray<CFSMailBox> mailBoxes;
+    CleanupResetAndDestroyClosePushL( mailBoxes );
+    mailBoxes.Reset();
+    TFSMailMsgId plugin;
+    iMailClient.ListMailBoxes( plugin, mailBoxes );
+    TInt count = mailBoxes.Count();
+    CleanupStack::PopAndDestroy( &mailBoxes );
+
+    return count;
+    }
+
+// ---------------------------------------------------------------------------
+// CreateAccountListL
+// Creates mailbox list for settings
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::CreateAccountListL()
+    {
+    FUNC_LOG;
+
+    LoadAccountsToListL();
+
+    // we are on first level of the list box
+    iCurrentSubView = EFsEmailSettingsMainListView;
+
+    }
+
+// ---------------------------------------------------------------------------
+// Get2ndLevelListIndicator
+// Indicates the state of list. Are the "second level" of items displayed
+// @return TBool
+// ---------------------------------------------------------------------------
+//
+TBool CFsEmailSettingsList::Get2ndLevelListIndicator()
+    {
+    FUNC_LOG;
+    return ( iCurrentSubView != EFsEmailSettingsMainListView );
+    }
+
+// ---------------------------------------------------------------------------
+// SetPluginSettingsUid
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetPluginSettingsUid( const TUid& aPluginId )
+    {
+    FUNC_LOG;
+    iSelectedPluginSettings = aPluginId;
+    }
+
+// ---------------------------------------------------------------------------
+// GetSettingsPluginL
+// Creates needed settings plugin instance and register it to view stack
+// Ownership is not transferred
+// @return CESMailSettingsPlugin*
+// ---------------------------------------------------------------------------
+//
+CESMailSettingsPlugin* CFsEmailSettingsList::GetSettingsPluginL( TUid aUid )
+    {
+    FUNC_LOG;
+    CESMailSettingsPlugin* settingsPlugin =
+        static_cast<CESMailSettingsPlugin*>( iAppUi.View( aUid ) );
+
+    if ( settingsPlugin == NULL )
+        {
+        TInt err( KErrNone );
+
+        TRAP( err, settingsPlugin = CESMailSettingsPlugin::NewL( aUid ););
+        if ( err == KErrNoMemory )
+            {
+            User::Leave( err );
+            }
+        else if ( err == KErrNone )
+            {
+            CleanupStack::PushL(settingsPlugin);
+            iAppUi.AddViewL( settingsPlugin );
+            CleanupStack::Pop(settingsPlugin);
+            }
+        else
+            {
+            }
+        }
+
+    return settingsPlugin;
+    }
+
+
+// ---------------------------------------------------------------------------
+// SetSelectedSubListIndex
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetSelectedSubListIndex( TInt aIndex )
+    {
+    FUNC_LOG;
+    if ( aIndex >= 0 )
+        {
+        iSelectedSubListIndex = aIndex;
+        }
+    else
+        {
+        iSelectedSubListIndex = 0;
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetSelectedMainListIndex
+// Saves mailbox list index to parent when settings plugin view is activated
+// because this container is destroyed during the view switch
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetSelectedMainListIndex( TInt aIndex )
+    {
+    FUNC_LOG;
+    CFsEmailSettingsListView* parent =
+        static_cast<CFsEmailSettingsListView*>( iAppUi.View( SettingsViewId ) );
+
+    if ( aIndex >= 0 )
+        {
+        parent->SetSelectedMainListIndex( aIndex );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// GetSelectedMainListIndex
+// Returns latest mailbox list item index which is saved in parent view
+// @return void
+// ---------------------------------------------------------------------------
+//
+TInt CFsEmailSettingsList::GetSelectedMainListIndex() const
+    {
+    FUNC_LOG;
+    CFsEmailSettingsListView* parent =
+        static_cast<CFsEmailSettingsListView*>( iAppUi.View( SettingsViewId ) );
+
+    TInt index = parent->GetSelectedMainListIndex();
+
+    if ( index < 0 )
+        {
+        index = 0;
+        }
+
+    return index;
+    }
+
+// ---------------------------------------------------------------------------
+// LoadAccountsToListL
+// Loads global settings and account names to list dynamically
+// from fs mail client
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::LoadAccountsToListL()
+    {
+    FUNC_LOG;
+
+    // Remove current items
+    ClearListL();
+    // Insert Global settings as a first item
+    HBufC* localizedText = StringLoader::LoadLC(
+            R_FS_EMAIL_SETTINGS_LIST_GLOBAL_SETTINGS_TXT );
+    HBufC* listItemBuffer = CreateListBoxItemLC( *localizedText );
+    AppendItemL( *listItemBuffer );
+    CleanupStack::PopAndDestroy( 2, localizedText ); // localizedText listItemBuffer
+
+    // get mailboxes from every plugin
+    RPointerArray<CFSMailBox> mailBoxes;
+    CleanupResetAndDestroyClosePushL( mailBoxes );
+    mailBoxes.Reset();
+    TFSMailMsgId plugin;
+    iMailClient.ListMailBoxes( plugin, mailBoxes );
+
+    TUid PIMpluginUid = TUid::Null();
+    // Set initial pim sync values
+    iPIMSyncCount = 0;
+    iPIMSyncMailboxIndex = KErrNotFound;
+
+    iMailboxCount = mailBoxes.Count();
+
+
+    for ( TInt i=0 ; i < iMailboxCount ; ++i )
+        {
+        CFSMailBox* mailBox = mailBoxes[i];
+
+        // get protocol icon index
+        ProtocolBrandingIconL( mailBox->GetId() );
+
+        // get mailbox name and insert it to listBox
+        TPtrC mbName = GetMailBoxNameL( *mailBox );
+        listItemBuffer = CreateListBoxItemLC( mbName, i );
+        AppendItemL( *listItemBuffer );
+        CleanupStack::PopAndDestroy( listItemBuffer ); // listItemBuffer
+
+        // Does mailbox have settings plugin
+        if ( mailBox->GetSettingsUid() != TUid::Null() )
+            {
+            // load settings ECOM plugin
+            TUid pluginUid = mailBox->GetSettingsUid();
+            CESMailSettingsPlugin* tempPlugin;
+            tempPlugin = GetSettingsPluginL( pluginUid ); // ownership not transferred
+
+            if ( tempPlugin != NULL )
+                {
+                // check if mailboxes can handle PIM sync
+                TBool canHandlePIMSync = tempPlugin->CanHandlePIMSync();
+                if ( canHandlePIMSync && PIMpluginUid != pluginUid )
+                    {
+                    PIMpluginUid = pluginUid;
+                    ++iPIMSyncCount;
+                    if ( tempPlugin->IsSelectedForPIMSync() )
+                        {
+                        iPIMSyncMailboxIndex = i;
+                        }
+                    // if protocol supports PIM sync, but is not selected yet
+                    if ( iPIMSyncCount > 0 && iPIMSyncMailboxIndex == -1 )
+                        {
+                        iPIMSyncMailboxIndex = i;
+                        }
+                    }
+                }
+            }
+        else
+            {
+            }
+        }
+    CleanupStack::PopAndDestroy( &mailBoxes );
+
+    // if one of the mailboxes can handle PIM sync
+    // display PIM settings item in list.
+    if ( iPIMSyncCount > 0 )
+        {
+        HBufC* text2 = StringLoader::LoadLC( R_FS_EMAIL_SETTINGS_LIST_PIM_SETTINGS_TXT );
+        listItemBuffer = CreateListBoxItemLC( *text2 );
+        AppendItemL( *listItemBuffer );
+        CleanupStack::PopAndDestroy( 2, text2 ); // text2 listItemBuffer
+        }
+
+    // update list
+    iListBox->HandleItemAdditionL();
+    if ( GetSelectedMainListIndex() > iListBox->BottomItemIndex() )
+        {
+        iListBox->SetCurrentItemIndex( 0 ) ;
+        }
+    else if ( GetSelectedMainListIndex() < 0 )
+        {
+        iListBox->SetCurrentItemIndex( 0 ) ;
+        }
+    else
+        {
+        iListBox->SetCurrentItemIndex( GetSelectedMainListIndex() );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// DisplayCreateMailboxNoteIfNeededL
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::DisplayCreateMailboxNoteIfNeededL()
+    {
+    FUNC_LOG;
+    RPointerArray<CFSMailBox> mailBoxes;
+    CleanupResetAndDestroyClosePushL( mailBoxes );
+    mailBoxes.Reset();
+    TFSMailMsgId plugin;
+    iMailClient.ListMailBoxes( plugin, mailBoxes );
+
+    // display "create mailbox" query if no mailboxes defined
+    TInt mailboxCount = mailBoxes.Count();
+    CleanupStack::PopAndDestroy( &mailBoxes );
+
+    // Display query if count == zero
+    if ( mailboxCount == 0 )
+        {
+        if ( TFsEmailUiUtility::ShowConfirmationQueryL( R_FS_EMAIL_SETTINGS_ADD_MAILBOX_TXT ) )
+              {
+              AddAccountL();
+              }
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CreatePluginSubviewListL
+// Fill list with captions returned by settings ECOM plugin
+// @param aPluginId implementation TUid of the settings ECom plugin
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::CreatePluginSubviewListL( const TUid& aPluginId )
+    {
+    FUNC_LOG;
+
+    // Remove items
+    ClearListL();
+
+    // change list content to account specific settings
+    HBufC *listString = NULL;
+
+    // get pointer to plugin settings that user selected
+    iSelectedPluginSettings = aPluginId;
+    CESMailSettingsPlugin* settingsPlugin = GetSettingsPluginL(
+        iSelectedPluginSettings );
+
+    // check do we want to load long or short caption depending on screen size
+    TBool longCaption = EFalse;
+    if ( Rect().Width() > 240 )
+        {
+        longCaption = ETrue;
+        }
+
+    TInt subViewCount( 0 );
+    if ( settingsPlugin != NULL )
+        {
+        subViewCount = settingsPlugin->MailSettingsSubviewCount();
+        }
+    else
+        {
+        }
+
+    // load setting view names to list
+    TInt index = 0;
+    if ( subViewCount > 0 )
+        {
+        while ( index < subViewCount )
+            {
+            TPtrC subViewCaption = settingsPlugin->MailSettingsSubviewCaption(
+                    iSelectedAccountInfo, index, longCaption );
+            listString = CreateListBoxItemLC( subViewCaption );
+            AppendItemL( *listString );
+            CleanupStack::PopAndDestroy( listString );
+            ++index;
+            }
+        iListBox->HandleItemAdditionL();
+        iListBox->SetCurrentItemIndex( iSelectedSubListIndex );
+        }
+    else
+        {
+        // activate POP/IMAP view
+        ActivateMailSettingsPluginSubViewL( -1 );
+        }
+    iCurrentSubView = EFsEmailSettingsMailboxView;
+    }
+
+// ---------------------------------------------------------------------------
+// CreatePluginPIMListL
+// Fill list with PIM captions returned by settings ECOM plugin
+// This list is displayed only with Intellisync or Mfe account
+// @param aPluginId implementation TUid of the settings ECom plugin
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::CreatePluginPIMListL( const TUid& aPluginId )
+    {
+    FUNC_LOG;
+
+    // Remove items
+    ClearListL();
+
+    // change list content to account specific settings
+    TInt index = 0;
+    HBufC *listString = NULL;
+
+    // get pointer to plugin settings that user selected
+    iSelectedPluginSettings = aPluginId;
+    CESMailSettingsPlugin* settingsPlugin = GetSettingsPluginL(
+        iSelectedPluginSettings );
+
+    // When we return from the plugin PIM settings we don't know if there is
+    // one or two mailboxes that contains PIM settings.
+    // So we veed to check that here:
+    if(iPIMSyncCount == 0)
+        {
+        TUid PIMpluginUid = TUid::Null();
+        // get mailboxes from every plugin
+        RPointerArray<CFSMailBox> mailBoxes;
+        CleanupResetAndDestroyClosePushL( mailBoxes );
+        mailBoxes.Reset();
+        TFSMailMsgId plugin;
+        iMailClient.ListMailBoxes( plugin, mailBoxes );
+
+        for ( TInt i = 0; i < mailBoxes.Count(); ++i )
+                {
+                // get mailbox name and insert it to listBox
+                CFSMailBox* mailBox = mailBoxes[i];
+                // Does mailbox have settings plugin
+                if ( mailBox->GetSettingsUid() != TUid::Null() )
+                    {
+                    // load settings ECOM plugin
+                    TUid pluginUid = mailBox->GetSettingsUid();
+                    CESMailSettingsPlugin* tempPlugin;
+                    tempPlugin = GetSettingsPluginL( pluginUid ); // ownership not transferred
+
+                    if ( tempPlugin != NULL )
+                        {
+                        // check if mailboxes can handle PIM sync
+                        TBool canHandlePIMSync = tempPlugin->CanHandlePIMSync();
+                        if ( canHandlePIMSync && PIMpluginUid != pluginUid )
+                            {
+                            ++iPIMSyncCount;
+                            }
+                        }
+                    }
+                }
+        CleanupStack::PopAndDestroy( &mailBoxes );
+        }
+
+    // If there are more than one plugin that is capable of syncing personal
+    // information, then user needs to select which is used
+    if ( iPIMSyncCount > 1 )
+        {
+        HBufC* text = StringLoader::LoadLC( R_FS_EMAIL_SETTINGS_PIM_SERVICE_TXT );
+        listString = CreateListBoxItemLC( *text );
+        AppendItemL( *listString );
+        CleanupStack::PopAndDestroy( 2, text ); // text, listString
+        iPIMServiceSettingsSelection = ETrue;
+        }
+
+
+    // check do we want to load long or short caption depending on screen size
+    TBool longCaption = EFalse;
+    if ( Rect().Width() > 240 )
+        {
+        longCaption = ETrue;
+        }
+
+    TInt subViewCount(0);
+    if ( settingsPlugin )
+        {
+        subViewCount = settingsPlugin->PIMSettingsSubviewCount();
+        }
+
+    // load setting view names to list
+    while ( subViewCount > index )
+        {
+        TPtrC subViewCaption = settingsPlugin->PIMSettingsSubviewCaption(
+                iSelectedAccountInfo, index, longCaption );
+        listString = CreateListBoxItemLC( subViewCaption );
+        AppendItemL( *listString );
+        CleanupStack::PopAndDestroy( listString ); // listString
+        ++index;
+        }
+
+    iListBox->HandleItemAdditionL();
+    iListBox->SetCurrentItemIndex( iSelectedSubListIndex );
+    iCurrentSubView = EFsEmailSettingsPimView;
+    }
+
+
+// ---------------------------------------------------------------------------
+// SetDefaultPIMAccountL
+// Set account specific variables point to a selected PIM account
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetDefaultPIMAccountL()
+    {
+    FUNC_LOG;
+    CFSMailBox* mailbox;
+
+    for ( TInt i = 0 ; i < iMailboxCount ; ++i )
+        {
+        mailbox = GetMailboxByIndexLC(i);
+        TUid pluginUid = mailbox->GetSettingsUid();
+        CESMailSettingsPlugin* tempPlugin;
+        tempPlugin = GetSettingsPluginL( pluginUid );
+        if ( tempPlugin != NULL
+             && tempPlugin->CanHandlePIMSync()
+             && tempPlugin->IsSelectedForPIMSync() )
+            {
+            SetSelectedAccountInfo( mailbox->GetId() );
+            iSelectedPluginSettings = pluginUid;
+            }
+        CleanupStack::PopAndDestroy( mailbox );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// GetMailBoxNameL
+// Get text pointer with the (possibly branded) mailbox name. Mailbox or
+// framework owns the pointed data.
+// ---------------------------------------------------------------------------
+//
+TPtrC CFsEmailSettingsList::GetMailBoxNameL( const CFSMailBox& aMailBox ) const
+    {
+    FUNC_LOG;
+    // Branded mailbox name is nowadays set in new mailbox event
+    // handling, so we don't need to use brand manager here anymore.
+    const TDesC& name = aMailBox.GetName();
+
+    TPtrC ret;
+    ret.Set( name );
+
+    return ret;
+    }
+
+// ---------------------------------------------------------------------------
+// ActivateMailSettingsPluginSubViewL
+// Activate selected mail settings plugin subview
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::ActivateMailSettingsPluginSubViewL( TInt aSubViewId )
+    {
+    FUNC_LOG;
+
+    TUid messageId;
+    CESMailSettingsPlugin::TSubViewActivationData activationData;
+    TInt subViewId = iListBox->CurrentItemIndex();
+    activationData.iAccount = iSelectedAccountInfo;
+    activationData.iSubviewId = aSubViewId;
+    activationData.iLaunchedOutsideFSEmail = EFalse;
+
+    if ( iPIMListActivation )
+        {
+        messageId = TUid::Uid( CESMailSettingsPlugin::EActivatePIMSettingsSubview );
+        // use account selected for PIM sync
+        SetDefaultPIMAccountL();
+        iPIMListActivation = EFalse;
+        // pass information to the plugin side that we were in the personal information management subview
+        activationData.iPimAccount = ETrue;
+        }
+    else
+        {
+        messageId = TUid::Uid( CESMailSettingsPlugin::EActivateMailSettingsSubview );
+        activationData.iPimAccount = EFalse;
+        }
+
+    const TPckgBuf<CESMailSettingsPlugin::TSubViewActivationData>
+        pluginMessagePkg( activationData );
+    TInt errNo( KErrNone );
+    TRAP( errNo, iAppUi.EnterPluginSettingsViewL(
+            iSelectedPluginSettings, messageId, pluginMessagePkg ); );
+    if ( errNo != KErrNone )
+        {
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// SetSelectedAccountInfo
+// Set given account info as a member data
+// @param aAccountInfo
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetSelectedAccountInfo( const TFSMailMsgId& aAccountInfo )
+    {
+    FUNC_LOG;
+
+    iSelectedAccountInfo = aAccountInfo;
+
+    }
+
+// ---------------------------------------------------------------------------
+// AddAccount
+// Handles new account creation with wizard
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::AddAccountL()
+    {
+    FUNC_LOG;
+
+    iAppUi.LaunchWizardL();
+
+    }
+
+// ---------------------------------------------------------------------------
+// RemoveAccountL()
+// Handle account removal from fs mail client.
+// ---------------------------------------------------------------------------
+//
+TBool CFsEmailSettingsList::RemoveAccountL()
+    {
+    FUNC_LOG;
+    TBool wasDeleted( EFalse );
+
+    // Make sure that FSMailServer is running, so that the mailbox is removed
+    // also from MCE. Let's do it already here, so that the server has some
+    // time to launch itself before the actual mailbox deletion happens.
+    TFsEmailUiUtility::EnsureFsMailServerIsRunning( iEikonEnv->WsSession() );
+
+    // if item index is 0 then we are on global settings item
+    // this shouldn't be happening, but just in case
+    iDeletedIndex = iListBox->CurrentItemIndex();
+
+    if ( iDeletedIndex == 0 )
+        {
+        return EFalse;
+        }
+
+    // get mailbox
+    CFSMailBox* mailBox = GetMailboxByIndexLC(iDeletedIndex-1);
+    CAknQueryDialog* queryNote = new ( ELeave ) CAknQueryDialog();
+    CleanupStack::PushL( queryNote );
+
+    // load remove mailbox text from resource
+    HBufC* question = StringLoader::LoadLC(
+           R_FS_EMAIL_SETTINGS_REMOVE_MAILBOX_TXT,
+           mailBox->GetName() );
+
+    queryNote->SetPromptL( *question );
+    CleanupStack::PopAndDestroy( question );
+    CleanupStack::Pop( queryNote );
+
+    // launch note and check answer
+    if ( queryNote->ExecuteLD( R_FSEMAIL_QUERY_DIALOG ) )
+        {
+        // check if protocol supports delete
+        if ( mailBox->HasCapability( EFSMBoxCapaCanBeDeleted ) )
+            {
+            // start wait note
+            iWaitDialog = new (ELeave) CAknWaitDialog(
+                    (REINTERPRET_CAST(CEikDialog**, &iWaitDialog)), ETrue );
+            iWaitDialog->PrepareLC( R_FS_WAIT_NOTE_REMOVING_MAILBOX );
+            iWaitDialog->SetCallback( this );
+            iWaitDialog->RunLD();
+
+            //emailindicator handling, is removed from 9.2
+            //TRAP_IGNORE(TFsEmailStatusPaneIndicatorHandler::StatusPaneMailIndicatorHandlingL( mailBox->GetId().Id()));
+            
+            // delete mailbox and wait event (RequestResponseL)
+            iDeleteMailboxId = iMailClient.DeleteMailBoxByUidL( mailBox->GetId(), *this );
+            wasDeleted = ETrue;
+            }
+        }
+    CleanupStack::PopAndDestroy(); // mailBox
+    return wasDeleted;
+    }
+
+
+// ---------------------------------------------------------------------------
+// RequestResponseL
+// handles request state from mail client
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::RequestResponseL( TFSProgress /*aEvent*/, TInt /*aRequestId*/ )
+    {
+    FUNC_LOG;
+    if( iWaitDialog )
+        {
+        iWaitDialog->ProcessFinishedL();
+        // refresh settings mailboxlist
+        if ( GetSelectedMainListIndex() > 0 )
+            {
+            SetSelectedMainListIndex( GetSelectedMainListIndex()-1 );
+            }
+        else
+            {
+            SetSelectedMainListIndex( 0 );
+            }
+
+        LoadAccountsToListL();
+        // refresh launcher grid
+        CFSEmailUiLauncherGridVisualiser* grid =
+            static_cast<CFSEmailUiLauncherGridVisualiser*>( iAppUi.View( AppGridId ) );
+        grid->RefreshLauncherViewL();
+        }
+    iWaitDialog = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// DialogDismissedL
+// called when wait has ended
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::DialogDismissedL( TInt /*aButtonId */ )
+    {
+    FUNC_LOG;
+    iWaitDialog = NULL;
+    }
+
+// ---------------------------------------------------------------------------
+// OpenPIMServiceDialog
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::OpenPIMServiceDialogL()
+    {
+    FUNC_LOG;
+    CPIMSettingItemListDlg* dlg = new (ELeave) CPIMSettingItemListDlg( iMailClient );
+    dlg->ExecuteLD( R_FS_PIMSETTINGITEMLIST_DIALOG );
+    }
+
+// ---------------------------------------------------------------------------
+// SetPimListActivation
+// @return void
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::SetPimListActivation(TBool aActivation)
+    {
+    FUNC_LOG;
+    iPIMListActivation = aActivation;
+    }
+
+// ---------------------------------------------------------------------------
+// Creates and passes ownership of title pane text appropriate for the current
+// view
+// ---------------------------------------------------------------------------
+//
+HBufC* CFsEmailSettingsList::CreateTitlePaneTextLC() const
+    {
+    FUNC_LOG;
+    HBufC* text = NULL;
+
+    switch ( iCurrentSubView )
+        {
+        case EFsEmailSettingsMailboxView:
+            {
+            // Use mailbox name as title pane text in the mailbox view
+            TInt curMailBoxIdx = GetSelectedMainListIndex()-1;
+            if ( curMailBoxIdx < 0 )
+                {
+                text = StringLoader::LoadLC( R_FS_EMAIL_SETTINGS_TITLE );
+                break;
+                }
+            CFSMailBox* mailBox = GetMailboxByIndexLC( curMailBoxIdx );
+            TPtrC mailBoxName = GetMailBoxNameL( *mailBox );
+            text = mailBoxName.AllocL();
+            CleanupStack::PopAndDestroy( mailBox );
+            CleanupStack::PushL( text );
+            }
+            break;
+        case EFsEmailSettingsPimView:
+            {
+            text = StringLoader::LoadLC( R_FS_EMAIL_PIM_SETTINGS_TITLE );
+            }
+            break;
+        case EFsEmailSettingsMainListView:
+        default:
+            {
+            text = StringLoader::LoadLC( R_FS_EMAIL_SETTINGS_TITLE );
+            }
+            break;
+        }
+
+    return text;
+    }
+
+// ---------------------------------------------------------------------------
+// Move list focus to top
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::GoToTop()
+    {
+    FUNC_LOG;
+    TInt count = iListBox->Model()->NumberOfItems();
+    if ( count )
+        {
+        iListBox->SetCurrentItemIndexAndDraw( 0 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Move list focus to bottom
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::GoToBottom()
+    {
+    FUNC_LOG;
+    TInt count = iListBox->Model()->NumberOfItems();
+    if ( count )
+        {
+        iListBox->SetCurrentItemIndexAndDraw( count-1 );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Move selector one page up
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::PageUp()
+    {
+    FUNC_LOG;
+    TInt count = iListBox->Model()->NumberOfItems();
+    if ( count )
+        {
+        TInt itemsOnPage = ListBox()->BottomItemIndex() - ListBox()->TopItemIndex();
+        TInt currentIdx = ListBox()->CurrentItemIndex();
+        TInt newIdx = Max( 0, currentIdx - itemsOnPage );
+        ListBox()->SetCurrentItemIndexAndDraw( newIdx );
+        }
+    }
+
+// ---------------------------------------------------------------------------
+// Move selector one page down
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::PageDown()
+    {
+    FUNC_LOG;
+    TInt count = ListBox()->Model()->NumberOfItems();
+    if ( count )
+        {
+        TInt itemsOnPage = ListBox()->BottomItemIndex() - ListBox()->TopItemIndex();
+        TInt currentIdx = ListBox()->CurrentItemIndex();
+        TInt newIdx = Min( count-1, currentIdx + itemsOnPage );
+        ListBox()->SetCurrentItemIndexAndDraw( newIdx );
+        }
+    }
+
+
+// ---------------------------------------------------------------------------
+// CFsEmailSettingsList::SelectedItemIsMailbox()
+// Used to check if the currently selected item is a mailbox.
+// ---------------------------------------------------------------------------
+//
+TBool CFsEmailSettingsList::SelectedItemIsMailbox() const
+	{
+    // Check if the current view is the main level and the selected list item
+	// is a mailbox.
+	const TInt index( iListBox->CurrentItemIndex() );
+
+    if ( iCurrentSubView == EFsEmailSettingsMainListView &&
+    	 index > 0 && index <= iMailboxCount )
+    	{
+    	// Is a mailbox.
+    	return ETrue;
+    	}
+
+    // Is something else.
+    return EFalse;
+	}
+
+
+// ---------------------------------------------------------------------------
+// CFsEmailSettingsList::ClearFocus()
+// Removes the focus.
+// ---------------------------------------------------------------------------
+//
+void CFsEmailSettingsList::ClearFocus()
+    {
+    FUNC_LOG;
+    iListBox->ItemDrawer()->ClearFlags( CListItemDrawer::EPressedDownState );
+    iListBox->ItemDrawer()->SetFlags( CListItemDrawer::ESingleClickDisabledHighlight
+                                    | CListItemDrawer::ESingleClickEnabled ); 
+    TInt ci( iListBox->CurrentItemIndex() );
+    if ( KErrNotFound != ci )
+        {
+        iListBox->DrawItem( ci );
+        }
+    }
+
+
+// End of file.