logic: Added namespaces to overview and fixed namespace activation
This commit is contained in:
@@ -31,8 +31,8 @@
|
||||
<hover>#CCCCCC</hover>
|
||||
</none>
|
||||
<command>
|
||||
<normal>#406D4D</normal>
|
||||
<hover>#4E855E</hover>
|
||||
<normal>#86BD40</normal>
|
||||
<hover>#9EC769</hover>
|
||||
</command>
|
||||
<operator>
|
||||
<normal>#7D2724</normal>
|
||||
@@ -192,6 +192,9 @@
|
||||
<normal>transparent</normal>
|
||||
<focus>#FFFFFF</focus>
|
||||
</border>
|
||||
<hatching>
|
||||
<normal>#FFFFFF</normal>
|
||||
</hatching>
|
||||
</function>
|
||||
<method>
|
||||
<like>function</like>
|
||||
@@ -206,6 +209,9 @@
|
||||
<normal>transparent</normal>
|
||||
<focus>#FFFFFF</focus>
|
||||
</border>
|
||||
<hatching>
|
||||
<normal>#FFFFFF</normal>
|
||||
</hatching>
|
||||
</global_variable>
|
||||
<field>
|
||||
<like>global_variable</like>
|
||||
@@ -216,10 +222,12 @@
|
||||
|
||||
<undefined>
|
||||
<fill>
|
||||
<normal>#00000000</normal>
|
||||
<normal>#EE7326</normal>
|
||||
<focus>#EE8A4C</focus>
|
||||
</fill>
|
||||
<border>
|
||||
<normal>#78282D</normal>
|
||||
<normal>#80FFFFFF</normal>
|
||||
<focus>#FFFFFF</focus>
|
||||
</border>
|
||||
</undefined>
|
||||
<namespace>
|
||||
|
||||
@@ -210,10 +210,11 @@
|
||||
|
||||
<undefined>
|
||||
<fill>
|
||||
<normal>#00000000</normal>
|
||||
<normal>#CC8D91</normal>
|
||||
</fill>
|
||||
<border>
|
||||
<normal>#CC8D91</normal>
|
||||
<normal>#803C3C3C</normal>
|
||||
<focus>#3C3C3C</focus>
|
||||
</border>
|
||||
</undefined>
|
||||
<namespace>
|
||||
|
||||
@@ -225,10 +225,11 @@
|
||||
|
||||
<undefined>
|
||||
<fill>
|
||||
<normal>#00000000</normal>
|
||||
<normal>#78282D</normal>
|
||||
</fill>
|
||||
<border>
|
||||
<normal>#78282D</normal>
|
||||
<normal>#80C3C3C3</normal>
|
||||
<focus>#C3C3C3</focus>
|
||||
</border>
|
||||
</undefined>
|
||||
<namespace>
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -26,6 +26,8 @@ public:
|
||||
|
||||
virtual std::string getName() const;
|
||||
|
||||
virtual void clear() = 0;
|
||||
|
||||
virtual void setActiveTokenIds(const std::vector<Id>& activeTokenIds) = 0;
|
||||
virtual void setErrorMessages(const std::vector<std::string>& errorMessages) = 0;
|
||||
|
||||
|
||||
@@ -130,8 +130,6 @@ size_t GraphViewStyle::getFontSizeForNodeType(Node::NodeType type)
|
||||
{
|
||||
case Node::NODE_UNDEFINED:
|
||||
case Node::NODE_NAMESPACE:
|
||||
return s_fontSize - 2;
|
||||
|
||||
case Node::NODE_TYPE:
|
||||
case Node::NODE_STRUCT:
|
||||
case Node::NODE_CLASS:
|
||||
@@ -189,18 +187,13 @@ GraphViewStyle::NodeMargins GraphViewStyle::getMarginsForNodeType(Node::NodeType
|
||||
|
||||
switch (type)
|
||||
{
|
||||
case Node::NODE_UNDEFINED:
|
||||
case Node::NODE_NAMESPACE:
|
||||
margins.left = margins.right = 15;
|
||||
margins.top = 10;
|
||||
margins.bottom = 15;
|
||||
break;
|
||||
|
||||
case Node::NODE_ENUM:
|
||||
case Node::NODE_TYPEDEF:
|
||||
case Node::NODE_FILE:
|
||||
case Node::NODE_MACRO:
|
||||
margins.iconWidth = s_fontSize + 11;
|
||||
case Node::NODE_UNDEFINED:
|
||||
case Node::NODE_NAMESPACE:
|
||||
case Node::NODE_TYPE:
|
||||
case Node::NODE_STRUCT:
|
||||
case Node::NODE_CLASS:
|
||||
@@ -306,12 +299,6 @@ GraphViewStyle::NodeStyle GraphViewStyle::getStyleForNodeType(
|
||||
style.borderDashed = true;
|
||||
|
||||
case Node::NODE_NAMESPACE:
|
||||
style.cornerRadius = 20;
|
||||
|
||||
style.textOffset.x = 15;
|
||||
style.textOffset.y = 6;
|
||||
break;
|
||||
|
||||
case Node::NODE_TYPE:
|
||||
case Node::NODE_STRUCT:
|
||||
case Node::NODE_CLASS:
|
||||
|
||||
@@ -903,7 +903,8 @@ std::shared_ptr<Graph> Storage::getGraphForAll() const
|
||||
std::vector<Id> tokenIds;
|
||||
for (StorageNode node: m_sqliteStorage.getAllNodes())
|
||||
{
|
||||
if (node.defined && !m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id))
|
||||
if (node.defined && (!m_hierarchyCache.isChildOfVisibleNodeOrInvisible(node.id) ||
|
||||
Node::intToType(node.type) == Node::NODE_NAMESPACE))
|
||||
{
|
||||
tokenIds.push_back(node.id);
|
||||
}
|
||||
@@ -914,12 +915,12 @@ std::shared_ptr<Graph> Storage::getGraphForAll() const
|
||||
return graph;
|
||||
}
|
||||
|
||||
std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const
|
||||
std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const
|
||||
{
|
||||
std::shared_ptr<Graph> g = std::make_shared<Graph>();
|
||||
Graph* graph = g.get();
|
||||
|
||||
if (tokenIds.size() == 1)
|
||||
if (tokenIds.size() == 1 && !activeOnly)
|
||||
{
|
||||
const Id elementId = tokenIds[0];
|
||||
|
||||
@@ -946,7 +947,7 @@ std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>&
|
||||
addEdgeAndAllChildrenToGraph(elementId, graph);
|
||||
}
|
||||
}
|
||||
else if (tokenIds.size() > 1)
|
||||
else if (tokenIds.size() >= 1)
|
||||
{
|
||||
for (size_t i = 0; i < tokenIds.size(); i++)
|
||||
{
|
||||
@@ -970,6 +971,7 @@ std::shared_ptr<Graph> Storage::getGraphForActiveTokenIds(const std::vector<Id>&
|
||||
|
||||
std::vector<Id> Storage::getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const
|
||||
{
|
||||
bool different = false;
|
||||
std::vector<Id> activeIds;
|
||||
|
||||
for (Id id : tokenIds)
|
||||
@@ -977,6 +979,10 @@ std::vector<Id> Storage::getActiveTokenIdsForTokenIds(const std::vector<Id>& tok
|
||||
if (m_sqliteStorage.isNode(id))
|
||||
{
|
||||
m_hierarchyCache.addFirstVisibleChildIdsForNodeId(id, &activeIds);
|
||||
if (id != activeIds.back())
|
||||
{
|
||||
different = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -984,6 +990,11 @@ std::vector<Id> Storage::getActiveTokenIdsForTokenIds(const std::vector<Id>& tok
|
||||
}
|
||||
}
|
||||
|
||||
if (!different)
|
||||
{
|
||||
return tokenIds;
|
||||
}
|
||||
|
||||
std::set<Id> idSet(activeIds.begin(), activeIds.end());
|
||||
activeIds.clear();
|
||||
activeIds.insert(activeIds.end(), idSet.begin(), idSet.end());
|
||||
|
||||
@@ -147,7 +147,7 @@ public:
|
||||
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const;
|
||||
|
||||
virtual std::shared_ptr<Graph> getGraphForAll() const;
|
||||
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const;
|
||||
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const;
|
||||
|
||||
virtual std::vector<Id> getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const;
|
||||
virtual std::vector<Id> getActiveTokenIdsForId(Id tokenId, Id* declarationId) const;
|
||||
|
||||
@@ -39,7 +39,7 @@ public:
|
||||
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const = 0;
|
||||
|
||||
virtual std::shared_ptr<Graph> getGraphForAll() const = 0;
|
||||
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const = 0;
|
||||
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const = 0;
|
||||
|
||||
virtual std::vector<Id> getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const = 0;
|
||||
virtual std::vector<Id> getActiveTokenIdsForId(Id tokenId, Id* declarationId) const = 0;
|
||||
|
||||
@@ -123,11 +123,11 @@ std::shared_ptr<Graph> StorageAccessProxy::getGraphForAll() const
|
||||
return std::make_shared<Graph>();
|
||||
}
|
||||
|
||||
std::shared_ptr<Graph> StorageAccessProxy::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const
|
||||
std::shared_ptr<Graph> StorageAccessProxy::getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const
|
||||
{
|
||||
if (hasSubject())
|
||||
{
|
||||
return m_subject->getGraphForActiveTokenIds(tokenIds);
|
||||
return m_subject->getGraphForActiveTokenIds(tokenIds, activeOnly);
|
||||
}
|
||||
|
||||
return std::make_shared<Graph>();
|
||||
|
||||
@@ -27,7 +27,7 @@ public:
|
||||
virtual std::vector<SearchMatch> getSearchMatchesForTokenIds(const std::vector<Id>& tokenIds) const;
|
||||
|
||||
virtual std::shared_ptr<Graph> getGraphForAll() const;
|
||||
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds) const;
|
||||
virtual std::shared_ptr<Graph> getGraphForActiveTokenIds(const std::vector<Id>& tokenIds, bool activeOnly) const;
|
||||
|
||||
virtual std::vector<Id> getActiveTokenIdsForTokenIds(const std::vector<Id>& tokenIds) const;
|
||||
virtual std::vector<Id> getActiveTokenIdsForId(Id tokenId, Id* declarationId) const;
|
||||
|
||||
@@ -34,6 +34,7 @@ public:
|
||||
}
|
||||
|
||||
const std::vector<Id> tokenIds;
|
||||
std::vector<Id> originalTokenIds;
|
||||
|
||||
bool isEdge;
|
||||
bool isAggregation;
|
||||
|
||||
@@ -12,6 +12,7 @@
|
||||
QtCodeView::QtCodeView(ViewLayout* viewLayout)
|
||||
: CodeView(viewLayout)
|
||||
, m_refreshViewFunctor(std::bind(&QtCodeView::doRefreshView, this))
|
||||
, m_clearFunctor(std::bind(&QtCodeView::doClear, this))
|
||||
, m_showCodeSnippetsFunctor(std::bind(&QtCodeView::doShowCodeSnippets, this, std::placeholders::_1, std::placeholders::_2))
|
||||
, m_addCodeSnippetsFunctor(std::bind(&QtCodeView::doAddCodeSnippets, this, std::placeholders::_1, std::placeholders::_2))
|
||||
, m_showCodeFileFunctor(std::bind(&QtCodeView::doShowCodeFile, this, std::placeholders::_1))
|
||||
@@ -45,6 +46,11 @@ void QtCodeView::refreshView()
|
||||
m_refreshViewFunctor();
|
||||
}
|
||||
|
||||
void QtCodeView::clear()
|
||||
{
|
||||
m_clearFunctor();
|
||||
}
|
||||
|
||||
void QtCodeView::setActiveTokenIds(const std::vector<Id>& activeTokenIds)
|
||||
{
|
||||
m_activeTokenIds = activeTokenIds;
|
||||
@@ -112,6 +118,11 @@ void QtCodeView::doRefreshView()
|
||||
QtCodeArea::clearAnnotationColors();
|
||||
}
|
||||
|
||||
void QtCodeView::doClear()
|
||||
{
|
||||
m_widget->clearCodeSnippets();
|
||||
}
|
||||
|
||||
void QtCodeView::doShowCodeSnippets(const std::vector<CodeSnippetParams>& snippets, const std::vector<Id>& activeTokenIds)
|
||||
{
|
||||
m_widget->clearCodeSnippets();
|
||||
@@ -143,6 +154,8 @@ void QtCodeView::doAddCodeSnippets(const std::vector<CodeSnippetParams>& snippet
|
||||
m_widget->addCodeSnippet(params, insert);
|
||||
}
|
||||
|
||||
m_widget->updateFiles();
|
||||
|
||||
setStyleSheet(); // so property "isLast" of QtCodeSnippet is computed correctly
|
||||
|
||||
m_widget->scrollToActiveFileIfRequested();
|
||||
|
||||
@@ -26,6 +26,8 @@ public:
|
||||
virtual void refreshView();
|
||||
|
||||
// CodeView implementation
|
||||
virtual void clear();
|
||||
|
||||
virtual void setActiveTokenIds(const std::vector<Id>& activeTokenIds);
|
||||
virtual void setErrorMessages(const std::vector<std::string>& errorMessages);
|
||||
|
||||
@@ -47,6 +49,7 @@ public:
|
||||
|
||||
private:
|
||||
void doRefreshView();
|
||||
void doClear();
|
||||
|
||||
void doShowCodeSnippets(const std::vector<CodeSnippetParams>& snippets, const std::vector<Id>& activeTokenIds);
|
||||
void doAddCodeSnippets(const std::vector<CodeSnippetParams>& snippets, bool insert);
|
||||
@@ -67,6 +70,7 @@ private:
|
||||
void setStyleSheet() const;
|
||||
|
||||
QtThreadedFunctor<> m_refreshViewFunctor;
|
||||
QtThreadedFunctor<> m_clearFunctor;
|
||||
QtThreadedFunctor<const std::vector<CodeSnippetParams>&, const std::vector<Id>&> m_showCodeSnippetsFunctor;
|
||||
QtThreadedFunctor<const std::vector<CodeSnippetParams>&, bool> m_addCodeSnippetsFunctor;
|
||||
QtThreadedFunctor<const CodeSnippetParams&> m_showCodeFileFunctor;
|
||||
|
||||
@@ -230,10 +230,16 @@ void QtGraphView::doRebuildGraph(
|
||||
|
||||
QGraphicsView* view = getView();
|
||||
|
||||
size_t activeNodeCount = 0;
|
||||
for (unsigned int i = 0; i < nodes.size(); i++)
|
||||
{
|
||||
activeNodeCount += nodes[i].getActiveSubNodeCount();
|
||||
}
|
||||
|
||||
m_nodes.clear();
|
||||
for (unsigned int i = 0; i < nodes.size(); i++)
|
||||
{
|
||||
std::shared_ptr<QtGraphNode> node = createNodeRecursive(view, NULL, nodes[i]);
|
||||
std::shared_ptr<QtGraphNode> node = createNodeRecursive(view, NULL, nodes[i], activeNodeCount > 1);
|
||||
if (node)
|
||||
{
|
||||
m_nodes.push_back(node);
|
||||
@@ -317,7 +323,7 @@ std::shared_ptr<QtGraphNode> QtGraphView::findNodeRecursive(const std::list<std:
|
||||
}
|
||||
|
||||
std::shared_ptr<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
QGraphicsView* view, std::shared_ptr<QtGraphNode> parentNode, const DummyNode& node
|
||||
QGraphicsView* view, std::shared_ptr<QtGraphNode> parentNode, const DummyNode& node, bool multipleActive
|
||||
){
|
||||
if (!node.visible)
|
||||
{
|
||||
@@ -345,6 +351,7 @@ std::shared_ptr<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
newNode->setPosition(node.position);
|
||||
newNode->setSize(node.size);
|
||||
newNode->setIsActive(node.active);
|
||||
newNode->setMultipleActive(multipleActive);
|
||||
|
||||
newNode->addComponent(std::make_shared<QtGraphNodeComponentClickable>(newNode));
|
||||
|
||||
@@ -361,7 +368,7 @@ std::shared_ptr<QtGraphNode> QtGraphView::createNodeRecursive(
|
||||
|
||||
for (unsigned int i = 0; i < node.subNodes.size(); i++)
|
||||
{
|
||||
std::shared_ptr<QtGraphNode> subNode = createNodeRecursive(view, newNode, node.subNodes[i]);
|
||||
std::shared_ptr<QtGraphNode> subNode = createNodeRecursive(view, newNode, node.subNodes[i], multipleActive);
|
||||
if (subNode)
|
||||
{
|
||||
newNode->addSubNode(subNode);
|
||||
|
||||
@@ -79,7 +79,7 @@ private:
|
||||
std::shared_ptr<QtGraphNode> findNodeRecursive(const std::list<std::shared_ptr<QtGraphNode>>& nodes, Id tokenId);
|
||||
|
||||
std::shared_ptr<QtGraphNode> createNodeRecursive(
|
||||
QGraphicsView* view, std::shared_ptr<QtGraphNode> parentNode, const DummyNode& node);
|
||||
QGraphicsView* view, std::shared_ptr<QtGraphNode> parentNode, const DummyNode& node, bool multipleActive);
|
||||
std::shared_ptr<QtGraphEdge> createEdge(QGraphicsView* view, const DummyEdge& edge);
|
||||
|
||||
QRectF itemsBoundingRect(const std::list<std::shared_ptr<QtGraphNode>>& items) const;
|
||||
|
||||
@@ -46,6 +46,7 @@ QtGraphNode::QtGraphNode()
|
||||
: m_undefinedRect(nullptr)
|
||||
, m_icon(nullptr)
|
||||
, m_isActive(false)
|
||||
, m_multipleActive(false)
|
||||
, m_isHovering(false)
|
||||
{
|
||||
this->setPen(QPen(Qt::transparent));
|
||||
@@ -186,6 +187,11 @@ void QtGraphNode::setIsActive(bool isActive)
|
||||
updateStyle();
|
||||
}
|
||||
|
||||
void QtGraphNode::setMultipleActive(bool multipleActive)
|
||||
{
|
||||
m_multipleActive = multipleActive;
|
||||
}
|
||||
|
||||
std::string QtGraphNode::getName() const
|
||||
{
|
||||
return m_text->text().toStdString();
|
||||
|
||||
@@ -60,6 +60,7 @@ public:
|
||||
|
||||
bool getIsActive() const;
|
||||
void setIsActive(bool isActive);
|
||||
void setMultipleActive(bool multipleActive);
|
||||
|
||||
std::string getName() const;
|
||||
void setName(const std::string& name);
|
||||
@@ -108,6 +109,7 @@ protected:
|
||||
Vec2i m_size;
|
||||
|
||||
bool m_isActive;
|
||||
bool m_multipleActive;
|
||||
bool m_isHovering;
|
||||
|
||||
private:
|
||||
|
||||
@@ -55,7 +55,7 @@ Id QtGraphNodeData::getTokenId() const
|
||||
|
||||
void QtGraphNodeData::onClick()
|
||||
{
|
||||
if (m_isActive)
|
||||
if (m_isActive && !m_multipleActive)
|
||||
{
|
||||
MessageDeactivateEdge().dispatch();
|
||||
return;
|
||||
|
||||
Reference in New Issue
Block a user