From d9aea9eb3c1c568eaa23e22f218a46c3eed3f162 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Tue, 16 Sep 2025 17:40:02 +0200 Subject: [PATCH] REPLines: Fix undo commands. --- src/Model/Tools/PamhyrListExt.py | 9 ++++++--- src/View/REPLines/List.py | 18 +++++++++++++++++- src/View/REPLines/UndoCommand.py | 13 ++++++------- 3 files changed, 29 insertions(+), 11 deletions(-) diff --git a/src/Model/Tools/PamhyrListExt.py b/src/Model/Tools/PamhyrListExt.py index 18796590..c45f0942 100644 --- a/src/Model/Tools/PamhyrListExt.py +++ b/src/Model/Tools/PamhyrListExt.py @@ -83,7 +83,7 @@ class PamhyrModelList(SQLSubModel): return self.lst.index(el) def get(self, index): - if len(self._lst) == 0: + if len(self.lst) <= index : return None return self.lst[index] @@ -122,7 +122,10 @@ class PamhyrModelList(SQLSubModel): raise NotImplementedMethodeError(self, self.new) def insert(self, index, new): - self._lst.insert(index, new) + if new in self._lst: + new.set_as_not_deleted() + else: + self._lst.insert(index, new) if self._status is not None: self._status.modified() @@ -165,7 +168,7 @@ class PamhyrModelList(SQLSubModel): lambda x: x[1], filter( lambda x: x[0] in indexes, - enumerate(self.lst) + enumerate(self._lst) ) ) ) diff --git a/src/View/REPLines/List.py b/src/View/REPLines/List.py index 1c6cb119..31ea8b91 100644 --- a/src/View/REPLines/List.py +++ b/src/View/REPLines/List.py @@ -38,6 +38,19 @@ logger = logging.getLogger() class ListModel(PamhyrListModel): + def get_true_data_row(self, row): + el = self._data.get(row) + + return next( + map( + lambda e: e[0], + filter( + lambda e: e[1] == el, + enumerate(self._data._lst) + ) + ), 0 + ) + def data(self, index, role): row = index.row() column = index.column() @@ -65,17 +78,20 @@ class ListModel(PamhyrListModel): return QVariant() def add(self, row): + row = self.get_true_data_row(row) + self._undo.push( AddCommand( self._data, row ) ) + self.update() def delete(self, row): self._undo.push( DelCommand( - self._data, row + self._data, self._data.lines[row] ) ) self.update() diff --git a/src/View/REPLines/UndoCommand.py b/src/View/REPLines/UndoCommand.py index 13b672db..cb783bf6 100644 --- a/src/View/REPLines/UndoCommand.py +++ b/src/View/REPLines/UndoCommand.py @@ -58,25 +58,24 @@ class AddCommand(QUndoCommand): self._new = None def undo(self): - self._lines.delete([self._new]) + self._new.set_as_deleted() def redo(self): if self._new is None: self._new = self._lines.new(self._row) else: - self._lines.insert(self._row, self._new) + self._new.set_as_not_deleted() class DelCommand(QUndoCommand): - def __init__(self, lines, row): + def __init__(self, lines, data): QUndoCommand.__init__(self) self._lines = lines - self._row = row - self._old = self._lines.get(row) + self._data = data def undo(self): - self._lines.insert(self._row, self._old) + self._data.set_as_not_deleted() def redo(self): - self._lines.delete_i([self._row]) + self._data.set_as_deleted()