/*
* Copyright (c) 2007 Nokia Corporation and/or its subsidiary(-ies). 
* All rights reserved.
* This component and the accompanying materials are made available
* under the terms of "Eclipse Public License v1.0"
* which accompanies this distribution, and is available
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
*
* Initial Contributors:
* Nokia Corporation - initial contribution.
*
* Contributors:
*
* Description:  A drawer class for the capture setup list box items*
*/


#ifndef CAMCAPTURESETUPLISTITEMDRAWER_H
#define CAMCAPTURESETUPLISTITEMDRAWER_H

//  INCLUDES
#include <eiklbi.h>
#include <AknUtils.h>
#include <AknLayout2ScalableDef.h> 

// FORWARD DECLARATIONS
class MCamListboxModel;
class CAknIconArray;
class CAknsBasicBackgroundControlContext;

// CLASS DECLARATION

/**
*  Item drawer for CCamCaptureSetupListBox
*
*  @since 2.8
*/
class CCamCaptureSetupListItemDrawer : public CListItemDrawer
    {
    public:  // Constructors and destructor
        
        /**
        * Symbian OS two-phased constructor
        * @since 2.8
        * @param aListBoxModel reference to a list box model used to access item data
        * @return pointer to the newly created object
        */
        static CCamCaptureSetupListItemDrawer* NewL( MCamListboxModel& aListBoxModel, TBool aFullySkinned = EFalse );        

        /**
        * Destructor.
        * @since 2.8
        */
        virtual ~CCamCaptureSetupListItemDrawer();

    public:
        /**
        * Sets the parent control of the listbox
        * @since 2.8
        * @param aControl pointer the the listbox's parent
        */
        void SetParentControl( const CCoeControl* aControl );
	
    private:

        /**
        * C++ default constructor.
        * @since 2.8
		* @param aListBoxModel reference to a list box model used to access item data
        */
        CCamCaptureSetupListItemDrawer( MCamListboxModel& aListBoxModel, TBool aFullySkinned = EFalse );

		/**
        * Second phase construction
        */
        void ConstructL();
		
    private: // Methods from base classes


        /**
        * From CListItemDrawer
        * Calculates the minimum size for a cell
        * @since 2.8
        * @return the minimum size of a cell
        */
        TSize MinimumCellSize() const;

        /**
        * From CListItemDrawer
        * Draws an item to the screen
        * @since 2.8
		* @param aItemIndex the item to draw
        * @param aActualItemRect the screen area occupied by the item
        * @param aItemIsCurrent whether or not the item is highlighted
        * @param aViewIsEmphasized unused
        * @param aViewIsDimmed unused
        * @param aItemIsSelected whether or not the item is selected
        */
        void DrawActualItem( TInt aItemIndex, 
                             const TRect& aActualItemRect,
                             TBool aItemIsCurrent,
                             TBool aViewIsEmphasized,
                             TBool aViewIsDimmed,
                             TBool aItemIsSelected ) const;

    private: // New methods

        /**
        * Draws the highlight rectangle
        * @since 2.8
        * @param aActualItemRect the screen area occupied by the item
        */
        void DrawHighlight( const TRect& aActualItemRect ) const;

        /**
        * Draws the radio button according to the items current state
        * @since 2.8
        * @param remainingItemRect the remaining are for the item
        * @param aItemIsSelected whether or not the item is selected
        * @param aColor The colour to draw the radio button in
        */
        void DrawRadioButton( const TRect& remainingItemRect, 
                                    TBool aItemIsSelected, const TRgb& aColor ) const;
   
        /**
        * Draws a rectangle for an item.
		* @since 2.8
		* @param the rectangular area to be drawn.
        */
        void DrawItemRect( const TRect& aActualItemRect ) const;

        /**
        * Draws a rectangle for an item.
        * @since 2.8
        * @param the rectangular area to be drawn.
        */
        void DrawTransparentItemRect( const TRect& aActualItemRect ) const;

        /**
        * Read list layout
        */
        void ReadLayout();
        
        void CreateIconAndAddToArrayL( CArrayPtr<CGulIcon>*& aIconArray,
                                       const TAknsItemID& aId,
                                       const TInt aColorIndex,
                                       const TDesC& aBmpFile,
                                       const TInt32 aBmp,
                                       const TInt32 aBmpM );        

    private:    // Data

		// Array of icons for different radio button states.
        CArrayPtr<CGulIcon>* iRadioButtonIconArray;

        // Model class providing access to item data
        MCamListboxModel& iModel;

        // Item height read from resource
        TInt iCaptureSetupItemHeight;

        // the parent control of the listbox
        const CCoeControl* iParentControl;

        // Layouts
        TAknTextComponentLayout   iTxtLayout;   
        TAknWindowComponentLayout iBmpLayout;
        TAknTextComponentLayout   iTxtWithRbLayout;
        TAknWindowComponentLayout iBmpWithRbLayout;
        TAknWindowComponentLayout iHighlightLayout;
        // Drawing mode
        TBool iFullySkinned;
	};

#endif      // CAMCAPTURESETUPLISTITEMDRAWER_H
            
// End of File
