From ff3b5a320c728b6a0c692fc46c1900955d213758 Mon Sep 17 00:00:00 2001 From: Pierre-Antoine Rouby Date: Fri, 18 Sep 2026 10:32:45 +0200 Subject: [PATCH] Ensemble: Edit: Add parameters widgets. --- src/View/Ensembles/Edit/Window.py | 131 +++++++++++++++++- src/View/Ensembles/UndoCommand.py | 3 +- src/View/ui/EnsembleEditDialog.ui | 4 +- .../ui/{ => Widgets}/Ensemble1ParamsWidget.ui | 4 +- .../ui/{ => Widgets}/Ensemble2ParamsWidget.ui | 8 +- 5 files changed, 136 insertions(+), 14 deletions(-) rename src/View/ui/{ => Widgets}/Ensemble1ParamsWidget.ui (86%) rename src/View/ui/{ => Widgets}/Ensemble2ParamsWidget.ui (85%) diff --git a/src/View/Ensembles/Edit/Window.py b/src/View/Ensembles/Edit/Window.py index 39712c7a..d773f77f 100644 --- a/src/View/Ensembles/Edit/Window.py +++ b/src/View/Ensembles/Edit/Window.py @@ -39,6 +39,7 @@ from PyQt5.QtWidgets import ( QFileDialog, QTableView, QAbstractItemView, QUndoStack, QShortcut, QAction, QItemDelegate, QComboBox, QVBoxLayout, QHeaderView, QTabWidget, + QGroupBox, ) logger = logging.getLogger() @@ -60,28 +61,73 @@ class EnsembleEditDialog(PamhyrDialog): self._study = study self._ensemble = ensemble - self._init_default_parameters_widget() self._init_default_values() - def _init_default_parameters_widget(self): - pass - def _init_default_values(self): self.set_line_edit_text("lineEdit_name", self._ensemble.name) self.combobox_add_items( "comboBox_distribution", + [self._trad["not_defined"]] + list( map( - lambda f: f.name, + lambda d: d.name, self._study._ens_distributions.lst ) ) ) + + self._params_widget = None if self._ensemble.distribution is not None: self.set_combobox_text("comboBox_distribution", self._ensemble.distribution.name) + self._set_widget(self._ensemble.distribution) + + self.find(QComboBox, "comboBox_distribution")\ + .currentTextChanged.connect(self.update_distribution) + + def update_distribution(self, txt): + # txt = self.get_combobox_text("comboBox_distribution") + distribution = next( + filter( + lambda d: d.name == txt, + self._study._ens_distributions.lst + ), + None + ) + + self._set_widget(distribution) + + def _set_widget(self, distribution): + box = self.find(QGroupBox, "groupBox_params") + vbox = self.find(QVBoxLayout, "verticalLayout_params") + + if self._params_widget is not None: + vbox.removeWidget(self._params_widget) + self._params_widget.setParent(None) + + if distribution is None: + return + + size = len(distribution._labels) + if size == 1: + self._params_widget = Ensemble1ParamsWidget( + ensemble=self._ensemble, + distribution=distribution, + trad=self._trad, parent=box, + ) + vbox.addWidget(self._params_widget) + elif size == 2: + self._params_widget = Ensemble2ParamsWidget( + ensemble=self._ensemble, + distribution=distribution, + trad=self._trad, parent=box, + ) + vbox.addWidget(self._params_widget) + else: + self._params_widget = None + @property def values(self): return self._values @@ -92,3 +138,78 @@ class EnsembleEditDialog(PamhyrDialog): def reject(self): self.close() + + +class Ensemble1ParamsWidget(PamhyrWidget): + _pamhyr_ui = "Ensemble1ParamsWidget" + _pamhyr_name = "Parameters" + + def __init__(self, ensemble=None, + distribution=None, + trad=None, parent=None): + super(Ensemble1ParamsWidget, self).__init__( + parent=parent + ) + self._trad = trad + + self._ensemble = ensemble + self._distribution = distribution + self._labels = distribution.labels + + self._init_default_labels() + self._init_default_values() + + def _init_default_labels(self): + self.set_label_text("label_0", self._trad[self._labels[0]]) + + def _init_default_values(self): + self._values = self._ensemble.params + if len(self._values) > 0: + self.set_double_spin_box("doubleSpinBox_0", self._values[0]) + + @property + def values(self): + self._values = [ + self.get_double_spin_box("doubleSpinBox_0"), + ] + + return self._values + + +class Ensemble2ParamsWidget(PamhyrWidget): + _pamhyr_ui = "Ensemble2ParamsWidget" + _pamhyr_name = "Parameters" + + def __init__(self, ensemble=None, + distribution=None, + trad=None, parent=None): + super(Ensemble2ParamsWidget, self).__init__( + parent=parent + ) + self._trad = trad + + self._ensemble = ensemble + self._distribution = distribution + self._labels = distribution.labels + + self._init_default_labels() + self._init_default_values() + + def _init_default_labels(self): + self.set_label_text("label_0", self._trad[self._labels[0]]) + self.set_label_text("label_1", self._trad[self._labels[1]]) + + def _init_default_values(self): + self._values = self._ensemble.params + if len(self._values) > 0: + self.set_double_spin_box("doubleSpinBox_0", self._values[0]) + self.set_double_spin_box("doubleSpinBox_1", self._values[1]) + + @property + def values(self): + self._values = [ + self.get_double_spin_box("doubleSpinBox_0"), + self.get_double_spin_box("doubleSpinBox_1") + ] + + return self._values diff --git a/src/View/Ensembles/UndoCommand.py b/src/View/Ensembles/UndoCommand.py index 7eb109e9..f39b144f 100644 --- a/src/View/Ensembles/UndoCommand.py +++ b/src/View/Ensembles/UndoCommand.py @@ -93,7 +93,8 @@ class SetDistributionCommand(QUndoCommand): def redo(self): self._ensembles.get(self._index).distribution = self._new - self._ensembles.get(self._index).params = self._new.default_values + if self._new is not None: + self._ensembles.get(self._index).params = self._new.default_values class AddCommand(QUndoCommand): diff --git a/src/View/ui/EnsembleEditDialog.ui b/src/View/ui/EnsembleEditDialog.ui index 05975f3a..1b136f14 100644 --- a/src/View/ui/EnsembleEditDialog.ui +++ b/src/View/ui/EnsembleEditDialog.ui @@ -66,13 +66,13 @@ - + Parameters - + diff --git a/src/View/ui/Ensemble1ParamsWidget.ui b/src/View/ui/Widgets/Ensemble1ParamsWidget.ui similarity index 86% rename from src/View/ui/Ensemble1ParamsWidget.ui rename to src/View/ui/Widgets/Ensemble1ParamsWidget.ui index f9c429a9..5f2dc1c3 100644 --- a/src/View/ui/Ensemble1ParamsWidget.ui +++ b/src/View/ui/Widgets/Ensemble1ParamsWidget.ui @@ -17,14 +17,14 @@ - + Parameter 1 - + diff --git a/src/View/ui/Ensemble2ParamsWidget.ui b/src/View/ui/Widgets/Ensemble2ParamsWidget.ui similarity index 85% rename from src/View/ui/Ensemble2ParamsWidget.ui rename to src/View/ui/Widgets/Ensemble2ParamsWidget.ui index 55c879ce..949b5d1f 100644 --- a/src/View/ui/Ensemble2ParamsWidget.ui +++ b/src/View/ui/Widgets/Ensemble2ParamsWidget.ui @@ -15,24 +15,24 @@ - + Parameter 1 - + - + Parameter 2 - +