From dd4a880ec335513a305599fff2752d38e2c483e9 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Sun, 16 Dec 2018 23:51:53 +0100 Subject: [PATCH] ui: Show overview bundles for non-indexed or symbol types if no others available --- .../component/controller/GraphController.cpp | 17 +++++++++++++++++ src/lib/data/storage/PersistentStorage.cpp | 17 ++++++++++------- .../qt/view/graphElements/QtGraphNodeBundle.cpp | 4 ++-- 3 files changed, 29 insertions(+), 9 deletions(-) diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index c51db66d..ed060619 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -1379,6 +1379,8 @@ void GraphController::bundleNodesByType() std::vector> oldNodes = std::move(m_dummyNodes); m_dummyNodes.clear(); + bool hasNonFileBundle = false; + for (const NodeType& nodeType : NodeType::getOverviewBundleNodeTypesOrdered()) { Tree bundleInfoTree = nodeType.getOverviewBundleTree(); @@ -1388,10 +1390,25 @@ void GraphController::bundleNodesByType() if (bundleNode) { m_dummyNodes.push_back(bundleNode); + + if (bundleNode->bundledNodeType.getType() != NodeType::NODE_FILE) + { + hasNonFileBundle = true; + } } } } + if (nodes.size() && !hasNonFileBundle) + { + Tree bundleInfoTree(NodeType::BundleInfo(L"Symbols")); + std::shared_ptr bundleNode = bundleByType(nodes, NodeType::NODE_SYMBOL, bundleInfoTree, false); + if (bundleNode) + { + m_dummyNodes.push_back(bundleNode); + } + } + if (nodes.size()) { LOG_ERROR("Nodes left after bundling for overview"); diff --git a/src/lib/data/storage/PersistentStorage.cpp b/src/lib/data/storage/PersistentStorage.cpp index 0e35e481..b223d157 100644 --- a/src/lib/data/storage/PersistentStorage.cpp +++ b/src/lib/data/storage/PersistentStorage.cpp @@ -920,13 +920,16 @@ std::shared_ptr PersistentStorage::getGraphForAll() const m_sqliteIndexStorage.forEach( [&](StorageNode&& node) { - auto it = m_symbolDefinitionKinds.find(node.id); - if (it != m_symbolDefinitionKinds.end() && it->second == DEFINITION_EXPLICIT && - ( - NodeType(NodeType::intToType(node.type)).isPackage() || - !m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id) - ) - ){ + bool showNode = true; + if (m_symbolDefinitionKinds.size()) + { + auto it = m_symbolDefinitionKinds.find(node.id); + showNode = (it != m_symbolDefinitionKinds.end() && it->second == DEFINITION_EXPLICIT); + } + + if (showNode && (NodeType(NodeType::intToType(node.type)).isPackage() || + !m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id))) + { tokenIds.push_back(node.id); } } diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNodeBundle.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNodeBundle.cpp index 15404b9b..326fdbc2 100644 --- a/src/lib_gui/qt/view/graphElements/QtGraphNodeBundle.cpp +++ b/src/lib_gui/qt/view/graphElements/QtGraphNodeBundle.cpp @@ -41,8 +41,8 @@ void QtGraphNodeBundle::onClick() { MessageGraphNodeBundleSplit( m_tokenId, - !m_type.isUnknownSymbol() && getName() != L"Anonymous Namespaces", // TODO: move to language package - !m_type.isUnknownSymbol() + (!m_type.isUnknownSymbol() || getName() == L"Symbols") && getName() != L"Anonymous Namespaces", // TODO: move to language package + !m_type.isUnknownSymbol() || getName() == L"Symbols" ).dispatch(); }