AddFile: Fix undo commands.

scenarios
Pierre-Antoine 2025-09-18 10:45:31 +02:00
parent d9aea9eb3c
commit e2e8c5ec9e
2 changed files with 23 additions and 11 deletions

View File

@ -38,6 +38,20 @@ logger = logging.getLogger()
class ListModel(PamhyrListModel): 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): def data(self, index, role):
row = index.row() row = index.row()
column = index.column() column = index.column()
@ -65,6 +79,8 @@ class ListModel(PamhyrListModel):
return QVariant() return QVariant()
def add(self, row): def add(self, row):
row = self.get_true_data_row(row)
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._data, row self._data, row
@ -75,7 +91,7 @@ class ListModel(PamhyrListModel):
def delete(self, row): def delete(self, row):
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._data, row self._data, self._data.files[row]
) )
) )
self.update() self.update()

View File

@ -58,27 +58,23 @@ class AddCommand(QUndoCommand):
self._new = None self._new = None
def undo(self): def undo(self):
self._files.delete([self._new]) self._new.set_as_deleted()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
self._new = self._files.new(self._row) self._new = self._files.new(self._row)
else: else:
self._files.undelete([self._new]) self._new.set_as_not_deleted()
# self._files.insert(self._row, self._new)
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, files, row): def __init__(self, files, line):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._files = files self._files = files
self._row = row self._line = line
self._old = self._files.get(row)
def undo(self): def undo(self):
self._files.undelete([self._old]) self._line.set_as_not_deleted()
# self._files.insert(self._row, self._old)
def redo(self): def redo(self):
self._files.delete_i([self._row]) self._line.set_as_deleted()