logic: removed namespace splitting from GraphController
Namespace splitting is now handled in active token id retrieval from the Storage, so that namespace nodes are not added to the Graph at all and complexity in the GraphController is reduced.
This commit is contained in:
@@ -95,12 +95,12 @@ void FeatureController::handleMessage(MessageActivateNodes* message)
|
||||
|
||||
void FeatureController::handleMessage(MessageActivateTokenLocations* message)
|
||||
{
|
||||
std::vector<Id> nodeIds;
|
||||
MessageActivateNodes msg;
|
||||
std::vector<Id> nodeIds = m_storageAccess->getNodeIdsForLocationIds(message->locationIds);
|
||||
nodeIds = m_storageAccess->getActiveTokenIdsForTokenIds(nodeIds);
|
||||
|
||||
for (Id locationId : message->locationIds)
|
||||
MessageActivateNodes msg;
|
||||
for (Id nodeId : nodeIds)
|
||||
{
|
||||
Id nodeId = m_storageAccess->getActiveNodeIdForLocationId(locationId);
|
||||
msg.addNode(
|
||||
nodeId,
|
||||
m_storageAccess->getNodeTypeForNodeWithId(nodeId),
|
||||
@@ -112,7 +112,10 @@ void FeatureController::handleMessage(MessageActivateTokenLocations* message)
|
||||
|
||||
void FeatureController::handleMessage(MessageSearch* message)
|
||||
{
|
||||
MessageActivateTokens m(m_storageAccess->getTokenIdsForMatches(message->getMatches()));
|
||||
std::vector<Id> tokenIds = m_storageAccess->getTokenIdsForMatches(message->getMatches());
|
||||
tokenIds = m_storageAccess->getActiveTokenIdsForTokenIds(tokenIds);
|
||||
|
||||
MessageActivateTokens m(tokenIds);
|
||||
m.undoRedoType = message->undoRedoType;
|
||||
m.dispatchImmediately();
|
||||
}
|
||||
|
||||
@@ -174,8 +174,6 @@ void GraphController::createDummyGraphForTokenIds(const std::vector<Id>& tokenId
|
||||
autoExpandActiveNode(tokenIds);
|
||||
setActiveAndVisibility(tokenIds);
|
||||
|
||||
splitNamespaceNodes();
|
||||
|
||||
bundleNodes();
|
||||
|
||||
layoutNesting();
|
||||
@@ -276,45 +274,6 @@ DummyNode GraphController::createDummyNodeTopDown(Node* node)
|
||||
return result;
|
||||
}
|
||||
|
||||
void GraphController::splitNamespaceNodes()
|
||||
{
|
||||
std::vector<DummyNode> nodes;
|
||||
|
||||
for (const DummyNode& node : m_dummyNodes)
|
||||
{
|
||||
std::vector<DummyNode> newNodes = splitNamespaceNodesRecursive(node, false, true);
|
||||
nodes.insert(nodes.end(), newNodes.begin(), newNodes.end());
|
||||
}
|
||||
|
||||
m_dummyNodes = nodes;
|
||||
}
|
||||
|
||||
std::vector<DummyNode> GraphController::splitNamespaceNodesRecursive(const DummyNode& node, bool active, bool topLevel)
|
||||
{
|
||||
std::vector<DummyNode> nodes;
|
||||
active |= node.active;
|
||||
|
||||
if (node.isGraphNode() && node.data->isType(Node::NODE_NOT_VISIBLE))
|
||||
{
|
||||
for (const DummyNode& subNode : node.subNodes)
|
||||
{
|
||||
std::vector<DummyNode> newNodes = splitNamespaceNodesRecursive(subNode, active, false);
|
||||
for (DummyNode& newNode : newNodes)
|
||||
{
|
||||
newNode.hasParent = false;
|
||||
}
|
||||
|
||||
nodes.insert(nodes.end(), newNodes.begin(), newNodes.end());
|
||||
}
|
||||
}
|
||||
else if (topLevel || active || node.connected)
|
||||
{
|
||||
nodes.push_back(node);
|
||||
}
|
||||
|
||||
return nodes;
|
||||
}
|
||||
|
||||
void GraphController::autoExpandActiveNode(const std::vector<Id>& activeTokenIds)
|
||||
{
|
||||
DummyNode* node = nullptr;
|
||||
@@ -419,8 +378,7 @@ void GraphController::setNodeVisibilityRecursiveTopDown(DummyNode& node, bool pa
|
||||
|
||||
if ((node.isGraphNode() && node.isExpanded()) ||
|
||||
(node.isAccessNode() && parentExpanded) ||
|
||||
(node.isGraphNode() && node.data->isType(Node::NODE_ENUM)) ||
|
||||
(node.isGraphNode() && node.data->isType(Node::NODE_NOT_VISIBLE)))
|
||||
(node.isGraphNode() && node.data->isType(Node::NODE_ENUM)))
|
||||
{
|
||||
for (DummyNode& subNode : node.subNodes)
|
||||
{
|
||||
@@ -897,20 +855,9 @@ DummyNode* GraphController::findTopLevelDummyNodeRecursive(std::vector<DummyNode
|
||||
{
|
||||
for (DummyNode& node : nodes)
|
||||
{
|
||||
if (node.isGraphNode())
|
||||
if (node.isGraphNode() && node.data->getId() == tokenId)
|
||||
{
|
||||
if (node.data->isType(Node::NODE_NOT_VISIBLE))
|
||||
{
|
||||
DummyNode* result = findDummyNodeRecursive(node.subNodes, tokenId);
|
||||
if (result != nullptr)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
}
|
||||
else if (node.data->getId() == tokenId)
|
||||
{
|
||||
return &node;
|
||||
}
|
||||
return &node;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -51,9 +51,6 @@ private:
|
||||
void createDummyGraphForTokenIds(const std::vector<Id>& tokenIds);
|
||||
DummyNode createDummyNodeTopDown(Node* node);
|
||||
|
||||
void splitNamespaceNodes();
|
||||
std::vector<DummyNode> splitNamespaceNodesRecursive(const DummyNode& node, bool active, bool topLevel);
|
||||
|
||||
void autoExpandActiveNode(const std::vector<Id>& activeTokenIds);
|
||||
|
||||
void setActiveAndVisibility(const std::vector<Id>& activeTokenIds);
|
||||
|
||||
@@ -4,6 +4,8 @@
|
||||
#include "component/controller/helper/DummyNode.h"
|
||||
#include "component/view/GraphViewStyle.h"
|
||||
|
||||
const Edge::EdgeTypeMask BucketGrid::s_verticalEdgeMask = Edge::EDGE_INHERITANCE | Edge::EDGE_OVERRIDE;
|
||||
|
||||
Bucket::Bucket()
|
||||
: i(0)
|
||||
, j(0)
|
||||
@@ -157,7 +159,7 @@ void BucketGrid::createBuckets(std::vector<DummyNode>& nodes, const std::vector<
|
||||
}
|
||||
else
|
||||
{
|
||||
bool horizontal = edge->data ? !edge->data->isType(Edge::EDGE_INHERITANCE) : true;
|
||||
bool horizontal = edge->data ? !edge->data->isType(s_verticalEdgeMask) : true;
|
||||
removeEdge = addNode(owner, target, horizontal);
|
||||
}
|
||||
|
||||
|
||||
@@ -6,6 +6,8 @@
|
||||
#include "utility/math/Vector2.h"
|
||||
#include "utility/types.h"
|
||||
|
||||
#include "data/graph/Edge.h"
|
||||
|
||||
struct DummyEdge;
|
||||
struct DummyNode;
|
||||
|
||||
@@ -41,6 +43,8 @@ public:
|
||||
static void layout(std::vector<DummyNode>& nodes, const std::vector<DummyEdge>& edges, Vec2i viewSize);
|
||||
|
||||
private:
|
||||
static const Edge::EdgeTypeMask s_verticalEdgeMask;
|
||||
|
||||
BucketGrid(Vec2i viewSize);
|
||||
|
||||
void createBuckets(std::vector<DummyNode>& nodes, const std::vector<DummyEdge>& edges);
|
||||
|
||||
Reference in New Issue
Block a user