mirror of
https://gitlab.com/pamhyr/pamhyr2.git
synced 2026-10-29 19:10:42 +01:00
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:
1 parent
ef10588880
commit
797de09683
2 files changed
+27
-5
No files matched your search
@@ -376,9 +376,19 @@ class InitialConditionTableModel(PamhyrTableModel):
|
|||||||
self.layoutChanged.emit()
|
self.layoutChanged.emit()
|
||||||
|
|
||||||
def generate(self, generator, param, option):
|
def generate(self, generator, param, option):
|
||||||
|
self.layoutAboutToBeChanged.emit()
|
||||||
|
|
||||||
|
self._undo.beginMacro(f"generate {generator}")
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
GenerateCommand(
|
GenerateCommand(
|
||||||
self._lst, generator, param, option
|
self._lst, generator, param, option
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
self._undo.push(
|
||||||
|
SortCommand(
|
||||||
|
self._lst, False
|
||||||
|
)
|
||||||
|
)
|
||||||
|
self._undo.endMacro()
|
||||||
|
|
||||||
self.layoutChanged.emit()
|
self.layoutChanged.emit()
|
||||||
@@ -100,15 +100,19 @@ class SortCommand(QUndoCommand):
|
|||||||
self._indexes = None
|
self._indexes = None
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
ll = self._ics.data
|
order = {
|
||||||
|
id(x): self._indexes[i]
|
||||||
|
for i, x in enumerate(self._ics.data)
|
||||||
|
}
|
||||||
self._ics.sort(
|
self._ics.sort(
|
||||||
key=lambda x: self._indexes[ll.index(x)]
|
key=lambda x: order.get(id(x), len(order))
|
||||||
)
|
)
|
||||||
|
|
||||||
def redo(self):
|
def redo(self):
|
||||||
self._ics.sort(
|
self._ics.sort(
|
||||||
reverse=self._reverse,
|
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:
|
if self._indexes is None:
|
||||||
self._indexes = list(
|
self._indexes = list(
|
||||||
@@ -182,11 +186,19 @@ class GenerateCommand(QUndoCommand):
|
|||||||
self._ics = ics
|
self._ics = ics
|
||||||
self._param = param
|
self._param = param
|
||||||
self._option = option
|
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
|
self._generator = generator
|
||||||
|
|
||||||
def undo(self):
|
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):
|
def redo(self):
|
||||||
if self._generator == "growing":
|
if self._generator == "growing":
|
||||||
|
|||||||
Reference in new issue
Block a user