uifw/ganes/src/HgList.cpp
changeset 47 2f0c06423c72
parent 46 0e1e0022bd03
child 53 3c67ea82fafc
--- a/uifw/ganes/src/HgList.cpp	Thu Jul 29 14:21:56 2010 +0800
+++ /dev/null	Thu Jan 01 00:00:00 1970 +0000
@@ -1,443 +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/HgList.h>
-#include <ganes/HgItem.h>
-
-#include "HgLayoutData.h"
-#include "HgDrawUtils.h"
-
-#include <aknphysics.h>
-
-#include "HgConstants.h"
-#include "HgMarquee.h"
-
-#include <AknIconUtils.h>
-#include <avkon.mbg>
-#include <AknUtils.h> //AknLayoutUtils
-#include <gdi.h> // CFont
-#include <AknsUtils.h>
-#include <AknsDrawUtils.h>
-#include <AknsConstants.h>
-#include <AknsFrameBackgroundControlContext.h>
-#include <gulicon.h>
-
-#include <layoutmetadata.cdl.h>
-#include <aknlayoutscalable_avkon.cdl.h>
-
-// UI Constants
-
-// ============================ MEMBER FUNCTIONS ===============================
-
-// -----------------------------------------------------------------------------
-// CHgList::ConstructL()
-// Symbian 2nd phase constructor can leave.
-// -----------------------------------------------------------------------------
-//
-void CHgList::ConstructL (const TRect& aRect, RWsSession* aSession )
-    {
-    // Inherited classes might use some custom layout data, so lets use the
-    // default one only if not yet initialized.
-    if( !iLayoutData )
-        iLayoutData = CHgListLayoutData::NewL();
-    
-    CHgScroller::ConstructL( aRect, aSession );
-    
-    // Activate the window, which makes it ready to be drawn
-    ActivateL ( );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::CHgList()
-// C++ default constructor can NOT contain any code, that might leave.
-// -----------------------------------------------------------------------------
-//
-CHgList::CHgList( TInt aItemCount, 
-        CGulIcon* aDefaultIcon )
-: CHgScroller( aItemCount, aDefaultIcon ),
-    iColor( KRgbBlack ),
-    iColorBack( AKN_LAF_COLOR( 0 ) ),
-    iHighlightedColor( KRgbBlack ),
-    iHighlightedColorBack( AKN_LAF_COLOR( 0 ) )    
-    {
-    SetFlags(EHgScrollerSearchWithQWERTY); // Set QWERTY search on
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::~CHgList()
-// Destructor.
-// -----------------------------------------------------------------------------
-//
-EXPORT_C CHgList::~CHgList ( )
-    {
-    delete iLayoutData;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::InitItemsL()
-// -----------------------------------------------------------------------------
-//
-void CHgList::InitItemsL()
-    {
-    for(TInt i = 0; i < iItemCount; ++i)
-        {
-        iItems.Append(CHgItem::NewL());
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::DrawHighlight()
-// Called by Draw function to draw the higlighted item effect.
-// -----------------------------------------------------------------------------
-//
-void CHgList::DrawHighlight( const TRect& aRect, TRgb& aTextColor ) const
-    {
-    // Init drawing options
-    TRect outerRect( aRect );
-    TRect innerRect( aRect );
-    innerRect.Shrink(KListHighlightInnerRectShrink,KListHighlightInnerRectShrink);
-    
-    CWindowGc& gc = SystemGc();
-    
-    // Draw "selected item" rect for the row. Bitmaps to draw the rect are feched from 
-    // current skin instance.
-    if( HasHighlight() )
-        {
-        if( iPointerDown && !iPanning && iFocusedIndex != KErrNotFound && iSelectionToFocusedItem )
-            {
-            AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(),
-                                        gc,
-                                        outerRect,
-                                        innerRect,
-                                        KAknsIIDQsnFrListPressed,
-                                        KAknsIIDQsnFrListCenterPressed );
-            }
-        else
-            {
-            AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(),
-                                        gc,
-                                        outerRect,
-                                        innerRect,
-                                        KAknsIIDQsnFrList,
-                                        KAknsIIDQsnFrListCenter );
-            }
-        aTextColor = iHighlightedColor;
-        }
-    else if( iPointerDown && !iPanning )
-        {
-        AknsDrawUtils::DrawFrame( AknsUtils::SkinInstance(),
-                                    gc,
-                                    outerRect,
-                                    innerRect,
-                                    KAknsIIDQsnFrList,
-                                    KAknsIIDQsnFrListCenter );
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::HandleSizeChanged()
-// Called by framework when the view size is changed.
-// -----------------------------------------------------------------------------
-//
-void CHgList::HandleSizeChanged ( )
-    {
-    iLandscapeScrolling = EFalse; // list always scrolls in portrait mode
-    iRows = iItemCount;
-    
-    // Resolve colors for normal and higlighted items            
-    if ( AknsUtils::AvkonSkinEnabled() )
-        {
-        // this does not modify color unless it gets a correct one
-        // no real need to check errors
-        AknsUtils::GetCachedColor( 
-                AknsUtils::SkinInstance(),
-                iColor,
-                KAknsIIDQsnTextColors,
-                EAknsCIQsnTextColorsCG6 );                
-        
-        AknsUtils::GetCachedColor( 
-                AknsUtils::SkinInstance(),
-                iHighlightedColor,
-                KAknsIIDQsnTextColors,
-                EAknsCIQsnTextColorsCG10 );
-        }
-    iLayoutData->SetBaseLayout(AknLayoutScalable_Avkon::list_gen_pane(0));
-
-    if( iFlags & CHgScroller::EHgScrollerFlatStatusPane )
-        {
-        iListOffset = TPoint(0,0);
-        }
-    else
-        {
-        TAknLayoutRect foobar;
-        foobar.LayoutRect(Rect(), AknLayoutScalable_Avkon::listscroll_gen_pane(0));
-        
-        iWidth = foobar.Rect().Width();
-        iHeight = foobar.Rect().Height();
-        iListOffset = foobar.Rect().iTl;
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::DoDraw()
-// -----------------------------------------------------------------------------
-//
-void CHgList::DoDraw(const TRect& /*aRect*/ ) const
-    {
-    // Calculate the displacement. How much of the first row is showing.
-    TInt ydiff = (iViewPosition.iY-(iHeight/2))%(iRowHeight);
-    
-    CWindowGc& gc = SystemGc();
-    
-    if( iItemCount == 0 )
-        {
-        if( iEmptyText )
-            iDrawUtils->DrawEmptyText(gc, Rect(), *iEmptyText, iColor);
-        }
-    else
-        {
-        // Get the row rect
-        TAknLayoutRect layout;
-        layout.LayoutRect(ListRect(), iLayoutData->ItemLayout());
-        
-        ResetClippingRect(gc);
-        
-        // Draw rows
-        for(TInt i = iCurrentRow; i < iRows && i < iItems.Count(); ++i)
-            {
-            // Topleft position of the row.
-            TPoint point(
-                    0, 
-                    ((i-iCurrentRow)*iRowHeight) - ydiff);
-
-            if( i < 0 || point.iY < iListOffset.iY - layout.Rect().Height() )
-                continue; // Not a real row
-            else if( point.iY + iListOffset.iY > iHeight )
-                break; // Row is now showing on the screen, we can stop. 
-            
-            
-            TRect rect(layout.Rect());
-            // Move to correct y-position
-            rect.Move(point);
-            DrawItem( i, rect );
-            }
-        gc.CancelClippingRect();
-        }
-    }
-
-
-void CHgList::ResetClippingRect( CWindowGc& aGc ) const
-    {
-    if( !(iFlags & CHgScroller::EHgScrollerFlatStatusPane) )
-        aGc.SetClippingRect( TRect(iListOffset, TSize(iWidth, iHeight+2)) );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::TotalSize()
-// -----------------------------------------------------------------------------
-//
-TSize CHgList::TotalSize() const 
-    {
-    return TSize( iWidth, iRows*iRowHeight );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::GetSelected()
-// -----------------------------------------------------------------------------
-//
-TInt CHgList::GetSelected( TPoint aPosition ) const
-    {
-    // Real position is current screen pos + world pos
-    TInt y = aPosition.iY + (iViewPosition.iY - (iHeight/2)) - iListOffset.iY;
-    y /= iRowHeight;
-    return y >= iItems.Count() || y < 0 ? KErrNotFound : y;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::DoHandleKeyEvent()
-// -----------------------------------------------------------------------------
-//
-TBool CHgList::DoHandleKeyEvent(const TKeyEvent& aKeyEvent)
-    {        
-    TBool ret = ETrue;
-    switch( aKeyEvent.iCode )
-        {
-        case EKeyUpArrow:
-            HandleUpArrow();
-            break;
-        case EKeyDownArrow:
-            HandleDownArrow();
-            break;
-        case EKeyLeftArrow:
-        case EKeyRightArrow:
-        default:
-            ret = EFalse;
-            break;
-        }
-    
-    return ret;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::HandleDownArrow()
-// -----------------------------------------------------------------------------
-//
-void CHgList::HandleDownArrow()
-    {
-    if( iSelectedIndex == KErrNotFound )
-        {
-        SelectDefaultItem();
-        }
-    else
-        {
-        if( iSelectedIndex <= iRows - 1 )
-            {
-            const TInt nextIndex = iSelectedIndex == (iRows - 1) ? 
-                0 : iSelectedIndex + 1;
-
-            if( iSelectionMode == ESelectionMark )
-                {
-                Mark( iSelectedIndex );
-                Mark( nextIndex );
-                }
-            else if( iSelectionMode == ESelectionUnMark )
-                {
-                UnMark( iSelectedIndex );
-                UnMark( nextIndex );
-                }
-            iSelectedIndex = nextIndex;
-            FitSelectionToView();
-            SelectionChanged();
-            DrawDeferred();
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::HandleUpArrow()
-// -----------------------------------------------------------------------------
-//
-void CHgList::HandleUpArrow()
-    {    
-    if( iSelectedIndex == KErrNotFound )
-        {
-        SelectDefaultItem();
-        }
-    else
-        {
-        if( iSelectedIndex >= 0 )
-            {
-            const TInt nextIndex = iSelectedIndex == 0 ? 
-                iRows - 1 : iSelectedIndex - 1;
-            
-            if( iSelectionMode == ESelectionMark )
-                {
-                Mark( iSelectedIndex );
-                Mark( nextIndex );
-                }
-            else if( iSelectionMode == ESelectionUnMark )
-                {
-                UnMark( iSelectedIndex );
-                UnMark( nextIndex );
-                }
-            iSelectedIndex = nextIndex;
-            FitSelectionToView();
-            SelectionChanged();
-            DrawDeferred();
-            }
-        }
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::FitSelectionToView()
-// -----------------------------------------------------------------------------
-//
-void CHgList::FitSelectionToView()
-    {
-    FitRowToView( iSelectedIndex );
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::ListRect()
-// -----------------------------------------------------------------------------
-//
-TRect CHgList::ListRect() const
-    {
-    TRect rect(iListOffset, TSize(iWidth,iHeight));
-    TAknLayoutRect areaaftersb;
-    areaaftersb.LayoutRect(rect, iLayoutData->BaseLayout());
-    return areaaftersb.Rect();
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::SelectDefaultItem()
-// -----------------------------------------------------------------------------
-//
-void CHgList::SelectDefaultItem()
-    {
-    iSelectedIndex = iCurrentRow;
-    FitSelectionToView();
-    SelectionChanged();
-
-    DrawDeferred();
-    }
-
-TInt CHgList::CurrentIndex()
-    {
-    return iCurrentRow;
-    }
-
-TBool CHgList::IsDisplayed( TInt aIndex )
-    {
-    TInt start = CurrentIndex();
-    TInt rowsPerView = ItemsOnScreen();
-    if( (iViewPosition.iY-(iHeight/2))%(iRowHeight) )
-        ++rowsPerView;
-    TInt end = start + rowsPerView;
-    return aIndex >= start && aIndex <= end;
-    }
-
-// -----------------------------------------------------------------------------
-// CHgList::FitTopItemToView()
-// -----------------------------------------------------------------------------
-//
-void CHgList::FitTopItemToView( TInt aIndex )
-    {
-    // Higlighted item is set to top of the list
-    TInt newPos = aIndex*iRowHeight + iHeight/2;
-    
-    if( ItemsOnScreen() >= iItems.Count() )
-        {
-        newPos = iHeight/2;
-        }
-    else
-        {
-        const TInt endMid = TotalSize().iHeight - iHeight/2;
-        if( newPos > endMid )
-            {
-            // We are presenting last items in the list
-            newPos = endMid;
-            }
-        }
-    
-    iViewPosition.iY = newPos;
-    HandleViewPositionChanged();    
-    }
-
-// End of File