--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/phonebookui/Phonebook2/ccapplication/ccacommlauncherplugin/inc/ccappcommlaunchercustomlistboxdata.h Tue Feb 02 10:12:17 2010 +0200
@@ -0,0 +1,1265 @@
+/*
+* 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:
+*
+*/
+/*
+ * ccappcommlaunchercustomlistboxdata.h
+ *
+ * Created on: 2009-11-2
+ * Author: dev
+ */
+
+#ifndef CCAPPCOMMLAUNCHERCUSTOMLISTBOXDATA_H_
+#define CCAPPCOMMLAUNCHERCUSTOMLISTBOXDATA_H_
+
+#include <e32base.h>
+#include <gdi.h>
+
+#include <eiklbd.h>
+#include <eikfrlb.h>
+#include <avkon.hrh>
+#include <aknsdrawutils.h> // for TAknsQsnTextColorsIndex
+#include <babitflags.h> // for TBitFlags32
+
+class CWindowGc;
+class CGulIcon;
+class CCCAppCommLauncherCustomListBoxDataExtension;
+class MAknsControlContext;
+class TAknsItemID;
+class CAknLayoutData;
+class CAknsEffectAnim;
+class TAknTextLineLayout;
+class TAknWindowLineLayout;
+class TAknTextComponentLayout;
+class TAknWindowComponentLayout;
+
+class CCCAppCommLauncherCustomListBoxData : public CListBoxData
+ {
+ friend class CCCAppCommLauncherCustomListBoxDataExtension;
+
+public:
+
+ //INNER CLASS DECLARATION
+ /*
+ * A container class for storage of colour values.
+ * Used by @c CFormattedCellListBoxData.
+ */
+ class TColors
+ {
+
+ public:
+
+ /**
+ * C++ default constructor.
+ */
+ TColors();
+
+ public:
+
+ /**
+ * The text colour.
+ */
+ TRgb iText;
+
+ /**
+ * The background colour.
+ */
+ TRgb iBack;
+
+ /**
+ * The highlighted text colour.
+ */
+ TRgb iHighlightedText;
+
+ /**
+ * The highlighted background colour.
+ */
+ TRgb iHighlightedBack;
+
+ /**
+ * The separator line colour.
+ *
+ * @deprecated The separator line colour is no longer used because the
+ * separator lines are skinned.
+ */
+ TRgb iRightSeparatorColor;
+ };
+
+public:
+
+ /**
+ * Two-phased constructor.
+ *
+ * @return Pointer to a new formatted cell listbox data object.
+ */
+ static CCCAppCommLauncherCustomListBoxData* NewL();
+
+ /**
+ * Destructor.
+ */
+ ~CCCAppCommLauncherCustomListBoxData();
+
+public:
+
+ /**
+ * Gets colours attached to the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Text and background colors.
+ */
+ const TColors& SubCellColors(TInt aSubCellIndex) const;
+
+ /**
+ * Sets colours attached to the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aColors Text and background colors.
+ */
+ void SetSubCellColorsL(TInt aSubCellIndex, const TColors &aColors);
+
+ /**
+ * Gets baseline position from top of the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Baseline y-position.
+ */
+ TInt SubCellBaselinePos(TInt aSubCellIndex) const;
+
+ /**
+ * Sets baseline position from top of the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aPos Position which is set for the item.
+ */
+ void SetSubCellBaselinePosL(TInt aSubCellIndex, TInt aPos);
+
+ /**
+ * Gets cell size in pixels.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Cell size.
+ */
+ TSize SubCellSize(TInt aSubCellIndex) const;
+
+ /**
+ * Sets cell size in pixels.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aSize Cell size.
+ */
+ void SetSubCellSizeL(TInt aSubCellIndex, TSize aSize);
+
+ /**
+ * Gets cell position inside an item.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Cell position.
+ */
+ TPoint SubCellPosition(TInt aSubCellIndex) const;
+
+ /**
+ * Sets cell position inside an item.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aPosition New position for cell.
+ */
+ void SetSubCellPositionL(TInt aSubCellIndex, TPoint aPosition);
+
+ /**
+ * Determines whether this cell can overlap with one of the previous cells.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return @c ETrue if cell overlaps another one, @c EFalse if cell allocates
+ * area from other cells.
+ */
+ TBool SubCellIsTransparent(TInt aSubCellIndex) const;
+
+ /**
+ * Modifies whether the cell can overlap with one of the previous cells.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aIsTransparent @c ETrue if transparent, @c EFalse if not.
+ */
+ void SetTransparentSubCellL(TInt aSubCellIndex,
+ TBool aIsTransparent);
+
+ /**
+ * Checks whether drawing algorithm always draws the cell or whether empty
+ * string in list item can disable the drawing of the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return @c ETrue when empty string disables cell,
+ * @c EFalse if always drawn.
+ */
+ TBool SubCellIsNotAlwaysDrawn(TInt aSubCellIndex) const;
+
+ /**
+ * Sets whether drawing algorithm always draws the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aIsNotAlwaysDrawn If @c ETrue, empty string disables cell.
+ */
+ void SetNotAlwaysDrawnSubCellL(TInt aSubCellIndex,
+ TBool aIsNotAlwaysDrawn);
+
+ /**
+ * Gets margins used for the content inside the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Margins in pixels.
+ */
+ TMargins SubCellMargins(TInt aSubCellIndex) const;
+
+ /**
+ * Sets margins for the content inside the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aMargins Margins for the content inside the cell.
+ */
+ void SetSubCellMarginsL(TInt aSubCellIndex, TMargins aMargins);
+
+ /**
+ * Gets font attached to the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Handle to the attached font.
+ */
+ const CFont* SubCellFont(TInt aSubCellIndex) const;
+
+ /**
+ * Sets the font attached to the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aFont Font to attach to the cell.
+ */
+ void SetSubCellFontL(TInt aSubCellIndex, const CFont* aFont);
+
+ /**
+ * Gets the alignment attached to the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Alignment of the text.
+ */
+ CGraphicsContext::TTextAlign SubCellAlignment(TInt aSubCellIndex)
+ const;
+
+ /**
+ * Sets the alignment attached to the cell.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aAlign Alignment that is attached to the cell
+ */
+ void SetSubCellAlignmentL(TInt aSubCellIndex,
+ CGraphicsContext::TTextAlign aAlign);
+
+ /**
+ * Checks whetherdrawing algorithm considers the text
+ * string in list item as unicode text string displayable on the screen,
+ * or as string representation of an index to icon array.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return @c ETrue if graphics cell, @c EFalse if text cell.
+ */
+ TBool SubCellIsGraphics(TInt aSubCellIndex) const;
+
+ /**
+ * Sets whether drawing algorithm considers the text string in list item as
+ * unicode text string displayable on the screen, or as string
+ * representation of an index to icon array.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aIsGraphics @c ETrue if graphics cell, @c EFalse if text cell.
+ */
+ void SetGraphicsSubCellL(TInt aSubCellIndex, TBool aIsGraphics);
+
+ /**
+ * Checks whether vertical line is drawn to the right side of the cell.
+ *
+ * @param aColumn Index number of the subcell.
+ * @return Style of pen used to draw a line for the right side of the cell.
+ */
+ CGraphicsContext::TPenStyle
+ SubCellRightSeparatorStyle(TInt aColumn) const;
+
+ /**
+ * Sets whether vertical line is drawn to the right side of the cell.
+ *
+ * @param aSubCell Index number of the subcell.
+ * @param aStyle Style of a pen used to draw a line for the right side of
+ * the cell.
+ */
+ void SetSubCellRightSeparatorStyleL(TInt aSubCell,
+ CGraphicsContext::TPenStyle aStyle);
+
+ /**
+ * Gets the amount of pixels text margins is grown if it is truncated.
+ * This is usually very small number used to make the layout look more
+ * balanced when text is truncated. (the glyph used for truncation is
+ * almost empty and on narrow text elements, it looks odd if the truncated
+ * text element is exactly same size as non-truncated version.)
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Amount of pixels that are used for growing the text margins in
+ * truncation.
+ */
+ TInt SubCellTextClipGap(TInt aSubCellIndex) const;
+
+ /**
+ * Sets the amount of pixels truncation grows a text element.
+ *
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aGap The amount of pixels that are required for growing the text
+ * element when it is truncated.
+ */
+ void SetSubCellTextClipGapL(TInt aSubCellIndex, TInt aGap);
+
+ /**
+ * SkinEnabled checks whether skins are enabled on this list.
+ *
+ * @since Symbian 2.0
+ * @return @c ETrue if enabled, @c EFalse if disabled.
+ */
+ TBool SkinEnabled() const;
+
+ /**
+ * Sets whether skins are enabled on this list.
+ * The default value is determined from global setting from @c CAknAppUi.
+ *
+ * @since Symbian 2.0
+ * @param aEnabled If @c ETrue skins are set enabled.
+ * If @c EFalse skins are set disabled.
+ */
+ void SetSkinEnabledL(TBool aEnabled);
+
+ /**
+ * Checks whether the cell is used for numbers.
+ *
+ * @since Symbian 2.0
+ * @param aSubCellIndex Index number of the subcell.
+ * @return @c ETrue if enabled, @c EFalse if disabled.
+ */
+ TBool SubCellIsNumberCell(TInt aSubCellIndex) const;
+
+ /**
+ * Sets whether the cell is used for numbers.
+ *
+ * @since Symbian 2.0
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aIsNumberCell New value for the flag.
+ */
+ void SetNumberCellL(TInt aSubCellIndex, TBool aIsNumberCell);
+
+ /**
+ * Gets the icon array used when drawing bitmaps for the listbox items.
+ */
+ CArrayPtr<CGulIcon>* IconArray() const;
+
+ /**
+ * Sets the icon array used when drawing bitmaps.
+ * The array can be modified (no need to call this method when modifying),
+ * even in @c MdcaPoint() or @c MdcaCount() methods of @c MDesCArray class.
+ * See also @c CTextListBoxModel::SetItemTextArray().
+ *
+ * The most common way to crash a listbox is by forgetting to call this
+ * method, or the list item string for graphics cell is not an index of
+ * a bitmap.
+ *
+ * @param aArray Pointer to the icon array.
+ */
+ void SetIconArrayL(CArrayPtr<CGulIcon>* aArray);
+
+ /**
+ * SetIconArray sets the icon array used when drawing bitmaps.
+ * The array can be modified (no need to call this method when modifying),
+ * even in @c MdcaPoint() or @c MdcaCount() methods of @c MDesCArray class.
+ * See also @c CTextListBoxModel::SetItemTextArray().
+ *
+ * The most common way to crash a listbox is by forgetting to call this
+ * method, or the list item string for graphics cell is not an index of
+ * a bitmap.
+ *
+ * @param aArray Pointer to the icon array.
+ */
+ void SetIconArray(CArrayPtr<CGulIcon>* aArray);
+
+ /**
+ * Font access to the font used in subcell.
+ *
+ * @param aItemProperties Not used in code.
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Font used in subcell.
+ */
+ CFont* Font(const TListItemProperties& aItemProperties,
+ TInt aSubCellIndex) const;
+
+ /**
+ * From @c CListBoxData.
+ *
+ * @c Draw() is the most important method in
+ * @c CEikFormattedCellListBoxData.
+ * This is the only method that needs to be implemented in this class and
+ * it draws the whole list item.
+ *
+ * @param aProperties Properties attached to the list item.
+ * @param aGc Graphics Context used for drawing the list item.
+ * @param aText A text string describing the list item cells.
+ * @param aRect The area of the screen for the whole list item.
+ * @param aHighlight Whether the list item is selected.
+ * @param aColors The colours used for drawing the item.
+ */
+ virtual void Draw(TListItemProperties aProperties,
+ CWindowGc& aGc,
+ const TDesC* aText,
+ const TRect& aRect,
+ TBool aHighlight,
+ const TColors& aColors) const;
+
+ /**
+ * Indicates if sub cell is using its own colors rather than common colors.
+ *
+ * @param aSubCell Index number of the subcell.
+ * @return Boolean indicating whether own colors enabled.
+ * @c ETrue enabled, @c EFalse disabled.
+ */
+ TBool UseSubCellColors(TInt aSubCell) const;
+
+ /**
+ * Ability for a skin subsystem to access Mop chain through current
+ * listbox control.
+ *
+ * @since Symbian 2.0
+ * @return Current listbox instance or NULL.
+ */
+ CCoeControl* Control() const;
+
+ /**
+ * Ability for a skin subsystem to access mop chain through current listbox
+ * control.
+ *
+ * @since Symbian 2.0
+ * @param aControlOrNull Current listbox instance or NULL. Cannot be other
+ * control than the current listbox!
+ */
+ void SetControl(CCoeControl* aControlOrNull);
+
+ /**
+ * Access to the background context of the listbox.
+ *
+ * @since Symbian 2.0
+ * @return Skin background context.
+ */
+ MAknsControlContext* SkinBackgroundContext() const;
+ /**
+ * Modify properties of the skin context (background).
+ *
+ * @since Symbian 2.0
+ * @param aId Skin background identifier.
+ * @param aRect Skin background rectangle.
+ */
+ void SetBackgroundSkinStyle(const TAknsItemID *aId,
+ const TRect &aRect);
+
+ /**
+ * Modify properties of the skin context (AB-column).
+ *
+ * @since Symbian 2.0
+ * @param aId Skin background identifier.
+ * @param aTileRect Skin background area from LAF.
+ */
+ void SetSkinStyle(const TAknsItemID* aId, const TRect& aTileRect);
+
+ /**
+ * Modify position of the parent for list default context.
+ *
+ * @since Symbian 2.0
+ * @param aPos The new position.
+ */
+ void SetSkinParentPos(const TPoint& aPos);
+
+ /**
+ * Modify properties of the skin context (list ending)*
+
+ * @since Symbian 2.0
+ * @param listEndId List ending skin background identifier.
+ * @param aRect List ending background area from LAF.
+ */
+ void SetListEndSkinStyle(const TAknsItemID *listEndId,
+ const TRect &aRect);
+
+ /**
+ * Gets RespectFocus flag.
+ *
+ * @return RespectFocus flag. @c ETrue if list item highlights are only
+ * shown when the list is has been focused on.
+ */
+ TBool RespectFocus() const;
+
+ /**
+ * Sets RespectFocus flag.
+ *
+ * @param aBool Value of RespectFocus flag. @c ETrue means that the
+ * list item highlight is only shown if list is focused on.
+ */
+ void SetRespectFocus(TBool aBool);
+
+ /**
+ * Set list higlight skin style.
+ *
+ * @since Symbian 2.0
+ * @param aFrameId The id for the frame.
+ * @param aFrameCenterId The id for the frame center.
+ */
+ void SetSkinHighlightFrame(const TAknsItemID* aFrameId,
+ const TAknsItemID* aFrameCenterId);
+ /**
+ * Set popup skin style.
+ *
+ * @since Symbian 2.0
+ * @param aFrameId The id for the frame.
+ * @param aFrameCenterId The id for the frame center.
+ */
+ void SetSkinPopupFrame(const TAknsItemID* aFrameId,
+ const TAknsItemID* aFrameCenterId);
+
+ /**
+ * Set popup skin frame position.
+ *
+ * @since Symbian 2.0
+ * @param aOuterRect Outer position of the frame.
+ * @param aInnerRect Inner position of the frame.
+ */
+ void SetSkinPopupFramePosition(const TRect& aOuterRect,
+ const TRect& aInnerRect);
+
+ /**
+ * Enable or disable logical to visual reordering in listbox data text
+ * drawing. By default, it is enabled. This has any effect only when
+ * bidirectional text is rendered.
+ *
+ * If you convert text to visual order prior to passing it to the listbox
+ * (for example by wrapping text to lines with methods in
+ * @c AknBidiTextUtils), then you should disable conversion in listbox by
+ * calling this method.
+ *
+ * @since Symbian 2.0
+ * @param aUseConversion Enable (@c ETrue) or disable
+ * (@c EFalse) conversion.
+ */
+ void UseLogicalToVisualConversion( TBool aUseConversion );
+
+ /**
+ * Enables or disables marquee.
+ *
+ * @param aEnable @c ETrue if On, @c EFalse if Off.
+ */
+ void EnableMarqueeL(TBool aEnable);
+
+ /**
+ * Determines if marquee is on.
+ *
+ * @return Flag indicating if marquee is on (@c ETrue on, @c EFalse off)
+ */
+#ifdef __WINS__
+ const TBool IsMarqueeOn();
+#else
+ TBool IsMarqueeOn();
+#endif // __WINS__
+ /**
+ * Function that is called when the owning control has gained the focus.
+ * Causes that animation is continued because the control is visible and
+ * focused.
+ */
+ void FocusGained();
+
+ /**
+ * Function that is called when the owning control has lost the focus.
+ * Causes the animation to pause, even if the control is partially
+ * visible.
+ */
+ void FocusLost();
+
+ /**
+ * Handles the skin change situation. Causes change of animation.
+ *
+ * @param aType Type of resource change.
+ */
+ void HandleResourceChange( TInt aType );
+
+ /**
+ * Gets animation used for drawing the list highlight.
+ * May return NULL, in which case the normal skinned highlight should be
+ * drawn. This pointer is valid only during the draw -> you should not
+ * store it locally outside draw scope.
+ *
+ * @return Animation used for drawing the list highlight.
+ */
+ const CAknsEffectAnim* HighlightAnim() const;
+
+ /**
+ * This method should be called before drawing animated highlight. It will
+ * sync the animation with the background under the current highlight (only
+ * when current item index has changed).
+ */
+ void AboutToDrawHighlightAnim() const;
+
+ /**
+ * Sets the observer for overriding default highlight input layer drawing
+ * functionality. Note that you should still call
+ * @c AboutToDrawHighlightAnim (it will call the observer if it is set).
+ *
+ * @param aDrawer Highlight animation drawer.
+ */
+ void SetHighlightAnimBackgroundDrawer(
+ MListBoxAnimBackgroundDrawer* aDrawer );
+
+ /**
+ * Changes item cell size and resizes highlight animation. Called by list
+ * when item cell size changes. If you are using non-standard highlight
+ * sizes make sure to sync the list item cell size.
+ *
+ * @param aSize New cell size.
+ */
+ void SetItemCellSize( const TSize& aSize );
+
+ /**
+ * @return ETrue if highlight animation exists, EFalse otherwise.
+ *
+ * @since 3.1
+ */
+ TBool HasHighlightAnim() const;
+ /**
+ * The preferred method for drawing highlight animation in derived classes.
+ * Before calling this method you should check that highlight animation
+ * exists by calling HasHighlightAnim. In case of draw failure you should
+ * default to normal skinned highlight drawing. For example:
+ *
+ * TBool drawOk = EFalse;
+ *
+ * if( HasHighlightAnim() )
+ * {
+ * drawOk = DrawHighlightAnim( gc, rect );
+ * }
+ *
+ * if( !drawOk )
+ * {
+ * ...do normal skinned draw
+ * }
+ *
+ * @param aGc Graphics context for blitting animation frame
+ * @param aRect Target rect for blitting animation frame
+ * @return The draw status, ETrue if drawing was ok, EFalse otherwise.
+ *
+ * @since 3.1
+ */
+ TBool DrawHighlightAnim( CBitmapContext& aGc, const TRect& aRect ) const;
+ /**
+ * Creates pictograph interface.
+ * Only effective in Japanese variant.
+ * Called by the listbox.
+ */
+ void CreatePictographInterfaceL();
+
+ /**
+ * Creates marquee control.
+ * Called by the listbox.
+ */
+ void CreateMarqueeControlL();
+
+ /**
+ * Resets the marquee animation data.
+ */
+ void ResetMarquee();
+
+ /**
+ * Gets the current list item index that is / was drawn by marquee.
+ *
+ * @return Index of the item that is / was drawn by marquee.
+ */
+ TInt CurrentMarqueeItemIndex();
+
+ /**
+ * Sets the current list item index that was drawn by marquee.
+ *
+ * @param aIndex Index of list item.
+ */
+ void SetCurrentMarqueeItemIndex(TInt aIndex);
+
+ /**
+ * Sets the current list item index (not for marquee). Since Symbian 3.0
+ * causes highlight animation to change its background (only if the current
+ * item index changes). Don't call this method if the index is not the
+ * current item index.
+ *
+ * @param aIndex Index number of list item.
+ */
+ void SetCurrentItemIndex(TInt aIndex);
+
+ // previous method was used both as current item index AND as currently
+ // drawn item index. Not really good idea.
+ void SetCurrentlyDrawnItemIndex( TInt aIndex );
+
+ /**
+ * Sets the font attached to the cell for each row separately.
+ *
+ * @param aRowIndex Row, which subcells are to be changed.
+ * @param aSubCellIndex Index number of the subcell.
+ * @param aFont Font to be used.
+ */
+ void SetSubCellFontForRowL(TInt aRowIndex,
+ TInt aSubCellIndex,
+ const CFont* aFont);
+
+ /**
+ * Gets font attached to the row and cell.
+ *
+ * @param aRow Index number of the row.
+ * @param aSubCellIndex Index number of the subcell.
+ * @return Font handle.
+ */
+ const CFont* RowAndSubCellFont(TInt aRow,
+ TInt aSubCellIndex) const;
+
+ /**
+ * Enables or disables transparency effect i.e. does the listbox draw its
+ * own background or not.
+ *
+ * @param aDrawBackground @c EFalse enables transparency, @c ETrue disables.
+ */
+ void SetDrawBackground(const TBool aDrawBackground);
+
+ /**
+ * Checks if the list is transparent and drawing the background
+ * that would fall behind it.
+ *
+ * @return @c EFalse if transparent, @c ETrue otherwise.
+ */
+ TBool IsBackgroundDrawingEnabled() const;
+
+ /**
+ * Enables or disables drawing background after scrollbar.
+ *
+ * @param aDrawBackground Default is @c ETrue which means that Scrollbar
+ * is drawn first.
+ */
+ void SetDrawScrollbarBackground(const TBool aDrawBackground);
+
+ /**
+ * Is the listbox drawing the background behind the scrollbar or not.
+ *
+ * @return @c ETrue if background is drawn after scrollbar, @c EFalse
+ * otherwise.
+ */
+ TBool IsScrollbarBackgroundDrawingEnabled() const;
+
+ /**
+ * Sets position of listbox separator line.
+ *
+ * @param aPosition Position in which separator line is placed.
+ */
+ void SetSeparatorLinePosition(TAknSeparatorLinePosition aPosition);
+
+ /**
+ * Gets separator line position.
+ *
+ * @return Position of separator line.
+ */
+ TAknSeparatorLinePosition SeparatorLinePosition() const;
+
+ /**
+ *
+ * @deprecated
+ *
+ * Gets layout data needed for separator lines drawing.
+ *
+ * @return Layout data.
+ */
+ CAknLayoutData* LayoutData() const;
+
+ /**
+ *
+ * @deprecated
+ *
+ * Gets LayOutInit flag used for drawing separator lines in lists.
+ *
+ * @internal
+ * @return LayOutInit flag.
+ */
+ TBool LayoutInit() const;
+
+ /**
+ *
+ * @deprecated
+ *
+ * Sets LayOutInit flag used for drawing separator lines in lists.
+ *
+ * @internal
+ * @param aValue LayOutInit flag value.
+ */
+ void SetLayoutInit(TBool aValue);
+
+ /**
+ * Enables or disables underlining per text subcell only if
+ * @c TListItemProperties also has underlining enabled. If this method is
+ * not called and @c TListItemProperties has underlining enabled, drawing
+ * will revert to old style where only first text subcell will be underlined.
+ *
+ * @since S60 3.1
+ * @param aUnderlinedCells Bitmask of cells to be underlined.
+ */
+ void SetSubcellUnderlined( TBitFlags32 aUnderlinedCells );
+
+ /**
+ *
+ * enables certain highlight skinning for
+ * radibutton / checkbox set style lists
+ *
+ * should be used only by avkon internally
+ *
+ * @since S60 3.1
+ *
+ */
+
+ void UseHighlightIconSwapping( TBool aUse );
+ TBool UseHighlightIconSwapping() const;
+
+ // next methods are only used inside the drawing algorithm.
+ // The set methods are also const because they do not change observable behavior of the system.
+ TSize SubCellRealSize(TInt aSubCellIndex) const;
+ void SetSubCellRealSize(TInt aSubCellIndex, TSize aRealSize) const;
+ //
+ TSize SubCellRealTextSize(TInt aSubCellIndex) const;
+ void SetSubCellRealTextSize(TInt aSubCellIndex, TSize aRealSize) const;
+
+
+ struct SSubCell
+ {
+ SSubCell() { }
+ TInt iSubCell; // Must be first entry
+
+ TInt iWidth;
+ TMargins iMargin;
+ const CFont* iBaseFont;
+ TInt iActualFontIndex;
+ TBool iGraphics;
+ TBool iTransparent;
+ TBool iNotAlwaysDrawn;
+ CGraphicsContext::TTextAlign iAlign;
+ CGraphicsContext::TPenStyle iRightSeparatorStyle;
+
+ TPoint iPosition;
+ TInt iBaseline;
+ TSize iSize;
+
+ TBool iUseSubCellColors; // this is set if someone calls SetSubCellColorsL()
+ TColors iColors;
+ TInt iTextClipGap;
+
+ TBool iNumberCell;
+ // the next ones change during drawing algorithm
+ __MUTABLE TSize iRealSize;
+ __MUTABLE TSize iRealTextSize;
+ };
+
+protected:
+
+ /**
+ * C++ default constructor.
+ */
+ CCCAppCommLauncherCustomListBoxData();
+
+ /**
+ * Second phase constructor. Highlight animation will be
+ * created by default (if it is provided by the skin).
+ */
+ void ConstructLD();
+
+ /**
+ * Second phase constructor for subclasses that want to override highlight
+ * animation creation.
+ *
+ * @param aAnimationIID Skin ItemID of the constructed animation. Passing
+ * @c KAknsIIDNone will disable highlight animation.
+ */
+ void ConstructLD(const TAknsItemID& aAnimationIID);
+
+ /**
+ * Main drawing algorithm used for drawing S60 list item.
+ * @c Draw() method should call this method after clearing the list item
+ * area and drawing the highlight.
+ *
+ * @param aProperties Properties attached to the list item.
+ * @param aGc Graphics Context used for drawing the list item.
+ * @param aText A text string describing the list item cells.
+ * @param aRect The area of the screen for the whole list item.
+ * @param aHighlight Whether the list item is selected.
+ * @param aColors The colors used for drawing the item.
+ * @panic EAknPanicFormattedCellListInvalidBitmapIndex The defined bitmap
+ * index is invalid.
+ * @panic EAknPanicOutOfRange The defined index is out of the range.
+ */
+ void DrawFormatted(TListItemProperties aProperties,
+ CWindowGc& aGc,
+ const TDesC* aText,
+ const TRect& aRect,
+ TBool aHighlight,
+ const TColors& aColors) const;
+
+ /**
+ * Draws list items.
+ *
+ * @param aProperties Properties attached to the list item.
+ * @param aGc Graphics Context used for drawing the list item.
+ * @param aText A text string describing the list item cells.
+ * @param aRect The area of the screen for the whole list item.
+ * @param aHighlight Whether the list item is selected.
+ * @param aColors The colors used for drawing the item.
+ * @internal
+ */
+ void DrawFormattedSimple( TListItemProperties& aProperties,
+ CWindowGc& aGc,
+ const TDesC* aText,
+ const TRect& aRect,
+ TBool aHighlight,
+ const TColors& aColors ) const;
+private:
+ /**
+ * @internal
+ */
+ void DrawFormattedOld( TListItemProperties& aProperties,
+ CWindowGc& aGc,
+ const TDesC* aText,
+ const TRect& aItemRect,
+ TBool aHighlight,
+ const TColors& aColors ) const;
+
+ /**
+ * @internal helper
+ */
+ void BitBltColored( CWindowGc& aGc,
+ TBool aHighlight,
+ const CGulIcon* aIcon,
+ TInt aSubcell,
+ TBool aColorIcon,
+ const TRect& aGraphicRect ) const;
+
+
+public:
+ /**
+ * Customizes marquee default behavior.
+ * Use this before enabling marquee ( @c EnableMarqueeL() ), otherwise
+ * marquee behavior will change during animation.
+ *
+ * @since S60 2.8
+ * @param aLoops Max number of loops to be executed (default 1).
+ * @param aScrollAmount The amount of pixels scrolled per frame (default 6).
+ * @param aScrollDelay The delay between each loop
+ * (in microseconds, default 1000000 microseconds).
+ * @param aInterval The interval between frame updates after
+ * the initial delay, in microseconds.
+ */
+ void SetMarqueeParams(const TInt aLoops,
+ const TInt aScrollAmount,
+ const TInt aScrollDelay,
+ const TInt aInterval);
+
+
+ /**
+ * @internal helper
+ */
+ void SetClippedByWrap( TUint32 aClippedCells, TBool aUseClippedByWrap );
+
+ /**
+ * Tells whether current item has clipped text cells
+ * @since S60 3.2
+ * @return bitfield of clipped subcells
+ */
+ TUint32 CurrentItemTextWasClipped() const;
+
+protected: // non-exported!
+
+ /**
+ * Gets list box extension, which is used for adding more funtionality to
+ * list boxes without destroying compatibility with previous versions.
+ *
+ * @return Pointer to the list box extension.
+ */
+ CCCAppCommLauncherCustomListBoxDataExtension* Extension();
+
+ /**
+ * Gets list box extension, which is used for adding more funtionality to
+ * list boxes without destroying compatibility with previous versions.
+ *
+ * @return Pointer to the list box extension.
+ */
+ CCCAppCommLauncherCustomListBoxDataExtension* Extension() const;
+
+public:
+ /**
+ * Renders a default animated highlight.
+ *
+ * @param aGc Graphics context used for drawing.
+ * @param aItemRect the area of the screen for drawing.
+ * @param aHighlight If @c ETrue highlight is rendered
+ * if @c EFalse, nothing is done.
+ */
+ void DrawDefaultHighlight(CWindowGc &aGc,
+ const TRect &aItemRect,
+ TBool aHighlight) const;
+
+ /**
+ * Renders a settings animated highlight.
+ *
+ * @param aGc Graphics context used for drawing.
+ * @param aItemRect the area of the screen for drawing.
+ * @param aHighlight If @c ETrue highlight is rendered
+ * if @c EFalse, nothing is done.
+ */
+ void DrawSettingHighlight(CWindowGc &aGc,
+ const TRect &aItemRect,
+ TBool aHighlight) const;
+
+ /**
+ * Renders a popup animated highlight.
+ *
+ * @param aGc Graphics context used for drawing.
+ * @param aItemRect the area of the screen for drawing.
+ * @param aHighlight If @c ETrue highlight is rendered
+ * if @c EFalse, nothing is done.
+ */
+ void DrawPopupHighlight(CWindowGc &aGc,
+ const TRect &aItemRect,
+ TBool aHighlight) const;
+
+ /**
+ * Draws a popup frame.
+ *
+ * @param aGc Graphics context used for drawing.
+ */
+ void DrawPopupFrame(CWindowGc &aGc) const;
+
+ /**
+ * Disables logical-to-visual conversion in subcells between indexes.
+ *
+ * @param aFirstIndex First subcell not to use logical-to-visual conversion.
+ * @param aSecondIndex Last subcell not to use logical-to-visual conversion.
+ */
+ void SetWordWrappedSubcellIndices( TInt aFirstIndex, TInt aSecondIndex );
+
+ /**
+ * Sets the size of the subcell's icon.
+ *
+ * @internal
+ * @param aIndex Subcell to modify.
+ * @param aSize New size for the icon.
+ */
+ void SetSubCellIconSize(TInt aIndex, TSize aSize);
+
+ /**
+ * Gets the size of the subcell's icon.
+ *
+ * @internal
+ * @param aIndex Subcell to query.
+ * @return Size of the subcell's icon.
+ */
+ TSize GetSubCellIconSize(TInt aIndex);
+
+ /**
+ * Create and set the defaul skin context. Needed by the dynamic skin support.
+ *
+ * @internal
+ * @panic EAknPanicNullPointer Panics if @c iExtension has not been defined.
+ */
+ void SetupSkinContextL();
+
+ /**
+ * Sets a text color if enhanced skin support is available.
+ *
+ * @internal
+ * @param aIndex Index Number of text color in @c TAknsQsnTextColorsIndex.
+ * @see @c TAknsQsnTextColorsIndex.
+ */
+ void SetESSTextColor( TAknsQsnTextColorsIndex aIndex );
+
+ /**
+ * Set a highlighted text color if enhanced skin support is available.
+ *
+ * @internal
+ * @param aIndex Index Number of text color in @c TAknsQsnTextColorsIndex.
+ * @see @c TAknsQsnTextColorsIndex.
+ */
+ void SetESSHighlightedTextColor( TAknsQsnTextColorsIndex aIndex );
+
+ /**
+ * Set window line layout for the defined sub cell.
+ *
+ * @internal
+ * @param aSubCell Target cell for which the layout is changed.
+ * @param aGraphicLayout The new layout.
+ */
+ void SetGraphicSubCellL(TInt aSubCell, const TAknWindowLineLayout& aGraphicLayout);
+
+ /**
+ * Support for new layouts.
+ *
+ * Set text line layout for the defined sub cell.
+ *
+ * @internal
+ * @param aSubCell Target cell.
+ * @param aTextLayout The new layout.
+ */
+ void SetTextSubCellL(TInt aSubCell,const TAknTextLineLayout& aTextLayout);
+
+
+ /**
+ * Support for new layouts.
+ *
+ * @internal
+ * Changes setting of a graphical sub cell which is contained by the
+ * defined text sub cell.
+ *
+ * @param aSubCell Target text sub cell.
+ * @param aTextLayout New text layout.
+ * @param aAffectedSubCell The graphical sub cell affected by the change.
+ */
+
+ TInt CorrectBaseline(TInt aParentHeight, TInt aBaseline, TInt aFontId);
+
+ TBool IsParentRelative(TInt aVal);
+
+ void SetConditionalSubCellL(TInt aSubCell,
+ const TAknTextLineLayout& aTextLayout,
+ TInt aAffectedSubCell);
+
+ /**
+ * Checks if the list box uses scalable layouts.
+ *
+ * @internal
+ */
+ TBool UsesScalableLayoutData() const;
+ /**
+ * @internal. Do NOT use.
+ */
+ void UseScalableLayoutData( TBool aUse );
+
+ /**
+ * @internal
+ */
+ void SetStretchableGraphicSubCellL(TInt aSubCell,
+ const TAknWindowComponentLayout& aNormalLayout,
+ const TAknWindowComponentLayout& aStretchedLayout);
+ /**
+ * @internal
+ */
+ void SetStretchableTextSubCellL(TInt aSubCell,
+ const TAknTextComponentLayout& aNormalLayout,
+ const TAknTextComponentLayout& aStretchedLayout);
+ /**
+ * @internal
+ */
+ void SetStretchableConditionalSubCellL(TInt aSubCell,
+ const TAknTextComponentLayout& aNormalLayout,
+ const TAknTextComponentLayout& aStretchedLayout,
+ TInt aNormalSubCell,
+ TInt aStretchedSubCell );
+ /**
+ * @internal
+ */
+ void ResetSLSubCellArray();
+
+ /**
+ * @internal
+ */
+ void EnableStretching(const TBool aEnabled);
+ /**
+ * @internal
+ */
+ TBool StretchingEnabled() const;
+ /**
+ * @internal
+ */
+ void HideSecondRow(const TBool aHide);
+ /**
+ * @internal
+ */
+ TBool SecondRowHidden() const;
+ /**
+ * @internal
+ */
+ void SubCellsMightIntersect( const TBool aMightIntersect );
+
+ // Drop shadows can be toggled on/off in
+ // "transparent" lists (eg. transparent camera setting page).
+ // ETrue = on, EFalse = off
+ /**
+ * @internal
+ */
+ void ToggleDropShadows( const TBool aEnable );
+
+ // changes tactile feedback behaviour
+ // ETrue - feedback for any item
+ // EFalse - feedback for focused item only
+ /**
+ * @internal
+ */
+ void SetFeedbackForAllItems( TBool aFeedbackForAllItems );
+ // gets tactile feedback behaviour
+ // ETrue - feedback for any item
+ // EFalse - feedback for focused item only
+ /**
+ * @internal
+ */
+ TBool FeedbackForAllItems();
+
+ /**
+ * Returns ETrue if kinetic scrolling is enabled.
+ * @internal
+ * @since S60 5.0
+ * @return ETrue if kinetic scrolling feature is enabled.
+ */
+ TBool KineticScrollingEnabled() const;
+
+ /**
+ * Returns instance of CEikListBox.
+ * @internal
+ * @since S60 5.0
+ * @return Instance of CEikListBox.
+ */
+ CEikListBox* ListBox() const;
+
+
+private:
+ void DoConstructL( const TAknsItemID& aAnimationIID );
+
+ const TColors &Colors(TInt aItemIndex, TInt aSubCell) const;
+ TInt LastSubCell() const;
+ void AddSubCellL(TInt aSubCell);
+ SSubCell& At(TInt aArrayIndex);
+ const SSubCell& At(TInt aArrayIndex) const;
+ TInt FindSubCellIndex(TInt& aArrayIndex,TInt aSubCell) const;
+ void FindSubCellIndexOrAddL(TInt& aArrayIndex,TInt aSubCell);
+ TInt AddActualFontL(const CFont* aBaseFont);
+ void SetUnderlineStyle( TListItemProperties aProperties, CWindowGc& aGc, TInt aSubCell ) const;
+ void CheckIfSubCellsIntersect( TAknTextLineLayout* aLayouts, TBool* aResults, const TDesC& aText, const TRect& aItemRect ) const;
+
+private:
+ CArrayFix<SSubCell>* iSubCellArray;
+ CArrayPtr<CGulIcon>* iIconArray;
+ friend class CCCAppCommLauncherCustomListBoxItemDrawer; // this is for "lastsubcell" -access.
+ TColors defaultcolors;
+ CCCAppCommLauncherCustomListBoxDataExtension *iExtension;
+ };
+
+
+#endif /* CCAPPCOMMLAUNCHERCUSTOMLISTBOXDATA_H_ */