38 this->size = nodeSize;
40 nodeItem =
new QGraphicsEllipseItem();
41 scene->addItem(nodeItem);
43 edgeItem =
new QGraphicsLineItem();
44 scene->addItem(edgeItem);
54 this->parent = parent;
62 childs.push_back(child);
78 calculateSubTreeSize();
81 updateLayout(positionLeftTop);
84 std::vector<TreeNodePtr>
94 TreeNode::updateLayout(QPointF leftTop)
97 if (childs.size() > 0)
100 QPointF childLeftTop = leftTop;
104 std::vector<TreeNodePtr>::iterator iter = childs.begin();
106 while (iter != childs.end())
109 (*iter)->updateLayout(childLeftTop);
112 QSize childSubTreeSize = (*iter)->getSubTreeSize();
122 if (childs.size() == 0)
135 QRectF childsBB = calculateChildsBoundingBox();
138 boundingBox = QRectF(childsBB.center().x() -
getSize().width() / 2.0f,
150 TreeNode::calculateSubTreeSize()
152 std::vector<TreeNodePtr>::iterator iter = childs.begin();
158 while (iter != childs.end())
161 QSize childSize = (*iter)->calculateSubTreeSize();
165 if (childSize.height() > height)
167 height = childSize.height();
174 if (childs.size() > 0)
187 this->subTreeSize = QSize(width, height);
193 TreeNode::calculateChildsBoundingBox()
196 float minX = FLT_MAX;
199 float minY = FLT_MAX;
202 std::vector<TreeNodePtr>::iterator iter = childs.begin();
204 while (iter != childs.end())
206 QRectF childBB = (*iter)->getBoundingBox();
208 if (childBB.left() < minX)
210 minX = childBB.left();
213 if (childBB.right() > maxX)
215 maxX = childBB.right();
218 if (childBB.top() < minY)
220 minY = childBB.top();
223 if (childBB.bottom() > maxY)
225 maxY = childBB.bottom();
231 QRectF result(minX, minY, maxX - minX, maxY - minY);
236 TreeNode::drawEdges()
238 std::vector<TreeNodePtr>::iterator iter = childs.begin();
240 while (iter != childs.end())
245 ((*iter)->getBoundingBox().topLeft() + (*iter)->getBoundingBox().topRight()) / 2.0f;
246 QLineF line(lineStart, lineEnd);
248 (*iter)->drawEdge(line);
257 edgeItem->setLine(line);
264 nodeItem->setRect(boundingBox);
std::vector< TreeNodePtr > getChildren() const
virtual void drawEdge(QLineF line)
Draws an edge to this node.
static const QSize DefaultNodeSize
virtual void drawNode(QRectF boundingBox)
Draws the node.
static const QSize DefaultNodeVerticalSeparator
static const QSize DefaultNodeHorizontalSeparator
void addChild(TreeNodePtr child)
Adds a child to the node in the tree structure.
QSize getSize()
Retrieve size of the node.
QRectF getBoundingBox()
Retrieve boundingbox of the node.
TreeNode(QGraphicsScene *scene, QSize nodeSize=TreeNode::DefaultNodeSize)
Constructs a tree node as part of a Qt visualizable tree.
void update(QPointF positionLeftTop=QPointF(0, 0))
Updates the layout of the tree.
QSize getSubTreeSize()
Retrieve size of the complete subtree where the current node is root.
This file offers overloads of toIce() and fromIce() functions for STL container types.
std::shared_ptr< TreeNode > TreeNodePtr
std::weak_ptr< TreeNode > TreeNodeWeakPtr