LC: Fix undo commands.

scenarios
Pierre-Antoine 2025-09-16 11:07:56 +02:00
parent 794b06d55a
commit cf4957551f
3 changed files with 41 additions and 11 deletions

View File

@ -284,6 +284,9 @@ class PamhyrModelListWithTab(SQLSubModel):
self._status.modified() self._status.modified()
def get(self, lst, index): def get(self, lst, index):
if len(self.get_tab(lst)) == 0:
return None
return self.get_tab(lst)[index] return self.get_tab(lst)[index]
def new(self, lst, index): def new(self, lst, index):

View File

@ -150,6 +150,19 @@ class TableModel(PamhyrTableModel):
self._tab = self._opt_data self._tab = self._opt_data
self._long_types = self._trad.get_dict("long_types") self._long_types = self._trad.get_dict("long_types")
def get_true_data_row(self, row):
lc = self._lst.get(self._tab, row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == lc,
enumerate(self._lst.get_tab(self._tab))
)
), 0
)
def rowCount(self, parent): def rowCount(self, parent):
return self._lst.len(self._tab) return self._lst.len(self._tab)
@ -227,6 +240,8 @@ class TableModel(PamhyrTableModel):
def add(self, row, parent=QModelIndex()): def add(self, row, parent=QModelIndex()):
self.beginInsertRows(parent, row, row - 1) self.beginInsertRows(parent, row, row - 1)
row = self.get_true_data_row(row)
self._undo.push( self._undo.push(
AddCommand( AddCommand(
self._lst, self._tab, row self._lst, self._tab, row
@ -239,6 +254,13 @@ class TableModel(PamhyrTableModel):
def delete(self, rows, parent=QModelIndex()): def delete(self, rows, parent=QModelIndex()):
self.beginRemoveRows(parent, rows[0], rows[-1]) self.beginRemoveRows(parent, rows[0], rows[-1])
rows = list(
map(
lambda r: self.get_true_data_row(r),
rows
)
)
self._undo.push( self._undo.push(
DelCommand( DelCommand(
self._lst, self._tab, rows self._lst, self._tab, rows
@ -264,10 +286,12 @@ class TableModel(PamhyrTableModel):
if row <= 0: if row <= 0:
return return
target = row + 2 target = row + 1
self.beginMoveRows(parent, row - 1, row - 1, parent, target) self.beginMoveRows(parent, row - 1, row - 1, parent, target)
row = self.get_true_data_row(row)
self._undo_stack.push( self._undo_stack.push(
MoveCommand( MoveCommand(
self._lst, self._tab, "up", row self._lst, self._tab, "up", row
@ -285,6 +309,8 @@ class TableModel(PamhyrTableModel):
self.beginMoveRows(parent, row + 1, row + 1, parent, target) self.beginMoveRows(parent, row + 1, row + 1, parent, target)
row = self.get_true_data_row(row)
self._undo_stack.push( self._undo_stack.push(
MoveCommand( MoveCommand(
self._lst, self._tab, "down", row self._lst, self._tab, "down", row

View File

@ -126,14 +126,13 @@ class AddCommand(QUndoCommand):
self._new = None self._new = None
def undo(self): def undo(self):
self._lcs.delete_i(self._tab, [self._index]) self._new.set_as_deleted()
def redo(self): def redo(self):
if self._new is None: if self._new is None:
self._new = self._lcs.new(self._tab, self._index) self._new = self._lcs.new(self._tab, self._index)
else: else:
self._lcs.insert(self._tab, self._index, self._new) self._new.set_as_not_deleted()
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
def __init__(self, lcs, tab, rows): def __init__(self, lcs, tab, rows):
@ -145,15 +144,16 @@ class DelCommand(QUndoCommand):
self._bc = [] self._bc = []
for row in rows: for row in rows:
self._bc.append((row, self._lcs.get(self._tab, row))) self._bc.append(self._lcs.get_tab(self._tab)[row])
self._bc.sort() self._bc.sort()
def undo(self): def undo(self):
for row, el in self._bc: for el in self._bc:
self._lcs.insert(self._tab, row, el) el.set_as_not_deleted()
def redo(self): def redo(self):
self._lcs.delete_i(self._tab, self._rows) for el in self._bc:
el.set_as_deleted()
class SortCommand(QUndoCommand): class SortCommand(QUndoCommand):
@ -164,11 +164,11 @@ class SortCommand(QUndoCommand):
self._tab = tab self._tab = tab
self._reverse = _reverse self._reverse = _reverse
self._old = self._lcs.get_tab(self._tab) self._old = self._lcs._tabs[self._tab].copy()
self._indexes = None self._indexes = None
def undo(self): def undo(self):
ll = self._lcs.get_tab(self._tab) ll = self._lcs._tabs[self._tab].copy()
self._lcs.sort( self._lcs.sort(
self._tab, self._tab,
key=lambda x: self._indexes[ll.index(x)] key=lambda x: self._indexes[ll.index(x)]
@ -180,11 +180,12 @@ class SortCommand(QUndoCommand):
reverse=self._reverse, reverse=self._reverse,
key=lambda x: x.name key=lambda x: x.name
) )
if self._indexes is None: if self._indexes is None:
self._indexes = list( self._indexes = list(
map( map(
lambda p: self._old.index(p), lambda p: self._old.index(p),
self._lcs.get_tab(self._tab) self._lcs._tabs[self._tab]
) )
) )
self._old = None self._old = None