diff --git a/src/qanGraph.cpp b/src/qanGraph.cpp index dcfdb65e..11e41859 100644 --- a/src/qanGraph.cpp +++ b/src/qanGraph.cpp @@ -1281,8 +1281,14 @@ void addToSelectionImpl(QPointer primitive, } } -void Graph::addToSelection(qan::Node& node) { addToSelectionImpl(QPointer(&node), _selectedNodes, *this); } -void Graph::addToSelection(qan::Group& group) { addToSelectionImpl(&group, _selectedGroups, *this); } +void Graph::addToSelection(qan::Node& node) { + addToSelectionImpl(QPointer(&node), _selectedNodes, *this); + emit selectionChanged(); +} +void Graph::addToSelection(qan::Group& group) { + addToSelectionImpl(&group, _selectedGroups, *this); + emit selectionChanged(); +} void Graph::addToSelection(qan::Edge& edge) { // Note 20221002: Do not use addToSelectionImpl<>() since it has no support for QVector> @@ -1295,6 +1301,7 @@ void Graph::addToSelection(qan::Edge& edge) edge.getItem()->setSelectionItem(createSelectionItem(edge.getItem())); // Safe, any argument might be nullptr // Note 20220329: primitive.getItem()->configureSelectionItem() is called from setSelectionItem() } + emit selectionChanged(); } } @@ -1306,8 +1313,14 @@ void removeFromSelectionImpl(QPointer primitive, selectedPrimitives.removeAll(primitive.data()); } -void Graph::removeFromSelection(qan::Node& node) { removeFromSelectionImpl(&node, _selectedNodes); } -void Graph::removeFromSelection(qan::Group& group) { removeFromSelectionImpl(&group, _selectedGroups); } +void Graph::removeFromSelection(qan::Node& node) { + removeFromSelectionImpl(&node, _selectedNodes); + emit selectionChanged(); +} +void Graph::removeFromSelection(qan::Group& group) { + removeFromSelectionImpl(&group, _selectedGroups); + emit selectionChanged(); +} // Note: Called from void Graph::removeFromSelection(QQuickItem* item) { @@ -1315,16 +1328,19 @@ void Graph::removeFromSelection(QQuickItem* item) { if (nodeItem != nullptr && nodeItem->getNode() != nullptr) { _selectedNodes.removeAll(nodeItem->getNode()); + emit selectionChanged(); } else { const auto groupItem = qobject_cast(item); if (groupItem != nullptr && groupItem->getGroup() != nullptr) { _selectedGroups.removeAll(groupItem->getGroup()); + emit selectionChanged(); } else { const auto edgeItem = qobject_cast(item); if (edgeItem != nullptr && edgeItem->getEdge() != nullptr) { _selectedEdges.removeAll(edgeItem->getEdge()); + emit selectionChanged(); } } } @@ -1336,6 +1352,7 @@ void Graph::selectAll() if (node != nullptr) selectNode(*node, Qt::ControlModifier); } + emit selectionChanged(); } void Graph::removeSelection() @@ -1399,6 +1416,8 @@ void Graph::clearSelection() edge->getItem() != nullptr) edge->getItem()->setSelected(false); _selectedEdges.clear(); + + emit selectionChanged(); } bool Graph::hasSelection() const diff --git a/src/qanGraph.h b/src/qanGraph.h index 9d7e2855..874e75e3 100644 --- a/src/qanGraph.h +++ b/src/qanGraph.h @@ -781,6 +781,8 @@ class Graph : public gtpo::graph SelectedNodes _selectedNodes; signals: void selectedNodesChanged(); + //! Emitted whenever nodes/groups/edge selection change. + void selectionChanged(); public: using SelectedGroups = qcm::Container>;