From 29149f313ac70b9b74d90ed1e412445055924459 Mon Sep 17 00:00:00 2001 From: Eberhard Graether Date: Mon, 8 Feb 2016 03:39:08 +0100 Subject: [PATCH] logic: Added namespaces to overview and fixed namespace activation --- bin/app/data/color_schemes/bad_rainbow.xml | 16 +++++++++--- bin/app/data/color_schemes/bright.xml | 5 ++-- bin/app/data/color_schemes/dark.xml | 5 ++-- .../component/controller/CodeController.cpp | 26 ++++++++++++------- .../component/controller/GraphController.cpp | 19 ++++++++++++-- .../component/controller/GraphController.h | 1 + .../component/controller/SearchController.cpp | 5 +++- .../helper/ActivationTranslator.cpp | 14 +++++++--- .../component/controller/helper/DummyNode.h | 17 ++++++++++++ src/lib/component/view/CodeView.h | 2 ++ src/lib/component/view/GraphViewStyle.cpp | 17 ++---------- src/lib/data/Storage.cpp | 19 +++++++++++--- src/lib/data/Storage.h | 2 +- src/lib/data/access/StorageAccess.h | 2 +- src/lib/data/access/StorageAccessProxy.cpp | 4 +-- src/lib/data/access/StorageAccessProxy.h | 2 +- .../messaging/type/MessageActivateTokens.h | 1 + src/lib_gui/qt/view/QtCodeView.cpp | 13 ++++++++++ src/lib_gui/qt/view/QtCodeView.h | 4 +++ src/lib_gui/qt/view/QtGraphView.cpp | 13 +++++++--- src/lib_gui/qt/view/QtGraphView.h | 2 +- .../qt/view/graphElements/QtGraphNode.cpp | 6 +++++ .../qt/view/graphElements/QtGraphNode.h | 2 ++ .../qt/view/graphElements/QtGraphNodeData.cpp | 2 +- 24 files changed, 147 insertions(+), 52 deletions(-) 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;