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);