ui: Fixed undoing after single edge activation within aggregation showed missing edges
This commit is contained in:
@@ -98,6 +98,11 @@ void GraphController::handleMessage(MessageActivateTokens* message)
|
||||
if (message->isEdge || message->keepContent())
|
||||
{
|
||||
m_activeEdgeIds = message->tokenIds;
|
||||
if (message->isAggregation) // only on redo
|
||||
{
|
||||
m_activeEdgeIds.clear();
|
||||
}
|
||||
|
||||
setActiveAndVisibility(utility::concat(m_activeNodeIds, m_activeEdgeIds));
|
||||
|
||||
if (message->isReplayed())
|
||||
@@ -181,6 +186,11 @@ void GraphController::handleMessage(MessageActivateTokens* message)
|
||||
}
|
||||
|
||||
m_useBezierEdges = !isInheritanceChain;
|
||||
|
||||
for (const std::shared_ptr<DummyEdge>& edge : m_dummyEdges)
|
||||
{
|
||||
edge->active = false;
|
||||
}
|
||||
}
|
||||
|
||||
groupNodesByParents(getView()->getGrouping());
|
||||
@@ -817,16 +827,20 @@ bool GraphController::setActive(const std::vector<Id>& activeTokenIds, bool show
|
||||
{
|
||||
TRACE();
|
||||
|
||||
bool noActive = activeTokenIds.size() == 0;
|
||||
bool noActive = !activeTokenIds.size();
|
||||
if (activeTokenIds.size() > 0)
|
||||
{
|
||||
noActive = true;
|
||||
for (const std::shared_ptr<DummyNode>& node : m_dummyNodes)
|
||||
{
|
||||
setNodeActiveRecursive(node.get(), activeTokenIds, &noActive);
|
||||
if (setNodeActiveRecursive(node.get(), activeTokenIds))
|
||||
{
|
||||
noActive = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
bool noActiveFinal = noActive;
|
||||
for (const std::shared_ptr<DummyEdge>& edge : m_dummyEdges)
|
||||
{
|
||||
if (!edge->data)
|
||||
@@ -838,7 +852,7 @@ bool GraphController::setActive(const std::vector<Id>& activeTokenIds, bool show
|
||||
if (find(activeTokenIds.begin(), activeTokenIds.end(), edge->data->getId()) != activeTokenIds.end())
|
||||
{
|
||||
edge->active = true;
|
||||
noActive = false;
|
||||
noActiveFinal = false;
|
||||
}
|
||||
|
||||
DummyNode* from = getDummyGraphNodeById(edge->ownerId).get();
|
||||
@@ -859,7 +873,7 @@ bool GraphController::setActive(const std::vector<Id>& activeTokenIds, bool show
|
||||
}
|
||||
}
|
||||
|
||||
return noActive;
|
||||
return noActiveFinal;
|
||||
}
|
||||
|
||||
void GraphController::setVisibility(bool noActive)
|
||||
@@ -879,8 +893,9 @@ void GraphController::setActiveAndVisibility(const std::vector<Id>& activeTokenI
|
||||
setVisibility(setActive(activeTokenIds, false));
|
||||
}
|
||||
|
||||
void GraphController::setNodeActiveRecursive(DummyNode* node, const std::vector<Id>& activeTokenIds, bool* noActive) const
|
||||
bool GraphController::setNodeActiveRecursive(DummyNode* node, const std::vector<Id>& activeTokenIds) const
|
||||
{
|
||||
bool hasActive = false;
|
||||
node->active = false;
|
||||
|
||||
if (node->isGraphNode())
|
||||
@@ -889,14 +904,19 @@ void GraphController::setNodeActiveRecursive(DummyNode* node, const std::vector<
|
||||
|
||||
if (node->active)
|
||||
{
|
||||
*noActive = false;
|
||||
hasActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
for (const std::shared_ptr<DummyNode>& subNode : node->subNodes)
|
||||
{
|
||||
setNodeActiveRecursive(subNode.get(), activeTokenIds, noActive);
|
||||
if (setNodeActiveRecursive(subNode.get(), activeTokenIds))
|
||||
{
|
||||
hasActive = true;
|
||||
}
|
||||
}
|
||||
|
||||
return hasActive;
|
||||
}
|
||||
|
||||
bool GraphController::setNodeVisibilityRecursiveBottomUp(DummyNode* node, bool noActive) const
|
||||
|
||||
@@ -92,7 +92,7 @@ private:
|
||||
bool setActive(const std::vector<Id>& activeTokenIds, bool showAllEdges);
|
||||
void setVisibility(bool noActive);
|
||||
void setActiveAndVisibility(const std::vector<Id>& activeTokenIds);
|
||||
void setNodeActiveRecursive(DummyNode* node, const std::vector<Id>& activeTokenIds, bool* noActive) const;
|
||||
bool setNodeActiveRecursive(DummyNode* node, const std::vector<Id>& activeTokenIds) const;
|
||||
bool setNodeVisibilityRecursiveBottomUp(DummyNode* node, bool noActive) const;
|
||||
void setNodeVisibilityRecursiveTopDown(DummyNode* node, bool parentExpanded) const;
|
||||
|
||||
|
||||
@@ -1071,7 +1071,7 @@ QtGraphEdge* QtGraphView::createEdge(
|
||||
if (owner != nullptr && target != nullptr)
|
||||
{
|
||||
QtGraphEdge* qtEdge = new QtGraphEdge(
|
||||
owner, target, edge->data, edge->getWeight(), edge->active && !useBezier, interactive, edge->layoutHorizontal,
|
||||
owner, target, edge->data, edge->getWeight(), edge->active, interactive, edge->layoutHorizontal,
|
||||
edge->getDirection());
|
||||
|
||||
if (trailMode != Graph::TRAIL_NONE)
|
||||
|
||||
Reference in New Issue
Block a user