JS8Call-Improved master
Loading...
Searching...
No Matches
EventFilter.h
1#ifndef EVENTFILTER_HPP__
2#define EVENTFILTER_HPP__
3
4#include <QEvent>
5#include <QKeyEvent>
6#include <QMouseEvent>
7#include <QObject>
8
9#include <functional>
10
11namespace EventFilter {
12class FocusOut final : public QObject {
13 public:
14 using Filter = std::function<void()>;
15
16 FocusOut(Filter filter, QObject *parent = nullptr)
17 : QObject{parent}, filter_{filter} {}
18
19 bool eventFilter(QObject *, QEvent *event) override {
20 if (event->type() == QEvent::FocusOut)
21 filter_();
22 return false;
23 }
24
25 private:
26 Filter filter_;
27};
28
29class EscapeKeyPress final : public QObject {
30 public:
31 using Filter = std::function<bool(QKeyEvent *)>;
32
33 EscapeKeyPress(Filter filter, QObject *parent = nullptr)
34 : QObject{parent}, filter_{filter} {}
35
36 bool eventFilter(QObject *, QEvent *event) override {
37 if (event->type() == QEvent::KeyPress) {
38 if (auto const keyEvent = static_cast<QKeyEvent *>(event);
39 keyEvent->key() == Qt::Key_Escape) {
40 return filter_(keyEvent);
41 }
42 }
43 return false;
44 }
45
46 private:
47 Filter filter_;
48};
49
50class EnterKeyPress final : public QObject {
51 public:
52 using Filter = std::function<bool(QKeyEvent *)>;
53
54 EnterKeyPress(Filter filter, QObject *parent = nullptr)
55 : QObject{parent}, filter_{filter} {}
56
57 bool eventFilter(QObject *, QEvent *const event) override {
58 if (event->type() == QEvent::KeyPress) {
59 if (auto const keyEvent = static_cast<QKeyEvent *>(event);
60 keyEvent->key() == Qt::Key_Enter ||
61 keyEvent->key() == Qt::Key_Return) {
62 return filter_(keyEvent);
63 }
64 }
65 return false;
66 }
67
68 private:
69 Filter filter_;
70};
71
72class MouseButtonPress final : public QObject {
73 public:
74 using Filter = std::function<bool(QMouseEvent *)>;
75
76 MouseButtonPress(Filter filter, QObject *parent = nullptr)
77 : QObject{parent}, filter_{filter} {}
78
79 bool eventFilter(QObject *, QEvent *event) override {
80 if (event->type() == QEvent::MouseButtonPress) {
81 return filter_(static_cast<QMouseEvent *>(event));
82 }
83 return false;
84 }
85
86 private:
87 Filter filter_;
88};
89
90class MouseButtonDblClick final : public QObject {
91 public:
92 using Filter = std::function<bool(QMouseEvent *)>;
93
94 MouseButtonDblClick(Filter filter, QObject *parent = nullptr)
95 : QObject{parent}, filter_{filter} {}
96
97 bool eventFilter(QObject *, QEvent *event) override {
98 if (event->type() == QEvent::MouseButtonDblClick) {
99 return filter_(static_cast<QMouseEvent *>(event));
100 }
101 return false;
102 }
103
104 private:
105 Filter filter_;
106};
107} // namespace EventFilter
108
109#endif