File: dregionmonitor.h

package info (click to toggle)
dtkgui 5.7.12-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 2,340 kB
  • sloc: cpp: 19,512; ansic: 34; makefile: 15; sh: 15
file content (86 lines) | stat: -rw-r--r-- 2,912 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
// SPDX-FileCopyrightText: 2022 UnionTech Software Technology Co., Ltd.
//
// SPDX-License-Identifier: LGPL-3.0-or-later

#ifndef DREGIONMONITOR_H
#define DREGIONMONITOR_H

#include <DObject>
#include <dtkgui_global.h>

#include <QObject>

DGUI_BEGIN_NAMESPACE

class DRegionMonitorPrivate;
class DRegionMonitor : public QObject, public DTK_CORE_NAMESPACE::DObject
{
    Q_OBJECT
    D_DECLARE_PRIVATE(DRegionMonitor)
    Q_DISABLE_COPY(DRegionMonitor)
    Q_PROPERTY(CoordinateType coordinateType READ coordinateType WRITE setCoordinateType NOTIFY coordinateTypeChanged)
    Q_PROPERTY(RegisterdFlags registerdFlags READ registerFlags WRITE setRegisterFlags NOTIFY registerdFlagsChanged)

public:
    explicit DRegionMonitor(QObject *parent = nullptr);

    enum RegisterdFlag {
        Motion = 1 << 0,
        Button = 1 << 1,
        Key = 1 << 2
    };
    Q_DECLARE_FLAGS(RegisterdFlags, RegisterdFlag)

    enum WatchedFlags {
        Button_Left     = 1,
        Button_Middle,
        Button_Right,
        Wheel_Up,
        Wheel_Down
    };

    enum CoordinateType {
        ScaleRatio,
        Original
    };
    Q_ENUM(CoordinateType)

    bool registered() const;
    QRegion watchedRegion() const;
    RegisterdFlags registerFlags() const;
    CoordinateType coordinateType() const;

Q_SIGNALS:
    void buttonPress(const QPoint &p, const int flag) const;
    void buttonRelease(const QPoint &p, const int flag) const;
    void cursorMove(const QPoint &p) const;
    void cursorEnter(const QPoint &p) const;
    void cursorLeave(const QPoint &p) const;
    void keyPress(const QString &keyname) const;
    void keyRelease(const QString &keyname) const;
    void registerdFlagsChanged(RegisterdFlags flags) const;
    void coordinateTypeChanged(CoordinateType type) const;

public Q_SLOTS:
    void registerRegion();
    inline void registerRegion(const QRegion &region) { setWatchedRegion(region); registerRegion(); }
    void unregisterRegion();
    void setWatchedRegion(const QRegion &region);
    void setRegisterFlags(RegisterdFlags flags);
    void setCoordinateType(CoordinateType type);

private:
    Q_PRIVATE_SLOT(d_func(), void _q_ButtonPress(const int, const int, const int, const QString&))
    Q_PRIVATE_SLOT(d_func(), void _q_ButtonRelease(const int, const int, const int, const QString&))
    Q_PRIVATE_SLOT(d_func(), void _q_CursorMove(const int, const int, const QString &))
    Q_PRIVATE_SLOT(d_func(), void _q_CursorEnter(const int, const int, const QString &))
    Q_PRIVATE_SLOT(d_func(), void _q_CursorLeave(const int, const int, const QString &))
    Q_PRIVATE_SLOT(d_func(), void _q_KeyPress(const QString &, const int, const int, const QString &))
    Q_PRIVATE_SLOT(d_func(), void _q_KeyRelease(const QString &, const int, const int, const QString &))
};

Q_DECLARE_OPERATORS_FOR_FLAGS (DRegionMonitor::RegisterdFlags);

DGUI_END_NAMESPACE

#endif // DREGIONMONITOR_H