From 471ebf621da0426fefda870dfe29d75cd9ef2da6 Mon Sep 17 00:00:00 2001
From: trondeau <trondeau@221aa14e-8319-0410-a670-987f0aec2ac5>
Date: Mon, 6 Jul 2009 04:39:24 +0000
Subject: Merging trondeau/qt branch r11231:11360. This merge improves the
 usability and examples of the QT-based interface.

git-svn-id: http://gnuradio.org/svn/gnuradio/trunk@11361 221aa14e-8319-0410-a670-987f0aec2ac5
---
 .../python/digital/benchmark_qt_loopback.py        |   4 +-
 .../python/digital/benchmark_qt_rx.py              |  15 +-
 .../python/digital/qt_digital_window.py            | 267 ++++--
 .../python/digital/qt_digital_window.ui            | 910 +++++++++++++--------
 gnuradio-examples/python/digital/qt_rx_window.py   | 102 ++-
 gnuradio-examples/python/digital/qt_rx_window.ui   | 668 +++++++++------
 gnuradio-examples/python/usrp2/qt_wfm_interface.py |  99 +++
 gnuradio-examples/python/usrp2/qt_wfm_interface.ui | 253 ++++++
 gnuradio-examples/python/usrp2/usrp2_wfm_qt.py     | 352 ++++++++
 9 files changed, 1959 insertions(+), 711 deletions(-)
 create mode 100644 gnuradio-examples/python/usrp2/qt_wfm_interface.py
 create mode 100644 gnuradio-examples/python/usrp2/qt_wfm_interface.ui
 create mode 100755 gnuradio-examples/python/usrp2/usrp2_wfm_qt.py

(limited to 'gnuradio-examples/python')

diff --git a/gnuradio-examples/python/digital/benchmark_qt_loopback.py b/gnuradio-examples/python/digital/benchmark_qt_loopback.py
index 3fd76fdf95..cd77f0748b 100755
--- a/gnuradio-examples/python/digital/benchmark_qt_loopback.py
+++ b/gnuradio-examples/python/digital/benchmark_qt_loopback.py
@@ -229,10 +229,10 @@ class my_top_block(gr.top_block):
                 fftsize = 2048
 
                 self.snk_tx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
-                                           -1/2, 1/2,
+                                           0, 1,
                                            "Tx", True, True, False, True, True)
                 self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
-                                           -1/2, 1/2,
+                                           0, 1,
                                            "Rx", True, True, False, True, True)
 
                 self.snk_tx.set_frequency_axis(-80, 0)
diff --git a/gnuradio-examples/python/digital/benchmark_qt_rx.py b/gnuradio-examples/python/digital/benchmark_qt_rx.py
index 62f9f34a35..33cf94a5c5 100755
--- a/gnuradio-examples/python/digital/benchmark_qt_rx.py
+++ b/gnuradio-examples/python/digital/benchmark_qt_rx.py
@@ -48,7 +48,7 @@ try:
 except ImportError:
     print "Error: could not find qt_rx_window.py:"
     print "\tYou must first build this from qt_rx_window.ui with the following command:"
-    print "\t  pyuic4 qt_rx_window.ui -o qt_rx_window.py"
+    print "\t\"pyuic4 qt_rx_window.ui -o qt_rx_window.py\""
     sys.exit(1)
 
 #import os
@@ -213,12 +213,13 @@ class my_top_block(gr.top_block):
         if self.gui_on:
             self.qapp = QtGui.QApplication(sys.argv)
             fftsize = 2048
-            
+
+            bw_in = self.u.adc_rate() / self.decim()
             self.snk_rxin = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
-                                         -1/2, 1/2,
+                                         self._rx_freq, bw_in,
                                          "Received", True, True, False, True, True, False)
             self.snk_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
-                                       -1/2, 1/2,
+                                       0, self._bitrate,
                                        "Post-Synchronizer", True, True, False, True, True, False)
 
             self.snk_rxin.set_frequency_axis(-60, 60)
@@ -285,6 +286,12 @@ class my_top_block(gr.top_block):
         self._decim = decim
         self.u.set_decim(self._decim)
 
+        if(self.gui_on):
+            bw_in = self.u.adc_rate() / self._decim
+            self._bitrate = bw_in / self._samples_per_symbol
+            self.snk_rxin.set_frequency_range(0, -bw_in/2.0, bw_in/2.0)
+            self.snk_rx.set_frequency_range(0, -self._bitrate/2.0, self._bitrate/2.0)
+
     def frequency(self):
         return self._rx_freq
 
diff --git a/gnuradio-examples/python/digital/qt_digital_window.py b/gnuradio-examples/python/digital/qt_digital_window.py
index 5e8885918a..e3feb57c93 100644
--- a/gnuradio-examples/python/digital/qt_digital_window.py
+++ b/gnuradio-examples/python/digital/qt_digital_window.py
@@ -2,7 +2,7 @@
 
 # Form implementation generated from reading ui file 'qt_digital_window.ui'
 #
-# Created: Thu Jun 18 08:08:38 2009
+# Created: Fri Jul  3 10:03:54 2009
 #      by: PyQt4 UI code generator 4.4.3
 #
 # WARNING! All changes made in this file will be lost!
@@ -12,94 +12,210 @@ from PyQt4 import QtCore, QtGui
 class Ui_DigitalWindow(object):
     def setupUi(self, DigitalWindow):
         DigitalWindow.setObjectName("DigitalWindow")
-        DigitalWindow.resize(1236, 739)
+        DigitalWindow.resize(1050, 752)
         self.centralwidget = QtGui.QWidget(DigitalWindow)
         self.centralwidget.setObjectName("centralwidget")
-        self.closeButton = QtGui.QPushButton(self.centralwidget)
-        self.closeButton.setGeometry(QtCore.QRect(1120, 640, 101, 31))
-        self.closeButton.setObjectName("closeButton")
+        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
+        self.gridLayout.setObjectName("gridLayout")
+        self.verticalLayout_2 = QtGui.QVBoxLayout()
+        self.verticalLayout_2.setObjectName("verticalLayout_2")
+        self.sysBox = QtGui.QGroupBox(self.centralwidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.sysBox.sizePolicy().hasHeightForWidth())
+        self.sysBox.setSizePolicy(sizePolicy)
+        self.sysBox.setMinimumSize(QtCore.QSize(240, 60))
+        self.sysBox.setMaximumSize(QtCore.QSize(240, 16777215))
+        self.sysBox.setObjectName("sysBox")
+        self.formLayoutWidget = QtGui.QWidget(self.sysBox)
+        self.formLayoutWidget.setGeometry(QtCore.QRect(10, 20, 221, 31))
+        self.formLayoutWidget.setObjectName("formLayoutWidget")
+        self.formLayout = QtGui.QFormLayout(self.formLayoutWidget)
+        self.formLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
+        self.formLayout.setVerticalSpacing(20)
+        self.formLayout.setObjectName("formLayout")
+        self.sampleRateEdit = QtGui.QLineEdit(self.formLayoutWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.sampleRateEdit.sizePolicy().hasHeightForWidth())
+        self.sampleRateEdit.setSizePolicy(sizePolicy)
+        self.sampleRateEdit.setMinimumSize(QtCore.QSize(100, 26))
+        self.sampleRateEdit.setMaximumSize(QtCore.QSize(100, 26))
+        self.sampleRateEdit.setObjectName("sampleRateEdit")
+        self.formLayout.setWidget(0, QtGui.QFormLayout.FieldRole, self.sampleRateEdit)
+        self.sampleRateLabel = QtGui.QLabel(self.formLayoutWidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.sampleRateLabel.sizePolicy().hasHeightForWidth())
+        self.sampleRateLabel.setSizePolicy(sizePolicy)
+        self.sampleRateLabel.setMinimumSize(QtCore.QSize(0, 20))
+        self.sampleRateLabel.setMaximumSize(QtCore.QSize(16777215, 20))
+        self.sampleRateLabel.setObjectName("sampleRateLabel")
+        self.formLayout.setWidget(0, QtGui.QFormLayout.LabelRole, self.sampleRateLabel)
+        self.verticalLayout_2.addWidget(self.sysBox)
+        spacerItem = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.verticalLayout_2.addItem(spacerItem)
+        self.gridLayout.addLayout(self.verticalLayout_2, 2, 0, 1, 1)
+        self.channelModeBox = QtGui.QGroupBox(self.centralwidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.channelModeBox.sizePolicy().hasHeightForWidth())
+        self.channelModeBox.setSizePolicy(sizePolicy)
+        self.channelModeBox.setMinimumSize(QtCore.QSize(245, 130))
+        self.channelModeBox.setMaximumSize(QtCore.QSize(245, 16777215))
+        self.channelModeBox.setObjectName("channelModeBox")
+        self.formLayoutWidget_2 = QtGui.QWidget(self.channelModeBox)
+        self.formLayoutWidget_2.setGeometry(QtCore.QRect(10, 20, 231, 98))
+        self.formLayoutWidget_2.setObjectName("formLayoutWidget_2")
+        self.formLayout_2 = QtGui.QFormLayout(self.formLayoutWidget_2)
+        self.formLayout_2.setSizeConstraint(QtGui.QLayout.SetFixedSize)
+        self.formLayout_2.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
+        self.formLayout_2.setObjectName("formLayout_2")
+        self.snrLabel = QtGui.QLabel(self.formLayoutWidget_2)
+        self.snrLabel.setObjectName("snrLabel")
+        self.formLayout_2.setWidget(0, QtGui.QFormLayout.LabelRole, self.snrLabel)
+        self.snrEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
+        self.snrEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.snrEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.snrEdit.setObjectName("snrEdit")
+        self.formLayout_2.setWidget(0, QtGui.QFormLayout.FieldRole, self.snrEdit)
+        self.freqLabel = QtGui.QLabel(self.formLayoutWidget_2)
+        self.freqLabel.setObjectName("freqLabel")
+        self.formLayout_2.setWidget(1, QtGui.QFormLayout.LabelRole, self.freqLabel)
+        self.freqEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
+        self.freqEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.freqEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.freqEdit.setObjectName("freqEdit")
+        self.formLayout_2.setWidget(1, QtGui.QFormLayout.FieldRole, self.freqEdit)
+        self.timeLabel = QtGui.QLabel(self.formLayoutWidget_2)
+        self.timeLabel.setObjectName("timeLabel")
+        self.formLayout_2.setWidget(2, QtGui.QFormLayout.LabelRole, self.timeLabel)
+        self.timeEdit = QtGui.QLineEdit(self.formLayoutWidget_2)
+        self.timeEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.timeEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.timeEdit.setObjectName("timeEdit")
+        self.formLayout_2.setWidget(2, QtGui.QFormLayout.FieldRole, self.timeEdit)
+        self.gridLayout.addWidget(self.channelModeBox, 2, 1, 1, 1)
+        self.verticalLayout_5 = QtGui.QVBoxLayout()
+        self.verticalLayout_5.setObjectName("verticalLayout_5")
         self.sinkFrame = QtGui.QFrame(self.centralwidget)
-        self.sinkFrame.setGeometry(QtCore.QRect(10, 10, 1221, 501))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Expanding)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.sinkFrame.sizePolicy().hasHeightForWidth())
+        self.sinkFrame.setSizePolicy(sizePolicy)
+        self.sinkFrame.setMinimumSize(QtCore.QSize(1000, 550))
         self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel)
         self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised)
         self.sinkFrame.setObjectName("sinkFrame")
-        self.horizontalLayoutWidget = QtGui.QWidget(self.sinkFrame)
-        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 1201, 481))
-        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
-        self.sinkLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
+        self.gridLayout_2 = QtGui.QGridLayout(self.sinkFrame)
+        self.gridLayout_2.setObjectName("gridLayout_2")
+        self.sinkLayout = QtGui.QHBoxLayout()
         self.sinkLayout.setObjectName("sinkLayout")
-        self.channelModeBox = QtGui.QGroupBox(self.centralwidget)
-        self.channelModeBox.setGeometry(QtCore.QRect(290, 520, 291, 161))
-        self.channelModeBox.setObjectName("channelModeBox")
-        self.timeLabel = QtGui.QLabel(self.channelModeBox)
-        self.timeLabel.setGeometry(QtCore.QRect(10, 90, 101, 17))
-        self.timeLabel.setObjectName("timeLabel")
-        self.timeEdit = QtGui.QLineEdit(self.channelModeBox)
-        self.timeEdit.setGeometry(QtCore.QRect(160, 90, 113, 23))
-        self.timeEdit.setObjectName("timeEdit")
-        self.snrEdit = QtGui.QLineEdit(self.channelModeBox)
-        self.snrEdit.setGeometry(QtCore.QRect(160, 30, 113, 23))
-        self.snrEdit.setObjectName("snrEdit")
-        self.snrLabel = QtGui.QLabel(self.channelModeBox)
-        self.snrLabel.setGeometry(QtCore.QRect(10, 30, 111, 20))
-        self.snrLabel.setObjectName("snrLabel")
-        self.freqEdit = QtGui.QLineEdit(self.channelModeBox)
-        self.freqEdit.setGeometry(QtCore.QRect(160, 60, 113, 23))
-        self.freqEdit.setObjectName("freqEdit")
-        self.freqLabel = QtGui.QLabel(self.channelModeBox)
-        self.freqLabel.setGeometry(QtCore.QRect(10, 60, 141, 17))
-        self.freqLabel.setObjectName("freqLabel")
+        self.gridLayout_2.addLayout(self.sinkLayout, 1, 0, 1, 1)
+        self.verticalLayout_5.addWidget(self.sinkFrame)
+        self.gridLayout.addLayout(self.verticalLayout_5, 0, 0, 1, 6)
+        self.verticalLayout_3 = QtGui.QVBoxLayout()
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
         self.rxBox = QtGui.QGroupBox(self.centralwidget)
-        self.rxBox.setGeometry(QtCore.QRect(590, 520, 251, 161))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth())
+        self.rxBox.setSizePolicy(sizePolicy)
+        self.rxBox.setMinimumSize(QtCore.QSize(180, 90))
+        self.rxBox.setMaximumSize(QtCore.QSize(180, 16777215))
         self.rxBox.setObjectName("rxBox")
-        self.gainMuEdit = QtGui.QLineEdit(self.rxBox)
-        self.gainMuEdit.setGeometry(QtCore.QRect(120, 30, 113, 23))
-        self.gainMuEdit.setObjectName("gainMuEdit")
-        self.gainMuLabel = QtGui.QLabel(self.rxBox)
-        self.gainMuLabel.setGeometry(QtCore.QRect(10, 30, 111, 20))
+        self.formLayoutWidget_3 = QtGui.QWidget(self.rxBox)
+        self.formLayoutWidget_3.setGeometry(QtCore.QRect(10, 20, 161, 61))
+        self.formLayoutWidget_3.setObjectName("formLayoutWidget_3")
+        self.formLayout_3 = QtGui.QFormLayout(self.formLayoutWidget_3)
+        self.formLayout_3.setSizeConstraint(QtGui.QLayout.SetFixedSize)
+        self.formLayout_3.setObjectName("formLayout_3")
+        self.gainMuLabel = QtGui.QLabel(self.formLayoutWidget_3)
         self.gainMuLabel.setObjectName("gainMuLabel")
-        self.alphaEdit = QtGui.QLineEdit(self.rxBox)
-        self.alphaEdit.setGeometry(QtCore.QRect(120, 60, 113, 23))
-        self.alphaEdit.setObjectName("alphaEdit")
-        self.alphaLabel = QtGui.QLabel(self.rxBox)
-        self.alphaLabel.setGeometry(QtCore.QRect(10, 60, 111, 20))
+        self.formLayout_3.setWidget(0, QtGui.QFormLayout.LabelRole, self.gainMuLabel)
+        self.alphaLabel = QtGui.QLabel(self.formLayoutWidget_3)
         self.alphaLabel.setObjectName("alphaLabel")
-        self.sysBox = QtGui.QGroupBox(self.centralwidget)
-        self.sysBox.setGeometry(QtCore.QRect(20, 520, 261, 161))
-        self.sysBox.setObjectName("sysBox")
-        self.sampleRateEdit = QtGui.QLineEdit(self.sysBox)
-        self.sampleRateEdit.setGeometry(QtCore.QRect(140, 30, 113, 23))
-        self.sampleRateEdit.setObjectName("sampleRateEdit")
-        self.sampleRateLabel = QtGui.QLabel(self.sysBox)
-        self.sampleRateLabel.setGeometry(QtCore.QRect(10, 30, 121, 20))
-        self.sampleRateLabel.setObjectName("sampleRateLabel")
-        self.pauseButton = QtGui.QPushButton(self.centralwidget)
-        self.pauseButton.setGeometry(QtCore.QRect(1120, 520, 101, 31))
-        self.pauseButton.setObjectName("pauseButton")
+        self.formLayout_3.setWidget(1, QtGui.QFormLayout.LabelRole, self.alphaLabel)
+        self.gainMuEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
+        self.gainMuEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.gainMuEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.gainMuEdit.setObjectName("gainMuEdit")
+        self.formLayout_3.setWidget(0, QtGui.QFormLayout.FieldRole, self.gainMuEdit)
+        self.alphaEdit = QtGui.QLineEdit(self.formLayoutWidget_3)
+        self.alphaEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.alphaEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.alphaEdit.setObjectName("alphaEdit")
+        self.formLayout_3.setWidget(1, QtGui.QFormLayout.FieldRole, self.alphaEdit)
+        self.verticalLayout_3.addWidget(self.rxBox)
+        spacerItem1 = QtGui.QSpacerItem(20, 30, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.verticalLayout_3.addItem(spacerItem1)
+        self.gridLayout.addLayout(self.verticalLayout_3, 2, 2, 1, 1)
         self.rxBox_2 = QtGui.QGroupBox(self.centralwidget)
-        self.rxBox_2.setGeometry(QtCore.QRect(850, 520, 251, 161))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.rxBox_2.sizePolicy().hasHeightForWidth())
+        self.rxBox_2.setSizePolicy(sizePolicy)
+        self.rxBox_2.setMinimumSize(QtCore.QSize(220, 125))
+        self.rxBox_2.setMaximumSize(QtCore.QSize(265, 125))
         self.rxBox_2.setObjectName("rxBox_2")
-        self.pktsRcvdEdit = QtGui.QLineEdit(self.rxBox_2)
-        self.pktsRcvdEdit.setGeometry(QtCore.QRect(120, 30, 113, 23))
-        self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
-        self.pktsRcvdLabel = QtGui.QLabel(self.rxBox_2)
-        self.pktsRcvdLabel.setGeometry(QtCore.QRect(10, 30, 111, 20))
+        self.formLayoutWidget_4 = QtGui.QWidget(self.rxBox_2)
+        self.formLayoutWidget_4.setGeometry(QtCore.QRect(10, 20, 201, 92))
+        self.formLayoutWidget_4.setObjectName("formLayoutWidget_4")
+        self.formLayout_4 = QtGui.QFormLayout(self.formLayoutWidget_4)
+        self.formLayout_4.setSizeConstraint(QtGui.QLayout.SetFixedSize)
+        self.formLayout_4.setObjectName("formLayout_4")
+        self.pktsRcvdLabel = QtGui.QLabel(self.formLayoutWidget_4)
         self.pktsRcvdLabel.setObjectName("pktsRcvdLabel")
-        self.pktsCorrectEdit = QtGui.QLineEdit(self.rxBox_2)
-        self.pktsCorrectEdit.setGeometry(QtCore.QRect(120, 60, 113, 23))
-        self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
-        self.pktsCorrectLabel = QtGui.QLabel(self.rxBox_2)
-        self.pktsCorrectLabel.setGeometry(QtCore.QRect(10, 60, 111, 20))
+        self.formLayout_4.setWidget(0, QtGui.QFormLayout.LabelRole, self.pktsRcvdLabel)
+        self.pktsCorrectLabel = QtGui.QLabel(self.formLayoutWidget_4)
         self.pktsCorrectLabel.setObjectName("pktsCorrectLabel")
-        self.perLabel = QtGui.QLabel(self.rxBox_2)
-        self.perLabel.setGeometry(QtCore.QRect(10, 90, 111, 20))
+        self.formLayout_4.setWidget(1, QtGui.QFormLayout.LabelRole, self.pktsCorrectLabel)
+        self.perLabel = QtGui.QLabel(self.formLayoutWidget_4)
         self.perLabel.setObjectName("perLabel")
-        self.perEdit = QtGui.QLineEdit(self.rxBox_2)
-        self.perEdit.setGeometry(QtCore.QRect(120, 90, 113, 23))
+        self.formLayout_4.setWidget(2, QtGui.QFormLayout.LabelRole, self.perLabel)
+        self.pktsRcvdEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
+        self.pktsRcvdEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.pktsRcvdEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
+        self.formLayout_4.setWidget(0, QtGui.QFormLayout.FieldRole, self.pktsRcvdEdit)
+        self.pktsCorrectEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
+        self.pktsCorrectEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.pktsCorrectEdit.setMaximumSize(QtCore.QSize(100, 16777215))
+        self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
+        self.formLayout_4.setWidget(1, QtGui.QFormLayout.FieldRole, self.pktsCorrectEdit)
+        self.perEdit = QtGui.QLineEdit(self.formLayoutWidget_4)
+        self.perEdit.setMinimumSize(QtCore.QSize(100, 0))
+        self.perEdit.setMaximumSize(QtCore.QSize(100, 16777215))
         self.perEdit.setObjectName("perEdit")
+        self.formLayout_4.setWidget(2, QtGui.QFormLayout.FieldRole, self.perEdit)
+        self.gridLayout.addWidget(self.rxBox_2, 2, 3, 1, 1)
+        spacerItem2 = QtGui.QSpacerItem(20, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.gridLayout.addItem(spacerItem2, 2, 4, 1, 1)
+        self.verticalLayout = QtGui.QVBoxLayout()
+        self.verticalLayout.setObjectName("verticalLayout")
+        self.pauseButton = QtGui.QPushButton(self.centralwidget)
+        self.pauseButton.setMinimumSize(QtCore.QSize(80, 0))
+        self.pauseButton.setMaximumSize(QtCore.QSize(80, 16777215))
+        self.pauseButton.setObjectName("pauseButton")
+        self.verticalLayout.addWidget(self.pauseButton)
+        spacerItem3 = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.verticalLayout.addItem(spacerItem3)
+        self.closeButton = QtGui.QPushButton(self.centralwidget)
+        self.closeButton.setMinimumSize(QtCore.QSize(80, 0))
+        self.closeButton.setMaximumSize(QtCore.QSize(80, 16777215))
+        self.closeButton.setObjectName("closeButton")
+        self.verticalLayout.addWidget(self.closeButton)
+        self.gridLayout.addLayout(self.verticalLayout, 2, 5, 1, 1)
         DigitalWindow.setCentralWidget(self.centralwidget)
         self.menubar = QtGui.QMenuBar(DigitalWindow)
-        self.menubar.setGeometry(QtCore.QRect(0, 0, 1236, 25))
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 1050, 24))
         self.menubar.setObjectName("menubar")
         self.menuFile = QtGui.QMenu(self.menubar)
         self.menuFile.setObjectName("menuFile")
@@ -116,27 +232,26 @@ class Ui_DigitalWindow(object):
         QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
         QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
         QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
-        DigitalWindow.setTabOrder(self.closeButton, self.snrEdit)
         DigitalWindow.setTabOrder(self.snrEdit, self.freqEdit)
         DigitalWindow.setTabOrder(self.freqEdit, self.timeEdit)
 
     def retranslateUi(self, DigitalWindow):
         DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
-        self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
+        self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8))
+        self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8))
         self.channelModeBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Channel Model Parameters", None, QtGui.QApplication.UnicodeUTF8))
-        self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8))
         self.snrLabel.setText(QtGui.QApplication.translate("DigitalWindow", "SNR (dB)", None, QtGui.QApplication.UnicodeUTF8))
         self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency Offset (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+        self.timeLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Timing Offset", None, QtGui.QApplication.UnicodeUTF8))
         self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
         self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain mu", None, QtGui.QApplication.UnicodeUTF8))
         self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8))
-        self.sysBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "System Parameters", None, QtGui.QApplication.UnicodeUTF8))
-        self.sampleRateLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Sample Rate (sps)", None, QtGui.QApplication.UnicodeUTF8))
-        self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
         self.rxBox_2.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
         self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8))
         self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8))
         self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8))
+        self.pauseButton.setText(QtGui.QApplication.translate("DigitalWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
+        self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
         self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
         self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
 
diff --git a/gnuradio-examples/python/digital/qt_digital_window.ui b/gnuradio-examples/python/digital/qt_digital_window.ui
index 669942cb98..413801ec71 100644
--- a/gnuradio-examples/python/digital/qt_digital_window.ui
+++ b/gnuradio-examples/python/digital/qt_digital_window.ui
@@ -1,358 +1,596 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<ui version="4.0">
+<ui version="4.0" >
  <class>DigitalWindow</class>
- <widget class="QMainWindow" name="DigitalWindow">
-  <property name="geometry">
+ <widget class="QMainWindow" name="DigitalWindow" >
+  <property name="geometry" >
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1236</width>
-    <height>739</height>
+    <width>1050</width>
+    <height>752</height>
    </rect>
   </property>
-  <property name="windowTitle">
+  <property name="windowTitle" >
    <string>MainWindow</string>
   </property>
-  <widget class="QWidget" name="centralwidget">
-   <widget class="QPushButton" name="closeButton">
-    <property name="geometry">
-     <rect>
-      <x>1120</x>
-      <y>640</y>
-      <width>101</width>
-      <height>31</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Close</string>
-    </property>
-   </widget>
-   <widget class="QFrame" name="sinkFrame">
-    <property name="geometry">
-     <rect>
-      <x>10</x>
-      <y>10</y>
-      <width>1221</width>
-      <height>501</height>
-     </rect>
-    </property>
-    <property name="frameShape">
-     <enum>QFrame::StyledPanel</enum>
-    </property>
-    <property name="frameShadow">
-     <enum>QFrame::Raised</enum>
-    </property>
-    <widget class="QWidget" name="horizontalLayoutWidget">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>10</y>
-       <width>1201</width>
-       <height>481</height>
-      </rect>
-     </property>
-     <layout class="QHBoxLayout" name="sinkLayout"/>
-    </widget>
-   </widget>
-   <widget class="QGroupBox" name="channelModeBox">
-    <property name="geometry">
-     <rect>
-      <x>290</x>
-      <y>520</y>
-      <width>291</width>
-      <height>161</height>
-     </rect>
-    </property>
-    <property name="title">
-     <string>Channel Model Parameters</string>
-    </property>
-    <widget class="QLabel" name="timeLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>90</y>
-       <width>101</width>
-       <height>17</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Timing Offset</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="timeEdit">
-     <property name="geometry">
-      <rect>
-       <x>160</x>
-       <y>90</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="snrEdit">
-     <property name="geometry">
-      <rect>
-       <x>160</x>
-       <y>30</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="snrLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>30</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>SNR (dB)</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="freqEdit">
-     <property name="geometry">
-      <rect>
-       <x>160</x>
-       <y>60</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="freqLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>60</y>
-       <width>141</width>
-       <height>17</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Frequency Offset (Hz)</string>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QGroupBox" name="rxBox">
-    <property name="geometry">
-     <rect>
-      <x>590</x>
-      <y>520</y>
-      <width>251</width>
-      <height>161</height>
-     </rect>
-    </property>
-    <property name="title">
-     <string>Receiver Parameters</string>
-    </property>
-    <widget class="QLineEdit" name="gainMuEdit">
-     <property name="geometry">
-      <rect>
-       <x>120</x>
-       <y>30</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="gainMuLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>30</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Gain mu</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="alphaEdit">
-     <property name="geometry">
-      <rect>
-       <x>120</x>
-       <y>60</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="alphaLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>60</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Alpha</string>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QGroupBox" name="sysBox">
-    <property name="geometry">
-     <rect>
-      <x>20</x>
-      <y>520</y>
-      <width>261</width>
-      <height>161</height>
-     </rect>
-    </property>
-    <property name="title">
-     <string>System Parameters</string>
-    </property>
-    <widget class="QLineEdit" name="sampleRateEdit">
-     <property name="geometry">
-      <rect>
-       <x>140</x>
-       <y>30</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="sampleRateLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>30</y>
-       <width>121</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Sample Rate (sps)</string>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QPushButton" name="pauseButton">
-    <property name="geometry">
-     <rect>
-      <x>1120</x>
-      <y>520</y>
-      <width>101</width>
-      <height>31</height>
-     </rect>
-    </property>
-    <property name="text">
-     <string>Pause</string>
-    </property>
-   </widget>
-   <widget class="QGroupBox" name="rxBox_2">
-    <property name="geometry">
-     <rect>
-      <x>850</x>
-      <y>520</y>
-      <width>251</width>
-      <height>161</height>
-     </rect>
-    </property>
-    <property name="title">
-     <string>Received Packet Info</string>
-    </property>
-    <widget class="QLineEdit" name="pktsRcvdEdit">
-     <property name="geometry">
-      <rect>
-       <x>120</x>
-       <y>30</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pktsRcvdLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>30</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Packets Rcvd.</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="pktsCorrectEdit">
-     <property name="geometry">
-      <rect>
-       <x>120</x>
-       <y>60</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pktsCorrectLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>60</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>Packets Correct</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="perLabel">
-     <property name="geometry">
-      <rect>
-       <x>10</x>
-       <y>90</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text">
-      <string>PER</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="perEdit">
-     <property name="geometry">
-      <rect>
-       <x>120</x>
-       <y>90</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-   </widget>
+  <widget class="QWidget" name="centralwidget" >
+   <layout class="QGridLayout" name="gridLayout" >
+    <item row="2" column="0" >
+     <layout class="QVBoxLayout" name="verticalLayout_2" >
+      <item>
+       <widget class="QGroupBox" name="sysBox" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize" >
+         <size>
+          <width>240</width>
+          <height>60</height>
+         </size>
+        </property>
+        <property name="maximumSize" >
+         <size>
+          <width>240</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="title" >
+         <string>System Parameters</string>
+        </property>
+        <widget class="QWidget" name="formLayoutWidget" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>20</y>
+           <width>221</width>
+           <height>31</height>
+          </rect>
+         </property>
+         <layout class="QFormLayout" name="formLayout" >
+          <property name="sizeConstraint" >
+           <enum>QLayout::SetFixedSize</enum>
+          </property>
+          <property name="verticalSpacing" >
+           <number>20</number>
+          </property>
+          <item row="0" column="1" >
+           <widget class="QLineEdit" name="sampleRateEdit" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize" >
+             <size>
+              <width>100</width>
+              <height>26</height>
+             </size>
+            </property>
+            <property name="maximumSize" >
+             <size>
+              <width>100</width>
+              <height>26</height>
+             </size>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="0" >
+           <widget class="QLabel" name="sampleRateLabel" >
+            <property name="sizePolicy" >
+             <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+              <horstretch>0</horstretch>
+              <verstretch>0</verstretch>
+             </sizepolicy>
+            </property>
+            <property name="minimumSize" >
+             <size>
+              <width>0</width>
+              <height>20</height>
+             </size>
+            </property>
+            <property name="maximumSize" >
+             <size>
+              <width>16777215</width>
+              <height>20</height>
+             </size>
+            </property>
+            <property name="text" >
+             <string>Sample Rate (sps)</string>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+      </item>
+      <item>
+       <spacer name="verticalSpacer_2" >
+        <property name="orientation" >
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeType" >
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>20</width>
+          <height>60</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </item>
+    <item row="2" column="1" >
+     <widget class="QGroupBox" name="channelModeBox" >
+      <property name="sizePolicy" >
+       <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>245</width>
+        <height>130</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>245</width>
+        <height>16777215</height>
+       </size>
+      </property>
+      <property name="title" >
+       <string>Channel Model Parameters</string>
+      </property>
+      <widget class="QWidget" name="formLayoutWidget_2" >
+       <property name="geometry" >
+        <rect>
+         <x>10</x>
+         <y>20</y>
+         <width>231</width>
+         <height>98</height>
+        </rect>
+       </property>
+       <layout class="QFormLayout" name="formLayout_2" >
+        <property name="sizeConstraint" >
+         <enum>QLayout::SetFixedSize</enum>
+        </property>
+        <property name="fieldGrowthPolicy" >
+         <enum>QFormLayout::AllNonFixedFieldsGrow</enum>
+        </property>
+        <item row="0" column="0" >
+         <widget class="QLabel" name="snrLabel" >
+          <property name="text" >
+           <string>SNR (dB)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1" >
+         <widget class="QLineEdit" name="snrEdit" >
+          <property name="minimumSize" >
+           <size>
+            <width>100</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>100</width>
+            <height>16777215</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0" >
+         <widget class="QLabel" name="freqLabel" >
+          <property name="text" >
+           <string>Frequency Offset (Hz)</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1" >
+         <widget class="QLineEdit" name="freqEdit" >
+          <property name="minimumSize" >
+           <size>
+            <width>100</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>100</width>
+            <height>16777215</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0" >
+         <widget class="QLabel" name="timeLabel" >
+          <property name="text" >
+           <string>Timing Offset</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1" >
+         <widget class="QLineEdit" name="timeEdit" >
+          <property name="minimumSize" >
+           <size>
+            <width>100</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>100</width>
+            <height>16777215</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+    <item row="0" column="0" colspan="6" >
+     <layout class="QVBoxLayout" name="verticalLayout_5" >
+      <item>
+       <widget class="QFrame" name="sinkFrame" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Expanding" hsizetype="Expanding" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize" >
+         <size>
+          <width>1000</width>
+          <height>550</height>
+         </size>
+        </property>
+        <property name="frameShape" >
+         <enum>QFrame::StyledPanel</enum>
+        </property>
+        <property name="frameShadow" >
+         <enum>QFrame::Raised</enum>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_2" >
+         <item row="1" column="0" >
+          <layout class="QHBoxLayout" name="sinkLayout" />
+         </item>
+        </layout>
+        <zorder>verticalLayoutWidget</zorder>
+        <zorder>verticalLayoutWidget</zorder>
+       </widget>
+      </item>
+     </layout>
+    </item>
+    <item row="2" column="2" >
+     <layout class="QVBoxLayout" name="verticalLayout_3" >
+      <item>
+       <widget class="QGroupBox" name="rxBox" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize" >
+         <size>
+          <width>180</width>
+          <height>90</height>
+         </size>
+        </property>
+        <property name="maximumSize" >
+         <size>
+          <width>180</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="title" >
+         <string>Receiver Parameters</string>
+        </property>
+        <widget class="QWidget" name="formLayoutWidget_3" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>20</y>
+           <width>161</width>
+           <height>61</height>
+          </rect>
+         </property>
+         <layout class="QFormLayout" name="formLayout_3" >
+          <property name="sizeConstraint" >
+           <enum>QLayout::SetFixedSize</enum>
+          </property>
+          <item row="0" column="0" >
+           <widget class="QLabel" name="gainMuLabel" >
+            <property name="text" >
+             <string>Gain mu</string>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="0" >
+           <widget class="QLabel" name="alphaLabel" >
+            <property name="text" >
+             <string>Alpha</string>
+            </property>
+           </widget>
+          </item>
+          <item row="0" column="1" >
+           <widget class="QLineEdit" name="gainMuEdit" >
+            <property name="minimumSize" >
+             <size>
+              <width>100</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="maximumSize" >
+             <size>
+              <width>100</width>
+              <height>16777215</height>
+             </size>
+            </property>
+           </widget>
+          </item>
+          <item row="1" column="1" >
+           <widget class="QLineEdit" name="alphaEdit" >
+            <property name="minimumSize" >
+             <size>
+              <width>100</width>
+              <height>0</height>
+             </size>
+            </property>
+            <property name="maximumSize" >
+             <size>
+              <width>100</width>
+              <height>16777215</height>
+             </size>
+            </property>
+           </widget>
+          </item>
+         </layout>
+        </widget>
+       </widget>
+      </item>
+      <item>
+       <spacer name="verticalSpacer_4" >
+        <property name="orientation" >
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeType" >
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>20</width>
+          <height>30</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+     </layout>
+    </item>
+    <item row="2" column="3" >
+     <widget class="QGroupBox" name="rxBox_2" >
+      <property name="sizePolicy" >
+       <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>220</width>
+        <height>125</height>
+       </size>
+      </property>
+      <property name="maximumSize" >
+       <size>
+        <width>265</width>
+        <height>125</height>
+       </size>
+      </property>
+      <property name="title" >
+       <string>Received Packet Info</string>
+      </property>
+      <widget class="QWidget" name="formLayoutWidget_4" >
+       <property name="geometry" >
+        <rect>
+         <x>10</x>
+         <y>20</y>
+         <width>201</width>
+         <height>92</height>
+        </rect>
+       </property>
+       <layout class="QFormLayout" name="formLayout_4" >
+        <property name="sizeConstraint" >
+         <enum>QLayout::SetFixedSize</enum>
+        </property>
+        <item row="0" column="0" >
+         <widget class="QLabel" name="pktsRcvdLabel" >
+          <property name="text" >
+           <string>Packets Rcvd.</string>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="0" >
+         <widget class="QLabel" name="pktsCorrectLabel" >
+          <property name="text" >
+           <string>Packets Correct</string>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="0" >
+         <widget class="QLabel" name="perLabel" >
+          <property name="text" >
+           <string>PER</string>
+          </property>
+         </widget>
+        </item>
+        <item row="0" column="1" >
+         <widget class="QLineEdit" name="pktsRcvdEdit" >
+          <property name="minimumSize" >
+           <size>
+            <width>100</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>100</width>
+            <height>16777215</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="1" column="1" >
+         <widget class="QLineEdit" name="pktsCorrectEdit" >
+          <property name="minimumSize" >
+           <size>
+            <width>100</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>100</width>
+            <height>16777215</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+        <item row="2" column="1" >
+         <widget class="QLineEdit" name="perEdit" >
+          <property name="minimumSize" >
+           <size>
+            <width>100</width>
+            <height>0</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>100</width>
+            <height>16777215</height>
+           </size>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </widget>
+     </widget>
+    </item>
+    <item row="2" column="4" >
+     <spacer name="horizontalSpacer" >
+      <property name="orientation" >
+       <enum>Qt::Horizontal</enum>
+      </property>
+      <property name="sizeHint" stdset="0" >
+       <size>
+        <width>20</width>
+        <height>20</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="2" column="5" >
+     <layout class="QVBoxLayout" name="verticalLayout" >
+      <item>
+       <widget class="QPushButton" name="pauseButton" >
+        <property name="minimumSize" >
+         <size>
+          <width>80</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize" >
+         <size>
+          <width>80</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="text" >
+         <string>Pause</string>
+        </property>
+       </widget>
+      </item>
+      <item>
+       <spacer name="verticalSpacer" >
+        <property name="orientation" >
+         <enum>Qt::Vertical</enum>
+        </property>
+        <property name="sizeType" >
+         <enum>QSizePolicy::Fixed</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>20</width>
+          <height>60</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <widget class="QPushButton" name="closeButton" >
+        <property name="minimumSize" >
+         <size>
+          <width>80</width>
+          <height>0</height>
+         </size>
+        </property>
+        <property name="maximumSize" >
+         <size>
+          <width>80</width>
+          <height>16777215</height>
+         </size>
+        </property>
+        <property name="text" >
+         <string>Close</string>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </item>
+   </layout>
+   <zorder>sinkFrame</zorder>
+   <zorder>channelModeBox</zorder>
+   <zorder>verticalLayoutWidget</zorder>
+   <zorder>verticalLayoutWidget</zorder>
+   <zorder>rxBox</zorder>
+   <zorder></zorder>
+   <zorder>rxBox_2</zorder>
+   <zorder>horizontalSpacer</zorder>
+   <zorder></zorder>
   </widget>
-  <widget class="QMenuBar" name="menubar">
-   <property name="geometry">
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>1236</width>
-     <height>25</height>
+     <width>1050</width>
+     <height>24</height>
     </rect>
    </property>
-   <widget class="QMenu" name="menuFile">
-    <property name="title">
+   <widget class="QMenu" name="menuFile" >
+    <property name="title" >
      <string>&amp;File</string>
     </property>
-    <addaction name="actionExit"/>
+    <addaction name="actionExit" />
    </widget>
-   <addaction name="menuFile"/>
+   <addaction name="menuFile" />
   </widget>
-  <widget class="QStatusBar" name="statusbar"/>
-  <action name="actionExit">
-   <property name="text">
+  <widget class="QStatusBar" name="statusbar" />
+  <action name="actionExit" >
+   <property name="text" >
     <string>E&amp;xit</string>
    </property>
   </action>
  </widget>
  <tabstops>
-  <tabstop>closeButton</tabstop>
   <tabstop>snrEdit</tabstop>
   <tabstop>freqEdit</tabstop>
   <tabstop>timeEdit</tabstop>
@@ -365,11 +603,11 @@
    <receiver>DigitalWindow</receiver>
    <slot>close()</slot>
    <hints>
-    <hint type="sourcelabel">
+    <hint type="sourcelabel" >
      <x>322</x>
      <y>623</y>
     </hint>
-    <hint type="destinationlabel">
+    <hint type="destinationlabel" >
      <x>66</x>
      <y>561</y>
     </hint>
@@ -381,11 +619,11 @@
    <receiver>DigitalWindow</receiver>
    <slot>close()</slot>
    <hints>
-    <hint type="sourcelabel">
+    <hint type="sourcelabel" >
      <x>-1</x>
      <y>-1</y>
     </hint>
-    <hint type="destinationlabel">
+    <hint type="destinationlabel" >
      <x>617</x>
      <y>327</y>
     </hint>
diff --git a/gnuradio-examples/python/digital/qt_rx_window.py b/gnuradio-examples/python/digital/qt_rx_window.py
index 0879e1c685..60e1a6e379 100644
--- a/gnuradio-examples/python/digital/qt_rx_window.py
+++ b/gnuradio-examples/python/digital/qt_rx_window.py
@@ -2,8 +2,8 @@
 
 # Form implementation generated from reading ui file 'qt_rx_window.ui'
 #
-# Created: Wed Jun 17 18:59:00 2009
-#      by: PyQt4 UI code generator 4.4.4
+# Created: Fri Jul  3 01:03:19 2009
+#      by: PyQt4 UI code generator 4.4.3
 #
 # WARNING! All changes made in this file will be lost!
 
@@ -12,24 +12,40 @@ from PyQt4 import QtCore, QtGui
 class Ui_DigitalWindow(object):
     def setupUi(self, DigitalWindow):
         DigitalWindow.setObjectName("DigitalWindow")
-        DigitalWindow.resize(1085, 766)
+        DigitalWindow.resize(1000, 816)
         self.centralwidget = QtGui.QWidget(DigitalWindow)
         self.centralwidget.setObjectName("centralwidget")
-        self.closeButton = QtGui.QPushButton(self.centralwidget)
-        self.closeButton.setGeometry(QtCore.QRect(960, 670, 101, 31))
-        self.closeButton.setObjectName("closeButton")
+        self.gridLayout = QtGui.QGridLayout(self.centralwidget)
+        self.gridLayout.setObjectName("gridLayout")
         self.sinkFrame = QtGui.QFrame(self.centralwidget)
-        self.sinkFrame.setGeometry(QtCore.QRect(10, 10, 1061, 501))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Preferred, QtGui.QSizePolicy.Preferred)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(1)
+        sizePolicy.setHeightForWidth(self.sinkFrame.sizePolicy().hasHeightForWidth())
+        self.sinkFrame.setSizePolicy(sizePolicy)
+        self.sinkFrame.setMinimumSize(QtCore.QSize(800, 500))
         self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel)
         self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised)
         self.sinkFrame.setObjectName("sinkFrame")
-        self.horizontalLayoutWidget = QtGui.QWidget(self.sinkFrame)
-        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 1041, 481))
-        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
-        self.sinkLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
+        self.horizontalLayout_2 = QtGui.QHBoxLayout(self.sinkFrame)
+        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
+        self.sinkLayout = QtGui.QHBoxLayout()
         self.sinkLayout.setObjectName("sinkLayout")
+        self.horizontalLayout_2.addLayout(self.sinkLayout)
+        self.gridLayout.addWidget(self.sinkFrame, 0, 0, 1, 1)
+        spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.gridLayout.addItem(spacerItem, 1, 0, 1, 1)
+        self.horizontalLayout = QtGui.QHBoxLayout()
+        self.horizontalLayout.setSizeConstraint(QtGui.QLayout.SetFixedSize)
+        self.horizontalLayout.setObjectName("horizontalLayout")
         self.rxBox = QtGui.QGroupBox(self.centralwidget)
-        self.rxBox.setGeometry(QtCore.QRect(10, 520, 251, 181))
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.rxBox.sizePolicy().hasHeightForWidth())
+        self.rxBox.setSizePolicy(sizePolicy)
+        self.rxBox.setMinimumSize(QtCore.QSize(250, 190))
+        self.rxBox.setMaximumSize(QtCore.QSize(250, 190))
         self.rxBox.setObjectName("rxBox")
         self.gainMuEdit = QtGui.QLineEdit(self.rxBox)
         self.gainMuEdit.setGeometry(QtCore.QRect(120, 120, 113, 23))
@@ -61,30 +77,66 @@ class Ui_DigitalWindow(object):
         self.decimEdit = QtGui.QLineEdit(self.rxBox)
         self.decimEdit.setGeometry(QtCore.QRect(120, 90, 113, 23))
         self.decimEdit.setObjectName("decimEdit")
-        self.rxBox_2 = QtGui.QGroupBox(self.centralwidget)
-        self.rxBox_2.setGeometry(QtCore.QRect(300, 520, 251, 121))
-        self.rxBox_2.setObjectName("rxBox_2")
-        self.pktsRcvdEdit = QtGui.QLineEdit(self.rxBox_2)
+        self.horizontalLayout.addWidget(self.rxBox)
+        self.verticalLayout_3 = QtGui.QVBoxLayout()
+        self.verticalLayout_3.setObjectName("verticalLayout_3")
+        self.rxPacketBox = QtGui.QGroupBox(self.centralwidget)
+        self.rxPacketBox.setEnabled(True)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.rxPacketBox.sizePolicy().hasHeightForWidth())
+        self.rxPacketBox.setSizePolicy(sizePolicy)
+        self.rxPacketBox.setMinimumSize(QtCore.QSize(250, 130))
+        self.rxPacketBox.setMaximumSize(QtCore.QSize(250, 130))
+        font = QtGui.QFont()
+        font.setWeight(50)
+        font.setBold(False)
+        self.rxPacketBox.setFont(font)
+        self.rxPacketBox.setObjectName("rxPacketBox")
+        self.pktsRcvdEdit = QtGui.QLineEdit(self.rxPacketBox)
         self.pktsRcvdEdit.setGeometry(QtCore.QRect(120, 30, 113, 23))
         self.pktsRcvdEdit.setObjectName("pktsRcvdEdit")
-        self.pktsRcvdLabel = QtGui.QLabel(self.rxBox_2)
+        self.pktsRcvdLabel = QtGui.QLabel(self.rxPacketBox)
         self.pktsRcvdLabel.setGeometry(QtCore.QRect(10, 30, 111, 20))
         self.pktsRcvdLabel.setObjectName("pktsRcvdLabel")
-        self.pktsCorrectEdit = QtGui.QLineEdit(self.rxBox_2)
+        self.pktsCorrectEdit = QtGui.QLineEdit(self.rxPacketBox)
         self.pktsCorrectEdit.setGeometry(QtCore.QRect(120, 60, 113, 23))
         self.pktsCorrectEdit.setObjectName("pktsCorrectEdit")
-        self.pktsCorrectLabel = QtGui.QLabel(self.rxBox_2)
+        self.pktsCorrectLabel = QtGui.QLabel(self.rxPacketBox)
         self.pktsCorrectLabel.setGeometry(QtCore.QRect(10, 60, 111, 20))
         self.pktsCorrectLabel.setObjectName("pktsCorrectLabel")
-        self.perLabel = QtGui.QLabel(self.rxBox_2)
+        self.perLabel = QtGui.QLabel(self.rxPacketBox)
         self.perLabel.setGeometry(QtCore.QRect(10, 90, 111, 20))
         self.perLabel.setObjectName("perLabel")
-        self.perEdit = QtGui.QLineEdit(self.rxBox_2)
+        self.perEdit = QtGui.QLineEdit(self.rxPacketBox)
         self.perEdit.setGeometry(QtCore.QRect(120, 90, 113, 23))
         self.perEdit.setObjectName("perEdit")
+        self.verticalLayout_3.addWidget(self.rxPacketBox)
+        spacerItem1 = QtGui.QSpacerItem(20, 60, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Fixed)
+        self.verticalLayout_3.addItem(spacerItem1)
+        self.horizontalLayout.addLayout(self.verticalLayout_3)
+        spacerItem2 = QtGui.QSpacerItem(40, 20, QtGui.QSizePolicy.Expanding, QtGui.QSizePolicy.Minimum)
+        self.horizontalLayout.addItem(spacerItem2)
+        self.verticalLayout_5 = QtGui.QVBoxLayout()
+        self.verticalLayout_5.setObjectName("verticalLayout_5")
+        spacerItem3 = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
+        self.verticalLayout_5.addItem(spacerItem3)
+        self.closeButton = QtGui.QPushButton(self.centralwidget)
+        sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
+        sizePolicy.setHorizontalStretch(0)
+        sizePolicy.setVerticalStretch(0)
+        sizePolicy.setHeightForWidth(self.closeButton.sizePolicy().hasHeightForWidth())
+        self.closeButton.setSizePolicy(sizePolicy)
+        self.closeButton.setMinimumSize(QtCore.QSize(80, 30))
+        self.closeButton.setMaximumSize(QtCore.QSize(80, 30))
+        self.closeButton.setObjectName("closeButton")
+        self.verticalLayout_5.addWidget(self.closeButton)
+        self.horizontalLayout.addLayout(self.verticalLayout_5)
+        self.gridLayout.addLayout(self.horizontalLayout, 2, 0, 1, 1)
         DigitalWindow.setCentralWidget(self.centralwidget)
         self.menubar = QtGui.QMenuBar(DigitalWindow)
-        self.menubar.setGeometry(QtCore.QRect(0, 0, 1085, 24))
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 1000, 24))
         self.menubar.setObjectName("menubar")
         self.menuFile = QtGui.QMenu(self.menubar)
         self.menuFile.setObjectName("menuFile")
@@ -98,23 +150,23 @@ class Ui_DigitalWindow(object):
         self.menubar.addAction(self.menuFile.menuAction())
 
         self.retranslateUi(DigitalWindow)
-        QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
         QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), DigitalWindow.close)
+        QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), DigitalWindow.close)
         QtCore.QMetaObject.connectSlotsByName(DigitalWindow)
 
     def retranslateUi(self, DigitalWindow):
         DigitalWindow.setWindowTitle(QtGui.QApplication.translate("DigitalWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
-        self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
         self.rxBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Receiver Parameters", None, QtGui.QApplication.UnicodeUTF8))
         self.gainMuLabel.setText(QtGui.QApplication.translate("DigitalWindow", "mu\'s gain", None, QtGui.QApplication.UnicodeUTF8))
         self.alphaLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Alpha", None, QtGui.QApplication.UnicodeUTF8))
         self.gainLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Gain (dB)", None, QtGui.QApplication.UnicodeUTF8))
         self.freqLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Frequency (Hz)", None, QtGui.QApplication.UnicodeUTF8))
         self.decimLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Decimation", None, QtGui.QApplication.UnicodeUTF8))
-        self.rxBox_2.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
+        self.rxPacketBox.setTitle(QtGui.QApplication.translate("DigitalWindow", "Received Packet Info", None, QtGui.QApplication.UnicodeUTF8))
         self.pktsRcvdLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Rcvd.", None, QtGui.QApplication.UnicodeUTF8))
         self.pktsCorrectLabel.setText(QtGui.QApplication.translate("DigitalWindow", "Packets Correct", None, QtGui.QApplication.UnicodeUTF8))
         self.perLabel.setText(QtGui.QApplication.translate("DigitalWindow", "PER", None, QtGui.QApplication.UnicodeUTF8))
+        self.closeButton.setText(QtGui.QApplication.translate("DigitalWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
         self.menuFile.setTitle(QtGui.QApplication.translate("DigitalWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
         self.actionExit.setText(QtGui.QApplication.translate("DigitalWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
 
diff --git a/gnuradio-examples/python/digital/qt_rx_window.ui b/gnuradio-examples/python/digital/qt_rx_window.ui
index 9b0b0be84c..4631b77827 100644
--- a/gnuradio-examples/python/digital/qt_rx_window.ui
+++ b/gnuradio-examples/python/digital/qt_rx_window.ui
@@ -5,271 +5,406 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>1085</width>
-    <height>766</height>
+    <width>1000</width>
+    <height>816</height>
    </rect>
   </property>
   <property name="windowTitle" >
    <string>MainWindow</string>
   </property>
   <widget class="QWidget" name="centralwidget" >
-   <widget class="QPushButton" name="closeButton" >
-    <property name="geometry" >
-     <rect>
-      <x>960</x>
-      <y>670</y>
-      <width>101</width>
-      <height>31</height>
-     </rect>
-    </property>
-    <property name="text" >
-     <string>Close</string>
-    </property>
-   </widget>
-   <widget class="QFrame" name="sinkFrame" >
-    <property name="geometry" >
-     <rect>
-      <x>10</x>
-      <y>10</y>
-      <width>1061</width>
-      <height>501</height>
-     </rect>
-    </property>
-    <property name="frameShape" >
-     <enum>QFrame::StyledPanel</enum>
-    </property>
-    <property name="frameShadow" >
-     <enum>QFrame::Raised</enum>
-    </property>
-    <widget class="QWidget" name="horizontalLayoutWidget" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>10</y>
-       <width>1041</width>
-       <height>481</height>
-      </rect>
-     </property>
-     <layout class="QHBoxLayout" name="sinkLayout" />
-    </widget>
-   </widget>
-   <widget class="QGroupBox" name="rxBox" >
-    <property name="geometry" >
-     <rect>
-      <x>10</x>
-      <y>520</y>
-      <width>251</width>
-      <height>181</height>
-     </rect>
-    </property>
-    <property name="title" >
-     <string>Receiver Parameters</string>
-    </property>
-    <widget class="QLineEdit" name="gainMuEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>120</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="gainMuLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>120</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>mu's gain</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="alphaEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>150</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="alphaLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>150</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Alpha</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="gainLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>60</y>
-       <width>101</width>
-       <height>17</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Gain (dB)</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="freqEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>30</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="freqLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>30</y>
-       <width>141</width>
-       <height>17</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Frequency (Hz)</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="gainEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>60</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="decimLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>90</y>
-       <width>101</width>
-       <height>17</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Decimation</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="decimEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>90</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-   </widget>
-   <widget class="QGroupBox" name="rxBox_2" >
-    <property name="geometry" >
-     <rect>
-      <x>300</x>
-      <y>520</y>
-      <width>251</width>
-      <height>121</height>
-     </rect>
-    </property>
-    <property name="title" >
-     <string>Received Packet Info</string>
-    </property>
-    <widget class="QLineEdit" name="pktsRcvdEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>30</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pktsRcvdLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>30</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Packets Rcvd.</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="pktsCorrectEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>60</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-    <widget class="QLabel" name="pktsCorrectLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>60</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>Packets Correct</string>
-     </property>
-    </widget>
-    <widget class="QLabel" name="perLabel" >
-     <property name="geometry" >
-      <rect>
-       <x>10</x>
-       <y>90</y>
-       <width>111</width>
-       <height>20</height>
-      </rect>
-     </property>
-     <property name="text" >
-      <string>PER</string>
-     </property>
-    </widget>
-    <widget class="QLineEdit" name="perEdit" >
-     <property name="geometry" >
-      <rect>
-       <x>120</x>
-       <y>90</y>
-       <width>113</width>
-       <height>23</height>
-      </rect>
-     </property>
-    </widget>
-   </widget>
+   <layout class="QGridLayout" name="gridLayout" >
+    <item row="0" column="0" >
+     <widget class="QFrame" name="sinkFrame" >
+      <property name="sizePolicy" >
+       <sizepolicy vsizetype="Preferred" hsizetype="Preferred" >
+        <horstretch>0</horstretch>
+        <verstretch>1</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="minimumSize" >
+       <size>
+        <width>800</width>
+        <height>500</height>
+       </size>
+      </property>
+      <property name="frameShape" >
+       <enum>QFrame::StyledPanel</enum>
+      </property>
+      <property name="frameShadow" >
+       <enum>QFrame::Raised</enum>
+      </property>
+      <layout class="QHBoxLayout" name="horizontalLayout_2" >
+       <item>
+        <layout class="QHBoxLayout" name="sinkLayout" />
+       </item>
+      </layout>
+     </widget>
+    </item>
+    <item row="1" column="0" >
+     <spacer name="verticalSpacer" >
+      <property name="orientation" >
+       <enum>Qt::Vertical</enum>
+      </property>
+      <property name="sizeType" >
+       <enum>QSizePolicy::Fixed</enum>
+      </property>
+      <property name="sizeHint" stdset="0" >
+       <size>
+        <width>20</width>
+        <height>40</height>
+       </size>
+      </property>
+     </spacer>
+    </item>
+    <item row="2" column="0" >
+     <layout class="QHBoxLayout" name="horizontalLayout" >
+      <property name="sizeConstraint" >
+       <enum>QLayout::SetFixedSize</enum>
+      </property>
+      <item>
+       <widget class="QGroupBox" name="rxBox" >
+        <property name="sizePolicy" >
+         <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="minimumSize" >
+         <size>
+          <width>250</width>
+          <height>190</height>
+         </size>
+        </property>
+        <property name="maximumSize" >
+         <size>
+          <width>250</width>
+          <height>190</height>
+         </size>
+        </property>
+        <property name="title" >
+         <string>Receiver Parameters</string>
+        </property>
+        <widget class="QLineEdit" name="gainMuEdit" >
+         <property name="geometry" >
+          <rect>
+           <x>120</x>
+           <y>120</y>
+           <width>113</width>
+           <height>23</height>
+          </rect>
+         </property>
+        </widget>
+        <widget class="QLabel" name="gainMuLabel" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>120</y>
+           <width>111</width>
+           <height>20</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>mu's gain</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="alphaEdit" >
+         <property name="geometry" >
+          <rect>
+           <x>120</x>
+           <y>150</y>
+           <width>113</width>
+           <height>23</height>
+          </rect>
+         </property>
+        </widget>
+        <widget class="QLabel" name="alphaLabel" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>150</y>
+           <width>111</width>
+           <height>20</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>Alpha</string>
+         </property>
+        </widget>
+        <widget class="QLabel" name="gainLabel" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>60</y>
+           <width>101</width>
+           <height>17</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>Gain (dB)</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="freqEdit" >
+         <property name="geometry" >
+          <rect>
+           <x>120</x>
+           <y>30</y>
+           <width>113</width>
+           <height>23</height>
+          </rect>
+         </property>
+        </widget>
+        <widget class="QLabel" name="freqLabel" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>30</y>
+           <width>141</width>
+           <height>17</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>Frequency (Hz)</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="gainEdit" >
+         <property name="geometry" >
+          <rect>
+           <x>120</x>
+           <y>60</y>
+           <width>113</width>
+           <height>23</height>
+          </rect>
+         </property>
+        </widget>
+        <widget class="QLabel" name="decimLabel" >
+         <property name="geometry" >
+          <rect>
+           <x>10</x>
+           <y>90</y>
+           <width>101</width>
+           <height>17</height>
+          </rect>
+         </property>
+         <property name="text" >
+          <string>Decimation</string>
+         </property>
+        </widget>
+        <widget class="QLineEdit" name="decimEdit" >
+         <property name="geometry" >
+          <rect>
+           <x>120</x>
+           <y>90</y>
+           <width>113</width>
+           <height>23</height>
+          </rect>
+         </property>
+        </widget>
+       </widget>
+      </item>
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout_3" >
+        <item>
+         <widget class="QGroupBox" name="rxPacketBox" >
+          <property name="enabled" >
+           <bool>true</bool>
+          </property>
+          <property name="sizePolicy" >
+           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize" >
+           <size>
+            <width>250</width>
+            <height>130</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>250</width>
+            <height>130</height>
+           </size>
+          </property>
+          <property name="font" >
+           <font>
+            <weight>50</weight>
+            <bold>false</bold>
+           </font>
+          </property>
+          <property name="title" >
+           <string>Received Packet Info</string>
+          </property>
+          <widget class="QLineEdit" name="pktsRcvdEdit" >
+           <property name="geometry" >
+            <rect>
+             <x>120</x>
+             <y>30</y>
+             <width>113</width>
+             <height>23</height>
+            </rect>
+           </property>
+          </widget>
+          <widget class="QLabel" name="pktsRcvdLabel" >
+           <property name="geometry" >
+            <rect>
+             <x>10</x>
+             <y>30</y>
+             <width>111</width>
+             <height>20</height>
+            </rect>
+           </property>
+           <property name="text" >
+            <string>Packets Rcvd.</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="pktsCorrectEdit" >
+           <property name="geometry" >
+            <rect>
+             <x>120</x>
+             <y>60</y>
+             <width>113</width>
+             <height>23</height>
+            </rect>
+           </property>
+          </widget>
+          <widget class="QLabel" name="pktsCorrectLabel" >
+           <property name="geometry" >
+            <rect>
+             <x>10</x>
+             <y>60</y>
+             <width>111</width>
+             <height>20</height>
+            </rect>
+           </property>
+           <property name="text" >
+            <string>Packets Correct</string>
+           </property>
+          </widget>
+          <widget class="QLabel" name="perLabel" >
+           <property name="geometry" >
+            <rect>
+             <x>10</x>
+             <y>90</y>
+             <width>111</width>
+             <height>20</height>
+            </rect>
+           </property>
+           <property name="text" >
+            <string>PER</string>
+           </property>
+          </widget>
+          <widget class="QLineEdit" name="perEdit" >
+           <property name="geometry" >
+            <rect>
+             <x>120</x>
+             <y>90</y>
+             <width>113</width>
+             <height>23</height>
+            </rect>
+           </property>
+          </widget>
+          <zorder>pktsRcvdEdit</zorder>
+          <zorder>pktsRcvdLabel</zorder>
+          <zorder>pktsCorrectEdit</zorder>
+          <zorder>pktsCorrectLabel</zorder>
+          <zorder>perLabel</zorder>
+          <zorder>perEdit</zorder>
+          <zorder>rxBox</zorder>
+          <zorder>verticalLayoutWidget</zorder>
+         </widget>
+        </item>
+        <item>
+         <spacer name="verticalSpacer_2" >
+          <property name="orientation" >
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeType" >
+           <enum>QSizePolicy::Fixed</enum>
+          </property>
+          <property name="sizeHint" stdset="0" >
+           <size>
+            <width>20</width>
+            <height>60</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+       </layout>
+      </item>
+      <item>
+       <spacer name="horizontalSpacer" >
+        <property name="orientation" >
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0" >
+         <size>
+          <width>40</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayout_5" >
+        <item>
+         <spacer name="verticalSpacer_3" >
+          <property name="orientation" >
+           <enum>Qt::Vertical</enum>
+          </property>
+          <property name="sizeHint" stdset="0" >
+           <size>
+            <width>20</width>
+            <height>40</height>
+           </size>
+          </property>
+         </spacer>
+        </item>
+        <item>
+         <widget class="QPushButton" name="closeButton" >
+          <property name="sizePolicy" >
+           <sizepolicy vsizetype="Fixed" hsizetype="Fixed" >
+            <horstretch>0</horstretch>
+            <verstretch>0</verstretch>
+           </sizepolicy>
+          </property>
+          <property name="minimumSize" >
+           <size>
+            <width>80</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="maximumSize" >
+           <size>
+            <width>80</width>
+            <height>30</height>
+           </size>
+          </property>
+          <property name="text" >
+           <string>Close</string>
+          </property>
+         </widget>
+        </item>
+       </layout>
+      </item>
+     </layout>
+    </item>
+   </layout>
+   <zorder>closeButton</zorder>
+   <zorder>sinkFrame</zorder>
+   <zorder>rxBox</zorder>
+   <zorder>rxPacketBox</zorder>
+   <zorder>verticalLayoutWidget</zorder>
+   <zorder>verticalSpacer</zorder>
+   <zorder>horizontalLayoutWidget_2</zorder>
   </widget>
   <widget class="QMenuBar" name="menubar" >
    <property name="geometry" >
     <rect>
      <x>0</x>
      <y>0</y>
-     <width>1085</width>
+     <width>1000</width>
      <height>24</height>
     </rect>
    </property>
@@ -288,40 +423,37 @@
    </property>
   </action>
  </widget>
- <tabstops>
-  <tabstop>closeButton</tabstop>
- </tabstops>
  <resources/>
  <connections>
   <connection>
-   <sender>closeButton</sender>
-   <signal>clicked()</signal>
+   <sender>actionExit</sender>
+   <signal>triggered()</signal>
    <receiver>DigitalWindow</receiver>
    <slot>close()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>322</x>
-     <y>623</y>
+     <x>-1</x>
+     <y>-1</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>66</x>
-     <y>561</y>
+     <x>617</x>
+     <y>327</y>
     </hint>
    </hints>
   </connection>
   <connection>
-   <sender>actionExit</sender>
-   <signal>triggered()</signal>
+   <sender>closeButton</sender>
+   <signal>clicked()</signal>
    <receiver>DigitalWindow</receiver>
    <slot>close()</slot>
    <hints>
     <hint type="sourcelabel" >
-     <x>-1</x>
-     <y>-1</y>
+     <x>960</x>
+     <y>694</y>
     </hint>
     <hint type="destinationlabel" >
-     <x>617</x>
-     <y>327</y>
+     <x>66</x>
+     <y>561</y>
     </hint>
    </hints>
   </connection>
diff --git a/gnuradio-examples/python/usrp2/qt_wfm_interface.py b/gnuradio-examples/python/usrp2/qt_wfm_interface.py
new file mode 100644
index 0000000000..4c4367ed0c
--- /dev/null
+++ b/gnuradio-examples/python/usrp2/qt_wfm_interface.py
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+
+# Form implementation generated from reading ui file 'qt_wfm_interface.ui'
+#
+# Created: Thu Jun 18 23:41:03 2009
+#      by: PyQt4 UI code generator 4.4.3
+#
+# WARNING! All changes made in this file will be lost!
+
+from PyQt4 import QtCore, QtGui
+
+class Ui_InterfaceWindow(object):
+    def setupUi(self, InterfaceWindow):
+        InterfaceWindow.setObjectName("InterfaceWindow")
+        InterfaceWindow.resize(909, 711)
+        self.centralwidget = QtGui.QWidget(InterfaceWindow)
+        self.centralwidget.setObjectName("centralwidget")
+        self.closeButton = QtGui.QPushButton(self.centralwidget)
+        self.closeButton.setGeometry(QtCore.QRect(790, 580, 101, 31))
+        self.closeButton.setObjectName("closeButton")
+        self.sinkFrame = QtGui.QFrame(self.centralwidget)
+        self.sinkFrame.setGeometry(QtCore.QRect(10, 10, 891, 501))
+        self.sinkFrame.setFrameShape(QtGui.QFrame.StyledPanel)
+        self.sinkFrame.setFrameShadow(QtGui.QFrame.Raised)
+        self.sinkFrame.setObjectName("sinkFrame")
+        self.horizontalLayoutWidget = QtGui.QWidget(self.sinkFrame)
+        self.horizontalLayoutWidget.setGeometry(QtCore.QRect(10, 10, 871, 481))
+        self.horizontalLayoutWidget.setObjectName("horizontalLayoutWidget")
+        self.sinkLayout = QtGui.QHBoxLayout(self.horizontalLayoutWidget)
+        self.sinkLayout.setObjectName("sinkLayout")
+        self.channelModeBox = QtGui.QGroupBox(self.centralwidget)
+        self.channelModeBox.setGeometry(QtCore.QRect(10, 520, 261, 131))
+        self.channelModeBox.setObjectName("channelModeBox")
+        self.bandwidthabel = QtGui.QLabel(self.channelModeBox)
+        self.bandwidthabel.setGeometry(QtCore.QRect(10, 90, 101, 17))
+        self.bandwidthabel.setObjectName("bandwidthabel")
+        self.bandwidthEdit = QtGui.QLineEdit(self.channelModeBox)
+        self.bandwidthEdit.setGeometry(QtCore.QRect(130, 90, 113, 23))
+        self.bandwidthEdit.setObjectName("bandwidthEdit")
+        self.gainEdit = QtGui.QLineEdit(self.channelModeBox)
+        self.gainEdit.setGeometry(QtCore.QRect(130, 60, 113, 23))
+        self.gainEdit.setObjectName("gainEdit")
+        self.gainLabel = QtGui.QLabel(self.channelModeBox)
+        self.gainLabel.setGeometry(QtCore.QRect(10, 60, 111, 20))
+        self.gainLabel.setObjectName("gainLabel")
+        self.freqEdit = QtGui.QLineEdit(self.channelModeBox)
+        self.freqEdit.setGeometry(QtCore.QRect(130, 30, 113, 23))
+        self.freqEdit.setObjectName("freqEdit")
+        self.freqLabel = QtGui.QLabel(self.channelModeBox)
+        self.freqLabel.setGeometry(QtCore.QRect(10, 30, 111, 17))
+        self.freqLabel.setObjectName("freqLabel")
+        self.pauseButton = QtGui.QPushButton(self.centralwidget)
+        self.pauseButton.setGeometry(QtCore.QRect(790, 520, 101, 31))
+        self.pauseButton.setObjectName("pauseButton")
+        self.fmBox = QtGui.QGroupBox(self.centralwidget)
+        self.fmBox.setGeometry(QtCore.QRect(290, 520, 251, 131))
+        self.fmBox.setObjectName("fmBox")
+        self.volumeEdit = QtGui.QLineEdit(self.fmBox)
+        self.volumeEdit.setGeometry(QtCore.QRect(130, 20, 113, 23))
+        self.volumeEdit.setObjectName("volumeEdit")
+        self.volumeLabel = QtGui.QLabel(self.fmBox)
+        self.volumeLabel.setGeometry(QtCore.QRect(10, 20, 111, 17))
+        self.volumeLabel.setObjectName("volumeLabel")
+        InterfaceWindow.setCentralWidget(self.centralwidget)
+        self.menubar = QtGui.QMenuBar(InterfaceWindow)
+        self.menubar.setGeometry(QtCore.QRect(0, 0, 909, 24))
+        self.menubar.setObjectName("menubar")
+        self.menuFile = QtGui.QMenu(self.menubar)
+        self.menuFile.setObjectName("menuFile")
+        InterfaceWindow.setMenuBar(self.menubar)
+        self.statusbar = QtGui.QStatusBar(InterfaceWindow)
+        self.statusbar.setObjectName("statusbar")
+        InterfaceWindow.setStatusBar(self.statusbar)
+        self.actionExit = QtGui.QAction(InterfaceWindow)
+        self.actionExit.setObjectName("actionExit")
+        self.menuFile.addAction(self.actionExit)
+        self.menubar.addAction(self.menuFile.menuAction())
+
+        self.retranslateUi(InterfaceWindow)
+        QtCore.QObject.connect(self.closeButton, QtCore.SIGNAL("clicked()"), InterfaceWindow.close)
+        QtCore.QObject.connect(self.actionExit, QtCore.SIGNAL("triggered()"), InterfaceWindow.close)
+        QtCore.QMetaObject.connectSlotsByName(InterfaceWindow)
+        InterfaceWindow.setTabOrder(self.closeButton, self.gainEdit)
+        InterfaceWindow.setTabOrder(self.gainEdit, self.freqEdit)
+        InterfaceWindow.setTabOrder(self.freqEdit, self.bandwidthEdit)
+
+    def retranslateUi(self, InterfaceWindow):
+        InterfaceWindow.setWindowTitle(QtGui.QApplication.translate("InterfaceWindow", "MainWindow", None, QtGui.QApplication.UnicodeUTF8))
+        self.closeButton.setText(QtGui.QApplication.translate("InterfaceWindow", "Close", None, QtGui.QApplication.UnicodeUTF8))
+        self.channelModeBox.setTitle(QtGui.QApplication.translate("InterfaceWindow", "USRP Parameters", None, QtGui.QApplication.UnicodeUTF8))
+        self.bandwidthabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Bandwidth (Hz)", None, QtGui.QApplication.UnicodeUTF8))
+        self.gainLabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Gain (dB)", None, QtGui.QApplication.UnicodeUTF8))
+        self.freqLabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Frequency", None, QtGui.QApplication.UnicodeUTF8))
+        self.pauseButton.setText(QtGui.QApplication.translate("InterfaceWindow", "Pause", None, QtGui.QApplication.UnicodeUTF8))
+        self.fmBox.setTitle(QtGui.QApplication.translate("InterfaceWindow", "FM Tuner Parameters", None, QtGui.QApplication.UnicodeUTF8))
+        self.volumeLabel.setText(QtGui.QApplication.translate("InterfaceWindow", "Volume", None, QtGui.QApplication.UnicodeUTF8))
+        self.menuFile.setTitle(QtGui.QApplication.translate("InterfaceWindow", "&File", None, QtGui.QApplication.UnicodeUTF8))
+        self.actionExit.setText(QtGui.QApplication.translate("InterfaceWindow", "E&xit", None, QtGui.QApplication.UnicodeUTF8))
+
diff --git a/gnuradio-examples/python/usrp2/qt_wfm_interface.ui b/gnuradio-examples/python/usrp2/qt_wfm_interface.ui
new file mode 100644
index 0000000000..16902d9f46
--- /dev/null
+++ b/gnuradio-examples/python/usrp2/qt_wfm_interface.ui
@@ -0,0 +1,253 @@
+<ui version="4.0" >
+ <class>InterfaceWindow</class>
+ <widget class="QMainWindow" name="InterfaceWindow" >
+  <property name="geometry" >
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>909</width>
+    <height>711</height>
+   </rect>
+  </property>
+  <property name="windowTitle" >
+   <string>MainWindow</string>
+  </property>
+  <widget class="QWidget" name="centralwidget" >
+   <widget class="QPushButton" name="closeButton" >
+    <property name="geometry" >
+     <rect>
+      <x>790</x>
+      <y>580</y>
+      <width>101</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text" >
+     <string>Close</string>
+    </property>
+   </widget>
+   <widget class="QFrame" name="sinkFrame" >
+    <property name="geometry" >
+     <rect>
+      <x>10</x>
+      <y>10</y>
+      <width>891</width>
+      <height>501</height>
+     </rect>
+    </property>
+    <property name="frameShape" >
+     <enum>QFrame::StyledPanel</enum>
+    </property>
+    <property name="frameShadow" >
+     <enum>QFrame::Raised</enum>
+    </property>
+    <widget class="QWidget" name="horizontalLayoutWidget" >
+     <property name="geometry" >
+      <rect>
+       <x>10</x>
+       <y>10</y>
+       <width>871</width>
+       <height>481</height>
+      </rect>
+     </property>
+     <layout class="QHBoxLayout" name="sinkLayout" />
+    </widget>
+   </widget>
+   <widget class="QGroupBox" name="channelModeBox" >
+    <property name="geometry" >
+     <rect>
+      <x>10</x>
+      <y>520</y>
+      <width>261</width>
+      <height>131</height>
+     </rect>
+    </property>
+    <property name="title" >
+     <string>USRP Parameters</string>
+    </property>
+    <widget class="QLabel" name="bandwidthabel" >
+     <property name="geometry" >
+      <rect>
+       <x>10</x>
+       <y>90</y>
+       <width>101</width>
+       <height>17</height>
+      </rect>
+     </property>
+     <property name="text" >
+      <string>Bandwidth (Hz)</string>
+     </property>
+    </widget>
+    <widget class="QLineEdit" name="bandwidthEdit" >
+     <property name="geometry" >
+      <rect>
+       <x>130</x>
+       <y>90</y>
+       <width>113</width>
+       <height>23</height>
+      </rect>
+     </property>
+    </widget>
+    <widget class="QLineEdit" name="gainEdit" >
+     <property name="geometry" >
+      <rect>
+       <x>130</x>
+       <y>60</y>
+       <width>113</width>
+       <height>23</height>
+      </rect>
+     </property>
+    </widget>
+    <widget class="QLabel" name="gainLabel" >
+     <property name="geometry" >
+      <rect>
+       <x>10</x>
+       <y>60</y>
+       <width>111</width>
+       <height>20</height>
+      </rect>
+     </property>
+     <property name="text" >
+      <string>Gain (dB)</string>
+     </property>
+    </widget>
+    <widget class="QLineEdit" name="freqEdit" >
+     <property name="geometry" >
+      <rect>
+       <x>130</x>
+       <y>30</y>
+       <width>113</width>
+       <height>23</height>
+      </rect>
+     </property>
+    </widget>
+    <widget class="QLabel" name="freqLabel" >
+     <property name="geometry" >
+      <rect>
+       <x>10</x>
+       <y>30</y>
+       <width>111</width>
+       <height>17</height>
+      </rect>
+     </property>
+     <property name="text" >
+      <string>Frequency</string>
+     </property>
+    </widget>
+   </widget>
+   <widget class="QPushButton" name="pauseButton" >
+    <property name="geometry" >
+     <rect>
+      <x>790</x>
+      <y>520</y>
+      <width>101</width>
+      <height>31</height>
+     </rect>
+    </property>
+    <property name="text" >
+     <string>Pause</string>
+    </property>
+   </widget>
+   <widget class="QGroupBox" name="fmBox" >
+    <property name="geometry" >
+     <rect>
+      <x>290</x>
+      <y>520</y>
+      <width>251</width>
+      <height>131</height>
+     </rect>
+    </property>
+    <property name="title" >
+     <string>FM Tuner Parameters</string>
+    </property>
+    <widget class="QLineEdit" name="volumeEdit" >
+     <property name="geometry" >
+      <rect>
+       <x>130</x>
+       <y>20</y>
+       <width>113</width>
+       <height>23</height>
+      </rect>
+     </property>
+    </widget>
+    <widget class="QLabel" name="volumeLabel" >
+     <property name="geometry" >
+      <rect>
+       <x>10</x>
+       <y>20</y>
+       <width>111</width>
+       <height>17</height>
+      </rect>
+     </property>
+     <property name="text" >
+      <string>Volume</string>
+     </property>
+    </widget>
+   </widget>
+  </widget>
+  <widget class="QMenuBar" name="menubar" >
+   <property name="geometry" >
+    <rect>
+     <x>0</x>
+     <y>0</y>
+     <width>909</width>
+     <height>24</height>
+    </rect>
+   </property>
+   <widget class="QMenu" name="menuFile" >
+    <property name="title" >
+     <string>&amp;File</string>
+    </property>
+    <addaction name="actionExit" />
+   </widget>
+   <addaction name="menuFile" />
+  </widget>
+  <widget class="QStatusBar" name="statusbar" />
+  <action name="actionExit" >
+   <property name="text" >
+    <string>E&amp;xit</string>
+   </property>
+  </action>
+ </widget>
+ <tabstops>
+  <tabstop>closeButton</tabstop>
+  <tabstop>gainEdit</tabstop>
+  <tabstop>freqEdit</tabstop>
+  <tabstop>bandwidthEdit</tabstop>
+ </tabstops>
+ <resources/>
+ <connections>
+  <connection>
+   <sender>closeButton</sender>
+   <signal>clicked()</signal>
+   <receiver>InterfaceWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>322</x>
+     <y>623</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>66</x>
+     <y>561</y>
+    </hint>
+   </hints>
+  </connection>
+  <connection>
+   <sender>actionExit</sender>
+   <signal>triggered()</signal>
+   <receiver>InterfaceWindow</receiver>
+   <slot>close()</slot>
+   <hints>
+    <hint type="sourcelabel" >
+     <x>-1</x>
+     <y>-1</y>
+    </hint>
+    <hint type="destinationlabel" >
+     <x>617</x>
+     <y>327</y>
+    </hint>
+   </hints>
+  </connection>
+ </connections>
+</ui>
diff --git a/gnuradio-examples/python/usrp2/usrp2_wfm_qt.py b/gnuradio-examples/python/usrp2/usrp2_wfm_qt.py
new file mode 100755
index 0000000000..0be21ceb98
--- /dev/null
+++ b/gnuradio-examples/python/usrp2/usrp2_wfm_qt.py
@@ -0,0 +1,352 @@
+#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007,2008,2009 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 gnuradio import gr, gru, eng_notation, optfir
+from gnuradio import audio
+from gnuradio import usrp2
+from gnuradio import blks2
+from gnuradio.eng_option import eng_option
+from optparse import OptionParser
+import sys
+import math
+
+
+try:
+    from gnuradio.qtgui import qtgui
+    from PyQt4 import QtGui, QtCore
+    import sip
+except ImportError:
+    print "Please install gr-qtgui."
+    sys.exit(1)
+    
+try:
+    from qt_wfm_interface import Ui_InterfaceWindow
+except ImportError:
+    print "Error: could not find qt_wfm_interface.py:"
+    print "\tPlease run: \"pyuic4 qt_wfm_interface.ui -o qt_wfm_interface.py\""
+    sys.exit(1)
+
+print "This program is not in a proper working state. Comment this out if you want to play."
+sys.exit(1)
+
+
+# ////////////////////////////////////////////////////////////////////
+#        Define the QT Interface and Control Dialog
+# ////////////////////////////////////////////////////////////////////
+
+
+class dialog_box(QtGui.QMainWindow):
+    def __init__(self, snk_usrp, snk_vol, fg, parent=None):
+
+        QtGui.QWidget.__init__(self, parent)
+        self.gui = Ui_InterfaceWindow()
+        self.gui.setupUi(self)
+
+        self.fg = fg
+
+        # Set USRP parameters
+        self.set_bw(self.fg.usrp_bw())
+        self.set_freq(self.fg.freq())
+        self.set_gain(self.fg.gain())
+        self.set_volume(self.fg.volume())
+
+        # Add the qtsnk widgets to the hlayout box
+        self.gui.sinkLayout.addWidget(snk_usrp)
+        self.gui.sinkLayout.addWidget(snk_vol)
+
+
+        # Connect up some signals
+        self.connect(self.gui.pauseButton, QtCore.SIGNAL("clicked()"),
+                     self.pauseFg)
+
+        self.connect(self.gui.bandwidthEdit, QtCore.SIGNAL("editingFinished()"),
+                     self.bwEditText)
+        self.connect(self.gui.freqEdit, QtCore.SIGNAL("editingFinished()"),
+                     self.freqEditText)
+        self.connect(self.gui.gainEdit, QtCore.SIGNAL("editingFinished()"),
+                     self.gainEditText)
+
+        self.connect(self.gui.volumeEdit, QtCore.SIGNAL("editingFinished()"),
+                     self.volumeEditText)
+
+
+    def pauseFg(self):
+        if(self.gui.pauseButton.text() == "Pause"):
+            self.fg.stop()
+            self.fg.wait()
+            self.gui.pauseButton.setText("Unpause")
+        else:
+            self.fg.start()
+            self.gui.pauseButton.setText("Pause")
+
+
+    # Accessor functions for Gui to manipulate USRP
+    def set_bw(self, bw):
+        self.gui.bandwidthEdit.setText(QtCore.QString("%1").arg(bw))
+
+    def set_freq(self, freq):
+        self.gui.freqEdit.setText(QtCore.QString("%1").arg(freq))
+
+    def set_gain(self, gain):
+        self.gui.gainEdit.setText(QtCore.QString("%1").arg(gain))
+
+    def set_volume(self, vol):
+        self.gui.volumeEdit.setText(QtCore.QString("%1").arg(vol))
+
+    def bwEditText(self):
+        try:
+            bw = self.gui.bandwidthEdit.text().toDouble()[0]
+            self.fg.set_usrp_bw(bw)
+        except RuntimeError:
+            pass
+
+    def freqEditText(self):
+        try:
+            freq = self.gui.freqEdit.text().toDouble()[0]
+            self.fg.set_freq(freq)
+        except RuntimeError:
+            pass
+
+    def gainEditText(self):
+        try:
+            gain = self.gui.gainEdit.text().toDouble()[0]
+            self.fg.set_gain(gain)
+        except RuntimeError:
+            pass
+
+    def volumeEditText(self):
+        try:
+            vol = self.gui.volumeEdit.text().toDouble()[0]
+            self.fg.set_volume(vol)
+        except RuntimeError:
+            pass
+
+
+
+
+# ////////////////////////////////////////////////////////////////////
+#        Define the GNU Radio Top Block
+# ////////////////////////////////////////////////////////////////////
+
+
+class wfm_rx_block (gr.top_block):
+    def __init__(self):
+        gr.top_block.__init__(self)
+        
+        parser = OptionParser(option_class=eng_option)
+        parser.add_option("-e", "--interface", type="string", default="eth0",
+                          help="select Ethernet interface, default is eth0")
+        parser.add_option("-m", "--mac-addr", type="string", default="",
+                          help="select USRP by MAC address, default is auto-select")
+        #parser.add_option("-A", "--antenna", default=None,
+        #                  help="select Rx Antenna (only on RFX-series boards)")
+        parser.add_option("-f", "--freq", type="eng_float", default=100.1,
+                          help="set frequency to FREQ", metavar="FREQ")
+        parser.add_option("-g", "--gain", type="eng_float", default=None,
+                          help="set gain in dB (default is midpoint)")
+        parser.add_option("-V", "--volume", type="eng_float", default=None,
+                          help="set volume (default is midpoint)")
+        parser.add_option("-O", "--audio-output", type="string", default="",
+                          help="pcm device name.  E.g., hw:0,0 or surround51 or /dev/dsp")
+
+        (options, args) = parser.parse_args()
+        if len(args) != 0:
+            parser.print_help()
+            sys.exit(1)
+        
+        self._volume = options.volume
+        self._usrp_freq = options.freq
+        self._usrp_gain = options.gain
+        self._audio_rate = int(32e3)
+
+        # build graph
+     
+        self.u = usrp2.source_32fc(options.interface, options.mac_addr)
+
+        # calculate decimation values to get USRP BW at 320 kHz
+        self.calculate_usrp_bw(320e3)
+
+        self.set_decim(self._usrp_decim)
+
+        #FIXME: need named constants and text descriptions available to (gr-)usrp2 even
+        #when usrp(1) module is not built.  A usrp_common module, perhaps?
+        dbid = self.u.daughterboard_id()
+        print "Using RX d'board 0x%04X" % (dbid,)
+        #if not (dbid == 0x0001 or #usrp_dbid.BASIC_RX
+        #        dbid == 0x0003 or #usrp_dbid.TV_RX
+        #        dbid == 0x000c or #usrp_dbid.TV_RX_REV_2
+        #        dbid == 0x0040):  #usrp_dbid.TV_RX_REV_3    
+        #    print "This daughterboard does not cover the required frequency range"
+        #    print "for this application.  Please use a BasicRX or TVRX daughterboard."
+        #    raw_input("Press ENTER to continue anyway, or Ctrl-C to exit.")
+
+        chan_filt_coeffs = optfir.low_pass (1,                 # gain
+                                            self._usrp_rate,   # sampling rate
+                                            80e3,        # passband cutoff
+                                            115e3,       # stopband cutoff
+                                            0.1,         # passband ripple
+                                            60)          # stopband attenuation
+        #print len(chan_filt_coeffs)
+        chan_filt = gr.fir_filter_ccf (self._chanfilt_decim, chan_filt_coeffs)
+
+        self.guts = blks2.wfm_rcv (self._demod_rate, self._audio_decim)
+
+        self.volume_control = gr.multiply_const_ff(1)
+
+        # sound card as final sink
+        #audio_sink = audio.sink (int (audio_rate),
+        #                         options.audio_output,
+        #                         False)  # ok_to_block
+        audio_sink = audio.sink (self._audio_rate,
+                                 options.audio_output)
+
+        
+        if self._usrp_gain is None:
+            # if no gain was specified, use the mid-point in dB
+            g = self.u.gain_range()
+            print "Gain range: ", g
+            self._usrp_gain = float(g[0]+g[1])/2
+
+        if self._volume is None:
+            g = self.volume_range()
+            self._volume = float(g[0]+g[1])/2
+            
+        if abs(self._usrp_freq) < 1e6:
+            self._usrp_freq *= 1e6
+
+        # set initial values
+        self.set_gain(self._usrp_gain)
+        self.set_volume(self._volume)
+        if not(self.set_freq(self._usrp_freq)):
+            print ("Failed to set initial frequency")
+
+
+        # Define a GUI sink to display the received signal
+        self.qapp = QtGui.QApplication(sys.argv)
+        fftsize = 2048
+        
+        self.usrp_rx = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
+                                    -self._usrp_rate/2.0, self._usrp_rate/2.0,
+                                    "Received Signal", True, True, False, True, False,
+                                    use_openGL=False)
+        self.usrp_rx2 = qtgui.sink_f(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS,
+                                    -self._usrp_rate/2.0, self._usrp_rate/2.0,
+                                    "Received Signal", True, True, False, True, False)
+        
+        # now wire it all together
+        self.connect (self.u, chan_filt, self.guts, self.volume_control, audio_sink)
+        self.connect (self.u, self.usrp_rx)
+        self.connect (self.volume_control, self.usrp_rx2)
+        
+        usrp_rx_widget = sip.wrapinstance(self.usrp_rx.pyqwidget(), QtGui.QWidget)
+        usrp_rx2_widget = sip.wrapinstance(self.usrp_rx2.pyqwidget(), QtGui.QWidget)
+        
+        self.main_box = dialog_box(usrp_rx_widget, usrp_rx2_widget, self)
+        self.main_box.show()
+
+
+    def calculate_usrp_bw(self, bw):
+        """
+        Calculate the different decimation rates that make the USRP BW equal to the
+        input bandwidth parameter 'bw' and the audio bandwidth equal to the system-
+        wide bandwidth 'self._audio_rate'
+        """
+        
+        adc_rate = self.u.adc_rate()
+        d_usrp = int(adc_rate/bw)
+        bw_real = adc_rate / float(d_usrp)
+
+        d_chan = 1
+        demod_rate = bw_real / d_chan
+
+        d_audio = int(bw_real / self._audio_rate)
+        audio_rate = demod_rate / d_audio
+
+        self._usrp_decim  = d_usrp
+        self._chanfilt_decim = d_chan
+        self._audio_decim = d_audio
+        self._demod_rate = demod_rate
+        self._usrp_rate = bw_real
+
+        print "USRP Decimation:  ", self._usrp_decim
+        print "USRP Bandwidth:   ", bw_real
+        print "Audio Decimation: ", self._audio_decim
+        print "Audio Bandwidth:  ", audio_rate
+
+    def set_volume (self, vol):
+        g = self.volume_range()
+        self._volume = max(g[0], min(g[1], vol))
+        self.volume_control.set_k(10**(self._volume/10))
+                                        
+    def set_freq(self, target_freq):
+        """
+        Set the center frequency we're interested in.
+
+        @param target_freq: frequency in Hz
+        @rypte: bool
+
+        Tuning is a two step process.  First we ask the front-end to
+        tune as close to the desired frequency as it can.  Then we use
+        the result of that operation and our target_frequency to
+        determine the value for the digital down converter.
+        """
+        r = self.u.set_center_freq(target_freq)
+        if r:
+            self._usrp_freq = target_freq
+            return True
+        return False
+
+    def set_usrp_bw(self, bw):
+        self.calculate_usrp_bw(bw)
+
+    def set_gain(self, gain):
+        self._usrp_gain = gain
+        self.u.set_gain(gain)
+
+    def set_decim(self, decim):
+        self._usrp_decim = int(decim)
+        self.u.set_decim(self._usrp_decim)
+
+    def volume(self):
+        return self._volume
+    
+    def freq(self):
+        return self._usrp_freq
+
+    def usrp_bw(self):
+        return self._usrp_rate
+
+    def gain(self):
+        return self._usrp_gain
+
+    def decim(self):
+        return self._usrp_decim
+
+    def volume_range(self):
+        return (-20.0, 0.0, 0.5)
+        
+
+if __name__ == '__main__':
+    tb = wfm_rx_block()
+    tb.start()
+    tb.qapp.exec_()
+    
-- 
cgit v1.2.3