diff options
Diffstat (limited to 'gr-qtgui')
61 files changed, 759 insertions, 350 deletions
diff --git a/gr-qtgui/apps/gr_constellation_plot b/gr-qtgui/apps/gr_constellation_plot index 66d227ecc9..02805a8fd1 100755 --- a/gr-qtgui/apps/gr_constellation_plot +++ b/gr-qtgui/apps/gr_constellation_plot @@ -86,7 +86,7 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.skip) diff --git a/gr-qtgui/apps/gr_psd_plot_b b/gr-qtgui/apps/gr_psd_plot_b index e3e86a271f..283bf2950c 100755 --- a/gr-qtgui/apps/gr_psd_plot_b +++ b/gr-qtgui/apps/gr_psd_plot_b @@ -95,7 +95,7 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.cnvrt[0], self.skip) diff --git a/gr-qtgui/apps/gr_psd_plot_c b/gr-qtgui/apps/gr_psd_plot_c index faa0fc60a4..0f7f4b9bef 100755 --- a/gr-qtgui/apps/gr_psd_plot_c +++ b/gr-qtgui/apps/gr_psd_plot_c @@ -92,7 +92,7 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.skip) diff --git a/gr-qtgui/apps/gr_psd_plot_f b/gr-qtgui/apps/gr_psd_plot_f index 326618f848..973f7b29d9 100755 --- a/gr-qtgui/apps/gr_psd_plot_f +++ b/gr-qtgui/apps/gr_psd_plot_f @@ -92,7 +92,7 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.skip) diff --git a/gr-qtgui/apps/gr_psd_plot_i b/gr-qtgui/apps/gr_psd_plot_i index a0264ac1c9..022f4ee755 100755 --- a/gr-qtgui/apps/gr_psd_plot_i +++ b/gr-qtgui/apps/gr_psd_plot_i @@ -95,7 +95,7 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.cnvrt[0], self.skip) diff --git a/gr-qtgui/apps/gr_psd_plot_s b/gr-qtgui/apps/gr_psd_plot_s index 6852cf7d0f..905d8fde60 100755 --- a/gr-qtgui/apps/gr_psd_plot_s +++ b/gr-qtgui/apps/gr_psd_plot_s @@ -95,7 +95,7 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.cnvrt[0], self.skip) diff --git a/gr-qtgui/apps/gr_time_plot_b b/gr-qtgui/apps/gr_time_plot_b index 90043c91f6..3ac583eef3 100755 --- a/gr-qtgui/apps/gr_time_plot_b +++ b/gr-qtgui/apps/gr_time_plot_b @@ -89,7 +89,7 @@ class gr_time_plot_f(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.cnvrt[0], self.skip) diff --git a/gr-qtgui/apps/gr_time_plot_c b/gr-qtgui/apps/gr_time_plot_c index 858bbce240..2f27623e54 100755 --- a/gr-qtgui/apps/gr_time_plot_c +++ b/gr-qtgui/apps/gr_time_plot_c @@ -86,8 +86,8 @@ class my_top_block(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "Re{{{0}}}".format(fname)) - self.gui_snk.set_title(n+1, "Im{{{0}}}".format(fname)) + self.gui_snk.set_line_label(n, "Re{{{0}}}".format(fname)) + self.gui_snk.set_line_label(n+1, "Im{{{0}}}".format(fname)) n += 2 self.connect(self.srcs[0], self.skip) diff --git a/gr-qtgui/apps/gr_time_plot_f b/gr-qtgui/apps/gr_time_plot_f index 30834aca7a..e4f4b8d436 100755 --- a/gr-qtgui/apps/gr_time_plot_f +++ b/gr-qtgui/apps/gr_time_plot_f @@ -86,7 +86,7 @@ class gr_time_plot_f(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.skip) diff --git a/gr-qtgui/apps/gr_time_plot_i b/gr-qtgui/apps/gr_time_plot_i index 202fc32793..f9765db672 100755 --- a/gr-qtgui/apps/gr_time_plot_i +++ b/gr-qtgui/apps/gr_time_plot_i @@ -89,7 +89,7 @@ class gr_time_plot_f(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.cnvrt[0], self.skip) diff --git a/gr-qtgui/apps/gr_time_plot_s b/gr-qtgui/apps/gr_time_plot_s index 6788284833..43b098dbdb 100755 --- a/gr-qtgui/apps/gr_time_plot_s +++ b/gr-qtgui/apps/gr_time_plot_s @@ -89,7 +89,7 @@ class gr_time_plot_f(gr.top_block): # Set default labels based on file names fname = f.split("/")[-1] - self.gui_snk.set_title(n, "{0}".format(fname)) + self.gui_snk.set_line_label(n, "{0}".format(fname)) n += 1 self.connect(self.srcs[0], self.cnvrt[0], self.skip) diff --git a/gr-qtgui/apps/grc_qt_example.grc b/gr-qtgui/apps/grc_qt_example.grc index 170cd546ad..a0c9a0b6ae 100644 --- a/gr-qtgui/apps/grc_qt_example.grc +++ b/gr-qtgui/apps/grc_qt_example.grc @@ -1,6 +1,6 @@ <?xml version='1.0' encoding='ASCII'?> <flow_graph> - <timestamp>Sun Apr 10 16:49:13 2011</timestamp> + <timestamp>Sat Nov 10 14:58:46 2012</timestamp> <block> <key>options</key> <param> @@ -44,6 +44,10 @@ <value>True</value> </param> <param> + <key>max_nouts</key> + <value>0</value> + </param> + <param> <key>realtime_scheduling</key> <value></value> </param> @@ -80,37 +84,6 @@ </param> </block> <block> - <key>gr_throttle</key> - <param> - <key>id</key> - <value>gr_throttle_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>samples_per_second</key> - <value>samp_rate</value> - </param> - <param> - <key>vlen</key> - <value>1</value> - </param> - <param> - <key>_coordinate</key> - <value>(511, 96)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>variable_qtgui_range</key> <param> <key>id</key> @@ -166,49 +139,6 @@ </param> </block> <block> - <key>gr_sig_source_x</key> - <param> - <key>id</key> - <value>gr_sig_source_x_0</value> - </param> - <param> - <key>_enabled</key> - <value>True</value> - </param> - <param> - <key>type</key> - <value>complex</value> - </param> - <param> - <key>samp_rate</key> - <value>samp_rate</value> - </param> - <param> - <key>waveform</key> - <value>gr.GR_COS_WAVE</value> - </param> - <param> - <key>freq</key> - <value>freq</value> - </param> - <param> - <key>amp</key> - <value>amp</value> - </param> - <param> - <key>offset</key> - <value>0</value> - </param> - <param> - <key>_coordinate</key> - <value>(295, 64)</value> - </param> - <param> - <key>_rotation</key> - <value>0</value> - </param> - </block> - <block> <key>variable_qtgui_range</key> <param> <key>id</key> @@ -319,10 +249,41 @@ </param> </block> <block> - <key>gr_channel_model</key> + <key>gr_throttle</key> <param> <key>id</key> - <value>gr_channel_model_0</value> + <value>gr_throttle_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>samples_per_second</key> + <value>samp_rate</value> + </param> + <param> + <key>vlen</key> + <value>1</value> + </param> + <param> + <key>_coordinate</key> + <value>(511, 96)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>channels_channel_model</key> + <param> + <key>id</key> + <value>channels_channel_model_0</value> </param> <param> <key>_enabled</key> @@ -346,11 +307,11 @@ </param> <param> <key>seed</key> - <value>42</value> + <value>-42</value> </param> <param> <key>_coordinate</key> - <value>(727, 64)</value> + <value>(724, 64)</value> </param> <param> <key>_rotation</key> @@ -392,6 +353,10 @@ <value>samp_rate</value> </param> <param> + <key>rate</key> + <value>10</value> + </param> + <param> <key>plotfreq</key> <value>True</value> </param> @@ -412,8 +377,55 @@ <value></value> </param> <param> + <key>freqchangevar</key> + <value>None</value> + </param> + <param> <key>_coordinate</key> - <value>(958, 72)</value> + <value>(958, 64)</value> + </param> + <param> + <key>_rotation</key> + <value>0</value> + </param> + </block> + <block> + <key>analog_sig_source_x</key> + <param> + <key>id</key> + <value>analog_sig_source_x_0</value> + </param> + <param> + <key>_enabled</key> + <value>True</value> + </param> + <param> + <key>type</key> + <value>complex</value> + </param> + <param> + <key>samp_rate</key> + <value>samp_rate</value> + </param> + <param> + <key>waveform</key> + <value>analog.GR_COS_WAVE</value> + </param> + <param> + <key>freq</key> + <value>freq</value> + </param> + <param> + <key>amp</key> + <value>amp</value> + </param> + <param> + <key>offset</key> + <value>0</value> + </param> + <param> + <key>_coordinate</key> + <value>(297, 64)</value> </param> <param> <key>_rotation</key> @@ -421,20 +433,20 @@ </param> </block> <connection> - <source_block_id>gr_sig_source_x_0</source_block_id> + <source_block_id>analog_sig_source_x_0</source_block_id> <sink_block_id>gr_throttle_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_throttle_0</source_block_id> - <sink_block_id>gr_channel_model_0</sink_block_id> + <source_block_id>channels_channel_model_0</source_block_id> + <sink_block_id>qtgui_sink_x_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> <connection> - <source_block_id>gr_channel_model_0</source_block_id> - <sink_block_id>qtgui_sink_x_0</sink_block_id> + <source_block_id>gr_throttle_0</source_block_id> + <sink_block_id>channels_channel_model_0</sink_block_id> <source_key>0</source_key> <sink_key>0</sink_key> </connection> diff --git a/gr-qtgui/apps/plot_form.py b/gr-qtgui/apps/plot_form.py index 2fb19d72b8..f6841811a8 100644 --- a/gr-qtgui/apps/plot_form.py +++ b/gr-qtgui/apps/plot_form.py @@ -60,10 +60,29 @@ class dialog_box(QtGui.QWidget): self.update_points) self.layout = QtGui.QGridLayout(self) - self.layout.addWidget(top_block.get_gui(), 0,0,1,2) - self.layout.addLayout(self.start_form, 1,0,1,1) - self.layout.addLayout(self.end_form, 1,1,1,1) + self.layout.addWidget(top_block.get_gui(), 1,0,1,2) + self.layout.addLayout(self.start_form, 2,0,1,1) + self.layout.addLayout(self.end_form, 2,1,1,1) + # Create a save action + self.save_act = QtGui.QAction("Save", self) + self.save_act.setShortcut(QtGui.QKeySequence.Save) + self.connect(self.save_act, QtCore.SIGNAL("triggered()"), + self.save_figure) + + # Create an exit action + self.exit_act = QtGui.QAction("Exit", self) + self.exit_act.setShortcut(QtGui.QKeySequence.Close) + self.connect(self.exit_act, QtCore.SIGNAL("triggered()"), + self.close) + + # Create a menu for the window + self.menu = QtGui.QToolBar("Menu", self) + self.menu.addAction(self.save_act) + self.menu.addAction(self.exit_act) + + self.layout.addWidget(self.menu, 0,0,1,2) + self.resize(800, 500) def update_points(self): @@ -80,3 +99,29 @@ class dialog_box(QtGui.QWidget): self.top_block.reset(newstart, newnsamps) self._start = newstart self._end = newend + + def save_figure(self): + qpix = QtGui.QPixmap.grabWidget(self.top_block.pyWin) + types = "JPEG file (*.jpg);;" + \ + "Portable Network Graphics file (*.png);;" + \ + "Bitmap file (*.bmp);;" + \ + "TIFF file (*.tiff)" + filebox = QtGui.QFileDialog(self, "Save Image", "./", types) + filebox.setViewMode(QtGui.QFileDialog.Detail) + if(filebox.exec_()): + filename = filebox.selectedFiles()[0] + filetype = filebox.selectedNameFilter() + else: + return + + if(filetype.contains(".jpg")): + qpix.save(filename, "JPEG"); + elif(filetype.contains(".png")): + qpix.save(filename, "PNG"); + elif(filetype.contains(".bmp")): + qpix.save(filename, "BMP"); + elif(filetype.contains(".tiff")): + qpix.save(filename, "TIFF"); + else: + qpix.save(filename, "JPEG"); + diff --git a/gr-qtgui/examples/pyqt_const_c.py b/gr-qtgui/examples/pyqt_const_c.py index 125124ebc5..cf81aa120f 100755 --- a/gr-qtgui/examples/pyqt_const_c.py +++ b/gr-qtgui/examples/pyqt_const_c.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011 Free Software Foundation, Inc. +# Copyright 2011,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -139,8 +145,8 @@ class my_top_block(gr.top_block): self.qapp = QtGui.QApplication(sys.argv) - src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.5, 0) - src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.5, 0) + src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.5, 0) + src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.5, 0) src = gr.add_cc() channel = filter.channel_model(0.001) thr = gr.throttle(gr.sizeof_gr_complex, 100*npts) diff --git a/gr-qtgui/examples/pyqt_example_c.py b/gr-qtgui/examples/pyqt_example_c.py index 9857aa774d..294964479a 100755 --- a/gr-qtgui/examples/pyqt_example_c.py +++ b/gr-qtgui/examples/pyqt_example_c.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011 Free Software Foundation, Inc. +# Copyright 2011,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -143,12 +149,12 @@ class my_top_block(gr.top_block): ss.close() self.qapp.setStyleSheet(sstext) - src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_cc() channel = filter.channel_model(0.001) thr = gr.throttle(gr.sizeof_gr_complex, 100*fftsize) - self.snk1 = qtgui.sink_c(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, + self.snk1 = qtgui.sink_c(fftsize, filter.firdes.WIN_BLACKMAN_hARRIS, 0, Rs, "Complex Signal Example", True, True, True, False) diff --git a/gr-qtgui/examples/pyqt_example_f.py b/gr-qtgui/examples/pyqt_example_f.py index d00011f403..d2b3d0eb26 100755 --- a/gr-qtgui/examples/pyqt_example_f.py +++ b/gr-qtgui/examples/pyqt_example_f.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011 Free Software Foundation, Inc. +# Copyright 2011,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -139,11 +145,11 @@ class my_top_block(gr.top_block): self.qapp = QtGui.QApplication(sys.argv) - src1 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analg.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_ff() thr = gr.throttle(gr.sizeof_float, 100*fftsize) - noise = gr.noise_source_f(gr.GR_GAUSSIAN, 0.001) + noise = analog.noise_source_f(analog.GR_GAUSSIAN, 0.001) add = gr.add_ff() self.snk1 = qtgui.sink_f(fftsize, gr.firdes.WIN_BLACKMAN_hARRIS, 0, Rs, diff --git a/gr-qtgui/examples/pyqt_freq_c.py b/gr-qtgui/examples/pyqt_freq_c.py index 6102e980e6..5f891f8935 100755 --- a/gr-qtgui/examples/pyqt_freq_c.py +++ b/gr-qtgui/examples/pyqt_freq_c.py @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -143,12 +149,12 @@ class my_top_block(gr.top_block): ss.close() self.qapp.setStyleSheet(sstext) - src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_cc() channel = filter.channel_model(0.01) thr = gr.throttle(gr.sizeof_gr_complex, 100*npts) - self.snk1 = qtgui.freq_sink_c(npts, gr.firdes.WIN_BLACKMAN_hARRIS, + self.snk1 = qtgui.freq_sink_c(npts, analog.firdes.WIN_BLACKMAN_hARRIS, 0, Rs, "Complex Freq Example", 3) diff --git a/gr-qtgui/examples/pyqt_freq_f.py b/gr-qtgui/examples/pyqt_freq_f.py index fb7a9f93c6..d276d11106 100755 --- a/gr-qtgui/examples/pyqt_freq_f.py +++ b/gr-qtgui/examples/pyqt_freq_f.py @@ -28,9 +28,16 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") sys.exit(1) +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") + sys.exit(1) + + class dialog_box(QtGui.QWidget): def __init__(self, display, control): QtGui.QWidget.__init__(self, None) @@ -139,11 +146,11 @@ class my_top_block(gr.top_block): self.qapp = QtGui.QApplication(sys.argv) - src1 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_ff() thr = gr.throttle(gr.sizeof_float, 100*npts) - self.snk1 = qtgui.freq_sink_f(npts, gr.firdes.WIN_BLACKMAN_hARRIS, + self.snk1 = qtgui.freq_sink_f(npts, filter.firdes.WIN_BLACKMAN_hARRIS, 0, Rs, "Real freq Example", 3) diff --git a/gr-qtgui/examples/pyqt_time_c.py b/gr-qtgui/examples/pyqt_time_c.py index 4967f72595..ba5980a050 100755 --- a/gr-qtgui/examples/pyqt_time_c.py +++ b/gr-qtgui/examples/pyqt_time_c.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011 Free Software Foundation, Inc. +# Copyright 2011,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -143,8 +149,8 @@ class my_top_block(gr.top_block): ss.close() self.qapp.setStyleSheet(sstext) - src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_cc() channel = filter.channel_model(0.01) thr = gr.throttle(gr.sizeof_gr_complex, 100*npts) @@ -169,14 +175,14 @@ class my_top_block(gr.top_block): pyWin = sip.wrapinstance(pyQt, QtGui.QWidget) # Example of using signal/slot to set the title of a curve - pyWin.connect(pyWin, QtCore.SIGNAL("setTitle(int, QString)"), - pyWin, QtCore.SLOT("setTitle(int, QString)")) - pyWin.emit(QtCore.SIGNAL("setTitle(int, QString)"), 0, "Re{sum}") - self.snk1.set_title(1, "Im{Sum}") - #self.snk1.set_title(2, "Re{src1}") - #self.snk1.set_title(3, "Im{src1}") - #self.snk1.set_title(4, "Re{src2}") - #self.snk1.set_title(5, "Im{src2}") + pyWin.connect(pyWin, QtCore.SIGNAL("setLineLabel(int, QString)"), + pyWin, QtCore.SLOT("setLineLabel(int, QString)")) + pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "Re{sum}") + self.snk1.set_line_label(1, "Im{Sum}") + #self.snk1.set_line_label(2, "Re{src1}") + #self.snk1.set_line_label(3, "Im{src1}") + #self.snk1.set_line_label(4, "Re{src2}") + #self.snk1.set_line_label(5, "Im{src2}") # Can also set the color of a curve #self.snk1.set_color(5, "blue") diff --git a/gr-qtgui/examples/pyqt_time_f.py b/gr-qtgui/examples/pyqt_time_f.py index 464d8939b0..d7119dcb93 100755 --- a/gr-qtgui/examples/pyqt_time_f.py +++ b/gr-qtgui/examples/pyqt_time_f.py @@ -1,6 +1,6 @@ #!/usr/bin/env python # -# Copyright 2011 Free Software Foundation, Inc. +# Copyright 2011,2012 Free Software Foundation, Inc. # # This file is part of GNU Radio # @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -139,11 +145,11 @@ class my_top_block(gr.top_block): self.qapp = QtGui.QApplication(sys.argv) - src1 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_ff() thr = gr.throttle(gr.sizeof_float, 100*npts) - noise = gr.noise_source_f(gr.GR_GAUSSIAN, 0.001) + noise = analog.noise_source_f(analog.GR_GAUSSIAN, 0.001) add = gr.add_ff() self.snk1 = qtgui.time_sink_f(npts, Rs, "Complex Time Example", 3) @@ -168,11 +174,11 @@ class my_top_block(gr.top_block): pyWin = sip.wrapinstance(pyQt, QtGui.QWidget) # Example of using signal/slot to set the title of a curve - pyWin.connect(pyWin, QtCore.SIGNAL("setTitle(int, QString)"), - pyWin, QtCore.SLOT("setTitle(int, QString)")) - pyWin.emit(QtCore.SIGNAL("setTitle(int, QString)"), 0, "sum") - self.snk1.set_title(1, "src1") - self.snk1.set_title(2, "src2") + pyWin.connect(pyWin, QtCore.SIGNAL("setLineLabel(int, QString)"), + pyWin, QtCore.SLOT("setLineLabel(int, QString)")) + pyWin.emit(QtCore.SIGNAL("setLineLabel(int, QString)"), 0, "sum") + self.snk1.set_line_label(1, "src1") + self.snk1.set_line_label(2, "src2") # Can also set the color of a curve #self.snk1.set_color(5, "blue") diff --git a/gr-qtgui/examples/pyqt_waterfall_c.py b/gr-qtgui/examples/pyqt_waterfall_c.py index 3b65c5eb5c..eb7e731dfd 100755 --- a/gr-qtgui/examples/pyqt_waterfall_c.py +++ b/gr-qtgui/examples/pyqt_waterfall_c.py @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -143,12 +149,12 @@ class my_top_block(gr.top_block): ss.close() self.qapp.setStyleSheet(sstext) - src1 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_c(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_c(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_cc() channel = filter.channel_model(0.01) thr = gr.throttle(gr.sizeof_gr_complex, 100*npts) - self.snk1 = qtgui.waterfall_sink_c(npts, gr.firdes.WIN_BLACKMAN_hARRIS, + self.snk1 = qtgui.waterfall_sink_c(npts, filter.firdes.WIN_BLACKMAN_hARRIS, 0, Rs, "Complex Waterfall Example") diff --git a/gr-qtgui/examples/pyqt_waterfall_f.py b/gr-qtgui/examples/pyqt_waterfall_f.py index 29ae259e5f..ff79924843 100755 --- a/gr-qtgui/examples/pyqt_waterfall_f.py +++ b/gr-qtgui/examples/pyqt_waterfall_f.py @@ -28,7 +28,13 @@ try: from PyQt4 import QtGui, QtCore import sip except ImportError: - print "Error: Program requires PyQt4 and gr-qtgui." + sys.stderr.write("Error: Program requires PyQt4 and gr-qtgui.\n") + sys.exit(1) + +try: + from gnuradio import analog +except ImportError: + sys.stderr.write("Error: Program requires gr-analog.\n") sys.exit(1) class dialog_box(QtGui.QWidget): @@ -139,11 +145,11 @@ class my_top_block(gr.top_block): self.qapp = QtGui.QApplication(sys.argv) - src1 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f1, 0.1, 0) - src2 = gr.sig_source_f(Rs, gr.GR_SIN_WAVE, f2, 0.1, 0) + src1 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f1, 0.1, 0) + src2 = analog.sig_source_f(Rs, analog.GR_SIN_WAVE, f2, 0.1, 0) src = gr.add_ff() thr = gr.throttle(gr.sizeof_float, 100*npts) - self.snk1 = qtgui.waterfall_sink_f(npts, gr.firdes.WIN_BLACKMAN_hARRIS, + self.snk1 = qtgui.waterfall_sink_f(npts, filter.firdes.WIN_BLACKMAN_hARRIS, 0, Rs, "Real Waterfall Example") diff --git a/gr-qtgui/grc/qtgui_const_sink_x.xml b/gr-qtgui/grc/qtgui_const_sink_x.xml index 536237d164..31b13fe136 100644 --- a/gr-qtgui/grc/qtgui_const_sink_x.xml +++ b/gr-qtgui/grc/qtgui_const_sink_x.xml @@ -16,6 +16,8 @@ qtgui.$(type.fcn)( $name, \#name $nconnections \#number of inputs ) +self.$(id).set_y_axis($ymin, $ymax) +self.$(id).set_x_axis($xmin, $xmax) self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget) $(gui_hint()($win))</make> <callback>set_resize($width, $height)</callback> @@ -43,6 +45,34 @@ $(gui_hint()($win))</make> <type>int</type> </param> <param> + <name>Y min</name> + <key>ymin</key> + <value>-2</value> + <type>real</type> + <hide>part</hide> + </param> + <param> + <name>Y max</name> + <key>ymax</key> + <value>2</value> + <type>real</type> + <hide>part</hide> + </param> + <param> + <name>X min</name> + <key>xmin</key> + <value>-2</value> + <type>real</type> + <hide>part</hide> + </param> + <param> + <name>X max</name> + <key>xmax</key> + <value>2</value> + <type>real</type> + <hide>part</hide> + </param> + <param> <name>Number of Inputs</name> <key>nconnections</key> <value>1</value> diff --git a/gr-qtgui/grc/qtgui_freq_sink_x.xml b/gr-qtgui/grc/qtgui_freq_sink_x.xml index 69ce5f4e68..0844a7cbc9 100644 --- a/gr-qtgui/grc/qtgui_freq_sink_x.xml +++ b/gr-qtgui/grc/qtgui_freq_sink_x.xml @@ -20,6 +20,7 @@ qtgui.$(type.fcn)( $name, \#name $nconnections \#number of inputs ) +self.$(id).set_y_axis($ymin, $ymax) self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget) $(gui_hint()($win))</make> <callback>set_frequency_range($fc, $bw)</callback> @@ -96,6 +97,20 @@ $(gui_hint()($win))</make> <type>real</type> </param> <param> + <name>Y min</name> + <key>ymin</key> + <value>-140</value> + <type>real</type> + <hide>part</hide> + </param> + <param> + <name>Y max</name> + <key>ymax</key> + <value>10</value> + <type>real</type> + <hide>part</hide> + </param> + <param> <name>Number of Inputs</name> <key>nconnections</key> <value>1</value> diff --git a/gr-qtgui/grc/qtgui_time_sink_x.xml b/gr-qtgui/grc/qtgui_time_sink_x.xml index 17b2cfd016..7b15aa840a 100644 --- a/gr-qtgui/grc/qtgui_time_sink_x.xml +++ b/gr-qtgui/grc/qtgui_time_sink_x.xml @@ -14,16 +14,19 @@ <make>#set $win = 'self._%s_win'%$id qtgui.$(type.fcn)( $size, \#size - $bw, \#bw + $srate, \#samp_rate $name, \#name $nconnections \#number of inputs ) +self.$(id).set_y_axis($ymin, $ymax) self._$(id)_win = sip.wrapinstance(self.$(id).pyqwidget(), Qt.QWidget) $(gui_hint()($win))</make> <callback>set_time_domain_axis($min, $max)</callback> <callback>set_update_time($t)</callback> <callback>set_title($which, $title)</callback> <callback>set_color($which, $color)</callback> + <callback>set_y_axis($ymin, $ymax)</callback> + <callback>set_samp_rate($srate)</callback> <param> <name>Type</name> <key>type</key> @@ -45,12 +48,26 @@ $(gui_hint()($win))</make> <type>int</type> </param> <param> - <name>Bandwidth (Hz)</name> - <key>bw</key> + <name>Sample Rate</name> + <key>srate</key> <value>samp_rate</value> <type>real</type> </param> <param> + <name>Y min</name> + <key>ymin</key> + <value>-1</value> + <type>real</type> + <hide>part</hide> + </param> + <param> + <name>Y max</name> + <key>ymax</key> + <value>1</value> + <type>real</type> + <hide>part</hide> + </param> + <param> <name>Number of Inputs</name> <key>nconnections</key> <value>1</value> diff --git a/gr-qtgui/include/qtgui/const_sink_c.h b/gr-qtgui/include/qtgui/const_sink_c.h index 48da4b9fa1..dece60f196 100644 --- a/gr-qtgui/include/qtgui/const_sink_c.h +++ b/gr-qtgui/include/qtgui/const_sink_c.h @@ -62,9 +62,13 @@ namespace gr { virtual void exec_() = 0; virtual PyObject* pyqwidget() = 0; + virtual void set_y_axis(double min, double max) = 0; + virtual void set_x_axis(double min, double max) = 0; + virtual void set_update_time(double t) = 0; - virtual void set_title(int which, const std::string &title) = 0; - virtual void set_color(int which, const std::string &color) = 0; + virtual void set_title(const std::string &title) = 0; + virtual void set_line_label(int which, const std::string &label) = 0; + virtual void set_line_color(int which, const std::string &color) = 0; virtual void set_line_width(int which, int width) = 0; virtual void set_line_style(int which, Qt::PenStyle style) = 0; virtual void set_line_marker(int which, QwtSymbol::Style marker) = 0; @@ -72,6 +76,9 @@ namespace gr { virtual void set_size(int width, int height) = 0; + virtual int nsamps() const = 0; + virtual void reset() = 0; + QApplication *d_qApplication; }; diff --git a/gr-qtgui/include/qtgui/freq_sink_c.h b/gr-qtgui/include/qtgui/freq_sink_c.h index 2bef9035e8..07728e2abe 100644 --- a/gr-qtgui/include/qtgui/freq_sink_c.h +++ b/gr-qtgui/include/qtgui/freq_sink_c.h @@ -75,17 +75,20 @@ namespace gr { virtual float fft_average() const = 0; virtual void set_frequency_range(const double centerfreq, const double bandwidth) = 0; - virtual void set_fft_power_db(double min, double max) = 0; + virtual void set_y_axis(double min, double max) = 0; virtual void set_update_time(double t) = 0; - virtual void set_title(int which, const std::string &title) = 0; - virtual void set_color(int which, const std::string &color) = 0; + virtual void set_title(const std::string &title) = 0; + virtual void set_line_label(int which, const std::string &label) = 0; + virtual void set_line_color(int which, const std::string &color) = 0; virtual void set_line_width(int which, int width) = 0; virtual void set_line_style(int which, Qt::PenStyle style) = 0; virtual void set_line_marker(int which, QwtSymbol::Style marker) = 0; virtual void set_size(int width, int height) = 0; + virtual void reset() = 0; + QApplication *d_qApplication; }; diff --git a/gr-qtgui/include/qtgui/freq_sink_f.h b/gr-qtgui/include/qtgui/freq_sink_f.h index 51c4ac10a1..0ed81c62b2 100644 --- a/gr-qtgui/include/qtgui/freq_sink_f.h +++ b/gr-qtgui/include/qtgui/freq_sink_f.h @@ -75,17 +75,20 @@ namespace gr { virtual float fft_average() const = 0; virtual void set_frequency_range(const double centerfreq, const double bandwidth) = 0; - virtual void set_fft_power_db(double min, double max) = 0; + virtual void set_y_axis(double min, double max) = 0; virtual void set_update_time(double t) = 0; - virtual void set_title(int which, const std::string &title) = 0; - virtual void set_color(int which, const std::string &color) = 0; + virtual void set_title(const std::string &title) = 0; + virtual void set_line_label(int which, const std::string &label) = 0; + virtual void set_line_color(int which, const std::string &color) = 0; virtual void set_line_width(int which, int width) = 0; virtual void set_line_style(int which, Qt::PenStyle style) = 0; virtual void set_line_marker(int which, QwtSymbol::Style marker) = 0; virtual void set_size(int width, int height) = 0; + virtual void reset() = 0; + QApplication *d_qApplication; }; diff --git a/gr-qtgui/include/qtgui/time_sink_c.h b/gr-qtgui/include/qtgui/time_sink_c.h index 17176e65f9..ba31ae2fc8 100644 --- a/gr-qtgui/include/qtgui/time_sink_c.h +++ b/gr-qtgui/include/qtgui/time_sink_c.h @@ -54,12 +54,12 @@ namespace gr { * \brief Build complex time sink * * \param size number of points to plot at once - * \param bw bandwidth of signal (used to set x-axis labels) + * \param samp_rate sample rate (used to set x-axis labels) * \param name title for the plot * \param nconnections number of signals connected to sink * \param parent a QWidget parent object, if any */ - static sptr make(int size, double bw, + static sptr make(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent=NULL); @@ -67,17 +67,22 @@ namespace gr { virtual void exec_() = 0; virtual PyObject* pyqwidget() = 0; - virtual void set_time_domain_axis(double min, double max) = 0; + virtual void set_y_axis(double min, double max) = 0; virtual void set_update_time(double t) = 0; - virtual void set_title(int which, const std::string &title) = 0; - virtual void set_color(int which, const std::string &color) = 0; + virtual void set_title(const std::string &title) = 0; + virtual void set_line_label(int which, const std::string &label) = 0; + virtual void set_line_color(int which, const std::string &color) = 0; virtual void set_line_width(int which, int width) = 0; virtual void set_line_style(int which, Qt::PenStyle style) = 0; virtual void set_line_marker(int which, QwtSymbol::Style marker) = 0; virtual void set_nsamps(const int newsize) = 0; + virtual void set_samp_rate(const double samp_rate) = 0; virtual void set_size(int width, int height) = 0; + virtual int nsamps() const = 0; + virtual void reset() = 0; + QApplication *d_qApplication; }; diff --git a/gr-qtgui/include/qtgui/time_sink_f.h b/gr-qtgui/include/qtgui/time_sink_f.h index df6ba9f554..6ab10f117e 100644 --- a/gr-qtgui/include/qtgui/time_sink_f.h +++ b/gr-qtgui/include/qtgui/time_sink_f.h @@ -52,12 +52,12 @@ namespace gr { * \brief Build floating point time sink * * \param size number of points to plot at once - * \param bw bandwidth of signal (used to set x-axis labels) + * \param samp_rate sample rate (used to set x-axis labels) * \param name title for the plot * \param nconnections number of signals connected to sink * \param parent a QWidget parent object, if any */ - static sptr make(int size, double bw, + static sptr make(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent=NULL); @@ -65,17 +65,22 @@ namespace gr { virtual void exec_() = 0; virtual PyObject* pyqwidget() = 0; - virtual void set_time_domain_axis(double min, double max) = 0; + virtual void set_y_axis(double min, double max) = 0; virtual void set_update_time(double t) = 0; - virtual void set_title(int which, const std::string &title) = 0; - virtual void set_color(int which, const std::string &color) = 0; + virtual void set_title(const std::string &title) = 0; + virtual void set_line_label(int which, const std::string &line) = 0; + virtual void set_line_color(int which, const std::string &color) = 0; virtual void set_line_width(int which, int width) = 0; virtual void set_line_style(int which, Qt::PenStyle style) = 0; virtual void set_line_marker(int which, QwtSymbol::Style marker) = 0; virtual void set_nsamps(const int newsize) = 0; + virtual void set_samp_rate(const double samp_rate) = 0; virtual void set_size(int width, int height) = 0; + virtual int nsamps() const = 0; + virtual void reset() = 0; + QApplication *d_qApplication; }; diff --git a/gr-qtgui/include/qtgui/waterfall_sink_c.h b/gr-qtgui/include/qtgui/waterfall_sink_c.h index 838d50f44d..cb1589f993 100644 --- a/gr-qtgui/include/qtgui/waterfall_sink_c.h +++ b/gr-qtgui/include/qtgui/waterfall_sink_c.h @@ -84,7 +84,8 @@ namespace gr { virtual void set_update_time(double t) = 0; virtual void set_title(const std::string &title) = 0; - virtual void set_color(const std::string &color) = 0; + virtual void set_line_label(const std::string &line) = 0; + virtual void set_line_color(const std::string &color) = 0; virtual void set_line_width(int width) = 0; virtual void set_line_style(Qt::PenStyle style) = 0; virtual void set_line_marker(QwtSymbol::Style marker) = 0; diff --git a/gr-qtgui/include/qtgui/waterfall_sink_f.h b/gr-qtgui/include/qtgui/waterfall_sink_f.h index 0ee38256c3..355b5e45f2 100644 --- a/gr-qtgui/include/qtgui/waterfall_sink_f.h +++ b/gr-qtgui/include/qtgui/waterfall_sink_f.h @@ -83,7 +83,8 @@ namespace gr { virtual void set_update_time(double t) = 0; virtual void set_title(const std::string &title) = 0; - virtual void set_color(const std::string &color) = 0; + virtual void set_line_label(const std::string &line) = 0; + virtual void set_line_color(const std::string &color) = 0; virtual void set_line_width(int width) = 0; virtual void set_line_style(Qt::PenStyle style) = 0; virtual void set_line_marker(QwtSymbol::Style marker) = 0; diff --git a/gr-qtgui/lib/ConstellationDisplayPlot.cc b/gr-qtgui/lib/ConstellationDisplayPlot.cc index 5bc89f83fa..51000cab17 100644 --- a/gr-qtgui/lib/ConstellationDisplayPlot.cc +++ b/gr-qtgui/lib/ConstellationDisplayPlot.cc @@ -65,14 +65,6 @@ ConstellationDisplayPlot::ConstellationDisplayPlot(int nplots, QWidget* parent) _numPoints = 1024; _penSize = 5; - setAxisScaleEngine(QwtPlot::xBottom, new QwtLinearScaleEngine); - set_xaxis(-2.0, 2.0); - setAxisTitle(QwtPlot::xBottom, "In-phase"); - - setAxisScaleEngine(QwtPlot::yLeft, new QwtLinearScaleEngine); - set_yaxis(-2.0, 2.0); - setAxisTitle(QwtPlot::yLeft, "Quadrature"); - _zoomer = new ConstellationDisplayZoomer(canvas()); #if QWT_VERSION < 0x060000 @@ -88,6 +80,15 @@ ConstellationDisplayPlot::ConstellationDisplayPlot(int nplots, QWidget* parent) _zoomer->setRubberBandPen(c); _zoomer->setTrackerPen(c); + setAxisScaleEngine(QwtPlot::xBottom, new QwtLinearScaleEngine); + set_xaxis(-2.0, 2.0); + setAxisTitle(QwtPlot::xBottom, "In-phase"); + + setAxisScaleEngine(QwtPlot::yLeft, new QwtLinearScaleEngine); + set_yaxis(-2.0, 2.0); + setAxisTitle(QwtPlot::yLeft, "Quadrature"); + updateAxes(); + QList<QColor> colors; colors << QColor(Qt::blue) << QColor(Qt::red) << QColor(Qt::green) << QColor(Qt::black) << QColor(Qt::cyan) << QColor(Qt::magenta) @@ -135,13 +136,13 @@ ConstellationDisplayPlot::~ConstellationDisplayPlot() void ConstellationDisplayPlot::set_xaxis(double min, double max) { - setAxisScale(QwtPlot::xBottom, min, max); + setXaxis(min, max); } void ConstellationDisplayPlot::set_yaxis(double min, double max) { - setAxisScale(QwtPlot::yLeft, min, max); + setYaxis(min, max); } void diff --git a/gr-qtgui/lib/DisplayPlot.cc b/gr-qtgui/lib/DisplayPlot.cc index 2b982b77d2..0b422ee1ca 100644 --- a/gr-qtgui/lib/DisplayPlot.cc +++ b/gr-qtgui/lib/DisplayPlot.cc @@ -107,19 +107,19 @@ DisplayPlot::setXaxis(double min, double max) } void -DisplayPlot::setTitle(int which, QString title) +DisplayPlot::setLineLabel(int which, QString label) { - _plot_curve[which]->setTitle(title); + _plot_curve[which]->setTitle(label); } QString -DisplayPlot::title(int which) +DisplayPlot::lineLabel(int which) { return _plot_curve[which]->title().text(); } void -DisplayPlot::setColor(int which, QColor color) +DisplayPlot::setLineColor(int which, QString color) { if (which < _nplots) { // Set the color of the pen @@ -144,7 +144,7 @@ DisplayPlot::setColor(int which, QColor color) } QColor -DisplayPlot::getColor(int which) const { +DisplayPlot::getLineColor(int which) const { // If that plot doesn't exist then return black. if (which < _nplots) return _plot_curve[which]->pen().color(); @@ -154,7 +154,7 @@ DisplayPlot::getColor(int which) const { // Use a preprocessor macro to create a bunch of hooks for Q_PROPERTY and hence the stylesheet. #define SETUPLINE(i, im1) \ void DisplayPlot::setLineColor ## i (QColor c) {setColor(im1, c);} \ - const QColor DisplayPlot::getLineColor ## i () const {return getColor(im1);} \ + const QColor DisplayPlot::getLineColor ## i () const {return getLineColor(im1);} \ void DisplayPlot::setLineWidth ## i (int width) {setLineWidth(im1, width);} \ int DisplayPlot::getLineWidth ## i () const {return getLineWidth(im1);} \ void DisplayPlot::setLineStyle ## i (Qt::PenStyle ps) {setLineStyle(im1, ps);} \ diff --git a/gr-qtgui/lib/DisplayPlot.h b/gr-qtgui/lib/DisplayPlot.h index fa8c14e764..934794680d 100644 --- a/gr-qtgui/lib/DisplayPlot.h +++ b/gr-qtgui/lib/DisplayPlot.h @@ -178,10 +178,10 @@ public: public slots: void setYaxis(double min, double max); void setXaxis(double min, double max); - void setTitle(int which, QString title); + void setLineLabel(int which, QString label); + void setLineColor(int which, QString color); - void setColor(int which, QColor color); - QColor getColor(int which) const; + QColor getLineColor(int which) const; void setLineWidth(int which, int width); int getLineWidth(int which) const; void setLineStyle(int which, Qt::PenStyle style); @@ -251,7 +251,7 @@ public slots: void setStop(bool on); - QString title(int which); + QString lineLabel(int which); void resizeSlot(QSize *s); diff --git a/gr-qtgui/lib/FrequencyDisplayPlot.cc b/gr-qtgui/lib/FrequencyDisplayPlot.cc index a2894a5042..0fdba579c8 100644 --- a/gr-qtgui/lib/FrequencyDisplayPlot.cc +++ b/gr-qtgui/lib/FrequencyDisplayPlot.cc @@ -221,7 +221,7 @@ FrequencyDisplayPlot::~FrequencyDisplayPlot() } void -FrequencyDisplayPlot::set_yaxis(double min, double max) +FrequencyDisplayPlot::setYaxis(double min, double max) { // Get the new max/min values for the plot _minYAxis = min; diff --git a/gr-qtgui/lib/FrequencyDisplayPlot.h b/gr-qtgui/lib/FrequencyDisplayPlot.h index fa153986b8..679ebf1cc4 100644 --- a/gr-qtgui/lib/FrequencyDisplayPlot.h +++ b/gr-qtgui/lib/FrequencyDisplayPlot.h @@ -72,7 +72,7 @@ public: void replot(); - void set_yaxis(double min, double max); + void setYaxis(double min, double max); void SetTraceColour (QColor); void SetBGColour (QColor c); diff --git a/gr-qtgui/lib/const_sink_c_impl.cc b/gr-qtgui/lib/const_sink_c_impl.cc index b504f7121d..547530c823 100644 --- a/gr-qtgui/lib/const_sink_c_impl.cc +++ b/gr-qtgui/lib/const_sink_c_impl.cc @@ -44,9 +44,9 @@ namespace gr { } const_sink_c_impl::const_sink_c_impl(int size, - const std::string &name, - int nconnections, - QWidget *parent) + const std::string &name, + int nconnections, + QWidget *parent) : gr_sync_block("const_sink_c", gr_make_io_signature(nconnections, nconnections, sizeof(gr_complex)), gr_make_io_signature(0, 0, 0)), @@ -94,7 +94,7 @@ namespace gr { } d_main_gui = new ConstellationDisplayForm(d_nconnections, d_parent); - d_main_gui->SetNPoints(d_size); + d_main_gui->setNPoints(d_size); // initialize update time to 10 times a second set_update_time(0.1); d_last_time = 0; @@ -121,6 +121,18 @@ namespace gr { } void + const_sink_c_impl::set_y_axis(double min, double max) + { + d_main_gui->setYaxis(min, max); + } + + void + const_sink_c_impl::set_x_axis(double min, double max) + { + d_main_gui->setXaxis(min, max); + } + + void const_sink_c_impl::set_update_time(double t) { //convert update time to ticks @@ -130,15 +142,21 @@ namespace gr { } void - const_sink_c_impl::set_title(int which, const std::string &title) + const_sink_c_impl::set_title(const std::string &title) { - d_main_gui->setTitle(which, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - const_sink_c_impl::set_color(int which, const std::string &color) + const_sink_c_impl::set_line_label(int which, const std::string &label) { - d_main_gui->setColor(which, color.c_str()); + d_main_gui->setLineLabel(which, label.c_str()); + } + + void + const_sink_c_impl::set_line_color(int which, const std::string &color) + { + d_main_gui->setLineColor(which, color.c_str()); } void @@ -187,18 +205,30 @@ namespace gr { d_size = newsize; d_index = 0; - d_main_gui->SetNPoints(d_size); + d_main_gui->setNPoints(d_size); } } void const_sink_c_impl::npoints_resize() { - int newsize = d_main_gui->GetNPoints(); + int newsize = d_main_gui->getNPoints(); set_nsamps(newsize); } int + const_sink_c_impl::nsamps() const + { + return d_size; + } + + void + const_sink_c_impl::reset() + { + d_index = 0; + } + + int const_sink_c_impl::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) diff --git a/gr-qtgui/lib/const_sink_c_impl.h b/gr-qtgui/lib/const_sink_c_impl.h index a17a8793b4..8bb2344c9f 100644 --- a/gr-qtgui/lib/const_sink_c_impl.h +++ b/gr-qtgui/lib/const_sink_c_impl.h @@ -65,9 +65,13 @@ namespace gr { QWidget* qwidget(); PyObject* pyqwidget(); + void set_y_axis(double min, double max); + void set_x_axis(double min, double max); + void set_update_time(double t); - void set_title(int which, const std::string &title); - void set_color(int which, const std::string &color); + void set_title(const std::string &title); + void set_line_label(int which, const std::string &label); + void set_line_color(int which, const std::string &color); void set_line_width(int which, int width); void set_line_style(int which, Qt::PenStyle style); void set_line_marker(int which, QwtSymbol::Style marker); @@ -75,6 +79,9 @@ namespace gr { void set_size(int width, int height); + int nsamps() const; + void reset(); + int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-qtgui/lib/constellationdisplayform.cc b/gr-qtgui/lib/constellationdisplayform.cc index 98375ebaed..5f742de991 100644 --- a/gr-qtgui/lib/constellationdisplayform.cc +++ b/gr-qtgui/lib/constellationdisplayform.cc @@ -39,7 +39,7 @@ ConstellationDisplayForm::ConstellationDisplayForm(int nplots, QWidget* parent) NPointsMenu *nptsmenu = new NPointsMenu(this); _menu->addAction(nptsmenu); connect(nptsmenu, SIGNAL(whichTrigger(int)), - this, SLOT(SetNPoints(const int))); + this, SLOT(setNPoints(const int))); Reset(); @@ -84,13 +84,25 @@ ConstellationDisplayForm::customEvent(QEvent * e) } int -ConstellationDisplayForm::GetNPoints() const +ConstellationDisplayForm::getNPoints() const { return d_npoints; } void -ConstellationDisplayForm::SetNPoints(const int npoints) +ConstellationDisplayForm::setNPoints(const int npoints) { d_npoints = npoints; } + +void +ConstellationDisplayForm::setYaxis(double min, double max) +{ + getPlot()->set_yaxis(min, max); +} + +void +ConstellationDisplayForm::setXaxis(double min, double max) +{ + getPlot()->set_xaxis(min, max); +} diff --git a/gr-qtgui/lib/constellationdisplayform.h b/gr-qtgui/lib/constellationdisplayform.h index 6832bd44cc..d9715d3dd9 100644 --- a/gr-qtgui/lib/constellationdisplayform.h +++ b/gr-qtgui/lib/constellationdisplayform.h @@ -40,13 +40,14 @@ public: ConstellationDisplayPlot* getPlot(); - int GetNPoints() const; + int getNPoints() const; public slots: void customEvent(QEvent * e); - void SetNPoints(const int); + void setNPoints(const int); - // add set x/y axis + void setYaxis(double min, double max); + void setXaxis(double min, double max); private slots: void newData(const QEvent*); diff --git a/gr-qtgui/lib/displayform.cc b/gr-qtgui/lib/displayform.cc index 08ced9c913..e2475cb95e 100644 --- a/gr-qtgui/lib/displayform.cc +++ b/gr-qtgui/lib/displayform.cc @@ -22,6 +22,8 @@ #include <displayform.h> #include <iostream> +#include <QPixmap> +#include <QFileDialog> DisplayForm::DisplayForm(int nplots, QWidget* parent) : QWidget(parent), _nplots(nplots), _systemSpecifiedFlag(false) @@ -58,11 +60,11 @@ DisplayForm::DisplayForm(int nplots, QWidget* parent) _marker_alpha_menu.push_back(new MarkerAlphaMenu(i, this)); connect(_line_title_act[i], SIGNAL(whichTrigger(int, const QString&)), - this, SLOT(setTitle(int, const QString&))); + this, SLOT(setLineLabel(int, const QString&))); for(int j = 0; j < _line_color_menu[i]->getNumActions(); j++) { connect(_line_color_menu[i], SIGNAL(whichTrigger(int, const QString&)), - this, SLOT(setColor(int, const QString&))); + this, SLOT(setLineColor(int, const QString&))); } for(int j = 0; j < _line_width_menu[i]->getNumActions(); j++) { @@ -95,6 +97,12 @@ DisplayForm::DisplayForm(int nplots, QWidget* parent) _menu->addMenu(_lines_menu[i]); } + + _save_act = new QAction("Save", this); + _save_act->setStatusTip(tr("Save Figure")); + connect(_save_act, SIGNAL(triggered()), this, SLOT(saveFigure())); + _menu->addAction(_save_act); + Reset(); // Create a timer to update plots at the specified rate @@ -145,7 +153,7 @@ DisplayForm::mousePressEvent( QMouseEvent * e) // Update the line titles if changed externally for(int i = 0; i < _nplots; i++) { - _lines_menu[i]->setTitle(_displayPlot->title(i)); + _lines_menu[i]->setTitle(_displayPlot->lineLabel(i)); } _menu->exec(e->globalPos()); } @@ -185,16 +193,22 @@ DisplayForm::setUpdateTime(double t) } void -DisplayForm::setTitle(int which, const QString &title) +DisplayForm::setTitle(const QString &title) +{ + _displayPlot->setTitle(title); +} + +void +DisplayForm::setLineLabel(int which, const QString &label) { - _displayPlot->setTitle(which, title); + _displayPlot->setLineLabel(which, label); } void -DisplayForm::setColor(int which, const QString &color) +DisplayForm::setLineColor(int which, const QString &color) { QColor c = QColor(color); - _displayPlot->setColor(which, c); + _displayPlot->setLineColor(which, c); _displayPlot->replot(); } @@ -273,3 +287,40 @@ DisplayForm::setGrid() else setGrid(false); } + +void +DisplayForm::saveFigure() +{ + QPixmap qpix = QPixmap::grabWidget(this); + + QString types = QString(tr("JPEG file (*.jpg);;Portable Network Graphics file (*.png);;Bitmap file (*.bmp);;TIFF file (*.tiff)")); + + QString filename, filetype; + QFileDialog *filebox = new QFileDialog(0, "Save Image", "./", types); + filebox->setViewMode(QFileDialog::Detail); + if(filebox->exec()) { + filename = filebox->selectedFiles()[0]; + filetype = filebox->selectedNameFilter(); + } + else { + return; + } + + if(filetype.contains(".jpg")) { + qpix.save(filename, "JPEG"); + } + else if(filetype.contains(".png")) { + qpix.save(filename, "PNG"); + } + else if(filetype.contains(".bmp")) { + qpix.save(filename, "BMP"); + } + else if(filetype.contains(".tiff")) { + qpix.save(filename, "TIFF"); + } + else { + qpix.save(filename, "JPEG"); + } + + delete filebox; +} diff --git a/gr-qtgui/lib/displayform.h b/gr-qtgui/lib/displayform.h index c14b734d44..99b0e714f4 100644 --- a/gr-qtgui/lib/displayform.h +++ b/gr-qtgui/lib/displayform.h @@ -53,8 +53,9 @@ public slots: void setUpdateTime(double t); - void setTitle(int which, const QString &title); - void setColor(int which, const QString &color); + void setTitle(const QString &title); + void setLineLabel(int which, const QString &label); + void setLineColor(int which, const QString &color); void setLineWidth(int which, int width); void setLineStyle(int which, Qt::PenStyle style); void setLineMarker(int which, QwtSymbol::Style style); @@ -66,6 +67,8 @@ public slots: void setGrid(bool on); void setGrid(); + void saveFigure(); + private slots: virtual void newData(const QEvent*) = 0; void updateGuiTimer(); @@ -99,6 +102,8 @@ protected: QList<LineMarkerMenu*> _line_marker_menu; QList<MarkerAlphaMenu*> _marker_alpha_menu; + QAction *_save_act; + QTimer *d_displayTimer; double d_update_time; }; diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc index cf5c989c09..e495dfcc25 100644 --- a/gr-qtgui/lib/freq_sink_c_impl.cc +++ b/gr-qtgui/lib/freq_sink_c_impl.cc @@ -115,9 +115,9 @@ namespace gr { } d_main_gui = new FreqDisplayForm(d_nconnections, d_parent); - d_main_gui->SetFFTSize(d_fftsize); - d_main_gui->SetFFTWindowType(d_wintype); - d_main_gui->SetFrequencyRange(d_center_freq, + d_main_gui->setFFTSize(d_fftsize); + d_main_gui->setFFTWindowType(d_wintype); + d_main_gui->setFrequencyRange(d_center_freq, d_center_freq - d_bandwidth/2.0, d_center_freq + d_bandwidth/2.0); @@ -150,7 +150,7 @@ namespace gr { freq_sink_c_impl::set_fft_size(const int fftsize) { d_fftsize = fftsize; - d_main_gui->SetFFTSize(fftsize); + d_main_gui->setFFTSize(fftsize); } int @@ -163,7 +163,7 @@ namespace gr { freq_sink_c_impl::set_fft_average(const float fftavg) { d_fftavg = fftavg; - d_main_gui->SetFFTAverage(fftavg); + d_main_gui->setFFTAverage(fftavg); } float @@ -178,15 +178,15 @@ namespace gr { { d_center_freq = centerfreq; d_bandwidth = bandwidth; - d_main_gui->SetFrequencyRange(d_center_freq, + d_main_gui->setFrequencyRange(d_center_freq, -d_bandwidth/2.0, d_bandwidth/2.0); } void - freq_sink_c_impl::set_fft_power_db(double min, double max) + freq_sink_c_impl::set_y_axis(double min, double max) { - d_main_gui->SetFrequencyAxis(min, max); + d_main_gui->setYaxis(min, max); } void @@ -199,15 +199,21 @@ namespace gr { } void - freq_sink_c_impl::set_title(int which, const std::string &title) + freq_sink_c_impl::set_title(const std::string &title) { - d_main_gui->setTitle(which, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - freq_sink_c_impl::set_color(int which, const std::string &color) + freq_sink_c_impl::set_line_label(int which, const std::string &label) { - d_main_gui->setColor(which, color.c_str()); + d_main_gui->setLineLabel(which, label.c_str()); + } + + void + freq_sink_c_impl::set_line_color(int which, const std::string &color) + { + d_main_gui->setLineColor(which, color.c_str()); } void @@ -235,6 +241,12 @@ namespace gr { } void + freq_sink_c_impl::reset() + { + d_index = 0; + } + + void freq_sink_c_impl::fft(float *data_out, const gr_complex *data_in, int size) { if(d_window.size()) { @@ -263,7 +275,7 @@ namespace gr { freq_sink_c_impl::windowreset() { filter::firdes::win_type newwintype; - newwintype = d_main_gui->GetFFTWindowType(); + newwintype = d_main_gui->getFFTWindowType(); if(d_wintype != newwintype) { d_wintype = newwintype; buildwindow(); @@ -284,8 +296,8 @@ namespace gr { { gruel::scoped_lock lock(d_mutex); - int newfftsize = d_main_gui->GetFFTSize(); - d_fftavg = d_main_gui->GetFFTAverage(); + int newfftsize = d_main_gui->getFFTSize(); + d_fftavg = d_main_gui->getFFTAverage(); if(newfftsize != d_fftsize) { // Resize residbuf and replace data diff --git a/gr-qtgui/lib/freq_sink_c_impl.h b/gr-qtgui/lib/freq_sink_c_impl.h index 106e50497d..d162ab03bd 100644 --- a/gr-qtgui/lib/freq_sink_c_impl.h +++ b/gr-qtgui/lib/freq_sink_c_impl.h @@ -88,17 +88,20 @@ namespace gr { float fft_average() const; void set_frequency_range(const double centerfreq, const double bandwidth); - void set_fft_power_db(double min, double max); + void set_y_axis(double min, double max); void set_update_time(double t); - void set_title(int which, const std::string &title); - void set_color(int which, const std::string &color); + void set_title(const std::string &title); + void set_line_label(int which, const std::string &label); + void set_line_color(int which, const std::string &color); void set_line_width(int which, int width); void set_line_style(int which, Qt::PenStyle style); void set_line_marker(int which, QwtSymbol::Style marker); void set_size(int width, int height); + void reset(); + int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc index 2cf43e9994..c9ec1f52aa 100644 --- a/gr-qtgui/lib/freq_sink_f_impl.cc +++ b/gr-qtgui/lib/freq_sink_f_impl.cc @@ -115,9 +115,9 @@ namespace gr { } d_main_gui = new FreqDisplayForm(d_nconnections, d_parent); - d_main_gui->SetFFTSize(d_fftsize); - d_main_gui->SetFFTWindowType(d_wintype); - d_main_gui->SetFrequencyRange(d_center_freq, + d_main_gui->setFFTSize(d_fftsize); + d_main_gui->setFFTWindowType(d_wintype); + d_main_gui->setFrequencyRange(d_center_freq, d_center_freq - d_bandwidth/2.0, d_center_freq + d_bandwidth/2.0); @@ -150,7 +150,7 @@ namespace gr { freq_sink_f_impl::set_fft_size(const int fftsize) { d_fftsize = fftsize; - d_main_gui->SetFFTSize(fftsize); + d_main_gui->setFFTSize(fftsize); } int @@ -163,7 +163,7 @@ namespace gr { freq_sink_f_impl::set_fft_average(const float fftavg) { d_fftavg = fftavg; - d_main_gui->SetFFTAverage(fftavg); + d_main_gui->setFFTAverage(fftavg); } float @@ -178,15 +178,15 @@ namespace gr { { d_center_freq = centerfreq; d_bandwidth = bandwidth; - d_main_gui->SetFrequencyRange(d_center_freq, + d_main_gui->setFrequencyRange(d_center_freq, -d_bandwidth/2.0, d_bandwidth/2.0); } void - freq_sink_f_impl::set_fft_power_db(double min, double max) + freq_sink_f_impl::set_y_axis(double min, double max) { - d_main_gui->SetFrequencyAxis(min, max); + d_main_gui->setYaxis(min, max); } void @@ -199,15 +199,21 @@ namespace gr { } void - freq_sink_f_impl::set_title(int which, const std::string &title) + freq_sink_f_impl::set_title(const std::string &title) { - d_main_gui->setTitle(which, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - freq_sink_f_impl::set_color(int which, const std::string &color) + freq_sink_f_impl::set_line_label(int which, const std::string &label) { - d_main_gui->setColor(which, color.c_str()); + d_main_gui->setLineLabel(which, label.c_str()); + } + + void + freq_sink_f_impl::set_line_color(int which, const std::string &color) + { + d_main_gui->setLineColor(which, color.c_str()); } void @@ -236,6 +242,12 @@ namespace gr { } void + freq_sink_f_impl::reset() + { + d_index = 0; + } + + void freq_sink_f_impl::fft(float *data_out, const float *data_in, int size) { // float to complex conversion @@ -267,7 +279,7 @@ namespace gr { gruel::scoped_lock lock(d_mutex); filter::firdes::win_type newwintype; - newwintype = d_main_gui->GetFFTWindowType(); + newwintype = d_main_gui->getFFTWindowType(); if(d_wintype != newwintype) { d_wintype = newwintype; buildwindow(); @@ -288,8 +300,8 @@ namespace gr { { gruel::scoped_lock lock(d_mutex); - int newfftsize = d_main_gui->GetFFTSize(); - d_fftavg = d_main_gui->GetFFTAverage(); + int newfftsize = d_main_gui->getFFTSize(); + d_fftavg = d_main_gui->getFFTAverage(); if(newfftsize != d_fftsize) { // Resize residbuf and replace data diff --git a/gr-qtgui/lib/freq_sink_f_impl.h b/gr-qtgui/lib/freq_sink_f_impl.h index a358953629..ffb2c4bf59 100644 --- a/gr-qtgui/lib/freq_sink_f_impl.h +++ b/gr-qtgui/lib/freq_sink_f_impl.h @@ -88,17 +88,20 @@ namespace gr { float fft_average() const; void set_frequency_range(const double centerfreq, const double bandwidth); - void set_fft_power_db(double min, double max); + void set_y_axis(double min, double max); void set_update_time(double t); - void set_title(int which, const std::string &title); - void set_color(int which, const std::string &color); + void set_title(const std::string &title); + void set_line_label(int which, const std::string &label); + void set_line_color(int which, const std::string &color); void set_line_width(int which, int width); void set_line_style(int which, Qt::PenStyle style); void set_line_marker(int which, QwtSymbol::Style marker); void set_size(int width, int height); + void reset(); + int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-qtgui/lib/freqdisplayform.cc b/gr-qtgui/lib/freqdisplayform.cc index 6f12fe5090..410bb4a048 100644 --- a/gr-qtgui/lib/freqdisplayform.cc +++ b/gr-qtgui/lib/freqdisplayform.cc @@ -47,11 +47,11 @@ FreqDisplayForm::FreqDisplayForm(int nplots, QWidget* parent) _menu->addMenu(avgmenu); _menu->addMenu(winmenu); connect(sizemenu, SIGNAL(whichTrigger(int)), - this, SLOT(SetFFTSize(const int))); + this, SLOT(setFFTSize(const int))); connect(avgmenu, SIGNAL(whichTrigger(float)), - this, SLOT(SetFFTAverage(const float))); + this, SLOT(setFFTAverage(const float))); connect(winmenu, SIGNAL(whichTrigger(gr::filter::firdes::win_type)), - this, SLOT(SetFFTWindowType(const gr::filter::firdes::win_type))); + this, SLOT(setFFTWindowType(const gr::filter::firdes::win_type))); Reset(); @@ -93,44 +93,44 @@ FreqDisplayForm::customEvent( QEvent * e) } int -FreqDisplayForm::GetFFTSize() const +FreqDisplayForm::getFFTSize() const { return _fftsize; } float -FreqDisplayForm::GetFFTAverage() const +FreqDisplayForm::getFFTAverage() const { return _fftavg; } gr::filter::firdes::win_type -FreqDisplayForm::GetFFTWindowType() const +FreqDisplayForm::getFFTWindowType() const { return _fftwintype; } void -FreqDisplayForm::SetFFTSize(const int newsize) +FreqDisplayForm::setFFTSize(const int newsize) { _fftsize = newsize; } void -FreqDisplayForm::SetFFTAverage(const float newavg) +FreqDisplayForm::setFFTAverage(const float newavg) { _fftavg = newavg; getPlot()->replot(); } void -FreqDisplayForm::SetFFTWindowType(const gr::filter::firdes::win_type newwin) +FreqDisplayForm::setFFTWindowType(const gr::filter::firdes::win_type newwin) { _fftwintype = newwin; } void -FreqDisplayForm::SetFrequencyRange(const double newCenterFrequency, +FreqDisplayForm::setFrequencyRange(const double newCenterFrequency, const double newStartFrequency, const double newStopFrequency) { @@ -156,7 +156,7 @@ FreqDisplayForm::SetFrequencyRange(const double newCenterFrequency, } void -FreqDisplayForm::SetFrequencyAxis(double min, double max) +FreqDisplayForm::setYaxis(double min, double max) { - getPlot()->set_yaxis(min, max); + getPlot()->setYaxis(min, max); } diff --git a/gr-qtgui/lib/freqdisplayform.h b/gr-qtgui/lib/freqdisplayform.h index ffce317c4f..4a7fc7d2e5 100644 --- a/gr-qtgui/lib/freqdisplayform.h +++ b/gr-qtgui/lib/freqdisplayform.h @@ -41,21 +41,21 @@ class FreqDisplayForm : public DisplayForm FrequencyDisplayPlot* getPlot(); - int GetFFTSize() const; - float GetFFTAverage() const; - gr::filter::firdes::win_type GetFFTWindowType() const; + int getFFTSize() const; + float getFFTAverage() const; + gr::filter::firdes::win_type getFFTWindowType() const; public slots: void customEvent(QEvent *e); - void SetFFTSize(const int); - void SetFFTAverage(const float); - void SetFFTWindowType(const gr::filter::firdes::win_type); + void setFFTSize(const int); + void setFFTAverage(const float); + void setFFTWindowType(const gr::filter::firdes::win_type); - void SetFrequencyRange(const double newCenterFrequency, + void setFrequencyRange(const double newCenterFrequency, const double newStartFrequency, const double newStopFrequency); - void SetFrequencyAxis(double min, double max); + void setYaxis(double min, double max); private slots: void newData(const QEvent *updateEvent); diff --git a/gr-qtgui/lib/spectrumdisplayform.cc b/gr-qtgui/lib/spectrumdisplayform.cc index 6de6caa1b1..93853cead1 100644 --- a/gr-qtgui/lib/spectrumdisplayform.cc +++ b/gr-qtgui/lib/spectrumdisplayform.cc @@ -43,8 +43,8 @@ SpectrumDisplayForm::SpectrumDisplayForm(QWidget* parent) _averagedValues = new double[_numRealDataPoints]; _historyVector = new std::vector<double*>; - _timeDomainDisplayPlot->setTitle(0, "real"); - _timeDomainDisplayPlot->setTitle(1, "imag"); + _timeDomainDisplayPlot->setLineLabel(0, "real"); + _timeDomainDisplayPlot->setLineLabel(1, "imag"); AvgLineEdit->setRange(0, 500); // Set range of Average box value from 0 to 500 MinHoldCheckBox_toggled( false ); @@ -729,7 +729,7 @@ SpectrumDisplayForm::SetConstellationPenSize(int size) void SpectrumDisplayForm::SetFrequencyAxis(double min, double max) { - _frequencyDisplayPlot->set_yaxis(min, max); + _frequencyDisplayPlot->setYaxis(min, max); } void diff --git a/gr-qtgui/lib/time_sink_c_impl.cc b/gr-qtgui/lib/time_sink_c_impl.cc index 83ab76eb6e..c8efb63721 100644 --- a/gr-qtgui/lib/time_sink_c_impl.cc +++ b/gr-qtgui/lib/time_sink_c_impl.cc @@ -34,23 +34,23 @@ namespace gr { namespace qtgui { time_sink_c::sptr - time_sink_c::make(int size, double bw, + time_sink_c::make(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent) { return gnuradio::get_initial_sptr - (new time_sink_c_impl(size, bw, name, nconnections, parent)); + (new time_sink_c_impl(size, samp_rate, name, nconnections, parent)); } - time_sink_c_impl::time_sink_c_impl(int size, double bw, + time_sink_c_impl::time_sink_c_impl(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent) : gr_sync_block("time_sink_c", gr_make_io_signature(nconnections, nconnections, sizeof(gr_complex)), gr_make_io_signature(0, 0, 0)), - d_size(size), d_bandwidth(bw), d_name(name), + d_size(size), d_samp_rate(samp_rate), d_name(name), d_nconnections(2*nconnections), d_parent(parent) { d_main_gui = NULL; @@ -91,7 +91,8 @@ namespace gr { } d_main_gui = new TimeDisplayForm(d_nconnections, d_parent); - d_main_gui->SetNPoints(d_size); + d_main_gui->setNPoints(d_size); + d_main_gui->setSampleRate(d_samp_rate); // initialize update time to 10 times a second set_update_time(0.1); @@ -119,9 +120,9 @@ namespace gr { } void - time_sink_c_impl::set_time_domain_axis(double min, double max) + time_sink_c_impl::set_y_axis(double min, double max) { - d_main_gui->setTimeDomainAxis(min, max); + d_main_gui->setYaxis(min, max); } void @@ -134,15 +135,21 @@ namespace gr { } void - time_sink_c_impl::set_title(int which, const std::string &title) + time_sink_c_impl::set_title(const std::string &title) { - d_main_gui->setTitle(which, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - time_sink_c_impl::set_color(int which, const std::string &color) + time_sink_c_impl::set_line_label(int which, const std::string &label) { - d_main_gui->setColor(which, color.c_str()); + d_main_gui->setLineLabel(which, label.c_str()); + } + + void + time_sink_c_impl::set_line_color(int which, const std::string &color) + { + d_main_gui->setLineColor(which, color.c_str()); } void @@ -188,18 +195,38 @@ namespace gr { d_size = newsize; d_index = 0; - d_main_gui->SetNPoints(d_size); + d_main_gui->setNPoints(d_size); } } void + time_sink_c_impl::set_samp_rate(const double samp_rate) + { + gruel::scoped_lock lock(d_mutex); + d_samp_rate = samp_rate; + d_main_gui->setSampleRate(d_samp_rate); + } + + void time_sink_c_impl::npoints_resize() { - int newsize = d_main_gui->GetNPoints(); + int newsize = d_main_gui->getNPoints(); set_nsamps(newsize); } int + time_sink_c_impl::nsamps() const + { + return d_size; + } + + void + time_sink_c_impl::reset() + { + d_index = 0; + } + + int time_sink_c_impl::work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items) diff --git a/gr-qtgui/lib/time_sink_c_impl.h b/gr-qtgui/lib/time_sink_c_impl.h index 0cace14890..66980dd79e 100644 --- a/gr-qtgui/lib/time_sink_c_impl.h +++ b/gr-qtgui/lib/time_sink_c_impl.h @@ -39,7 +39,7 @@ namespace gr { gruel::mutex d_mutex; int d_size; - double d_bandwidth; + double d_samp_rate; std::string d_name; int d_nconnections; @@ -55,7 +55,7 @@ namespace gr { void npoints_resize(); public: - time_sink_c_impl(int size, double bw, + time_sink_c_impl(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent=NULL); @@ -65,17 +65,23 @@ namespace gr { QWidget* qwidget(); PyObject* pyqwidget(); - void set_time_domain_axis(double min, double max); + void set_y_axis(double min, double max); void set_update_time(double t); - void set_title(int which, const std::string &title); - void set_color(int which, const std::string &color); + void set_title(const std::string &title); + void set_line_label(int which, const std::string &label); + void set_line_color(int which, const std::string &color); void set_line_width(int which, int width); void set_line_style(int which, Qt::PenStyle style); void set_line_marker(int which, QwtSymbol::Style marker); void set_nsamps(const int size); + void set_samp_rate(const double samp_rate); void set_size(int width, int height); + int nsamps() const; + + void reset(); + int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-qtgui/lib/time_sink_f_impl.cc b/gr-qtgui/lib/time_sink_f_impl.cc index 4b965b648c..562da3ef86 100644 --- a/gr-qtgui/lib/time_sink_f_impl.cc +++ b/gr-qtgui/lib/time_sink_f_impl.cc @@ -34,23 +34,23 @@ namespace gr { namespace qtgui { time_sink_f::sptr - time_sink_f::make(int size, double bw, + time_sink_f::make(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent) { return gnuradio::get_initial_sptr - (new time_sink_f_impl(size, bw, name, nconnections, parent)); + (new time_sink_f_impl(size, samp_rate, name, nconnections, parent)); } - time_sink_f_impl::time_sink_f_impl(int size, double bw, + time_sink_f_impl::time_sink_f_impl(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent) : gr_sync_block("time_sink_f", gr_make_io_signature(nconnections, nconnections, sizeof(float)), gr_make_io_signature(0, 0, 0)), - d_size(size), d_bandwidth(bw), d_name(name), + d_size(size), d_samp_rate(samp_rate), d_name(name), d_nconnections(nconnections), d_parent(parent) { d_main_gui = NULL; @@ -91,7 +91,8 @@ namespace gr { } d_main_gui = new TimeDisplayForm(d_nconnections, d_parent); - d_main_gui->SetNPoints(d_size); + d_main_gui->setNPoints(d_size); + d_main_gui->setSampleRate(d_samp_rate); // initialize update time to 10 times a second set_update_time(0.1); @@ -119,9 +120,9 @@ namespace gr { } void - time_sink_f_impl::set_time_domain_axis(double min, double max) + time_sink_f_impl::set_y_axis(double min, double max) { - d_main_gui->setTimeDomainAxis(min, max); + d_main_gui->setYaxis(min, max); } void @@ -134,15 +135,21 @@ namespace gr { } void - time_sink_f_impl::set_title(int which, const std::string &title) + time_sink_f_impl::set_title(const std::string &title) { - d_main_gui->setTitle(which, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - time_sink_f_impl::set_color(int which, const std::string &color) + time_sink_f_impl::set_line_label(int which, const std::string &label) { - d_main_gui->setColor(which, color.c_str()); + d_main_gui->setLineLabel(which, label.c_str()); + } + + void + time_sink_f_impl::set_line_color(int which, const std::string &color) + { + d_main_gui->setLineColor(which, color.c_str()); } void @@ -188,17 +195,37 @@ namespace gr { d_size = newsize; d_index = 0; - d_main_gui->SetNPoints(d_size); + d_main_gui->setNPoints(d_size); } } void + time_sink_f_impl::set_samp_rate(const double samp_rate) + { + gruel::scoped_lock lock(d_mutex); + d_samp_rate = samp_rate; + d_main_gui->setSampleRate(d_samp_rate); + } + + int + time_sink_f_impl::nsamps() const + { + return d_size; + } + + void time_sink_f_impl::npoints_resize() { - int newsize = d_main_gui->GetNPoints(); + int newsize = d_main_gui->getNPoints(); set_nsamps(newsize); } + void + time_sink_f_impl::reset() + { + d_index = 0; + } + int time_sink_f_impl::work(int noutput_items, gr_vector_const_void_star &input_items, diff --git a/gr-qtgui/lib/time_sink_f_impl.h b/gr-qtgui/lib/time_sink_f_impl.h index 69c07fbdab..dd1dd6f699 100644 --- a/gr-qtgui/lib/time_sink_f_impl.h +++ b/gr-qtgui/lib/time_sink_f_impl.h @@ -39,7 +39,7 @@ namespace gr { gruel::mutex d_mutex; int d_size; - double d_bandwidth; + double d_samp_rate; std::string d_name; int d_nconnections; @@ -55,7 +55,7 @@ namespace gr { void npoints_resize(); public: - time_sink_f_impl(int size, double bw, + time_sink_f_impl(int size, double samp_rate, const std::string &name, int nconnections, QWidget *parent=NULL); @@ -65,17 +65,23 @@ namespace gr { QWidget* qwidget(); PyObject* pyqwidget(); - void set_time_domain_axis(double min, double max); + void set_y_axis(double min, double max); void set_update_time(double t); - void set_title(int which, const std::string &title); - void set_color(int which, const std::string &color); + void set_title(const std::string &title); + void set_line_label(int which, const std::string &label); + void set_line_color(int which, const std::string &color); void set_line_width(int which, int width); void set_line_style(int which, Qt::PenStyle style); void set_line_marker(int which, QwtSymbol::Style marker); void set_nsamps(const int newsize); + void set_samp_rate(const double samp_rate); void set_size(int width, int height); + int nsamps() const; + + void reset(); + int work(int noutput_items, gr_vector_const_void_star &input_items, gr_vector_void_star &output_items); diff --git a/gr-qtgui/lib/timedisplayform.cc b/gr-qtgui/lib/timedisplayform.cc index 3d94d20094..e3c7f8a60b 100644 --- a/gr-qtgui/lib/timedisplayform.cc +++ b/gr-qtgui/lib/timedisplayform.cc @@ -39,7 +39,7 @@ TimeDisplayForm::TimeDisplayForm(int nplots, QWidget* parent) NPointsMenu *nptsmenu = new NPointsMenu(this); _menu->addAction(nptsmenu); connect(nptsmenu, SIGNAL(whichTrigger(int)), - this, SLOT(SetNPoints(const int))); + this, SLOT(setNPoints(const int))); Reset(); @@ -82,41 +82,36 @@ TimeDisplayForm::customEvent(QEvent * e) } void -TimeDisplayForm::setFrequencyRange(const double newCenterFrequency, - const double newStartFrequency, - const double newStopFrequency) +TimeDisplayForm::setSampleRate(const double samprate) { - double fdiff = std::max(fabs(newStartFrequency), fabs(newStopFrequency)); - - if(fdiff > 0) { + if(samprate > 0) { std::string strtime[4] = {"sec", "ms", "us", "ns"}; - double units10 = floor(log10(fdiff)); + double units10 = floor(log10(samprate)); double units3 = std::max(floor(units10 / 3.0), 0.0); double units = pow(10, (units10-fmod(units10, 3.0))); int iunit = static_cast<int>(units3); - _startFrequency = newStartFrequency; - _stopFrequency = newStopFrequency; - - getPlot()->SetSampleRate(_stopFrequency - _startFrequency, - units, strtime[iunit]); + getPlot()->SetSampleRate(samprate, units, strtime[iunit]); + } + else { + throw std::runtime_error("TimeDisplayForm: samprate must be > 0.\n"); } } void -TimeDisplayForm::setTimeDomainAxis(double min, double max) +TimeDisplayForm::setYaxis(double min, double max) { getPlot()->setYaxis(min, max); } int -TimeDisplayForm::GetNPoints() const +TimeDisplayForm::getNPoints() const { return d_npoints; } void -TimeDisplayForm::SetNPoints(const int npoints) +TimeDisplayForm::setNPoints(const int npoints) { d_npoints = npoints; } diff --git a/gr-qtgui/lib/timedisplayform.h b/gr-qtgui/lib/timedisplayform.h index 806fc4053f..df8803c145 100644 --- a/gr-qtgui/lib/timedisplayform.h +++ b/gr-qtgui/lib/timedisplayform.h @@ -40,16 +40,14 @@ class TimeDisplayForm : public DisplayForm TimeDomainDisplayPlot* getPlot(); - int GetNPoints() const; + int getNPoints() const; public slots: void customEvent(QEvent * e); - void setFrequencyRange(const double newCenterFrequency, - const double newStartFrequency, - const double newStopFrequency); - void setTimeDomainAxis(double min, double max); - void SetNPoints(const int); + void setSampleRate(const double samprate); + void setYaxis(double min, double max); + void setNPoints(const int); private slots: void newData(const QEvent*); diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.cc b/gr-qtgui/lib/waterfall_sink_c_impl.cc index 0611d37974..7659394e77 100644 --- a/gr-qtgui/lib/waterfall_sink_c_impl.cc +++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc @@ -191,13 +191,19 @@ namespace gr { void waterfall_sink_c_impl::set_title(const std::string &title) { - d_main_gui->setTitle(0, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - waterfall_sink_c_impl::set_color(const std::string &color) + waterfall_sink_c_impl::set_line_label(const std::string &label) { - d_main_gui->setColor(0, color.c_str()); + d_main_gui->setLineLabel(0, label.c_str()); + } + + void + waterfall_sink_c_impl::set_line_color(const std::string &color) + { + d_main_gui->setLineColor(0, color.c_str()); } void diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.h b/gr-qtgui/lib/waterfall_sink_c_impl.h index b51b1e66eb..ea9ae9736b 100644 --- a/gr-qtgui/lib/waterfall_sink_c_impl.h +++ b/gr-qtgui/lib/waterfall_sink_c_impl.h @@ -88,7 +88,8 @@ namespace gr { void set_update_time(double t); void set_title(const std::string &title); - void set_color(const std::string &color); + void set_line_label(const std::string &label); + void set_line_color(const std::string &color); void set_line_width(int width); void set_line_style(Qt::PenStyle style); void set_line_marker(QwtSymbol::Style marker); diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.cc b/gr-qtgui/lib/waterfall_sink_f_impl.cc index 3fdb2b795a..0e8a4dd3da 100644 --- a/gr-qtgui/lib/waterfall_sink_f_impl.cc +++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc @@ -191,13 +191,19 @@ namespace gr { void waterfall_sink_f_impl::set_title(const std::string &title) { - d_main_gui->setTitle(0, title.c_str()); + d_main_gui->setTitle(title.c_str()); } void - waterfall_sink_f_impl::set_color(const std::string &color) + waterfall_sink_f_impl::set_line_label(const std::string &label) { - d_main_gui->setColor(0, color.c_str()); + d_main_gui->setLineLabel(0, label.c_str()); + } + + void + waterfall_sink_f_impl::set_line_color(const std::string &color) + { + d_main_gui->setLineColor(0, color.c_str()); } void diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.h b/gr-qtgui/lib/waterfall_sink_f_impl.h index 684e1dfb03..f0c4badb60 100644 --- a/gr-qtgui/lib/waterfall_sink_f_impl.h +++ b/gr-qtgui/lib/waterfall_sink_f_impl.h @@ -89,7 +89,8 @@ namespace gr { void set_update_time(double t); void set_title(const std::string &title); - void set_color(const std::string &color); + void set_line_label(const std::string &label); + void set_line_color(const std::string &color); void set_line_width(int width); void set_line_style(Qt::PenStyle style); void set_line_marker(QwtSymbol::Style marker); diff --git a/gr-qtgui/python/CMakeLists.txt b/gr-qtgui/python/CMakeLists.txt index e3fd602ef2..e57338073c 100644 --- a/gr-qtgui/python/CMakeLists.txt +++ b/gr-qtgui/python/CMakeLists.txt @@ -41,6 +41,6 @@ foreach(py_qa_test_file ${py_qa_test_files}) ${CMAKE_BINARY_DIR}/gr-qtgui/swig ) set(GR_TEST_TARGET_DEPS volk gruel gnuradio-core gnuradio-qtgui) - GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${py_qa_test_file}) + GR_ADD_TEST(${py_qa_test_name} ${PYTHON_EXECUTABLE} ${PYTHON_DASH_B} ${py_qa_test_file}) endforeach(py_qa_test_file) endif(ENABLE_TESTING) |