Qt 6.x
The Qt SDK
Loading...
Searching...
No Matches
qqmlpermissions_p.h
Go to the documentation of this file.
1// Copyright (C) 2023 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QQMLPERMISSIONS_P_H
5#define QQMLPERMISSIONS_P_H
6
7//
8// W A R N I N G
9// -------------
10//
11// This file is not part of the Qt API. It exists purely as an
12// implementation detail. This header file may change from version to
13// version without notice, or even be removed.
14//
15// We mean it.
16//
17
18#include <private/qqmlglobal_p.h>
19
20#if QT_CONFIG(permissions)
21
22#include <QtQml/qqmlregistration.h>
23
24#include <QtCore/qpermissions.h>
25#include <QtCore/qnamespace.h>
26#include <QtCore/qproperty.h>
27#include <QtCore/qglobal.h>
28
29#include <QtGui/qguiapplication.h>
30
32
33#define QML_PERMISSION(Permission) \
34 Q_OBJECT \
35 QML_NAMED_ELEMENT(Permission) \
36public: \
37 Q_PROPERTY(Qt::PermissionStatus status READ status NOTIFY statusChanged) \
38 Qt::PermissionStatus status() const { return qApp->checkPermission(m_permission); } \
39 Q_SIGNAL void statusChanged(); \
40 Q_INVOKABLE void request() { \
41 const auto previousStatus = status(); \
42 qApp->requestPermission(m_permission, this, \
43 [this, previousStatus](const QPermission &permission) { \
44 if (previousStatus != permission.status()) \
45 emit statusChanged(); \
46 }); \
47 } \
48private: \
49 Q##Permission m_permission; \
50public:
51
52#define QML_PERMISSION_PROPERTY(PropertyType, getterName, setterName) \
53 Q_PROPERTY(PropertyType getterName READ getterName WRITE setterName NOTIFY getterName##Changed) \
54 PropertyType getterName() const { return m_permission.getterName(); } \
55 void setterName(const PropertyType &value) { \
56 const auto previousValue = m_permission.getterName(); \
57 const auto previousStatus = status(); \
58 m_permission.setterName(value); \
59 if (m_permission.getterName() != previousValue) { \
60 emit getterName##Changed(); \
61 if (status() != previousStatus) \
62 emit statusChanged(); \
63 } \
64 } \
65 Q_SIGNAL void getterName##Changed();
66
67
68struct QQmlQLocationPermission : public QObject
69{
70 QML_PERMISSION(LocationPermission)
72 QML_PERMISSION_PROPERTY(QLocationPermission::Availability, availability, setAvailability)
73 QML_PERMISSION_PROPERTY(QLocationPermission::Accuracy, accuracy, setAccuracy)
74};
75
76struct QQmlCalendarPermission : public QObject
77{
78 QML_PERMISSION(CalendarPermission)
80 QML_PERMISSION_PROPERTY(QCalendarPermission::AccessMode, accessMode, setAccessMode)
81};
82
83struct QQmlContactsPermission : public QObject
84{
85 QML_PERMISSION(ContactsPermission)
87 QML_PERMISSION_PROPERTY(QContactsPermission::AccessMode, accessMode, setAccessMode)
88};
89
90struct QQmlBluetoothPermission : public QObject
91{
92 QML_PERMISSION(BluetoothPermission)
94 QML_PERMISSION_PROPERTY(QBluetoothPermission::CommunicationModes, communicationModes, setCommunicationModes)
95};
96
97struct QQmlCameraPermission : public QObject
98{
99 QML_PERMISSION(CameraPermission)
100};
101
102struct QQmlMicrophonePermission : public QObject
103{
104 QML_PERMISSION(MicrophonePermission)
105};
106
108
109#endif // QT_CONFIG(permissions)
110
111#endif // QQMLPERMISSIONS_P_H
Access Bluetooth peripherals.
Access the user's calendar.
AccessMode
This enum is used to control access to the calendar data.
Access the user's contacts.
AccessMode
This enum is used to control access to the contacts data.
Access the user's location.
Availability
This enum is used to control the availability of the location data.
Accuracy
This enum is used to control the accuracy of the location data.
\inmodule QtCore
Definition qobject.h:90
Combined button and popup list for selecting options.
#define QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE)