rework EnumType to use better Enum's

unfortunately IntEnum can't be bent like we would need it (extensible).
So we had to write our own....

The members of the Enum still behave like ints, but also have
.name and .value attributes, should they be needed.

needed adoptions to correctly use (and test) the EnumType are included.

Change-Id: Ie019d2f449a244c4fab00554b6c6daaac8948b59
Reviewed-on: https://forge.frm2.tum.de/review/17843
Tested-by: JenkinsCodeReview <bjoern_pedersen@frm2.tum.de>
Reviewed-by: Enrico Faulhaber <enrico.faulhaber@frm2.tum.de>
This commit is contained in:
Enrico Faulhaber
2018-04-26 16:29:09 +02:00
parent 927ca854a2
commit 574a66c65b
15 changed files with 644 additions and 298 deletions

View File

@ -21,6 +21,8 @@
#
# *****************************************************************************
from __future__ import print_function
try:
# py2
unicode(u'')
@ -32,6 +34,7 @@ from secop.gui.qt import QWidget, QLabel, QPushButton as QButton, QLineEdit, \
from secop.gui.util import loadUi
from secop.datatypes import EnumType
from secop.lib import formatExtendedStack
class ParameterWidget(QWidget):
@ -94,15 +97,12 @@ class EnumParameterWidget(GenericParameterWidget):
loadUi(self, 'parambuttons_select.ui')
# transfer allowed settings from datatype to comboBoxes
self._map = {} # maps index to enumstring
self._revmap = {} # maps enumstring to index
index = 0
for enumval, enumname in sorted(self._datatype.entries.items()):
self.setComboBox.addItem(enumname, enumval)
self._map[index] = (enumval, enumname)
self._revmap[enumname] = index
self._revmap[enumval] = index
index += 1
self._map = {} # maps index to EnumMember
self._revmap = {} # maps Enum.name + Enum.value to index
for index, member in enumerate(self._datatype._enum.members):
self.setComboBox.addItem(member.name, member.value)
self._map[index] = member
self._revmap[member.name] = self._revmap[member.value] = index
if self._readonly:
self.setLabel.setEnabled(False)
self.setComboBox.setEnabled(False)
@ -115,19 +115,16 @@ class EnumParameterWidget(GenericParameterWidget):
@pyqtSlot()
def on_setPushButton_clicked(self):
_enumval, enumname = self._map[self.setComboBox.currentIndex()]
self.setRequested.emit(self._module, self._paramcmd, enumname)
member = self._map[self.setComboBox.currentIndex()]
self.setRequested.emit(self._module, self._paramcmd, member)
def updateValue(self, value):
try:
value = int(value)
except ValueError:
pass
if value in self._revmap:
index = self._revmap[value]
self.currentLineEdit.setText('(%d): %s' % self._map[index])
else:
member = self._map[self._revmap[int(value)]]
self.currentLineEdit.setText('%s.%s (%d)' % (member.enum.name, member.name, member.value))
except Exception:
self.currentLineEdit.setText('undefined Value: %r' % value)
print(formatExtendedStack())
class GenericCmdWidget(ParameterWidget):