diff --git a/zxlive/graphscene.py b/zxlive/graphscene.py index 98dae4a1..e809c65a 100644 --- a/zxlive/graphscene.py +++ b/zxlive/graphscene.py @@ -50,6 +50,8 @@ class GraphScene(QGraphicsScene): # Triggers when an edge is dragged. Actual types: EItem, float (old curve_distance), float (new curve_distance) edge_dragged = Signal(object, object, object) + selection_changed_custom = Signal() + def __init__(self) -> None: super().__init__() self.setSceneRect(0, 0, 2*OFFSET_X, 2*OFFSET_Y) @@ -74,6 +76,7 @@ def select_vertices(self, vs: Iterable[VT]) -> None: if isinstance(it, VItem) and it.v in vs: it.setSelected(True) vs.remove(it.v) + self.selection_changed_custom.emit() def set_graph(self, g: GraphT) -> None: """Set the PyZX graph for the scene. @@ -218,6 +221,7 @@ def select_all(self) -> None: """Selects all vertices and edges in the scene.""" for it in self.items(): it.setSelected(True) + self.selection_changed_custom.emit() class EditGraphScene(GraphScene): diff --git a/zxlive/graphview.py b/zxlive/graphview.py index f94734ff..3ceb7dd6 100644 --- a/zxlive/graphview.py +++ b/zxlive/graphview.py @@ -184,6 +184,7 @@ def mouseReleaseEvent(self, e: QMouseEvent) -> None: items = [it for it in self.graph_scene.items(self.mapToScene(rect).boundingRect()) if isinstance(it, VItem)] for it in items: it.setSelected(not (len(items) == 1 or e.modifiers() & Qt.KeyboardModifier.ShiftModifier) or not it.isSelected()) + self.graph_scene.selection_changed_custom.emit() elif self.tool == GraphTool.MagicWand: if self.wand_trace is not None: if not (e.modifiers() & Qt.KeyboardModifier.ShiftModifier): diff --git a/zxlive/proof_panel.py b/zxlive/proof_panel.py index 56b31103..dc24964e 100644 --- a/zxlive/proof_panel.py +++ b/zxlive/proof_panel.py @@ -420,7 +420,7 @@ def _refresh_rewrites_model(self) -> None: self.rewrites_panel.setModel(model) self.rewrites_panel.clicked.connect(model.do_rewrite) # TODO: Right now this calls for every single vertex selected, even if we select many at the same time - self.graph_scene.selectionChanged.connect(lambda: model.executor.submit(model.update_on_selection)) + self.graph_scene.selection_changed_custom.connect(lambda: model.executor.submit(model.update_on_selection)) class ProofStepItemDelegate(QStyledItemDelegate):