/*
* Copyright (c) 2010 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:  Easy dialing listbox data.
*
*/


#ifndef _EASYDIALINGLISTBOXDATA_H
#define _EASYDIALINGLISTBOXDATA_H


// INCLUDE FILES
#include <aknlists.h>

// CONSTANTS

/*
 * Matching highlight separator character is used in listbox model to separate
 * matching and non-matching charaters. 0x1F is chosen for this because
 * it is a control character "INFORMATION SEPARATOR ONE" of ASCII set. 
 * User of the listbox must use this character in creating list box item 
 * strings.
 */
// FORWARD DECLARATIONS
class CEasyDialingListBox;
class CEasyDialingContactDataManager;

// CLASS DECLARATIONS

/*
 * Easy dialing listbox data class.
 */

class CEasyDialingListBoxData : public CFormattedCellListBoxData
    {
public:
    
    class TExtendedColors : public CFormattedCellListBoxData::TColors 
        {
        public:
            
            TExtendedColors();
    
            /** The matching text colour. */
            TRgb iMatchingText;
    
            /** The matching background colour. */
            TRgb iMatchingBack;
    
        };
    
    
    /**
     * Destructor
     */
    ~CEasyDialingListBoxData();
       
    /**
    * Two phased constructor of the class.
    * @return   Pointer to the instance. 
    */
    static CEasyDialingListBoxData* NewL( CCoeEnv& aCoeEnv );
     
    /**
    * Draws selected item.
    */
    void DrawData(
        const TListItemProperties& aItemProperties, 
        CWindowGc& aGc,
        const TDesC* aText,
        const TRect& aRect,
        TBool aHighlight,
        const TExtendedColors& aColors ) const;
     
    /**
    * Draws selected item highlight.
    * @param    aGc         Graphics context.
    * @param    aItemRect   Item rectangle.
    */
    void DrawHighlight( CWindowGc &aGc, const TRect &aItemRect ) const;
    
    /**
    * Sets the contact data manager. Must be set before using the listbox.
    * @param    aContactDataManager Contact data manager.
    */
    void SetContactDataManager( CEasyDialingContactDataManager* aContactDataManager );
    
    /**
    * Sets a pointer to listbox class. Called from listbox constructor.
    * @param    aControl    Pointer to easy dialing listbox cotrol.
    */
    void SetEDLBXControl( CEasyDialingListBox* aControl );
    
    /**
     * Handle change in list item size
     */
    void HandleItemSizeChange();
    
protected:
        
    /**
    * C++ Constructor
    */
    CEasyDialingListBoxData( CCoeEnv& aCoeEnv );
    
    /**
     * Second phase constructor 
     */
    void ConstructLD();
   
private:
    
    /**
    * Determines fonts for contact name and company name.
    * The font sizes are determined based on list box item height.
    * This function must be called once before any drawing routines are 
    * done.
    * @param    aItemHeight List box item height
    */
    void ObtainFonts( TInt aItemHeight );
    
    /**
     * Update the color bitmap used for fallback graphics for the Action Menu arrow according to 
     * size changes in listbox control.
     * @param   aSize   New size.
     */
    void UpdateColorBitmapL( const TSize& aSize );
    
    /**
    * Draws the data for one list item.
    * @param    aProperties List item property structure.
    * @param    aGc Graphics context.
    * @param    aText   String containing  list item data information.
    * @param    aItemRect   Item rectangle.
    * @param    aHighlight  ETrue if the item has highlight, EFalse otherwise.
    * @param    aColors Structure containing used colors.
    */
    void DrawDataFormatted( 
        TListItemProperties aProperties,
        CWindowGc& aGc,
        const TDesC* aText,
        const TRect& aItemRect,
        TBool aHighlight,
        const TExtendedColors& aColors ) const;
    
    /**
     * Draws the Contact Thumbnail Icon if any, else draws the dummy contact thumbnail.
     * @param   aGc Graphics context.
     * @param   aBoundingBox    Rectangle containing bounds for contact thumbnail.
     * @param   aContactIndex   Contact index for the contact data manager
     */
    void DrawContactThumbnail(
            CWindowGc& aGc,
            TRect aBoundingBox,
            TInt aContactIndex ) const;
    
    /**
     * Draws the Action Menu.
     * @param   aGc Graphics context.
     * @param   aActionMenuArrowRect    Rectangle where arrow is to be drawn.
     */ 
    void DrawArrowIcon( CWindowGc& aGc, TRect aActionMenuArrowRect ) const;
    
    /**
     * Draws the Favourite Icon. Takes the name rect as a parameter. Name rect
     * must be unmirrored, because the mirroring is done as the last thing
     * before drawing.
     * @param   aGc Graphics context.
     * @param   aNameRectUnMirrored Name rect, after which the icon is drawn
     * @param   aEffectiveRect The whole listbox item rect. Used for mirroring.
     */
    void DrawFavouriteIcon(
            CWindowGc& aGc, 
            TRect aNameRectUnMirrored,
            TRect aEffectiveRect) const;
    
    /**
     * Draws the SIM or Service Number icon. Takes the name rect as a parameter. Name rect
     * must be unmirrored, because the mirroring is done as the last thing
     * before drawing.
     * @param   aIcon The icon to be drawn
     * @param   aGc Graphics context.
     * @param   aNameRectUnMirrored Name rect, after which the icon is drawn
     * @param   aEffectiveRect The whole listbox item rect. Used for mirroring.
     */
    void DrawSimIcon(
            CGulIcon& aIcon,
            CWindowGc& aGc, 
            TRect aNameRectUnMirrored,
            TRect aEffectiveRect) const;
    
private:
    
    /** Control environment */
    CCoeEnv& iCoeEnv;
    
    /** Font to be used showing contact name. Not owned. */
    CFont* iContactNameFont;
    
    /** Font to be used showing company name. Not owned. */ 
    CFont* iCompanyNameFont;
    
    /** Handle for loading and storing the thumbnails. Not owned.*/ 
    CEasyDialingContactDataManager* iContactDataManager;
        
    /** Action Menu LeftPointing Arrow for mirrored layout. Owned. */
    CGulIcon* iArrowPointingRight;
    
    /** Action Menu RightPointing Arrow. Owned. */
    CGulIcon* iArrowPointingLeft;
    
    /** Action icon color bitmap. Owned. */
    CFbsBitmap* iColorBitmap;
    
    /** Default image for contacts with no own thumbnail. Owned. */
    CGulIcon* iDummyThumbnail;
    
    /** Favourite icon. Owned. */
    CGulIcon* iFavouriteIcon;
    
    /** SIM contact icon. Owned. */
    CGulIcon* iSimContactIcon;
    
    /** Service contact icon. Owned. */
    CGulIcon* iSdnContactIcon;
    
    /** Pointer to listbox. Not owned. */
    CEasyDialingListBox* iControl;
    };


#endif // _EASYDIALINGLISTBOXDATA_H

