Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
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 <QtCore/qcoreapplication.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)
73 QML_PERMISSION_PROPERTY(QLocationPermission::Availability, availability, setAvailability)
74 QML_PERMISSION_PROPERTY(QLocationPermission::Accuracy, accuracy, setAccuracy)
75};
76
77struct QQmlCalendarPermission : public QObject
78{
79 QML_PERMISSION(CalendarPermission)
82 QML_PERMISSION_PROPERTY(QCalendarPermission::AccessMode, accessMode, setAccessMode)
83};
84
85struct QQmlContactsPermission : public QObject
86{
87 QML_PERMISSION(ContactsPermission)
90 QML_PERMISSION_PROPERTY(QContactsPermission::AccessMode, accessMode, setAccessMode)
91};
92
93struct QQmlBluetoothPermission : public QObject
94{
95 QML_PERMISSION(BluetoothPermission)
98 QML_PERMISSION_PROPERTY(QBluetoothPermission::CommunicationModes, communicationModes, setCommunicationModes)
99};
100
101struct QQmlCameraPermission : public QObject
102{
103 QML_PERMISSION(CameraPermission)
105};
106
107struct QQmlMicrophonePermission : public QObject
108{
109 QML_PERMISSION(MicrophonePermission)
111};
112
114
115#endif // QT_CONFIG(permissions)
116
117#endif // QQMLPERMISSIONS_P_H
Access Bluetooth peripherals.
Access the user's calendar.
Access the user's contacts.
Access the user's location.
\inmodule QtCore
Definition qobject.h:103
Combined button and popup list for selecting options.
#define QML_EXTENDED_NAMESPACE(EXTENDED_NAMESPACE)
#define QML_ADDED_IN_VERSION(MAJOR, MINOR)