PulseView  0.3.0
A Qt-based sigrok GUI
logicsignal.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_LOGICSIGNAL_HPP
22 #define PULSEVIEW_PV_VIEW_LOGICSIGNAL_HPP
23 
24 #include <QCache>
25 
26 #include "signal.hpp"
27 
28 #include <memory>
29 
30 class QIcon;
31 class QToolBar;
32 
33 namespace sigrok {
34 class TriggerMatchType;
35 }
36 
37 namespace pv {
38 
39 namespace devices {
40 class Device;
41 }
42 
43 namespace data {
44 class Logic;
45 }
46 
47 namespace view {
48 
49 class LogicSignal : public Signal
50 {
51  Q_OBJECT
52 
53 private:
54  static const float Oversampling;
55 
56  static const QColor EdgeColour;
57  static const QColor HighColour;
58  static const QColor LowColour;
59 
60  static const QColor SignalColours[10];
61 
63  static const int TriggerMarkerPadding;
64  static const char* TriggerMarkerIcons[8];
65 
66 public:
67  LogicSignal(pv::Session &session,
68  std::shared_ptr<devices::Device> device,
69  std::shared_ptr<sigrok::Channel> channel,
70  std::shared_ptr<pv::data::Logic> data);
71 
72  virtual ~LogicSignal();
73 
74  std::shared_ptr<pv::data::SignalData> data() const;
75 
76  std::shared_ptr<pv::data::Logic> logic_data() const;
77 
78  void set_logic_data(std::shared_ptr<pv::data::Logic> data);
79 
84  std::pair<int, int> v_extents() const;
85 
89  int scale_handle_offset() const;
90 
95  void scale_handle_dragged(int offset);
96 
102  void paint_mid(QPainter &p, const ViewItemPaintParams &pp);
103 
109  virtual void paint_fore(QPainter &p, const ViewItemPaintParams &pp);
110 
111 private:
112  void paint_caps(QPainter &p, QLineF *const lines,
113  std::vector< std::pair<int64_t, bool> > &edges,
114  bool level, double samples_per_pixel, double pixels_offset,
115  float x_offset, float y_offset);
116 
117  void init_trigger_actions(QWidget *parent);
118 
119  const std::vector<int32_t> get_trigger_types() const;
120  QAction* action_from_trigger_type(
121  const sigrok::TriggerMatchType *match);
122  const sigrok::TriggerMatchType* trigger_type_from_action(
123  QAction *action);
124  void populate_popup_form(QWidget *parent, QFormLayout *form);
125  void modify_trigger();
126 
127  static const QIcon* get_icon(const char *path);
128  static const QPixmap* get_pixmap(const char *path);
129 
130 private Q_SLOTS:
131  void on_trigger();
132 
133 private:
135 
136  std::shared_ptr<pv::devices::Device> device_;
137  std::shared_ptr<pv::data::Logic> data_;
138 
139  const sigrok::TriggerMatchType *trigger_match_;
141  QAction *trigger_none_;
142  QAction *trigger_rising_;
143  QAction *trigger_high_;
145  QAction *trigger_low_;
146  QAction *trigger_change_;
147 
148  static QCache<QString, const QIcon> icon_cache_;
149  static QCache<QString, const QPixmap> pixmap_cache_;
150 };
151 
152 } // namespace view
153 } // namespace pv
154 
155 #endif // PULSEVIEW_PV_VIEW_LOGICSIGNAL_HPP
QAction * action_from_trigger_type(const sigrok::TriggerMatchType *match)
void scale_handle_dragged(int offset)
int scale_handle_offset() const
static const QIcon * get_icon(const char *path)
static const QColor SignalColours[10]
Definition: logicsignal.hpp:60
static QColor TriggerMarkerBackgroundColour
Definition: logicsignal.hpp:62
void set_logic_data(std::shared_ptr< pv::data::Logic > data)
virtual void paint_fore(QPainter &p, const ViewItemPaintParams &pp)
const std::vector< int32_t > get_trigger_types() const
void populate_popup_form(QWidget *parent, QFormLayout *form)
LogicSignal(pv::Session &session, std::shared_ptr< devices::Device > device, std::shared_ptr< sigrok::Channel > channel, std::shared_ptr< pv::data::Logic > data)
Definition: logicsignal.cpp:99
std::shared_ptr< sigrok::Channel > channel() const
Definition: signal.cpp:99
static const QColor LowColour
Definition: logicsignal.hpp:58
static const QColor HighColour
Definition: logicsignal.hpp:57
static const QPixmap * get_pixmap(const char *path)
const sigrok::TriggerMatchType * trigger_type_from_action(QAction *action)
void paint_mid(QPainter &p, const ViewItemPaintParams &pp)
static const QColor EdgeColour
Definition: logicsignal.hpp:56
std::shared_ptr< pv::devices::Device > device_
std::pair< int, int > v_extents() const
const sigrok::TriggerMatchType * trigger_match_
void paint_caps(QPainter &p, QLineF *const lines, std::vector< std::pair< int64_t, bool > > &edges, bool level, double samples_per_pixel, double pixels_offset, float x_offset, float y_offset)
static QCache< QString, const QPixmap > pixmap_cache_
static const int TriggerMarkerPadding
Definition: logicsignal.hpp:63
void init_trigger_actions(QWidget *parent)
static QCache< QString, const QIcon > icon_cache_
std::shared_ptr< pv::data::Logic > logic_data() const
std::shared_ptr< pv::data::SignalData > data() const
std::shared_ptr< pv::data::Logic > data_
static const float Oversampling
Definition: logicsignal.hpp:54
static const char * TriggerMarkerIcons[8]
Definition: logicsignal.hpp:64