epoc32/include/mw/eikclbd.h
author William Roberts <williamr@symbian.org>
Wed, 31 Mar 2010 12:33:34 +0100 (2010-03-31)
branchSymbian3
changeset 4 837f303aceeb
permissions -rw-r--r--
Current Symbian^3 public API header files (from PDK 3.0.h)
This is the epoc32/include tree with the "platform" subtrees removed, and
all but a selected few mbg and rsg files removed.
     1 /*
     2 * Copyright (c) 1997-2009 Nokia Corporation and/or its subsidiary(-ies).
     3 * All rights reserved.
     4 * This component and the accompanying materials are made available
     5 * under the terms of "Eclipse Public License v1.0"
     6 * which accompanies this distribution, and is available
     7 * at the URL "http://www.eclipse.org/legal/epl-v10.html".
     8 *
     9 * Initial Contributors:
    10 * Nokia Corporation - initial contribution.
    11 *
    12 * Contributors:
    13 *
    14 * Description:
    15 *
    16 */
    17 
    18 #if !defined(__EIKCLBD_H__)
    19 #define __EIKCLBD_H__
    20 
    21 #include <e32base.h>
    22 #include <gdi.h>
    23 
    24 #include <eiklbd.h>
    25 #include <avkon.hrh>
    26 #include <babitflags.h>    // for TBitFlags32
    27 
    28 class CWindowGc;
    29 class CGulIcon;
    30 class CColumnListBoxDataExtension;
    31 class MAknsControlContext;
    32 class CCoeControl;
    33 class TAknsItemID;
    34 class CAknsEffectAnim;
    35 class CAknsListBoxBackgroundControlContext;
    36 class CAknLayoutData;
    37 class TAknWindowLineLayout;
    38 class TAknTextLineLayout;
    39 class TAknWindowComponentLayout;
    40 class TAknTextComponentLayout;
    41 class MAknsSkinInstance;
    42 
    43 /**
    44 * A callback interface for overriding highlight animation input layer
    45 * preparation in derived classes. Usually drawing the background under the
    46 * highlight rect will yield the right kind of result. The size of the render
    47 * target is equal to item cell size.
    48 *
    49 * @since 3.0
    50 */
    51 class MColumnListBoxAnimBackgroundDrawer
    52     {
    53     public:
    54 
    55         /**
    56          * Draws the background under the current highlight.
    57          *
    58          * Should be implemented in the derived class .
    59          *
    60          * @param aGc bitmapped graphics context to be drawn.
    61          * @return @c ETrue if Succeeded.
    62          */
    63         virtual TBool DrawHighlightAnimBackground( CFbsBitGc& aGc ) const = 0;
    64     };
    65 
    66 /**
    67  * The @c CColumnListBoxData class handles the data required to draw a column 
    68  * list box.
    69  *
    70  * The class performs drawing for @c CColumnListBoxItemDrawer. Columns are 
    71  * numbered from 0 from left to right, and extra column data can be set 
    72  * for each.
    73  *
    74  * N.B.: The standard width of a column drawn by @c CColumnListListBoxData is  
    75  * 0 pixels, so at the very least a column width should be set for each column 
    76  * in a column list box.    
    77  *
    78  * This class is not intended for user derivation. 
    79  */
    80 class CColumnListBoxData : public CListBoxData
    81     {
    82     friend class CColumnListBoxDataExtension;
    83 public:
    84 
    85     /**
    86      * Represents the colours used within the border and for the optional 
    87      * single pixel border outlines.
    88      *
    89      * These colours are stored using @c TRgb values.
    90      */
    91     class TColors
    92         {
    93     public:
    94 
    95         /**
    96          * C++ default constructor.
    97          */
    98         IMPORT_C TColors();
    99     public:
   100 
   101         /**
   102          * Stores text Color.
   103          */
   104         TRgb iText;
   105 
   106         /**
   107          * Stores background color.
   108          */
   109         TRgb iBack;
   110 
   111         /**
   112          * Stores highLighted text color.
   113          */ 
   114         TRgb iHighlightedText;
   115 
   116         /**
   117          * Stores highlighted background colour.
   118          */
   119         TRgb iHighlightedBack;
   120         };
   121 
   122 public:
   123 
   124     /**
   125      * Two-phased constructor.
   126      *
   127      * Allocates and constructs a column list box data object.
   128      *
   129      * Constructs an array in which the column data is held.
   130      *
   131      * @return New @c CColumnListBoxData.
   132      */
   133     IMPORT_C static CColumnListBoxData* NewL();
   134     
   135     /**
   136      * Destructor.
   137      */
   138     IMPORT_C ~CColumnListBoxData();
   139 
   140 public:
   141 
   142     /**
   143      * Gets the index of the last defined column.
   144      *
   145      * @return The index of the last defined column or @c KErrNotFound if no 
   146      *         column has been defined.
   147      */
   148     IMPORT_C TInt LastColumn() const;
   149     
   150     /**
   151      * Gets the specified column’s width in pixels.
   152      *
   153      * @param aColumn The index of the column for which the width is obtained.
   154      * @return The specified column’s width in pixels. Zero is returned if no 
   155      *         column exists at the specified index.
   156      */
   157     IMPORT_C TInt ColumnWidthPixel(TInt aColumn) const;
   158 
   159     /**
   160      * Sets the specified column’s width in pixels.
   161      * 
   162      * If the column does not exist, one is added at the specified index, 
   163      * with the specifed width.
   164      *
   165      * @param aColumn The index of the column for which the width is to be set.
   166      * @param aWidth The width in pixels.
   167      */
   168     IMPORT_C void SetColumnWidthPixelL(TInt aColumn,TInt aWidth);
   169     
   170     /**
   171     * Not used in S60.
   172     */
   173     IMPORT_C TInt ColumnHorizontalGap(TInt aColumn) const;
   174 
   175     /**
   176     * Not used in S60.
   177     */
   178     IMPORT_C void SetColumnHorizontalGapL(TInt aColumn,TInt aGap);
   179 
   180     /**
   181      * Gets column's baseline.
   182      *
   183      * @param aColumn target column.
   184      * @return Vertical position.
   185      */
   186     IMPORT_C TInt ColumnBaselinePos(TInt aColumn) const;
   187 
   188     /**
   189      * Sets columns baseline position.
   190      *
   191      * @param aColumn Target column.
   192      * @param aPos Wanted position.
   193      */
   194     IMPORT_C void SetColumnBaselinePosL(TInt aColumn,TInt aPos);
   195 
   196     /**
   197      * Gets column's margins.
   198      *
   199      * @param aColumn Target column.
   200      * @return The columns margins.
   201      */
   202     IMPORT_C TMargins ColumnMargins(TInt aColumn) const;
   203     
   204     /**
   205      * Sets column's margins.
   206      *
   207      * @param aColumn Target column.
   208      * @param aMargins Wanted margins.
   209      */
   210     IMPORT_C void SetColumnMarginsL(TInt aColumn,TMargins aMargins);
   211     
   212     /**
   213      * Gets font used by the column.
   214      *
   215      * @param aColumn Target column.
   216      * @return Used font.
   217      */
   218     IMPORT_C const CFont* ColumnFont(TInt aColumn) const;
   219 
   220     /**
   221      * Sets column's font.
   222      *
   223      * @param aColumn Target column.
   224      * @param aFont Wanted font.
   225      */
   226     IMPORT_C void SetColumnFontL(TInt aColumn,const CFont* aFont);
   227 
   228     /**
   229      * Gets the text alignment for the specified column.
   230      *
   231      * @param  aColumn The index of the column for which the alignment 
   232      *         is obtained.
   233      * @return The text alignment for the specified column. The default 
   234      *         is @c ELeft.
   235      */
   236     IMPORT_C CGraphicsContext::TTextAlign ColumnAlignment(TInt aColumn) const;
   237     
   238     /**
   239      * Sets the text alignment for the specified column.
   240      *
   241      * If the column does not exist, it is added with the specified index 
   242      * to the array.
   243      *
   244      * @param aColumn The index of the column for which alignment is set.
   245      * @param aAlign The text alignment to use. The default is @c ELeft.
   246      */
   247     IMPORT_C void SetColumnAlignmentL(TInt aColumn,
   248                                       CGraphicsContext::TTextAlign aAlign);
   249 
   250     /**
   251     * Not used in S60.
   252     */
   253     IMPORT_C CGraphicsContext::TPenStyle ColumnSeparatorStyle(
   254                                                         TInt aColumn) const;
   255     /**
   256     * Not used in S60.
   257     */
   258     IMPORT_C void SetColumnSeparatorStyleL(TInt aColumn, 
   259                                            CGraphicsContext::TPenStyle aStyle);
   260 
   261     /**
   262      * Checks whether the column is optional.
   263      *
   264      * @param aColumn Target column.
   265      * @return @c ETrue if the column is optional.
   266      */
   267     IMPORT_C TBool ColumnIsOptional(TInt aColumn) const;
   268     
   269     /**
   270      * Sets whether the column is optional.
   271      *
   272      * @param aColumn Target column.
   273      * @param aIsOptional Wanted setting, @c ETrue if column is optional.
   274      */
   275     IMPORT_C void SetOptionalColumnL(TInt aColumn,TBool aIsOptional);
   276 
   277     /**
   278      * Checks whether the column contains graphics.
   279      *
   280      * @param aColumn Target column.
   281      * @return @c ETrue if column contains graphics.
   282      */
   283     IMPORT_C TBool ColumnIsGraphics(TInt aColumn) const;
   284 
   285     /**
   286      * Sets whether the column shows graphics.
   287      *
   288      * @param aColumn Target column.
   289      * @param aIsGraphics Wanted setting.
   290      */
   291     IMPORT_C void SetGraphicsColumnL(TInt aColumn,TBool aIsGraphics);
   292 
   293     /**
   294      * Checks if the column is a number.
   295      *
   296      * @param aColumn Target column.
   297      * @return @c ETrue if it is a number.
   298      */
   299     IMPORT_C TBool ColumnIsNumber(TInt aColumn) const;
   300 
   301     /**
   302      * Sets whether the column is a number. 
   303      *
   304      * @param aColumn Target columun.
   305      * @param aIsNumber Wanted setting. @c ETrue if it is a number.
   306      */
   307     IMPORT_C void SetNumberColumnL(TInt aColumn,TBool aIsNumber);
   308 
   309     /**
   310      * Gets the icon array. 
   311      *
   312      * These icons contain the bitmaps that are displayed in graphical columns.
   313      *
   314      * @return Pointer to the icon array.
   315      */
   316     IMPORT_C CArrayPtr<CGulIcon>* IconArray() const;
   317 
   318     /**
   319      * Sets icon array.
   320      *
   321      * @param aArray Wanted icon collection .
   322      */
   323     IMPORT_C void SetIconArray(CArrayPtr<CGulIcon>* aArray);
   324 
   325     /**
   326      * Gets TextClipGap, the gap between words in a text clip, for the 
   327      * given column.
   328      *
   329      * @param aSubCellIndex Index to target column.
   330      * @return TextClipGap.
   331      */
   332     IMPORT_C TInt ColumnTextClipGap(TInt aSubCellIndex) const;
   333     
   334     /**
   335      * Sets columns TextClipGap, the gap between words in a text clip.
   336      *
   337      * @param aSubCellIndex Index of the target column.
   338      * @param aSize Wanted TextClipGap size. 
   339      */
   340     IMPORT_C void SetColumnTextClipGapL(TInt aSubCellIndex, TInt aSize);
   341     
   342     /**
   343      * Gets the specified font for the specified column.
   344      *
   345      * @param aItemProperties Whether the required font is:
   346      *        bold, italic, bold and italic or normal.
   347      * @param aColumn The index of the column for which the font is obtained.
   348      * @return The specified column’s, specified font. Null, the 
   349      *         default, if no font is set for the column.
   350      */
   351     IMPORT_C CFont* Font(const TListItemProperties& aItemProperties, 
   352                          TInt aColumn) const;
   353 
   354     /**
   355      * Gets the specified column’s surrounding rectangle.
   356      *
   357      * @param aColumn The index of the column for which the rectangle 
   358      *                is obtained.
   359      * @param aRect On return contains the specified column’s rectangle.
   360      * @return @c ETrue if successful. @c EFalse if a non-existent column 
   361      *               was specified.
   362      */
   363     IMPORT_C TBool MakeColumnRect( TInt aColumn, TRect& aRect );
   364 
   365     /**
   366      * Draws a single row.
   367      *
   368      * The text @c aText is parsed into columns and is split using 
   369      * @c KColumnListSeparator. Text or bitmaps are drawn according to whether 
   370      * the column has been set as a graphical column 
   371      * (see @c SetGraphicsColumnL()). Column cells within the row are drawn 
   372      * from left to right.
   373      *
   374      * @param aItemProperties The properties of each column in the row.
   375      * @param aGc The graphics context to draw into.
   376      * @param aText The text to parse and draw.
   377      * @param aRect Bounding rectangle for the entire row.
   378      * @param aHighlight @c ETrue to draw the item highlighted. 
   379      *        @c EFalse otherwise.
   380      * @param aColors The colours to use if the item is highlighted.
   381      */
   382     IMPORT_C virtual void Draw(const TListItemProperties& aItemProperties, 
   383                                CWindowGc& aGc,
   384                                const TDesC* aText,
   385                                const TRect& aRect,
   386                                TBool aHighlight,
   387                                const TColors& aColors) const;
   388                                
   389     /**
   390     * internal
   391     */
   392     void DrawSimple(const TListItemProperties& aItemProperties, CWindowGc& aGc,const TDesC* aText,const TRect& aRect,TBool aHighlight,const TColors& aColors) const;
   393     /**
   394      * Sets position of listbox line.
   395      *
   396      * @param aPosition Wanted position.
   397      */
   398     IMPORT_C void SetSeparatorLinePosition(
   399                                         TAknSeparatorLinePosition aPosition);
   400 
   401     /**
   402      * Gives out separator line position.
   403      *
   404      * @return Separator position.
   405      */
   406     IMPORT_C TAknSeparatorLinePosition SeparatorLinePosition() const;
   407 
   408     /**
   409      * 
   410      * @deprecated
   411      *
   412      * Gives out layout data for separator line drawing.
   413      *
   414      * @return Requested layout data.
   415      */
   416     IMPORT_C CAknLayoutData *LayoutData() const;
   417     
   418     /**
   419      * 
   420      * @deprecated
   421      *
   422      * Checks if the layout has been initialized.
   423      *
   424      * @return @c ETrue if initialized.
   425      */
   426     IMPORT_C TBool LayoutInit() const;
   427     
   428     /**
   429      * 
   430      * @deprecated
   431      *
   432      * Sets the initialization .
   433      *
   434      * @param aValue Wanted value (@c ETrue = initialized).
   435      */
   436     IMPORT_C void SetLayoutInit(TBool aValue) const;
   437 
   438     /**
   439      * Enables / disables underlining per text column,
   440      * if and only if @c TListItemProperties also has underlining enabled.
   441      * If this method is not called and @c TListItemProperties has underlining
   442      * enabled, drawing will revert to old style where only first text column
   443      * will be underlined.
   444      *
   445      * @since S60 3.0
   446      * @param aUnderlinedColumns Bitmask of columns to be underlined.
   447      */    
   448     IMPORT_C void SetColumnUnderlined( TBitFlags32 aUnderlinedColumns );
   449 
   450 private:
   451     struct SColumn
   452         {
   453         TInt iColumn; // Must be first entry
   454         TInt iWidth;
   455         TMargins iMargins;
   456         TInt iVerticalCap;
   457         const CFont* iBaseFont;
   458         TInt iActualFontIndex;
   459         TBool iGraphics;
   460     TBool iOptional;
   461     TInt iBaseline;
   462         CGraphicsContext::TTextAlign iAlign;
   463     CGraphicsContext::TPenStyle iSeparator;
   464     TInt iTextClipGap;
   465     TBool iNumberColumn;
   466     // the next are for storing x-coordinates of a column for the drawing algorithm.
   467     __MUTABLE TInt iX;
   468     __MUTABLE TInt iEndX;
   469         };
   470 protected:
   471 
   472     /**
   473      * C++ default constructor.
   474      */
   475     IMPORT_C CColumnListBoxData();
   476 
   477     /**
   478      * A second phase constructor. 
   479      *
   480      * Highlight animation will be created by default (if it is provided 
   481      * by the skin).
   482      */
   483     IMPORT_C void ConstructLD();
   484 
   485     /**
   486      * Second phase constructor for subclasses that want to override highlight
   487      * animation creation.
   488      *
   489      * @since 3.0
   490      * @param aAnimationIID Skin item identifier of the constructed animation. 
   491      *        Passing @c KAknsIIDNone will disable highlight animation.
   492      */
   493     IMPORT_C void ConstructLD( const TAknsItemID& aAnimationIID );
   494 
   495 private:
   496     
   497     IMPORT_C TInt ColumnX(TInt aColumn) const;
   498     IMPORT_C void SetColumnXL(TInt aColumn,TInt aX) const; // note, const! (do not affect external state)
   499     //
   500     IMPORT_C TInt ColumnEndX(TInt aColumn) const;
   501     IMPORT_C void SetColumnEndXL(TInt aColumn,TInt aEndX) const; // note, Const!
   502 
   503     void AddColumnL(TInt aColumn);
   504     SColumn& At(TInt aArrayIndex);
   505     const SColumn& At(TInt aArrayIndex) const;
   506     TBool FindColumnIndex(TInt& aArrayIndex,TInt aColumn) const;
   507     void FindColumnIndexOrAddL(TInt& aArrayIndex,TInt aColumn);
   508     TInt AddActualFontL(const CFont* aBaseFont);
   509     void SetUnderlineStyle( TListItemProperties aProperties, CWindowGc& aGc, TInt aColumn ) const;
   510     void DoConstructL( const TAknsItemID& aAnimationIID );
   511 public:
   512 
   513     /**
   514      * Gets @c CCoeControl for component.
   515      *
   516      * @return Pointer to the used @c CCoeControl.
   517      */
   518     IMPORT_C CCoeControl *Control() const;
   519     
   520     /**
   521      * Sets @c CCoeControl for current component.
   522      *
   523      * @param aControl Current listbox control instance, cannot be any 
   524      *        other control.
   525      */
   526     IMPORT_C void SetControl(CCoeControl *aControl);
   527     
   528     /**
   529      * Gets background skin context.
   530      *
   531      * @return Component's skin control context.
   532      */
   533     IMPORT_C MAknsControlContext* SkinBackgroundContext() const;
   534     
   535     /**
   536      * Sets background skin context. Changes ownership as well.
   537      *
   538      * @param aContext Wanted background skin control context.
   539      */
   540     void SetSkinBackgroundContext(
   541                     CAknsListBoxBackgroundControlContext *aContext); 
   542                     // takes ownership
   543     
   544     /**
   545      * Sets style for the skin fot list tiles.
   546      *
   547      * @param aId Wanted skins item ID.
   548      * @param aTileRect Skin tile size. 
   549      */
   550     IMPORT_C void SetSkinStyle(const TAknsItemID *aId, 
   551                                const TRect &aTileRect);
   552 
   553     /**
   554      * Sets skin style for the end of the list. 
   555      *
   556      * @param aId Wanted skins item ID. 
   557      * @param aRect Skin tile size. 
   558      */
   559     IMPORT_C void SetListEndSkinStyle(const TAknsItemID *aId, 
   560                                       const TRect &aRect);
   561 
   562     /**
   563      * Sets skin for the highlighted frame.
   564      *
   565      * @param aFrameId Wanted skin's item ID for the frame.
   566      * @param aFrameCenterId Wanted skin's item ID for the center of the frame.
   567      */
   568     IMPORT_C void SetSkinHighlightFrame(const TAknsItemID *aFrameId, 
   569                                         const TAknsItemID *aFrameCenterId);
   570 
   571     /**
   572      * Enables/Disables skin.
   573      *
   574      * @param aEnabled Sets whether the skins are enable or disabled
   575      *                 @c ETrue for enabling skins.
   576      */
   577     IMPORT_C void SetSkinEnabledL(TBool aEnabled);
   578     
   579     /**
   580      * Creates a pictograph interface for the @c CColumnListBoxData.
   581      */
   582     void CreatePictographInterfaceL();
   583 
   584     /**
   585      * Creates a marquee control for the @c CColumnListBoxData and redraw.
   586      */
   587     void CreateMarqueeControlL();
   588     
   589     /**
   590      * Resets marquee control. 
   591      */
   592     void ResetMarquee();
   593     
   594     /**
   595      * Gets current marquee item index.
   596      *
   597      * @return Current marquee item index.
   598      */
   599     TInt CurrentMarqueeItemIndex();
   600     
   601     /**
   602      * Sets the index for current marquee item.
   603      *
   604      * @param aIndex Item index.
   605      */
   606     void SetCurrentMarqueeItemIndex(TInt aIndex);
   607     
   608     /**
   609      * Enables or disables the marquee. 
   610      *
   611      * @param aEnable @c ETrue = On. @c EFalse = Off.
   612      */
   613     IMPORT_C void EnableMarqueeL(TBool aEnable); 
   614 
   615     /**
   616      * Sets the font attached to the cell for each row separately.
   617      *
   618      * @param aRow Index number of the row.
   619      * @param aColumn Index number of the column.
   620      * @param aFont Font to be used.
   621      */
   622     IMPORT_C void SetColumnFontForRowL(TInt aRow, 
   623                                        TInt aColumn, 
   624                                        const CFont* aFont);
   625 
   626     /**
   627      * Gets the font attached to the row and cell.
   628      *
   629      * @param aRow Index number of the row.
   630      * @param aColumn Index number of the column.
   631      * @return Font handle.
   632      */
   633     IMPORT_C const CFont* RowAndColumnFont(TInt aRow,TInt aColumn) const;
   634 
   635     /**
   636      * Sets the current list item index. Since S60 2.6 causes highlight 
   637      * animation tochange its background (only if the current item index 
   638      * changes). Do not call this method if the index is not the current 
   639      * item index.
   640      *
   641      * @since S60 2.6
   642      * @param aIndex The new index for the current item.
   643      */
   644     void SetCurrentItemIndex(TInt aIndex);
   645 
   646     /**
   647      * Sets the subcell icon size.
   648      *
   649      * @since S60 2.8
   650      * @param aIndex Index of the sub cell. 
   651      * @param aSize Size of the sub cell icon.
   652      */
   653     IMPORT_C void SetSubCellIconSize(TInt aIndex, TSize aSize);
   654 
   655     /**
   656      * Gets subcell icon size.
   657      *
   658      * @param aIndex Index of the wanted subcell.
   659      * @return Size of the subcell.
   660      */
   661     TSize GetSubCellIconSize(TInt aIndex);
   662 
   663     /**
   664      * Gets the highlight animation .
   665      *
   666      * @since S60 3.0
   667      * @return @c CAknsEffectAnim that is used for when the highlighted list 
   668      *         is drawn. May return NULL, in this case the normal skinned
   669      *         highlight should be drawn. This pointer is valid only during  
   670      *         the draw -> you should not store it locally outside draw scope.
   671      */
   672     IMPORT_C const CAknsEffectAnim* HighlightAnim() const;
   673     
   674     /**
   675      * This method should be called before drawing animated highlight. It will
   676      * sync the animation with the background under the current highlight (only
   677      * when current item index has changed).
   678      *
   679      * @since S60 3.0
   680      */
   681     IMPORT_C void AboutToDrawHighlightAnim() const;
   682     
   683     /**
   684      * Sets the observer for overriding default highlight input layer drawing
   685      * functionality. Note that you should still call 
   686      * @c AboutToDrawHighlightAnim (it will call the observer if it is set).
   687      *
   688      * @since S60 3.0
   689      * @param aDrawer New background drawer.
   690      */
   691     IMPORT_C void SetHighlightAnimBackgroundDrawer( 
   692                                 MColumnListBoxAnimBackgroundDrawer* aDrawer );
   693 
   694     /**
   695      * Changes item cell size & resizes highlight animation. Called by list 
   696      * when item cell size changes. If you are using non-standard highlight 
   697      * sizes make sure to sync the list item cell size.
   698      *
   699      * @since S60 3.0
   700      * @param aSizeInPixels New size in pixels for the Item cell.
   701      */
   702     IMPORT_C void SetItemCellSize( const TSize& aSizeInPixels );
   703     
   704     /**
   705     * @return ETrue if highlight animation exists, EFalse otherwise.
   706     *
   707     * @since 3.1
   708     */
   709     IMPORT_C TBool HasHighlightAnim() const;
   710     /**
   711     * The preferred method for drawing highlight animation in derived classes.
   712     * Before calling this method you should check that highlight animation
   713     * exists by calling HasHighlightAnim. In case of draw failure you should
   714     * default to normal skinned highlight drawing. For example:
   715     *
   716     * TBool drawOk = EFalse;
   717     *
   718     * if( HasHighlightAnim() )
   719     *     {
   720     *     drawOk = DrawHighlightAnim( gc, rect );
   721     *     }
   722     *
   723     * if( !drawOk )
   724     *     {
   725     *     ...do normal skinned draw
   726     *     }
   727     *
   728     * @param aGc   Graphics context for blitting animation frame
   729     * @param aRect Target rect for blitting animation frame
   730     * @return The draw status, ETrue if drawing was ok, EFalse otherwise.
   731     *
   732     * @since 3.1
   733     */
   734     IMPORT_C TBool DrawHighlightAnim( CBitmapContext& aGc, const TRect& aRect ) const;
   735 
   736     void FocusGained();
   737     
   738     /**
   739      * Called when the @c CColumnListBoxData is unselected. Informs the 
   740      * @c CColumnListBoxData extension that the focus has been lost.
   741      */
   742     void FocusLost();
   743     
   744     /**
   745      * Handles changing of an resource. Only supports skin change.
   746      *
   747      * @param aType Defines the resource that has changed. 
   748      */
   749     void HandleResourceChange( TInt aType );
   750     
   751     /**
   752      * Setup skin control context for handling background skins.
   753      * if no skin control context is found one is created.
   754      */
   755     void SetupSkinContextL();
   756     
   757     /**
   758      * Sets text colour. 
   759      *
   760      * @param aTextColor Wanted colour.
   761      */
   762     void SetESSTextColor(TRgb aTextColor);
   763     
   764     /**
   765      * Sets text colour for highlighted text.
   766      *
   767      * @param aHighlightedTextColor Wanted colour.
   768      */
   769     void SetESSHighlightedTextColor(TRgb aHighlightedTextColor);
   770 
   771     IMPORT_C void SetGraphicSubCellL(TInt aSubCell,const TAknWindowLineLayout &aGraphicLayout);
   772     IMPORT_C void SetTextSubCellL(TInt aSubCell,const TAknTextLineLayout &aTextLayout);
   773     IMPORT_C void SetConditionalSubCellL(TInt aSubCell, const TAknTextLineLayout &aTextLayout,TInt aAffectedSubCell);
   774     IMPORT_C void SubCellsMightIntersect( const TBool aMightIntersect );
   775 
   776     IMPORT_C void SetStretchableGraphicSubCellL(TInt aSubCell, 
   777         const TAknWindowComponentLayout& aNormalLayout, 
   778         const TAknWindowComponentLayout& aStretchedLayout);
   779     IMPORT_C void SetStretchableTextSubCellL(TInt aSubCell,                                      
   780         const TAknTextComponentLayout& aNormalLayout, 
   781         const TAknTextComponentLayout& aStretchedLayout);
   782     IMPORT_C void SetStretchableConditionalSubCellL(TInt aSubCell,
   783         const TAknTextComponentLayout& aNormalLayout,
   784         const TAknTextComponentLayout& aStretchedLayout,
   785         TInt aNormalSubCell,
   786         TInt aStretchedSubCell );
   787     IMPORT_C void ResetSLSubCellArray();                                           
   788     TBool UsesScalableLayoutData() const;
   789     void EnableStretching(const TBool aEnabled);
   790     IMPORT_C TBool StretchingEnabled() const;
   791 protected:
   792     
   793     /**
   794      * Wraps the text drawing functinality with & without marquee into one 
   795      * function, so that inherited classes can modify their own drawing 
   796      * behaviour more easily.
   797      *
   798      * @since S60 2.8
   799      * @param aGc Window graphics context controller.
   800      * @param aTextRect The area where the text is drawn.
   801      * @param aText The whole text. Not clipped.
   802      * @param aClippedText Clipped / truncated text.
   803      * @param aBaselineOffset An offset from the top of the box to the text 
   804      *        baseline.
   805      * @param aAlign The text alignment mode (default is left, rather 
   806      *        than centre or right). 
   807      * @param aFont Wanted font.
   808      * @param aHighlight Does the current item have highlight.
   809      * @param aIsTextClipped Is the current item clipped.
   810      */
   811     IMPORT_C void DrawText(CWindowGc& aGc, 
   812                            const TRect& aTextRect, 
   813                            const TDesC& aText, 
   814                            const TDesC& aClippedText, 
   815                            const TInt aBaselineOffset,
   816                            const CGraphicsContext::TTextAlign aAlign, 
   817                            const CFont& aFont,
   818                            const TBool aHighlight, 
   819                            const TBool aIsTextClipped) const;
   820 
   821 public:
   822     /**
   823      * Customizes marquee default behaviour. 
   824      *
   825      * Use this before enabling marquee ( @c EnableMarqueeL() ), otherwise 
   826      * marquee behaviour will change during animation.
   827      *
   828      * @since S60 2.8
   829      * @param aLoops Max number of loops to be executed.
   830      * @param aScrollAmount The amount of pixels scrolled per 
   831      *        iteration.
   832      * @param aScrollDelay The interval between iterations.
   833      */
   834     IMPORT_C void SetMarqueeParams(const TInt aLoops, 
   835                                    const TInt aScrollAmount, 
   836                                    const TInt aScrollDelay);
   837 
   838     /**
   839      * Customizes marquee default behaviour. 
   840      *
   841      * @since S60 2.8
   842      * @param aLoops Max number of loops to be executed.
   843      * @param aScrollAmount The amount of pixels scrolled per iteration. 
   844      * @param aScrollDelay The interval between iterations.
   845      * @param aInterval The interval between frame updates.
   846      */
   847     IMPORT_C void SetMarqueeParams(const TInt aLoops, 
   848                                    const TInt aScrollAmount, 
   849                                    const TInt aScrollDelay, 
   850                                    const TInt aInterval);                        
   851     /**
   852     * Tells whether current item has clipped text cells
   853     * @since S60 3.2
   854     * @return bitfield of clipped columns
   855     */
   856     IMPORT_C TUint32 CurrentItemTextWasClipped() const;
   857         
   858     /**
   859     * Returns ETrue if kinetic scrolling is enabled.
   860     * @internal
   861     * @since S60 5.0
   862     * @return ETrue if kinetic scrolling feature is enabled.
   863     */
   864     TBool KineticScrollingEnabled() const;
   865 
   866 private:
   867     void DrawHighLight( CWindowGc& aGc, const TRect& aRect,
   868                         TBool aHighlight,
   869                         MAknsSkinInstance* aSkin ) const;
   870         
   871     void CheckIfSubCellsIntersect( TAknTextLineLayout* aLayouts,
   872                                    TBool* aResults, const TDesC& aText,
   873                                    const TRect& aItemRect ) const;
   874     /**
   875     * @internal helper
   876     */
   877     void BitBltColored( CWindowGc&      aGc,
   878                         TBool           aHighlight,
   879                         const CGulIcon* aIcon,
   880                         TInt            aSubcell,
   881                         TBool           aColorIcon,
   882                         const TRect&    aGraphicRect ) const;
   883 
   884 
   885         
   886 private:
   887     CArrayFix<SColumn>* iColumnArray;
   888     CColumnListBoxDataExtension *iExtension;
   889     };
   890 
   891 #endif // __EIKCLBD_H__
   892 
   893 // End of File