diff --git a/src/Model/Ensembles/Ensemble.py b/src/Model/Ensembles/Ensemble.py index 56186463..37eaa970 100644 --- a/src/Model/Ensembles/Ensemble.py +++ b/src/Model/Ensembles/Ensemble.py @@ -252,3 +252,19 @@ class Ensemble(SQLSubModel): def target_data(self, target_data): self._target_data = target_data self._status.modified() + + def get_data_dict(self): + return { + "name": self.name, + "data_type": self.data_type, + "target_data": self.target_data, + "distribution": self.distribution, + "params": self.params, + } + + def set_data_dict(self, data): + self.name = data["name"] + self.data_type = data["data_type"] + self.target_data = data["target_data"] + self.distribution = data["distribution"] + self.params = data["params"] diff --git a/src/View/Ensembles/Edit/Window.py b/src/View/Ensembles/Edit/Window.py index 268d5cf4..3ae3aed5 100644 --- a/src/View/Ensembles/Edit/Window.py +++ b/src/View/Ensembles/Edit/Window.py @@ -201,19 +201,22 @@ class EnsembleEditDialog(PamhyrDialog): return self._values def accept(self): - self._ensemble.name = self.get_line_edit_text("lineEdit_name") - self._ensemble.data_type = self._target_data[0] - self._ensemble.target_data = self._target_data[1] - txt = self.get_combobox_text("comboBox_distribution") - self._ensemble.distribution = next( + distribution = next( filter( lambda d: d.name == txt, self._study._ens_distributions.lst ), None ) - self._ensemble.params = self._params_widget.values + + self._values = { + "name": self.get_line_edit_text("lineEdit_name"), + "data_type": self._target_data[0], + "target_data": self._target_data[1], + "distribution": distribution, + "params": self._params_widget.values, + } super().accept() diff --git a/src/View/Ensembles/UndoCommand.py b/src/View/Ensembles/UndoCommand.py index f39b144f..542eda05 100644 --- a/src/View/Ensembles/UndoCommand.py +++ b/src/View/Ensembles/UndoCommand.py @@ -133,3 +133,18 @@ class DelCommand(QUndoCommand): def redo(self): self._ensembles.delete_i(self._rows) + + +class SetAllCommand(QUndoCommand): + def __init__(self, ensemble, data): + QUndoCommand.__init__(self) + + self._ensemble = ensemble + self._old = self._ensemble.get_data_dict() + self._new = data + + def undo(self): + self._ensemble.set_data_dict(self._old) + + def redo(self): + self._ensemble.set_data_dict(self._new) diff --git a/src/View/Ensembles/Window.py b/src/View/Ensembles/Window.py index 418737d3..60dba0b5 100644 --- a/src/View/Ensembles/Window.py +++ b/src/View/Ensembles/Window.py @@ -47,6 +47,7 @@ from View.Ensembles.Table import ( EnsembleTableModel, ComboBoxDelegate ) from View.Ensembles.Translate import EnsemblesTranslate +from View.Ensembles.UndoCommand import SetAllCommand logger = logging.getLogger() @@ -194,7 +195,11 @@ class EnsemblesWindow(PamhyrWindow): ) if dlg.exec(): - return + self._undo_stack.push( + SetAllCommand( + ens, dlg.values + ) + ) except Exception as e: logger_exception(e) return