diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-02-26 16:03:40 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2018-04-09 14:29:20 +0000 |
commit | 5457317c0ffbbb7e0c285a6899709be78f693b87 (patch) | |
tree | a7734905041606c26f6d4a9f7cfefdb277e6a53c /src/positioningquick | |
parent | 498db2f51ae0c509e57473207c34253f78e6f429 (diff) | |
download | qtlocation-5457317c0ffbbb7e0c285a6899709be78f693b87.tar.gz |
Add QGeoPositionInfoSource::supportedPositioningMethodsChanged
The signal is meant to be emitted by backends
Task-number: QTBUG-66427
Change-Id: I8bc123e358dc76489b5eac85f397cd7f40072335
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/positioningquick')
-rw-r--r-- | src/positioningquick/qdeclarativepositionsource.cpp | 30 | ||||
-rw-r--r-- | src/positioningquick/qdeclarativepositionsource_p.h | 1 |
2 files changed, 22 insertions, 9 deletions
diff --git a/src/positioningquick/qdeclarativepositionsource.cpp b/src/positioningquick/qdeclarativepositionsource.cpp index ec462f23..c9fd2c8e 100644 --- a/src/positioningquick/qdeclarativepositionsource.cpp +++ b/src/positioningquick/qdeclarativepositionsource.cpp @@ -177,11 +177,10 @@ void QDeclarativePositionSource::setName(const QString &newName) PositioningMethods previousPositioningMethods = supportedPositioningMethods(); PositioningMethods previousPreferredPositioningMethods = preferredPositioningMethods(); - delete m_positionSource; if (newName.isEmpty()) - m_positionSource = QGeoPositionInfoSource::createDefaultSource(this); + setSource(QGeoPositionInfoSource::createDefaultSource(this)); else - m_positionSource = QGeoPositionInfoSource::createSource(newName, this); + setSource(QGeoPositionInfoSource::createSource(newName, this)); if (m_positionSource) { connect(m_positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)), @@ -280,8 +279,7 @@ void QDeclarativePositionSource::setNmeaSource(const QUrl &nmeaSource) // because QNmeaPositionInfoSource can be bound only to a one file. delete m_nmeaSocket; m_nmeaSocket = 0; - delete m_positionSource; - m_positionSource = 0; + setSource(nullptr); setPosition(QGeoPositionInfo()); // Create the NMEA source based on the given data. QML has automatically set QUrl // type to point to correct path. If the file is not found, check if the file actually @@ -296,7 +294,7 @@ void QDeclarativePositionSource::setNmeaSource(const QUrl &nmeaSource) #ifdef QDECLARATIVE_POSITION_DEBUG qDebug() << "QDeclarativePositionSource NMEA File was found: " << localFileName; #endif - m_positionSource = new QNmeaPositionInfoSource(QNmeaPositionInfoSource::SimulationMode); + setSource(new QNmeaPositionInfoSource(QNmeaPositionInfoSource::SimulationMode)); (qobject_cast<QNmeaPositionInfoSource *>(m_positionSource))->setUserEquivalentRangeError(2.5); // it is internally multiplied by 2 in qlocationutils_readGga (qobject_cast<QNmeaPositionInfoSource *>(m_positionSource))->setDevice(m_nmeaFile); connect(m_positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)), @@ -345,9 +343,9 @@ void QDeclarativePositionSource::socketConnected() // because QNmeaPositionInfoSource can be bound only to a one file. delete m_nmeaFile; m_nmeaFile = 0; - delete m_positionSource; + setSource(nullptr); - m_positionSource = new QNmeaPositionInfoSource(QNmeaPositionInfoSource::RealTimeMode); + setSource(new QNmeaPositionInfoSource(QNmeaPositionInfoSource::RealTimeMode)); (qobject_cast<QNmeaPositionInfoSource *>(m_positionSource))->setDevice(m_nmeaSocket); connect(m_positionSource, &QNmeaPositionInfoSource::positionUpdated, @@ -419,6 +417,20 @@ void QDeclarativePositionSource::setPosition(const QGeoPositionInfo &pi) 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::supportedPositioningMethodsChanged); + } +} + /*! \internal */ @@ -712,7 +724,7 @@ void QDeclarativePositionSource::componentComplete() PositioningMethods previousPositioningMethods = supportedPositioningMethods(); PositioningMethods previousPreferredPositioningMethods = preferredPositioningMethods(); - m_positionSource = QGeoPositionInfoSource::createDefaultSource(this); + setSource(QGeoPositionInfoSource::createDefaultSource(this)); if (m_positionSource) { connect(m_positionSource, SIGNAL(positionUpdated(QGeoPositionInfo)), this, SLOT(positionUpdateReceived(QGeoPositionInfo))); diff --git a/src/positioningquick/qdeclarativepositionsource_p.h b/src/positioningquick/qdeclarativepositionsource_p.h index bb9b618a..39bcd899 100644 --- a/src/positioningquick/qdeclarativepositionsource_p.h +++ b/src/positioningquick/qdeclarativepositionsource_p.h @@ -153,6 +153,7 @@ private Q_SLOTS: private: void setPosition(const QGeoPositionInfo &pi); + void setSource(QGeoPositionInfoSource *source); QGeoPositionInfoSource *m_positionSource; QDeclarativePosition m_position; |