Compare commits

...

2 Commits

Author SHA1 Message Date
Pierre-Antoine 4cddd43f5a BHS: Fix undo commands. 2025-09-16 15:09:42 +02:00
Pierre-Antoine becc1696cb HS: Fix undo commands. 2025-09-16 14:08:08 +02:00
7 changed files with 83 additions and 15 deletions

View File

@ -425,6 +425,9 @@ class HydraulicStructure(SQLSubModel):
return self.lst.copy()
def basic_structure(self, index: int):
if len(self._data) == 0:
return None
return self.lst[index]
def add(self, index: int):

View File

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

View File

@ -135,7 +135,8 @@ class TableModel(PamhyrTableModel):
self.beginRemoveRows(parent, rows[0], rows[-1])
rows = list(map(
lambda r: self.get_true_data_row(r), rows))
lambda r: self.get_true_data_row(r),
rows))
self._undo.push(
DelCommand(

View File

@ -104,6 +104,19 @@ class TableModel(PamhyrTableModel):
super(TableModel, self).__init__(trad=trad, **kwargs)
def get_true_data_row(self, row):
hs = self._data.basic_structure(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == hs,
enumerate(self._data.basic_structures)
)
), 0
)
def rowCount(self, parent):
return len(self._lst)
@ -170,6 +183,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._data, row
@ -182,6 +197,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._data, rows
@ -192,6 +214,8 @@ class TableModel(PamhyrTableModel):
self.layoutChanged.emit()
def enabled(self, row, enabled, parent=QModelIndex()):
row = self.get_true_data_row(row)
self._undo.push(
SetEnabledCommand(
self._lst, row, enabled
@ -220,6 +244,19 @@ class ParametersTableModel(PamhyrTableModel):
super(ParametersTableModel, self).__init__(trad=trad, **kwargs)
def get_true_data_row(self, row):
par = self._lst.get(row)
return next(
map(
lambda e: e[0],
filter(
lambda e: e[1] == par,
enumerate(self._lst._lst)
)
), 0
)
def rowCount(self, parent):
if self._hs_index is None:
return 0

View File

@ -86,13 +86,13 @@ class AddCommand(QUndoCommand):
self._new = None
def undo(self):
self._hs.delete_i([self._index])
self._new.set_as_deleted()
def redo(self):
if self._new is None:
self._new = self._hs.add(self._index)
else:
self._hs.insert(self._index, self._new)
self._new.set_as_not_deleted()
class DelCommand(QUndoCommand):
@ -100,19 +100,19 @@ class DelCommand(QUndoCommand):
QUndoCommand.__init__(self)
self._hs = hs
self._rows = rows
self._bhs = []
for row in rows:
self._bhs.append((row, self._hs.basic_structure(row)))
self._bhs.append(self._hs.basic_structure(row))
def undo(self):
for row, el in self._bhs:
self._hs.insert(row, el)
for el in self._bhs:
el.set_as_not_deleted()
def redo(self):
self._hs.delete_i(self._rows)
for el in self._bhs:
el.set_as_deleted()
class PasteCommand(QUndoCommand):

View File

@ -127,6 +127,19 @@ class TableModel(PamhyrTableModel):
def _setup_lst(self):
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):
return len(self._lst)
@ -195,6 +208,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, row
@ -207,6 +222,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, rows
@ -217,6 +239,8 @@ class TableModel(PamhyrTableModel):
self.layoutChanged.emit()
def enabled(self, row, enabled, parent=QModelIndex()):
row = self.get_true_data_row(row)
self._undo.push(
SetEnabledCommand(
self._lst, row, enabled

View File

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