From ea483e4d1e4d348f97e66b4d82b08f42d08b541b Mon Sep 17 00:00:00 2001
From: Pierre-Antoine Rouby <pierre-antoine.rouby@inrae.fr>
Date: Thu, 20 Apr 2023 11:27:21 +0200
Subject: [PATCH] geometry: Fix sort undo command.

---
 src/Model/Geometry/Reach.py           |  1 +
 src/View/Geometry/ReachUndoCommand.py | 17 ++++++++---------
 src/View/Geometry/qtableview_reach.py |  9 ++++++---
 3 files changed, 15 insertions(+), 12 deletions(-)

diff --git a/src/Model/Geometry/Reach.py b/src/Model/Geometry/Reach.py
index 9c113582..ad82d3c8 100644
--- a/src/Model/Geometry/Reach.py
+++ b/src/Model/Geometry/Reach.py
@@ -284,6 +284,7 @@ class Reach:
             reverse=is_reversed
         )
 
+    @trace
     @timer
     def sort_with_indexes(self, indexes: list):
         if len(self._profiles) != len(indexes):
diff --git a/src/View/Geometry/ReachUndoCommand.py b/src/View/Geometry/ReachUndoCommand.py
index 1c1171c0..a96b71eb 100644
--- a/src/View/Geometry/ReachUndoCommand.py
+++ b/src/View/Geometry/ReachUndoCommand.py
@@ -61,26 +61,25 @@ class DelCommand(QUndoCommand):
         self._reach.delete([self._index])
 
 class SortCommand(QUndoCommand):
-    @timer
-    def __init__(self, reach, old, new):
+    def __init__(self, reach, _reverse):
         QUndoCommand.__init__(self)
 
         self._reach = reach
+        self._reverse = _reverse
+
+        old = self._reach.profiles
+        self._reach.sort(self._reverse)
+        new = self._reach.profiles
+
         self._indexes = list(
             map(
                 lambda p: old.index(p),
                 new
             )
         )
-        self._rindexes = list(
-            map(
-                lambda p: new.index(p),
-                old
-            )
-        )
 
     def undo(self):
         self._reach.sort_with_indexes(self._indexes)
 
     def redo(self):
-        self._reach.sort_with_indexes(self._rindexes)
+        self._reach.sort(self._reverse)
diff --git a/src/View/Geometry/qtableview_reach.py b/src/View/Geometry/qtableview_reach.py
index ea931d74..1c5a6c4d 100644
--- a/src/View/Geometry/qtableview_reach.py
+++ b/src/View/Geometry/qtableview_reach.py
@@ -103,7 +103,6 @@ class PandasModelEditable(QAbstractTableModel):
                         value
                     )
                 )
-                self._reach.profile(index.row()).name = value
 
             if index.column() == 1:
                 self._undo_stack.push(
@@ -113,7 +112,6 @@ class PandasModelEditable(QAbstractTableModel):
                         value
                     )
                 )
-                self._reach.profile(index.row()).kp = value
 
             self.dataChanged.emit(index, index)
             self.layoutChanged.emit()
@@ -160,10 +158,15 @@ class PandasModelEditable(QAbstractTableModel):
         self.endRemoveRows()
         self.layoutChanged.emit()
 
+    @trace
     def sort_profiles(self, _reverse):
         self.layoutAboutToBeChanged.emit()
 
-        self._reach.sort(_reverse)
+        self._undo_stack.push(
+            SortCommand(
+                self._reach, _reverse
+            )
+        )
 
         self.layoutAboutToBeChanged.emit()
         self.layoutChanged.emit()
-- 
GitLab