diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/aknhlist/inc/akntree.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/aknhlist/inc/akntree.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,1001 @@ +/* +* Copyright (c) 2006, 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: An interface to the hierarchical list tree structure. +* +*/ + + +#ifndef C_AKNTREE_H +#define C_AKNTREE_H + + +#include // TScaleMode +#include + +#include "akntreenode.h" +#include "akntreeobserver.h" + +class CAknTreeList; +class CAknTreeListIcon; +class CAknTreeOrdering; +class CAknMarqueeControl; +class CFont; +class MAknCustomTreeOrdering; +class TAknsItemID; +class TAknTreeIterator; +class TAknTextComponentLayout; +class TRgb; + + +/** + * Hierarchical list tree structure. + * + * The tree structure is formed from hierarchical list items. These items + * can be either leaves or nodes. The names do not refer to their dynamic + * state; a leaf is a tree item that cannot ever have children in the tree + * structure while node can. @c CAknTree is derived from @c CAknTreeNode + * class, which is an abstract base class for all tree nodes. An instance of + * @c CAknTree is always set as a root of the tree structure, so that it can + * be always reached from all the tree items through parent pointers, or + * simply by calling the @c CAknTreeItem::Root() method. + * + * @c CAknTree class provides fast access to all the tree items it contains. + * The tree structure should always be modified through this class and not + * by directly modifying the related tree items, as this class is responsible + * for notifying the tree list view of the occurring tree events. + * + * Furthermore, this class can create an iterator (an instance of + * @c CAknTreeIterator) for traversing the tree structure, it stores the + * ordering of the tree items, and it can also store the icons shared by + * several tree items. + * + * @lib aknhlist.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CAknTree ) : public CAknTreeNode + { + +public: + + /** Pre-defined IDs for the icons constructed by the tree. */ + enum TTreeListIcon + { + ENone = AknTreeListIconID::KNone, + /** Tree structure line with branch. */ + ELineBranchIndication = AknTreeListIconID::KLineBranchIndication, + /** Tree structure end line. */ + ELineEndIndication = AknTreeListIconID::KLineEndIndication, + /** Tree structure straight line indication. */ + ELineStraightIndication = AknTreeListIconID::KLineStraightIndication, + /** Default file indication. */ + EDefaultFileIndication = AknTreeListIconID::KDefaultFileIndication, + /** Closed folder indication. */ + EClosedFolderIndication = AknTreeListIconID::KClosedFolderIndication, + /** Open folder indication. */ + EOpenFolderIndication = AknTreeListIconID::KOpenFolderIndication, + /** Collapse function indication, superimposed. */ + ECollapseFunctionIndication = AknTreeListIconID::KCollapseFunctionIndication, + /** Expand function indication, superimposed. */ + EExpandFunctionIndication = AknTreeListIconID::KExpandFunctionIndication, + /** Item marked indication. */ + EMarkedIndication = AknTreeListIconID::KMarkedIndication, + /** Highlighted item marked indication. */ + EHighlightedMarkedIndication = AknTreeListIconID::KHighlightedMarkedIndication, + /** Denotes the range for pre-defined IDs. */ + EPreDefinedIconIdRange + }; + + /** + * Two-phased constructor. + * + * @param aList Reference to the tree list object which owns the created + * tree structure. + * + * @param aOrdering Ordering for the tree list items. The ownership of + * of the ordering is transferred to the tree. + * + * @return Newly created tree instance. + */ + static CAknTree* NewL( CAknTreeList& aList, CAknTreeOrdering* aOrdering ); + + /** + * Destructor. + */ + virtual ~CAknTree(); + + /** + * Returns the ID assigned for the specified tree item. The constant + * @c KAknTreeIIDRoot is returned for the tree root, and constant @c + * KAknTreeIIDNone for null pointer. + * + * @param aItem Pointer to a tree item. + * + * @return ID of the given tree item. + */ + TAknTreeItemID Id( const CAknTreeItem* aItem ) const; + + /** + * Sets the ordering of the tree list. + * The ordering defines the order of hierarchical list items. The list + * items are always kept sorted according the set ordering object, and + * whenever the ordering object is changed, the tree is sorted according + * the newly set ordering. + * + * @param aOrdering Specialisation specific implementation for the + * abstract @c CAknTreeListOrdering class. This object defines the + * order of hierarchical list items. + * + * @param aDrawNow @c ETrue to redraw the list after it has been sorted. + * + * @post The list is sorted according to the set ordering. + */ + void SetOrdering( CAknTreeOrdering* aOrdering, TBool aDrawNow ); + + /** + * Sets custom ordering for the tree. + * + * @param aOrdering Implementation for custom ordering interface defining + * the order of hierarchical list items. + * + * @param aDrawNow @c ETrue to redraw the list after it has been sorted. + */ + void SetCustomOrdering( MAknCustomTreeOrdering* aOrdering, TBool aDrawNow ); + + /** + * Sorts the specified tree node. + * + * @param aNode Item ID of the node that has to be sorted. + * + * @param aSortDescendants @c ETrue to sort the content of the specified + * node including the content of its descendant nodes, @c EFalse to + * to sort only the child items within the specified node. + * + * @param aDrawNow @c ETrue to redraw the list after sorting. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + void Sort( TAknTreeItemID aNode, TBool aSortDescendants, TBool aDrawNow ); + + /** + * Compares two tree items. + * + * @param aFirst First item. + * + * @param aSecond Second item. + * + * @return Positive, if the first item is greater than the second item; + * negative, if the first item is less than the second item; + * and zero, if the items are equal. + */ + TInt Compare( const CAknTreeItem& aFirst, const CAknTreeItem& aSecond ) const; + + /** + * Returns the number of items in the tree. + * + * @return Number of items. + */ + TInt ItemCount() const; + + /** + * Returns the number of visible items in the tree. This excludes all the + * items in collapsed folders. + * + * @return Number of visible items. + */ + TInt VisibleItemCount() const; + + /** + * Returns the index of specified item. The index is equal to the number + * of tree items in the tree structure before the specified item. + * + * @param aItem Pointer to tree item. + * + * @return The index of specified item. Value @c KErrNotFound is returned + * if the specified item is not found. + */ + TInt ItemIndex( const CAknTreeItem* aItem ) const; + + /** + * Returns the index from subset of visible items. The index is equal to + * the number of tree items in the expanded tree structure before the + * specified item. + * + * @param aItem Pointer to tree item. + * + * @return The index of specified item. Value @c KErrNotFound is returned + * if the specified item is not found, or not in the expanded tree + * structure. + */ + TInt VisibleItemIndex( const CAknTreeItem* aItem ) const; + + /** + * Returns visible item based on the given index. + * + * @param aIndex Index defining the items position in expanded tree. + * + * @return Pointer to tree item. @c NULL, if item with given index is found. + */ + CAknTreeItem* VisibleItem( TInt aIndex ) const; + + /** + * Returns the depth of the tree, which equals to number of levels in the + * expanded part of the tree. + * + * @return The depth of expanded tree structure. + */ + TInt Depth() const; + + /** + * Retrieves the specified item from the tree. + * + * @param aItemId ID of the item to be retrieved. + * + * @param aItem Reference to a pointer, which is replaced with a pointer + * to the specified item, if it is found from the tree. + * + * @return @c KErrNone, if the item is found from the tree. The return + * value @c KErrNotFound indicates that the item was not found. + */ + TInt GetItem( TAknTreeItemID aItemId, CAknTreeItem*& aItem ) const; + + /** + * Retrieves the specified item from the tree structure. + * + * @param aItemId ID of the item to be retrieved. + * + * @return The retrieved tree item. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + CAknTreeItem* Item( TAknTreeItemID aItemId ) const; + + /** + * Retrieves the specified node from the tree structure. + * + * @param aNodeId ID of the node to be retrieved. + * + * @return The retrieved tree node. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + CAknTreeNode* Node( TAknTreeItemID aNodeId ) const; + + /** + * Add a new item to the tree. The constant @c KAknTreeIIDRoot is to be + * used as the ID of parent node, when item is added to the the top-most + * level of the tree. + * + * @param aItem The item to be added to the tree structure. + * + * @param aParent ID of the parent node to which the item is to be added. + * + * @param aDrawNow @c ETrue, if the view is to be updated after the + * item has been added to the tree. + * + * @return Item ID assigned for the added item. + */ + TAknTreeItemID AddItemL( CAknTreeItem* aItem, TAknTreeItemID aParent, + TBool aDrawNow ); + + /** + * Moves the specified item to the specified target node. The constant + * @c KAknTreeIIDRoot can be used as the ID of target node, when moving + * the item to the top-most level of the tree. + * + * @param aItem ID of the item to be moved. + * + * @param aTargetNode ID of the node, where the item is to be moved. + * + * @param aDrawNow @c ETrue, if the view is to be updated after the + * item has been moved. + * + * @leave KErrArgument The specified item is the same as the target node + * or one of the ancestors of target node. + * + * @leave KErrNoMemory Not enough memory is available for adding the + * specified item to the target node. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified target node is not a node. + */ + void MoveItemL( TAknTreeItemID aItem, TAknTreeItemID aTargetNode, + TBool aDrawNow ); + + /** + * Remove an existing item from the tree. If the specified item is a node, + * all of its descendants will be removed from the tree as well. + * + * @param aItem The item to be removed from the tree structure. + * + * @param aDrawNow @c ETrue, if the view is to be updated after the + * item has been removed from the tree. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + void RemoveItem( TAknTreeItemID aItem, TBool aDrawNow ); + + /** + * Changes the state of the specified node to expanded. Using constant + * @c KAknTreeIIDRoot as the node ID expands every node in the tree. + * + * @param aNode Item ID of the node to be expanded. + * + * @param aDrawNow @c ETrue, if the view is to be updated after the node + * has been expanded. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + void ExpandNode( TAknTreeItemID aNode, TBool aDrawNow ); + + /** + * Changes the state of the specified node to collapsed. All the children + * that are not set persistent will be deleted. Using constant @c + * KAknTreeIIDRoot as the node ID collapses every node in the tree. + * + * @param aNode Item ID of the node to be collapsed. + * + * @param aDrawNow @c ETrue, if the view is to be updated after the node + * has been collapsed. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + void CollapseNode( TAknTreeItemID aNode, TBool aDrawNow ); + + /** + * Checks if the specified node is expanded. + * + * @param aNode Item ID of the node. + * + * @return @c ETrue, if the node is expanded. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + TBool IsExpanded( TAknTreeItemID aNode ) const; + + /** + * Returns the number of children of a tree node. This method, along with + * @c Child() method, can be used for enquiring information of the tree + * structure. Constant @c KAknTreeIIDRoot can be used to get the + * item count on the top-most level of the list. + * + * @param aNode Item ID of a node. + * + * @return Number of children of specified node. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + TInt ChildCount( TAknTreeItemID aNode ) const; + + /** + * Returns the item ID of a child of a tree node. The specific child is + * specified with an index. The child count for any hierarchical + * list node can be get with @c ChildCount() method. + * + * @param aNode Item ID of the node, whose child is enquiried. + * + * @param aIndex Index of the enquiried child. + * + * @return Item ID of the specified child. Value @c KAknTreeIIDNone is + * returned, if the child with specified index does not exist. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + TAknTreeItemID Child( TAknTreeItemID aNode, TInt aIndex ) const; + + /** + * Returns the item ID of a parent node of specified tree item. + * + * @param aItem Item ID of the item, whose parent is queried. + * + * @return Item ID of the parent node. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + TAknTreeItemID Parent( TAknTreeItemID aItem ) const; + + /** + * Adds new observer for the tree. The ownership of the observer interface + * is not transferred to the tree. + * + * @param aObserver Observer. + */ + void AddObserverL( MAknTreeObserver* aObserver ); + + /** + * Removes an observer from the tree. + * + * @param aObserver Observer to be removed. + * + * @return @c KErrNotFound, if the specified observer is not found. + * Otherwise, the value @c KErrNone is used. + */ + TInt RemoveObserver( MAknTreeObserver* aObserver ); + + /** + * Checks whether the specified item is marked. + * + * @param aItem Item ID. + * + * @return @c ETrue, if the item is marked. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + TBool IsMarked( TAknTreeItemID aItem ) const; + + /** + * Sets the specified item marked or unmarked. + * + * @param aItem Item ID of modified item. + * + * @param aMarked @c ETrue to set item marked, @c EFalse to unmarked. + * + * @param aDrawNow @c ETrue to redraw the view. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + void SetMarked( TAknTreeItemID aItem, TBool aMarked, TBool aDrawNow ); + + /** + * Enables or disables marking of specified list item. + * + * @param aItem Item ID of the list item. + * + * @param aEnable @c ETrue to enable marking, @c EFalse to disable it. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + void EnableMarking( TAknTreeItemID aItem, TBool aEnable ); + + /** + * Gets all the marked items from the specified node. The marked items + * are appended to the end of the array passed as parameter. + * + * @param aNode Item ID of a node from where the marked items are + * retrieved. + * + * @param aMarkedItems On return, contains item IDs of marked items in + * the specified node. + * + * @leave KErrNoMemory Appending item to the array fails. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified item is not a node. + */ + void GetMarkedItemsL( TAknTreeItemID aNode, + RArray& aMarkedItems ) const; + + /** + * Checks whether the specified node is empty. + * + * @param aNode Item ID for a node. + * + * @return @c ETrue, if the item is empty. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified target item is not a node. + */ + TBool IsEmpty( TAknTreeItemID aNode ) const; + + /** + * Sets whether the specified node appears as non-empty when empty. + * + * @param aNode Item ID for a node. + * + * @param aNonEmpty @c ETrue to set node appear non-empty, @c EFalse to + * to remove previously set flag. + * + * @param aDrawNow @c ETrue to redraw the list. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + * + * @panic EAknHListPanicInvalidItemType Specified target item is not a node. + */ + void SetNonEmpty( TAknTreeItemID aNode, TBool aNonEmpty, TBool aDrawNow ); + + /** + * Checks whether the specified item is persistent. + * + * @param aItem Item ID. + * + * @return @c ETrue, if the item is persistent. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + TBool IsPersistent( TAknTreeItemID aItem ) const; + + /** + * Sets the specified item persistent or non-persistent. + * + * @param aItem Item ID of modified item. + * + * @param aPersistent @c ETrue to set item persistent. + * + * @panic EAknHListPanicInvalidItemID Item with specified ID is not found. + */ + void SetPersistent( TAknTreeItemID aItem, TBool aPersistent ); + + /** + * Creates an iterator for the the expanded tree structure. + * + * @return Iterator. + */ + TAknTreeIterator Iterator() const; + + /** + * Creates an iterator for traversing the tree structure under the + * specified tree node. + * + * @param aNode Iterated node. + * + * @param aFlags Flags for the iterator. The @c KSkipCollapsedNodeContents + * flag can be used to skip the contents of all collapsed nodes. + * + * @return Iterator. + */ + TAknTreeIterator Iterator( CAknTreeNode* aNode, TUint aFlags ) const; + + /** + * Notifies the observers that an item has been modified. + * + * @param aItem Modified item. + */ + void ItemModified( CAknTreeItem* aItem ); + + /** + * Adds icon to the tree. The icon is constructed based on the given + * parameters and the parameters are stored in the tree, so that the icon + * can be reconstructed on skin change event. + * + * @param aId ID of the masked bitmap to be created. + * + * @param aFilename Filename to be used to construct the item, if no + * matching item was found in the currently active skin. + * + * @param aBitmapId ID of the bitmap in the file. Used only if no matching + * item was found in the currently active skin. + * + * @param aMaskId ID of the mask in the file. Used only if no matching item + * was found in the currently active skin. + * + * @param aScaleMode Scale mode used when icon's bitmap is resized. + * + * @return Icon ID assigned for the created icon. + */ + TInt AddIconL( const TAknsItemID& aId, const TDesC& aFilename, + TInt aBitmapId, TInt aMaskId, TScaleMode aScaleMode ); + + /** + * Adds icon to the tree. Icons added with this method are not + * reconstructed on skin change events. + * + * @param aIcon Pointer to the bitmap. + * + * @param aMask Pointer to the mask bitmap. + * + * @param aTransferOwnership @c ETrue, if ownership of bitmaps is + * transferred to the list. If the method leaves, it is always on the + * responsibility of the client code to take care of deleting the bitmaps. + * + * @param aScaleMode Scale mode used when icon's bitmap is resized. + * + * @return Icon ID assigned for the created icon. + */ + TInt AddIconL( CFbsBitmap* aIcon, CFbsBitmap* aMask, + TBool aTransferOwnership, TScaleMode aScaleMode ); + + /** + * Adds colored icon to the tree. The icon is constructed based on the + * given parameters and the parameters are stored in the tree, so that the + * icon can be reconstructed on skin change event + * + * @param aId Item ID of the masked bitmap to be created. + * + * @param aColorId Item ID of the color table. + * + * @param aColorIndex Index in the color table. + * + * @param aFilename Filename to be used to construct the item, if no + * matching item was found in the currently active skin. + * + * @param aBitmapId ID of the bitmap in the file. Used only if no matching + * item was found in the currently active skin. + * + * @param aMaskId ID of the mask in the file. Used only if no matching item + * was found in the currently active skin. + * + * @param aDefaultColor Color RGB value to be used, if no color is found in + * the currently active skin. + * + * @param aScaleMode Scale mode used when icon's bitmap is resized. + * + * @return Icon ID assigned for the created icon. + */ + TInt AddColorIconL( const TAknsItemID& aId, const TAknsItemID& aColorId, + TInt aColorIndex, const TDesC& aFilename, TInt aBitmapId, + TInt aMaskId, TRgb aDefaultColor, TScaleMode aScaleMode ); + + /** + * Sets icon to the list with specified icon ID. If icon with the same ID + * is already added to the tree, the existing icon is replaced with the + * new. + * + * @param aIconId Assigned icon ID for the icon. + * + * @param aId Item ID of the masked bitmap to be created. + * + * @param aFilename Filename to be used to construct the item, if no + * matching item was found in the currently active skin. + * + * @param aBitmapId ID of the bitmap in the file. Used only if no matching + * item was found in the currently active skin. + * + * @param aMaskId ID of the mask in the file. Used only if no matching item + * was found in the currently active skin. + * + * @param aScaleMode Scale mode used when icon's bitmap is resized. + */ + void SetIconL( TInt aIconId, const TAknsItemID& aId, + const TDesC& aFilename, TInt aBitmapId, TInt aMaskId, + TScaleMode aScaleMode ); + + /** + * Sets icon to the list with specified icon ID. If icon with the same ID + * is already added to the tree, the existing icon is replaced with the + * new. This method adds only the bitmaps to the list, and they cannot + * be reconstructed by the list on skin change events. + * + * @param aIconId Assigned icon ID for the icon. + * + * @param aIcon Pointer to the bitmap. + * + * @param aMask Pointer to the mask bitmap. + * + * @param aTransferOwnership @c ETrue, if ownership of bitmaps is + * transferred to the list. If the method leaves, it is always on the + * responsibility of the client code to take care of deleting the bitmaps. + * + * @param aScaleMode Scale mode used when icon's bitmap is resized. + */ + void SetIconL( TInt aIconId, CFbsBitmap* aIcon, CFbsBitmap* aMask, + TBool aTransferOwnership, TScaleMode aScaleMode ); + + /** + * Sets color icon to the list with specified icon ID. If icon with the + * same ID is already added to the tree, the existing icon is replaced with + * the new. + * + * @param aIconId Assigned icon ID for the icon. + * + * @param aId Item ID of the masked bitmap to be created. + * + * @param aColorId Item ID of the color table. + * + * @param aColorIndex Index in the color table. + * + * @param aFilename Filename to be used to construct the item, if no + * matching item was found in the currently active skin. + * + * @param aBitmapId ID of the bitmap in the file. Used only if no matching + * item was found in the currently active skin. + * + * @param aMaskId ID of the mask in the file. Used only if no matching item + * was found in the currently active skin. + * + * @param aDefaultColor Color RGB value to be used, if no color is found in + * the currently active skin. + * + * @param aScaleMode Scale mode used when icon's bitmap is resized. + */ + void SetColorIconL( TInt aIconId, const TAknsItemID& aId, + const TAknsItemID& aColorId, TInt aColorIndex, const TDesC& aFilename, + TInt aBitmapId, TInt aMaskId, TRgb aDefaultColor, + TScaleMode aScaleMode ); + + /** + * Removes previously added icon from the tree. + * + * @param aIconId ID of the removed icon. + * + * @leave KErrArgument if specified icon is one of the default icons. + */ + void RemoveIconL( TInt aIconId ); + + /** + * Gets pointer to the specified tree list icon. The ownership of the + * icon is not transferred to the caller. + * + * @param aIconId Icon ID specifying the requested icon. + * + * @return Pointer to the requested icon, or NULL if icon with specified + * ID was not found. + */ + CAknTreeListIcon* Icon( TInt aIconId ) const; + + /** + * Draws the specified icon. The icon is specified with the ID value, + * which can be one of the default values in @c CAknTree::TIcon enumeration, + * or a value returned when the icon was added to the list. + * + * @param aIconId Icon ID specifying the icon. + * + * @param aSize Size of the icon. + * + * @param aGc Graphics context the icon is drawn to. + * + * @param aPoint A position for the top left corner of the icon. + * + * @param aSourceRect A rectangle defining the piece of the icon to be + * drawn, with co-ordinates relative to the top left corner of the + * bitmap. + * + * @return @c KErrNotFound, if no icon with specified ID is found, + * otherwise @c KErrNone. + */ + TInt DrawIcon( TInt aIconId, const TSize& aSize, CWindowGc& aGc, + const TPoint& aPoint, const TRect& aSourceRect ); + + /** + * Draws text for tree list item. Text is drawn with marquee scrolling + * when marquee scrolling is enabled, the text does not fit to the + * rectangle appointed to it, and the item is focused. Otherwise, when + * some of the conditions above are not true, text is drawn normally with + * clipping. + * + * @param aGc Graphics context. + * + * @param aRect Parent rectangle for the text layout. + * + * @param aTextLayout Text layout. + * + * @param aText Text. + * + * @param aFont Font. @c NULL if the font defined in layout is used. + * + * @param aItem Pointer to the tree list item, for which the text is drawn. + * + * @param aFocused @c ETrue, if the text is drawn for focused tree list + * item, otherwise @c EFalse. + * + * @param aMarquee @c ETrue, if marquee can be used for drawing the text + * when marquee scrolling is enabled for the list. + */ + void DrawText( CWindowGc& aGc, const TRect& aRect, + const TAknTextComponentLayout& aTextLayout, const TDesC& aText, + const CFont* aFont, const CAknTreeItem* aItem, TBool aFocused, + TBool aMarquee ); + + /** + * Handles skin change. + */ + void HandleSkinChangeL(); + + /** + * Enables marquee scrolling. + * + * @param aEnable @c ETrue to enable marquee, @c EFalse to disable it. + */ + void EnableMarquee( TBool aEnable ); + + /** + * Returns whether marquee scrolling is enabled. + * + * @return @c ETrue when enabled, otherwise @c EFalse. + */ + TBool IsMarqueeOn() const; + + /** + * Callback function for marquee control. + * + * @param aThis Pointer to an instance of @c CAknTree. + */ + static TInt MarqueeRedrawRequest( TAny* aThis ); + + /** + * Enables tabulator mode expand and collapse function indicators. + * + * @param @aEnable @c ETrue to enable tabulator mode indicators. + */ + void EnableTabModeFunctionIndicatorsL( TBool aEnable ); + + /** + * Checks whether tabulator mode expand and collapse function indicators are + * enabled. + * + * @return @c ETrue when enabled, otherwise @c EFalse. + */ + TBool TabModeFunctionIndicators() const; + +// from base class CAknTreeItem + + /** + * From CAknTreeItem. + * Returns the type of the item. + * + * @return Item type. + */ + TInt Type() const; + + /** + * From CAknTreeItem. + * Returns pointer to the root of the tree. This implementation will simply + * return the pointer to this object, as an instance of @c CAknTree will + * always be set as the root of the tree. + * + * @return Pointer to the tree root. + */ + CAknTree* Root() const; + +// from base class CAknTreeNode + + /** + * From CAknTreeNode. + * Changes the state of the whole tree, that is, every node, to expanded. + */ + void Expand(); + + /** + * From CAknTreeNode. + * Changes the state of the whole tree, that is, every node, to collapsed. + */ + void Collapse(); + +private: + + /** + * Constructor. + * + * @param aList The list owning the tree instance. + * + * @param aOrdering Ordering for the tree items. + */ + CAknTree( CAknTreeList& aList, CAknTreeOrdering* aOrdering ); + + /** + * Second phase constructor. + */ + void ConstructL(); + + /** + * Notifies the observers of the tree of specified tree event. + * + * @param aEvent Tree event. + * + * @param aItem Pointer to the tree item affected by the tree event. + * + * @param aDrawNow @c ETrue, if the view is to be redrawn after the event. + */ + void NotifyObservers( MAknTreeObserver::TEvent aEvent, CAknTreeItem* aItem, + TBool aDrawNow ); + + /** + * Used in marquee control callback. + */ + TInt DoMarqueeRedrawRequest(); + + /** + * Searches for available icon ID. + * + * @return Available icon ID. + */ + TInt AvailableIconId() const; + + /** + * Adds an icon to the icon array. The icons in the array are kept + * ordered based on their ID's. If some icon in the array already has the + * same ID as the added icon, it is replaced with the new icon. + * + * @param aIcon Icon. + */ + void AddIconL( CAknTreeListIcon* aIcon ); + + /** + * Sorts every node in the tree according to set ordering. + * + * @param aDrawNow @c ETrue to redraw the list after it has been sorted. + */ + void Sort( TBool aDrawNow ); + + /** + * Expands the specified node and notifies the observers of the event. + * + * @param aNode Pointer to the node to be expanded. + * + * @param aDrawNow @c ETrue, if the view is to be redrawn after the node + * has been expanded. + */ + void DoExpandNode( CAknTreeNode* aNode, TBool aDrawNow ); + +// from base class CAknTreeItem + + /** + * From CAknTreeItem. + */ + void Draw( CWindowGc& aGc, const TRect& aItemRect, const TRect& aRect, + TBool aFocused ) const; + +private: // data + + /** + * The tree list owning the tree instance. + */ + CAknTreeList& iList; + + /** + * Ordering for the tree. + * Own. + */ + CAknTreeOrdering* iOrdering; + + /** + * Custom ordering for the tree. + * Not owned. + */ + MAknCustomTreeOrdering* iCustomOrdering; + + /** + * Tree observers. + * Not owned. + */ + RPointerArray iObservers; + + /** + * Pointer array containin pointers to all tree items. + * Not owned. + */ + RPointerArray iItems; + + /** + * Pointer array containing pointers to stored icons. + * Own. + */ + RPointerArray iIcons; + + /** + * Marquee control. + * Own. + */ + CAknMarqueeControl* iMarquee; + + /** + * The tree item using the marquee control. + * Not own. + */ + const CAknTreeItem* iMarqueeItem; + + /** + * Flags for tree settings. + */ + TBitFlags32 iFlags; + + }; + + +#endif // C_AKNTREE_H