diff options
author | Tom Rondeau <tom@trondeau.com> | 2015-04-21 16:46:55 -0400 |
---|---|---|
committer | Tom Rondeau <tom@trondeau.com> | 2015-04-22 11:26:17 -0400 |
commit | bb8e65d506b1e28b38548649ed2cf7fa86e70762 (patch) | |
tree | 9fcd83a0f882da591aa1953b1d4951ddfaf4312d /gr-qtgui/python/qtgui/range.py | |
parent | d8a491fde1f29e10d77f536ea1234ee96089202a (diff) |
qtgui: adds Type setting for Range widget.
Can set type to Float, Int, or Long to connect to properties requiring
specific data types. Defaults to Float.
Diffstat (limited to 'gr-qtgui/python/qtgui/range.py')
-rwxr-xr-x | gr-qtgui/python/qtgui/range.py | 52 |
1 files changed, 35 insertions, 17 deletions
diff --git a/gr-qtgui/python/qtgui/range.py b/gr-qtgui/python/qtgui/range.py index 168e6662c3..bb7c100ea0 100755 --- a/gr-qtgui/python/qtgui/range.py +++ b/gr-qtgui/python/qtgui/range.py @@ -64,13 +64,17 @@ class Range(object): class RangeWidget(QtGui.QWidget): - def __init__(self, ranges, slot, label, style): + def __init__(self, ranges, slot, label, style, astype="float"): """ Creates the QT Range widget """ QtGui.QWidget.__init__(self) self.range = ranges self.style = style + # astype tells the block how to return the value as a standard + # Python type. Can be: long, int, or float. + types = {"float": float, "long": long, "int": int} + # Top-block function to call when any value changes # Some widgets call this directly when their value changes. # Others have intermediate functions to map the value into the right range. @@ -80,25 +84,28 @@ class RangeWidget(QtGui.QWidget): label = Qt.QLabel(label) layout.addWidget(label) + if style == "dial": - self.d_widget = self.Dial(self, self.range, self.notifyChanged) + self.d_widget = self.Dial(self, self.range, self.notifyChanged, types[astype]) elif style == "slider": - self.d_widget = self.Slider(self, self.range, self.notifyChanged) + self.d_widget = self.Slider(self, self.range, self.notifyChanged, types[astype]) elif style == "counter": # The counter widget can be directly wired to the notifyChanged slot - self.d_widget = self.Counter(self, self.range, self.notifyChanged) + self.d_widget = self.Counter(self, self.range, self.notifyChanged, types[astype]) else: # The CounterSlider needs its own internal handlers before calling notifyChanged - self.d_widget = self.CounterSlider(self, self.range, self.notifyChanged) + self.d_widget = self.CounterSlider(self, self.range, self.notifyChanged, types[astype]) layout.addWidget(self.d_widget) self.setLayout(layout) class Dial(QtGui.QDial): """ Creates the range using a dial """ - def __init__(self, parent, ranges, slot): + def __init__(self, parent, ranges, slot, astype=float): QtGui.QDial.__init__(self, parent) + self.astype = astype + # Setup the dial self.setRange(0, ranges.nsteps-1) self.setSingleStep(1) @@ -116,13 +123,15 @@ class RangeWidget(QtGui.QWidget): def changed(self, value): """ Handles maping the value to the right range before calling the slot. """ val = self.range.map_range(value) - self.notifyChanged(val) + self.notifyChanged(self.astype(val)) class Slider(QtGui.QSlider): """ Creates the range using a slider """ - def __init__(self, parent, ranges, slot): + def __init__(self, parent, ranges, slot, astype=float): QtGui.QSlider.__init__(self, QtCore.Qt.Horizontal, parent) + self.astype = astype + # Setup the slider #self.setFocusPolicy(QtCore.Qt.NoFocus) self.setRange(0, ranges.nsteps - 1) @@ -149,7 +158,7 @@ class RangeWidget(QtGui.QWidget): def changed(self, value): """ Handle the valueChanged signal and map the value into the correct range """ val = self.range.map_range(value) - self.notifyChanged(val) + self.notifyChanged(self.astype(val)) def mousePressEvent(self, event): if((event.button() == QtCore.Qt.LeftButton)): @@ -168,9 +177,11 @@ class RangeWidget(QtGui.QWidget): class Counter(QtGui.QDoubleSpinBox): """ Creates the range using a counter """ - def __init__(self, parent, ranges, slot): + def __init__(self, parent, ranges, slot, astype=float): QtGui.QDoubleSpinBox.__init__(self, parent) + self.astype = astype + # Setup the counter self.setRange(ranges.min, ranges.max) self.setValue(ranges.default) @@ -179,18 +190,25 @@ class RangeWidget(QtGui.QWidget): self.setDecimals(ranges.precision) # The counter already handles floats and can be connected directly. - self.valueChanged.connect(slot) + self.valueChanged.connect(self.changed) + self.notifyChanged = slot + + def changed(self, value): + """ Handle the valueChanged signal by converting to the right type """ + self.notifyChanged(self.astype(value)) class CounterSlider(QtGui.QWidget): """ Creates the range using a counter and slider """ - def __init__(self, parent, ranges, slot): + def __init__(self, parent, ranges, slot, astype=float): QtGui.QWidget.__init__(self, parent) + self.astype = astype + # Slot to call in the parent self.notifyChanged = slot - self.slider = RangeWidget.Slider(parent, ranges, self.sliderChanged) - self.counter = RangeWidget.Counter(parent, ranges, self.counterChanged) + self.slider = RangeWidget.Slider(parent, ranges, self.sliderChanged, astype) + self.counter = RangeWidget.Counter(parent, ranges, self.counterChanged, astype) # Need another horizontal layout to wrap the other widgets. layout = Qt.QHBoxLayout() @@ -207,8 +225,8 @@ class RangeWidget(QtGui.QWidget): # If the counter was changed, ignore any of these events if not self.ignoreSlider: # Value is already float. Just set the counter - self.counter.setValue(value) - self.notifyChanged(value) + self.counter.setValue(self.astype(value)) + self.notifyChanged(self.astype(value)) self.ignoreSlider = False def counterChanged(self, value): @@ -223,4 +241,4 @@ class RangeWidget(QtGui.QWidget): self.ignoreSlider = True self.slider.setValue(new) - self.notifyChanged(value) + self.notifyChanged(self.astype(value)) |