The Inspector (GNU Radio module gr-inspector)
inspector_form.h
Go to the documentation of this file.
1 /* -*- c++ -*- */
2 /*
3  * Copyright 2016 Free Software Foundation, Inc.
4  *
5  * This file is part of GNU Radio
6  *
7  * This 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  * This software 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 this software; 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 GR_INSPECTOR_INSPECTOR_SINK_H
24 #define GR_INSPECTOR_INSPECTOR_SINK_H
25 
26 #include <gnuradio/thread/thread.h>
27 
28 #include <QTimer>
29 #include <QWidget>
30 #include <QtGui/QtGui>
31 #include <gnuradio/msg_queue.h>
32 
33 #include <qwt_plot.h>
34 #include <qwt_symbol.h>
35 #include <qwt_plot_layout.h>
36 #include <qwt_plot_curve.h>
37 #include <qwt_plot_grid.h>
38 #include <qwt_plot_zoomer.h>
39 
40 #include "signal_marker.h"
41 
42 namespace gr {
43  namespace inspector {
44 
45  class Zoomer: public QwtPlotZoomer
46  {
47  public:
48 
49  Zoomer(int xAxis, int yAxis, QWidget *canvas):
50  QwtPlotZoomer(xAxis, yAxis, canvas)
51  {
52  //setSelectionFlags(QwtPicker::DragSelection | QwtPicker::CornerToCorner);
53  setTrackerMode(QwtPicker::AlwaysOn);
54  setRubberBand(QwtPicker::RectRubberBand);
55  QPen pen = QPen(QColor(100, 100, 100), 1, Qt::DashLine, Qt::RoundCap, Qt::RoundJoin);
56  setTrackerPen(pen);
57  setRubberBandPen(pen);
58 
59  // RightButton: zoom out by 1
60  // Ctrl+RightButton: zoom out to full size
61 
62 #if QT_VERSION < 0x040000
63  setMousePattern(QwtEventPattern::MouseSelect2,
64  Qt::RightButton, Qt::ControlButton);
65 #else
66  setMousePattern(QwtEventPattern::MouseSelect2,
67  Qt::RightButton, Qt::ControlModifier);
68 #endif
69  setMousePattern(QwtEventPattern::MouseSelect3,
70  Qt::RightButton);
71  setMousePattern(QwtEventPattern::MouseSelect1,
72  Qt::LeftButton, Qt::ControlModifier);
73 
74  }
75  };
76 
77  class inspector_form : public QWidget
78  {
79  Q_OBJECT
80 
81  public:
82  void set_axis_x(float start, float stop);
83  void msg_received();
84  void set_cfreq(float freq);
85  void detach_markers();
86  void mousePressEvent (QMouseEvent * eventPress);
87  void mouseReleaseEvent(QMouseEvent *eventRelease);
88  void mouseMoveEvent(QMouseEvent *eventMove);
89  void spawn_signal_selector();
90  void add_msg_queue(float cfreq, float bandwidth);
91  float freq_to_x(float freq);
92  float x_to_freq(float x);
93  void add_analysis_text(int signal, std::string text);
94 
95  void drawOverlay();
96  void draw_analysis_text();
97  inspector_form(int fft_len, std::vector<double> *buffer, std::vector<std::vector<float> >* rf_map,
98  bool* manual, gr::msg_queue* msg_queue, int *rf_unit, QWidget *parent);
100 
101  private:
102 
103  enum markerType {
104  NONE,
105  LEFT,
106  CENTER,
107  RIGHT
108  };
109 
110  bool change_flag;
111  int d_interval, d_fft_len, d_marker_count;
112  int *d_rf_unit;
113  bool *d_manual;
114  std::vector<float> d_axis_x, d_axis_y;
115  std::vector<double> *d_buffer;
116  float d_max, d_min, d_cfreq, d_mouse_offset;
117  double* d_freq;
118  std::map<int, std::string> d_analysis_texts;
119  std::vector<std::vector<float> >* d_rf_map;
120  markerType d_clicked_marker;
121  QList<signal_marker*> d_markers;
122  QwtSymbol *d_symbol;
123  Zoomer* d_zoomer;
124  QwtPlot *d_plot;
125  QwtScaleWidget *d_scale;
126  QwtPlotCurve *d_curve;
127  QTimer *d_timer;
128  QwtPlotGrid* d_grid;
129  QGridLayout *d_layout;
130 
131  QCheckBox* d_manual_cb;
132  gr::msg_queue* d_msg_queue;
133 
134  gr::thread::mutex d_mutex;
135 
136  protected:
137  void resizeEvent(QResizeEvent * event);
138 
139  public slots:
140  void refresh();
141  void manual_cb_clicked(int state);
142 
143  };
144 
145 
146  }
147 }
148 
149 #endif //GR_INSPECTOR_INSPECTOR_SINK_H
void add_msg_queue(float cfreq, float bandwidth)
void resizeEvent(QResizeEvent *event)
Definition: inspector_form.h:77
void mouseReleaseEvent(QMouseEvent *eventRelease)
float freq_to_x(float freq)
void add_analysis_text(int signal, std::string text)
void mousePressEvent(QMouseEvent *eventPress)
void set_axis_x(float start, float stop)
Definition: inspector_form.h:45
Definition: ofdm_bouzegzi_c.h:30
inspector_form(int fft_len, std::vector< double > *buffer, std::vector< std::vector< float > > *rf_map, bool *manual, gr::msg_queue *msg_queue, int *rf_unit, QWidget *parent)
void manual_cb_clicked(int state)
void mouseMoveEvent(QMouseEvent *eventMove)
Zoomer(int xAxis, int yAxis, QWidget *canvas)
Definition: inspector_form.h:49