diff options
author | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-02-10 19:05:56 +0100 |
---|---|---|
committer | Paolo Angelelli <paolo.angelelli@qt.io> | 2017-02-28 11:09:56 +0000 |
commit | ba2a82b7db86d96fc1f110b4bbc88408f47a5774 (patch) | |
tree | 66bb4e03d6cff164cac4161b4363e3444a78ad23 /src/location/maps/qgeomap.cpp | |
parent | 11e6a62957433843816b41ad11fada7ca8eab85c (diff) | |
download | qtlocation-ba2a82b7db86d96fc1f110b4bbc88408f47a5774.tar.gz |
Make QGeoCameraCapabilities independent of the engine
This patch makes it possible to change QGeoCameraCapabilites
at runtime, when the map type changes, to accommodate for
those plugins that offer different maps having different
capabilities.
This is then used to properly push the min/max zoom levels
for each map type in our OSM plugin.
Autotests are included.
Change-Id: I48532da77ffb3eaf2e752561395945c3a2c21985
Reviewed-by: Alex Blasche <alexander.blasche@qt.io>
Diffstat (limited to 'src/location/maps/qgeomap.cpp')
-rw-r--r-- | src/location/maps/qgeomap.cpp | 30 |
1 files changed, 26 insertions, 4 deletions
diff --git a/src/location/maps/qgeomap.cpp b/src/location/maps/qgeomap.cpp index 9d3f4efa..2419b79a 100644 --- a/src/location/maps/qgeomap.cpp +++ b/src/location/maps/qgeomap.cpp @@ -92,6 +92,12 @@ void QGeoMap::setCameraData(const QGeoCameraData &cameraData) emit cameraDataChanged(d->m_cameraData); } +void QGeoMap::setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities) +{ + Q_D(QGeoMap); + d->setCameraCapabilities(cameraCapabilities); +} + QGeoCameraData QGeoMap::cameraData() const { Q_D(const QGeoMap); @@ -104,6 +110,7 @@ void QGeoMap::setActiveMapType(const QGeoMapType type) if (type == d->m_activeMapType) return; d->m_activeMapType = type; + d->setCameraCapabilities(d->m_engine->cameraCapabilities(type)); // emits d->changeActiveMapType(type); emit activeMapTypeChanged(); } @@ -147,10 +154,7 @@ const QGeoProjection &QGeoMap::geoProjection() const QGeoCameraCapabilities QGeoMap::cameraCapabilities() const { Q_D(const QGeoMap); - if (!d->m_engine.isNull()) - return d->m_engine->cameraCapabilities(); - else - return QGeoCameraCapabilities(); + return d->m_cameraCapabilities; } void QGeoMap::prefetchData() @@ -232,6 +236,9 @@ QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine, QGeoProjection m_engine(engine), m_activeMapType(QGeoMapType()) { + // Setting the default camera caps without emitting anything + if (engine) + m_cameraCapabilities = m_engine->cameraCapabilities(m_activeMapType); } QGeoMapPrivate::~QGeoMapPrivate() @@ -240,6 +247,21 @@ QGeoMapPrivate::~QGeoMapPrivate() delete m_geoProjection; } +void QGeoMapPrivate::setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities) +{ + Q_Q(QGeoMap); + if (m_cameraCapabilities == cameraCapabilities) + return; + QGeoCameraCapabilities oldCaps = m_cameraCapabilities; + m_cameraCapabilities = cameraCapabilities; + emit q->cameraCapabilitiesChanged(oldCaps); +} + +const QGeoCameraCapabilities &QGeoMapPrivate::cameraCapabilities() const +{ + return m_cameraCapabilities; +} + void QGeoMapPrivate::addParameter(QGeoMapParameter *param) { Q_UNUSED(param) |