PulseView  0.3.0
A Qt-based sigrok GUI
popup.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, write to the Free Software
18  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
19  */
20 
21 #ifndef PULSEVIEW_PV_WIDGETS_POPUP_HPP
22 #define PULSEVIEW_PV_WIDGETS_POPUP_HPP
23 
24 #include <QWidget>
25 
26 namespace pv {
27 namespace widgets {
28 
29 class Popup : public QWidget
30 {
31  Q_OBJECT
32 
33 public:
34  enum Position
35  {
37  Top,
40  };
41 
42 private:
43  static const unsigned int ArrowLength;
44  static const unsigned int ArrowOverlap;
45  static const unsigned int MarginWidth;
46 
47 public:
48  Popup(QWidget *parent);
49 
50  const QPoint& point() const;
51  Position position() const;
52 
53  void set_position(const QPoint point, Position pos);
54 
55  bool eventFilter(QObject *obj, QEvent *evt);
56 
57  void show();
58 
59 private:
60  bool space_for_arrow() const;
61 
62  QPolygon arrow_polygon() const;
63 
64  QRegion arrow_region() const;
65 
66  QRect bubble_rect() const;
67 
68  QRegion bubble_region() const;
69 
70  QRegion popup_region() const;
71 
72  void reposition_widget();
73 
74 private:
75  void closeEvent(QCloseEvent*);
76 
77  void paintEvent(QPaintEvent*);
78 
79  void resizeEvent(QResizeEvent*);
80 
81  void mouseReleaseEvent(QMouseEvent *e);
82 
83 protected:
84  void showEvent(QShowEvent *e);
85 
86 Q_SIGNALS:
87  void closed();
88 
89 private:
90  QPoint point_;
92 };
93 
94 } // namespace widgets
95 } // namespace pv
96 
97 #endif // PULSEVIEW_PV_WIDGETS_POPUP_HPP
bool space_for_arrow() const
Definition: popup.cpp:112
void closeEvent(QCloseEvent *)
Definition: popup.cpp:248
void reposition_widget()
Definition: popup.cpp:224
void showEvent(QShowEvent *e)
Definition: popup.cpp:304
void set_position(const QPoint point, Position pos)
Definition: popup.cpp:59
QRegion arrow_region() const
Definition: popup.cpp:182
bool eventFilter(QObject *obj, QEvent *evt)
Definition: popup.cpp:70
void resizeEvent(QResizeEvent *)
Definition: popup.cpp:288
void mouseReleaseEvent(QMouseEvent *e)
Definition: popup.cpp:294
QRegion bubble_region() const
Definition: popup.cpp:198
Position position() const
Definition: popup.cpp:54
void paintEvent(QPaintEvent *)
Definition: popup.cpp:253
QRegion popup_region() const
Definition: popup.cpp:216
const QPoint & point() const
Definition: popup.cpp:49
QPolygon arrow_polygon() const
Definition: popup.cpp:140
static const unsigned int ArrowOverlap
Definition: popup.hpp:44
static const unsigned int ArrowLength
Definition: popup.hpp:43
Position pos_
Definition: popup.hpp:91
Popup(QWidget *parent)
Definition: popup.cpp:42
QRect bubble_rect() const
Definition: popup.cpp:187
static const unsigned int MarginWidth
Definition: popup.hpp:45