PulseView  0.3.0
A Qt-based sigrok GUI
decodetrace.hpp
Go to the documentation of this file.
1 /*
2  * This file is part of the PulseView project.
3  *
4  * Copyright (C) 2012 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, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef PULSEVIEW_PV_VIEW_DECODETRACE_HPP
22 #define PULSEVIEW_PV_VIEW_DECODETRACE_HPP
23 
24 #include "trace.hpp"
25 
26 #include <list>
27 #include <map>
28 #include <memory>
29 #include <vector>
30 
31 #include <QSignalMapper>
32 
33 #include <pv/binding/decoder.hpp>
34 #include <pv/data/decode/row.hpp>
35 
36 struct srd_channel;
37 struct srd_decoder;
38 
39 class QComboBox;
40 
41 namespace pv {
42 
43 class Session;
44 
45 namespace data {
46 class DecoderStack;
47 
48 namespace decode {
49 class Annotation;
50 class Decoder;
51 class Row;
52 }
53 }
54 
55 namespace widgets {
56 class DecoderGroupBox;
57 }
58 
59 namespace view {
60 
61 class DecodeTrace : public Trace
62 {
63  Q_OBJECT
64 
65 private:
67  {
68  const QComboBox *combo_;
69  const std::shared_ptr<pv::data::decode::Decoder> decoder_;
70  const srd_channel *pdch_;
71  };
72 
73 private:
74  static const QColor DecodeColours[4];
75  static const QColor ErrorBgColour;
76  static const QColor NoDecodeColour;
77 
78  static const int ArrowSize;
79  static const double EndCapWidth;
80  static const int DrawPadding;
81 
82  static const QColor Colours[16];
83  static const QColor OutlineColours[16];
84 
85 public:
86  DecodeTrace(pv::Session &session,
87  std::shared_ptr<pv::data::DecoderStack> decoder_stack,
88  int index);
89 
90  bool enabled() const;
91 
92  const std::shared_ptr<pv::data::DecoderStack>& decoder() const;
93 
98  std::pair<int, int> v_extents() const;
99 
105  void paint_back(QPainter &p, const ViewItemPaintParams &pp);
106 
112  void paint_mid(QPainter &p, const ViewItemPaintParams &pp);
113 
119  void paint_fore(QPainter &p, const ViewItemPaintParams &pp);
120 
121  void populate_popup_form(QWidget *parent, QFormLayout *form);
122 
123  QMenu* create_context_menu(QWidget *parent);
124 
125  void delete_pressed();
126 
127 private:
128  void draw_annotations(std::vector<pv::data::decode::Annotation> annotations,
129  QPainter &p, int h, const ViewItemPaintParams &pp, int y,
130  size_t base_colour);
131 
132  void draw_annotation(const pv::data::decode::Annotation &a, QPainter &p,
133  int text_height, const ViewItemPaintParams &pp, int y,
134  size_t base_colour) const;
135 
136  void draw_annotation_block(std::vector<pv::data::decode::Annotation> a,
137  QPainter &p, int h, int y, size_t base_colour) const;
138 
139  void draw_instant(const pv::data::decode::Annotation &a, QPainter &p,
140  QColor fill, QColor outline, int h, double x, int y) const;
141 
142  void draw_range(const pv::data::decode::Annotation &a, QPainter &p,
143  QColor fill, QColor outline, int h, double start,
144  double end, int y) const;
145 
146  void draw_error(QPainter &p, const QString &message,
147  const ViewItemPaintParams &pp);
148 
149  void draw_unresolved_period(QPainter &p, int h, int left,
150  int right) const;
151 
152  std::pair<double, double> get_pixels_offset_samples_per_pixel() const;
153 
161  std::pair<uint64_t, uint64_t> get_sample_range(int x_start, int x_end) const;
162 
163  int get_row_at_point(const QPoint &point);
164 
165  const QString get_annotation_at_point(const QPoint &point);
166 
167  void create_decoder_form(int index,
168  std::shared_ptr<pv::data::decode::Decoder> &dec,
169  QWidget *parent, QFormLayout *form);
170 
171  QComboBox* create_channel_selector(QWidget *parent,
172  const std::shared_ptr<pv::data::decode::Decoder> &dec,
173  const srd_channel *const pdch);
174 
176  std::shared_ptr<data::decode::Decoder> &dec);
177 
178  void commit_channels();
179 
180 public:
181  void hover_point_changed();
182 
183 private Q_SLOTS:
184  void on_new_decode_data();
185 
186  void on_delete();
187 
188  void on_channel_selected(int);
189 
190  void on_stack_decoder(srd_decoder *decoder);
191 
192  void on_delete_decoder(int index);
193 
194  void on_show_hide_decoder(int index);
195 
196 private:
198  std::shared_ptr<pv::data::DecoderStack> decoder_stack_;
199 
201 
202  std::list< std::shared_ptr<pv::binding::Decoder> >
204 
205  std::list<ChannelSelector> channel_selectors_;
206  std::vector<pv::widgets::DecoderGroupBox*> decoder_forms_;
207 
208  std::vector<data::decode::Row> visible_rows_;
210 
212 };
213 
214 } // namespace view
215 } // namespace pv
216 
217 #endif // PULSEVIEW_PV_VIEW_DECODETRACE_HPP
QPoint point(const QRect &rect) const
void on_delete_decoder(int index)
std::pair< int, int > v_extents() const
static const QColor NoDecodeColour
Definition: decodetrace.hpp:76
DecodeTrace(pv::Session &session, std::shared_ptr< pv::data::DecoderStack > decoder_stack, int index)
std::list< ChannelSelector > channel_selectors_
static const QColor OutlineColours[16]
Definition: decodetrace.hpp:83
void on_channel_selected(int)
void draw_unresolved_period(QPainter &p, int h, int left, int right) const
QSignalMapper delete_mapper_
void commit_decoder_channels(std::shared_ptr< data::decode::Decoder > &dec)
void draw_instant(const pv::data::decode::Annotation &a, QPainter &p, QColor fill, QColor outline, int h, double x, int y) const
void populate_popup_form(QWidget *parent, QFormLayout *form)
static const int ArrowSize
Definition: decodetrace.hpp:78
static const QColor ErrorBgColour
Definition: decodetrace.hpp:75
const std::shared_ptr< pv::data::decode::Decoder > decoder_
Definition: decodetrace.hpp:69
void draw_range(const pv::data::decode::Annotation &a, QPainter &p, QColor fill, QColor outline, int h, double start, double end, int y) const
std::vector< data::decode::Row > visible_rows_
void create_decoder_form(int index, std::shared_ptr< pv::data::decode::Decoder > &dec, QWidget *parent, QFormLayout *form)
void draw_annotation_block(std::vector< pv::data::decode::Annotation > a, QPainter &p, int h, int y, size_t base_colour) const
void draw_annotations(std::vector< pv::data::decode::Annotation > annotations, QPainter &p, int h, const ViewItemPaintParams &pp, int y, size_t base_colour)
static const double EndCapWidth
Definition: decodetrace.hpp:79
void draw_annotation(const pv::data::decode::Annotation &a, QPainter &p, int text_height, const ViewItemPaintParams &pp, int y, size_t base_colour) const
void on_stack_decoder(srd_decoder *decoder)
const std::shared_ptr< pv::data::DecoderStack > & decoder() const
std::list< std::shared_ptr< pv::binding::Decoder > > bindings_
bool enabled() const
QMenu * create_context_menu(QWidget *parent)
QSignalMapper show_hide_mapper_
void paint_mid(QPainter &p, const ViewItemPaintParams &pp)
QComboBox * create_channel_selector(QWidget *parent, const std::shared_ptr< pv::data::decode::Decoder > &dec, const srd_channel *const pdch)
int get_row_at_point(const QPoint &point)
pv::Session & session_
void draw_error(QPainter &p, const QString &message, const ViewItemPaintParams &pp)
static const QColor Colours[16]
Definition: decodetrace.hpp:82
std::pair< uint64_t, uint64_t > get_sample_range(int x_start, int x_end) const
std::shared_ptr< pv::data::DecoderStack > decoder_stack_
void paint_back(QPainter &p, const ViewItemPaintParams &pp)
void paint_fore(QPainter &p, const ViewItemPaintParams &pp)
static const int DrawPadding
Definition: decodetrace.hpp:80
std::vector< pv::widgets::DecoderGroupBox * > decoder_forms_
std::pair< double, double > get_pixels_offset_samples_per_pixel() const
const QString get_annotation_at_point(const QPoint &point)
void on_show_hide_decoder(int index)
static const QColor DecodeColours[4]
Definition: decodetrace.hpp:74