From 88b507b169006d842903dd01e55ca1c484c5f5e7 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Fri, 13 Jul 2018 13:16:53 +0200 Subject: [PATCH] ui: Don't show children with type use edges if parent is active by default --- src/lib/component/controller/GraphController.cpp | 7 +++++++ src/lib/data/graph/Node.cpp | 12 ++++++++++++ src/lib/data/graph/Node.h | 1 + 3 files changed, 20 insertions(+) diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 8254b0e4..f4480a16 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -790,6 +790,13 @@ bool GraphController::setActive(const std::vector& activeTokenIds, bool show edge->visible = true; from->connected = true; to->connected = true; + + // Don't show children of active node with a type use edge to the parent + if (to->active && edge->data->isType(Edge::EDGE_TYPE_USAGE) && to->data->isParentOf(from->data)) + { + from->connected = false; + to->connected = false; + } } else { diff --git a/src/lib/data/graph/Node.cpp b/src/lib/data/graph/Node.cpp index 1857cc95..4791a76e 100644 --- a/src/lib/data/graph/Node.cpp +++ b/src/lib/data/graph/Node.cpp @@ -143,6 +143,18 @@ Edge* Node::getMemberEdge() const ); } +bool Node::isParentOf(const Node* node) const +{ + while ((node = node->getParentNode())) + { + if (node == this) + { + return true; + } + } + return false; +} + Edge* Node::findEdge(std::function func) const { auto it = find_if(m_edges.begin(), m_edges.end(), diff --git a/src/lib/data/graph/Node.h b/src/lib/data/graph/Node.h index 08600017..7c1ce156 100644 --- a/src/lib/data/graph/Node.h +++ b/src/lib/data/graph/Node.h @@ -43,6 +43,7 @@ public: Node* getParentNode() const; Node* getLastParentNode(); Edge* getMemberEdge() const; + bool isParentOf(const Node* node) const; Edge* findEdge(std::function func) const; Edge* findEdgeOfType(Edge::TypeMask mask) const;