mirror of https://gitlab.com/pamhyr/pamhyr2
SolverParameters: new combobox instead of index in the value field for critical shields, shields correction and solid capacity
parent
d8e9d786d9
commit
beece68498
|
|
@ -45,6 +45,36 @@ logger = logging.getLogger()
|
||||||
_translate = QCoreApplication.translate
|
_translate = QCoreApplication.translate
|
||||||
|
|
||||||
|
|
||||||
|
class ValueDelegate(QItemDelegate):
|
||||||
|
"""Use a combo box for solver parameters backed by an index."""
|
||||||
|
|
||||||
|
def createEditor(self, parent, option, index):
|
||||||
|
choices = index.model().value_choices(index)
|
||||||
|
if choices is None:
|
||||||
|
return QLineEdit(parent)
|
||||||
|
|
||||||
|
editor = QComboBox(parent)
|
||||||
|
for value, label in choices.items():
|
||||||
|
editor.addItem(label, value)
|
||||||
|
return editor
|
||||||
|
|
||||||
|
def setEditorData(self, editor, index):
|
||||||
|
if isinstance(editor, QComboBox):
|
||||||
|
current = index.model().raw_value(index)
|
||||||
|
editor.setCurrentIndex(editor.findData(current))
|
||||||
|
else:
|
||||||
|
editor.setText(str(index.model().raw_value(index)))
|
||||||
|
|
||||||
|
def setModelData(self, editor, model, index):
|
||||||
|
if isinstance(editor, QComboBox):
|
||||||
|
model.setData(index, editor.currentData())
|
||||||
|
else:
|
||||||
|
model.setData(index, editor.text())
|
||||||
|
|
||||||
|
def updateEditorGeometry(self, editor, option, index):
|
||||||
|
editor.setGeometry(option.rect)
|
||||||
|
|
||||||
|
|
||||||
class TableModel(PamhyrTableModel):
|
class TableModel(PamhyrTableModel):
|
||||||
def _setup_lst(self):
|
def _setup_lst(self):
|
||||||
self._tab = self._opt_data
|
self._tab = self._opt_data
|
||||||
|
|
@ -68,6 +98,10 @@ class TableModel(PamhyrTableModel):
|
||||||
elif cname == "value":
|
elif cname == "value":
|
||||||
value = self._lst.get(row)[cname]
|
value = self._lst.get(row)[cname]
|
||||||
|
|
||||||
|
choices = self.value_choices(index)
|
||||||
|
if choices is not None:
|
||||||
|
return choices.get(value, value)
|
||||||
|
|
||||||
if value in self._trad.get_dict("yes_no"):
|
if value in self._trad.get_dict("yes_no"):
|
||||||
value = self._trad.get_dict("yes_no")[value]
|
value = self._trad.get_dict("yes_no")[value]
|
||||||
|
|
||||||
|
|
@ -79,7 +113,14 @@ class TableModel(PamhyrTableModel):
|
||||||
if not index.isValid() or role != Qt.EditRole:
|
if not index.isValid() or role != Qt.EditRole:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
if self.is_same_data(index, value):
|
choices = self.value_choices(index)
|
||||||
|
if choices is not None:
|
||||||
|
reverse_choices = {label: key for key, label in choices.items()}
|
||||||
|
value = reverse_choices.get(value, value)
|
||||||
|
if str(self.raw_value(index)) == str(value):
|
||||||
|
return False
|
||||||
|
|
||||||
|
elif self.is_same_data(index, value):
|
||||||
return False
|
return False
|
||||||
|
|
||||||
row = index.row()
|
row = index.row()
|
||||||
|
|
@ -103,6 +144,15 @@ class TableModel(PamhyrTableModel):
|
||||||
self.dataChanged.emit(index, index)
|
self.dataChanged.emit(index, index)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def value_choices(self, index):
|
||||||
|
if not index.isValid():
|
||||||
|
return None
|
||||||
|
name = self._lst.get(index.row())["name"]
|
||||||
|
return self._trad.get_dict("indexed_values").get(name)
|
||||||
|
|
||||||
|
def raw_value(self, index):
|
||||||
|
return self._lst.get(index.row())["value"]
|
||||||
|
|
||||||
def undo(self):
|
def undo(self):
|
||||||
self._undo.undo()
|
self._undo.undo()
|
||||||
self.layoutChanged.emit()
|
self.layoutChanged.emit()
|
||||||
|
|
|
||||||
|
|
@ -41,7 +41,7 @@ from PyQt5.QtWidgets import (
|
||||||
)
|
)
|
||||||
|
|
||||||
from View.SolverParameters.UndoCommand import *
|
from View.SolverParameters.UndoCommand import *
|
||||||
from View.SolverParameters.Table import TableModel
|
from View.SolverParameters.Table import TableModel, ValueDelegate
|
||||||
from View.SolverParameters.translate import ParamTranslate
|
from View.SolverParameters.translate import ParamTranslate
|
||||||
|
|
||||||
from Solver.Solvers import solver_long_name, solver_type_list
|
from Solver.Solvers import solver_long_name, solver_type_list
|
||||||
|
|
@ -103,6 +103,7 @@ class SolverParametersWindow(PamhyrWindow):
|
||||||
opt_data=st,
|
opt_data=st,
|
||||||
table_headers=self._trad.get_dict("table_headers"),
|
table_headers=self._trad.get_dict("table_headers"),
|
||||||
editable_headers=editable_headers,
|
editable_headers=editable_headers,
|
||||||
|
delegates={"value": ValueDelegate(table)},
|
||||||
trad=self._trad,
|
trad=self._trad,
|
||||||
undo=self._undo_stack[st],
|
undo=self._undo_stack[st],
|
||||||
)
|
)
|
||||||
|
|
|
||||||
|
|
@ -50,6 +50,30 @@ class ParamTranslate(MainTranslate):
|
||||||
_translate("SolverParameters", "N"): "n",
|
_translate("SolverParameters", "N"): "n",
|
||||||
}
|
}
|
||||||
|
|
||||||
|
self._sub_dict["indexed_values"] = {
|
||||||
|
"mage_shields_critique": {
|
||||||
|
"1": _translate("SolverParameters", "Constant (0.047)"),
|
||||||
|
"2": _translate("SolverParameters", "Soulsby (1997)"),
|
||||||
|
"3": _translate("SolverParameters", "Camenen (2012)"),
|
||||||
|
},
|
||||||
|
"mage_shields_correction": {
|
||||||
|
"0": _translate("SolverParameters", "No correction"),
|
||||||
|
"1": _translate("SolverParameters", "Effective Shields"),
|
||||||
|
},
|
||||||
|
"mage_capacite_solide": {
|
||||||
|
"1": _translate(
|
||||||
|
"SolverParameters", "Meyer-Peter & Muller (1948)"
|
||||||
|
),
|
||||||
|
"2": _translate(
|
||||||
|
"SolverParameters", "Camenen & Larson (2005)"
|
||||||
|
),
|
||||||
|
"3": _translate(
|
||||||
|
"SolverParameters", "Engelund & Hansen (1967)"
|
||||||
|
),
|
||||||
|
"4": _translate("SolverParameters", "Recking (2013)"),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
|
||||||
self._sub_dict["names"] = {
|
self._sub_dict["names"] = {
|
||||||
"all_init_time":
|
"all_init_time":
|
||||||
_translate("SolverParameters",
|
_translate("SolverParameters",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue