HS: Fix undo commands.

scenarios
Pierre-Antoine 2025-09-16 14:03:16 +02:00
parent cf4957551f
commit becc1696cb
3 changed files with 34 additions and 7 deletions

View File

@ -83,6 +83,9 @@ class PamhyrModelList(SQLSubModel):
return self.lst.index(el) return self.lst.index(el)
def get(self, index): def get(self, index):
if len(self._lst) == 0:
return None
return self.lst[index] return self.lst[index]
def set(self, index, new): def set(self, index, new):

View File

@ -127,6 +127,19 @@ class TableModel(PamhyrTableModel):
def _setup_lst(self): def _setup_lst(self):
self._lst = self._data._hydraulic_structures self._lst = self._data._hydraulic_structures
def get_true_data_row(self, row):
hs = self._lst.get(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == hs,
enumerate(self._lst._lst)
)
), 0
)
def rowCount(self, parent): def rowCount(self, parent):
return len(self._lst) return len(self._lst)
@ -195,6 +208,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, row self._lst, row
@ -207,6 +222,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, rows self._lst, rows
@ -217,6 +239,8 @@ class TableModel(PamhyrTableModel):
self.layoutChanged.emit() self.layoutChanged.emit()
def enabled(self, row, enabled, parent=QModelIndex()): def enabled(self, row, enabled, parent=QModelIndex()):
row = self.get_true_data_row(row)
self._undo.push( self._undo.push(
SetEnabledCommand( SetEnabledCommand(
self._lst, row, enabled self._lst, row, enabled

View File

@ -110,13 +110,13 @@ class AddCommand(QUndoCommand):
self._new = None self._new = None
def undo(self): def undo(self):
self._h_s_lst.delete_i([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._h_s_lst.new(self._h_s_lst, self._index) self._new = self._h_s_lst.new(self._h_s_lst, self._index)
else: else:
self._h_s_lst.undelete([self._new]) self._new.set_as_not_deleted()
class DelCommand(QUndoCommand): class DelCommand(QUndoCommand):
@ -124,19 +124,19 @@ class DelCommand(QUndoCommand):
QUndoCommand.__init__(self) QUndoCommand.__init__(self)
self._h_s_lst = h_s_lst self._h_s_lst = h_s_lst
self._rows = rows self._rows = rows
self._h_s = [] self._h_s = []
for row in rows: for row in rows:
self._h_s.append(self._h_s_lst.get(row)) self._h_s.append(self._h_s_lst._lst[row])
self._h_s.sort()
def undo(self): def undo(self):
self._h_s_lst.undelete(self._h_s) for hs in self._h_s:
hs.set_as_not_deleted()
def redo(self): def redo(self):
self._h_s_lst.delete_i(self._rows) for hs in self._h_s:
hs.set_as_deleted()
class PasteCommand(QUndoCommand): class PasteCommand(QUndoCommand):