diff --git a/src/Model/Tools/PamhyrListExt.py b/src/Model/Tools/PamhyrListExt.py index c2bfb2da..6d36aee9 100644 --- a/src/Model/Tools/PamhyrListExt.py +++ b/src/Model/Tools/PamhyrListExt.py @@ -284,6 +284,9 @@ class PamhyrModelListWithTab(SQLSubModel): self._status.modified() def get(self, lst, index): + if len(self.get_tab(lst)) == 0: + return None + return self.get_tab(lst)[index] def new(self, lst, index): diff --git a/src/View/LateralContribution/Table.py b/src/View/LateralContribution/Table.py index b5083a46..6b3573c4 100644 --- a/src/View/LateralContribution/Table.py +++ b/src/View/LateralContribution/Table.py @@ -150,6 +150,19 @@ class TableModel(PamhyrTableModel): self._tab = self._opt_data 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): return self._lst.len(self._tab) @@ -227,6 +240,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, self._tab, row @@ -239,6 +254,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._lst, self._tab, rows @@ -264,10 +286,12 @@ class TableModel(PamhyrTableModel): if row <= 0: return - target = row + 2 + target = row + 1 self.beginMoveRows(parent, row - 1, row - 1, parent, target) + row = self.get_true_data_row(row) + self._undo_stack.push( MoveCommand( self._lst, self._tab, "up", row @@ -285,6 +309,8 @@ class TableModel(PamhyrTableModel): self.beginMoveRows(parent, row + 1, row + 1, parent, target) + row = self.get_true_data_row(row) + self._undo_stack.push( MoveCommand( self._lst, self._tab, "down", row diff --git a/src/View/LateralContribution/UndoCommand.py b/src/View/LateralContribution/UndoCommand.py index cda17cf3..61113525 100644 --- a/src/View/LateralContribution/UndoCommand.py +++ b/src/View/LateralContribution/UndoCommand.py @@ -126,14 +126,13 @@ class AddCommand(QUndoCommand): self._new = None def undo(self): - self._lcs.delete_i(self._tab, [self._index]) + self._new.set_as_deleted() def redo(self): if self._new is None: self._new = self._lcs.new(self._tab, self._index) else: - self._lcs.insert(self._tab, self._index, self._new) - + self._new.set_as_not_deleted() class DelCommand(QUndoCommand): def __init__(self, lcs, tab, rows): @@ -145,15 +144,16 @@ class DelCommand(QUndoCommand): self._bc = [] 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() def undo(self): - for row, el in self._bc: - self._lcs.insert(self._tab, row, el) + for el in self._bc: + el.set_as_not_deleted() def redo(self): - self._lcs.delete_i(self._tab, self._rows) + for el in self._bc: + el.set_as_deleted() class SortCommand(QUndoCommand): @@ -164,11 +164,11 @@ class SortCommand(QUndoCommand): self._tab = tab self._reverse = _reverse - self._old = self._lcs.get_tab(self._tab) + self._old = self._lcs._tabs[self._tab].copy() self._indexes = None def undo(self): - ll = self._lcs.get_tab(self._tab) + ll = self._lcs._tabs[self._tab].copy() self._lcs.sort( self._tab, key=lambda x: self._indexes[ll.index(x)] @@ -180,11 +180,12 @@ class SortCommand(QUndoCommand): reverse=self._reverse, key=lambda x: x.name ) + if self._indexes is None: self._indexes = list( map( lambda p: self._old.index(p), - self._lcs.get_tab(self._tab) + self._lcs._tabs[self._tab] ) ) self._old = None