From 454b5049d2f88c73d697e787b666f36f6eecd248 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr> Date: Thu, 8 Jun 2023 15:45:13 +0200 Subject: [PATCH] Network: Propagate undo stack. --- src/View/Network/GraphWidget.py | 3 ++- src/View/Network/Window.py | 42 +++++++++++++++++++++++---------- 2 files changed, 31 insertions(+), 14 deletions(-) diff --git a/src/View/Network/GraphWidget.py b/src/View/Network/GraphWidget.py index 2835ac7e..0971d851 100644 --- a/src/View/Network/GraphWidget.py +++ b/src/View/Network/GraphWidget.py @@ -263,13 +263,14 @@ class GraphWidget(QGraphicsView): def __init__(self, graph, parent=None, min_size=(400, 400), max_size=None, - size=None, only_display=False): + size=None, only_display=False, undo = None): super(GraphWidget, self).__init__(parent=parent) self.timerId = 0 self.parent = parent self._state = "move" self._only_display = only_display + self._undo = undo self.graph = graph diff --git a/src/View/Network/Window.py b/src/View/Network/Window.py index 01d08417..f3df8c15 100644 --- a/src/View/Network/Window.py +++ b/src/View/Network/Window.py @@ -49,20 +49,18 @@ class NetworkWindow(ASubMainWindow): self.undo_sc = QShortcut(QKeySequence.Undo, self) self.redo_sc = QShortcut(QKeySequence.Redo, self) - self.copy_sc = QShortcut(QKeySequence.Copy, self) - self.paste_sc = QShortcut(QKeySequence.Paste, self) def setup_table(self): # Nodes table - self.nodes_model = GraphTableModel( + self._nodes_model = GraphTableModel( headers = ["name", "type"], graph = self._graph, rows_type = "nodes", undo = self._undo_stack, ) table = self.find(QTableView, "tableView_nodes") - table.setModel(self.nodes_model) + table.setModel(self._nodes_model) #table.resizeColumnsToContents() table.setSelectionBehavior(QAbstractItemView.SelectRows) @@ -70,7 +68,7 @@ class NetworkWindow(ASubMainWindow): # Edges table - self.reachs_model = GraphTableModel( + self._reachs_model = GraphTableModel( headers = ["name", "enable", "node1", "node2"], graph = self._graph, rows_type = "edges", @@ -85,7 +83,7 @@ class NetworkWindow(ASubMainWindow): ) table = self.find(QTableView, "tableView_reachs") - table.setModel(self.reachs_model) + table.setModel(self._reachs_model) table.setItemDelegateForColumn(1, self.delegate_true_false_combobox) table.setItemDelegateForColumn(2, self.delegate_combobox) table.setItemDelegateForColumn(3, self.delegate_combobox) @@ -94,17 +92,20 @@ class NetworkWindow(ASubMainWindow): #table.resizeColumnsToContents() def setup_graph(self): - self._graph_widget = GraphWidget(self._graph, parent=self) + self._graph_widget = GraphWidget( + self._graph, parent=self, + undo = self._undo_stack + ) self._graph_layout = self.find(QHBoxLayout, "horizontalLayout_graph") self._graph_layout.addWidget(self._graph_widget) def setup_connections(self): - self.nodes_model.dataChanged.connect(self.reachs_model.update) - self.nodes_model.dataChanged.connect(self._graph_widget.rename_nodes) - self.reachs_model.dataChanged.connect(self._graph_widget.display_update) - self.reachs_model.dataChanged.connect(self.nodes_model.update) - self._graph_widget.changeEdge.connect(self.reachs_model.update) - self._graph_widget.changeNode.connect(self.nodes_model.update) + self._nodes_model.dataChanged.connect(self._reachs_model.update) + self._nodes_model.dataChanged.connect(self._graph_widget.rename_nodes) + self._reachs_model.dataChanged.connect(self._graph_widget.display_update) + self._reachs_model.dataChanged.connect(self._nodes_model.update) + self._graph_widget.changeEdge.connect(self._reachs_model.update) + self._graph_widget.changeNode.connect(self._nodes_model.update) self.find(QAction, "action_toolBar_add").setCheckable(True) self.find(QAction, "action_toolBar_add").triggered.connect( @@ -116,6 +117,9 @@ class NetworkWindow(ASubMainWindow): self.clicked_del ) + self.undo_sc.activated.connect(self.undo) + self.redo_sc.activated.connect(self.redo) + def clicked_add(self): if self.get_action_checkable("action_toolBar_add"): self.set_action_checkable("action_toolBar_del", False) @@ -135,3 +139,15 @@ class NetworkWindow(ASubMainWindow): if key == Qt.Key_Escape: self._graph_widget.reset_selection + + def undo(self): + self._undo_stack.undo() + self._reachs_model.update() + self._nodes_model.update() + self._graph_widget.display_update() + + def redo(self): + self._undo_stack.redo() + self._reachs_model.update() + self._nodes_model.update() + self._graph_widget.display_update() -- GitLab