Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
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// Qt-Security score:significant reason:default
4
5#ifndef QQMLPERMISSIONS_P_H
6#define QQMLPERMISSIONS_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <private/qqmlglobal_p.h>
20
21#if QT_CONFIG(permissions)
22
23#include <QtQml/qqmlregistration.h>
24
25#include <QtCore/qpermissions.h>
26#include <QtCore/qnamespace.h>
27#include <QtCore/qproperty.h>
28#include <QtCore/qglobal.h>
29
30#include <QtCore/qcoreapplication.h>
31
32QT_BEGIN_NAMESPACE
33
34#define QML_PERMISSION(Permission)
35 Q_OBJECT
36 QML_NAMED_ELEMENT(Permission) public
37 :
38 Q_PROPERTY(Qt::PermissionStatus status READ status NOTIFY statusChanged)
39 Qt::PermissionStatus status() const { return qApp->checkPermission(m_permission); }
40 Q_SIGNAL void statusChanged();
41 Q_INVOKABLE void request() {
42 const auto previousStatus = status();
43 qApp->requestPermission(m_permission, this,
44 [this, previousStatus](const QPermission &permission) {
45 if (previousStatus != permission.status())
46 emit statusChanged();
47 });
48 } private
49 :
50 Q##Permission m_permission; public
51 :
52
53#define QML_PERMISSION_PROPERTY(PropertyType, getterName, setterName)
54 Q_PROPERTY(PropertyType getterName READ getterName WRITE setterName NOTIFY getterName##Changed)
55 PropertyType getterName() const { return m_permission.getterName(); }
56 void setterName(const PropertyType &value) {
57 const auto previousValue = m_permission.getterName();
58 const auto previousStatus = status();
59 m_permission.setterName(value);
60 if (m_permission.getterName() != previousValue) {
61 emit getterName##Changed();
62 if (status() != previousStatus)
63 emit statusChanged();
64 }
65 }
66 Q_SIGNAL void getterName##Changed();
67
68
69struct QQmlQLocationPermission : public QObject
70{
71 QML_PERMISSION(LocationPermission)
72 QML_ADDED_IN_VERSION(6, 6)
73 QML_EXTENDED_NAMESPACE(QLocationPermission)
74 QML_PERMISSION_PROPERTY(QLocationPermission::Availability, availability, setAvailability)
75 QML_PERMISSION_PROPERTY(QLocationPermission::Accuracy, accuracy, setAccuracy)
76};
77
78struct QQmlCalendarPermission : public QObject
79{
80 QML_PERMISSION(CalendarPermission)
81 QML_ADDED_IN_VERSION(6, 6)
82 QML_EXTENDED_NAMESPACE(QCalendarPermission)
83 QML_PERMISSION_PROPERTY(QCalendarPermission::AccessMode, accessMode, setAccessMode)
84};
85
86struct QQmlContactsPermission : public QObject
87{
88 QML_PERMISSION(ContactsPermission)
89 QML_ADDED_IN_VERSION(6, 6)
90 QML_EXTENDED_NAMESPACE(QContactsPermission)
91 QML_PERMISSION_PROPERTY(QContactsPermission::AccessMode, accessMode, setAccessMode)
92};
93
94struct QQmlBluetoothPermission : public QObject
95{
96 QML_PERMISSION(BluetoothPermission)
97 QML_ADDED_IN_VERSION(6, 6)
98 QML_EXTENDED_NAMESPACE(QBluetoothPermission)
99 QML_PERMISSION_PROPERTY(QBluetoothPermission::CommunicationModes, communicationModes, setCommunicationModes)
100};
101
102struct QQmlCameraPermission : public QObject
103{
104 QML_PERMISSION(CameraPermission)
105 QML_ADDED_IN_VERSION(6, 6)
106};
107
108struct QQmlMicrophonePermission : public QObject
109{
110 QML_PERMISSION(MicrophonePermission)
111 QML_ADDED_IN_VERSION(6, 6)
112};
113
114QT_END_NAMESPACE
115
116#endif // QT_CONFIG(permissions)
117
118#endif // QQMLPERMISSIONS_P_H
\inmodule QtSql