Skip to content

Commit

Permalink
Double clicking Hadamard edge turns it into H-box in proof mode
Browse files Browse the repository at this point in the history
  • Loading branch information
jvdwetering committed Oct 22, 2024
1 parent 16fca56 commit 8bf31d5
Show file tree
Hide file tree
Showing 3 changed files with 20 additions and 1 deletion.
9 changes: 9 additions & 0 deletions zxlive/eitem.py
Original file line number Diff line number Diff line change
Expand Up @@ -161,6 +161,15 @@ def mouseReleaseEvent(self, e: QGraphicsSceneMouseEvent) -> None:
self.is_mouse_pressed = False
self.graph_scene.selection_changed_custom.emit()

def mouseDoubleClickEvent(self, e: QGraphicsSceneMouseEvent) -> None:
super().mouseDoubleClickEvent(e)
if self.is_animated:
e.ignore()
return
scene = self.scene()
if TYPE_CHECKING: assert isinstance(scene, GraphScene)
scene.edge_double_clicked.emit(self.e)



# TODO: This is essentially a clone of EItem. We should common it up!
Expand Down
1 change: 1 addition & 0 deletions zxlive/graphscene.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@ 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)
edge_double_clicked = Signal(object) # Actual type: ET

selection_changed_custom = Signal()

Expand Down
11 changes: 10 additions & 1 deletion zxlive/proof_panel.py
Original file line number Diff line number Diff line change
Expand Up @@ -38,6 +38,7 @@ def __init__(self, graph: GraphT, *actions: QAction) -> None:
self.graph_scene = GraphScene()
self.graph_scene.vertices_moved.connect(self._vert_moved)
self.graph_scene.vertex_double_clicked.connect(self._vert_double_clicked)
self.graph_scene.edge_double_clicked.connect(self._edge_double_clicked)

self.graph_view = ProofGraphView(self.graph_scene)
self.splitter.addWidget(self.graph_view)
Expand Down Expand Up @@ -421,4 +422,12 @@ def _vert_double_clicked(self, v: VT) -> None:
pyzx.hrules.replace_hadamard(new_g, v)
cmd = AddRewriteStep(self.graph_view, new_g, self.step_view, "Turn Hadamard into edge")
self.undo_stack.push(cmd)
return
return

def _edge_double_clicked(self, e: VT) -> None:
"""When an edge is double clicked, we change it to an H-box if it is a Hadamard edge."""
new_g = copy.deepcopy(self.graph)
if new_g.edge_type(e) == EdgeType.HADAMARD:
pyzx.hrules.had_edge_to_hbox(new_g, e)
cmd = AddRewriteStep(self.graph_view, new_g, self.step_view, "Turn edge into Hadamard")
self.undo_stack.push(cmd)

0 comments on commit 8bf31d5

Please sign in to comment.