SolverParameters: new combobox instead of index in the value field for critical shields, shields correction and solid capacity

This commit is contained in:
Dylan Jeannin committed 2026-09-04 11:40:04 +02:00
1 parent d8e9d786d9
commit beece68498
3 files changed
+77 -2

No files matched your search

+51 -1
View File
@@ -45,6 +45,36 @@ logger = logging.getLogger()
_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):
def _setup_lst(self):
self._tab = self._opt_data
@@ -68,6 +98,10 @@ class TableModel(PamhyrTableModel):
elif cname == "value":
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"):
value = self._trad.get_dict("yes_no")[value]
@@ -79,7 +113,14 @@ class TableModel(PamhyrTableModel):
if not index.isValid() or role != Qt.EditRole:
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
row = index.row()
@@ -103,6 +144,15 @@ class TableModel(PamhyrTableModel):
self.dataChanged.emit(index, index)
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):
self._undo.undo()
self.layoutChanged.emit()