diff -r 000000000000 -r 2f259fa3e83a uifw/AvKon/aknhlist/inc/akntreenode.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uifw/AvKon/aknhlist/inc/akntreenode.h Tue Feb 02 01:00:49 2010 +0200 @@ -0,0 +1,320 @@ +/* +* Copyright (c) 2006-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: Abstract base class for hierarchical list nodes. +* +*/ + + +#ifndef C_AKNTREENODE_H +#define C_AKNTREENODE_H + + +#include "akntreeitem.h" + + +/** + * Abstract base class for hierarchical list nodes. + * + * The items in tree structure are divided into leaves and nodes. The + * division does not represent the dynamic states of the tree items; + * nodes are tree items that can have children, while leaves cannot. + * + * @lib aknhlist.lib + * @since S60 v3.2 + */ +NONSHARABLE_CLASS( CAknTreeNode ) : public CAknTreeItem + { + +public: + + /** Tree node flags. */ + enum TAknTreeNodeFlags + { + /** Node is marked. */ + EMarked = 0x01, + /** Node has marked descendants. */ + EHasMarkedDescendants = 0x02, + /** Node is persistent. */ + EPersistent = 0x04, + /** Node has persistent descendants. */ + EHasPersistenDescendants = 0x08, + /** Node is expanded. */ + EExpanded = 0x10, + /** Node appears non-empty, even if it is empty. */ + ENonEmpty = 0x20, + /** Marking change for the node is disabled. */ + EMarkingDisabled = 0x40 + }; + + /** + * Destructor. + */ + virtual ~CAknTreeNode(); + + /** + * Returns the number of children the node has. + * + * @return Number of children. + */ + TInt ChildCount() const; + + /** + * Returs the number of descendants the node has. + * + * @return Number of descendants. + */ + TInt DescendantCount() const; + + /** + * Returns the number of visible descendants the node has. + * + * @return Number of visible descendants. + */ + TInt VisibleDescendantCount() const; + + /** + * Returns the child item specified with the index. + * + * @param aIndex The index of the child. + * + * @return A child. + */ + CAknTreeItem* Child( TInt aIndex ) const; + + /** + * Return the index of the specified child. Negative if not found. + * + * @return The index of the specified child. + */ + TInt Index( const CAknTreeItem* aItem ) const; + + /** + * Adds the child to the node. This does not change the parent of the + * added child, thus it has to be done separately with the + * @c CAknTreeItem::SetParent() method. The child are compared + * to determine the correct position of the item within the array. + * + * @param aItem The child item to be added to the node. + * + * @leave KErrNoMemory Not enough memory to add the child to the node. + * + * @post The ownership of the item is transferred to the parent node. + */ + void AddChildL( CAknTreeItem* aItem ); + + /** + * Adds the child to the node at a specified position. This does not + * change the parent of the added child, thus it has to be done + * separately with the @c CAknTreeItem::SetParent() method. + * + * @param aItem The child item to be added to the node. + * + * @param aPosition The position of the child within the array. Z + * + * @leave KErrNoMemory Not enough memory to add the child to the node. + * + * @post The ownership of the item is transferred to the parent node. + */ + void AddChildL( CAknTreeItem* aItem, TInt aPosition ); + + /** + * Removes the child from the node. + * + * @param aItem The child item to be removed from the node. + * + * @return @c KErrNotFound, if the specified child is not found, + * otherwise @c KErrNone. + */ + TInt RemoveChild( CAknTreeItem* aItem ); + + /** + * Checks whether the node is expanded. + * + * @return @c ETrue, if the node is expanded. + */ + TBool IsExpanded() const; + + /** + * Changes the state of the node to expanded. + */ + virtual void Expand(); + + /** + * Changes the state of the node to collapsed. + */ + virtual void Collapse(); + + /** + * Checks whether node is empty. The node is not empty, when it contains + * children, or is explicitly set non-empty with @c SetNonEmpty method. + * + * @return @c ETrue, if the node is empty. + */ + TBool IsEmpty() const; + + /** + * Sets the node non-empty. When the node is set non-empty, it can have an + * appearance of an non-empty node, even if it does not actually contain + * any children. + * + * Note: Setting the node empty with this method does not remove the + * contents of the node, it only removes the non-empty flag from the node. + * + * @param aNonEmpty @c ETrue to set node appear non-empty, @c EFalse to + * to remove the flag. + */ + void SetNonEmpty( TBool aNonEmpty ); + + /** + * Sorts the children of this node. + */ + void Sort(); + +// from base class CAknTreeItem + + /** + * From CAknTreeItem. + * Returns a pointer to this node. + * + * @return @c CAknTreeNode pointer to this object. + */ + CAknTreeNode* Node(); + + /** + * From CAknTreeItem. + * Returns a pointer this node. + * + * @return @c CAknTreeNode pointer to this object. + */ + const CAknTreeNode* Node() const; + + /** + * From CAknTreeItem. + * Checks whether the node is marked. + * + * @return @c ETrue, if the node is marked. + */ + TBool IsMarked() const; + + /** + * From CAknTreeItem. + * Sets the node marked or unmarked. + * + * @param aMarked @c ETrue to set node marked, @c EFalse to unmarked. + */ + void SetMarked( TBool aMarked ); + + /** + * From CAknTreeItem. + * Checks whether the node is markable. + * + * @return @c ETrue if marking is enabled, otherwise @c EFalse. + */ + TBool IsMarkable() const; + + /** + * From CAknTreeItem. + * Enabled or disables the marking changes for the node. By default, + * each node is set markable. + * + * @param aMarkable @c ETrue to enable marking, @c EFalse to disable it. + */ + void SetMarkable( TBool aMarkable ); + + /** + * From CAknTreeItem. + * Checks whether the node is persistent. + * + * @return @c ETrue, if the node is persistent. + */ + TBool IsPersistent() const; + + /** + * From CAknTreeItem. + * Sets whether the node is persistent. + * + * @param aPersistent @c ETrue to set node persistent, @c EFalse to set + * node non-persistent. + */ + void SetPersistent( TBool aPersistent ); + + /** + * From CAknTreeItem. + * Checks whether the node has any persistent descendants. + * + * @return @c ETrue, if node has persistent descendants. + */ + TBool HasPersistentDescendants() const; + + /** + * From CAknTreeItem. + * Checks whether the item can be removed from the tree when its parent + * node is being collapsed. + * + * Nodes that have been set marked or persistent, or contain marked or + * persistent descendants cannot be removed from the tree automatically + * on collapse events. + * + * @return @c ETrue, if the node can be removed from the tree. + */ + TBool IsRemovableFromCollapsedNode() const; + +protected: + + /** + * Default C++ constructor. + */ + CAknTreeNode(); + + /** + * C++ constructor. + * + * @param aFlags Flags for the tree node. The possible flags are defined + * in the @c TAknTreeNodeFlags enumeration. + */ + CAknTreeNode( TUint32 aFlags ); + + /** + * Returns the flags set for the node. + * + * @return Flags. + */ + TUint32 Flags() const; + + /** + * Sets flags for the node. + * + * @param aFlags Flags for the node. First 16 flags are reserved for use + * of @c CAknTreeNode class, but the other 16 flags can be used by + * derived classes. + */ + void SetFlags( TUint32 aFlags ); + +private: // data + + /** + * Array for children of the node. + * Own. + */ + RPointerArray iChild; + + /** + * Flags. + */ + TUint32 iFlags; + + }; + + +#endif // C_AKNTREENODE_H