summaryrefslogtreecommitdiff
path: root/src/positioningquick/qdeclarativepositionsource.cpp
diff options
context:
space:
mode:
authorIvan Solovev <ivan.solovev@qt.io>2021-10-21 17:27:08 +0200
committerIvan Solovev <ivan.solovev@qt.io>2021-11-02 09:46:33 +0200
commit6db775f6d9d72cf8ee9d66333b8424e74be1e352 (patch)
tree0a293756b61619a91970d9368a0449b7bf922728 /src/positioningquick/qdeclarativepositionsource.cpp
parent5a1f44c3d41febca8480c077bd4c34e5a3332cdc (diff)
downloadqtlocation-6.2.2.tar.gz
Remove QtPositioning module from qtlocation.git6.2.46.2.36.2.26.2
Turns out that our CI does not support repos without any tests. This is treated like an error and leads to integration failure. This patch fixes it by disabling tests in coin/module_config.yaml. This config should be fixed when QtLocation tests are enabled Task-number: QTBUG-97084 Change-Id: Ib06e865fe2836806bbbee34345f06b471dd48660 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Alex Blasche <alexander.blasche@qt.io> (cherry picked from commit 23f32792ad53e23bbafbff6d7667f0bb0f69fc53)
Diffstat (limited to 'src/positioningquick/qdeclarativepositionsource.cpp')
-rw-r--r--src/positioningquick/qdeclarativepositionsource.cpp913
1 files changed, 0 insertions, 913 deletions
diff --git a/src/positioningquick/qdeclarativepositionsource.cpp b/src/positioningquick/qdeclarativepositionsource.cpp
deleted file mode 100644
index 5a84c788..00000000
--- a/src/positioningquick/qdeclarativepositionsource.cpp
+++ /dev/null
@@ -1,913 +0,0 @@
-/****************************************************************************
-**
-** Copyright (C) 2021 The Qt Company Ltd.
-** Contact: https://www.qt.io/licensing/
-**
-** This file is part of the QtPositioning module of the Qt Toolkit.
-**
-** $QT_BEGIN_LICENSE:LGPL$
-** Commercial License Usage
-** Licensees holding valid commercial Qt licenses may use this file in
-** accordance with the commercial license agreement provided with the
-** Software or, alternatively, in accordance with the terms contained in
-** a written agreement between you and The Qt Company. For licensing terms
-** and conditions see https://www.qt.io/terms-conditions. For further
-** information use the contact form at https://www.qt.io/contact-us.
-**
-** GNU Lesser General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU Lesser
-** General Public License version 3 as published by the Free Software
-** Foundation and appearing in the file LICENSE.LGPL3 included in the
-** packaging of this file. Please review the following information to
-** ensure the GNU Lesser General Public License version 3 requirements
-** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
-**
-** GNU General Public License Usage
-** Alternatively, this file may be used under the terms of the GNU
-** General Public License version 2.0 or (at your option) the GNU General
-** Public license version 3 or any later version approved by the KDE Free
-** Qt Foundation. The licenses are as published by the Free Software
-** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
-** included in the packaging of this file. Please review the following
-** information to ensure the GNU General Public License requirements will
-** be met: https://www.gnu.org/licenses/gpl-2.0.html and
-** https://www.gnu.org/licenses/gpl-3.0.html.
-**
-** $QT_END_LICENSE$
-**
-****************************************************************************/
-
-#include "qdeclarativepositionsource_p.h"
-#include "qdeclarativeposition_p.h"
-
-#include <QtCore/QCoreApplication>
-#include <QtQml/qqmlinfo.h>
-#include <QtQml/qqml.h>
-#include <qdeclarativepluginparameter_p.h>
-#include <QFile>
-#include <QtNetwork/QTcpSocket>
-#include <QTimer>
-
-QT_BEGIN_NAMESPACE
-
-/*!
- \qmltype PositionSource
- //! \instantiates QDeclarativePositionSource
- \inqmlmodule QtPositioning
- \since 5.2
-
- \brief The PositionSource type provides the device's current position.
-
- The PositionSource type provides information about the user device's
- current position. The position is available as a \l{Position} type, which
- contains all the standard parameters typically available from GPS and other
- similar systems, including longitude, latitude, speed and accuracy details.
-
- As different position sources are available on different platforms and
- devices, these are categorized by their basic type (Satellite, NonSatellite,
- and AllPositioningMethods). The available methods for the current platform
- can be enumerated in the \l{supportedPositioningMethods} property.
-
- To indicate which methods are suitable for your application, set the
- \l{preferredPositioningMethods} property. If the preferred methods are not
- available, the default source of location data for the platform will be
- chosen instead. If no default source is available (because none are installed
- for the runtime platform, or because it is disabled), the \l{valid} property
- will be set to false.
-
- The \l updateInterval property can then be used to indicate how often your
- application wishes to receive position updates. The \l{start}(),
- \l{stop}() and \l{update}() methods can be used to control the operation
- of the PositionSource, as well as the \l{active} property, which when set
- is equivalent to calling \l{start}() or \l{stop}().
-
- When the PositionSource is active, position updates can be retrieved
- either by simply using the \l{position} property in a binding (as the
- value of another item's property), or by providing an implementation of
- the \c {onPositionChanged} signal-handler.
-
- \section2 Example Usage
-
- The following example shows a simple PositionSource used to receive
- updates every second and print the longitude and latitude out to
- the console.
-
- \code
- PositionSource {
- id: src
- updateInterval: 1000
- active: true
-
- onPositionChanged: {
- var coord = src.position.coordinate;
- console.log("Coordinate:", coord.longitude, coord.latitude);
- }
- }
- \endcode
-
- The \l{geoflickr}{GeoFlickr} example application shows how to use
- a PositionSource in your application to retrieve local data for users
- from a REST web service.
-
- \section2 Controlling Operation State
-
- As it's mentioned above, PositionSource provides two ways to control its
- operation state:
-
- \list
- \li By using the \l active \l {Qt Bindable Properties}{bindable} property.
- \li By using \l start() and \l stop() methods.
- \endlist
-
- \note It's very important not to mix these approaches. If a bindable
- \l active property is used to control the PositionSource object, but later
- \l start() or \l stop() is called from the other part of the code, the
- binding is broken, which may result in, for example, a UI element that is
- not connected to any underlying object anymore.
-
- Consider the following example of \b {bad code} where the \c active property
- is bound to the CheckBox state, and calling \l stop() in the \c onClicked
- signal handler breaks that binding.
-
- \qml
- Window {
- width: 640
- height: 480
- visible: true
-
- PositionSource {
- id: posSource
- name: "geoclue2"
- active: cb.checked
- }
-
- Column {
- anchors.centerIn: parent
- spacing: 20
- CheckBox {
- id: cb
- }
- Button {
- id: btn
- text: "Stop"
- onClicked: {
- posSource.stop()
- }
- }
- }
- }
- \endqml
-
- Once the \e Stop button is clicked, \l stop() is executed, and the binding
- for the \l active property is broken. At this point the CheckBox UI element
- is no longer controlling the PositionSource object.
-
- A straightforward fix in this case is to update the CheckBox state from
- the \c onClicked handler. As soon as the CheckBox is unchecked, the
- \l active property will be notified, and the PositionSource object's state
- will update accordingly. The UI will also be in a consistent state.
-
- \qml
- Button {
- id: btn
- text: "Stop"
- onClicked: {
- cb.checked = false
- }
- }
- \endqml
-
- \note Using \l update() to request a single position update \e {does not}
- have any effect on the \l active property's bindings, so they can be used
- together without any problems.
-
- \sa {QtPositioning::Position}, {QGeoPositionInfoSource}, {PluginParameter},
- {Qt Bindable Properties}
-
-*/
-
-QDeclarativePositionSource::QDeclarativePositionSource()
-{
- m_position.setValueBypassingBindings(new QDeclarativePosition(this));
-}
-
-QDeclarativePositionSource::~QDeclarativePositionSource()
-{
- delete m_positionSource;
-}
-
-
-/*!
- \qmlproperty string PositionSource::name
-
- This property holds the unique internal name for the plugin currently
- providing position information.
-
- Setting the property causes the PositionSource to use a particular positioning provider. If
- the PositionSource is active at the time that the name property is changed, it will become
- inactive. If the specified positioning provider cannot be loaded the position source will
- become invalid.
-
- Changing the name property may cause the \l {updateInterval}, \l {supportedPositioningMethods}
- and \l {preferredPositioningMethods} properties to change as well.
-*/
-
-
-QString QDeclarativePositionSource::name() const
-{
- return m_sourceName;
-}
-
-void QDeclarativePositionSource::setName(const QString &newName)
-{
- m_sourceName.removeBindingUnlessInWrapper();
- if (m_positionSource && m_positionSource->sourceName() == newName)
- return;
-
- if (newName.isEmpty() && m_defaultSourceUsed)
- return; // previously attached to a default source, now requesting the same.
-
- const QString previousName = name();
-
- if (!m_componentComplete || !m_parametersInitialized) {
- if (previousName != newName) {
- m_sourceName.setValueBypassingBindings(newName);
- m_sourceName.notify();
- }
- return;
- }
-
- // tryAttach() will update the m_sourceName correctly
- tryAttach(newName, false);
-}
-
-QBindable<QString> QDeclarativePositionSource::bindableName()
-{
- return QBindable<QString>(&m_sourceName);
-}
-
-QBindable<QDeclarativePosition *> QDeclarativePositionSource::bindablePosition() const
-{
- return QBindable<QDeclarativePosition *>(&m_position);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePositionSource::tryAttach(const QString &newName, bool useFallback)
-{
- const QString previousName = name();
- const bool sourceExisted = (m_positionSource != nullptr);
-
- int previousUpdateInterval = updateInterval();
- PositioningMethods previousPositioningMethods = supportedPositioningMethods();
- PositioningMethods previousPreferredPositioningMethods = preferredPositioningMethods();
-
- m_defaultSourceUsed = false;
-
- if (newName.isEmpty()) {
- setSource(QGeoPositionInfoSource::createDefaultSource(parameterMap(), this));
- m_defaultSourceUsed = true;
- } else {
- setSource(QGeoPositionInfoSource::createSource(newName, parameterMap(), this));
- if (!m_positionSource && useFallback) {
- setSource(QGeoPositionInfoSource::createDefaultSource(parameterMap(), this));
- m_defaultSourceUsed = true;
- }
- }
-
- if (m_positionSource) {
- m_sourceName.setValueBypassingBindings(m_positionSource->sourceName());
-
- connect(m_positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
- this, SLOT(positionUpdateReceived(QGeoPositionInfo)));
- connect(m_positionSource, SIGNAL(errorOccurred(QGeoPositionInfoSource::Error)),
- this, SLOT(sourceErrorReceived(QGeoPositionInfoSource::Error)));
-
- m_positionSource->setUpdateInterval(m_updateInterval);
- m_positionSource->setPreferredPositioningMethods(
- static_cast<QGeoPositionInfoSource::PositioningMethods>(int(m_preferredPositioningMethods)));
-
- const QGeoPositionInfo &lastKnown = m_positionSource->lastKnownPosition();
- if (lastKnown.isValid())
- setPosition(lastKnown);
- } else {
- m_sourceName.setValueBypassingBindings(newName);
- m_defaultSourceUsed = false;
- if (m_active) {
- // We do not want to break the binding here, because we just want to
- // give the user an opportunity to select another plugin and keep
- // working.
- m_active.setValueBypassingBindings(false);
- m_active.notify();
- }
- }
-
- if (previousUpdateInterval != updateInterval())
- emit updateIntervalChanged();
-
- if (previousPreferredPositioningMethods != preferredPositioningMethods())
- emit preferredPositioningMethodsChanged();
-
- if (previousPositioningMethods != supportedPositioningMethods())
- notifySupportedPositioningMethodsChanged();
-
- const bool sourceCurrentlyExists = (m_positionSource != nullptr);
- if (sourceExisted != sourceCurrentlyExists) {
- m_isValid.notify();
- emit validityChanged();
- }
-
- if (m_active) { // implies m_positionSource
- if (!sourceExisted) {
- // delay ensures all properties have been set
- QTimer::singleShot(0, this, [this]() { executeStart(); });
- } else {
- // New source is set. It should be inactive by default.
- // But we do not want to break the binding.
- m_active.setValueBypassingBindings(false);
- m_active.notify();
- }
- }
-
- if (previousName != m_sourceName)
- m_sourceName.notify();
-}
-
-/*!
- \qmlproperty bool PositionSource::valid
-
- This property is true if the PositionSource object has acquired a valid
- backend plugin to provide data. If false, other methods on the PositionSource
- will have no effect.
-
- Applications should check this property to determine whether positioning is
- available and enabled on the runtime platform, and react accordingly.
-*/
-bool QDeclarativePositionSource::isValid() const
-{
- return m_isValid.value();
-}
-
-QBindable<bool> QDeclarativePositionSource::bindableIsValid() const
-{
- return QBindable<bool>(&m_isValid);
-}
-
-bool QDeclarativePositionSource::isValidActualComputation() const
-{
- return m_positionSource != nullptr;
-}
-
-void QDeclarativePositionSource::handleUpdateTimeout()
-{
- // notify will be called by the calling method
- m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::UpdateTimeoutError);
-
- if (!m_active)
- return;
-
- if (m_singleUpdate) {
- m_singleUpdate = false;
-
- if (!m_regularUpdates) {
- // only singleUpdate based timeouts change activity
- // continuous updates may resume again
- // (see QGeoPositionInfoSource::startUpdates())
- m_active.setValueBypassingBindings(false);
- m_active.notify();
- }
- }
-}
-
-/*!
- \internal
-*/
-void QDeclarativePositionSource::onParameterInitialized()
-{
- m_parametersInitialized = true;
- for (QDeclarativePluginParameter *p: qAsConst(m_parameters)) {
- if (!p->isInitialized()) {
- m_parametersInitialized = false;
- break;
- }
- }
-
- // If here, componentComplete has been called.
- if (m_parametersInitialized)
- tryAttach(m_sourceName.value());
-}
-
-void QDeclarativePositionSource::notifySupportedPositioningMethodsChanged()
-{
- m_supportedPositioningMethods.notify();
- emit supportedPositioningMethodsChanged();
-}
-
-void QDeclarativePositionSource::setPosition(const QGeoPositionInfo &pi)
-{
- m_position.value()->setPosition(pi);
- m_position.notify();
- emit positionChanged();
-}
-
-void QDeclarativePositionSource::setSource(QGeoPositionInfoSource *source)
-{
- if (m_positionSource)
- delete m_positionSource;
-
- if (!source) {
- m_positionSource = nullptr;
- } else {
- m_positionSource = source;
- connect(m_positionSource, &QGeoPositionInfoSource::supportedPositioningMethodsChanged,
- this, &QDeclarativePositionSource::notifySupportedPositioningMethodsChanged);
- }
-}
-
-bool QDeclarativePositionSource::parametersReady()
-{
- for (const QDeclarativePluginParameter *p: qAsConst(m_parameters)) {
- if (!p->isInitialized())
- return false;
- }
- return true;
-}
-
-/*!
- \internal
-*/
-QVariantMap QDeclarativePositionSource::parameterMap() const
-{
- QVariantMap map;
-
- for (int i = 0; i < m_parameters.size(); ++i) {
- QDeclarativePluginParameter *parameter = m_parameters.at(i);
- map.insert(parameter->name(), parameter->value());
- }
-
- return map;
-}
-
-/*!
- \internal
-*/
-void QDeclarativePositionSource::setUpdateInterval(int updateInterval)
-{
- if (m_positionSource) {
- int previousUpdateInterval = m_positionSource->updateInterval();
-
- m_updateInterval = updateInterval;
-
- if (previousUpdateInterval != updateInterval) {
- m_positionSource->setUpdateInterval(updateInterval);
- if (previousUpdateInterval != m_positionSource->updateInterval())
- emit updateIntervalChanged();
- }
- } else {
- if (m_updateInterval != updateInterval) {
- m_updateInterval = updateInterval;
- emit updateIntervalChanged();
- }
- }
-}
-
-/*!
- \qmlproperty int PositionSource::updateInterval
-
- This property holds the desired interval between updates (milliseconds).
-
- \sa {QGeoPositionInfoSource::updateInterval()}
-*/
-
-int QDeclarativePositionSource::updateInterval() const
-{
- if (!m_positionSource)
- return m_updateInterval;
-
- return m_positionSource->updateInterval();
-}
-
-/*!
- \qmlproperty enumeration PositionSource::supportedPositioningMethods
-
- This property holds the supported positioning methods of the
- current source.
-
- \list
- \li PositionSource.NoPositioningMethods - No positioning methods supported (no source).
- \li PositionSource.SatellitePositioningMethods - Satellite-based positioning methods such as GPS are supported.
- \li PositionSource.NonSatellitePositioningMethods - Non-satellite-based methods are supported.
- \li PositionSource.AllPositioningMethods - Both satellite-based and non-satellite positioning methods are supported.
- \endlist
-
-*/
-
-QDeclarativePositionSource::PositioningMethods
-QDeclarativePositionSource::supportedPositioningMethods() const
-{
- return m_supportedPositioningMethods.value();
-}
-
-QDeclarativePositionSource::PositioningMethods
-QDeclarativePositionSource::supportedMethodsActualComputation() const
-{
- if (m_positionSource) {
- return static_cast<QDeclarativePositionSource::PositioningMethods>(
- int(m_positionSource->supportedPositioningMethods()));
- }
- return QDeclarativePositionSource::NoPositioningMethods;
-}
-
-QBindable<QDeclarativePositionSource::PositioningMethods>
-QDeclarativePositionSource::bindableSupportedPositioningMethods() const
-{
- return QBindable<PositioningMethods>(&m_supportedPositioningMethods);
-}
-
-/*!
- \qmlproperty enumeration PositionSource::preferredPositioningMethods
-
- This property holds the preferred positioning methods of the
- current source.
-
- \list
- \li PositionSource.NoPositioningMethods - No positioning method is preferred.
- \li PositionSource.SatellitePositioningMethods - Satellite-based positioning methods such as GPS should be preferred.
- \li PositionSource.NonSatellitePositioningMethods - Non-satellite-based methods should be preferred.
- \li PositionSource.AllPositioningMethods - Any positioning methods are acceptable.
- \endlist
-
-*/
-
-void QDeclarativePositionSource::setPreferredPositioningMethods(PositioningMethods methods)
-{
- if (m_positionSource) {
- PositioningMethods previousPreferredPositioningMethods = preferredPositioningMethods();
-
- m_preferredPositioningMethods = methods;
-
- if (previousPreferredPositioningMethods != methods) {
- m_positionSource->setPreferredPositioningMethods(
- static_cast<QGeoPositionInfoSource::PositioningMethods>(int(methods)));
- if (previousPreferredPositioningMethods != m_positionSource->preferredPositioningMethods())
- emit preferredPositioningMethodsChanged();
- }
- } else {
- if (m_preferredPositioningMethods != methods) {
- m_preferredPositioningMethods = methods;
- emit preferredPositioningMethodsChanged();
- }
- }
-}
-
-QDeclarativePositionSource::PositioningMethods QDeclarativePositionSource::preferredPositioningMethods() const
-{
- if (m_positionSource) {
- return static_cast<QDeclarativePositionSource::PositioningMethods>(
- int(m_positionSource->preferredPositioningMethods()));
- }
- return m_preferredPositioningMethods;
-}
-
-/*!
- \qmlmethod PositionSource::start()
-
- Requests updates from the location source.
- Uses \l updateInterval if set, default interval otherwise.
- If there is no source available, this method has no effect.
-
- \note Calling this method breaks the bindings of
- \l {PositionSource::}{active} property.
-
- \sa stop, update, active
-*/
-
-void QDeclarativePositionSource::start()
-{
- if (m_positionSource) {
- m_active.removeBindingUnlessInWrapper();
- executeStart();
- }
-}
-
-/*!
- \qmlmethod PositionSource::update(int timeout)
-
- A convenience method to request single update from the location source.
- If there is no source available, this method has no effect.
-
- If the position source is not active, it will be activated for as
- long as it takes to receive an update, or until the request times
- out. The request timeout period is source-specific.
-
- The \a timeout is specified in milliseconds. If the \a timeout is zero
- (the default value), it defaults to a reasonable timeout period as
- appropriate for the source.
-
- \sa start, stop, active
-*/
-
-void QDeclarativePositionSource::update(int timeout)
-{
- if (m_positionSource) {
- m_singleUpdate = true;
- if (!m_active) {
- // Questionable: we do not want this method to break the binding.
- // Mostly because it can be called while the updates are already
- // running.
- m_active.setValueBypassingBindings(true);
- m_active.notify();
- }
- // Use default timeout value. Set active before calling the
- // update request because on some platforms there may
- // be results immediately.
- m_positionSource->requestUpdate(timeout);
- }
-}
-
-/*!
- \qmlmethod PositionSource::stop()
-
- Stops updates from the location source.
- If there is no source available or it is not active,
- this method has no effect.
-
- \note Calling this method breaks the bindings of
- \l {PositionSource::}{active} property.
-
- \sa start, update, active
-*/
-
-void QDeclarativePositionSource::stop()
-{
- if (m_positionSource) {
- m_positionSource->stopUpdates();
- m_regularUpdates = false;
- // Try to break the binding even if we do not actually need to update
- // the active state. The m_active can be updated later, when the
- // single update request finishes.
- m_active.removeBindingUnlessInWrapper();
- if (m_active && !m_singleUpdate) {
- m_active.setValueBypassingBindings(false);
- m_active.notify();
- }
- }
-}
-
-/*!
- \qmlproperty bool PositionSource::active
-
- This property indicates whether the position source is active.
- Setting this property to false equals calling \l stop, and
- setting this property true equals calling \l start.
-
- \sa start, stop, update
-*/
-void QDeclarativePositionSource::setActive(bool active)
-{
- // We need to remove binding, if this method is called explicitly.
- // Other changes to m_active are done inside start() and stop() methods.
- m_active.removeBindingUnlessInWrapper();
- if (active == m_active)
- return;
-
- if (active) {
- // delay ensures all properties have been set
- QTimer::singleShot(0, this, [this]() { executeStart(); });
- } else {
- stop();
- }
-}
-
-bool QDeclarativePositionSource::isActive() const
-{
- return m_active;
-}
-
-/*!
- \qmlproperty Position PositionSource::position
-
- This property holds the last known positional data.
- It is a read-only property.
-
- The Position type has different positional member variables,
- whose validity can be checked with appropriate validity functions
- (for example sometimes an update does not have speed or altitude data).
-
- However, whenever a \c {positionChanged} signal has been received, at least
- position::coordinate::latitude, position::coordinate::longitude, and position::timestamp can
- be assumed to be valid.
-
- \sa start, stop, update
-*/
-
-QDeclarativePosition *QDeclarativePositionSource::position()
-{
- return m_position.value();
-}
-
-void QDeclarativePositionSource::positionUpdateReceived(const QGeoPositionInfo &update)
-{
- setPosition(update);
-
- if (m_singleUpdate && m_active) {
- // we need to reset m_singleUpdate because we got one
- m_singleUpdate = false;
- if (!m_regularUpdates) {
- // but we change the active state only if the regular updates are
- // also stopped
- m_active.setValueBypassingBindings(false);
- m_active.notify();
- }
- }
-}
-
-
-/*!
- \qmlproperty enumeration PositionSource::sourceError
-
- This property holds the error which last occurred with the PositionSource.
-
- \list
- \li PositionSource.AccessError - The connection setup to the remote positioning backend failed because the
- application lacked the required privileges.
- \li PositionSource.ClosedError - The positioning backend closed the connection, which happens for example in case
- the user is switching location services to off. As soon as the location service is re-enabled
- regular updates will resume.
- \li PositionSource.NoError - No error has occurred.
- \li PositionSource.UnknownSourceError - An unidentified error occurred.
- \li PositionSource.UpdateTimeoutError - The current position could not be
- retrieved within the specified timeout, or this PositionSource determined
- that it will not be able to provide further regular updates.
- \endlist
-
-*/
-
-QDeclarativePositionSource::SourceError QDeclarativePositionSource::sourceError() const
-{
- return m_sourceError;
-}
-
-QBindable<QDeclarativePositionSource::SourceError>
-QDeclarativePositionSource::bindableSourceError() const
-{
- return QBindable<QDeclarativePositionSource::SourceError>(&m_sourceError);
-}
-
-QGeoPositionInfoSource *QDeclarativePositionSource::positionSource() const
-{
- return m_positionSource;
-}
-
-/*!
- \qmlproperty list<PluginParameter> PositionSource::parameters
- \qmldefault
-
- This property holds the list of plugin parameters.
-
- \since QtPositioning 5.14
-*/
-QQmlListProperty<QDeclarativePluginParameter> QDeclarativePositionSource::parameters()
-{
- return QQmlListProperty<QDeclarativePluginParameter>(this,
- 0,
- parameter_append,
- parameter_count,
- parameter_at,
- parameter_clear);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePositionSource::parameter_append(QQmlListProperty<QDeclarativePluginParameter> *prop, QDeclarativePluginParameter *parameter)
-{
- QDeclarativePositionSource *p = static_cast<QDeclarativePositionSource *>(prop->object);
- p->m_parameters.append(parameter);
-}
-
-/*!
- \internal
-*/
-qsizetype QDeclarativePositionSource::parameter_count(QQmlListProperty<QDeclarativePluginParameter> *prop)
-{
- return static_cast<QDeclarativePositionSource *>(prop->object)->m_parameters.count();
-}
-
-/*!
- \internal
-*/
-QDeclarativePluginParameter *QDeclarativePositionSource::parameter_at(QQmlListProperty<QDeclarativePluginParameter> *prop, qsizetype index)
-{
- return static_cast<QDeclarativePositionSource *>(prop->object)->m_parameters[index];
-}
-
-/*!
- \internal
-*/
-void QDeclarativePositionSource::parameter_clear(QQmlListProperty<QDeclarativePluginParameter> *prop)
-{
- QDeclarativePositionSource *p = static_cast<QDeclarativePositionSource *>(prop->object);
- p->m_parameters.clear();
-}
-
-void QDeclarativePositionSource::executeStart()
-{
- if (m_positionSource) {
- m_positionSource->startUpdates();
-
- // If this method is called directly from start(), the binding is
- // already broken there (for the consistency with stop()).
- // If this method is called by a timer, started in setActive(), we do
- // not need to break the binding, because it was already done (if
- // needed).
-
- m_regularUpdates = true;
- if (!m_active) {
- m_active.setValueBypassingBindings(true);
- m_active.notify();
- }
- }
-}
-
-void QDeclarativePositionSource::componentComplete()
-{
- m_componentComplete = true;
- m_parametersInitialized = true;
- for (QDeclarativePluginParameter *p: qAsConst(m_parameters)) {
- if (!p->isInitialized()) {
- m_parametersInitialized = false;
- connect(p, &QDeclarativePluginParameter::initialized,
- this, &QDeclarativePositionSource::onParameterInitialized);
- }
- }
-
- if (m_parametersInitialized)
- tryAttach(m_sourceName.value());
-}
-
-/*!
- \qmlmethod bool PositionSource::setBackendProperty(string name, Variant value)
-
- Sets the backend-specific property named \a name to \a value.
- Returns true on success, false otherwise, including if called on an uninitialized PositionSource.
- Supported backend-specific properties are listed and described in
- \l {Qt Positioning plugins#Default plugins}.
-
- \since Qt Positioning 5.14
-
- \sa backendProperty, QGeoPositionInfoSource::setBackendProperty
-*/
-bool QDeclarativePositionSource::setBackendProperty(const QString &name, const QVariant &value)
-{
- if (m_positionSource)
- return m_positionSource->setBackendProperty(name, value);
- return false;
-}
-
-/*!
- \qmlmethod Variant PositionSource::backendProperty(string name)
-
- Returns the value of the backend-specific property named \a name, if present.
- Otherwise, including if called on an uninitialized PositionSource, the return value will be invalid.
- Supported backend-specific properties are listed and described in
- \l {Qt Positioning plugins#Default plugins}.
-
- \since Qt Positioning 5.14
-
- \sa backendProperty, QGeoPositionInfoSource::setBackendProperty
-*/
-QVariant QDeclarativePositionSource::backendProperty(const QString &name) const
-{
- if (m_positionSource)
- return m_positionSource->backendProperty(name);
- return QVariant();
-}
-
-QBindable<bool> QDeclarativePositionSource::bindableActive()
-{
- return QBindable<bool>(&m_active);
-}
-
-/*!
- \internal
-*/
-void QDeclarativePositionSource::sourceErrorReceived(const QGeoPositionInfoSource::Error error)
-{
- if (error == QGeoPositionInfoSource::AccessError)
- m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::AccessError);
- else if (error == QGeoPositionInfoSource::ClosedError)
- m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::ClosedError);
- else if (error == QGeoPositionInfoSource::UpdateTimeoutError)
- handleUpdateTimeout(); // also sets m_sourceError
- else if (error == QGeoPositionInfoSource::NoError)
- return; //nothing to do
- else
- m_sourceError.setValueBypassingBindings(QDeclarativePositionSource::UnknownSourceError);
-
- m_sourceError.notify();
- emit sourceErrorChanged();
-}
-
-QT_END_NAMESPACE