diff options
author | Alex Blasche <alexander.blasche@theqtcompany.com> | 2015-02-25 13:39:34 +0100 |
---|---|---|
committer | Alex Blasche <alexander.blasche@theqtcompany.com> | 2015-02-26 08:23:23 +0000 |
commit | b6fbc5c6dc609ecd39fdb8ff416f4d90ddd0acad (patch) | |
tree | 1eee5b8513f5af30ce1959dce4ee9d8a17fe3995 /src/imports/positioning/qdeclarativepositionsource.cpp | |
parent | 29d5221f666aab83db010e7f4027e34804af020e (diff) | |
download | qtlocation-b6fbc5c6dc609ecd39fdb8ff416f4d90ddd0acad.tar.gz |
Add updateTimeout() signal to QML PositionSource type
QGeoPositionSource has such a signal which we need to forward to QML.
Without it QML apps have no way to dertermine a timeout based failure
situation.
Task-number: QTBUG-44663
Change-Id: I1f8da6a61851b4a8302c9558dd2b4a9088be3de5
Reviewed-by: Aaron McCarthy <mccarthy.aaron@gmail.com>
Diffstat (limited to 'src/imports/positioning/qdeclarativepositionsource.cpp')
-rw-r--r-- | src/imports/positioning/qdeclarativepositionsource.cpp | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/imports/positioning/qdeclarativepositionsource.cpp b/src/imports/positioning/qdeclarativepositionsource.cpp index ae5d916e..c5090fe2 100644 --- a/src/imports/positioning/qdeclarativepositionsource.cpp +++ b/src/imports/positioning/qdeclarativepositionsource.cpp @@ -107,6 +107,21 @@ QT_BEGIN_NAMESPACE */ +/*! + \qmlsignal PositionSource::updateTimeout() + + If \l update() was called, this signal is emitted if the current position could not be + retrieved within a certain amount of time. + + If \l start() was called, this signal is emitted if the position engine determines that + it is not able to provide further regular updates. + + \since Qt Positioning 5.5 + + \sa QGeoPositionInfoSource::updateTimeout() +*/ + + QDeclarativePositionSource::QDeclarativePositionSource() : m_positionSource(0), m_preferredPositioningMethods(NoPositioningMethods), m_nmeaFile(0), m_nmeaSocket(0), m_active(false), m_singleUpdate(false), m_updateInterval(0), @@ -167,6 +182,8 @@ void QDeclarativePositionSource::setName(const QString &newName) this, SLOT(positionUpdateReceived(QGeoPositionInfo))); connect(m_positionSource, SIGNAL(error(QGeoPositionInfoSource::Error)), this, SLOT(sourceErrorReceived(QGeoPositionInfoSource::Error))); + connect(m_positionSource, SIGNAL(updateTimeout()), + this, SLOT(updateTimeoutReceived())); m_positionSource->setUpdateInterval(m_updateInterval); m_positionSource->setPreferredPositioningMethods( @@ -277,6 +294,11 @@ void QDeclarativePositionSource::setNmeaSource(const QUrl &nmeaSource) (qobject_cast<QNmeaPositionInfoSource *>(m_positionSource))->setDevice(m_nmeaFile); connect(m_positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdateReceived(QGeoPositionInfo))); + connect(m_positionSource, SIGNAL(error(QGeoPositionInfoSource::Error)), + this, SLOT(sourceErrorReceived(QGeoPositionInfoSource::Error))); + connect(m_positionSource, SIGNAL(updateTimeout()), + this, SLOT(updateTimeoutReceived())); + setPosition(m_positionSource->lastKnownPosition()); if (m_active && !m_singleUpdate) { // Keep on updating even though source changed @@ -323,6 +345,10 @@ void QDeclarativePositionSource::socketConnected() connect(m_positionSource, &QNmeaPositionInfoSource::positionUpdated, this, &QDeclarativePositionSource::positionUpdateReceived); + connect(m_positionSource, SIGNAL(error(QGeoPositionInfoSource::Error)), + this, SLOT(sourceErrorReceived(QGeoPositionInfoSource::Error))); + connect(m_positionSource, SIGNAL(updateTimeout()), + this, SLOT(updateTimeoutReceived())); setPosition(m_positionSource->lastKnownPosition()); @@ -362,6 +388,24 @@ void QDeclarativePositionSource::socketError(QAbstractSocket::SocketError error) emit sourceErrorChanged(); } + +void QDeclarativePositionSource::updateTimeoutReceived() +{ + if (!m_active) + return; + + if (m_singleUpdate) { + m_singleUpdate = false; + + // only singleUpdate based timeouts change activity + // continuous updates may resume again (see QGeoPositionInfoSource::startUpdates()) + m_active = false; + emit activeChanged(); + } + + emit updateTimeout(); +} + void QDeclarativePositionSource::setPosition(const QGeoPositionInfo &pi) { m_position.setPosition(pi); @@ -663,6 +707,8 @@ void QDeclarativePositionSource::componentComplete() this, SLOT(positionUpdateReceived(QGeoPositionInfo))); connect(m_positionSource, SIGNAL(error(QGeoPositionInfoSource::Error)), this, SLOT(sourceErrorReceived(QGeoPositionInfoSource::Error))); + connect(m_positionSource, SIGNAL(updateTimeout()), + this, SLOT(updateTimeoutReceived())); m_positionSource->setUpdateInterval(m_updateInterval); m_positionSource->setPreferredPositioningMethods( |