summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSeth Hitefield <sdhitefield@gmail.com>2015-03-31 18:39:35 -0700
committerTom Rondeau <tom@trondeau.com>2015-04-02 13:27:48 -0700
commitcde6a28977dc2affddb76b6f7f1ffff822581c46 (patch)
tree18322d8d8aefd346dc30d3e5b428b871a8865caf
parent3061e4797af6d308c1f65efca3444923e6beb4fe (diff)
qtgui: Initial removal of pyqwt. Replaced with pyqt4.
-rw-r--r--gr-qtgui/grc/qtgui_range.xml128
-rw-r--r--gr-qtgui/python/qtgui/CMakeLists.txt1
-rw-r--r--gr-qtgui/python/qtgui/__init__.py3
-rwxr-xr-xgr-qtgui/python/qtgui/range.py105
4 files changed, 114 insertions, 123 deletions
diff --git a/gr-qtgui/grc/qtgui_range.xml b/gr-qtgui/grc/qtgui_range.xml
index 2896d081ab..ecbd28a3aa 100644
--- a/gr-qtgui/grc/qtgui_range.xml
+++ b/gr-qtgui/grc/qtgui_range.xml
@@ -8,130 +8,12 @@
<block>
<name>QT GUI Range</name>
<key>variable_qtgui_range</key>
- <import>from PyQt4 import Qt</import>
- <import>from PyQt4.QtCore import QObject, pyqtSlot</import>
- <import>import PyQt4.Qwt5 as Qwt</import>
+ <import>from gnuradio.qtgui import Range</import>
<var_make>self.$(id) = $(id) = $value</var_make>
- <make>#set $win = 'self._%s_layout'%$id
-#if not $label()
- #set $label = '"%s"'%$id
-#end if
-########################################################################
-#if $widget() == "knob"
-########################################################################
-$win = Qt.QVBoxLayout()
-self._$(id)_knob = Qwt.QwtKnob()
-self._$(id)_knob.setRange($start, $stop, $step)
-self._$(id)_knob.setValue(self.$id)
-self._$(id)_knob.valueChanged.connect(self.set_$(id))
-$(win).addWidget(self._$(id)_knob)
-self._$(id)_label = Qt.QLabel($label)
-self._$(id)_label.setAlignment(Qt.Qt.AlignTop | Qt.Qt.AlignHCenter)
-$(win).addWidget(self._$(id)_label)
-#end if
-########################################################################
-#if $widget() == "thermo"
-########################################################################
-$win = Qt.QVBoxLayout()
-self._$(id)_label = Qt.QLabel($label)
-self._$(id)_thermo = Qwt.QwtThermo()
-self._$(id)_thermo.setScalePosition(Qwt.QwtThermo.$orient.scalepos)
-self._$(id)_thermo.setRange($start, $stop)
-self._$(id)_thermo.setValue(self.$id)
-self._$(id)_thermo.$(orient.minfcn)($min_len)
-#if 'horizontal' in $orient().lower()
-self._$(id)_label.setAlignment(Qt.Qt.AlignBottom | Qt.Qt.AlignHCenter)
-$(win).addWidget(self._$(id)_label)
-$(win).addWidget(self._$(id)_thermo)
-#elif 'vertical' in $orient().lower()
-self._$(id)_label.setAlignment(Qt.Qt.AlignTop)
-$(win).addWidget(self._$(id)_thermo)
-$(win).addWidget(self._$(id)_label)
-#end if
-#end if
-########################################################################
-#if $widget() == "counter"
-########################################################################
-$win = Qt.QHBoxLayout()
-$(win).addWidget(Qt.QLabel($label+": "))
-class qwt_counter_pyslot(Qwt.QwtCounter):
- def __init__(self, parent=None):
- Qwt.QwtCounter.__init__(self, parent)
- @pyqtSlot('double')
- def setValue(self, value):
- super(Qwt.QwtCounter, self).setValue(value)
-self._$(id)_counter = qwt_counter_pyslot()
-self._$(id)_counter.setRange($start, $stop, $step)
-self._$(id)_counter.setNumButtons(2)
-self._$(id)_counter.setMinimumWidth($min_len)
-self._$(id)_counter.setValue(self.$id)
-$(win).addWidget(self._$(id)_counter)
-self._$(id)_counter.valueChanged.connect(self.set_$(id))
-#end if
-########################################################################
-#if $widget() == "slider"
-########################################################################
-$win = Qt.QVBoxLayout()
-self._$(id)_label = Qt.QLabel($label)
-self._$(id)_slider = Qwt.QwtSlider(None, Qt.$orient, Qwt.QwtSlider.$orient.scalepos, Qwt.QwtSlider.BgSlot)
-self._$(id)_slider.setRange($start, $stop, $step)
-self._$(id)_slider.setValue(self.$id)
-self._$(id)_slider.$(orient.minfcn)($min_len)
-self._$(id)_slider.valueChanged.connect(self.set_$(id))
-#if 'horizontal' in $orient().lower()
-self._$(id)_label.setAlignment(Qt.Qt.AlignBottom | Qt.Qt.AlignHCenter)
-$(win).addWidget(self._$(id)_label)
-$(win).addWidget(self._$(id)_slider)
-#elif 'vertical' in $orient().lower()
-self._$(id)_label.setAlignment(Qt.Qt.AlignTop)
-$(win).addWidget(self._$(id)_slider)
-$(win).addWidget(self._$(id)_label)
-#end if
-#end if
-########################################################################
-#if $widget() == "counter_slider"
-########################################################################
-$win = Qt.QVBoxLayout()
-self._$(id)_tool_bar = Qt.QToolBar(self)
-$(win).addWidget(self._$(id)_tool_bar)
-self._$(id)_tool_bar.addWidget(Qt.QLabel($label+": "))
-class qwt_counter_pyslot(Qwt.QwtCounter):
- def __init__(self, parent=None):
- Qwt.QwtCounter.__init__(self, parent)
- @pyqtSlot('double')
- def setValue(self, value):
- super(Qwt.QwtCounter, self).setValue(value)
-self._$(id)_counter = qwt_counter_pyslot()
-self._$(id)_counter.setRange($start, $stop, $step)
-self._$(id)_counter.setNumButtons(2)
-self._$(id)_counter.setValue(self.$id)
-self._$(id)_tool_bar.addWidget(self._$(id)_counter)
-self._$(id)_counter.valueChanged.connect(self.set_$(id))
-self._$(id)_slider = Qwt.QwtSlider(None, Qt.Qt.Horizontal, Qwt.QwtSlider.BottomScale, Qwt.QwtSlider.BgSlot)
-self._$(id)_slider.setRange($start, $stop, $step)
-self._$(id)_slider.setValue(self.$id)
-self._$(id)_slider.setMinimumWidth($min_len)
-self._$(id)_slider.valueChanged.connect(self.set_$(id))
-$(win).addWidget(self._$(id)_slider)
-#end if
-$(gui_hint()($win))</make>
- <callback>self.set_$(id)($value)</callback>
- <callback>#if $widget() == "knob"
-Qt.QMetaObject.invokeMethod(self._$(id)_knob, "setValue", Qt.Q_ARG("double", $id))
-#end if
-#if $widget() == "thermo"
-Qt.QMetaObject.invokeMethod(self._$(id)_thermo, "setValue", Qt.Q_ARG("double", $id))
-#end if
-#if $widget() == "counter"
-Qt.QMetaObject.invokeMethod(self._$(id)_counter, "setValue", Qt.Q_ARG("double", $id))
-#end if
-#if $widget() == "slider"
-Qt.QMetaObject.invokeMethod(self._$(id)_slider, "setValue", Qt.Q_ARG("double", $id))
-#end if
-#if $widget() == "counter_slider"
-Qt.QMetaObject.invokeMethod(self._$(id)_counter, "setValue", Qt.Q_ARG("double", $id))
-Qt.QMetaObject.invokeMethod(self._$(id)_slider, "setValue", Qt.Q_ARG("double", $id))
-#end if</callback>
+ <make>#set $win = 'self._%s'%$id
+$(win) = Range($start, $stop, $step, $value, "$widget")
+$(gui_hint()($win))
+ </make>
<param>
<name>Label</name>
<key>label</key>
diff --git a/gr-qtgui/python/qtgui/CMakeLists.txt b/gr-qtgui/python/qtgui/CMakeLists.txt
index c3d83f6034..4fa4d0f484 100644
--- a/gr-qtgui/python/qtgui/CMakeLists.txt
+++ b/gr-qtgui/python/qtgui/CMakeLists.txt
@@ -22,6 +22,7 @@ include(GrPython)
GR_PYTHON_INSTALL(
FILES __init__.py
+ range.py
DESTINATION ${GR_PYTHON_DIR}/gnuradio/qtgui
COMPONENT "qtgui_python"
)
diff --git a/gr-qtgui/python/qtgui/__init__.py b/gr-qtgui/python/qtgui/__init__.py
index e9aeea7a86..d74d0f2a9e 100644
--- a/gr-qtgui/python/qtgui/__init__.py
+++ b/gr-qtgui/python/qtgui/__init__.py
@@ -26,9 +26,12 @@ Provides a GUI interface using the QT backend.
# The presence of this file turns this directory into a Python package
import os
+
try:
from qtgui_swig import *
except ImportError:
dirname, filename = os.path.split(os.path.abspath(__file__))
__path__.append(os.path.join(dirname, "..", "..", "swig"))
from qtgui_swig import *
+
+from range import Range
diff --git a/gr-qtgui/python/qtgui/range.py b/gr-qtgui/python/qtgui/range.py
new file mode 100755
index 0000000000..1d19818692
--- /dev/null
+++ b/gr-qtgui/python/qtgui/range.py
@@ -0,0 +1,105 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+#
+# Copyright 2015 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
+
+from PyQt4 import Qt, QtCore, QtGui
+
+
+class Range(QtGui.QWidget):
+
+ def __init__(self, min, max, step, default, style):
+ QtGui.QWidget.__init__(self)
+
+ self.min = min
+ self.max = max
+ self.step = step
+ self.default = default
+
+ if style == "dial":
+ self.setupDial()
+ elif style == "slider":
+ self.setupSlider()
+ elif style == "counter":
+ self.setupCounter()
+ elif style == "counter_slider":
+ self.setupCounterSlider()
+
+
+ def setupCounterSlider(self):
+ """ Creates the range using a counter and slider """
+
+ layout = Qt.QHBoxLayout()
+ slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
+ slider.setFocusPolicy(QtCore.Qt.NoFocus)
+ slider.setRange(self.min, self.max)
+ slider.setPageStep(self.step)
+ slider.setSingleStep(self.step)
+ slider.setTracking(False)
+ slider.setInvertedControls(True)
+ layout.addWidget(slider)
+
+ counter = QtGui.QDoubleSpinBox(self)
+ counter.setRange(self.min, self.max)
+ counter.setSingleStep(self.step)
+ counter.setDecimals(0)
+ layout.addWidget(counter)
+
+ # Wire the events to each other
+ counter.valueChanged.connect(slider.setValue)
+ slider.valueChanged.connect(counter.setValue)
+
+ self.setLayout(layout)
+
+ def setupCounter(self):
+ """ Creates the range using a counter """
+
+ layout = Qt.QHBoxLayout()
+ counter = QtGui.QDoubleSpinBox(self)
+ counter.setRange(self.min, self.max)
+ counter.setSingleStep(self.step)
+ counter.setDecimals(0)
+ layout.addWidget(counter)
+ self.setLayout(layout)
+
+ def setupSlider(self):
+ """ Creates the range using a slider """
+
+ layout = Qt.QHBoxLayout()
+ slider = QtGui.QSlider(QtCore.Qt.Horizontal, self)
+ slider.setFocusPolicy(QtCore.Qt.NoFocus)
+ slider.setRange(self.min, self.max)
+ slider.setPageStep(self.step)
+ slider.setSingleStep(self.step)
+ slider.setTracking(False)
+ slider.setInvertedControls(True)
+ layout.addWidget(slider)
+ self.setLayout(layout)
+
+ def init_dial(self):
+ layout = Qt.QHBoxLayout()
+ dial = QtGui.QDial(self)
+ dial.setRange(min, max)
+ dial.setSingleStep(step)
+ dial.setNotchesVisible(True)
+ dial.setValue(init_value)
+ layout.addWidget(dial)
+ self.setLayout(layout)