QmlMaterial 0.1.0
Loading...
Searching...
No Matches
input_block.hpp
1#pragma once
2
3#include <QQmlEngine>
4#include <QQuickItem>
5
6namespace qml_material
7{
8
9class InputBlock : public QObject {
10 Q_OBJECT
11 QML_ELEMENT
12
13 Q_PROPERTY(bool when READ when WRITE setWhen NOTIFY whenChanged FINAL)
14 Q_PROPERTY(QQuickItem* target READ target WRITE setTarget NOTIFY targetChanged FINAL)
15 Q_PROPERTY(Qt::MouseButtons acceptMouseButtons READ acceptMouseButtons WRITE
16 setAcceptMouseButtons NOTIFY acceptMouseButtonsChanged FINAL)
17 Q_PROPERTY(bool acceptHover READ acceptHoverEvents WRITE setAcceptHoverEvents NOTIFY
18 acceptHoverEventsChanged FINAL)
19 Q_PROPERTY(bool acceptTouch READ acceptTouchEvents WRITE setAcceptTouchEvents NOTIFY
20 acceptTouchEventsChanged FINAL)
21 Q_PROPERTY(bool acceptWheel READ acceptWheelEvents WRITE setAcceptWheelEvents NOTIFY
22 acceptWheelEventsChanged FINAL)
23
24public:
25 InputBlock(QObject* parent = nullptr);
26
27 QQuickItem* target() const;
28 void setTarget(QQuickItem*);
29
30 bool when() const;
31 void setWhen(bool);
32
33 Qt::MouseButtons acceptMouseButtons() const;
34 void setAcceptMouseButtons(Qt::MouseButtons buttons);
35 bool acceptHoverEvents() const;
36 void setAcceptHoverEvents(bool enabled);
37 bool acceptTouchEvents() const;
38 void setAcceptTouchEvents(bool accept);
39 bool acceptWheelEvents() const;
40 void setAcceptWheelEvents(bool accept);
41
42 bool eventFilter(QObject* obj, QEvent* event) override;
43
44 Q_SIGNAL void whenChanged();
45 Q_SIGNAL void targetChanged();
46 Q_SIGNAL void acceptMouseButtonsChanged();
47 Q_SIGNAL void acceptHoverEventsChanged();
48 Q_SIGNAL void acceptTouchEventsChanged();
49 Q_SIGNAL void acceptWheelEventsChanged();
50
51 Q_SLOT void trigger();
52
53private:
54 struct State {
55 bool canHover { false };
56 bool canTouch { false };
57 Qt::MouseButtons mouseButtons { Qt::NoButton };
58 void saveState(QQuickItem*);
59 void restoreState(QQuickItem*);
60 };
61
62private:
63 bool mWhen;
64 bool mAcceptWheel;
65 QPointer<QQuickItem> mTarget;
66 State mState;
67 State mReqState;
68};
69
70} // namespace qml_material