From becc1696cb39de35d2a392766ece27ceaf6ec2d9 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Tue, 16 Sep 2025 14:03:16 +0200 Subject: [PATCH] HS: Fix undo commands. --- src/Model/Tools/PamhyrListExt.py | 3 +++ src/View/HydraulicStructures/Table.py | 24 +++++++++++++++++++++ src/View/HydraulicStructures/UndoCommand.py | 14 ++++++------ 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/src/Model/Tools/PamhyrListExt.py b/src/Model/Tools/PamhyrListExt.py index 6d36aee9..18796590 100644 --- a/src/Model/Tools/PamhyrListExt.py +++ b/src/Model/Tools/PamhyrListExt.py @@ -83,6 +83,9 @@ class PamhyrModelList(SQLSubModel): return self.lst.index(el) def get(self, index): + if len(self._lst) == 0: + return None + return self.lst[index] def set(self, index, new): diff --git a/src/View/HydraulicStructures/Table.py b/src/View/HydraulicStructures/Table.py index 99ce3176..459b270c 100644 --- a/src/View/HydraulicStructures/Table.py +++ b/src/View/HydraulicStructures/Table.py @@ -127,6 +127,19 @@ class TableModel(PamhyrTableModel): def _setup_lst(self): self._lst = self._data._hydraulic_structures + def get_true_data_row(self, row): + hs = self._lst.get(row) + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == hs, + enumerate(self._lst._lst) + ) + ), 0 + ) + def rowCount(self, parent): return len(self._lst) @@ -195,6 +208,8 @@ class TableModel(PamhyrTableModel): def add(self, row, parent=QModelIndex()): self.beginInsertRows(parent, row, row - 1) + row = self.get_true_data_row(row) + self._undo.push( AddCommand( self._lst, row @@ -207,6 +222,13 @@ class TableModel(PamhyrTableModel): def delete(self, rows, parent=QModelIndex()): self.beginRemoveRows(parent, rows[0], rows[-1]) + rows = list( + map( + lambda r: self.get_true_data_row(r), + rows + ) + ) + self._undo.push( DelCommand( self._lst, rows @@ -217,6 +239,8 @@ class TableModel(PamhyrTableModel): self.layoutChanged.emit() def enabled(self, row, enabled, parent=QModelIndex()): + row = self.get_true_data_row(row) + self._undo.push( SetEnabledCommand( self._lst, row, enabled diff --git a/src/View/HydraulicStructures/UndoCommand.py b/src/View/HydraulicStructures/UndoCommand.py index daa9e71b..471be746 100644 --- a/src/View/HydraulicStructures/UndoCommand.py +++ b/src/View/HydraulicStructures/UndoCommand.py @@ -110,13 +110,13 @@ class AddCommand(QUndoCommand): self._new = None def undo(self): - self._h_s_lst.delete_i([self._index]) + self._new.set_as_deleted() def redo(self): if self._new is None: self._new = self._h_s_lst.new(self._h_s_lst, self._index) else: - self._h_s_lst.undelete([self._new]) + self._new.set_as_not_deleted() class DelCommand(QUndoCommand): @@ -124,19 +124,19 @@ class DelCommand(QUndoCommand): QUndoCommand.__init__(self) self._h_s_lst = h_s_lst - self._rows = rows self._h_s = [] for row in rows: - self._h_s.append(self._h_s_lst.get(row)) - self._h_s.sort() + self._h_s.append(self._h_s_lst._lst[row]) def undo(self): - self._h_s_lst.undelete(self._h_s) + for hs in self._h_s: + hs.set_as_not_deleted() def redo(self): - self._h_s_lst.delete_i(self._rows) + for hs in self._h_s: + hs.set_as_deleted() class PasteCommand(QUndoCommand):