PulseView  unreleased development snapshot
A Qt-based sigrok GUI
cursorpair.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_CURSORPAIR_HPP
21 #define PULSEVIEW_PV_VIEWS_TRACE_CURSORPAIR_HPP
22 
23 #include "cursor.hpp"
24 #include "pv/globalsettings.hpp"
25 
26 #include <memory>
27 
28 #include <QColor>
29 #include <QPainter>
30 #include <QRect>
31 
32 using std::pair;
33 using std::shared_ptr;
34 
35 class QPainter;
36 
37 namespace pv {
38 namespace views {
39 namespace trace {
40 
41 class View;
42 
44 {
45  Q_OBJECT
46 
47 private:
48  static const int DeltaPadding;
49 
50 public:
55  CursorPair(View &view);
56 
57  ~CursorPair();
58 
62  bool enabled() const override;
63 
67  shared_ptr<Cursor> first() const;
68 
72  shared_ptr<Cursor> second() const;
73 
77  void set_time(const pv::util::Timestamp& time) override;
78 
79  virtual const pv::util::Timestamp time() const override;
80 
81  float get_x() const override;
82 
83  virtual const pv::util::Timestamp delta(const pv::util::Timestamp& other) const override;
84 
85  QPoint drag_point(const QRect &rect) const override;
86 
87  pv::widgets::Popup* create_popup(QWidget *parent) override;
88 
89  QMenu* create_header_context_menu(QWidget *parent) override;
90 
91  QRectF label_rect(const QRectF &rect) const override;
92 
99  void paint_label(QPainter &p, const QRect &rect, bool hover) override;
100 
106  void paint_back(QPainter &p, ViewItemPaintParams &pp) override;
107 
111  QString format_string(int max_width = 0, std::function<double(const QString&)> query_size
112  = [](const QString& s) -> double { (void)s; return 0; });
113 
114  pair<float, float> get_cursor_offsets() const;
115 
116  virtual void on_setting_changed(const QString &key, const QVariant &value) override;
117 
118 public Q_SLOTS:
119  void on_hover_point_changed(const QWidget* widget, const QPoint &hp);
120 
121 private:
122  QString format_string_sub(int time_precision, int freq_precision, bool show_unit = true);
123 
124 private:
125  shared_ptr<Cursor> first_, second_;
126  QColor fill_color_;
127 
128  QSizeF text_size_;
129  QRectF label_area_;
132 };
133 
134 } // namespace trace
135 } // namespace views
136 } // namespace pv
137 
138 #endif // PULSEVIEW_PV_VIEWS_TRACE_CURSORPAIR_HPP
void paint_back(QPainter &p, ViewItemPaintParams &pp) override
Definition: cursorpair.cpp:227
T value(details::expression_node< T > *n)
Definition: exprtk.hpp:12358
pair< float, float > get_cursor_offsets() const
Definition: cursorpair.cpp:286
QString format_string(int max_width=0, std::function< double(const QString &)> query_size=[](const QString &s) -> double{(void) s;return 0;})
Definition: cursorpair.cpp:242
QRectF label_rect(const QRectF &rect) const override
Definition: cursorpair.cpp:167
static const int DeltaPadding
Definition: cursorpair.hpp:48
virtual void on_setting_changed(const QString &key, const QVariant &value) override
Definition: cursorpair.cpp:294
shared_ptr< Cursor > first() const
Definition: cursorpair.cpp:78
void on_hover_point_changed(const QWidget *widget, const QPoint &hp)
Definition: cursorpair.cpp:309
void paint_label(QPainter &p, const QRect &rect, bool hover) override
Definition: cursorpair.cpp:185
QString format_string_sub(int time_precision, int freq_precision, bool show_unit=true)
Definition: cursorpair.cpp:323
shared_ptr< Cursor > first_
Definition: cursorpair.hpp:125
float get_x() const override
Definition: cursorpair.cpp:100
bool enabled() const override
Definition: cursorpair.cpp:73
QMenu * create_header_context_menu(QWidget *parent) override
Definition: cursorpair.cpp:124
QPoint drag_point(const QRect &rect) const override
Definition: cursorpair.cpp:113
boost::multiprecision::number< boost::multiprecision::cpp_dec_float< 24 >, boost::multiprecision::et_off > Timestamp
Timestamp type providing yoctosecond resolution.
Definition: util.hpp:67
shared_ptr< Cursor > second_
Definition: cursorpair.hpp:125
shared_ptr< Cursor > second() const
Definition: cursorpair.cpp:83
void set_time(const pv::util::Timestamp &time) override
Definition: cursorpair.cpp:88
virtual const pv::util::Timestamp time() const override
Definition: cursorpair.cpp:95
pv::widgets::Popup * create_popup(QWidget *parent) override
Definition: cursorpair.cpp:118
virtual const pv::util::Timestamp delta(const pv::util::Timestamp &other) const override
Definition: cursorpair.cpp:105