ui: Fixed nested layout broken after relayout for maximum access node width
This commit is contained in:
@@ -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;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user