From 4cddd43f5a46e54ee6e04763cf7f8d3e46309055 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Tue, 16 Sep 2025 15:02:17 +0200 Subject: [PATCH] BHS: Fix undo commands. --- .../HydraulicStructures.py | 3 ++ src/View/BoundaryCondition/Edit/Table.py | 3 +- .../BasicHydraulicStructures/Table.py | 37 +++++++++++++++++++ .../BasicHydraulicStructures/UndoCommand.py | 14 +++---- 4 files changed, 49 insertions(+), 8 deletions(-) diff --git a/src/Model/HydraulicStructures/HydraulicStructures.py b/src/Model/HydraulicStructures/HydraulicStructures.py index 28449e87..e8eb08c3 100644 --- a/src/Model/HydraulicStructures/HydraulicStructures.py +++ b/src/Model/HydraulicStructures/HydraulicStructures.py @@ -425,6 +425,9 @@ class HydraulicStructure(SQLSubModel): return self.lst.copy() def basic_structure(self, index: int): + if len(self._data) == 0: + return None + return self.lst[index] def add(self, index: int): diff --git a/src/View/BoundaryCondition/Edit/Table.py b/src/View/BoundaryCondition/Edit/Table.py index 3ba1d492..597e693e 100644 --- a/src/View/BoundaryCondition/Edit/Table.py +++ b/src/View/BoundaryCondition/Edit/Table.py @@ -135,7 +135,8 @@ class TableModel(PamhyrTableModel): self.beginRemoveRows(parent, rows[0], rows[-1]) rows = list(map( - lambda r: self.get_true_data_row(r), rows)) + lambda r: self.get_true_data_row(r), + rows)) self._undo.push( DelCommand( diff --git a/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py b/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py index 8b7283fe..e0d894b2 100644 --- a/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py +++ b/src/View/HydraulicStructures/BasicHydraulicStructures/Table.py @@ -104,6 +104,19 @@ class TableModel(PamhyrTableModel): super(TableModel, self).__init__(trad=trad, **kwargs) + def get_true_data_row(self, row): + hs = self._data.basic_structure(row) + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == hs, + enumerate(self._data.basic_structures) + ) + ), 0 + ) + def rowCount(self, parent): return len(self._lst) @@ -170,6 +183,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._data, row @@ -182,6 +197,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._data, rows @@ -192,6 +214,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 @@ -220,6 +244,19 @@ class ParametersTableModel(PamhyrTableModel): super(ParametersTableModel, self).__init__(trad=trad, **kwargs) + def get_true_data_row(self, row): + par = self._lst.get(row) + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == par, + enumerate(self._lst._lst) + ) + ), 0 + ) + def rowCount(self, parent): if self._hs_index is None: return 0 diff --git a/src/View/HydraulicStructures/BasicHydraulicStructures/UndoCommand.py b/src/View/HydraulicStructures/BasicHydraulicStructures/UndoCommand.py index c876115e..69a46547 100644 --- a/src/View/HydraulicStructures/BasicHydraulicStructures/UndoCommand.py +++ b/src/View/HydraulicStructures/BasicHydraulicStructures/UndoCommand.py @@ -86,13 +86,13 @@ class AddCommand(QUndoCommand): self._new = None def undo(self): - self._hs.delete_i([self._index]) + self._new.set_as_deleted() def redo(self): if self._new is None: self._new = self._hs.add(self._index) else: - self._hs.insert(self._index, self._new) + self._new.set_as_not_deleted() class DelCommand(QUndoCommand): @@ -100,19 +100,19 @@ class DelCommand(QUndoCommand): QUndoCommand.__init__(self) self._hs = hs - self._rows = rows self._bhs = [] for row in rows: - self._bhs.append((row, self._hs.basic_structure(row))) + self._bhs.append(self._hs.basic_structure(row)) def undo(self): - for row, el in self._bhs: - self._hs.insert(row, el) + for el in self._bhs: + el.set_as_not_deleted() def redo(self): - self._hs.delete_i(self._rows) + for el in self._bhs: + el.set_as_deleted() class PasteCommand(QUndoCommand):