mirror of https://gitlab.com/pamhyr/pamhyr2
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
parent
ce04f5fd1e
commit
fefc6ebc4f
|
|
@ -43,6 +43,7 @@ from PyQt5.QtWidgets import (
|
||||||
QDialogButtonBox, QPushButton, QLineEdit,
|
QDialogButtonBox, QPushButton, QLineEdit,
|
||||||
QFileDialog, QTableView, QAbstractItemView,
|
QFileDialog, QTableView, QAbstractItemView,
|
||||||
QComboBox, QUndoStack, QShortcut, QHeaderView,
|
QComboBox, QUndoStack, QShortcut, QHeaderView,
|
||||||
|
QCheckBox,
|
||||||
)
|
)
|
||||||
|
|
||||||
from Modules import Modules
|
from Modules import Modules
|
||||||
|
|
@ -119,11 +120,15 @@ class ConfigureWindow(PamhyrDialog):
|
||||||
editable_headers=["name", "comment", "minor", "medium"],
|
editable_headers=["name", "comment", "minor", "medium"],
|
||||||
data=self._stricklers,
|
data=self._stricklers,
|
||||||
undo=self._undo_stack,
|
undo=self._undo_stack,
|
||||||
|
display_manning=self._config.display_manning,
|
||||||
)
|
)
|
||||||
|
|
||||||
def setup_data(self):
|
def setup_data(self):
|
||||||
# Backup
|
# Backup
|
||||||
self.set_check_box("checkBox_backup", self._config.backup_enable)
|
self.set_check_box("checkBox_backup", self._config.backup_enable)
|
||||||
|
self.set_check_box(
|
||||||
|
"checkBox_display_manning", self._config.display_manning
|
||||||
|
)
|
||||||
# self.set_line_edit_text("lineEdit_backup_path",
|
# self.set_line_edit_text("lineEdit_backup_path",
|
||||||
# self._config.backup_path)
|
# self._config.backup_path)
|
||||||
self.set_time_edit("timeEdit_backup_frequence",
|
self.set_time_edit("timeEdit_backup_frequence",
|
||||||
|
|
@ -167,6 +172,10 @@ class ConfigureWindow(PamhyrDialog):
|
||||||
for button in buttons:
|
for button in buttons:
|
||||||
self.find(QPushButton, button).clicked.connect(buttons[button])
|
self.find(QPushButton, button).clicked.connect(buttons[button])
|
||||||
|
|
||||||
|
self.find(QCheckBox, "checkBox_display_manning").stateChanged.connect(
|
||||||
|
self.update_stricklers_display
|
||||||
|
)
|
||||||
|
|
||||||
def accept(self):
|
def accept(self):
|
||||||
# Solvers
|
# Solvers
|
||||||
self._config.solvers = self.solver_table_model._data.copy()
|
self._config.solvers = self.solver_table_model._data.copy()
|
||||||
|
|
@ -178,6 +187,9 @@ class ConfigureWindow(PamhyrDialog):
|
||||||
self._config.backup_frequence = self.get_time_edit(
|
self._config.backup_frequence = self.get_time_edit(
|
||||||
"timeEdit_backup_frequence"
|
"timeEdit_backup_frequence"
|
||||||
)
|
)
|
||||||
|
self._config.display_manning = self.get_check_box(
|
||||||
|
"checkBox_display_manning"
|
||||||
|
)
|
||||||
# self._config.backup_max = self.get_spin_box("spinBox_backup_max")
|
# self._config.backup_max = self.get_spin_box("spinBox_backup_max")
|
||||||
|
|
||||||
# Stricklers
|
# Stricklers
|
||||||
|
|
@ -237,6 +249,12 @@ class ConfigureWindow(PamhyrDialog):
|
||||||
|
|
||||||
# Stricklers
|
# Stricklers
|
||||||
|
|
||||||
|
def update_stricklers_display(self):
|
||||||
|
self._stricklers_table.display_manning = self.get_check_box(
|
||||||
|
"checkBox_display_manning"
|
||||||
|
)
|
||||||
|
self._stricklers_table.layoutChanged.emit()
|
||||||
|
|
||||||
def index_selected_rows_strikclers(self):
|
def index_selected_rows_strikclers(self):
|
||||||
table = self.find(QTableView, f"tableView_stricklers")
|
table = self.find(QTableView, f"tableView_stricklers")
|
||||||
return list(
|
return list(
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@ import logging
|
||||||
|
|
||||||
from tools import timer, flatten
|
from tools import timer, flatten
|
||||||
from View.Tools.PamhyrPlot import PamhyrPlot
|
from View.Tools.PamhyrPlot import PamhyrPlot
|
||||||
|
from View.Tools.CoefficientDisplay import display_coefficient
|
||||||
|
|
||||||
from PyQt5.QtCore import (
|
from PyQt5.QtCore import (
|
||||||
QCoreApplication
|
QCoreApplication
|
||||||
|
|
@ -32,7 +33,7 @@ _translate = QCoreApplication.translate
|
||||||
|
|
||||||
class PlotStricklers(PamhyrPlot):
|
class PlotStricklers(PamhyrPlot):
|
||||||
def __init__(self, data=None, canvas=None, trad=None,
|
def __init__(self, data=None, canvas=None, trad=None,
|
||||||
toolbar=None, parent=None):
|
toolbar=None, display_manning=True, parent=None):
|
||||||
super(PlotStricklers, self).__init__(
|
super(PlotStricklers, self).__init__(
|
||||||
canvas=canvas,
|
canvas=canvas,
|
||||||
trad=trad,
|
trad=trad,
|
||||||
|
|
@ -42,7 +43,11 @@ class PlotStricklers(PamhyrPlot):
|
||||||
)
|
)
|
||||||
|
|
||||||
self.label_x = self._trad["rk"]
|
self.label_x = self._trad["rk"]
|
||||||
self.label_y = self._trad["strickler_plot"]
|
self._display_manning = display_manning
|
||||||
|
self.label_y = (
|
||||||
|
self._trad["manning_plot"] if display_manning
|
||||||
|
else self._trad["strickler_plot"]
|
||||||
|
)
|
||||||
|
|
||||||
self.line_rk_elevation = [None, None]
|
self.line_rk_elevation = [None, None]
|
||||||
|
|
||||||
|
|
@ -113,8 +118,12 @@ class PlotStricklers(PamhyrPlot):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
coef_minor = list(map(lambda s: s.minor, coef))
|
coef_minor = [
|
||||||
coef_medium = list(map(lambda s: s.medium, coef))
|
display_coefficient(s.minor, self._display_manning) for s in coef
|
||||||
|
]
|
||||||
|
coef_medium = [
|
||||||
|
display_coefficient(s.medium, self._display_manning) for s in coef
|
||||||
|
]
|
||||||
|
|
||||||
self.line_rk_elevation[0] = self.canvas.axes.plot(
|
self.line_rk_elevation[0] = self.canvas.axes.plot(
|
||||||
rk, coef_minor,
|
rk, coef_minor,
|
||||||
|
|
|
||||||
|
|
@ -42,6 +42,7 @@ from View.Frictions.UndoCommand import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from View.Tools.PamhyrTable import PamhyrTableModel
|
from View.Tools.PamhyrTable import PamhyrTableModel
|
||||||
|
from View.Tools.CoefficientDisplay import display_strickler
|
||||||
|
|
||||||
from View.Frictions.translate import *
|
from View.Frictions.translate import *
|
||||||
|
|
||||||
|
|
@ -52,27 +53,26 @@ _translate = QCoreApplication.translate
|
||||||
|
|
||||||
class ComboBoxDelegate(QItemDelegate):
|
class ComboBoxDelegate(QItemDelegate):
|
||||||
def __init__(self, data=None, study=None,
|
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)
|
super(ComboBoxDelegate, self).__init__(parent)
|
||||||
|
|
||||||
self._data = data
|
self._data = data
|
||||||
self._study = study
|
self._study = study
|
||||||
self._trad = trad
|
self._trad = trad
|
||||||
self._mode = mode
|
self._mode = mode
|
||||||
|
self._display_manning = display_manning
|
||||||
|
|
||||||
def createEditor(self, parent, option, index):
|
def createEditor(self, parent, option, index):
|
||||||
self.editor = QComboBox(parent)
|
self.editor = QComboBox(parent)
|
||||||
|
|
||||||
if self._mode == "stricklers":
|
if self._mode == "stricklers":
|
||||||
self.editor.addItems(
|
self.editor.addItem(self._trad["not_defined"], None)
|
||||||
[self._trad["not_defined"]] +
|
for strickler in self._study.river.stricklers.stricklers:
|
||||||
list(
|
self.editor.addItem(
|
||||||
map(
|
display_strickler(strickler, self._display_manning),
|
||||||
lambda s: str(s),
|
strickler
|
||||||
self._study.river.stricklers.stricklers
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
)
|
|
||||||
elif self._mode == "rk":
|
elif self._mode == "rk":
|
||||||
self.editor.addItems(
|
self.editor.addItems(
|
||||||
list(map(str, self._data.reach.get_rk()))
|
list(map(str, self._data.reach.get_rk()))
|
||||||
|
|
@ -86,8 +86,9 @@ class ComboBoxDelegate(QItemDelegate):
|
||||||
self.editor.currentTextChanged.connect(self.currentItemChanged)
|
self.editor.currentTextChanged.connect(self.currentItemChanged)
|
||||||
|
|
||||||
def setModelData(self, editor, model, index):
|
def setModelData(self, editor, model, index):
|
||||||
text = str(editor.currentText())
|
value = editor.currentData() if self._mode == "stricklers" else \
|
||||||
model.setData(index, text)
|
str(editor.currentText())
|
||||||
|
model.setData(index, value)
|
||||||
editor.close()
|
editor.close()
|
||||||
editor.deleteLater()
|
editor.deleteLater()
|
||||||
|
|
||||||
|
|
@ -104,6 +105,10 @@ class ComboBoxDelegate(QItemDelegate):
|
||||||
|
|
||||||
|
|
||||||
class FrictionTableModel(PamhyrTableModel):
|
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):
|
def _setup_lst(self):
|
||||||
self._lst = self._data.frictions
|
self._lst = self._data.frictions
|
||||||
self._study = self._opt_data
|
self._study = self._opt_data
|
||||||
|
|
@ -125,12 +130,12 @@ class FrictionTableModel(PamhyrTableModel):
|
||||||
value = self._lst.get(row).begin_strickler
|
value = self._lst.get(row).begin_strickler
|
||||||
if value is None:
|
if value is None:
|
||||||
return self._trad["not_defined"]
|
return self._trad["not_defined"]
|
||||||
return str(value)
|
return display_strickler(value, self.display_manning)
|
||||||
elif self._headers[column] == "end_strickler":
|
elif self._headers[column] == "end_strickler":
|
||||||
value = self._lst.get(row).end_strickler
|
value = self._lst.get(row).end_strickler
|
||||||
if value is None:
|
if value is None:
|
||||||
return self._trad["not_defined"]
|
return self._trad["not_defined"]
|
||||||
return str(value)
|
return display_strickler(value, self.display_manning)
|
||||||
|
|
||||||
return QVariant()
|
return QVariant()
|
||||||
|
|
||||||
|
|
@ -164,15 +169,19 @@ class FrictionTableModel(PamhyrTableModel):
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif self._headers[column] == "begin_strickler":
|
elif self._headers[column] == "begin_strickler":
|
||||||
|
strickler = value if hasattr(value, "minor") else \
|
||||||
|
self._study.river.strickler(value)
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
SetBeginStricklerCommand(
|
SetBeginStricklerCommand(
|
||||||
self._lst, row, self._study.river.strickler(value)
|
self._lst, row, strickler
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif self._headers[column] == "end_strickler":
|
elif self._headers[column] == "end_strickler":
|
||||||
|
strickler = value if hasattr(value, "minor") else \
|
||||||
|
self._study.river.strickler(value)
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
SetEndStricklerCommand(
|
SetEndStricklerCommand(
|
||||||
self._lst, row, self._study.river.strickler(value)
|
self._lst, row, strickler
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
||||||
|
|
@ -67,6 +67,9 @@ class FrictionsWindow(PamhyrWindow):
|
||||||
def __init__(self, reach=None, study=None, config=None, parent=None):
|
def __init__(self, reach=None, study=None, config=None, parent=None):
|
||||||
trad = FrictionsTranslate()
|
trad = FrictionsTranslate()
|
||||||
|
|
||||||
|
if config is None and parent is not None:
|
||||||
|
config = getattr(parent, "conf", None)
|
||||||
|
|
||||||
if reach is not None:
|
if reach is not None:
|
||||||
self._reach = reach
|
self._reach = reach
|
||||||
else:
|
else:
|
||||||
|
|
@ -103,6 +106,7 @@ class FrictionsWindow(PamhyrWindow):
|
||||||
study=self._study,
|
study=self._study,
|
||||||
mode="stricklers",
|
mode="stricklers",
|
||||||
trad=self._trad,
|
trad=self._trad,
|
||||||
|
display_manning=getattr(self._config, "display_manning", False),
|
||||||
parent=self
|
parent=self
|
||||||
)
|
)
|
||||||
self._delegate_rk = ComboBoxDelegate(
|
self._delegate_rk = ComboBoxDelegate(
|
||||||
|
|
@ -122,9 +126,15 @@ class FrictionsWindow(PamhyrWindow):
|
||||||
editable_headers = []
|
editable_headers = []
|
||||||
|
|
||||||
table = self.find(QTableView, f"tableView")
|
table = self.find(QTableView, f"tableView")
|
||||||
|
table_headers = self._trad.get_dict("table_headers").copy()
|
||||||
|
table_headers["begin_strickler"] = (
|
||||||
|
self._trad["manning"]
|
||||||
|
if getattr(self._config, "display_manning", False)
|
||||||
|
else self._trad["strickler"]
|
||||||
|
)
|
||||||
self._table = FrictionTableModel(
|
self._table = FrictionTableModel(
|
||||||
table_view=table,
|
table_view=table,
|
||||||
table_headers=self._trad.get_dict("table_headers"),
|
table_headers=table_headers,
|
||||||
editable_headers=editable_headers,
|
editable_headers=editable_headers,
|
||||||
delegates={
|
delegates={
|
||||||
"begin_rk": self._delegate_rk,
|
"begin_rk": self._delegate_rk,
|
||||||
|
|
@ -135,7 +145,8 @@ class FrictionsWindow(PamhyrWindow):
|
||||||
data=self._reach,
|
data=self._reach,
|
||||||
trad=self._trad,
|
trad=self._trad,
|
||||||
undo=self._undo_stack,
|
undo=self._undo_stack,
|
||||||
opt_data=self._study
|
opt_data=self._study,
|
||||||
|
display_manning=getattr(self._config, "display_manning", False)
|
||||||
)
|
)
|
||||||
table.setModel(self._table)
|
table.setModel(self._table)
|
||||||
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
table.setSelectionBehavior(QAbstractItemView.SelectRows)
|
||||||
|
|
@ -167,7 +178,8 @@ class FrictionsWindow(PamhyrWindow):
|
||||||
canvas=self.canvas_2,
|
canvas=self.canvas_2,
|
||||||
data=self._reach,
|
data=self._reach,
|
||||||
trad=self._trad,
|
trad=self._trad,
|
||||||
toolbar=None
|
toolbar=None,
|
||||||
|
display_manning=getattr(self._config, "display_manning", False)
|
||||||
)
|
)
|
||||||
self.plot_2.draw()
|
self.plot_2.draw()
|
||||||
|
|
||||||
|
|
@ -274,13 +286,13 @@ class FrictionsWindow(PamhyrWindow):
|
||||||
def edit_stricklers(self):
|
def edit_stricklers(self):
|
||||||
if self.sub_window_exists(
|
if self.sub_window_exists(
|
||||||
StricklersWindow,
|
StricklersWindow,
|
||||||
data=[self._study, self.parent.conf]
|
data=[self._study, self._config]
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
strick = StricklersWindow(
|
strick = StricklersWindow(
|
||||||
study=self._study,
|
study=self._study,
|
||||||
config=self.parent.conf,
|
config=self._config,
|
||||||
parent=self
|
parent=self
|
||||||
)
|
)
|
||||||
strick.show()
|
strick.show()
|
||||||
|
|
|
||||||
|
|
@ -31,9 +31,18 @@ class FrictionsTranslate(MainTranslate):
|
||||||
self._dict["strickler_plot"] = _translate(
|
self._dict["strickler_plot"] = _translate(
|
||||||
"Frictions", "Strickler ($m^{1/3}/s$)"
|
"Frictions", "Strickler ($m^{1/3}/s$)"
|
||||||
)
|
)
|
||||||
|
self._dict["manning_plot"] = _translate(
|
||||||
|
"Frictions", "Manning ($s/m^{1/3}$)"
|
||||||
|
)
|
||||||
self._dict["stricklers"] = _translate(
|
self._dict["stricklers"] = _translate(
|
||||||
"Frictions", "Stricklers"
|
"Frictions", "Stricklers"
|
||||||
)
|
)
|
||||||
|
self._dict["strickler"] = _translate(
|
||||||
|
"Frictions", "Strickler"
|
||||||
|
)
|
||||||
|
self._dict["manning"] = _translate(
|
||||||
|
"Frictions", "Manning"
|
||||||
|
)
|
||||||
|
|
||||||
self._dict["Edit frictions"] = _translate(
|
self._dict["Edit frictions"] = _translate(
|
||||||
"Frictions", "Edit frictions"
|
"Frictions", "Edit frictions"
|
||||||
|
|
|
||||||
|
|
@ -1427,12 +1427,13 @@ class ApplicationWindow(QMainWindow, ListedSubWindow, WindowToolKit):
|
||||||
|
|
||||||
if self.sub_window_exists(
|
if self.sub_window_exists(
|
||||||
FrictionsWindow,
|
FrictionsWindow,
|
||||||
data=[self._study, None, reach]
|
data=[self._study, self.conf, reach]
|
||||||
):
|
):
|
||||||
return
|
return
|
||||||
|
|
||||||
frictions = FrictionsWindow(
|
frictions = FrictionsWindow(
|
||||||
study=self._study,
|
study=self._study,
|
||||||
|
config=self.conf,
|
||||||
parent=self
|
parent=self
|
||||||
)
|
)
|
||||||
frictions.show()
|
frictions.show()
|
||||||
|
|
|
||||||
|
|
@ -41,6 +41,9 @@ from View.Stricklers.UndoCommand import (
|
||||||
SetMinorCommand, SetMediumCommand,
|
SetMinorCommand, SetMediumCommand,
|
||||||
AddCommand, DelCommand, SortCommand,
|
AddCommand, DelCommand, SortCommand,
|
||||||
)
|
)
|
||||||
|
from View.Tools.CoefficientDisplay import (
|
||||||
|
display_coefficient, stored_coefficient
|
||||||
|
)
|
||||||
|
|
||||||
logger = logging.getLogger()
|
logger = logging.getLogger()
|
||||||
|
|
||||||
|
|
@ -48,6 +51,10 @@ _translate = QCoreApplication.translate
|
||||||
|
|
||||||
|
|
||||||
class TableModel(PamhyrTableModel):
|
class TableModel(PamhyrTableModel):
|
||||||
|
def __init__(self, *args, display_manning=False, **kwargs):
|
||||||
|
self.display_manning = display_manning
|
||||||
|
super(TableModel, self).__init__(*args, **kwargs)
|
||||||
|
|
||||||
def get_true_data_row(self, row):
|
def get_true_data_row(self, row):
|
||||||
el = self._data.get(row)
|
el = self._data.get(row)
|
||||||
|
|
||||||
|
|
@ -73,9 +80,13 @@ class TableModel(PamhyrTableModel):
|
||||||
elif self._headers[column] == "comment":
|
elif self._headers[column] == "comment":
|
||||||
return self._data.get(row).comment
|
return self._data.get(row).comment
|
||||||
elif self._headers[column] == "minor":
|
elif self._headers[column] == "minor":
|
||||||
return self._data.get(row).minor
|
return display_coefficient(
|
||||||
|
self._data.get(row).minor, self.display_manning
|
||||||
|
)
|
||||||
elif self._headers[column] == "medium":
|
elif self._headers[column] == "medium":
|
||||||
return self._data.get(row).medium
|
return display_coefficient(
|
||||||
|
self._data.get(row).medium, self.display_manning
|
||||||
|
)
|
||||||
|
|
||||||
return QVariant()
|
return QVariant()
|
||||||
|
|
||||||
|
|
@ -106,13 +117,15 @@ class TableModel(PamhyrTableModel):
|
||||||
elif self._headers[column] == "minor":
|
elif self._headers[column] == "minor":
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
SetMinorCommand(
|
SetMinorCommand(
|
||||||
self._data, row, value
|
self._data, row,
|
||||||
|
stored_coefficient(value, self.display_manning)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
elif self._headers[column] == "medium":
|
elif self._headers[column] == "medium":
|
||||||
self._undo.push(
|
self._undo.push(
|
||||||
SetMediumCommand(
|
SetMediumCommand(
|
||||||
self._data, row, value
|
self._data, row,
|
||||||
|
stored_coefficient(value, self.display_manning)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|
|
||||||
|
|
@ -37,6 +37,7 @@ from PyQt5.QtWidgets import (
|
||||||
QFileDialog, QTableView, QAbstractItemView,
|
QFileDialog, QTableView, QAbstractItemView,
|
||||||
QUndoStack, QShortcut, QAction, QItemDelegate,
|
QUndoStack, QShortcut, QAction, QItemDelegate,
|
||||||
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
QComboBox, QVBoxLayout, QHeaderView, QTabWidget,
|
||||||
|
QGroupBox,
|
||||||
)
|
)
|
||||||
|
|
||||||
from Model.Stricklers.Stricklers import Stricklers
|
from Model.Stricklers.Stricklers import Stricklers
|
||||||
|
|
@ -56,7 +57,11 @@ class StricklersWindow(PamhyrWindow):
|
||||||
|
|
||||||
def __init__(self, study=None, config=None, parent=None):
|
def __init__(self, study=None, config=None, parent=None):
|
||||||
trad = StricklersTranslate()
|
trad = StricklersTranslate()
|
||||||
name = trad[self._pamhyr_name] + " - " + study.name
|
display_manning = getattr(config, "display_manning", False)
|
||||||
|
coefficient_name = (
|
||||||
|
"Mannings" if display_manning else self._pamhyr_name
|
||||||
|
)
|
||||||
|
name = trad[coefficient_name] + " - " + study.name
|
||||||
|
|
||||||
super(StricklersWindow, self).__init__(
|
super(StricklersWindow, self).__init__(
|
||||||
title=name,
|
title=name,
|
||||||
|
|
@ -66,9 +71,23 @@ class StricklersWindow(PamhyrWindow):
|
||||||
parent=parent
|
parent=parent
|
||||||
)
|
)
|
||||||
|
|
||||||
|
self.setup_labels()
|
||||||
self.setup_table()
|
self.setup_table()
|
||||||
self.setup_connections()
|
self.setup_connections()
|
||||||
|
|
||||||
|
def setup_labels(self):
|
||||||
|
display_manning = getattr(self._config, "display_manning", False)
|
||||||
|
study_label = (
|
||||||
|
self._trad["study_mannings"] if display_manning
|
||||||
|
else self._trad["study_stricklers"]
|
||||||
|
)
|
||||||
|
application_label = (
|
||||||
|
self._trad["application_mannings"] if display_manning
|
||||||
|
else self._trad["application_stricklers"]
|
||||||
|
)
|
||||||
|
self.find(QGroupBox, "groupBox_2").setTitle(study_label)
|
||||||
|
self.find(QGroupBox, "groupBox").setTitle(application_label)
|
||||||
|
|
||||||
def setup_table(self):
|
def setup_table(self):
|
||||||
self._table = {}
|
self._table = {}
|
||||||
|
|
||||||
|
|
@ -90,6 +109,9 @@ class StricklersWindow(PamhyrWindow):
|
||||||
editable_headers=editable_headers,
|
editable_headers=editable_headers,
|
||||||
data=data,
|
data=data,
|
||||||
undo=self._undo_stack,
|
undo=self._undo_stack,
|
||||||
|
display_manning=getattr(
|
||||||
|
self._config, "display_manning", False
|
||||||
|
),
|
||||||
)
|
)
|
||||||
|
|
||||||
table.setModel(self._table[t])
|
table.setModel(self._table[t])
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,21 @@ class StricklersTranslate(MainTranslate):
|
||||||
self._dict["Stricklers"] = _translate(
|
self._dict["Stricklers"] = _translate(
|
||||||
"Stricklers", "Strickler coefficients"
|
"Stricklers", "Strickler coefficients"
|
||||||
)
|
)
|
||||||
|
self._dict["Mannings"] = _translate(
|
||||||
|
"Stricklers", "Manning coefficients"
|
||||||
|
)
|
||||||
|
self._dict["study_stricklers"] = _translate(
|
||||||
|
"Stricklers", "Strickler coefficients of the study"
|
||||||
|
)
|
||||||
|
self._dict["study_mannings"] = _translate(
|
||||||
|
"Stricklers", "Manning coefficients of the study"
|
||||||
|
)
|
||||||
|
self._dict["application_stricklers"] = _translate(
|
||||||
|
"Stricklers", "Strickler coefficients of the application"
|
||||||
|
)
|
||||||
|
self._dict["application_mannings"] = _translate(
|
||||||
|
"Stricklers", "Manning coefficients of the application"
|
||||||
|
)
|
||||||
|
|
||||||
self._sub_dict["table_headers"] = {
|
self._sub_dict["table_headers"] = {
|
||||||
"name": self._dict["name"],
|
"name": self._dict["name"],
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,30 @@
|
||||||
|
# CoefficientDisplay.py -- Pamhyr
|
||||||
|
# Copyright (C) 2023-2026 INRAE
|
||||||
|
|
||||||
|
"""View-only conversion helpers for friction coefficients.
|
||||||
|
|
||||||
|
Strickler coefficients remain the canonical representation in models,
|
||||||
|
study files and solver exports.
|
||||||
|
"""
|
||||||
|
|
||||||
|
|
||||||
|
def display_coefficient(strickler, display_manning=False):
|
||||||
|
value = float(strickler)
|
||||||
|
if not display_manning:
|
||||||
|
return value
|
||||||
|
return float("inf") if value == 0.0 else 1.0 / value
|
||||||
|
|
||||||
|
|
||||||
|
def stored_coefficient(displayed, display_manning=False):
|
||||||
|
value = float(displayed)
|
||||||
|
if not display_manning:
|
||||||
|
return value
|
||||||
|
if value == 0.0:
|
||||||
|
raise ValueError("A Manning coefficient cannot be zero")
|
||||||
|
return 1.0 / value
|
||||||
|
|
||||||
|
|
||||||
|
def display_strickler(strickler, display_manning=False):
|
||||||
|
minor = display_coefficient(strickler.minor, display_manning)
|
||||||
|
medium = display_coefficient(strickler.medium, display_manning)
|
||||||
|
return f"{strickler.name} ({minor:g}, {medium:g})"
|
||||||
|
|
@ -242,6 +242,13 @@
|
||||||
</attribute>
|
</attribute>
|
||||||
<layout class="QGridLayout" name="gridLayout_7">
|
<layout class="QGridLayout" name="gridLayout_7">
|
||||||
<item row="0" column="0">
|
<item row="0" column="0">
|
||||||
|
<widget class="QCheckBox" name="checkBox_display_manning">
|
||||||
|
<property name="text">
|
||||||
|
<string>Display Manning coefficients</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
<layout class="QHBoxLayout" name="horizontalLayout_5">
|
||||||
<item>
|
<item>
|
||||||
<widget class="QPushButton" name="pushButton_stricklers_add">
|
<widget class="QPushButton" name="pushButton_stricklers_add">
|
||||||
|
|
|
||||||
|
|
@ -37,7 +37,7 @@ logger = logging.getLogger()
|
||||||
|
|
||||||
class Config(SQL):
|
class Config(SQL):
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
self._version = '0.0.8'
|
self._version = '0.0.9'
|
||||||
self.filename = Config.filename()
|
self.filename = Config.filename()
|
||||||
self.set_default_value()
|
self.set_default_value()
|
||||||
|
|
||||||
|
|
@ -215,6 +215,12 @@ class Config(SQL):
|
||||||
)
|
)
|
||||||
""")
|
""")
|
||||||
|
|
||||||
|
if int(release) < 9:
|
||||||
|
self.execute(
|
||||||
|
"INSERT OR IGNORE INTO data "
|
||||||
|
"VALUES ('display_manning', 'False')"
|
||||||
|
)
|
||||||
|
|
||||||
self.execute(
|
self.execute(
|
||||||
f"UPDATE info SET value='{self._version}' " +
|
f"UPDATE info SET value='{self._version}' " +
|
||||||
"WHERE key='version'"
|
"WHERE key='version'"
|
||||||
|
|
@ -275,6 +281,11 @@ class Config(SQL):
|
||||||
# self.backup_path = v[0]
|
# self.backup_path = v[0]
|
||||||
v = self.execute("SELECT value FROM data WHERE key='backup_frequence'")
|
v = self.execute("SELECT value FROM data WHERE key='backup_frequence'")
|
||||||
self.backup_frequence = v[0]
|
self.backup_frequence = v[0]
|
||||||
|
# Friction coefficient display
|
||||||
|
v = self.execute(
|
||||||
|
"SELECT value FROM data WHERE key='display_manning'"
|
||||||
|
)
|
||||||
|
self.display_manning = v[0] == "True"
|
||||||
# v = self.execute("SELECT value FROM data WHERE key='backup_max'")
|
# v = self.execute("SELECT value FROM data WHERE key='backup_max'")
|
||||||
# self.backup_max = int(v[0])
|
# self.backup_max = int(v[0])
|
||||||
|
|
||||||
|
|
@ -342,6 +353,7 @@ class Config(SQL):
|
||||||
"backup_enable": self.backup_enable,
|
"backup_enable": self.backup_enable,
|
||||||
# "backup_path": self.backup_path,
|
# "backup_path": self.backup_path,
|
||||||
"backup_frequence": self.backup_frequence,
|
"backup_frequence": self.backup_frequence,
|
||||||
|
"display_manning": self.display_manning,
|
||||||
# "backup_max": self.backup_max,
|
# "backup_max": self.backup_max,
|
||||||
"editor": self.editor,
|
"editor": self.editor,
|
||||||
"lang": self.lang,
|
"lang": self.lang,
|
||||||
|
|
@ -424,6 +436,7 @@ class Config(SQL):
|
||||||
self.backup_enable = True
|
self.backup_enable = True
|
||||||
# self.backup_path = ""
|
# self.backup_path = ""
|
||||||
self.backup_frequence = "00:15:00"
|
self.backup_frequence = "00:15:00"
|
||||||
|
self.display_manning = False
|
||||||
# self.backup_max = 10
|
# self.backup_max = 10
|
||||||
|
|
||||||
# Editor
|
# Editor
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue