1 /* -*- c++ -*- */
2 /*
3  * Copyright 2012 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 DISPLAY_FORM_H
24 #define DISPLAY_FORM_H
25 
26 #include <gnuradio/qtgui/api.h>
27 #include <gnuradio/qtgui/spectrumUpdateEvents.h>
28 #include <QtGui/QtGui>
29 #include <vector>
30 
31 #include <qwt_plot_grid.h>
32 #include <qwt_plot_layout.h>
33 
34 #include <gnuradio/qtgui/DisplayPlot.h>
35 #include <gnuradio/qtgui/form_menus.h>
36 
37 /*!
38  * \brief Base class for setting up and  managing QTGUI plot forms.
39  * \ingroup qtgui_blk
40  */
41 class QTGUI_API DisplayForm : public QWidget
42 {
43     Q_OBJECT
44 
45 public:
46     DisplayForm(int nplots = 1, QWidget* parent = 0);
47     ~DisplayForm();
48 
49     virtual DisplayPlot* getPlot() = 0;
50     void Reset();
51     bool isClosed() const;
52 
53     void enableMenu(bool en = true);
54 
55 public slots:
56     void resizeEvent(QResizeEvent* e);
57     void mousePressEvent(QMouseEvent* e);
58     virtual void customEvent(QEvent* e) = 0;
59 
60     void closeEvent(QCloseEvent* e);
61 
62     void setUpdateTime(double t);
63 
64     void setTitle(const QString& title);
65     void setLineLabel(unsigned int which, const QString& label);
66     void setLineColor(unsigned int which, const QString& color);
67     void setLineWidth(unsigned int which, unsigned int width);
68     void setLineStyle(unsigned int which, Qt::PenStyle style);
69     void setLineMarker(unsigned int which, QwtSymbol::Style style);
70     void setMarkerAlpha(unsigned int which, unsigned int alpha);
71 
72     QString title();
73     QString lineLabel(unsigned int which);
74     QString lineColor(unsigned int which);
75     int lineWidth(unsigned int which);
76     Qt::PenStyle lineStyle(unsigned int which);
77     QwtSymbol::Style lineMarker(unsigned int which);
78     int markerAlpha(unsigned int which);
79 
80     virtual void setSampleRate(const QString& rate);
81 
82     void setStop(bool on);
83     void setStop();
84 
85     void setGrid(bool on);
86     void setAxisLabels(bool en);
87 
88     void saveFigure();
89 
90     void disableLegend();
91 
92 private slots:
93     virtual void newData(const QEvent*) = 0;
94     virtual void autoScale(bool) = 0;
95     void updateGuiTimer();
96 
97     virtual void onPlotPointSelected(const QPointF p);
98 
99 signals:
100     void plotPointSelected(const QPointF p, int type);
101     void toggleGrid(bool en);
102 
103 protected:
104     bool d_isclosed;
105 
106     unsigned int d_nplots;
107 
108     QGridLayout* d_layout;
109     DisplayPlot* d_display_plot;
110     bool d_system_specified_flag;
111 
112     QwtPlotGrid* d_grid;
113 
114     bool d_menu_on;
115     QMenu* d_menu;
116 
117     QAction* d_stop_act;
118     bool d_stop_state;
119     QAction* d_grid_act;
120     bool d_grid_state;
121     QAction* d_axislabelsmenu;
122     bool d_axislabels;
123 
124     QAction* d_autoscale_act;
125     bool d_autoscale_state;
126 
127     QList<QMenu*> d_lines_menu;
128     QList<LineTitleAction*> d_line_title_act;
129     QList<LineColorMenu*> d_line_color_menu;
130     QList<LineWidthMenu*> d_line_width_menu;
131     QList<LineStyleMenu*> d_line_style_menu;
132     QList<LineMarkerMenu*> d_line_marker_menu;
133     QList<MarkerAlphaMenu*> d_marker_alpha_menu;
134 
135     PopupMenu* d_samp_rate_act;
136     QAction* d_save_act;
137 
138     double d_update_time;
139 };
140 
141 #endif /* DISPLAY_FORM_H */
142