frappy/frappy/gui/inputwidgets.py
Markus Zolliker 00b57e3d2c GUI bugfix: use isChecked instead of checkState in BoolInput
Change-Id: I68153543d8f3424a70da5b3999e68f3e91edb2dc
2023-06-15 10:23:07 +02:00

63 lines
1.7 KiB
Python

from frappy.gui.qt import QCheckBox, QComboBox, QLineEdit, pyqtSignal
from frappy.datatypes import BoolType, EnumType
# ArrayOf, BLOBType, FloatRange, IntRange, StringType, StructOf, TextType, TupleOf
def get_input_widget(datatype, parent=None):
return {
EnumType: EnumInput,
BoolType: BoolInput,
}.get(datatype.__class__, GenericInput)(datatype, parent)
class GenericInput(QLineEdit):
submitted = pyqtSignal()
def __init__(self, datatype, parent=None):
super().__init__(parent)
self.datatype = datatype
self.setPlaceholderText('new value')
self.returnPressed.connect(self.submit)
def get_input(self):
return self.datatype.from_string(self.text())
def submit(self):
self.submitted.emit()
class EnumInput(QComboBox):
submitted = pyqtSignal()
def __init__(self, datatype, parent=None):
super().__init__(parent)
self.setPlaceholderText('choose value')
self.datatype = datatype
self._map = {}
self._revmap = {}
for idx, member in enumerate(datatype._enum.members):
self._map[idx] = member
self._revmap[member.name] = idx
self._revmap[member.value] = idx
self.addItem(member.name, member.value)
def get_input(self):
return self._map[self.currentIndex()].value
def submit(self):
self.submitted.emit()
class BoolInput(QCheckBox):
submitted = pyqtSignal()
def __init__(self, datatype, parent=None):
super().__init__(parent)
self.datatype = datatype
def get_input(self):
return self.isChecked()
def submit(self):
self.submitted.emit()