[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:
parent
47000f7a9f
commit
f069b31d5a
@ -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)
|
||||
|
62
frappy/gui/inputwidgets.py
Normal file
62
frappy/gui/inputwidgets.py
Normal 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()
|
@ -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:
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user