diff --git a/bin/app/data/color_schemes/bad_rainbow.xml b/bin/app/data/color_schemes/bad_rainbow.xml
index 7ca361bd..85a676af 100644
--- a/bin/app/data/color_schemes/bad_rainbow.xml
+++ b/bin/app/data/color_schemes/bad_rainbow.xml
@@ -31,8 +31,8 @@
#CCCCCC
- #406D4D
- #4E855E
+ #86BD40
+ #9EC769
#7D2724
@@ -192,6 +192,9 @@
transparent
#FFFFFF
+
+ #FFFFFF
+
function
@@ -206,6 +209,9 @@
transparent
#FFFFFF
+
+ #FFFFFF
+
global_variable
@@ -216,10 +222,12 @@
- #00000000
+ #EE7326
+ #EE8A4C
- #78282D
+ #80FFFFFF
+ #FFFFFF
diff --git a/bin/app/data/color_schemes/bright.xml b/bin/app/data/color_schemes/bright.xml
index b691b94a..2f3847c6 100644
--- a/bin/app/data/color_schemes/bright.xml
+++ b/bin/app/data/color_schemes/bright.xml
@@ -210,10 +210,11 @@
- #00000000
+ #CC8D91
- #CC8D91
+ #803C3C3C
+ #3C3C3C
diff --git a/bin/app/data/color_schemes/dark.xml b/bin/app/data/color_schemes/dark.xml
index 2bf30aa9..975e5dda 100644
--- a/bin/app/data/color_schemes/dark.xml
+++ b/bin/app/data/color_schemes/dark.xml
@@ -225,10 +225,11 @@
- #00000000
+ #78282D
- #78282D
+ #80C3C3C3
+ #C3C3C3
diff --git a/src/lib/component/controller/CodeController.cpp b/src/lib/component/controller/CodeController.cpp
index 63392676..21c8d106 100644
--- a/src/lib/component/controller/CodeController.cpp
+++ b/src/lib/component/controller/CodeController.cpp
@@ -88,18 +88,26 @@ void CodeController::handleMessage(MessageActivateAll* message)
void CodeController::handleMessage(MessageActivateTokens* message)
{
- std::vector 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::vector 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());
diff --git a/src/lib/component/controller/GraphController.cpp b/src/lib/component/controller/GraphController.cpp
index 1588b19b..dbcd170d 100644
--- a/src/lib/component/controller/GraphController.cpp
+++ b/src/lib/component/controller/GraphController.cpp
@@ -67,10 +67,16 @@ void GraphController::handleMessage(MessageActivateTokens* message)
std::vector tokenIds = utility::concat(m_activeNodeIds, m_activeEdgeIds);
- std::shared_ptr graph = m_storageAccess->getGraphForActiveTokenIds(tokenIds);
+ std::shared_ptr 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* 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)
{
diff --git a/src/lib/component/controller/GraphController.h b/src/lib/component/controller/GraphController.h
index f2613bd2..c779e2c7 100644
--- a/src/lib/component/controller/GraphController.h
+++ b/src/lib/component/controller/GraphController.h
@@ -65,6 +65,7 @@ private:
void setNodeActiveRecursive(DummyNode& node, const std::vector& activeTokenIds) const;
bool setNodeVisibilityRecursiveBottomUp(DummyNode& node, bool noActive) const;
void setNodeVisibilityRecursiveTopDown(DummyNode& node, bool parentExpanded) const;
+ void deactivateNodesRecursive(std::vector* nodes) const;
void bundleNodes();
void bundleNodesMatching(std::function matcher, size_t count, const std::string& name);
diff --git a/src/lib/component/controller/SearchController.cpp b/src/lib/component/controller/SearchController.cpp
index e8fe7e1b..5493a669 100644
--- a/src/lib/component/controller/SearchController.cpp
+++ b/src/lib/component/controller/SearchController.cpp
@@ -22,7 +22,10 @@ void SearchController::handleMessage(MessageActivateTokens* message)
{
if (!message->keepContent() && !message->isFromSearch)
{
- getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(message->tokenIds));
+ const std::vector& tokenIds =
+ (message->originalTokenIds.size() > 0 ? message->originalTokenIds : message->tokenIds);
+
+ getView()->setMatches(m_storageAccess->getSearchMatchesForTokenIds(tokenIds));
}
}
diff --git a/src/lib/component/controller/helper/ActivationTranslator.cpp b/src/lib/component/controller/helper/ActivationTranslator.cpp
index 7820ac0d..be90c6d3 100644
--- a/src/lib/component/controller/helper/ActivationTranslator.cpp
+++ b/src/lib/component/controller/helper/ActivationTranslator.cpp
@@ -95,7 +95,11 @@ std::shared_ptr ActivationTranslator::translateMessage(co
}
std::shared_ptr m;
- m = std::make_shared(message, nodeIds);
+ m = std::make_shared(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 ActivationTranslator::translateMessage(co
}
std::vector tokenIds = m_storageAccess->getTokenIdsForMatches(matches);
- tokenIds = m_storageAccess->getActiveTokenIdsForTokenIds(tokenIds);
- std::shared_ptr m = std::make_shared(message, tokenIds);
+ std::shared_ptr m =
+ std::make_shared(message, m_storageAccess->getActiveTokenIdsForTokenIds(tokenIds));
+ if (tokenIds != m->tokenIds)
+ {
+ m->originalTokenIds = tokenIds;
+ }
if (message->isFresh())
{
m->isFromSearch = true;
diff --git a/src/lib/component/controller/helper/DummyNode.h b/src/lib/component/controller/helper/DummyNode.h
index 54225122..41e92e20 100644
--- a/src/lib/component/controller/helper/DummyNode.h
+++ b/src/lib/component/controller/helper/DummyNode.h
@@ -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)
diff --git a/src/lib/component/view/CodeView.h b/src/lib/component/view/CodeView.h
index ef54812c..66467d05 100644
--- a/src/lib/component/view/CodeView.h
+++ b/src/lib/component/view/CodeView.h
@@ -26,6 +26,8 @@ public:
virtual std::string getName() const;
+ virtual void clear() = 0;
+
virtual void setActiveTokenIds(const std::vector& activeTokenIds) = 0;
virtual void setErrorMessages(const std::vector& errorMessages) = 0;
diff --git a/src/lib/component/view/GraphViewStyle.cpp b/src/lib/component/view/GraphViewStyle.cpp
index 5b896737..4c3c640c 100644
--- a/src/lib/component/view/GraphViewStyle.cpp
+++ b/src/lib/component/view/GraphViewStyle.cpp
@@ -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:
diff --git a/src/lib/data/Storage.cpp b/src/lib/data/Storage.cpp
index e4dc278b..4e86df6b 100644
--- a/src/lib/data/Storage.cpp
+++ b/src/lib/data/Storage.cpp
@@ -903,7 +903,8 @@ std::shared_ptr Storage::getGraphForAll() const
std::vector 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 Storage::getGraphForAll() const
return graph;
}
-std::shared_ptr Storage::getGraphForActiveTokenIds(const std::vector& tokenIds) const
+std::shared_ptr Storage::getGraphForActiveTokenIds(const std::vector& tokenIds, bool activeOnly) const
{
std::shared_ptr g = std::make_shared();
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 Storage::getGraphForActiveTokenIds(const std::vector&
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 Storage::getGraphForActiveTokenIds(const std::vector&
std::vector Storage::getActiveTokenIdsForTokenIds(const std::vector& tokenIds) const
{
+ bool different = false;
std::vector activeIds;
for (Id id : tokenIds)
@@ -977,6 +979,10 @@ std::vector Storage::getActiveTokenIdsForTokenIds(const std::vector& tok
if (m_sqliteStorage.isNode(id))
{
m_hierarchyCache.addFirstVisibleChildIdsForNodeId(id, &activeIds);
+ if (id != activeIds.back())
+ {
+ different = true;
+ }
}
else
{
@@ -984,6 +990,11 @@ std::vector Storage::getActiveTokenIdsForTokenIds(const std::vector& tok
}
}
+ if (!different)
+ {
+ return tokenIds;
+ }
+
std::set idSet(activeIds.begin(), activeIds.end());
activeIds.clear();
activeIds.insert(activeIds.end(), idSet.begin(), idSet.end());
diff --git a/src/lib/data/Storage.h b/src/lib/data/Storage.h
index 63b2046d..7aa8a570 100644
--- a/src/lib/data/Storage.h
+++ b/src/lib/data/Storage.h
@@ -147,7 +147,7 @@ public:
virtual std::vector getSearchMatchesForTokenIds(const std::vector& tokenIds) const;
virtual std::shared_ptr getGraphForAll() const;
- virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds) const;
+ virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds, bool activeOnly) const;
virtual std::vector getActiveTokenIdsForTokenIds(const std::vector& tokenIds) const;
virtual std::vector getActiveTokenIdsForId(Id tokenId, Id* declarationId) const;
diff --git a/src/lib/data/access/StorageAccess.h b/src/lib/data/access/StorageAccess.h
index 4da0a04f..e03f5af7 100644
--- a/src/lib/data/access/StorageAccess.h
+++ b/src/lib/data/access/StorageAccess.h
@@ -39,7 +39,7 @@ public:
virtual std::vector getSearchMatchesForTokenIds(const std::vector& tokenIds) const = 0;
virtual std::shared_ptr getGraphForAll() const = 0;
- virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds) const = 0;
+ virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds, bool activeOnly) const = 0;
virtual std::vector getActiveTokenIdsForTokenIds(const std::vector& tokenIds) const = 0;
virtual std::vector getActiveTokenIdsForId(Id tokenId, Id* declarationId) const = 0;
diff --git a/src/lib/data/access/StorageAccessProxy.cpp b/src/lib/data/access/StorageAccessProxy.cpp
index 7264055e..232e3c34 100644
--- a/src/lib/data/access/StorageAccessProxy.cpp
+++ b/src/lib/data/access/StorageAccessProxy.cpp
@@ -123,11 +123,11 @@ std::shared_ptr StorageAccessProxy::getGraphForAll() const
return std::make_shared();
}
-std::shared_ptr StorageAccessProxy::getGraphForActiveTokenIds(const std::vector& tokenIds) const
+std::shared_ptr StorageAccessProxy::getGraphForActiveTokenIds(const std::vector& tokenIds, bool activeOnly) const
{
if (hasSubject())
{
- return m_subject->getGraphForActiveTokenIds(tokenIds);
+ return m_subject->getGraphForActiveTokenIds(tokenIds, activeOnly);
}
return std::make_shared();
diff --git a/src/lib/data/access/StorageAccessProxy.h b/src/lib/data/access/StorageAccessProxy.h
index a5d68d74..1a23e969 100644
--- a/src/lib/data/access/StorageAccessProxy.h
+++ b/src/lib/data/access/StorageAccessProxy.h
@@ -27,7 +27,7 @@ public:
virtual std::vector getSearchMatchesForTokenIds(const std::vector& tokenIds) const;
virtual std::shared_ptr getGraphForAll() const;
- virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds) const;
+ virtual std::shared_ptr getGraphForActiveTokenIds(const std::vector& tokenIds, bool activeOnly) const;
virtual std::vector getActiveTokenIdsForTokenIds(const std::vector& tokenIds) const;
virtual std::vector getActiveTokenIdsForId(Id tokenId, Id* declarationId) const;
diff --git a/src/lib/utility/messaging/type/MessageActivateTokens.h b/src/lib/utility/messaging/type/MessageActivateTokens.h
index a3f0f2be..dd40b2eb 100644
--- a/src/lib/utility/messaging/type/MessageActivateTokens.h
+++ b/src/lib/utility/messaging/type/MessageActivateTokens.h
@@ -34,6 +34,7 @@ public:
}
const std::vector tokenIds;
+ std::vector originalTokenIds;
bool isEdge;
bool isAggregation;
diff --git a/src/lib_gui/qt/view/QtCodeView.cpp b/src/lib_gui/qt/view/QtCodeView.cpp
index cc325ccb..1240ea64 100644
--- a/src/lib_gui/qt/view/QtCodeView.cpp
+++ b/src/lib_gui/qt/view/QtCodeView.cpp
@@ -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& 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& snippets, const std::vector& activeTokenIds)
{
m_widget->clearCodeSnippets();
@@ -143,6 +154,8 @@ void QtCodeView::doAddCodeSnippets(const std::vector& snippet
m_widget->addCodeSnippet(params, insert);
}
+ m_widget->updateFiles();
+
setStyleSheet(); // so property "isLast" of QtCodeSnippet is computed correctly
m_widget->scrollToActiveFileIfRequested();
diff --git a/src/lib_gui/qt/view/QtCodeView.h b/src/lib_gui/qt/view/QtCodeView.h
index 05c8e9a3..33b582d2 100644
--- a/src/lib_gui/qt/view/QtCodeView.h
+++ b/src/lib_gui/qt/view/QtCodeView.h
@@ -26,6 +26,8 @@ public:
virtual void refreshView();
// CodeView implementation
+ virtual void clear();
+
virtual void setActiveTokenIds(const std::vector& activeTokenIds);
virtual void setErrorMessages(const std::vector& errorMessages);
@@ -47,6 +49,7 @@ public:
private:
void doRefreshView();
+ void doClear();
void doShowCodeSnippets(const std::vector& snippets, const std::vector& activeTokenIds);
void doAddCodeSnippets(const std::vector& snippets, bool insert);
@@ -67,6 +70,7 @@ private:
void setStyleSheet() const;
QtThreadedFunctor<> m_refreshViewFunctor;
+ QtThreadedFunctor<> m_clearFunctor;
QtThreadedFunctor&, const std::vector&> m_showCodeSnippetsFunctor;
QtThreadedFunctor&, bool> m_addCodeSnippetsFunctor;
QtThreadedFunctor m_showCodeFileFunctor;
diff --git a/src/lib_gui/qt/view/QtGraphView.cpp b/src/lib_gui/qt/view/QtGraphView.cpp
index f5843c5d..e2c4d9fa 100644
--- a/src/lib_gui/qt/view/QtGraphView.cpp
+++ b/src/lib_gui/qt/view/QtGraphView.cpp
@@ -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 node = createNodeRecursive(view, NULL, nodes[i]);
+ std::shared_ptr node = createNodeRecursive(view, NULL, nodes[i], activeNodeCount > 1);
if (node)
{
m_nodes.push_back(node);
@@ -317,7 +323,7 @@ std::shared_ptr QtGraphView::findNodeRecursive(const std::list QtGraphView::createNodeRecursive(
- QGraphicsView* view, std::shared_ptr parentNode, const DummyNode& node
+ QGraphicsView* view, std::shared_ptr parentNode, const DummyNode& node, bool multipleActive
){
if (!node.visible)
{
@@ -345,6 +351,7 @@ std::shared_ptr QtGraphView::createNodeRecursive(
newNode->setPosition(node.position);
newNode->setSize(node.size);
newNode->setIsActive(node.active);
+ newNode->setMultipleActive(multipleActive);
newNode->addComponent(std::make_shared(newNode));
@@ -361,7 +368,7 @@ std::shared_ptr QtGraphView::createNodeRecursive(
for (unsigned int i = 0; i < node.subNodes.size(); i++)
{
- std::shared_ptr subNode = createNodeRecursive(view, newNode, node.subNodes[i]);
+ std::shared_ptr subNode = createNodeRecursive(view, newNode, node.subNodes[i], multipleActive);
if (subNode)
{
newNode->addSubNode(subNode);
diff --git a/src/lib_gui/qt/view/QtGraphView.h b/src/lib_gui/qt/view/QtGraphView.h
index 38b799c9..ebdd7eaa 100644
--- a/src/lib_gui/qt/view/QtGraphView.h
+++ b/src/lib_gui/qt/view/QtGraphView.h
@@ -79,7 +79,7 @@ private:
std::shared_ptr findNodeRecursive(const std::list>& nodes, Id tokenId);
std::shared_ptr createNodeRecursive(
- QGraphicsView* view, std::shared_ptr parentNode, const DummyNode& node);
+ QGraphicsView* view, std::shared_ptr parentNode, const DummyNode& node, bool multipleActive);
std::shared_ptr createEdge(QGraphicsView* view, const DummyEdge& edge);
QRectF itemsBoundingRect(const std::list>& items) const;
diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp
index b2248944..148ff385 100644
--- a/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp
+++ b/src/lib_gui/qt/view/graphElements/QtGraphNode.cpp
@@ -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();
diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNode.h b/src/lib_gui/qt/view/graphElements/QtGraphNode.h
index ec330ae5..312ac7d0 100644
--- a/src/lib_gui/qt/view/graphElements/QtGraphNode.h
+++ b/src/lib_gui/qt/view/graphElements/QtGraphNode.h
@@ -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:
diff --git a/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp b/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp
index d6680316..4056f696 100644
--- a/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp
+++ b/src/lib_gui/qt/view/graphElements/QtGraphNodeData.cpp
@@ -55,7 +55,7 @@ Id QtGraphNodeData::getTokenId() const
void QtGraphNodeData::onClick()
{
- if (m_isActive)
+ if (m_isActive && !m_multipleActive)
{
MessageDeactivateEdge().dispatch();
return;