ui: Count by connected sub node for non-indexed bundles

This commit is contained in:
Eberhard Graether
2017-02-14 10:45:56 +01:00
parent 1520b8bfbf
commit bd17bd3573
2 changed files with 28 additions and 3 deletions
@@ -761,6 +761,7 @@ void GraphController::bundleNodes()
return data->isType(Node::NODE_FILE); return data->isType(Node::NODE_FILE);
}, },
1, 1,
false,
"Importing Files" "Importing Files"
); );
} }
@@ -771,6 +772,7 @@ void GraphController::bundleNodes()
return !info.isDefined && info.isReferencing && !info.layoutVertical; return !info.isDefined && info.isReferencing && !info.layoutVertical;
}, },
2, 2,
true,
"Non-indexed Symbols" "Non-indexed Symbols"
); );
@@ -780,6 +782,7 @@ void GraphController::bundleNodes()
return !info.isDefined && info.isReferenced && !info.layoutVertical; return !info.isDefined && info.isReferenced && !info.layoutVertical;
}, },
2, 2,
true,
"Non-indexed Symbols" "Non-indexed Symbols"
); );
@@ -789,6 +792,7 @@ void GraphController::bundleNodes()
return info.isDefined && info.isReferenced && data->isType(Node::NODE_BUILTIN_TYPE); return info.isDefined && info.isReferenced && data->isType(Node::NODE_BUILTIN_TYPE);
}, },
3, 3,
false,
"Built-in Types" "Built-in Types"
); );
@@ -800,6 +804,7 @@ void GraphController::bundleNodes()
return info.isDefined && info.isReferencing && !info.layoutVertical; return info.isDefined && info.isReferencing && !info.layoutVertical;
}, },
10, 10,
false,
"Referencing Symbols" "Referencing Symbols"
); );
@@ -809,6 +814,7 @@ void GraphController::bundleNodes()
return info.isDefined && info.isReferenced && !info.layoutVertical; return info.isDefined && info.isReferenced && !info.layoutVertical;
}, },
10, 10,
false,
"Referenced Symbols" "Referenced Symbols"
); );
} }
@@ -819,6 +825,7 @@ void GraphController::bundleNodes()
return info.isReferencing && info.layoutVertical; return info.isReferencing && info.layoutVertical;
}, },
5, 5,
false,
"Derived Symbols" "Derived Symbols"
); );
@@ -828,14 +835,20 @@ void GraphController::bundleNodes()
return info.isReferenced && info.layoutVertical; return info.isReferenced && info.layoutVertical;
}, },
5, 5,
false,
"Base Symbols" "Base Symbols"
); );
} }
void GraphController::bundleNodesAndEdgesMatching( void GraphController::bundleNodesAndEdgesMatching(
std::function<bool(const DummyNode::BundleInfo&, const Node* data)> matcher, size_t count, const std::string& name std::function<bool(const DummyNode::BundleInfo&,
const Node* data)> matcher,
size_t count,
bool countConnectedNodes,
const std::string& name
){ ){
std::vector<size_t> matchedNodeIndices; std::vector<size_t> matchedNodeIndices;
size_t connectedNodeCount = 0;
for (size_t i = 0; i < m_dummyNodes.size(); i++) for (size_t i = 0; i < m_dummyNodes.size(); i++)
{ {
const DummyNode* node = m_dummyNodes[i].get(); const DummyNode* node = m_dummyNodes[i].get();
@@ -847,10 +860,16 @@ void GraphController::bundleNodesAndEdgesMatching(
if (matcher(node->bundleInfo, node->data)) if (matcher(node->bundleInfo, node->data))
{ {
matchedNodeIndices.push_back(i); matchedNodeIndices.push_back(i);
if (countConnectedNodes)
{
connectedNodeCount += node->getConnectedSubNodes().size();
}
} }
} }
if (!matchedNodeIndices.size() || matchedNodeIndices.size() < count || matchedNodeIndices.size() == m_dummyNodes.size()) size_t matchedNodeCount = countConnectedNodes ? connectedNodeCount : matchedNodeIndices.size();
if (!matchedNodeIndices.size() || matchedNodeCount < count || matchedNodeIndices.size() == m_dummyNodes.size())
{ {
return; return;
} }
@@ -870,6 +889,11 @@ void GraphController::bundleNodesAndEdgesMatching(
m_dummyNodes.erase(m_dummyNodes.begin() + matchedNodeIndices[i]); m_dummyNodes.erase(m_dummyNodes.begin() + matchedNodeIndices[i]);
} }
if (countConnectedNodes)
{
bundleNode->bundledNodeCount = connectedNodeCount;
}
DummyNode* firstNode = bundleNode->bundledNodes.begin()->get(); DummyNode* firstNode = bundleNode->bundledNodes.begin()->get();
// Use token Id of first node and make first bit 1 // Use token Id of first node and make first bit 1
@@ -84,7 +84,8 @@ private:
void bundleNodes(); void bundleNodes();
void bundleNodesAndEdgesMatching( void bundleNodesAndEdgesMatching(
std::function<bool(const DummyNode::BundleInfo&, const Node*)> matcher, size_t count, const std::string& name); std::function<bool(const DummyNode::BundleInfo&, const Node*)> matcher, size_t count, bool countConnectedNodes,
const std::string& name);
std::shared_ptr<DummyNode> bundleNodesMatching( std::shared_ptr<DummyNode> bundleNodesMatching(
std::list<std::shared_ptr<DummyNode>>& nodes, std::function<bool(const DummyNode*)> matcher, const std::string& name); std::list<std::shared_ptr<DummyNode>>& nodes, std::function<bool(const DummyNode*)> matcher, const std::string& name);
void bundleByType(std::list<std::shared_ptr<DummyNode>>& nodes, Node::NodeType type, const std::string& name); void bundleByType(std::list<std::shared_ptr<DummyNode>>& nodes, Node::NodeType type, const std::string& name);