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
22public:
23 InputBlock(QObject* parent = nullptr);
24
25 QQuickItem* target() const;
26 void setTarget(QQuickItem*);
27
28 bool when() const;
29 void setWhen(bool);
30
31 Qt::MouseButtons acceptMouseButtons() const;
32 void setAcceptMouseButtons(Qt::MouseButtons buttons);
33 bool acceptHoverEvents() const;
34 void setAcceptHoverEvents(bool enabled);
35 bool acceptTouchEvents() const;
36 void setAcceptTouchEvents(bool accept);
37
38 Q_SIGNAL void whenChanged();
39 Q_SIGNAL void targetChanged();
40 Q_SIGNAL void acceptMouseButtonsChanged();
41 Q_SIGNAL void acceptHoverEventsChanged();
42 Q_SIGNAL void acceptTouchEventsChanged();
43
44 Q_SLOT void trigger();
45
46private:
47 struct State {
48 bool canHover { false };
49 bool canTouch { false };
50 Qt::MouseButtons mouseButtons { Qt::NoButton };
51 void saveState(QQuickItem*);
52 void restoreState(QQuickItem*);
53 };
54
55private:
56 bool mWhen;
57 QPointer<QQuickItem> mTarget;
58 State mState;
59 State mReqState;
60};
61
62} // namespace qml_material