]> sigrok.org Git - pulseview.git/blame - pv/view/selectableitem.hpp
View: Fix #513 by scrolling 1/8th the view height per step
[pulseview.git] / pv / view / selectableitem.hpp
CommitLineData
e0e90d80
JH
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, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19 */
20
21#ifndef PULSEVIEW_PV_SELECTABLEITEM_H
22#define PULSEVIEW_PV_SELECTABLEITEM_H
23
24#include <list>
25
d09674d4 26#include <QPen>
2a2512b2 27
e0e90d80 28class QAction;
9b6378f1
JH
29class QMenu;
30class QWidget;
e0e90d80
JH
31
32namespace pv {
a28a212c
JH
33
34namespace widgets {
35class Popup;
36}
37
e0e90d80
JH
38namespace view {
39
2a2512b2 40class SelectableItem : public QObject
e0e90d80 41{
2a2512b2
JH
42 Q_OBJECT
43
d09674d4
JH
44private:
45 static const int HighlightRadius;
46
f1283456
JH
47public:
48 SelectableItem();
49
50public:
096fb584
JH
51 /**
52 * Returns true if the item is visible and enabled.
53 */
54 virtual bool enabled() const = 0;
55
f1283456 56 /**
7ccd5a64 57 * Returns true if the item has been selected by the user.
f1283456
JH
58 */
59 bool selected() const;
60
61 /**
62 * Selects or deselects the signal.
63 */
64 void select(bool select = true);
65
0dda6fe5
JH
66 /**
67 * Returns true if the item is being dragged.
68 */
69 bool dragging() const;
70
71 /**
72 * Retunrns the current drag point.
73 */
74 QPoint drag_point() const;
75
76 /**
77 * Sets this item into the dragged state.
78 */
79 void drag();
80
81 /**
82 * Sets this item into the un-dragged state.
83 */
84 void drag_release();
85
86 /**
87 * Get the drag point.
88 */
89 virtual QPoint point() const = 0;
90
4a5c385e
JH
91 /**
92 * Computes the outline rectangle of a label.
93 * @param rect the rectangle of the header area.
94 * @return Returns the rectangle of the signal label.
95 */
96 virtual QRectF label_rect(const QRectF &rect) const = 0;
97
d8d724cc
JH
98public:
99 /**
100 * Gets the text colour.
101 * @remarks This colour is computed by comparing the lightness
102 * of the trace colour against a threshold to determine whether
103 * white or black would be more visible.
104 */
105 static QColor select_text_colour(QColor background);
106
a55c544b 107public:
9b6378f1
JH
108 virtual QMenu* create_context_menu(QWidget *parent);
109
a28a212c
JH
110 virtual pv::widgets::Popup* create_popup(QWidget *parent) = 0;
111
5ed1adf5
JH
112 virtual void delete_pressed();
113
d09674d4
JH
114protected:
115 static QPen highlight_pen();
116
9b6378f1 117protected:
8dbbc7f0 118 QWidget *context_parent_;
9b6378f1 119
f1283456 120private:
8dbbc7f0
JH
121 bool selected_;
122 QPoint drag_point_;
e0e90d80
JH
123};
124
125} // namespace view
126} // namespace pv
127
128#endif // PULSEVIEW_PV_SELECTABLEITEM_H