browserui/browser/FavouritesSrc/BrowserFavouritesListbox.cpp
changeset 51 48e827313edd
parent 37 481242ead638
child 53 f427d27b98d8
--- a/browserui/browser/FavouritesSrc/BrowserFavouritesListbox.cpp	Tue Feb 02 00:12:41 2010 +0200
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1149 +0,0 @@
-/*
-* Copyright (c) 2002 Nokia Corporation and/or its subsidiary(-ies).
-* All rights reserved.
-* This component and the accompanying materials are made available
-* under the terms of the License "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: 
-*      Implementation of CBrowserFavouritesListbox.
-*
-*
-*/
-
-
-// INCLUDE FILES
-
-#include <aknkeys.h>
-#include <EIKCLBD.H>
-#include <gulicon.h>
-#include <AknIconArray.h>
-#include <favouritesdb.h>
-#include <BrowserNG.rsg>
-#include <ApListItemList.h>
-#include <favouritesitem.h>
-#include <favouritesitemlist.h>
-#include <AknsConstants.h>
-
-#include "BrowserFavouritesListbox.h"
-#include "BrowserFavouritesListboxState.h"
-#include "BrowserFavouritesListboxModel.h"
-#include "BrowserFavouritesListboxView.h"
-#include "BrowserFavouritesModel.h"
-#include "CommsModel.h"
-#include "BrowserFavouritesListboxIconHandler.h"
-#include "BrowserFavouritesIconIndexArray.h"
-#include "BrowserUtil.h"
-#include "BrowserFavouritesListboxCursorObserver.h"
-#include "BrowserFavouritesListboxState.h"
-#include "BrowserFavouritesListboxItemDrawer.h"
-#include "ApiProvider.h"
-#include "BrowserAppUi.h"
-
-#include "BrowserFaviconHandler.h"
-#include <AknLayout2ScalableDef.h>
-#include <aknlayoutscalable_avkon.cdl.h>
-
-#include "eikon.hrh"
-
-
-// CONSTANTS
-/// Granularity of the icon index array.
-LOCAL_C const TInt KGranularity = 4;
-
-
-// ================= LOCAL FUNCTIONS =======================
-
-/**
-* Append elements from aSource to the end of aTarget.
-* @param aTarget Array which receives copied elements from aSource.
-* @param aSource Elements from this will be appended to aTarget.
-*/
-LOCAL_D void AppendArrayL
-( CArrayFix<TInt>& aTarget, const CArrayFix<TInt>& aSource )
-    {
-    TInt i;
-    TInt count = aSource.Count();
-    for ( i = 0; i < count; i++ )
-        {
-        aTarget.AppendL( aSource.At( i ) );
-        }
-    }
-
-// ================= MEMBER FUNCTIONS =======================
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::NewL
-// ---------------------------------------------------------
-//
-CBrowserFavouritesListbox* CBrowserFavouritesListbox::NewL
-        (
-        MApiProvider& aApiProvider,
-        const CCoeControl* aParent,
-        const MBrowserFavouritesListboxIconHandler& aIconHandler
-        )
-    {
-    CBrowserFavouritesListbox* listbox =
-        new (ELeave) CBrowserFavouritesListbox( aApiProvider );
-    CleanupStack::PushL( listbox );
-    listbox->ConstructL( aParent, aIconHandler );
-    CleanupStack::Pop();    // listbox
-    return listbox;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::~CBrowserFavouritesListbox
-// ---------------------------------------------------------
-//
-CBrowserFavouritesListbox::~CBrowserFavouritesListbox()
-    {
-    delete iFaviconHandler;
-    delete iIconIndexes;
-    delete iItems;
-    delete iNewState;
-    
-    if ( iFontItalic )
-        {
-        CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
-        screenDev.ReleaseFont( iFontItalic );
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SetListboxCursorObserver
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::SetListboxCursorObserver
-(MBrowserFavouritesListboxCursorObserver* aObserver)
-    {
-    iCursorObserver = aObserver;
-    if ( View() )
-        {
-        STATIC_CAST( CBrowserFavouritesListboxView*, View() )->
-            SetCursorObserver( aObserver );
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SetDataL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::SetDataL
-( CFavouritesItemList* aItems, /*MCommsModel& aCommsModel,*/ TBool aKeepState )
-    {
-    __ASSERT_DEBUG( aItems, Util::Panic( Util::EUnExpected ) );
-
-    // Ownership of aItems is taken, and will become a member (but not yet
-    // that) - push until then.
-    CleanupStack::PushL( aItems );
-
-    // Get all favicons asynchronously by iteration on icon array
-    iFaviconHandler->StartGetFaviconsL( aItems );
-
-    // Get icon indexes into new list. Replace the existing
-    // data only if successfully gotten. This ensures that they don't go out
-    // of sync (there cannot be different number of items in the two list).
-    CBrowserFavouritesIconIndexArray* newIconIndexes =
-        GetIconIndexesLC( /*aCommsModel,*/ *aItems );
-
-    if ( aKeepState )
-        {
-        // Calculate new state now, while we still have old items.
-        CalcNewStateL( *aItems );
-        }
-
-    // Got new data. Empty existing data, but keep the empty lists.
-    ClearSelection();
-    iItems->ResetAndDestroy();
-    iIconIndexes->Reset();
-    SetTopItemIndex(0);
-    UpdateFilterL();
-    HandleItemRemovalL();
-    // Replace data with new.
-    delete iIconIndexes;                            // Not NULL-ed, because...
-    delete iItems;                                  // Not NULL-ed, because...
-    iItems = aItems;                                // ... this cannot leave
-    iIconIndexes = newIconIndexes;                  // ... this cannot leave
-
-    // Let the model know the change.
-    TheModel()->SetData( *iItems, *iIconIndexes );  // ... this cannot leave
-
-    CleanupStack::Pop( 2 ); // newIconIndexes, aItems: now members.
-    HandleItemAdditionL();
-    UpdateFilterL();
-    if ( aKeepState )
-        {
-        // Now set the new state into listbox, then discard it.
-        __ASSERT_DEBUG( iNewState, Util::Panic( Util::EUnExpected ) );
-        SetStateL( *iNewState );
-        delete iNewState;
-        iNewState = NULL;
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::DrawFavicons
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::DrawFavicons()
-    {
-    // We have some favicons to draw
-    TInt err = KErrNone;
-
-    //Update the icon indices
-    TRAP(   err,
-            CBrowserFavouritesIconIndexArray* newIconIndexes =
-                GetIconIndexesLC( /*aCommsModel,*/ *iItems );
-            iIconIndexes->Reset();
-            delete iIconIndexes;
-            iIconIndexes = newIconIndexes;
-            CleanupStack::Pop( newIconIndexes );
-        );
-
-    // Don't draw the favicons if there is a leave
-    if ( !err )
-        {
-        // Let the model know the change and update the lisbox.
-        TheModel()->SetData( *iItems, *iIconIndexes );
-        DrawNow();
-        }
-
-    return err;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SelectionStateL
-// ---------------------------------------------------------
-//
-TBrowserFavouritesSelectionState
-CBrowserFavouritesListbox::SelectionStateL() const
-    {
-    TBrowserFavouritesSelectionState state;
-
-    // Check marking first.
-    const CArrayFix<TInt>* selection = MarkedRealIndexesLC();
-    TInt i;
-    TInt count = selection->Count();
-    for ( i = 0; i < count; i++ )
-        {
-        state.iMarkFlags |=
-            SelectionFlags( *(iItems->At( selection->At( i ) )) );
-        if ( iItems->At( selection->At( i ) )->IsItem() )
-            {
-            state.iMarkedItemCount++;
-            }
-        else
-            {
-            state.iMarkedFolderCount++;
-            }
-        }
-
-    if ( count == iItems->Count() )
-        {
-        state.iMarkFlags |= TBrowserFavouritesSelectionState::EAll;
-        }
-
-    TInt visibleCount;
-    CAknListBoxFilterItems* filter = TheModel()->Filter();
-    visibleCount = filter ? filter->FilteredNumberOfItems() : iItems->Count();
-    for ( i = 0; i < visibleCount; i++ )
-        {
-        if ( iItems->At( RealIndex( i ) )->IsItem() )
-            {
-            state.iVisibleItemCount++;
-            }
-        else
-            {
-            state.iVisibleFolderCount++;
-            }
-        }
-
-    TKeyArrayFix key( 0, ECmpTInt32 );
-    TInt dummy;
-    if ( !selection->Find( CurrentItemRealIndex(), key, dummy ) )
-        {
-        state.iMarkFlags |=
-            TBrowserFavouritesSelectionState::ECurrent;
-        }
-
-    CleanupStack::PopAndDestroy();  // selection
-
-    // Then comes the current.
-    const CFavouritesItem* current = CurrentItem();
-    if ( current )
-        {
-        state.iCurrentFlags |= SelectionFlags( *current );
-        }
-
-    return state;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::CurrentItem
-// ---------------------------------------------------------
-//
-const CFavouritesItem* CBrowserFavouritesListbox::CurrentItem() const
-    {
-    TInt index = CurrentItemRealIndex();
-    if ( index >= 0 )
-        {
-        return iItems->At( index );
-        }
-    return NULL;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::MarkedItemL
-// ---------------------------------------------------------
-//
-const CFavouritesItem* CBrowserFavouritesListbox::MarkedItemL() const
-    {
-    CFavouritesItem* item = NULL;
-    CArrayFix<TInt>* marked = MarkedRealIndexesLC();
-    if ( marked->Count() == 1 )
-        {
-        item = iItems->At( marked->At( 0 ) );
-        }
-    CleanupStack::PopAndDestroy();
-    return item;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::HighlightUidNow
-// ---------------------------------------------------------
-//
-TBool CBrowserFavouritesListbox::HighlightUidNow( TInt aUid )
-    {
-    TInt index = 0;
-    if (aUid != 0)
-        {
-        index = UidToViewIndex( aUid );
-        }
-
-    if ( index >= 0 )
-        {
-        SetCurrentItemIndexAndDraw( index );
-        return ETrue;
-        }
-    return EFalse;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::HandleMarkableListCommandL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::HandleMarkableListCommandL( TInt aCommand )
-    {
-    if ( ListboxFlags() & EAknListBoxMarkableList )
-        {
-        TInt index;
-        switch ( aCommand )
-            {
-            case EWmlCmdMark:
-                {
-                index = CurrentItemIndex();
-                if ( index >= 0 )
-                    {
-                    View()->SelectItemL( index );
-                    }
-                break;
-                }
-
-            case EWmlCmdUnmark:
-                {
-                index = CurrentItemIndex();
-                if ( index >= 0 )
-                    {
-                    View()->DeselectItem( index );
-                    }
-                break;
-                }
-
-            case EWmlCmdMarkAll:
-                {
-                ClearSelection();
-                TInt count = Model()->NumberOfItems();
-                if ( count )
-                    {
-                    TInt i = 0;
-                    CArrayFixFlat<TInt>* selection =
-                        new(ELeave) CArrayFixFlat<TInt>( 1 );
-                    CleanupStack::PushL( selection );
-                    selection->SetReserveL( count );
-                    for ( i = 0; i < count; i++ )
-                        {
-                        selection->AppendL( i );
-                        }
-                    SetSelectionIndexesL( selection );
-                    CleanupStack::PopAndDestroy();  // selection
-                    }
-                break;
-                }
-
-            case EWmlCmdUnmarkAll:
-                {
-                ClearSelection();
-                break;
-                }
-
-            default:
-                {
-                Util::Panic( Util::EUnExpected );
-                }
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::MarkedUidsLC
-// ---------------------------------------------------------
-//
-CArrayFix<TInt>* CBrowserFavouritesListbox::MarkedUidsLC() const
-    {
-    CArrayFix<TInt>* array = MarkedRealIndexesLC();
-    RealIndexesToUids( *array );
-    return array;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SelectedUidsLC
-// ---------------------------------------------------------
-//
-CArrayFix<TInt>* CBrowserFavouritesListbox::SelectedUidsLC() const
-    {
-    CArrayFix<TInt>* array = SelectedRealIndexesLC();
-    RealIndexesToUids( *array );
-    return array;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SelectedItemsLC
-// ---------------------------------------------------------
-//
-CArrayPtr<const CFavouritesItem>*
-CBrowserFavouritesListbox::SelectedItemsLC(TBool aIncludeSpecialItems) const
-    {
-    CArrayPtrFlat<const CFavouritesItem>* itemPtrs =
-        new (ELeave) CArrayPtrFlat<const CFavouritesItem>( KGranularity );
-    CleanupStack::PushL( itemPtrs );
-    CArrayFix<TInt>* indexes = SelectedRealIndexesLC();
-    TInt i;
-    TInt count = indexes->Count();
-    for ( i = 0; i < count; i++ )
-        {
-        CFavouritesItem* item = iItems->At( indexes->At( i ) );
-
-        if ( !aIncludeSpecialItems )
-            {
-            // Skip special items:
-            // folders, homepage, last visited & start page URLs.
-            // Need a workaround for the start page since CFavouritesItem
-            // does not provide IsStartPage() or something similar.
-            if ( (item->Uid() == KFavouritesHomepageUid ) ||
-                (item->Uid() == KFavouritesLastVisitedUid ) ||
-                item->IsFolder() ||
-                item->Uid() == KFavouritesStartPageUid )
-                    continue;
-            }
-        itemPtrs->AppendL( item );
-        }
-    CleanupStack::PopAndDestroy();  // indexes
-    return itemPtrs;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::ItemByUid
-// ---------------------------------------------------------
-//
-const CFavouritesItem* CBrowserFavouritesListbox::ItemByUid
-( TInt aUid ) const
-    {
-    return iItems->ItemByUid( aUid );
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::UnfilteredNumberOfItems
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::UnfilteredNumberOfItems()
-    {
-    return iItems->Count();
-    }
-
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::FilteredNumberOfItems
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::FilteredNumberOfItems()
-    {
-
-    CAknListBoxFilterItems* filter = TheModel()->Filter();
-    return filter->FilteredNumberOfItems();
-    }
-
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::UpdateFilterL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::UpdateFilterL()
-    {
-    CAknListBoxFilterItems* filter = TheModel()->Filter();
-    if ( filter )
-        {
-        filter->HandleItemArrayChangeL();
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::AnyFoldersL
-// ---------------------------------------------------------
-//
-TBool CBrowserFavouritesListbox::AnyFoldersL()
-    {
-    TInt i;
-    TInt count = iItems->Count();
-    for ( i = 0; i < count; i++ )
-        {
-        if ( iItems->At( i )->IsFolder() )
-            {
-            if (iItems->At( i )->Uid()!=KFavouritesAdaptiveItemsFolderUid) return ETrue; //exclude Adaptive Bookmarks Folder
-            }
-        }
-    return EFalse;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::OfferKeyEventL
-// ---------------------------------------------------------
-//
-TKeyResponse CBrowserFavouritesListbox::OfferKeyEventL
-( const TKeyEvent& aKeyEvent, TEventCode aType )
-    {
-    TKeyResponse result = EKeyWasNotConsumed;
-
-    switch ( aKeyEvent.iCode )
-        {
-        case EKeyLeftUpArrow:     // Northwest
-        case EStdKeyDevice10:     //   : Extra KeyEvent supports diagonal event simulator wedge
-        case EKeyLeftArrow:       // West
-        case EKeyLeftDownArrow:   // Southwest
-        case EStdKeyDevice13:     //   : Extra KeyEvent supports diagonal event simulator wedge
-
-        case EKeyRightUpArrow:    // Northeast
-        case EStdKeyDevice11:     //   : Extra KeyEvent supports diagonal event simulator wedge
-        case EKeyRightArrow:      // East
-        case EKeyRightDownArrow:  // Southeast
-        case EStdKeyDevice12:     //   : Extra KeyEvent supports diagonal event simulator wedge
-            {
-            // This listbox does not consume left/right or diagonal keypresses.
-            // (The base class always does, even if it doesn't use them )
-            break;
-            }
-
-        default:
-            {
-            result = CAknSingleGraphicStyleListBox::OfferKeyEventL
-                ( aKeyEvent, aType );
-            // Call UpdateCBA to update MSK in case of mark/unmark
-            CBrowserAppUi::Static()->UpdateCbaL();
-            }
-
-        }
-
-    return result;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::FocusChanged
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::FocusChanged( TDrawNow aDrawNow )
-    {
-    // Do nothing until the listbox is fully constructed
-    // The dialogpage sets the focus before calling ConstructL
-    if ( iView )
-        {
-        CAknSingleGraphicStyleListBox::FocusChanged( aDrawNow );
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::CreateModelL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::CreateModelL()
-    {
-    iModel = CBrowserFavouritesListboxModel::NewL( *iItems, *iIconIndexes );
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::MakeViewClassInstanceL
-// ---------------------------------------------------------
-//
-CListBoxView* CBrowserFavouritesListbox::MakeViewClassInstanceL()
-    {
-    return new (ELeave) CBrowserFavouritesListboxView( *this );
-    }
-
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::CreateItemDrawerL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::CreateItemDrawerL()
-    {
-    CAknSingleGraphicStyleListBox::CreateItemDrawerL();
-    }
-
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::CBrowserFavouritesListbox
-// ---------------------------------------------------------
-//
-CBrowserFavouritesListbox::CBrowserFavouritesListbox
-                            ( MApiProvider& aApiProvider ) :
-    iApiProvider( aApiProvider )
-    {
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::ConstructL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::ConstructL
-        (
-        const CCoeControl* aParent,
-        const MBrowserFavouritesListboxIconHandler& aIconHandler
-        )
-    {
-    iSkinUpdated = EFalse;
-    iIconHandler = &aIconHandler;
-    iItems = new (ELeave) CFavouritesItemList();
-    iIconIndexes =
-        new (ELeave) CBrowserFavouritesIconIndexArray( KGranularity );
-    CAknSingleGraphicStyleListBox::ConstructL( aParent, ListboxFlags() );
-    // MUST call this after the listbox has finished; listbox construction
-    // is buggy and overwrites the model's itemarray ptr.
-    TheModel()->SetItemArray();
-    CreateScrollBarFrameL( ETrue );
-    ScrollBarFrame()->SetScrollBarVisibilityL
-        ( CEikScrollBarFrame::EOff, CEikScrollBarFrame::EAuto );
-
-    // Load icons
-    ItemDrawer()->ColumnData()->SetIconArray
-        ( iIconHandler->CreateIconArrayL() );
-
-    // Store the size of an icon
-    TAknWindowComponentLayout layout =
-                AknLayoutScalable_Avkon::list_single_graphic_pane_g1(0);
-
-    TAknLayoutRect naviPaneGraphicsLayoutRect;
-    TRect listBoxGraphicRect;
-    TRect rect = iAvkonAppUi->ClientRect();
-
-
-    naviPaneGraphicsLayoutRect.LayoutRect( rect, layout);
-    listBoxGraphicRect = naviPaneGraphicsLayoutRect.Rect();
-
-    TSize listBoxGraphicSize( listBoxGraphicRect.iBr.iX - listBoxGraphicRect.iTl.iX,
-                                listBoxGraphicRect.iBr.iY - listBoxGraphicRect.iTl.iY );
-    // Favicon handler
-    iFaviconHandler = CBrowserFaviconHandler::NewL(
-                                iApiProvider,
-                                ItemDrawer()->ColumnData()->IconArray(),
-                                *this,
-                                listBoxGraphicSize );
-
-    ItemDrawer()->ColumnData()->EnableMarqueeL( ETrue );
-
-
-    // Setup italicized font for use later    
-    const CFont* logicalFont = AknLayoutUtils::FontFromId(EAknLogicalFontPrimaryFont);
-    
-    // Note: This font is owned by the application's system font array (where it 
-    // is likely already to have been created) and does not need to be
-    // released. It can just go out of scope.// Extract font information
-    TFontSpec fontSpec = logicalFont->FontSpecInTwips();// Desired height, weight, and posture already set in locals
-    fontSpec.iFontStyle.SetPosture( EPostureItalic );// Obtain new font
-    CWsScreenDevice& screenDev = *( CEikonEnv::Static()->ScreenDevice() );
-    screenDev.GetNearestFontInTwips( ( CFont*& )iFontItalic, fontSpec );
- 
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::ListboxFlags
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::ListboxFlags()
-    {
-    return AknLayoutUtils::PenEnabled() ?  
-         EAknListBoxStylusMarkableList :  EAknListBoxMarkableList;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::GetIconIndexesLC
-// ---------------------------------------------------------
-//
-CBrowserFavouritesIconIndexArray*
-CBrowserFavouritesListbox::GetIconIndexesLC
-( /*MCommsModel& aCommsModel, */CFavouritesItemList& aItems )
-    {
-    // Create new empty list.
-    CBrowserFavouritesIconIndexArray* iconIndexes =
-        new (ELeave) CBrowserFavouritesIconIndexArray( KGranularity );
-    CleanupStack::PushL( iconIndexes );
-    // Get list of access points. Not copy, owned by the AP model.
-   // const CApListItemList* apList = aCommsModel.AccessPoints();
-    // Fill the list.
-    TInt i = 0;
-    TInt count = aItems.Count();
-    for ( i = 0; i < count; i++ )
-        {
-        iconIndexes->AppendL
-            ( iIconHandler->IconIndexes( *(aItems.At( i ))/*, apList*/,this ) );
-        }
-    return iconIndexes;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::CalcNewStateL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::CalcNewStateL
-( CFavouritesItemList& aNewItems )
-    {
-    delete iNewState;
-    iNewState = NULL;
-    iNewState = new( ELeave ) CBrowserFavouritesListboxState;
-
-    // 1. Check if we have any new item. If yes, highlight goes to first
-    // new one.
-    TInt i;
-    TInt count = aNewItems.Count();
-    for ( i = 0; i < count; i++ )
-        {
-        if ( iItems->UidToIndex( aNewItems.IndexToUid( i ) ) ==
-                                                            KErrNotFound )
-            {
-            // New item, not found among the old ones.
-            // Set highlight to that, and also becomes top item.
-            iNewState->iHighlightUid = iNewState->iTopItemUid =
-                aNewItems.IndexToUid( i );
-            break;
-            }
-        }
-
-    // 2. If there is no new item, get the new highlight. That is the old
-    // one, if still exists, or the next remaining one after the
-    // deleted old one(s).
-    TInt uid;
-    if ( iNewState->iHighlightUid == KFavouritesNullUid )
-        {
-        i = CurrentItemRealIndex();
-        if ( i >= 0 )
-            {
-            // Have current item.
-            // Now go down the old list, beginning from highlighted one;
-            // find first item that still exists.
-            count = iItems->Count();
-            for ( /*current highlight index: i*/; i < count; i++ )
-                {
-                uid = iItems->At( i )->Uid();
-                if ( aNewItems.UidToIndex( uid ) != KErrNotFound )
-                    {
-                    iNewState->iHighlightUid = uid;
-                    break;
-                    }
-                }
-            // Here we should have higlight uid, unless the deleted element(s)
-            // were last. In that case, set last item highlighted (if there is
-            // anything to highlight).
-            if ( iNewState->iHighlightUid == KFavouritesNullUid &&
-                                                            aNewItems.Count() )
-                {
-                iNewState->iHighlightUid = aNewItems.IndexToUid
-                    ( aNewItems.Count() - 1 );
-                }
-            }
-        }
-
-    // 3. Get mark uids. Whether these uids exist in the new list or not, is
-    // not checked here; setting marks to the already changed listbox is
-    // fool-proof.
-    iNewState->iMarkUids = MarkedUidsLC();
-    CleanupStack::Pop();    // Uid list; ownership is now in the state.
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SetStateL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::SetStateL
-( const CBrowserFavouritesListboxState& aState )
-    {
-    TInt topIndex;
-
-    // Set marks.
-    if ( aState.iMarkUids->Count() )
-        {
-        CArrayFix<TInt>* marks = new (ELeave) CArrayFixFlat<TInt>( 4 );
-        CleanupStack::PushL( marks );
-        marks->AppendL
-            ( aState.iMarkUids->Back( 0 ), aState.iMarkUids->Count() );
-        UidsToViewIndexes( *marks );
-        SetSelectionIndexesL( marks );
-        CleanupStack::PopAndDestroy();  // marks
-        }
-
-    // Set top item index.
-    topIndex = UidToViewIndex ( aState.iTopItemUid );
-    if ( topIndex >= 0 )
-        {
-        // Always try to fill the listbox (if there were empty lines below,
-        // "scroll down", instead of strictly restoring the top item index).
-        TInt topIndexToSeeLastItem = Model()->NumberOfItems() -
-            View()->NumberOfItemsThatFitInRect( View()->ViewRect() );
-        if ( topIndexToSeeLastItem < 0 )
-            {
-            topIndexToSeeLastItem = 0;
-            }
-        topIndex = Min( topIndex, topIndexToSeeLastItem );
-        SetTopItemIndex( topIndex );
-        }
-
-    // Set higlight.
-    TInt curIndex = UidToViewIndex ( aState.iHighlightUid );
-    if ( curIndex < 0 )
-        {
-        // If cannot restore highlight, set it to top item.
-        curIndex = topIndex;
-        }
-    if ( curIndex >= 0 )
-        {
-        SetCurrentItemIndex( curIndex );
-        }
-
-    DrawNow();
-
-    if ( iCursorObserver )
-        {
-        // Cursor now points to some different item. Let the observer know it.
-        iCursorObserver->HandleCursorChangedL( this );
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::UidToViewIndex
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::UidToViewIndex( TInt aUid ) const
-    {
-    TInt viewIndex = KErrNotFound;
-    TInt realIndex = iItems->UidToIndex( aUid );
-    if ( realIndex >= 0 )
-        {
-        CAknListBoxFilterItems* filter = TheModel()->Filter();
-        if ( filter )
-            {
-            // Have filter, do the conversion.
-            viewIndex = filter->VisibleItemIndex( realIndex );
-            }
-        else
-            {
-            // No filter, no conversion necessary.
-            viewIndex = realIndex;
-            }
-        }
-    return viewIndex;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::UidsToViewIndexes
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::UidsToViewIndexes
-( CArrayFix<TInt>& aList ) const
-    {
-    TInt i;
-    TInt j;
-    TInt index;
-    TInt count = aList.Count();
-    for ( i = 0, j = 0; i < count; i++ )
-        {
-        index = UidToViewIndex( aList.At ( i ) );
-        if ( index != KErrNotFound )
-            {
-            aList.At( j++ ) = index;
-            }
-        }
-    if ( j < count )
-        {
-        // Not all Uids were converted. Delete the trailing rubbish.
-        aList.Delete( j, count - j );
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::RealIndexesToUids
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::RealIndexesToUids
-( CArrayFix<TInt>& aList ) const
-    {
-    TInt i;
-    TInt uid;
-    TInt count = aList.Count();
-    for ( i = 0; i < count; i++ )
-        {
-        uid = iItems->IndexToUid( aList.At( i ) );
-        __ASSERT_DEBUG( uid != KFavouritesNullUid, \
-            Util::Panic( Util::EFavouritesBadBookmarkUid ) );
-        aList.At( i ) = uid;
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::MarkedRealIndexesLC
-// ---------------------------------------------------------
-//
-CArrayFix<TInt>* CBrowserFavouritesListbox::MarkedRealIndexesLC() const
-    {
-    CListBoxView::CSelectionIndexArray* array =
-        new (ELeave) CArrayFixFlat<TInt>( KGranularity );
-    CleanupStack::PushL( array );
-    if ( iItems->Count() )
-        {
-        const CArrayFix<TInt>* marked;
-        CAknListBoxFilterItems* filter = TheModel()->Filter();
-        if ( filter )
-            {
-            // Filter knows all.
-            filter->UpdateSelectionIndexesL();
-            marked = filter->SelectionIndexes();
-#if 1 /* TODO remove when AVKON bug fixed*/
-            // Overcoming AVKON bug. If filter criteria is empty (i.e. the
-            // user is not typing in the filter), selection indexes between
-            // the filter and the listbox are not synchronized! Unfortunately,
-            // this strange back-way is the only means by we can discover if
-            // we have criteria or not; CAknListBoxFilterItems has the
-            // criteria as private; and the CAknSearchField, which holds the
-            // filter (and has the string) is not accessible here in the
-            // listbox (it's in the container).
-            if ( filter->FilteredNumberOfItems() ==
-                filter->NonFilteredNumberOfItems() )
-                {
-                marked = View()->SelectionIndexes();
-                }
-#endif
-            }
-        else
-            {
-            // No filter.
-            marked = View()->SelectionIndexes();
-            }
-        AppendArrayL( /*aTarget=*/*array, /*aSource=*/*marked );
-        }
-    return array;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SelectedRealIndexesLC
-// ---------------------------------------------------------
-//
-CArrayFix<TInt>* CBrowserFavouritesListbox::SelectedRealIndexesLC() const
-    {
-    CListBoxView::CSelectionIndexArray* selection =
-        MarkedRealIndexesLC();
-    if ( selection->Count() == 0 )
-        {
-        // No marks; use the highlighted one.
-        selection->AppendL( CurrentItemRealIndex() );
-        }
-    return selection;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::CurrentItemRealIndex
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::CurrentItemRealIndex() const
-    {
-    return RealIndex( CurrentItemIndex() /*that's view index*/ );
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::RealIndex
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::RealIndex( TInt aViewIndex ) const
-    {
-    TInt index = KErrNotFound;
-    if ( aViewIndex >= 0 )
-        {
-        CAknListBoxFilterItems* filter = TheModel()->Filter();
-        if ( filter )
-            {
-            // If we have the index and the filter also, do the conversion.
-            index = filter->FilteredItemIndex( aViewIndex );
-            }
-        else
-            {
-            index = aViewIndex;
-            }
-        }
-    return index;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::RealIndexes
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::RealIndexes( CArrayFix<TInt>& aList ) const
-    {
-    TInt i;
-    TInt j;
-    TInt index;
-    TInt count = aList.Count();
-    for ( i = 0, j = 0; i < count; i++ )
-        {
-        index = RealIndex( aList.At ( i ) );
-        if ( index != KErrNotFound )
-            {
-            aList.At( j++ ) = index;
-            }
-        }
-    if ( j < count )
-        {
-        // Not all indexes were converted. Delete the trailing rubbish.
-        aList.Delete( j, count - j );
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SelectionFlags
-// ---------------------------------------------------------
-//
-TInt CBrowserFavouritesListbox::SelectionFlags
-( const CFavouritesItem& aItem ) const
-    {
-    TInt flags = 0;
-    if ( aItem.IsItem() )
-        {
-        switch ( aItem.Uid() )
-            {
-            case KFavouritesHomepageUid:
-                {
-                flags |=
-                    TBrowserFavouritesSelectionState::EAny |
-                    TBrowserFavouritesSelectionState::EHomepage |
-                    TBrowserFavouritesSelectionState::EItem;
-                break;
-                }
-
-            case KFavouritesStartPageUid:
-                {
-                flags |=
-                    TBrowserFavouritesSelectionState::EAny |
-                    TBrowserFavouritesSelectionState::EStartPage |
-                    TBrowserFavouritesSelectionState::EItem;
-                break;
-                }
-
-            case KFavouritesLastVisitedUid:
-                {
-                flags |=
-                    TBrowserFavouritesSelectionState::EAny |
-                    TBrowserFavouritesSelectionState::ELastVisited |
-                    TBrowserFavouritesSelectionState::EItem;
-                break;
-                }
-
-            default:
-                {
-                flags |=
-                    TBrowserFavouritesSelectionState::EAny |
-                    TBrowserFavouritesSelectionState::EPlainItem |
-                    TBrowserFavouritesSelectionState::EItem;
-                break;
-                }
-            }
-        }
-    else
-        {
-        flags |=
-            TBrowserFavouritesSelectionState::EAny |
-            TBrowserFavouritesSelectionState::EFolder;
-        }
-    return flags;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::TheModel
-// ---------------------------------------------------------
-//
-CBrowserFavouritesListboxModel*
-CBrowserFavouritesListbox::TheModel() const
-    {
-    return REINTERPRET_CAST( CBrowserFavouritesListboxModel*, Model() );
-    }
-
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::HandleResourceChange
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::HandleResourceChange( TInt aType )
-    {
-    CAknSingleGraphicStyleListBox::HandleResourceChange( aType );
-    if ( aType == KAknsMessageSkinChange )
-        {
-        CArrayPtr<CGulIcon>* array =
-        ItemDrawer()->ColumnData()->IconArray();
-
-        array->ResetAndDestroy();
-        delete array;
-
-        CAknIconArray* iconArray = NULL;
-        TRAPD( err,
-                iconArray = iIconHandler->CreateIconArrayL()
-                )
-
-        if ( !err )
-            {
-            ItemDrawer()->ColumnData()->SetIconArray( iconArray );
-            iFaviconHandler->UpdateIconArray(ItemDrawer()->ColumnData()->IconArray());
-            SetSkinUpdated(ETrue);
-            }
-        }
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::SetSkinUpdated
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::SetSkinUpdated(TBool aSkinUpdated)
-    {
-    iSkinUpdated = aSkinUpdated;
-    }
-
-// ---------------------------------------------------------
-// CBrowserFavouritesListbox::ItalicizeRowItemL
-// ---------------------------------------------------------
-//
-void CBrowserFavouritesListbox::ItalicizeRowItemL(TInt aRowIndex)
-    {
-    if (ItemDrawer() && ItemDrawer()->ColumnData() && iFontItalic)
-        {
-        ItemDrawer()->ColumnData()->SetColumnFontForRowL( aRowIndex, 1, iFontItalic );
-        }
-    }
-
-//  End of File