1 /* -*- c++ -*- */
2 /*
3  * Copyright 2014 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * GNU Radio is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 3, or (at your option)
10  * any later version.
11  *
12  * GNU Radio is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with GNU Radio; see the file COPYING.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street,
20  * Boston, MA 02110-1301, USA.
21  */
22 
23 #ifndef INCLUDED_QTGUI_NUMBER_SINK_H
24 #define INCLUDED_QTGUI_NUMBER_SINK_H
25 
26 #ifdef ENABLE_PYTHON
27 #include <Python.h>
28 #endif
29 
30 #include <gnuradio/qtgui/api.h>
31 #include <gnuradio/qtgui/qtgui_types.h>
32 #include <gnuradio/qtgui/trigger_mode.h>
33 #include <gnuradio/sync_block.h>
34 #include <qapplication.h>
35 
36 namespace gr {
37 namespace qtgui {
38 
39 /*!
40  * \brief A graphical sink to display numerical values of input streams.
41  * \ingroup instrumentation_blk
42  * \ingroup qtgui_blk
43  *
44  * \details
45  *
46  * Displays the data stream in as a number in a simple text box
47  * GUI along with an optional bar graph. The bar graph can be set
48  * to horizontal (NUM_GRAPH_HORIZ), vertical (NUM_GRAPH_VERT), or
49  * no graph (NUM_GRAPH_NONE).
50  *
51  * The displayed value can be the average of the input stream, in
52  * which case all items received are averaged. If not averaging,
53  * the display simply samples a value in the data stream based on
54  * the update time of this block.
55  *
56  * Note that due to a flaw in the implementation, this block
57  * cannot receive integer value inputs. It will take chars,
58  * shorts, and floats and properly convert them by setting
59  * itemsize of the constructor to one of these three values
60  * (sizeof_char, sizeof_short, and sizeof_float, respectively). If
61  * using integers, the block treats these as floats. Instead, put
62  * the integer input stream through an gr::blocks::int_to_float
63  * converter block.
64  */
65 class QTGUI_API number_sink : virtual public sync_block
66 {
67 public:
68     // gr::qtgui::number_sink::sptr
69     typedef boost::shared_ptr<number_sink> sptr;
70 
71     /*!
72      * \brief Build a number sink
73      *
74      * \param itemsize Size of input item stream
75      * \param average Averaging coefficient (0 - 1)
76      * \param graph_type Type of graph to use (number_sink::graph_t)
77      * \param nconnections number of signals connected to sink
78      * \param parent a QWidget parent object, if any
79      */
80     static sptr make(size_t itemsize,
81                      float average = 0,
82                      graph_t graph_type = NUM_GRAPH_HORIZ,
83                      int nconnections = 1,
84                      QWidget* parent = NULL);
85 
86     virtual void exec_() = 0;
87     virtual QWidget* qwidget() = 0;
88 
89 #ifdef ENABLE_PYTHON
90     virtual PyObject* pyqwidget() = 0;
91 #else
92     virtual void* pyqwidget() = 0;
93 #endif
94 
95     virtual void set_update_time(double t) = 0;
96     virtual void set_average(const float avg) = 0;
97     virtual void set_graph_type(const graph_t type) = 0;
98     virtual void
99     set_color(unsigned int which, const std::string& min, const std::string& max) = 0;
100     virtual void set_color(unsigned int which, int min, int max) = 0;
101     virtual void set_label(unsigned int which, const std::string& label) = 0;
102     virtual void set_min(unsigned int which, float min) = 0;
103     virtual void set_max(unsigned int which, float max) = 0;
104     virtual void set_title(const std::string& title) = 0;
105     virtual void set_unit(unsigned int which, const std::string& unit) = 0;
106     virtual void set_factor(unsigned int which, float factor) = 0;
107 
108     virtual float average() const = 0;
109     virtual graph_t graph_type() const = 0;
110     virtual std::string color_min(unsigned int which) const = 0;
111     virtual std::string color_max(unsigned int which) const = 0;
112     virtual std::string label(unsigned int which) const = 0;
113     virtual float min(unsigned int which) const = 0;
114     virtual float max(unsigned int which) const = 0;
115     virtual std::string title() const = 0;
116     virtual std::string unit(unsigned int which) const = 0;
117     virtual float factor(unsigned int which) const = 0;
118 
119     virtual void enable_menu(bool en = true) = 0;
120     virtual void enable_autoscale(bool en = true) = 0;
121 
122     virtual void reset() = 0;
123 
124     QApplication* d_qApplication;
125 };
126 
127 } /* namespace qtgui */
128 } /* namespace gr */
129 
130 #endif /* INCLUDED_QTGUI_NUMBER_SINK_H */
131