Manning: Add parameter to setup manning coef instead of strickler, and switch the value on the view only, but keeps strickler value in the model for the solvers

This commit is contained in:
Dylan Jeannin committed 2026-07-27 13:22:32 +02:00
1 parent ce04f5fd1e
commit fefc6ebc4f
12 files changed
+189 -31

No files matched your search

+24 -15
View File
@@ -42,6 +42,7 @@ from View.Frictions.UndoCommand import (
)
from View.Tools.PamhyrTable import PamhyrTableModel
from View.Tools.CoefficientDisplay import display_strickler
from View.Frictions.translate import *
@@ -52,27 +53,26 @@ _translate = QCoreApplication.translate
class ComboBoxDelegate(QItemDelegate):
def __init__(self, data=None, study=None,
mode="stricklers", trad=None, parent=None):
mode="stricklers", trad=None, display_manning=True,
parent=None):
super(ComboBoxDelegate, self).__init__(parent)
self._data = data
self._study = study
self._trad = trad
self._mode = mode
self._display_manning = display_manning
def createEditor(self, parent, option, index):
self.editor = QComboBox(parent)
if self._mode == "stricklers":
self.editor.addItems(
[self._trad["not_defined"]] +
list(
map(
lambda s: str(s),
self._study.river.stricklers.stricklers
)
self.editor.addItem(self._trad["not_defined"], None)
for strickler in self._study.river.stricklers.stricklers:
self.editor.addItem(
display_strickler(strickler, self._display_manning),
strickler
)
)
elif self._mode == "rk":
self.editor.addItems(
list(map(str, self._data.reach.get_rk()))
@@ -86,8 +86,9 @@ class ComboBoxDelegate(QItemDelegate):
self.editor.currentTextChanged.connect(self.currentItemChanged)
def setModelData(self, editor, model, index):
text = str(editor.currentText())
model.setData(index, text)
value = editor.currentData() if self._mode == "stricklers" else \
str(editor.currentText())
model.setData(index, value)
editor.close()
editor.deleteLater()
@@ -104,6 +105,10 @@ class ComboBoxDelegate(QItemDelegate):
class FrictionTableModel(PamhyrTableModel):
def __init__(self, *args, display_manning=False, **kwargs):
self.display_manning = display_manning
super(FrictionTableModel, self).__init__(*args, **kwargs)
def _setup_lst(self):
self._lst = self._data.frictions
self._study = self._opt_data
@@ -125,12 +130,12 @@ class FrictionTableModel(PamhyrTableModel):
value = self._lst.get(row).begin_strickler
if value is None:
return self._trad["not_defined"]
return str(value)
return display_strickler(value, self.display_manning)
elif self._headers[column] == "end_strickler":
value = self._lst.get(row).end_strickler
if value is None:
return self._trad["not_defined"]
return str(value)
return display_strickler(value, self.display_manning)
return QVariant()
@@ -164,15 +169,19 @@ class FrictionTableModel(PamhyrTableModel):
)
)
elif self._headers[column] == "begin_strickler":
strickler = value if hasattr(value, "minor") else \
self._study.river.strickler(value)
self._undo.push(
SetBeginStricklerCommand(
self._lst, row, self._study.river.strickler(value)
self._lst, row, strickler
)
)
elif self._headers[column] == "end_strickler":
strickler = value if hasattr(value, "minor") else \
self._study.river.strickler(value)
self._undo.push(
SetEndStricklerCommand(
self._lst, row, self._study.river.strickler(value)
self._lst, row, strickler
)
)
except Exception as e: