[WIP] gui: add specific input widgets

+ add bool, enum and generic input widgets

Change-Id: If6962ed6f2c96a319d4ed8c8ee5fb8c03f6e7f82
Reviewed-on: https://forge.frm2.tum.de/review/c/secop/frappy/+/30723
Tested-by: Jenkins Automated Tests <pedersen+jenkins@frm2.tum.de>
Reviewed-by: Alexander Zaft <a.zaft@fz-juelich.de>
This commit is contained in:
Alexander Zaft 2023-03-14 16:03:16 +01:00 committed by Markus Zolliker
parent 47000f7a9f
commit f069b31d5a
4 changed files with 70 additions and 9 deletions

View File

@ -72,9 +72,7 @@ class QSECNode(QObject):
return self.modules[module]['parameters'][parameter]
def setParameter(self, module, parameter, value):
# TODO: change the widgets for complex types to no longer use strings
datatype = self.conn.modules[module]['parameters'][parameter]['datatype']
self.conn.setParameter(module, parameter, datatype.from_string(value))
self.conn.setParameter(module, parameter, value)
def getParameter(self, module, parameter):
return self.conn.getParameter(module, parameter, True)

View File

@ -0,0 +1,62 @@
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.checkState()
def submit(self):
self.submitted.emit()

View File

@ -27,6 +27,7 @@ from frappy.gui.qt import QColor, QDialog, QHBoxLayout, QIcon, QLabel, \
from frappy.gui.util import Colors, loadUi
from frappy.gui.valuewidgets import get_widget
from frappy.gui.inputwidgets import get_input_widget
class CommandDialog(QDialog):
@ -316,16 +317,16 @@ class ModuleWidget(QWidget):
def _addRWParam(self, param, row):
nameLabel = AnimatedLabel(param)
display = QLineEdit()
inputEdit = QLineEdit()
props = self._node.getProperties(self._name, param)
inputEdit = get_input_widget(props.get('datatype'))
submitButton = QPushButton('set')
submitButton.setIcon(QIcon(':/icons/submit'))
inputEdit.setPlaceholderText('new value')
p = display.palette()
p.setColor(display.backgroundRole(), Colors.palette.window().color())
display.setPalette(p)
submitButton.pressed.connect(lambda: self._button_pressed(param))
inputEdit.returnPressed.connect(lambda: self._button_pressed(param))
inputEdit.submitted.connect(lambda param=param: self._button_pressed(param))
self._paramDisplays[param] = display
self._paramInputs[param] = inputEdit
self._paramWidgets[param] = [nameLabel, display, inputEdit, submitButton]
@ -442,7 +443,7 @@ class ModuleWidget(QWidget):
self.paramDetails.emit(self._name, param)
def _button_pressed(self, param):
target = self._paramInputs[param].text()
target = self._paramInputs[param].get_input()
try:
self._node.setParameter(self._name, param, target)
except Exception as e:

View File

@ -46,7 +46,7 @@ try:
QScrollArea, QSizePolicy, QSpacerItem, QSpinBox, QStyle, \
QStyleOptionTab, QStylePainter, QTabBar, QTabWidget, QTextEdit, \
QToolButton, QTreeView, QTreeWidget, QTreeWidgetItem, QVBoxLayout, \
QWidget
QWidget,QSlider
import frappy.gui.resources_qt6
@ -66,6 +66,6 @@ except ImportError as e:
QRadioButton, QScrollArea, QShortcut, QSizePolicy, QSpacerItem, \
QSpinBox, QStyle, QStyleOptionTab, QStylePainter, QTabBar, \
QTabWidget, QTextEdit, QToolButton, QTreeView, QTreeWidget, \
QTreeWidgetItem, QVBoxLayout, QWidget
QTreeWidgetItem, QVBoxLayout, QWidget, QSlider
import frappy.gui.resources_qt5