logic: Added namespaces to overview and fixed namespace activation

This commit is contained in:
Eberhard Graether
2016-02-08 03:39:08 +01:00
parent d6c03ffb02
commit 29149f313a
24 changed files with 147 additions and 52 deletions
@@ -88,18 +88,26 @@ void CodeController::handleMessage(MessageActivateAll* message)
void CodeController::handleMessage(MessageActivateTokens* message)
{
std::vector<Id> activeTokenIds = message->tokenIds;
Id declarationId = 0; // 0 means that no token is found.
if (activeTokenIds.size() == 1)
{
activeTokenIds = m_storageAccess->getActiveTokenIdsForId(activeTokenIds[0], &declarationId);
}
// TODO: what about declarationId if more than 1 token is active? FIX THIS!
CodeView* view = getView();
view->setErrorMessages(std::vector<std::string>());
std::vector<Id> activeTokenIds =
(message->originalTokenIds.size() > 0 ? message->originalTokenIds : message->tokenIds);
if (activeTokenIds.size() != 1)
{
view->clear();
return;
}
Id declarationId = 0; // 0 means that no token is found.
activeTokenIds = m_storageAccess->getActiveTokenIdsForId(activeTokenIds[0], &declarationId);
if (message->originalTokenIds.size() > 0)
{
declarationId = 0;
}
if (message->isEdge)
{
view->showFirstActiveSnippet(activeTokenIds, message->isLast());
@@ -67,10 +67,16 @@ void GraphController::handleMessage(MessageActivateTokens* message)
std::vector<Id> tokenIds = utility::concat(m_activeNodeIds, m_activeEdgeIds);
std::shared_ptr<Graph> graph = m_storageAccess->getGraphForActiveTokenIds(tokenIds);
std::shared_ptr<Graph> graph =
m_storageAccess->getGraphForActiveTokenIds(tokenIds, message->originalTokenIds.size() > 0);
createDummyGraphForTokenIds(tokenIds, graph);
if (message->originalTokenIds.size() > 0)
{
deactivateNodesRecursive(&m_dummyNodes);
}
bundleNodes();
layoutNesting();
@@ -434,6 +440,15 @@ void GraphController::setNodeVisibilityRecursiveTopDown(DummyNode& node, bool pa
}
}
void GraphController::deactivateNodesRecursive(std::vector<DummyNode>* nodes) const
{
for (DummyNode& node : *nodes)
{
node.active = false;
deactivateNodesRecursive(&node.subNodes);
}
}
void GraphController::bundleNodes()
{
bundleNodesMatching(
@@ -762,6 +777,7 @@ bool GraphController::isTypeUserNode(const DummyNode& node) const
void GraphController::bundleNodesByType()
{
BUNDLE_BY_TYPE(Node::NODE_NAMESPACE, "Namespaces");
BUNDLE_BY_TYPE(Node::NODE_CLASS, "Classes");
BUNDLE_BY_TYPE(Node::NODE_STRUCT, "Structs");
@@ -782,7 +798,6 @@ void GraphController::bundleNodesByType()
BUNDLE_BY_TYPE(Node::NODE_ENUM_CONSTANT, "Enum Constants");
BUNDLE_BY_TYPE(Node::NODE_TEMPLATE_PARAMETER_TYPE, "Template Parameter Types");
BUNDLE_BY_TYPE(Node::NODE_UNDEFINED, "Undefined Symbols");
BUNDLE_BY_TYPE(Node::NODE_NAMESPACE, "Namespaces");
for (DummyNode& node : m_dummyNodes)
{
@@ -65,6 +65,7 @@ private:
void setNodeActiveRecursive(DummyNode& node, const std::vector<Id>& activeTokenIds) const;
bool setNodeVisibilityRecursiveBottomUp(DummyNode& node, bool noActive) const;
void setNodeVisibilityRecursiveTopDown(DummyNode& node, bool parentExpanded) const;
void deactivateNodesRecursive(std::vector<DummyNode>* nodes) const;
void bundleNodes();
void bundleNodesMatching(std::function<bool(const DummyNode&)> matcher, size_t count, const std::string& name);
@@ -22,7 +22,10 @@ void SearchController::handleMessage(MessageActivateTokens* message)
{
if (!message->keepContent() && !message->isFromSearch)
{
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds));
const std::vector<Id>& tokenIds =
(message->originalTokenIds.size() > 0 ? message->originalTokenIds : message->tokenIds);
getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(tokenIds));
}
}
@@ -95,7 +95,11 @@ std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(co
}
std::shared_ptr<MessageActivateTokens> m;
m = std::make_shared<MessageActivateTokens>(message, nodeIds);
m = std::make_shared<MessageActivateTokens>(message, m_storageAccess->getActiveTokenIdsForTokenIds(nodeIds));
if (nodeIds != m->tokenIds)
{
m->originalTokenIds = nodeIds;
}
m->isFromSystem = message->isFromSystem;
return m;
}
@@ -130,9 +134,13 @@ std::shared_ptr<MessageActivateTokens> ActivationTranslator::translateMessage(co
}
std::vector<Id> tokenIds = m_storageAccess->getTokenIdsForMatches(matches);
tokenIds = m_storageAccess->getActiveTokenIdsForTokenIds(tokenIds);
std::shared_ptr<MessageActivateTokens> m = std::make_shared<MessageActivateTokens>(message, tokenIds);
std::shared_ptr<MessageActivateTokens> m =
std::make_shared<MessageActivateTokens>(message, m_storageAccess->getActiveTokenIdsForTokenIds(tokenIds));
if (tokenIds != m->tokenIds)
{
m->originalTokenIds = tokenIds;
}
if (message->isFresh())
{
m->isFromSearch = true;
@@ -85,6 +85,23 @@ public:
return false;
}
size_t getActiveSubNodeCount() const
{
size_t count = 0;
if (active)
{
count += 1;
}
for (const DummyNode& node : subNodes)
{
count += node.getActiveSubNodeCount();
}
return count;
}
bool hasConnectedSubNode() const
{
if (connected)