ui: Fixed nested layout broken after relayout for maximum access node width

This commit is contained in:
Eberhard Graether
2019-10-21 17:04:23 +02:00
parent 0d8e992bdf
commit c5d94fbd08
2 changed files with 36 additions and 33 deletions
@@ -1860,7 +1860,7 @@ void GraphController::layoutNesting()
for (const std::shared_ptr<DummyNode>& node : m_dummyNodes) for (const std::shared_ptr<DummyNode>& node : m_dummyNodes)
{ {
layoutNestingRecursive(node.get(), -1); layoutNestingRecursive(node.get());
} }
for (const std::shared_ptr<DummyNode>& node : m_dummyNodes) for (const std::shared_ptr<DummyNode>& node : m_dummyNodes)
@@ -1903,7 +1903,7 @@ void GraphController::extendEqualFunctionNames(const std::vector<std::shared_ptr
} }
} }
Vec4i GraphController::layoutNestingRecursive(DummyNode* node, int maxWidth) const Vec4i GraphController::layoutNestingRecursive(DummyNode* node, int relayoutAccessMaxWidth) const
{ {
if (!node->visible) if (!node->visible)
{ {
@@ -1975,43 +1975,46 @@ Vec4i GraphController::layoutNestingRecursive(DummyNode* node, int maxWidth) con
width += margins.iconWidth; width += margins.iconWidth;
width = std::max(width, margins.minWidth); width = std::max(width, margins.minWidth);
int maxAccessWidth = 0; if (relayoutAccessMaxWidth == -1)
for (const std::shared_ptr<DummyNode>& subNode : node->subNodes)
{ {
if (!subNode->visible) int maxAccessWidth = 0;
{ std::shared_ptr<const DummyNode> maxWidthAccessNode;
continue;
}
else if (subNode->isQualifierNode())
{
subNode->position.y = margins.top + margins.charHeight / 2;
width += 5;
continue;
}
Vec4i rect = layoutNestingRecursive(subNode.get(), maxWidth);
if (subNode->isExpandToggleNode())
{
width += margins.spacingX + subNode->size.x;
}
else if (subNode->isAccessNode())
{
maxAccessWidth = std::max(maxAccessWidth, rect.z());
}
}
if (maxAccessWidth > 0)
{
for (const std::shared_ptr<DummyNode>& subNode : node->subNodes) for (const std::shared_ptr<DummyNode>& subNode : node->subNodes)
{ {
if (!subNode->visible || !subNode->isAccessNode()) if (!subNode->visible)
{ {
continue; continue;
} }
else if (subNode->isQualifierNode())
{
subNode->position.y = margins.top + margins.charHeight / 2;
width += 5;
continue;
}
layoutNestingRecursive(subNode.get(), maxAccessWidth); Vec4i rect = layoutNestingRecursive(subNode.get());
if (subNode->isExpandToggleNode())
{
width += margins.spacingX + subNode->size.x;
}
else if (subNode->isAccessNode() && rect.z() > maxAccessWidth)
{
maxAccessWidth = rect.z();
maxWidthAccessNode = subNode;
}
}
if (maxAccessWidth > 0)
{
for (const std::shared_ptr<DummyNode>& subNode : node->subNodes)
{
if (subNode->visible && subNode->isAccessNode() && subNode != maxWidthAccessNode)
{
layoutNestingRecursive(subNode.get(), maxAccessWidth);
}
}
} }
} }
@@ -2053,7 +2056,7 @@ Vec4i GraphController::layoutNestingRecursive(DummyNode* node, int maxWidth) con
} }
else if (node->isAccessNode() && !node->hasConnectedSubNode()) else if (node->isAccessNode() && !node->hasConnectedSubNode())
{ {
ListLayouter::layoutSquare(&node->subNodes, maxWidth); ListLayouter::layoutSquare(&node->subNodes, relayoutAccessMaxWidth);
} }
else else
{ {
@@ -120,7 +120,7 @@ private:
void layoutNesting(); void layoutNesting();
void extendEqualFunctionNames(const std::vector<std::shared_ptr<DummyNode>>& nodes) const; void extendEqualFunctionNames(const std::vector<std::shared_ptr<DummyNode>>& nodes) const;
Vec4i layoutNestingRecursive(DummyNode* node, int maxWidth) const; Vec4i layoutNestingRecursive(DummyNode* node, int relayoutAccessMaxWidth = -1) const;
void addExpandToggleNode(DummyNode* node) const; void addExpandToggleNode(DummyNode* node) const;
void layoutToGrid(DummyNode* node) const; void layoutToGrid(DummyNode* node) const;