blob: c2d0f3d6f40a5877311a0fe4e4b2a698681f6035 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
/***************************************************************************
treenode.h - description
-------------------
begin : lun mar 17 2003
copyright : (C) 2003 by gulmini luciano
email : [email protected]
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef TREENODE_H
#define TREENODE_H
#include <qptrlist.h>
#include <qdict.h>
#include <qstringlist.h>
#include "fwglobal.h"
#include "areaattributedb.h"
/**a node in the tree
*@author gulmini luciano
*/
class treeNode {
private:
QString m_label,
m_parentLabel;
SplitType m_splitType;
QPtrList<treeNode> m_childrenList;
areaAttribute *m_atts;
public:
treeNode(const QString &l=QString::null, const QString &pl=QString::null);
~treeNode();
void addChildNode(const QString &L);
void addChildNode(treeNode *n){ m_childrenList.append(n); }
void removeChildNode(const QString &l, bool autoDelete);
void setSplitType(SplitType s) { m_splitType = s; }
void setLabel(const QString &l) { m_label = l; }
void removeChildren() { m_childrenList.clear(); }
void setParentLabel(const QString &s){ m_parentLabel = s;}
int childPosition(treeNode* n){ return m_childrenList.find(n); }
bool insertChild(unsigned int pos, treeNode* n) { return m_childrenList.insert( pos, n); }
QString label() const { return m_label; }
QString parentLabel() const { return m_parentLabel; }
SplitType splitType() const { return m_splitType; }
QPtrList<treeNode> childrenList() { return m_childrenList; }
treeNode* firstChild() { return m_childrenList.first(); }
treeNode* nextChild() { return m_childrenList.next(); }
treeNode* lastChild() { return m_childrenList.last(); }
treeNode* currentChild() { return m_childrenList.current(); }
treeNode* findChild(const QString &L);
areaAttribute* atts() { return m_atts; }
int countChildren() const { return m_childrenList.count(); }
bool hasChildren() const { return !m_childrenList.isEmpty(); }
};
class tree{
private:
treeNode *m_root;
QDict<treeNode> m_nodeList;
static int nodeId;
public:
tree();
~tree();
treeNode* root() const { return m_root; }
QString addChildNode(const QString &l);
bool insertChildNode(const QString &L);
void removeChildNode(const QString &pl,const QString &l,bool autoDelete);//parent node,child node
treeNode* findNode(const QString &L);
areaAttribute* findAreaAttribute(const QString &l){ return findNode(l)->atts(); };
void reset();
void refreshGeometries(treeNode*);
};
#endif
|