diff options
author | Ivan Solovev <ivan.solovev@qt.io> | 2021-01-29 15:32:58 +0100 |
---|---|---|
committer | Ivan Solovev <ivan.solovev@qt.io> | 2021-02-03 12:20:29 +0100 |
commit | 84330ea286c0b6abeefccb42499b0838fc5ec40c (patch) | |
tree | 10c4743fe274526915ea56eef09fdd0622022b1c /src/positioning/qgeopositioninfosource.cpp | |
parent | 6e20620fdc5a7e95410dfb740e9a09b0cab59930 (diff) | |
download | qtlocation-84330ea286c0b6abeefccb42499b0838fc5ec40c.tar.gz |
QtPositioning: add QObjectPrivate base for private classes
Refactor private classes of QGeoAreaMonitorSource, QGeoPositionInfoSource
and QGeoSatelliteInfoSource to inherit from QObjectPrivate.
This will help us to introduce new QProperty system for these classes.
Task-number: QTBUG-90491
Change-Id: I5774c8596372943ce595543c242c8e8c2405f647
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/positioning/qgeopositioninfosource.cpp')
-rw-r--r-- | src/positioning/qgeopositioninfosource.cpp | 68 |
1 files changed, 38 insertions, 30 deletions
diff --git a/src/positioning/qgeopositioninfosource.cpp b/src/positioning/qgeopositioninfosource.cpp index bad15cec..3f38cca9 100644 --- a/src/positioning/qgeopositioninfosource.cpp +++ b/src/positioning/qgeopositioninfosource.cpp @@ -46,6 +46,7 @@ #include <QJsonObject> #include <QCryptographicHash> #include <QtCore/private/qfactoryloader_p.h> +#include <QtCore/private/qthread_p.h> #include <algorithm> @@ -103,14 +104,20 @@ Q_GLOBAL_STATIC_WITH_ARGS(QFactoryLoader, loader, \value AllPositioningMethods Satellite-based positioning methods as soon as available. Otherwise non-satellite based methods. */ -QGeoPositionInfoSourcePrivate *QGeoPositionInfoSourcePrivate::get(const QGeoPositionInfoSource &source) +QGeoPositionInfoSourcePrivate::~QGeoPositionInfoSourcePrivate() { - return source.d; + } -QGeoPositionInfoSourcePrivate::~QGeoPositionInfoSourcePrivate() +QGeoPositionInfoSourceFactory *QGeoPositionInfoSourcePrivate::loadFactory(const QJsonObject &meta) { - + const int idx = static_cast<int>(meta.value(QStringLiteral("index")).toDouble()); + if (idx < 0) + return nullptr; + QObject *instance = loader()->instance(idx); + if (!instance) + return nullptr; + return qobject_cast<QGeoPositionInfoSourceFactory *>(instance); } void QGeoPositionInfoSourcePrivate::loadMeta() @@ -120,13 +127,9 @@ void QGeoPositionInfoSourcePrivate::loadMeta() void QGeoPositionInfoSourcePrivate::loadPlugin() { - int idx = int(metaData.value(QStringLiteral("index")).toDouble()); - if (idx < 0) - return; - QObject *instance = loader()->instance(idx); - if (!instance) - return; - factory = qobject_cast<QGeoPositionInfoSourceFactory *>(instance); + auto f = loadFactory(metaData); + if (f) + factory = f; } bool QGeoPositionInfoSourcePrivate::setBackendProperty(const QString &/*name*/, const QVariant & /*value*/) @@ -197,10 +200,10 @@ void QGeoPositionInfoSourcePrivate::loadPluginMetadata(QMultiHash<QString, QJson */ QGeoPositionInfoSource::QGeoPositionInfoSource(QObject *parent) - : QObject(parent), - d(new QGeoPositionInfoSourcePrivate) + : QObject(*new QGeoPositionInfoSourcePrivate, parent) { qRegisterMetaType<QGeoPositionInfo>(); + Q_D(QGeoPositionInfoSource); d->interval = 0; d->methods = {}; } @@ -210,7 +213,6 @@ QGeoPositionInfoSource::QGeoPositionInfoSource(QObject *parent) */ QGeoPositionInfoSource::~QGeoPositionInfoSource() { - delete d; } /*! @@ -223,6 +225,7 @@ QGeoPositionInfoSource::~QGeoPositionInfoSource() */ QString QGeoPositionInfoSource::sourceName() const { + Q_D(const QGeoPositionInfoSource); return d->metaData.value(QStringLiteral("Provider")).toString(); } @@ -239,6 +242,7 @@ QString QGeoPositionInfoSource::sourceName() const */ bool QGeoPositionInfoSource::setBackendProperty(const QString &name, const QVariant &value) { + Q_D(QGeoPositionInfoSource); return d->setBackendProperty(name, value); } @@ -253,6 +257,7 @@ bool QGeoPositionInfoSource::setBackendProperty(const QString &name, const QVari */ QVariant QGeoPositionInfoSource::backendProperty(const QString &name) const { + Q_D(const QGeoPositionInfoSource); return d->backendProperty(name); } @@ -280,11 +285,13 @@ QVariant QGeoPositionInfoSource::backendProperty(const QString &name) const */ void QGeoPositionInfoSource::setUpdateInterval(int msec) { + Q_D(QGeoPositionInfoSource); d->interval = msec; } int QGeoPositionInfoSource::updateInterval() const { + Q_D(const QGeoPositionInfoSource); return d->interval; } @@ -306,6 +313,7 @@ int QGeoPositionInfoSource::updateInterval() const */ void QGeoPositionInfoSource::setPreferredPositioningMethods(PositioningMethods methods) { + Q_D(QGeoPositionInfoSource); if (supportedPositioningMethods() != QGeoPositionInfoSource::NoPositioningMethods) { d->methods = methods & supportedPositioningMethods(); if (d->methods == 0) { @@ -321,19 +329,18 @@ void QGeoPositionInfoSource::setPreferredPositioningMethods(PositioningMethods m */ QGeoPositionInfoSource::PositioningMethods QGeoPositionInfoSource::preferredPositioningMethods() const { + Q_D(const QGeoPositionInfoSource); return d->methods; } -static QGeoPositionInfoSource* createSource_real(const QJsonObject &meta, const QVariantMap ¶meters, QObject *parent) +QGeoPositionInfoSource *QGeoPositionInfoSourcePrivate::createSourceReal(const QJsonObject &meta, const QVariantMap ¶meters, QObject *parent) { - QGeoPositionInfoSourcePrivate d; - d.metaData = meta; - d.loadPlugin(); QGeoPositionInfoSource *s = nullptr; - if (d.factory) - s = d.factory->positionInfoSource(parent, parameters); + auto factory = QGeoPositionInfoSourcePrivate::loadFactory(meta); + if (factory) + s = factory->positionInfoSource(parent, parameters); if (s) - QGeoPositionInfoSourcePrivate::get(*s)->metaData = d.metaData; + s->d_func()->metaData = meta; return s; } @@ -343,8 +350,9 @@ static QGeoPositionInfoSource* createSource_real(const QJsonObject &meta, const reads from the system's default sources of location data, or the plugin with the highest available priority. - Returns 0 if the system has no default position source, no valid plugins - could be found or the user does not have the permission to access the current position. + Returns \c nullptr if the system has no default position source, no valid + plugins could be found or the user does not have the permission to access + the current position. */ QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(QObject *parent) { @@ -356,7 +364,7 @@ QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(QObject *par reads from the system's default sources of location data, or the plugin with the highest available priority. - Returns nullptr if the system has no default position source, no valid plugins + Returns \c nullptr if the system has no default position source, no valid plugins could be found or the user does not have the permission to access the current position. This method passes \a parameters to the factory to configure the source. @@ -369,7 +377,7 @@ QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(const QVaria foreach (const QJsonObject &obj, plugins) { if (obj.value(QStringLiteral("Position")).isBool() && obj.value(QStringLiteral("Position")).toBool()) { - QGeoPositionInfoSource *source = createSource_real(obj, parameters, parent); + QGeoPositionInfoSource *source = QGeoPositionInfoSourcePrivate::createSourceReal(obj, parameters, parent); if (source) return source; } @@ -381,7 +389,7 @@ QGeoPositionInfoSource *QGeoPositionInfoSource::createDefaultSource(const QVaria Creates and returns a position source with the given \a parent, by loading the plugin named \a sourceName. - Returns 0 if the plugin cannot be found. + Returns \c nullptr if the plugin cannot be found. */ QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sourceName, QObject *parent) { @@ -392,7 +400,7 @@ QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sour Creates and returns a position source with the given \a parent, by loading the plugin named \a sourceName. - Returns nullptr if the plugin cannot be found. + Returns \c nullptr if the plugin cannot be found. This method passes \a parameters to the factory to configure the source. @@ -402,7 +410,7 @@ QGeoPositionInfoSource *QGeoPositionInfoSource::createSource(const QString &sour { auto plugins = QGeoPositionInfoSourcePrivate::plugins(); if (plugins.contains(sourceName)) - return createSource_real(plugins.value(sourceName), parameters, parent); + return QGeoPositionInfoSourcePrivate::createSourceReal(plugins.value(sourceName), parameters, parent); return nullptr; } @@ -425,10 +433,10 @@ QStringList QGeoPositionInfoSource::availableSources() } QGeoPositionInfoSource::QGeoPositionInfoSource(QGeoPositionInfoSourcePrivate &dd, QObject *parent) -: QObject(parent), - d(&dd) + : QObject(dd, parent) { qRegisterMetaType<QGeoPositionInfo>(); + Q_D(QGeoPositionInfoSource); d->interval = 0; d->methods = NoPositioningMethods; } |