diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp index 4f279ba0..08460903 100644 --- a/src/lib/component/controller/GraphController.cpp +++ b/src/lib/component/controller/GraphController.cpp @@ -1205,8 +1205,8 @@ std::shared_ptr GraphController::bundleNodesMatching( } std::shared_ptr GraphController::bundleByType( - std::list>& nodes, - const NodeType& type, + std::list>& nodes, + const NodeType& type, const Tree& bundleInfoTree, const bool considerInvisibleNodes) { @@ -1214,10 +1214,10 @@ std::shared_ptr GraphController::bundleByType( nodes, [&](const DummyNode* node) { - return - (considerInvisibleNodes || node->visible) && - node->isGraphNode() && - node->data->getType() == type && + return + (considerInvisibleNodes || node->visible) && + node->isGraphNode() && + node->data->getType() == type && bundleInfoTree.data.nameMatcher(node->name); }, bundleInfoTree.data.bundleName @@ -1272,11 +1272,12 @@ void GraphController::bundleNodesByType() nodes.push_back(oldNodes[i]); } - for (const NodeType& nodeType : NodeTypeSet::all().getNodeTypes()) + for (const NodeType& nodeType : NodeType::getOverviewBundleNodeTypesOrdered()) { - if (nodeType.hasOverviewBundle()) + Tree bundleInfoTree = nodeType.getOverviewBundleTree(); + if (bundleInfoTree.data.isValid()) { - std::shared_ptr bundleNode = bundleByType(nodes, nodeType, nodeType.getOverviewBundleTree()); + std::shared_ptr bundleNode = bundleByType(nodes, nodeType, bundleInfoTree); if (bundleNode) { m_dummyNodes.push_back(bundleNode); diff --git a/src/lib/component/controller/GraphController.h b/src/lib/component/controller/GraphController.h index 7f299222..fa31e15b 100644 --- a/src/lib/component/controller/GraphController.h +++ b/src/lib/component/controller/GraphController.h @@ -98,8 +98,8 @@ private: std::shared_ptr bundleNodesMatching( std::list>& nodes, std::function matcher, const std::string& name); std::shared_ptr bundleByType( - std::list>& nodes, - const NodeType& type, + std::list>& nodes, + const NodeType& type, const Tree& bundleInfoTree, const bool considerInvisibleNodes = false); void bundleNodesByType(); diff --git a/src/lib/data/NodeType.cpp b/src/lib/data/NodeType.cpp index c9f41525..d58c27b4 100644 --- a/src/lib/data/NodeType.cpp +++ b/src/lib/data/NodeType.cpp @@ -3,6 +3,25 @@ #include "utility/ResourcePaths.h" #include "utility/utilityString.h" +std::vector NodeType::getOverviewBundleNodeTypesOrdered() +{ + return { + NodeType(NodeType::NODE_FILE), + NodeType(NodeType::NODE_MACRO), + NodeType(NodeType::NODE_NAMESPACE), + NodeType(NodeType::NODE_PACKAGE), + NodeType(NodeType::NODE_CLASS), + NodeType(NodeType::NODE_INTERFACE), + NodeType(NodeType::NODE_STRUCT), + NodeType(NodeType::NODE_FUNCTION), + NodeType(NodeType::NODE_GLOBAL_VARIABLE), + NodeType(NodeType::NODE_TYPE), + NodeType(NodeType::NODE_TYPEDEF), + NodeType(NodeType::NODE_ENUM), + NodeType(NodeType::NODE_UNION), + }; +} + NodeType::NodeType(Type type) : m_type(type) { @@ -161,36 +180,42 @@ Tree NodeType::getOverviewBundleTree() const { switch (m_type) { - case NodeType::NODE_FILE: - return Tree(BundleInfo([](const std::string&) { return true; }, "Files")); - case NodeType::NODE_MACRO: - return Tree(BundleInfo([](const std::string&) { return true; }, "Macros")); - case NodeType::NODE_NAMESPACE: + case NodeType::NODE_FILE: + return Tree(BundleInfo("Files")); + case NodeType::NODE_MACRO: + return Tree(BundleInfo("Macros")); + case NodeType::NODE_NAMESPACE: { - Tree tree(BundleInfo([](const std::string&) { return true; }, "Namespaces")); - tree.children.push_back(Tree(BundleInfo([](const std::string& nodeName) { return nodeName.find("anonymous namespace") != std::string::npos; }, "Anonymous Namespaces"))); + Tree tree(BundleInfo("Namespaces")); + tree.children.push_back(Tree(BundleInfo( + [](const std::string& nodeName) + { + return nodeName.find("anonymous namespace") != std::string::npos; + }, + "Anonymous Namespaces") + )); return tree; } - case NodeType::NODE_PACKAGE: - return Tree(BundleInfo([](const std::string&) { return true; }, "Packages")); - case NodeType::NODE_CLASS: - return Tree(BundleInfo([](const std::string&) { return true; }, "Classes")); - case NodeType::NODE_INTERFACE: - return Tree(BundleInfo([](const std::string&) { return true; }, "Interfaces")); - case NodeType::NODE_STRUCT: - return Tree(BundleInfo([](const std::string&) { return true; }, "Structs")); - case NodeType::NODE_FUNCTION: - return Tree(BundleInfo([](const std::string&) { return true; }, "Functions")); - case NodeType::NODE_GLOBAL_VARIABLE: - return Tree(BundleInfo([](const std::string&) { return true; }, "Global Variables")); - case NodeType::NODE_TYPE: - return Tree(BundleInfo([](const std::string&) { return true; }, "Types")); - case NodeType::NODE_TYPEDEF: - return Tree(BundleInfo([](const std::string&) { return true; }, "Typedefs")); - case NodeType::NODE_ENUM: - return Tree(BundleInfo([](const std::string&) { return true; }, "Enums")); - case NodeType::NODE_UNION: - return Tree(BundleInfo([](const std::string&) { return true; }, "Unions")); + case NodeType::NODE_PACKAGE: + return Tree(BundleInfo("Packages")); + case NodeType::NODE_CLASS: + return Tree(BundleInfo("Classes")); + case NodeType::NODE_INTERFACE: + return Tree(BundleInfo("Interfaces")); + case NodeType::NODE_STRUCT: + return Tree(BundleInfo("Structs")); + case NodeType::NODE_FUNCTION: + return Tree(BundleInfo("Functions")); + case NodeType::NODE_GLOBAL_VARIABLE: + return Tree(BundleInfo("Global Variables")); + case NodeType::NODE_TYPE: + return Tree(BundleInfo("Types")); + case NodeType::NODE_TYPEDEF: + return Tree(BundleInfo("Typedefs")); + case NodeType::NODE_ENUM: + return Tree(BundleInfo("Enums")); + case NodeType::NODE_UNION: + return Tree(BundleInfo("Unions")); default: break; } @@ -268,7 +293,7 @@ NodeType::StyleType NodeType::getNodeStyle() const bool NodeType::hasOverviewBundle() const { - return !getOverviewBundleTree().data.bundleName.empty(); + return !getOverviewBundleTree().data.isValid(); } std::string NodeType::getUnderscoredTypeString() const @@ -394,4 +419,4 @@ NodeType::Type utility::getTypeForReadableTypeString(const std::string str) } return NodeType::NODE_SYMBOL; -} \ No newline at end of file +} diff --git a/src/lib/data/NodeType.h b/src/lib/data/NodeType.h index 20d33ab8..7fecb2a8 100644 --- a/src/lib/data/NodeType.h +++ b/src/lib/data/NodeType.h @@ -53,17 +53,29 @@ public: struct BundleInfo { BundleInfo() - : nameMatcher(nullptr) - , bundleName("") {} + + BundleInfo(std::string bundleName) + : nameMatcher([](const std::string&) { return true; }) + , bundleName(bundleName) + {} + BundleInfo(std::function nameMatcher, std::string bundleName) : nameMatcher(nameMatcher) , bundleName(bundleName) {} - std::function nameMatcher; + + bool isValid() const + { + return bundleName.size() > 0; + } + + std::function nameMatcher = nullptr; std::string bundleName; }; + static std::vector getOverviewBundleNodeTypesOrdered(); + NodeType(Type type); bool operator==(const NodeType& o) const;