InitialConditions: sort rows after each generation (single undo step), and fix undo of generation and sort (avoid STOP7 error on Hogneau example)

This commit is contained in:
Dylan Jeannin committed 2026-10-26 16:55:01 +01:00
1 parent ef10588880
commit 797de09683
2 files changed
+27 -5

No files matched your search

+10
View File
@@ -376,9 +376,19 @@ class InitialConditionTableModel(PamhyrTableModel):
self.layoutChanged.emit()
def generate(self, generator, param, option):
self.layoutAboutToBeChanged.emit()
self._undo.beginMacro(f"generate {generator}")
self._undo.push(
GenerateCommand(
self._lst, generator, param, option
)
)
self._undo.push(
SortCommand(
self._lst, False
)
)
self._undo.endMacro()
self.layoutChanged.emit()
+17 -5
View File
@@ -100,15 +100,19 @@ class SortCommand(QUndoCommand):
self._indexes = None
def undo(self):
ll = self._ics.data
order = {
id(x): self._indexes[i]
for i, x in enumerate(self._ics.data)
}
self._ics.sort(
key=lambda x: self._indexes[ll.index(x)]
key=lambda x: order.get(id(x), len(order))
)
def redo(self):
self._ics.sort(
reverse=self._reverse,
key=lambda x: x["rk"].rk
key=lambda x: ((x["rk"] is None),
0.0 if x["rk"] is None else x["rk"].rk)
)
if self._indexes is None:
self._indexes = list(
@@ -182,11 +186,19 @@ class GenerateCommand(QUndoCommand):
self._ics = ics
self._param = param
self._option = option
self._copy = self._ics.data
# All the rows, with their deleted flag: the generation marks the
# previous rows as deleted (clear_data)
self._copy = list(self._ics._data)
self._deleted = [d.is_deleted() for d in self._copy]
self._generator = generator
def undo(self):
self._ics.data = self._copy
for data, deleted in zip(self._copy, self._deleted):
if deleted:
data.set_as_deleted()
else:
data.set_as_not_deleted()
self._ics.data = list(self._copy)
def redo(self):
if self._generator == "growing":