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