1 // written by Reinhard Ostermeier, reinhard@nospam.r-ostermeier.de 2 // This file is part of the "Irrlicht Engine". 3 // For conditions of distribution and use, see copyright notice in irrlicht.h 4 5 #ifndef __I_GUI_TREE_VIEW_H_INCLUDED__ 6 #define __I_GUI_TREE_VIEW_H_INCLUDED__ 7 8 #include "IGUIElement.h" 9 #include "IGUIImageList.h" 10 #include "irrTypes.h" 11 12 namespace irr 13 { 14 namespace gui 15 { 16 class IGUIFont; 17 class IGUITreeView; 18 19 20 //! Node for gui tree view 21 /** \par This element can create the following events of type EGUI_EVENT_TYPE: 22 \li EGET_TREEVIEW_NODE_EXPAND 23 \li EGET_TREEVIEW_NODE_COLLAPS 24 \li EGET_TREEVIEW_NODE_DESELECT 25 \li EGET_TREEVIEW_NODE_SELECT 26 */ 27 class IGUITreeViewNode : public IReferenceCounted 28 { 29 public: 30 //! returns the owner (tree view) of this node 31 virtual IGUITreeView* getOwner() const = 0; 32 33 //! Returns the parent node of this node. 34 /** For the root node this will return 0. */ 35 virtual IGUITreeViewNode* getParent() const = 0; 36 37 //! returns the text of the node 38 virtual const wchar_t* getText() const = 0; 39 40 //! sets the text of the node 41 virtual void setText( const wchar_t* text ) = 0; 42 43 //! returns the icon text of the node 44 virtual const wchar_t* getIcon() const = 0; 45 46 //! sets the icon text of the node 47 virtual void setIcon( const wchar_t* icon ) = 0; 48 49 //! returns the image index of the node 50 virtual u32 getImageIndex() const = 0; 51 52 //! sets the image index of the node 53 virtual void setImageIndex( u32 imageIndex ) = 0; 54 55 //! returns the image index of the node 56 virtual u32 getSelectedImageIndex() const = 0; 57 58 //! sets the image index of the node 59 virtual void setSelectedImageIndex( u32 imageIndex ) = 0; 60 61 //! returns the user data (void*) of this node 62 virtual void* getData() const = 0; 63 64 //! sets the user data (void*) of this node 65 virtual void setData( void* data ) = 0; 66 67 //! returns the user data2 (IReferenceCounted) of this node 68 virtual IReferenceCounted* getData2() const = 0; 69 70 //! sets the user data2 (IReferenceCounted) of this node 71 virtual void setData2( IReferenceCounted* data ) = 0; 72 73 //! returns the child item count 74 virtual u32 getChildCount() const = 0; 75 76 //! removes all children (recursive) from this node 77 virtual void clearChildren() = 0; 78 79 //! removes all children (recursive) from this node 80 /** \deprecated Deprecated in 1.8, use clearChildren() instead. 81 This method may be removed by Irrlicht 1.9 */ clearChilds()82 _IRR_DEPRECATED_ void clearChilds() 83 { 84 return clearChildren(); 85 } 86 87 //! returns true if this node has child nodes 88 virtual bool hasChildren() const = 0; 89 90 //! returns true if this node has child nodes 91 /** \deprecated Deprecated in 1.8, use hasChildren() instead. 92 This method may be removed by Irrlicht 1.9 */ hasChilds()93 _IRR_DEPRECATED_ bool hasChilds() const 94 { 95 return hasChildren(); 96 } 97 98 //! Adds a new node behind the last child node. 99 /** \param text text of the new node 100 \param icon icon text of the new node 101 \param imageIndex index of the image for the new node (-1 = none) 102 \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) 103 \param data user data (void*) of the new node 104 \param data2 user data2 (IReferenceCounted*) of the new node 105 \return The new node 106 */ 107 virtual IGUITreeViewNode* addChildBack( 108 const wchar_t* text, const wchar_t* icon = 0, 109 s32 imageIndex=-1, s32 selectedImageIndex=-1, 110 void* data=0, IReferenceCounted* data2=0) =0; 111 112 //! Adds a new node before the first child node. 113 /** \param text text of the new node 114 \param icon icon text of the new node 115 \param imageIndex index of the image for the new node (-1 = none) 116 \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) 117 \param data user data (void*) of the new node 118 \param data2 user data2 (IReferenceCounted*) of the new node 119 \return The new node 120 */ 121 virtual IGUITreeViewNode* addChildFront( 122 const wchar_t* text, const wchar_t* icon = 0, 123 s32 imageIndex=-1, s32 selectedImageIndex=-1, 124 void* data=0, IReferenceCounted* data2=0 ) =0; 125 126 //! Adds a new node behind the other node. 127 /** The other node has also te be a child node from this node. 128 \param other Node to insert after 129 \param text text of the new node 130 \param icon icon text of the new node 131 \param imageIndex index of the image for the new node (-1 = none) 132 \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) 133 \param data user data (void*) of the new node 134 \param data2 user data2 (IReferenceCounted*) of the new node 135 \return The new node or 0 if other is no child node from this 136 */ 137 virtual IGUITreeViewNode* insertChildAfter( 138 IGUITreeViewNode* other, 139 const wchar_t* text, const wchar_t* icon = 0, 140 s32 imageIndex=-1, s32 selectedImageIndex=-1, 141 void* data=0, IReferenceCounted* data2=0) =0; 142 143 //! Adds a new node before the other node. 144 /** The other node has also te be a child node from this node. 145 \param other Node to insert before 146 \param text text of the new node 147 \param icon icon text of the new node 148 \param imageIndex index of the image for the new node (-1 = none) 149 \param selectedImageIndex index of the selected image for the new node (-1 = same as imageIndex) 150 \param data user data (void*) of the new node 151 \param data2 user data2 (IReferenceCounted*) of the new node 152 \return The new node or 0 if other is no child node from this 153 */ 154 virtual IGUITreeViewNode* insertChildBefore( 155 IGUITreeViewNode* other, 156 const wchar_t* text, const wchar_t* icon = 0, 157 s32 imageIndex=-1, s32 selectedImageIndex=-1, 158 void* data=0, IReferenceCounted* data2=0) = 0; 159 160 //! Return the first child node from this node. 161 /** \return The first child node or 0 if this node has no children. */ 162 virtual IGUITreeViewNode* getFirstChild() const = 0; 163 164 //! Return the last child node from this node. 165 /** \return The last child node or 0 if this node has no children. */ 166 virtual IGUITreeViewNode* getLastChild() const = 0; 167 168 //! Returns the previous sibling node from this node. 169 /** \return The previous sibling node from this node or 0 if this is 170 the first node from the parent node. 171 */ 172 virtual IGUITreeViewNode* getPrevSibling() const = 0; 173 174 //! Returns the next sibling node from this node. 175 /** \return The next sibling node from this node or 0 if this is 176 the last node from the parent node. 177 */ 178 virtual IGUITreeViewNode* getNextSibling() const = 0; 179 180 //! Returns the next visible (expanded, may be out of scrolling) node from this node. 181 /** \return The next visible node from this node or 0 if this is 182 the last visible node. */ 183 virtual IGUITreeViewNode* getNextVisible() const = 0; 184 185 //! Deletes a child node. 186 /** \return Returns true if the node was found as a child and is deleted. */ 187 virtual bool deleteChild( IGUITreeViewNode* child ) = 0; 188 189 //! Moves a child node one position up. 190 /** \return True if the node was found as achild node and was not already the first child. */ 191 virtual bool moveChildUp( IGUITreeViewNode* child ) = 0; 192 193 //! Moves a child node one position down. 194 /** \return True if the node was found as achild node and was not already the last child. */ 195 virtual bool moveChildDown( IGUITreeViewNode* child ) = 0; 196 197 //! Returns true if the node is expanded (children are visible). 198 virtual bool getExpanded() const = 0; 199 200 //! Sets if the node is expanded. 201 virtual void setExpanded( bool expanded ) = 0; 202 203 //! Returns true if the node is currently selected. 204 virtual bool getSelected() const = 0; 205 206 //! Sets this node as selected. 207 virtual void setSelected( bool selected ) = 0; 208 209 //! Returns true if this node is the root node. 210 virtual bool isRoot() const = 0; 211 212 //! Returns the level of this node. 213 /** The root node has level 0. Direct children of the root has level 1 ... */ 214 virtual s32 getLevel() const = 0; 215 216 //! Returns true if this node is visible (all parents are expanded). 217 virtual bool isVisible() const = 0; 218 }; 219 220 221 //! Default tree view GUI element. 222 /** Displays a windows like tree buttons to expand/collaps the child 223 nodes of an node and optional tree lines. Each node consits of an 224 text, an icon text and a void pointer for user data. */ 225 class IGUITreeView : public IGUIElement 226 { 227 public: 228 //! constructor IGUITreeView(IGUIEnvironment * environment,IGUIElement * parent,s32 id,core::rect<s32> rectangle)229 IGUITreeView(IGUIEnvironment* environment, IGUIElement* parent, 230 s32 id, core::rect<s32> rectangle) 231 : IGUIElement( EGUIET_TREE_VIEW, environment, parent, id, rectangle ) {} 232 233 //! returns the root node (not visible) from the tree. 234 virtual IGUITreeViewNode* getRoot() const = 0; 235 236 //! returns the selected node of the tree or 0 if none is selected 237 virtual IGUITreeViewNode* getSelected() const = 0; 238 239 //! returns true if the tree lines are visible 240 virtual bool getLinesVisible() const = 0; 241 242 //! sets if the tree lines are visible 243 /** \param visible true for visible, false for invisible */ 244 virtual void setLinesVisible( bool visible ) = 0; 245 246 //! Sets the font which should be used as icon font. 247 /** This font is set to the Irrlicht engine built-in-font by 248 default. Icons can be displayed in front of every list item. 249 An icon is a string, displayed with the icon font. When using 250 the build-in-font of the Irrlicht engine as icon font, the icon 251 strings defined in GUIIcons.h can be used. 252 */ 253 virtual void setIconFont( IGUIFont* font ) = 0; 254 255 //! Sets the image list which should be used for the image and selected image of every node. 256 /** The default is 0 (no images). */ 257 virtual void setImageList( IGUIImageList* imageList ) = 0; 258 259 //! Returns the image list which is used for the nodes. 260 virtual IGUIImageList* getImageList() const = 0; 261 262 //! Sets if the image is left of the icon. Default is true. 263 virtual void setImageLeftOfIcon( bool bLeftOf ) = 0; 264 265 //! Returns if the Image is left of the icon. Default is true. 266 virtual bool getImageLeftOfIcon() const = 0; 267 268 //! Returns the node which is associated to the last event. 269 /** This pointer is only valid inside the OnEvent call! */ 270 virtual IGUITreeViewNode* getLastEventNode() const = 0; 271 }; 272 273 274 } // end namespace gui 275 } // end namespace irr 276 277 #endif 278 279