From f0ea4bd9b8ac4d221d69a561718d6f3608feae8e Mon Sep 17 00:00:00 2001 From: Enrico Faulhaber Date: Thu, 26 Apr 2018 16:19:41 +0200 Subject: [PATCH] fix internal event handling stringify at the latest possible moment, not the earliest Change-Id: I230138c5787f97a72e8726ddc3546c61092d87c5 Reviewed-on: https://forge.frm2.tum.de/review/17858 Tested-by: JenkinsCodeReview Reviewed-by: Enrico Faulhaber --- secop/gui/modulectrl.py | 5 ++++- secop/gui/params/__init__.py | 28 ++++++++++++++++------------ 2 files changed, 20 insertions(+), 13 deletions(-) diff --git a/secop/gui/modulectrl.py b/secop/gui/modulectrl.py index 3cec6d2..810ea58 100644 --- a/secop/gui/modulectrl.py +++ b/secop/gui/modulectrl.py @@ -363,4 +363,7 @@ class ModuleCtrl(QWidget): def _updateValue(self, module, parameter, value): if module != self._module: return - self._paramWidgets[parameter][1].updateValue(unicode(value[0])) + # value is [data, qualifiers] + # note: update subwidgets with the data portion only + # note: paramwidgets[..][1] is a ParameterView from secop.gui.params + self._paramWidgets[parameter][1].updateValue(value[0]) diff --git a/secop/gui/params/__init__.py b/secop/gui/params/__init__.py index 0ef3cea..81a0592 100644 --- a/secop/gui/params/__init__.py +++ b/secop/gui/params/__init__.py @@ -35,7 +35,7 @@ from secop.datatypes import EnumType class ParameterWidget(QWidget): - setRequested = pyqtSignal(str, str, str) # module, parameter, target + setRequested = pyqtSignal(str, str, object) # module, parameter, target cmdRequested = pyqtSignal(str, str, list) # module, command, args def __init__(self, @@ -57,7 +57,7 @@ class ParameterWidget(QWidget): # load ui file, set initvalue to right widget pass - def updateValue(self, valuestr): + def updateValue(self, value): # async ! pass @@ -74,15 +74,17 @@ class GenericParameterWidget(ParameterWidget): else: self.setLineEdit.returnPressed.connect( self.on_setPushButton_clicked) - self.updateValue(str(initvalue)) + self.updateValue(initvalue) @pyqtSlot() def on_setPushButton_clicked(self): self.setRequested.emit(self._module, self._paramcmd, self.setLineEdit.text()) - def updateValue(self, valuestr): - self.currentLineEdit.setText(valuestr) + def updateValue(self, value): + if self._datatype: + value = self._datatype.import_value(value) + self.currentLineEdit.setText(str(value)) class EnumParameterWidget(GenericParameterWidget): @@ -109,23 +111,23 @@ class EnumParameterWidget(GenericParameterWidget): else: self.setComboBox.activated.connect(self.on_setPushButton_clicked) - self.updateValue(str(initvalue)) + self.updateValue(initvalue) @pyqtSlot() def on_setPushButton_clicked(self): _enumval, enumname = self._map[self.setComboBox.currentIndex()] self.setRequested.emit(self._module, self._paramcmd, enumname) - def updateValue(self, valuestr): + def updateValue(self, value): try: - valuestr = int(valuestr) + value = int(value) except ValueError: pass - if valuestr in self._revmap: - index = self._revmap[valuestr] + if value in self._revmap: + index = self._revmap[value] self.currentLineEdit.setText('(%d): %s' % self._map[index]) else: - self.currentLineEdit.setText('undefined Value: %r' % valuestr) + self.currentLineEdit.setText('undefined Value: %r' % value) class GenericCmdWidget(ParameterWidget): @@ -142,6 +144,8 @@ class GenericCmdWidget(ParameterWidget): @pyqtSlot() def on_cmdPushButton_clicked(self): # wait until command complete before retrying + # since the command is scheduled async: what if an errot happens? + # XXX: button stays deactivated upon errors in execution of cmd... self.cmdPushButton.setEnabled(False) self.cmdRequested.emit( self._module, @@ -149,7 +153,7 @@ class GenericCmdWidget(ParameterWidget): self._datatype.from_string( self.cmdLineEdit.text())) - def updateValue(self, valuestr): + def updateValue(self, value): # open dialog and show value, if any. # then re-activate the command button self.cmdPushButton.setEnabled(True)