From ab95f0670052bc9e9f4876ab67ee1758ec9495e0 Mon Sep 17 00:00:00 2001 From: Dylan Jeannin Date: Thu, 8 Oct 2026 10:12:26 +0200 Subject: [PATCH] Rubar parameters: prohibit simultaneous selection of REGIME=1 and CONDAM=0 --- src/Solver/RubarBE.py | 10 ++++++++++ src/View/RunSolver/Translate.py | 5 +++++ src/View/SolverParameters/RubarForm.py | 23 +++++++++++++++++++++++ 3 files changed, 38 insertions(+) diff --git a/src/Solver/RubarBE.py b/src/Solver/RubarBE.py index b333955b..0b5f609f 100644 --- a/src/Solver/RubarBE.py +++ b/src/Solver/RubarBE.py @@ -143,6 +143,16 @@ class Rubar3(CommandLineSolver): self._study = study name = study.name.replace(" ", "_") + values = self._parameter_values(study) + if (values.get("rubarbe_regime") == "1" and + values.get("rubarbe_condam") == "0"): + trad = RunSolverTranslate() + message = trad["incompatible_upstream_boundary"] + logger.warning(message) + if qlog is not None: + qlog.put(trad["warning"].format(message=message)) + return False + self._export_donnee(study, repertory, qlog, name=name) if self._parameter_flag(study, "trased") == "O": if not self._export_ts(study, repertory, qlog, name=name): diff --git a/src/View/RunSolver/Translate.py b/src/View/RunSolver/Translate.py index 9481e490..2c8efd0f 100644 --- a/src/View/RunSolver/Translate.py +++ b/src/View/RunSolver/Translate.py @@ -38,6 +38,11 @@ class RunSolverTranslate(PamhyrTranslate): "Please choose another transport law from the list." ) self._dict["warning"] = _translate("Solver", "Warning: {message}") + self._dict["incompatible_upstream_boundary"] = _translate( + "Solver", + "Export cancelled: REGIME=1 is incompatible with CONDAM=0. " + "A reflecting upstream boundary cannot impose the water depth." + ) self._dict["export_failed"] = _translate( "Solver", "Export failed; task cancelled" ) diff --git a/src/View/SolverParameters/RubarForm.py b/src/View/SolverParameters/RubarForm.py index 131c8b1e..2a3a59c9 100644 --- a/src/View/SolverParameters/RubarForm.py +++ b/src/View/SolverParameters/RubarForm.py @@ -199,6 +199,12 @@ class RubarForm(QWidget): def apply_pending(self): """Commit focused text before Ctrl+S; leave invalid drafts visible.""" + values = self.values() + if (values.get('rubarbe_condam') == '0' and + values.get('rubarbe_regime') == '1'): + self.tabs.setCurrentIndex(1) + self.editors['rubarbe_condam'].setFocus() + return False for key, editor in self.editors.items(): if (isinstance(editor, QLineEdit) and editor.isModified() and active(self.descriptions[key], self.values())): @@ -220,6 +226,13 @@ class RubarForm(QWidget): value = self._validated(key, value) if value is None: return False + values = self.values() + values[key] = value + if (key in ('rubarbe_condam', 'rubarbe_regime') and + values.get('rubarbe_condam') == '0' and + values.get('rubarbe_regime') == '1'): + self.refresh() + return False if isinstance(self.editors[key], QLineEdit): self.editors[key].setModified(False) if self.values()[key] != value: @@ -270,6 +283,16 @@ class RubarForm(QWidget): self.errors[key].setVisible( enabled and bool(self.errors[key].text())) self._update_context(values) + for key, forbidden, blocked in ( + ('rubarbe_regime', '1', values.get('rubarbe_condam') == '0'), + ('rubarbe_condam', '0', values.get('rubarbe_regime') == '1'), + ): + editor = self.editors.get(key) + if editor is None: + continue + index = editor.findData(forbidden) + if index >= 0: + editor.model().item(index).setEnabled(not blocked) self._refreshing = False def _update_context(self, values):