PulseView  unreleased development snapshot
A Qt-based sigrok GUI
trace.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2013 Joel Holdsworth <joel@airwebreathe.org.uk>
5  *
6  * This program is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with this program; if not, see <http://www.gnu.org/licenses/>.
18  */
19 
20 #ifndef PULSEVIEW_PV_VIEWS_TRACE_TRACE_HPP
21 #define PULSEVIEW_PV_VIEWS_TRACE_TRACE_HPP
22 
23 #include <QColor>
24 #include <QPainter>
25 #include <QPen>
26 #include <QRect>
27 #include <QString>
28 
29 #include <cstdint>
30 
31 #include "tracetreeitem.hpp"
32 
33 #include <pv/globalsettings.hpp>
34 #include "pv/data/signalbase.hpp"
35 
36 using std::shared_ptr;
37 
38 class QFormLayout;
39 
40 namespace pv {
41 
42 namespace data {
43 class SignalBase;
44 }
45 
46 namespace widgets {
47 class Popup;
48 }
49 
50 namespace views {
51 namespace trace {
52 
64 {
65  Q_OBJECT
66 
67 public:
81  ShowLastSegmentOnly = 1,
85  ShowAccumulatedIntensity
86  };
87 
88 private:
89  static const QPen AxisPen;
90  static const int LabelHitPadding;
91 
92  static const QColor BrightGrayBGColor;
93  static const QColor DarkGrayBGColor;
94  static const QColor ErrorBgColor;
95 
96 protected:
97  Trace(shared_ptr<data::SignalBase> signal);
98  ~Trace();
99 
100 public:
104  shared_ptr<data::SignalBase> base() const;
105 
109  virtual bool is_selectable(QPoint pos) const;
110 
114  virtual bool is_draggable(QPoint pos) const;
115 
119  virtual void set_segment_display_mode(SegmentDisplayMode mode);
120 
121  virtual void on_setting_changed(const QString &key, const QVariant &value);
122 
129  virtual void paint_label(QPainter &p, const QRect &rect, bool hover);
130 
136  virtual void paint_error(QPainter &p, const ViewItemPaintParams &pp);
137 
138  virtual QMenu* create_header_context_menu(QWidget *parent);
139 
140  virtual QMenu* create_view_context_menu(QWidget *parent, QPoint &click_pos);
141 
142  pv::widgets::Popup* create_popup(QWidget *parent);
143 
149  QRectF label_rect(const QRectF &rect) const;
150 
157  virtual QRectF hit_box_rect(const ViewItemPaintParams &pp) const;
158 
159  void set_current_segment(const int segment);
160 
161  int get_current_segment() const;
162 
163  virtual void hover_point_changed(const QPoint &hp);
164 
165 protected:
171  virtual void paint_back(QPainter &p, ViewItemPaintParams &pp);
172 
179  void paint_axis(QPainter &p, ViewItemPaintParams &pp, int y);
180 
185  void paint_hover_marker(QPainter &p);
186 
187  void add_color_option(QWidget *parent, QFormLayout *form);
188 
189  void create_popup_form();
190 
191  virtual void populate_popup_form(QWidget *parent, QFormLayout *form);
192 
193 protected Q_SLOTS:
194  virtual void on_name_changed(const QString &text);
195  virtual void on_color_changed(const QColor &color);
196  virtual void on_error_message_changed(const QString &msg);
197 
198  void on_popup_closed();
199 
200 private Q_SLOTS:
201  void on_nameedit_changed(const QString &name);
202 
203  void on_coloredit_changed(const QColor &color);
204 
205  void on_create_marker_here() const;
206 
207 protected:
208  shared_ptr<data::SignalBase> base_;
209  QPen axis_pen_;
210 
213 
215 
218 
219 private:
221  QFormLayout *popup_form_;
222 };
223 
224 } // namespace trace
225 } // namespace views
226 } // namespace pv
227 
228 #endif // PULSEVIEW_PV_VIEWS_TRACE_TRACE_HPP
static const QColor BrightGrayBGColor
Definition: trace.hpp:92
static const QColor DarkGrayBGColor
Definition: trace.hpp:93
QFormLayout * popup_form_
Definition: trace.hpp:221
uint32_t context_menu_x_pos_
Definition: trace.hpp:214
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12358
int current_segment_
The ID of the currently displayed segment.
Definition: trace.hpp:217
shared_ptr< data::SignalBase > base_
Definition: trace.hpp:208
static std::string data()
Definition: exprtk.hpp:39024
static const int LabelHitPadding
Definition: trace.hpp:90
static const QPen AxisPen
Definition: trace.hpp:89
pv::widgets::Popup * popup_
Definition: trace.hpp:220
SegmentDisplayMode segment_display_mode_
Definition: trace.hpp:211
static const QColor ErrorBgColor
Definition: trace.hpp:94