From b088ca6adf76d9decff0ca10e4ced5669e24f3bf Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Tue, 12 Apr 2016 13:39:42 +0200 Subject: [PATCH] logic: show subnamespaces as nodes instead of their children --- src/lib/data/HierarchyCache.cpp | 21 +++++++++++++++++++++ src/lib/data/HierarchyCache.h | 2 ++ src/lib/data/Storage.cpp | 2 +- 3 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/lib/data/HierarchyCache.cpp b/src/lib/data/HierarchyCache.cpp index 28ec422d..649c141f 100644 --- a/src/lib/data/HierarchyCache.cpp +++ b/src/lib/data/HierarchyCache.cpp @@ -43,6 +43,14 @@ const std::vector& HierarchyCache::HierarchyNode return m_children; } +void HierarchyCache::HierarchyNode::addChildIds(std::vector* nodeIds) const +{ + for (const HierarchyNode* child : m_children) + { + nodeIds->push_back(child->getNodeId()); + } +} + void HierarchyCache::HierarchyNode::addChildIdsRecursive(std::vector* nodeIds, std::vector* edgeIds) const { for (const HierarchyNode* child : m_children) @@ -122,6 +130,19 @@ void HierarchyCache::addAllChildIdsForNodeId(Id nodeId, std::vector* nodeIds } } +void HierarchyCache::addFirstChildIdsForNodeId(Id nodeId, std::vector* nodeIds) const +{ + HierarchyNode* node = getNode(nodeId); + if (node) + { + node->addChildIds(nodeIds); + } + else + { + nodeIds->push_back(nodeId); + } +} + void HierarchyCache::addFirstVisibleChildIdsForNodeId(Id nodeId, std::vector* nodeIds) const { HierarchyNode* node = getNode(nodeId); diff --git a/src/lib/data/HierarchyCache.h b/src/lib/data/HierarchyCache.h index 81c60959..76a2ad73 100644 --- a/src/lib/data/HierarchyCache.h +++ b/src/lib/data/HierarchyCache.h @@ -17,6 +17,7 @@ public: Id getLastVisibleParentNodeId(Id nodeId) const; void addAllChildIdsForNodeId(Id nodeId, std::vector* nodeIds, std::vector* edgeIds) const; + void addFirstChildIdsForNodeId(Id nodeId, std::vector* nodeIds) const; void addFirstVisibleChildIdsForNodeId(Id nodeId, std::vector* nodeIds) const; bool isChildOfVisibleNodeOrInvisible(Id nodeId) const; @@ -38,6 +39,7 @@ private: void addChild(HierarchyNode* child); const std::vector& getChildren() const; + void addChildIds(std::vector* nodeIds) const; void addChildIdsRecursive(std::vector* nodeIds, std::vector* edgeIds) const; void addVisibleNodeIdsRecursive(std::vector* nodeIds) const; diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp index 905b5865..55e9f9fc 100644 --- a/src/lib/data/Storage.cpp +++ b/src/lib/data/Storage.cpp @@ -347,7 +347,7 @@ std::shared_ptr Storage::getGraphForActiveTokenIds(const std::vector& if (Node::intToType(node.type) == Node::NODE_NAMESPACE) { ids.clear(); - m_hierarchyCache.addFirstVisibleChildIdsForNodeId(elementId, &ids); + m_hierarchyCache.addFirstChildIdsForNodeId(elementId, &ids); isNamespace = true; }