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
qdeclarativepositionsource_p.h
Go to the documentation of this file.
1// Copyright (C) 2021 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 QDECLARATIVEPOSITIONSOURCE_H
6#define QDECLARATIVEPOSITIONSOURCE_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 <QtPositioningQuick/private/qpositioningquickglobal_p.h>
20#include <QtPositioningQuick/private/qdeclarativeposition_p.h>
21#include <QtCore/QObject>
22#include <QtNetwork/QAbstractSocket>
23#include <QtQml/QQmlParserStatus>
24#include <QtPositioning/qgeopositioninfosource.h>
25#include <QtPositioningQuick/private/qdeclarativepluginparameter_p.h>
26#include <QtCore/private/qproperty_p.h>
27
28QT_BEGIN_NAMESPACE
29
30class QFile;
31class QTcpSocket;
32
33class Q_POSITIONINGQUICK_EXPORT QDeclarativePositionSource : public QObject, public QQmlParserStatus
34{
35 Q_OBJECT
36 QML_NAMED_ELEMENT(PositionSource)
37 QML_ADDED_IN_VERSION(5, 0)
38
39 Q_PROPERTY(QDeclarativePosition *position READ position NOTIFY positionChanged
40 BINDABLE bindablePosition)
41 Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged
42 BINDABLE bindableActive)
43 Q_PROPERTY(bool valid READ isValid NOTIFY validityChanged BINDABLE bindableIsValid)
44 Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval
45 NOTIFY updateIntervalChanged)
46 Q_PROPERTY(PositioningMethods supportedPositioningMethods READ supportedPositioningMethods
47 NOTIFY supportedPositioningMethodsChanged
48 BINDABLE bindableSupportedPositioningMethods)
49 Q_PROPERTY(PositioningMethods preferredPositioningMethods READ preferredPositioningMethods
50 WRITE setPreferredPositioningMethods NOTIFY preferredPositioningMethodsChanged)
51 Q_PROPERTY(SourceError sourceError READ sourceError NOTIFY sourceErrorChanged
52 BINDABLE bindableSourceError)
53 Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged BINDABLE bindableName)
54 Q_PROPERTY(QQmlListProperty<QDeclarativePluginParameter> parameters READ parameters REVISION(5, 14))
55
56 Q_CLASSINFO("DefaultProperty", "parameters")
57 Q_INTERFACES(QQmlParserStatus)
59public:
60 enum PositioningMethod {
61 NoPositioningMethods = QGeoPositionInfoSource::NoPositioningMethods,
62 SatellitePositioningMethods = QGeoPositionInfoSource::SatellitePositioningMethods,
63 NonSatellitePositioningMethods = QGeoPositionInfoSource::NonSatellitePositioningMethods,
64 AllPositioningMethods = QGeoPositionInfoSource::AllPositioningMethods
65 };
66
67 Q_ENUM(PositioningMethod)
68 Q_DECLARE_FLAGS(PositioningMethods, PositioningMethod)
69 Q_FLAG(PositioningMethods)
71 enum SourceError {
72 AccessError = QGeoPositionInfoSource::AccessError,
73 ClosedError = QGeoPositionInfoSource::ClosedError,
74 UnknownSourceError = QGeoPositionInfoSource::UnknownSourceError,
75 NoError = QGeoPositionInfoSource::NoError,
76 UpdateTimeoutError = QGeoPositionInfoSource::UpdateTimeoutError,
77 };
78 Q_ENUM(SourceError)
79
80 QDeclarativePositionSource();
81 ~QDeclarativePositionSource();
82 void setUpdateInterval(int updateInterval);
83 void setActive(bool active);
84 void setPreferredPositioningMethods(PositioningMethods methods);
85
86 QString name() const;
87 void setName(const QString &name);
88
89 int updateInterval() const;
90 bool isActive() const;
91 bool isValid() const;
92 QDeclarativePosition *position();
93 PositioningMethods supportedPositioningMethods() const;
94 PositioningMethods preferredPositioningMethods() const;
95 SourceError sourceError() const;
96 QGeoPositionInfoSource *positionSource() const;
97 QQmlListProperty<QDeclarativePluginParameter> parameters();
98 QVariantMap parameterMap() const;
99
100 // Virtuals from QQmlParserStatus
101 void classBegin() override { }
102 void componentComplete() override;
103
104 Q_REVISION(5, 14) Q_INVOKABLE bool setBackendProperty(const QString &name, const QVariant &value);
105 Q_REVISION(5, 14) Q_INVOKABLE QVariant backendProperty(const QString &name) const;
106
107 QBindable<PositioningMethods> bindableSupportedPositioningMethods() const;
108 QBindable<SourceError> bindableSourceError() const;
109 QBindable<bool> bindableIsValid() const;
110 QBindable<QString> bindableName();
111 QBindable<QDeclarativePosition *> bindablePosition() const;
112 QBindable<bool> bindableActive();
113
114public Q_SLOTS:
115 void update(int timeout = 0);
116 void start();
117 void stop();
118
119Q_SIGNALS:
120 void positionChanged();
121 void activeChanged();
122 void updateIntervalChanged();
123 void supportedPositioningMethodsChanged();
124 void preferredPositioningMethodsChanged();
125 void sourceErrorChanged();
126 void nameChanged();
127 void validityChanged();
128
129private Q_SLOTS:
130 void positionUpdateReceived(const QGeoPositionInfo &update);
131 void sourceErrorReceived(const QGeoPositionInfoSource::Error error);
132 void onParameterInitialized();
133 void notifySupportedPositioningMethodsChanged();
134
135private:
136 void setPosition(const QGeoPositionInfo &pi);
137 void setSource(QGeoPositionInfoSource *source);
138 bool parametersReady();
139 void tryAttach(const QString &name, bool useFallback = true);
140
141 static void parameter_append(QQmlListProperty<QDeclarativePluginParameter> *prop, QDeclarativePluginParameter *mapObject);
142 static qsizetype parameter_count(QQmlListProperty<QDeclarativePluginParameter> *prop);
143 static QDeclarativePluginParameter *parameter_at(QQmlListProperty<QDeclarativePluginParameter> *prop, qsizetype index);
144 static void parameter_clear(QQmlListProperty<QDeclarativePluginParameter> *prop);
145
146 bool isValidActualComputation() const;
147 PositioningMethods supportedMethodsActualComputation() const;
148
149 void executeStart();
150
151 QGeoPositionInfoSource *m_positionSource = nullptr;
152 PositioningMethods m_preferredPositioningMethods = AllPositioningMethods;
153 int m_updateInterval = 0;
154 QList<QDeclarativePluginParameter *> m_parameters;
155
156 Q_OBJECT_COMPAT_PROPERTY(QDeclarativePositionSource, QString, m_sourceName,
157 &QDeclarativePositionSource::setName,
158 &QDeclarativePositionSource::nameChanged)
160 Q_OBJECT_COMPAT_PROPERTY_WITH_ARGS(QDeclarativePositionSource, bool, m_active,
161 &QDeclarativePositionSource::setActive,
162 &QDeclarativePositionSource::activeChanged, false)
163
164 Q_OBJECT_BINDABLE_PROPERTY(QDeclarativePositionSource, QDeclarativePosition *, m_position)
165
166 Q_OBJECT_BINDABLE_PROPERTY_WITH_ARGS(QDeclarativePositionSource, SourceError, m_sourceError,
167 NoError)
168
169 Q_OBJECT_COMPUTED_PROPERTY(QDeclarativePositionSource, PositioningMethods,
170 m_supportedPositioningMethods,
171 &QDeclarativePositionSource::supportedMethodsActualComputation)
172
173 Q_OBJECT_COMPUTED_PROPERTY(QDeclarativePositionSource, bool, m_isValid,
174 &QDeclarativePositionSource::isValidActualComputation)
175
176 quint8 m_singleUpdate : 1;
177 quint8 m_regularUpdates : 1;
178 quint8 m_componentComplete : 1;
179 quint8 m_parametersInitialized : 1;
180 quint8 m_startRequested : 1;
181 quint8 m_defaultSourceUsed : 1;
182};
183
184QT_END_NAMESPACE
185
186QML_DECLARE_TYPE(QDeclarativePositionSource)
187
188#endif