Revision control

Copy as Markdown

// Copyright (C) 2022 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
// Qt-Security score:significant reason:default
#ifndef QDECLARATIVESATELLITESOURCE_H
#define QDECLARATIVESATELLITESOURCE_H
//
// W A R N I N G
// -------------
//
// This file is not part of the Qt API. It exists purely as an
// implementation detail. This header file may change from version to
// version without notice, or even be removed.
//
// We mean it.
//
#include <QtCore/private/qproperty_p.h>
#include <QtCore/QObject>
#include <QtPositioning/qgeosatelliteinfosource.h>
#include <QtPositioningQuick/private/qdeclarativepluginparameter_p.h>
#include <QtPositioningQuick/private/qpositioningquickglobal_p.h>
#include <QtQml/QQmlParserStatus>
QT_BEGIN_NAMESPACE
class Q_POSITIONINGQUICK_EXPORT QDeclarativeSatelliteSource : public QObject, public QQmlParserStatus
{
Q_OBJECT
QML_NAMED_ELEMENT(SatelliteSource)
QML_ADDED_IN_VERSION(6, 5)
Q_PROPERTY(bool active READ isActive WRITE setActive NOTIFY activeChanged)
Q_PROPERTY(bool valid READ isValid NOTIFY validityChanged)
Q_PROPERTY(int updateInterval READ updateInterval WRITE setUpdateInterval
NOTIFY updateIntervalChanged)
Q_PROPERTY(SourceError sourceError READ sourceError NOTIFY sourceErrorChanged)
Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged)
Q_PROPERTY(QQmlListProperty<QDeclarativePluginParameter> parameters READ parameters)
Q_PROPERTY(QList<QGeoSatelliteInfo> satellitesInUse READ satellitesInUse
NOTIFY satellitesInUseChanged)
Q_PROPERTY(QList<QGeoSatelliteInfo> satellitesInView READ satellitesInView
NOTIFY satellitesInViewChanged)
Q_CLASSINFO("DefaultProperty", "parameters")
Q_INTERFACES(QQmlParserStatus)
public:
enum SourceError {
AccessError = QGeoSatelliteInfoSource::AccessError,
ClosedError = QGeoSatelliteInfoSource::ClosedError,
NoError = QGeoSatelliteInfoSource::NoError,
UnknownSourceError = QGeoSatelliteInfoSource::UnknownSourceError,
UpdateTimeoutError = QGeoSatelliteInfoSource::UpdateTimeoutError,
};
Q_ENUM(SourceError)
QDeclarativeSatelliteSource();
~QDeclarativeSatelliteSource();
bool isActive() const;
bool isValid() const;
int updateInterval() const;
SourceError sourceError() const;
QString name() const;
QQmlListProperty<QDeclarativePluginParameter> parameters();
QList<QGeoSatelliteInfo> satellitesInUse() const;
QList<QGeoSatelliteInfo> satellitesInView() const;
void setUpdateInterval(int updateInterval);
void setActive(bool active);
void setName(const QString &name);
// virtuals from QQmlParserStatus
void classBegin() override { }
void componentComplete() override;
Q_INVOKABLE bool setBackendProperty(const QString &name, const QVariant &value);
Q_INVOKABLE QVariant backendProperty(const QString &name) const;
public Q_SLOTS:
void update(int timeout = 0);
void start();
void stop();
Q_SIGNALS:
void activeChanged();
void validityChanged();
void updateIntervalChanged();
void sourceErrorChanged();
void nameChanged();
void satellitesInUseChanged();
void satellitesInViewChanged();
private Q_SLOTS:
void sourceErrorReceived(const QGeoSatelliteInfoSource::Error error);
void onParameterInitialized();
void satellitesInViewUpdateReceived(const QList<QGeoSatelliteInfo> &satellites);
void satellitesInUseUpdateReceived(const QList<QGeoSatelliteInfo> &satellites);
private:
QVariantMap parameterMap() const;
void createSource(const QString &newName);
void handleSingleUpdateReceived();
void executeStart();
void executeSingleUpdate(int timeout);
using PluginParameterProperty = QQmlListProperty<QDeclarativePluginParameter>;
static void parameter_append(PluginParameterProperty *prop,
QDeclarativePluginParameter *parameter);
static qsizetype parameter_count(PluginParameterProperty *prop);
static QDeclarativePluginParameter *parameter_at(PluginParameterProperty *prop,
qsizetype index);
static void parameter_clear(PluginParameterProperty *prop);
std::unique_ptr<QGeoSatelliteInfoSource> m_source;
QList<QDeclarativePluginParameter *> m_parameters;
int m_updateInterval = 0;
SourceError m_error = SourceError::NoError;
QString m_name;
QList<QGeoSatelliteInfo> m_satellitesInView;
QList<QGeoSatelliteInfo> m_satellitesInUse;
int m_singleUpdateDesiredTimeout = 0;
quint8 m_active : 1;
quint8 m_componentComplete : 1;
quint8 m_parametersInitialized : 1;
quint8 m_startRequested : 1;
quint8 m_defaultSourceUsed : 1;
quint8 m_regularUpdates : 1;
quint8 m_singleUpdate : 1;
quint8 m_singleUpdateRequested : 1;
};
QT_END_NAMESPACE
#endif // QDECLARATIVESATELLITESOURCE_H