Polygon Crucher SDK - Documentation
Documentation
Loading...
Searching...
No Matches
Tree.h
1#if !defined(AFX_TREE_H__BBD70483_77F5_11D3_A029_9012FE27D07B__INCLUDED_)
2#define AFX_TREE_H__BBD70483_77F5_11D3_A029_9012FE27D07B__INCLUDED_
3
4#ifdef _MSC_VER
5#pragma once
6#endif // _MSC_VER
7// Tree.h : header file
8//
9/////////////////////////////////////////////////////////////////////////////
10// CTree window
11#include "CustomData.h"
12#include "CustomData.h"
13#include "XStdLib.h"
14
15BEGIN_MOOTOOLS_NAMESPACE
16
17typedef enum
18{
19 TRAVERSAL_FINISH = 0,
20 TRAVERSAL_NODE_INFO,
21 TRAVERSAL_GOTO_PARENT_NODE,
22 TRAVERSAL_NODE_HAS_CHILD,
23} TreeTraversalInfo;
24
25typedef enum
26{
27 TREE_SERIALIZE_END_OF_LEVEL = 0,
28 TREE_SERIALIZE_CHILD_NODE = 1,
29 TREE_SERIALIZE_NO_CHILD,
30 TREE_SERIALIZE_ITEM,
31 TREE_SERIALIZE_ROOT,
32} TreeSerializeInfo;
33
34typedef enum
35{
36 TRAVERSAL_CHILDS = 1,
37 TRAVERSAL_CHILDS_AND_ITSELF,
38 TRAVERSAL_DIRECT_CHILD,
39 TRAVERSAL_FROM_NODE_TO_NODE,
40} TreeTraversalMode;
41
42class CTree;
43
44typedef enum
45{
46 TREE_NODE_NONE = 0x00,
47 TREE_NODE_EXPANDED = 0x01,
48} TreeNodeFlag;
49
50#define TREE_NODE_VERSION 3
51#define CTREE_VERSION 2
52
53class DLL_TOOLSFUNCTION CTreeNode : public CXObject
54{
55 DECLARE_SERIAL_XOBJECT(CTreeNode);
56
57 template<typename CTreeNode> friend void xDestroy(CTreeNode *);
58 friend CTree;
59
60private:
61 CTreeNode *child;
62 CTreeNode *parent;
63 CTreeNode *left;
64 CTreeNode *right;
65 unsigned int flags;
66
67protected:
68 virtual ~CTreeNode();
69
70public:
71 CTreeNode();
72
73 virtual bool DeleteNode();
74
75 void SetFlag(TreeNodeFlag flag, bool set);
76 unsigned int GetFlags();
77
78 inline const CTreeNode* GetChild() const { return child; };
79 inline const CTreeNode* GetParent() const { return parent; };
80 inline const CTreeNode* GetLeft() const { return left; };
81 inline const CTreeNode* GetRight() const { return right; };
82 inline CTreeNode* GetChild() { return child; };
83 inline CTreeNode* GetParent() { return parent; };
84 inline CTreeNode* GetLeft() { return left; };
85 inline CTreeNode* GetRight() { return right; };
86
87 inline void SetChild(CTreeNode *node) { child = node; };
88 inline void SetParent(CTreeNode* node) { parent = node; };
89 inline void SetLeft(CTreeNode* node) { left = node; };
90 inline void SetRight(CTreeNode* node) { right = node; };
91
92 // No data in the default node. Always ==
93
94 virtual CXString GetDisplayName() const {return CXString();};
95 virtual CTreeNode *CopyFrom(unsigned int flags = 0) const; // flags give more control on the copy. It can be defined by the derived class if needed
96 virtual bool operator==(const CTreeNode& node);
97 virtual void Serialize(CXArchive& ar);
98};
99
100class DLL_TOOLSFUNCTION TreeTraversalCallback
101{
102 protected:
103 CTree *tree;
104 CTreeNode *find;
105
106 public:
108 {
109 this->tree = reftree;
110 find = NULL;
111 }
112
113 virtual ~TreeTraversalCallback()
114 {
115 }
116
117 CTreeNode *GetFind()
118 {
119 return find;
120 }
121
122 void SetFind(CTreeNode *node)
123 {
124 find = node;
125 }
126
127 // return true to continue, false otherwise...
128 virtual bool NodeInformation(CTreeNode *node, TreeTraversalInfo info) = 0;
129};
130
131class CCustomTree;
132class DLL_TOOLSFUNCTION CTree : public CXObject
133{
134 friend CCustomTree;
135
136// Construction
137public:
138 DECLARE_SERIAL_XOBJECT(CTree);
139
140 CTree();
141 virtual ~CTree();
142
143 CTreeNode *GetRoot() const;
144 bool IsEmpty() const;
145
146 static CTreeNode *GetParent(const CTreeNode *node);
147 static const CTreeNode *GetConstParent(const CTreeNode *node);
148 static CTreeNode *GetChild(const CTreeNode *node);
149 static const CTreeNode *GetConstChild(const CTreeNode *node);
150 static CTreeNode *GetRight(const CTreeNode *node);
151 static const CTreeNode *GetConstRight(const CTreeNode *node);
152 static CTreeNode *GetLeft(const CTreeNode *node);
153 static const CTreeNode *GetConstLeft(const CTreeNode *node);
154 static int GetDepth(const CTreeNode *node);
155
156 CTreeNode *GetFirstNode(const CTreeNode *node) const;
157 CTreeNode *GetNextNode(const CTreeNode *node, const CTreeNode *stopNode = NULL) const;
158 CTreeNode *HasCommonParent(const CTreeNode *refnode, const CTreeNode *checknode) const; // Look if refnode direct parent can be found in checknode parent branch, if so, return refnode->parent, otherwise null
159
160 void SetRoot(CTreeNode *node);
161 void AddChild(CTreeNode *parentNode, CTreeNode *newnode, bool last = true);
162 void MoveRight(CTreeNode *parentNode, CTreeNode *newnode);
163 bool ReplaceNode(CTreeNode *newnode, CTreeNode *oldnode, bool deleteIt = true); // Replace oldnode with newnode, meaning that newnode is attached to oldnode parent and childs. old node become alone.
164 CTreeNode *RemoveNode(CTreeNode *node); // Remove a node without deleting it
165 CTreeNode *DeleteNode(CTreeNode *node, CXArray<CTreeNode *> *deletedNodes = NULL); // Remove and delete a node
166 void DeleteAll(bool deleteRoot = false, CXArray<CTreeNode*>* deletedNodes = NULL);
167
168 int GetChildNbr(const CTreeNode *node, bool directChild) const;
169
170 virtual void Sort(CTreeNode *node, XQSORT_PROTO compareCallback, void *compareData = NULL, bool sortDirectChildOnly = false);
171 void DoTraversal(CTreeNode *node, TreeTraversalMode mode, TreeTraversalCallback *callback);
172
173 CTreeNode* NodeExist(TreeTraversalMode mode, CTreeNode* where, CTreeNode* what, bool searchOnlyPtr = false); // if searchOnlyPtr = false, we use the == operator of the nodes. NodeExists can be resume to a find operation. Otherwise we look only for the same pointer.
174
175 void SetSilent(bool silent) { silentSerialization = silent; }
176 virtual void Serialize(CXArchive& ar);
177
178// Attributes
179protected:
180 void DeleteChilds(CTreeNode *node, CXArray<CTreeNode*>* deletedNodes = NULL);
181 void CopyChilds(CTreeNode *node, CTreeNode *copyNode, unsigned int flags = 0);
182
183 void NodeSerialize(CTreeNode *parentnode, CXArchive& ar);
184 void MoveNode(CTreeNode *node, CTreeNode *newParent);
185 CTreeNode *CopyBranch(CTreeNode *srcNode, CTreeNode *newParent, bool copyChilds, unsigned int flags = 0);
186 CTreeNode *CopyNode(const CTreeNode *srcNode, CTreeNode *newParent, bool copyChilds, unsigned int flags = 0);
187
188 // Overrides
189 // ClassWizard generated virtual function overrides
190 //{{AFX_VIRTUAL(CTree)
191 //}}AFX_VIRTUAL
192
193 // Generated message map functions
194protected:
195 bool silentSerialization;
196 CTreeNode *root;
197};
198
199END_MOOTOOLS_NAMESPACE
200
201#endif // !defined(AFX_TREE_H__BBD70483_77F5_11D3_A029_9012FE27D07B__INCLUDED_)
CCustomData class is a handly class for storing any kind of data.
CXTString< TCHAR > CXString
CXString depend on the target OS. Could be CXStringW (Windows) or CXStringA (Linux / Macos)
Definition XString.h:118
The class defines an x, y, z 3D point which can use int, float or double.
Definition 3DPoint.h:27
Definition Tree.h:133
Definition Tree.h:54
Definition XArchive.h:17
Definition Tree.h:101