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