uifw/ganes/src/HgScroller.cpp
changeset 47 2f0c06423c72
parent 46 0e1e0022bd03
child 53 3c67ea82fafc
--- a/uifw/ganes/src/HgScroller.cpp	Thu Jul 29 14:21:56 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,1686 +0,0 @@
-/*
-* Copyright (c) 2009 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:    
-*
-*/
-
-
-// INCLUDE FILES
-#include <ganes/HgScroller.h>
-
-#include <aknphysics.h>
-
-#include <ganes/HgScrollBufferObserverIface.h>
-#include <ganes/HgSelectionObserverIface.h>
-#include <ganes/HgMarkingObserverIface.h>
-#include <ganes/HgItem.h>
-#include "HgScrollbar.h"
-#include "HgScrollBufferManager.h"
-#include "HgConstants.h"
-#include "HgPopupDrawer.h"
-#include "HgMarquee.h"
-#include "HgDrawUtils.h"
-#include "HgIndicatorManager.h"
-#include "HgTextFind.h"
-#include "HgKeyUtils.h"
-
-#include <ganes.mbg>
-
-#include <AknIconUtils.h>
-#include <avkon.mbg>
-#include <AknsDrawUtils.h>
-#include <touchfeedback.h>
-#include <gulicon.h>
-#include <AknUtils.h>
-#include <layoutmetadata.cdl.h>
-#include <AknLayout2ScalableDef.h>
-#include <aknitemactionmenu.h>
-#include <aknappui.h>
-
-#include <featdiscovery.h>
-
-const TInt KIntensity = 50; // 50%
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ConstructL()
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::ConstructL (const TRect& aRect, RWsSession* aSession )
-    {
-    // Create a window for this application view
-    CreateWindowL ( );
-    EnableDragEvents();
-    ClaimPointerGrab();
-
-    iUpperCaseTitle.CreateL( KMaxSearchLenght );
-    iPopupText1.CreateL( KMaxPopupTextLength );
-    iPopupText2.CreateL( KMaxPopupTextLength );
-    
-    iScrollbar = CHgScrollbar::NewL(*this);
-    iPopupDrawer = new (ELeave) THgPopupDrawer();
-    
-    TCallBack callback(CHgScroller::MarqueeCallback, this);
-    iDrawUtils = CHgDrawUtils::NewL( callback );
-    
-    iIndicatorManager = CHgIndicatorManager::NewL();
-
-    /*
-     * TODO: Vasco says it supports qwerty, so the variation cannot be done.
-     *          Commented out for the time being to fix a crash.
-    // Enable key search only in non-touch or hybrid (touch + qwerty) devices
-    if( !AknLayoutUtils::PenEnabled() ||
-        CFeatureDiscovery::IsFeatureSupportedL(TUid::Uid(KFeatureIdQwertyInput)) )
-        {
-        iTextFind = CHgTextFind::NewL( *this );
-        iKeyUtils = CHgKeyUtils::NewL(*this);
-        }
-    */
-    
-    // Init Stuff
-    if( aSession )
-        {
-        InitScreenL( aRect, *aSession );
-        }
-    else
-        {
-        InitScreenL( aRect );
-        }
-    
-    iHighlightTimer = CPeriodic::NewL( CActive::EPriorityStandard );    
-    iKeyScrollingTimer = CPeriodic::NewL( CActive::EPriorityStandard );
-    
-    CAknAppUi* appUi = static_cast<CAknAppUi*>(iEikonEnv->AppUi());
-    if( appUi && appUi->IsSingleClickCompatible() )
-        {
-        iDetector = CAknLongTapDetector::NewL(this);
-        iActionMenu = CAknItemActionMenu::RegisterCollectionL(*this);
-        }
-
-    iDrawUtils->EnableMarquee(HasHighlight());
-    
-    InitItemsL();
-
-    iCoeEnv->AddForegroundObserverL( *this );    
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InputCapabilities()
-// -----------------------------------------------------------------------------
-//
-TCoeInputCapabilities CHgScroller::InputCapabilities() const
-    {
-    TCoeInputCapabilities cap( TCoeInputCapabilities::ENone );
-
-    if(iTextFind)
-        {
-        MCoeFepAwareTextEditor* editor = NULL;
-        
-        if( iSelectionMode == ENoSelection 
-                && iFlags & EHgScrollerSearchWithQWERTY )
-            editor = iTextFind;
-    
-        cap = TCoeInputCapabilities( TCoeInputCapabilities::EAllText, 
-                editor, 
-                NULL );
-        
-        cap.SetObjectProvider( const_cast<CHgScroller*>(this) );
-        }
-    
-    return cap;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InitScreenL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::InitScreenL( const TRect& /*aRect*/, RWsSession& /*aSession*/ )
-    {
-    // DSA not supported anymore.
-    User::Leave( KErrNotSupported );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InitScreenL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::InitScreenL( const TRect& aRect )
-    {
-    // Set the windows size
-    SetRect ( aRect );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::RefreshScreen()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::RefreshScreen( TInt aIndex )
-    {
-    if( IsDisplayed( aIndex ) )
-        DrawDeferred();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::RefreshScreen()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CHgScroller::FirstIndexOnScreen()
-    {
-    return CurrentIndex();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::RefreshScreen()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CHgScroller::ItemsOnScreen()
-    {
-    return iItemsOnScreen;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::RefreshScreen()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CHgScroller::SelectedIndex()
-    {
-    return iSelectedIndex;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::RefreshScreen()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetSelectedIndex( TInt aIndex )
-    {
-    if( aIndex >= 0 && aIndex < iItems.Count() )
-        {
-        iSelectedIndex = aIndex;
-        // Move view position so that it is fully visible.
-        FitSelectionToView();
-        SelectionChanged();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::Mark()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::Mark( TInt aIndex )
-    {
-    if( aIndex >= 0 && aIndex < iItems.Count() )
-        {
-        if( !(iItems[aIndex]->Flags() & CHgItem::EHgItemFlagMarked) )
-            {
-            iItems[aIndex]->SetFlags( CHgItem::EHgItemFlagMarked );
-            if( iMarkingObserver )
-                {
-                TRAP_IGNORE( iMarkingObserver->HandleMarkingL( aIndex, ETrue ) );
-                }            
-            }
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::UnMark()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::UnMark( TInt aIndex )
-    {
-    if( aIndex >= 0 && aIndex < iItems.Count() )
-        {
-        if( iItems[aIndex]->Flags() & CHgItem::EHgItemFlagMarked )
-            {
-            iItems[aIndex]->ClearFlags( CHgItem::EHgItemFlagMarked );
-            if( iMarkingObserver )
-                {
-                TRAP_IGNORE( iMarkingObserver->HandleMarkingL( aIndex, EFalse ) );
-                }            
-            }
-        }    
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::MarkAll()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::MarkAll()
-    {
-    for(TInt i = 0; i < iItems.Count(); ++i)
-        {
-        iItems[i]->SetFlags( CHgItem::EHgItemFlagMarked );
-        }
-    
-    DrawDeferred();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::UnMarkAll()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::UnMarkAll()
-    {
-    for(TInt i = 0; i < iItems.Count(); ++i)
-        {
-        iItems[i]->ClearFlags(CHgItem::EHgItemFlagMarked);
-        }
-    
-    DrawDeferred();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::GetMarkedItemsL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::GetMarkedItemsL( RArray<TInt>& aIndexes )
-    {
-    for(TInt i = 0; i < iItems.Count(); ++i)
-        {
-        if(iItems[i]->Flags() & CHgItem::EHgItemFlagMarked )
-            {
-            aIndexes.AppendL( i );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::EnableScrollBufferL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::EnableScrollBufferL( 
-        MHgScrollBufferObserver& aObserver, 
-        TInt aBufferSize,
-        TInt aBufferTreshold  )
-    {
-    delete iManager; iManager = NULL;
-    
-    iManager = CHgScrollBufferManager::NewL(
-            aObserver, 
-            aBufferSize, 
-            aBufferTreshold, 
-            CurrentIndex(), 
-            iItemCount);
-    
-    iManager->SetBufferOwner( *this );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::EnableNaviStripL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetScrollBarTypeL( THgScrollBarType aType )
-    {
-    iScrollBarType = aType;
-    DrawDeferred();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SetSelectionObserver()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetSelectionObserver( MHgSelectionObserver& aObserver )
-    {
-    iSelectionObserver = &aObserver;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SetMarkingObserver()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetMarkingObserver( MHgMarkingObserver& aObserver )
-    {
-    iMarkingObserver = &aObserver;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::CHgScroller()
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CHgScroller::CHgScroller( 
-        TInt aItemCount, 
-        CGulIcon* aDefaultIcon )
- :  iDefaultIcon( aDefaultIcon ),
-    iItemCount(aItemCount), 
-    iCurrentRow(-1),
-    iSelectedIndex(KErrNotFound),
-    iScrollBarType( EHgScrollerScrollBar ),
-    iFirstTime(ETrue)
-    {
-    // No implementation required
-    }
-        
-// -----------------------------------------------------------------------------
-// CHgScroller::~CHgScroller()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CHgScroller::~CHgScroller ( )
-    {
-    iCoeEnv->RemoveForegroundObserver( *this );
-    
-    iItems.ResetAndDestroy();
-
-    delete iManager;
-    delete iPhysics;
-    delete iScrollbar;
-    delete iEmptyText;    
-    delete iDefaultIcon;
-    delete iPopupDrawer;
-    delete iDrawUtils;
-    delete iHighlightTimer;
-    delete iIndicatorManager;
-    delete iKeyUtils;
-	delete iTextFind;
-	delete iKeyScrollingTimer;
-	delete iDetector;
-	
-	if(iActionMenu)
-	    iActionMenu->RemoveCollection(*this);
-    
-    iUpperCaseTitle.Close();
-    iPopupText1.Close();
-    iPopupText2.Close();
-    
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InitPhysicsL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::InitPhysicsL()
-    {
-    if(!iPhysics)
-        {
-        iPhysics = CAknPhysics::NewL(*this, this);
-        }
-    
-    iPhysics->InitPhysicsL( TotalSize(), 
-            TSize(iWidth, iHeight), 
-            iLandscapeScrolling);
-    }
-
-// -----------------------------------------------------------------------------
-// CHgGrid::Draw()
-// Draws the display.
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::Draw ( const TRect& aRect ) const
-    {
-    CWindowGc& gc = SystemGc();
-    
-    // Flush screen buffer
-    InitDrawBuffer();
-
-    DoDraw( aRect );
-
-    if( iScrollbar && iItemCount )
-        {
-        iScrollbar->Draw( gc );
-        }
-    
-    if( iPopupDrawer )
-        {
-        if(iPopupText2.Length() > 0)
-            {
-            iPopupDrawer->Draw( gc, 
-                    iPopupText1,
-                    iPopupText2
-                    );
-            }
-        else if( iPopupText1.Length( ) > 0 )
-            {
-            if( iScrollBarType == EHgScrollerLetterStrip
-                    || iScrollBarType == EHgScrollerLetterStripLite )
-                {
-                iPopupDrawer->DrawNaviChar( gc, iPopupText1 );
-                }
-            else
-                {
-                iPopupDrawer->Draw( gc, iPopupText1 );
-                }
-            }
-        else if( iTextFind && iTextFind->Text().Length() > 0 )
-            {
-            iPopupDrawer->Draw( gc, iTextFind->Text() );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InitDrawBuffer()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::InitDrawBuffer() const
-    {
-    MAknsSkinInstance* skin = AknsUtils::SkinInstance();
-    MAknsControlContext* cc = AknsDrawUtils::ControlContext( this );
-    AknsDrawUtils::DrawBackground( skin, cc, this, SystemGc(),
-            TPoint(0,0), Rect(), KAknsDrawParamDefault );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SizeChanged()
-// Called by framework when the view size is changed.
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::SizeChanged ( )
-    {
-    iWidth = Rect().Width();
-    iHeight = Rect().Height();
-
-    HandleItemCountChanged();
-    
-    if( iPopupDrawer )
-        {
-        iPopupDrawer->Init( Rect(), 
-                &ScreenFont( TCoeFont( KFocusTextFontSize, TCoeFont::EPlain ) ) );
-        }
-    
-    if(iFirstTime)
-        {
-        iViewPosition = TPoint(iWidth/2, iHeight/2);
-        iFirstTime = EFalse;
-        }
-    
-    HandleViewPositionChanged();
-    
-    TRAP_IGNORE( InitGraphicsL(); )
-    DrawDeferred ( );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleItemCountChaged()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleItemCountChanged()
-    {
-    HandleSizeChanged();
-
-    if( iSelectedIndex >= iItemCount )
-        {
-        iSelectedIndex = iItemCount - 1;
-        SelectionChanged();
-        }
-
-    TRAP_IGNORE ( 
-            InitScrollbarL();
-            InitPhysicsL();
-                )
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InitScrollbarL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::InitScrollbarL()
-    {
-    if( iScrollbar && iItemCount )
-        {
-        iScrollbar->InitScrollBarL( Rect(), 
-                                    TotalSize(), 
-                                    TSize(iWidth, iHeight), 
-                                    iLandscapeScrolling); 
-
-        iScrollbar->SetViewPosition( iViewPosition - TPoint(iWidth/2, iHeight/2));
-        }
-    }
-// -----------------------------------------------------------------------------
-// CHgScroller::HandlePointerEventL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandlePointerEventL( const TPointerEvent& aEvent )
-    {
-    if( !HandleScrollbarEventL( aEvent ) && iItemCount )
-        {
-        iShowHighlight = EFalse;
-        
-        // Start drag
-        if( aEvent.iType == TPointerEvent::EButton1Down )
-            {
-            iPointerDown = ETrue;
-            HandleDownEventL( aEvent );
-
-            if( iDetector && !HasHighlight() && iActionMenu->InitMenuL() )
-                iDetector->PointerEventL( aEvent );
-            }
-        // Drag
-        else if( aEvent.iType == TPointerEvent::EDrag && iPointerDown )
-            {
-            HandleDragEventL( aEvent );
-            
-            if( iPanning && iDetector && !HasHighlight()  )
-                iDetector->CancelAnimationL();
-            }
-        // End drag
-        else if( aEvent.iType == TPointerEvent::EButton1Up && iPointerDown )
-            {
-            if( iDetector && !HasHighlight() )
-                iDetector->PointerEventL( aEvent );
-            
-            HandleUpEventL( aEvent );
-            iPointerDown = EFalse;
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleScrollbarEventL()
-// -----------------------------------------------------------------------------
-//
-TBool CHgScroller::HandleScrollbarEventL( const TPointerEvent& aEvent )
-    {
-    TBool sbHandles = EFalse;
-    if( iScrollbar )
-        {
-        sbHandles = iScrollbar->HandlePointerEventL( aEvent );
-        if ( sbHandles && !iScrollbar->IsStatic() )
-            {
-            MTouchFeedback* feedback = MTouchFeedback::Instance();
-            // Start drag
-            if( aEvent.iType == TPointerEvent::EButton1Down )
-                {
-                if ( feedback )
-                    {
-                    feedback->InstantFeedback( this, ETouchFeedbackBasicSlider, aEvent );
-                    }
-                }
-            // Drag
-            else if( aEvent.iType == TPointerEvent::EDrag 
-                    && iScrollbar->IsDragging() )
-                {
-                // Smooth continuous tactile feedback is produced
-                // during thumb dragging. The tactile feedback API 
-                // filters out possible re-startings of the effect.
-                if ( feedback )
-                    {
-                    TTimeIntervalMicroSeconds32 timeout( 300000 );
-                    feedback->StartFeedback( this, 
-                                             ETouchContinuousSlider, 
-                                             &aEvent, 
-                                             KIntensity, // intensity 50%
-                                             timeout );
-                    }
-                }
-            // End drag
-            else if( aEvent.iType == TPointerEvent::EButton1Up )
-                {
-                // Stop the continuous tactile feedback that may be playing
-                // at the time due to possible previous thumb dragging.
-                if ( feedback )
-                    {
-                    feedback->StopFeedback( this );
-                    TTouchFeedbackType type = ETouchFeedbackVibra;
-                    feedback->InstantFeedback( this, ETouchFeedbackBasicSlider, type, aEvent );
-                    }
-                iPopupText1.Zero();
-                iPopupText2.Zero();
-                DrawDeferred();
-                }
-            }
-        }
-    return sbHandles;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleDownEventL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleDownEventL( const TPointerEvent& aEvent )
-    {
-    if( !HasHighlight() 
-            && (iPhysics->OngoingPhysicsAction() == CAknPhysics::EAknPhysicsActionFlicking) )
-        {
-        iPanning = ETrue;
-        if(iDetector)
-            iDetector->CancelAnimationL();
-        }
-    else
-        {
-        iPanning = EFalse;
-        }
-
-    iPhysics->StopPhysics();
-    iPhysics->ResetFriction();
-
-    iStart = aEvent.iPosition;
-    iPrev = iStart;
-    iStartTime.HomeTime();
-
-    if(iLandscapeScrolling)
-        iViewPosition.iY = iHeight / 2;
-    else
-        iViewPosition.iX = iWidth / 2;
-    
-    iFocusedIndex = KErrNotFound;
-    iSelectionToFocusedItem = EFalse;
-    iDrawUtils->EnableMarquee(HasHighlight());
-    if(HasHighlight())
-        {
-        LaunchHighlightTimer();
-        }
-    else if( !iPanning )
-        {
-        SetHighlightL();
-        }
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    if ( feedback )
-        {
-        feedback->InstantFeedback( this, ETouchFeedbackBasicItem, aEvent );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleDragEventL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleDragEventL( const TPointerEvent& aEvent )
-    {
-    if(!iPanning)
-        {
-        TInt delta = 0;
-        if(iLandscapeScrolling)
-            {
-            delta = iPrev.iX - aEvent.iPosition.iX;
-            }
-        else
-            {
-            delta = iPrev.iY - aEvent.iPosition.iY;
-            }
-        
-        delta = delta < 0 ? -delta : delta;
-        iPanning = delta >= iPhysics->DragThreshold();
-        }
-
-    if(iPanning)
-        {
-        TPoint delta = iPrev - aEvent.iPosition;
-        if(iLandscapeScrolling && AknLayoutUtils::LayoutMirrored())
-            delta = -delta;
-        iPhysics->RegisterPanningPosition( delta );
-        iPrev = aEvent.iPosition;
-        iHighlightTimer->Cancel();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleUpEventL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleUpEventL( const TPointerEvent& aEvent )
-    {
-    MTouchFeedback* feedback = MTouchFeedback::Instance();
-    TTouchFeedbackType type = ETouchFeedbackVibra;
-    if( iPanning )
-        {
-        // enable physics
-        TPoint drag = iStart - aEvent.iPosition;
-        if(iLandscapeScrolling && AknLayoutUtils::LayoutMirrored())
-            drag = -drag;
-        iPhysics->StartPhysics(drag, iStartTime);
-        if ( feedback )
-            {
-            feedback->InstantFeedback( this, ETouchFeedbackItemScroll, type, aEvent );
-            }
-        }
-    else
-        {
-        HandleSelectionL();
-        if ( feedback )
-            {
-            feedback->InstantFeedback( this, ETouchFeedbackBasicItem, type, aEvent );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleSelectionL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleSelectionL()
-    {
-    TInt index = GetSelected(iStart);
-    if(index != KErrNotFound)
-        {
-        if( iFocusedIndex == KErrNotFound )
-            {
-            // Highlight timer hasn't triggered so lets set the highlight.
-            // this is not usually the case since interval is 50ms but just to be sure.
-            SetHighlightL();
-            }
-        
-        if( iFlags & EHgScrollerSelectionMode || iSelectionMode != ENoSelection ) 
-            // Marking mode or shift key pressed ( or hash )
-            {
-            if( iItems[iSelectedIndex]->Flags() & CHgItem::EHgItemFlagMarked )
-                {
-                UnMark( iSelectedIndex );
-                }
-            else
-                {
-                Mark( iSelectedIndex );                    
-                }
-            DrawDeferred();
-            }
-        else // Selection
-            {
-            if( iSelectionToFocusedItem || !HasHighlight() )
-                {
-                if(iSelectionObserver)
-                    iSelectionObserver->HandleOpenL(iSelectedIndex);
-                }
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::OfferKeyEventL()
-// -----------------------------------------------------------------------------
-//
-TKeyResponse CHgScroller::OfferKeyEventL( const TKeyEvent& aKeyEvent, TEventCode aType )
-    {
-    if( iKeyUtils 
-            && !(iFlags & EHgScrollerKeyMarkingDisabled)
-            && iKeyUtils->OfferKeyEventL( aKeyEvent, aType ) == EKeyWasConsumed )
-        return EKeyWasConsumed;
-    
-    switch( aType )
-        {
-        case EEventKeyDown:
-            KeyEventDown();
-            break;
-        case EEventKey:    
-            return HandleKeyEvent( aKeyEvent );
-        case EEventKeyUp:
-            KeyEventUp();
-        default:
-            break;
-        }
-    
-    // Let CCoeControl handle other cases.
-    return CCoeControl::OfferKeyEventL( aKeyEvent, aType );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::KeyEventDown()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::KeyEventDown()
-    {
-    iKeyRepeats = 0;
-    iKeyScrollingState = ENoKeyScrolling;
-    
-    iPointerDown = EFalse;
-    iPanning = EFalse;
-    iShowHighlight = ETrue;
-    iDrawUtils->EnableMarquee(HasHighlight());
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::KeyEventUp()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::KeyEventUp()
-    {
-    if( iKeyScrollingState != ENoKeyScrolling )
-        {
-        // Key has been released so stop the key scrolling.
-        StopKeyScrolling();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SetItem()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetItem(CHgItem* aItem, TInt aIndex)
-    {
-    if( aItem && aIndex >= 0 && aIndex < iItems.Count() )
-        {
-        delete iItems[aIndex];
-        iItems[aIndex] = aItem;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::AddItem()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::AddItem(CHgItem* aItem)
-    {
-    if( aItem )
-        {
-        iItems.Append(aItem);
-        iItemCount++;
-        HandleItemCountChanged();
-        if( iManager )
-            {
-            iManager->ItemCountChanged( iItemCount-1, EFalse, iItemCount );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InsertItem()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::InsertItem(CHgItem* aItem, TInt aIndex)
-    {
-    if( aItem && aIndex >= 0 )
-        {
-        if(aIndex < iItems.Count())
-            {
-            iItems.Insert(aItem, aIndex);
-            }
-        else
-            {
-            iItems.Append(aItem);
-            }
-        iItemCount++;
-        HandleItemCountChanged();
-        
-        if( iManager )
-            {
-            iManager->ItemCountChanged( aIndex, EFalse, iItemCount );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::RemoveItem()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::RemoveItem(TInt aIndex)
-    {
-    if( aIndex >= 0 && aIndex < iItems.Count() )
-        {
-        delete iItems[aIndex]; iItems[aIndex] = NULL;
-        iItems.Remove(aIndex);
-        iItemCount--;
-        HandleItemCountChanged();
-        
-        if( iManager )
-            {
-            iManager->ItemCountChanged( aIndex, ETrue, iItemCount );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ResizeL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::ResizeL( TInt aItemCount )
-    {
-    // Add More
-    if( iItems.Count() < aItemCount )
-        {
-        while( iItems.Count() < aItemCount )
-            {
-            iItems.AppendL( CHgItem::NewL() );
-            }
-        }
-    // remove from the end
-    else if( iItems.Count() > aItemCount )
-        {
-        while( iItems.Count() > aItemCount )
-            {
-            delete iItems[iItems.Count() - 1];
-            iItems.Remove( iItems.Count() - 1 );
-            }
-        }
-    else
-        {
-        return; // no change needed
-        }
-
-    iItemCount = aItemCount;
-
-    if( iManager )
-        {
-        iManager->ResetBuffer( iSelectedIndex, iItemCount );
-        }
-
-    HandleItemCountChanged();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ItemL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CHgItem& CHgScroller::ItemL(TInt aIndex)
-    {
-    if( aIndex < 0 || aIndex >= iItems.Count() )
-        {
-        User::Leave( KErrArgument );
-        }
-
-    return *iItems[aIndex];
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ViewPositionChanged()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::ViewPositionChanged( const TPoint& aNewPosition,
-                                        TBool aDrawNow,
-                                        TUint /*aFlags*/ )
-    {
-    iViewPosition = aNewPosition;
-    HandleViewPositionChanged();
-    if( aDrawNow )
-        DrawNow();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ScrollBarPositionChanged()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::ScrollBarPositionChanged( const TPoint& aNewPosition )
-    {
-    iViewPosition = aNewPosition;
-    iPhysics->StopPhysics();
-    
-    if( iScrollBarType == EHgScrollerTimeStrip )
-        {
-        // Show first item's time.
-        TInt selectedItem = CurrentIndex();
-        if( selectedItem >= 0 && selectedItem < iItems.Count() )
-            {
-            TRAP_IGNORE(
-                    iItems[selectedItem]->Time().FormatL( iPopupText1, KGanesMonthString );
-                    iItems[selectedItem]->Time().FormatL( iPopupText2, KGanesYearString );
-                )
-            // To display year correctly in arabic.
-            AknTextUtils::LanguageSpecificNumberConversion( iPopupText2 );
-            }
-        }
-    else if( iScrollBarType == EHgScrollerLetterStrip
-            || iScrollBarType == EHgScrollerLetterStripLite )
-        {
-        TInt selectedItem = CurrentIndex();
-        if( selectedItem >= 0 && selectedItem < iItems.Count() )
-            {
-            if(iItems[selectedItem]->Title().Length())
-                {
-                iPopupText1.Zero();
-                iPopupText1.Append( iItems[selectedItem]->Title()[0] );
-                }
-            }
-        }
-    HandleViewPositionChanged( EFalse );
-    DrawNow();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleNaviStripChar()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleNaviStripChar( const TChar& /*aChar*/ )
-    {
-    // Feature not used anymore
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::PhysicEmulationEnded()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::PhysicEmulationEnded()
-    {
-    // Nothing to do.
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleViewPositionChanged()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleViewPositionChanged(TBool aUpdateScrollbar)
-    {
-    TInt newRow = iLandscapeScrolling ?
-        (iViewPosition.iX-(iWidth/2))/((iRowHeight)):
-        (iViewPosition.iY-(iHeight/2))/(iRowHeight);
-    
-    if(iScrollbar && aUpdateScrollbar)
-        iScrollbar->SetViewPosition( iViewPosition - TPoint(iWidth/2, iHeight/2));
-
-    if(newRow != iCurrentRow)
-        {
-        iCurrentRow = newRow;
-
-        if(iManager)
-            {
-            iManager->SetPosition( CurrentIndex() );
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleViewPositionChanged()
-// -----------------------------------------------------------------------------
-//
-TPoint CHgScroller::ViewPosition() const
-    {
-    return iViewPosition;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleKeyEvent()
-// -----------------------------------------------------------------------------
-//
-TKeyResponse CHgScroller::HandleKeyEvent(const TKeyEvent& aKeyEvent)
-    {
-    iKeyRepeats++;
-    TInt prevSelected = iSelectedIndex;
-
-    TKeyScrollingState possibleKeyScrollingState = ENoKeyScrolling;
-    
-    switch( aKeyEvent.iCode )
-        {
-        case EKeyUpArrow:
-            if( !iLandscapeScrolling )
-                possibleKeyScrollingState = EKeyScrollingUp;
-            break;
-        case EKeyDownArrow:
-            if( !iLandscapeScrolling )
-                possibleKeyScrollingState = EKeyScrollingDown;
-            break;
-        case EKeyLeftArrow:
-            if( iLandscapeScrolling )
-                possibleKeyScrollingState = EKeyScrollingLeft;
-            break;
-        case EKeyRightArrow:
-            if( iLandscapeScrolling )
-                possibleKeyScrollingState = EKeyScrollingRight;
-            break;
-        case EKeyEnter:
-            {
-            if( iSelectedIndex != KErrNotFound && iSelectionObserver )
-                {
-                TRAP_IGNORE( iSelectionObserver->HandleOpenL( iSelectedIndex ); )
-                return EKeyWasConsumed;
-                }
-            return EKeyWasNotConsumed;
-            }
-        default:
-            break;
-        }
-
-    if( possibleKeyScrollingState != ENoKeyScrolling 
-        && iKeyRepeats > KPhysLaunchKeyCount
-        && iSelectionMode == ENoSelection )
-        {
-        if( !iKeyScrollingTimer->IsActive() )
-            {
-            iKeyScrollingState = possibleKeyScrollingState;
-            iKeyScrollingTimer->Start(
-                    TTimeIntervalMicroSeconds32( 0 ),
-                    TTimeIntervalMicroSeconds32( KKeyScrollingUpdateInterval ), 
-                    TCallBack( KeyScrollingTimerCallback, this ) );
-            }
-        }
-    
-    TBool handled = DoHandleKeyEvent(aKeyEvent); 
-    
-    if( iSelectedIndex != prevSelected && iSelectionObserver )
-        {
-        iDrawUtils->ResetMarquee();
-        TRAP_IGNORE( iSelectionObserver->HandleSelectL(iSelectedIndex); )
-        }
-    
-    if( !handled )
-        iKeyRepeats--;
-    
-    return handled ? EKeyWasConsumed : EKeyWasNotConsumed;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::Release()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::Release(TInt aReleaseStart, TInt aReleaseEnd)
-    {
-    for(; aReleaseStart <= aReleaseEnd; ++aReleaseStart)
-        {
-        if( aReleaseStart >= 0 && aReleaseStart < iItems.Count())
-            {
-            iItems[aReleaseStart]->SetIcon(NULL, iItems[aReleaseStart]->Flags());
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::Reset()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::Reset()
-    {
-    if(iItemCount)
-        {
-        iItems.ResetAndDestroy();
-        iItemCount = 0;
-        iSelectedIndex = -1;
-        
-        if( iManager )
-            {
-            iManager->ResetBuffer( iSelectedIndex, iItemCount );
-            }
-    
-        HandleItemCountChanged();
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SetFlags()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetFlags(TInt aFlags)
-    {
-    iFlags |= aFlags;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ClearFlags()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::ClearFlags(TInt aFlags)
-    {
-    iFlags &= ~aFlags;    
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::Flags()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CHgScroller::Flags()
-    {
-    return iFlags;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SetEmptyTextL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetEmptyTextL( const TDesC& aEmptyText )
-    {
-    delete iEmptyText;
-    iEmptyText = 0;
-    iEmptyText = aEmptyText.AllocL();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::ItemCount()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TInt CHgScroller::ItemCount() const
-    {
-    return iItems.Count();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HightlightItem()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C TBool CHgScroller::HightlightItem( const TDesC& aHighlightText )
-    {
-    TInt searchStartIndex = aHighlightText.Length() == 1 ||
-        iSelectedIndex == KErrNotFound ? iSelectedIndex + 1 : iSelectedIndex;
-    
-    // From selected to end
-    for(TInt i = searchStartIndex; i < iItems.Count(); ++i)
-        {
-        if(iItems[i]->Title().Length() > 0 )
-            {
-            iUpperCaseTitle.Copy( iItems[i]->Title().Left( aHighlightText.Length() ) );
-            iUpperCaseTitle.UpperCase();
-            TInt result = iUpperCaseTitle.CompareC( aHighlightText );
-
-            if(result == 0)
-                {
-                iSelectedIndex = i;
-                FitSelectionToView();
-                DrawDeferred();
-                return ETrue;
-                }
-            }
-        }
-
-    // From beginning to selected - 1
-    for(TInt i = 0; i < iSelectedIndex; ++i)
-        {
-        if(iItems[i]->Title().Length() > 0 )
-            {
-            iUpperCaseTitle.Copy( iItems[i]->Title().Left( aHighlightText.Length() ) );
-            iUpperCaseTitle.UpperCase();
-            TInt result = iUpperCaseTitle.CompareC( aHighlightText );
-
-            if(result == 0)
-                {
-                iSelectedIndex = i;
-                FitSelectionToView();
-                DrawDeferred();
-                return ETrue;
-                }
-            else if( result > 0)
-                {
-                break;
-                }
-            }
-        }
-    
-    return EFalse;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SetDefaultIconL()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::SetDefaultIconL( CGulIcon* aDefaultIcon )
-    {
-    if( aDefaultIcon )
-        {
-        delete iDefaultIcon;
-        iDefaultIcon = aDefaultIcon;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::DisableScrollBuffer()
-// -----------------------------------------------------------------------------
-//
-EXPORT_C void CHgScroller::DisableScrollBuffer()
-    {
-    delete iManager;
-    iManager = NULL;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::InitGraphicsL()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::InitGraphicsL()
-    {
-    // Non-Skinned icons
-    // Default icon
-    if(iIndicatorManager)
-        {
-        iIndicatorManager->InitIconL(iDefaultIcon, 
-                EMbmGanesQgn_prop_checkbox_on, EMbmGanesQgn_prop_checkbox_on_mask, iImageSize);
-
-        iIndicatorManager->InitIndicatorsL(iIndicatorSize);
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::SelectionChanged()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::SelectionChanged()
-    {
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::FitRowToView()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::FitRowToView( TInt aRow )
-    {
-    if( iLandscapeScrolling )
-        {
-        if ( aRow*iRowHeight < iViewPosition.iX-(iWidth/2) )
-            {
-            // Item is at top but not fully visible
-            iViewPosition.iX -= (iViewPosition.iX-(iWidth/2) - ((aRow)*iRowHeight));
-            HandleViewPositionChanged();                            
-            }    
-        else if ( (aRow+1)*iRowHeight > iViewPosition.iX+(iWidth/2) )
-            {
-            // Item is at bottom but not fully visible
-            iViewPosition.iX += ((aRow+1)*iRowHeight - (iViewPosition.iX+(iWidth/2)));
-            HandleViewPositionChanged();                            
-            }        
-        }
-    else
-        {
-        if ( aRow*iRowHeight < iViewPosition.iY-(iHeight/2) )
-            {
-            // Item is at top but not fully visible
-            iViewPosition.iY -= (iViewPosition.iY-(iHeight/2) - ((aRow)*iRowHeight));
-            HandleViewPositionChanged();                            
-            }    
-        else if ( (aRow+1)*iRowHeight > iViewPosition.iY+(iHeight/2) )
-            {
-            // Item is at bottom but not fully visible
-            iViewPosition.iY += ((aRow+1)*iRowHeight - (iViewPosition.iY+(iHeight/2)));
-            HandleViewPositionChanged();                            
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::MarqueeCallback()
-// -----------------------------------------------------------------------------
-//
-TInt CHgScroller::MarqueeCallback( TAny* aSelf )
-    {
-    CHgScroller* self = static_cast<CHgScroller*>(aSelf);
-    if( self->IsDisplayed( self->iSelectedIndex ) )
-        {
-        self->DrawDeferred();
-        return ETrue;
-        }
-    else
-        {
-        return EFalse;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleGainingForeground()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleGainingForeground()
-    {
-    iSelectionMode = ENoSelection;
-    TRect rect( PositionRelativeToScreen(), Size() );
-    TRAP_IGNORE( InitScreenL( rect ); )
-    iScrollbar->Reset();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgScroller::HandleLosingForeground()
-// -----------------------------------------------------------------------------
-//
-void CHgScroller::HandleLosingForeground()
-    {
-    iPopupText1.Zero();
-    iPopupText2.Zero();
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::LaunchHighlightTimer()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::LaunchHighlightTimer()
-    {
-    if ( !iHighlightTimer )
-        {
-        return;
-        }
-
-    TInt highlightTimeout( 0 );
-    if ( iPhysics )
-        {
-        highlightTimeout = iPhysics->HighlightTimeout() * 1000;
-        }
-    if ( highlightTimeout == 0 )
-        {
-        highlightTimeout = KDefaultHighlightTimeout;
-        }
-
-    iHighlightTimer->Cancel();
-    iHighlightTimer->Start( 
-        TTimeIntervalMicroSeconds32( highlightTimeout ),
-        TTimeIntervalMicroSeconds32( highlightTimeout ), 
-        TCallBack( HighlightTimerCallback, this ) );
-    }
-
-
-// ---------------------------------------------------------------------------
-// CHgScroller::HighlightTimerCallback()
-// ---------------------------------------------------------------------------
-//     
-TInt CHgScroller::HighlightTimerCallback( TAny* aPtr )
-    {
-    CHgScroller* scroller = 
-        static_cast<CHgScroller*>( aPtr );
-
-    TInt err = KErrNotFound;
-        
-    if ( scroller  )
-        {
-        TRAP( err, scroller->SetHighlightL() );
-        }
-    
-    return err;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::SetHighlightL()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::SetHighlightL()
-    {
-    iHighlightTimer->Cancel();
-
-    TInt index = GetSelected(iStart);
-    if(index != KErrNotFound && iPointerDown )
-        {
-        iSelectionToFocusedItem = index == iSelectedIndex;            
-        iSelectedIndex = index;
-        iFocusedIndex = index;
-        if( !iSelectionToFocusedItem ) // Selection has changed
-            {
-            if( iSelectionObserver )
-                iSelectionObserver->HandleSelectL(iSelectedIndex);
-
-            FitSelectionToView();
-            SelectionChanged();
-            iDrawUtils->ResetMarquee();
-            }
-        DrawDeferred();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::SetSelectionMode()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::SetSelectionMode( TSelectionMode aMode )
-    {
-    iSelectionMode = aMode;
-    if( iSelectionMode == ESelectionPossible
-            || iSelectionMode == ENoSelection )
-        {
-        iCoeEnv->InputCapabilitiesChanged();
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::SelectionMode()
-// ---------------------------------------------------------------------------
-//     
-CHgScroller::TSelectionMode CHgScroller::SelectionMode() const
-    {
-    return iSelectionMode;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::KeyScrollingTimerCallback()
-// ---------------------------------------------------------------------------
-//     
-TInt CHgScroller::KeyScrollingTimerCallback( TAny* aPtr )
-    {
-    CHgScroller* scroller = 
-        static_cast<CHgScroller*>( aPtr );
-
-    TInt err = KErrNotFound;
-        
-    if ( scroller  )
-        {
-        scroller->DoKeyScrolling();
-        err = KErrNone;
-        }
-    
-    return err;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::DoKeyScrolling()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::DoKeyScrolling()
-    {
-    TKeyEvent keyevent;
-    
-    switch( iKeyScrollingState )
-        {
-        case EKeyScrollingUp:
-            {
-            keyevent.iCode = EKeyUpArrow;
-            HandleKeyEvent( keyevent );
-            break;
-            }
-        case EKeyScrollingDown:
-            {
-            keyevent.iCode = EKeyDownArrow;
-            HandleKeyEvent( keyevent );
-            break;
-            }
-        case EKeyScrollingLeft:
-            {
-            keyevent.iCode = EKeyLeftArrow;
-            HandleKeyEvent( keyevent );
-            break;
-            }
-        case EKeyScrollingRight:        
-            {
-            keyevent.iCode = EKeyRightArrow;
-            HandleKeyEvent( keyevent );
-            break;
-            }
-        case ENoKeyScrolling:
-        default:
-            StopKeyScrolling();
-            break;
-        }
-
-    DrawNow();
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::StopKeyScrolling()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::StopKeyScrolling()
-    {    
-    iKeyScrollingTimer->Cancel();
-    iKeyScrollingState = ENoKeyScrolling;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::FocusChanged()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::FocusChanged(TDrawNow aDrawNow)
-    {
-    if( iKeyUtils )
-        {
-        if( !(iFlags & EHgScrollerKeyMarkingDisabled) )
-            {
-            if(IsFocused())
-                {
-                iKeyUtils->HandleGainingFocus();
-                }
-            else
-                {
-                iKeyUtils->HandleLosingFocus();
-                }
-            }
-        else
-            {
-            iKeyUtils->HandleLosingFocus();
-            }
-        }
-
-    CCoeControl::FocusChanged( aDrawNow );
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::HandleResourceChange()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::HandleResourceChange( TInt aType )
-    {
-    TRAP_IGNORE(
-            // When skin changes the indicator icons must be reloaded.
-        if ( aType == KAknsMessageSkinChange )
-            {
-            delete iIndicatorManager; iIndicatorManager = NULL;
-            iIndicatorManager = CHgIndicatorManager::NewL();
-            InitGraphicsL();
-            }
-        )
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::HandleLongTapEventL()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::HandleLongTapEventL( const TPoint& /*aPenEventLocation*/,
-                        const TPoint& aPenEventScreenLocation)
-    {
-    if( iActionMenu )
-        {
-        iPointerDown = EFalse;
-        iActionMenu->ShowMenuL(aPenEventScreenLocation);
-        }
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::CollectionState()
-// ---------------------------------------------------------------------------
-//     
-TUint CHgScroller::CollectionState() const
-    {
-    TUint ret = 0;
-    
-    if(IsFocused()) ret |= MAknCollection::EStateCollectionVisible;
-    
-    if(HasHighlight()) ret |= MAknCollection::EStateHighlightVisible; 
-    
-    if( iFlags & EHgScrollerSelectionMode ) ret |= MAknCollection::EStateMultipleSelection;
-    
-    return ret; 
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::CollectionState()
-// ---------------------------------------------------------------------------
-//     
-void CHgScroller::ItemActionMenuClosed()
-    {
-    DrawDeferred();
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::CollectionState()
-// ---------------------------------------------------------------------------
-//     
-TInt CHgScroller::CollectionExtension( TUint /*aExtensionId*/, TAny*& /*a0*/, TAny* /*a1*/ )
-    {
-    return KErrNone;
-    }
-
-// ---------------------------------------------------------------------------
-// CHgScroller::HasHighlight()
-// ---------------------------------------------------------------------------
-//     
-TBool CHgScroller::HasHighlight() const
-    {
-    return (iActionMenu == NULL) || iShowHighlight || (iFlags & EHgScrollerForceDoubleClick);
-    }
-
-// End of File