From 05f3f0fc7e58d2577e8d65058f6a4461141a7593 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Tue, 9 Sep 2025 10:44:40 +0200 Subject: [PATCH] Reservoir: Fix index for add and delete undo command. --- src/View/Reservoir/Table.py | 24 +++++++++++-- src/View/Reservoir/UndoCommand.py | 59 ++++++++++++++++--------------- 2 files changed, 53 insertions(+), 30 deletions(-) diff --git a/src/View/Reservoir/Table.py b/src/View/Reservoir/Table.py index a99bf44f..c9b560d2 100644 --- a/src/View/Reservoir/Table.py +++ b/src/View/Reservoir/Table.py @@ -38,7 +38,7 @@ from View.Tools.PamhyrTable import PamhyrTableModel from View.Reservoir.UndoCommand import ( SetNameCommand, SetNodeCommand, - AddCommand, DelCommand, PasteCommand, + AddCommand, DelCommand, ) logger = logging.getLogger() @@ -103,6 +103,19 @@ class TableModel(PamhyrTableModel): def _setup_lst(self): self._lst = self._data.reservoir + def get_true_data_row(self, row): + resvervoir = self._lst.get(row) + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == resvervoir, + enumerate(self._lst.lst) + ) + ), 0 + ) + def rowCount(self, parent): return len(self._lst) @@ -153,6 +166,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 @@ -167,7 +182,12 @@ class TableModel(PamhyrTableModel): self._undo.push( DelCommand( - self._lst, rows + self._lst, list( + map( + lambda r: self._lst.get(r), + rows + ) + ) ) ) diff --git a/src/View/Reservoir/UndoCommand.py b/src/View/Reservoir/UndoCommand.py index d4c54186..97150424 100644 --- a/src/View/Reservoir/UndoCommand.py +++ b/src/View/Reservoir/UndoCommand.py @@ -76,7 +76,8 @@ class AddCommand(QUndoCommand): self._new = None def undo(self): - self._reservoir_lst.delete_i([self._index]) + self._new.set_as_deleted() + self._reservoir_lst.modified() def redo(self): if self._new is None: @@ -84,6 +85,8 @@ class AddCommand(QUndoCommand): else: self._reservoir_lst.insert(self._index, self._new) + self._reservoir_lst.modified() + class AddAndAssociateCommand(QUndoCommand): def __init__(self, reservoir_lst, index, node): @@ -96,7 +99,8 @@ class AddAndAssociateCommand(QUndoCommand): self._node = node def undo(self): - self._reservoir_lst.delete_i([self._index]) + self._reservoir_lst.delete(self._new) + self._reservoir_lst.modified() def redo(self): if self._new is None: @@ -105,45 +109,44 @@ class AddAndAssociateCommand(QUndoCommand): self._reservoir_lst.insert(self._index, self._new) self._reservoir_lst.get(self._index).node = self._node + self._reservoir_lst.modified() class DelCommand(QUndoCommand): - def __init__(self, reservoir_lst, rows): + def __init__(self, reservoir_lst, reservoirs): QUndoCommand.__init__(self) self._reservoir_lst = reservoir_lst - - self._rows = rows - - self._reservoir = [] - for row in rows: - self._reservoir.append((row, self._reservoir_lst.get(row))) - self._reservoir.sort() + self._reservoirs = reservoirs def undo(self): - for row, el in self._reservoir: - self._reservoir_lst.insert(row, el) + for reservoir in self._reservoirs: + reservoir.set_as_not_deleted() + + self._reservoir_lst.modified() def redo(self): - self._reservoir_lst.delete_i(self._rows) + for reservoir in self._reservoirs: + reservoir.set_as_deleted() + self._reservoir_lst.modified() -class PasteCommand(QUndoCommand): - def __init__(self, reservoir_lst, row, reservoir): - QUndoCommand.__init__(self) +# class PasteCommand(QUndoCommand): +# def __init__(self, reservoir_lst, row, reservoir): +# QUndoCommand.__init__(self) - self._reservoir_lst = reservoir_lst +# self._reservoir_lst = reservoir_lst - self._row = row - self._reservoir = deepcopy(reservoir) - self._reservoir.reverse() +# self._row = row +# self._reservoir = deepcopy(reservoir) +# self._reservoir.reverse() - def undo(self): - self._reservoir_lst.delete_i( - self._tab, - range(self._row, self._row + len(self._reservoir)) - ) +# def undo(self): +# self._reservoir_lst.delete_i( +# self._tab, +# range(self._row, self._row + len(self._reservoir)) +# ) - def redo(self): - for r in self._reservoir: - self._reservoir_lst.insert(self._row, r) +# def redo(self): +# for r in self._reservoir: +# self._reservoir_lst.insert(self._row, r)