summaryrefslogtreecommitdiff
path: root/src/plugins/geoservices/osm
diff options
context:
space:
mode:
authorPaolo Angelelli <paolo.angelelli@qt.io>2017-02-10 19:05:56 +0100
committerPaolo Angelelli <paolo.angelelli@qt.io>2017-02-28 11:09:56 +0000
commitba2a82b7db86d96fc1f110b4bbc88408f47a5774 (patch)
tree66bb4e03d6cff164cac4161b4363e3444a78ad23 /src/plugins/geoservices/osm
parent11e6a62957433843816b41ad11fada7ca8eab85c (diff)
downloadqtlocation-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/plugins/geoservices/osm')
-rw-r--r--src/plugins/geoservices/osm/qgeotiledmaposm.cpp3
-rw-r--r--src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp26
-rw-r--r--src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h1
-rw-r--r--src/plugins/geoservices/osm/qgeotileproviderosm.cpp21
-rw-r--r--src/plugins/geoservices/osm/qgeotileproviderosm.h8
5 files changed, 47 insertions, 12 deletions
diff --git a/src/plugins/geoservices/osm/qgeotiledmaposm.cpp b/src/plugins/geoservices/osm/qgeotiledmaposm.cpp
index e31cbdd5..16799dc2 100644
--- a/src/plugins/geoservices/osm/qgeotiledmaposm.cpp
+++ b/src/plugins/geoservices/osm/qgeotiledmaposm.cpp
@@ -109,6 +109,9 @@ void QGeoTiledMapOsm::onProviderDataUpdated(const QGeoTileProviderOsm *provider)
if (copyRights.isEmpty() && provider->mapType().style() == QGeoMapType::CustomMap)
copyRights = m_engine->customCopyright();
+ // Update CameraCapabilities
+ setCameraCapabilities(provider->cameraCapabilities());
+
emit copyrightsChanged(copyRights);
}
diff --git a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp
index e9e48008..0e1fb356 100644
--- a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp
+++ b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.cpp
@@ -163,25 +163,25 @@ QGeoTiledMappingManagerEngineOsm::QGeoTiledMappingManagerEngineOsm(const QVarian
/* QGeoTileProviderOsms setup */
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::StreetMap, tr("Street Map"), tr("Street map view in daylight mode"), false, false, 1),
- providers_street ));
+ providers_street, cameraCaps ));
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::SatelliteMapDay, tr("Satellite Map"), tr("Satellite map view in daylight mode"), false, false, 2),
- providers_satellite ));
+ providers_satellite, cameraCaps ));
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::CycleMap, tr("Cycle Map"), tr("Cycle map view in daylight mode"), false, false, 3),
- providers_cycle ));
+ providers_cycle, cameraCaps ));
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::TransitMap, tr("Transit Map"), tr("Public transit map view in daylight mode"), false, false, 4),
- providers_transit ));
+ providers_transit, cameraCaps ));
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::TransitMap, tr("Night Transit Map"), tr("Public transit map view in night mode"), false, true, 5),
- providers_nighttransit ));
+ providers_nighttransit, cameraCaps ));
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::TerrainMap, tr("Terrain Map"), tr("Terrain map view"), false, false, 6),
- providers_terrain ));
+ providers_terrain, cameraCaps ));
m_providers.push_back( new QGeoTileProviderOsm( nm,
QGeoMapType(QGeoMapType::PedestrianMap, tr("Hiking Map"), tr("Hiking map view"), false, false, 7),
- providers_hiking ));
+ providers_hiking, cameraCaps ));
if (parameters.contains(QStringLiteral("osm.mapping.custom.host"))
|| parameters.contains(QStringLiteral("osm.mapping.host"))) {
@@ -208,7 +208,7 @@ QGeoTiledMappingManagerEngineOsm::QGeoTiledMappingManagerEngineOsm(const QVarian
{ new TileProvider(tmsServer + QStringLiteral("%z/%x/%y.png"),
QStringLiteral("png"),
mapCopyright,
- dataCopyright) }
+ dataCopyright) }, cameraCaps
));
m_providers.last()->disableRedirection();
@@ -337,6 +337,16 @@ QString QGeoTiledMappingManagerEngineOsm::customCopyright() const
return m_customCopyright;
}
+QGeoCameraCapabilities QGeoTiledMappingManagerEngineOsm::cameraCapabilities(const QGeoMapType &mapType) const
+{
+ if (mapType.mapId() == 0)
+ return QGeoMappingManagerEngine::cameraCapabilities(mapType);
+ int idx = mapType.mapId() - 1;
+ if (idx >= m_providers.size())
+ return QGeoMappingManagerEngine::cameraCapabilities(QGeoMapType());
+ return m_providers[idx]->cameraCapabilities();
+}
+
void QGeoTiledMappingManagerEngineOsm::onProviderResolutionFinished(const QGeoTileProviderOsm *provider)
{
if (!provider->isResolved())
diff --git a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h
index b1f0a13c..db8b230c 100644
--- a/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h
+++ b/src/plugins/geoservices/osm/qgeotiledmappingmanagerengineosm.h
@@ -62,6 +62,7 @@ public:
QGeoMap *createMap();
const QVector<QGeoTileProviderOsm *> &providers();
QString customCopyright() const;
+ QGeoCameraCapabilities cameraCapabilities(const QGeoMapType &mapType) const Q_DECL_OVERRIDE;
protected Q_SLOTS:
void onProviderResolutionFinished(const QGeoTileProviderOsm *provider);
diff --git a/src/plugins/geoservices/osm/qgeotileproviderosm.cpp b/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
index 1989c44f..1b48401c 100644
--- a/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
+++ b/src/plugins/geoservices/osm/qgeotileproviderosm.cpp
@@ -47,8 +47,9 @@ static const QDateTime defaultTs = QDateTime::fromString(QStringLiteral("2016-06
QGeoTileProviderOsm::QGeoTileProviderOsm(QNetworkAccessManager *nm,
const QGeoMapType &mapType,
- const QVector<TileProvider *> &providers)
-: m_nm(nm), m_provider(nullptr), m_mapType(mapType), m_status(Idle)
+ const QVector<TileProvider *> &providers,
+ const QGeoCameraCapabilities &cameraCapabilities)
+: m_nm(nm), m_provider(nullptr), m_mapType(mapType), m_status(Idle), m_cameraCapabilities(cameraCapabilities)
{
for (int i = 0; i < providers.size(); ++i) {
TileProvider *p = providers[i];
@@ -59,6 +60,8 @@ QGeoTileProviderOsm::QGeoTileProviderOsm(QNetworkAccessManager *nm,
if (!m_provider || m_provider->isValid())
m_status = Resolved;
+
+ connect(this, &QGeoTileProviderOsm::resolutionFinished, this, &QGeoTileProviderOsm::updateCameraCapabilities);
}
QGeoTileProviderOsm::~QGeoTileProviderOsm()
@@ -128,6 +131,11 @@ const QDateTime QGeoTileProviderOsm::timestamp() const
return m_provider->timestamp();
}
+QGeoCameraCapabilities QGeoTileProviderOsm::cameraCapabilities() const
+{
+ return m_cameraCapabilities;
+}
+
const QGeoMapType &QGeoTileProviderOsm::mapType() const
{
return m_mapType;
@@ -220,6 +228,15 @@ void QGeoTileProviderOsm::onResolutionError(TileProvider *provider)
}
}
+void QGeoTileProviderOsm::updateCameraCapabilities()
+{
+ // Set proper min/max ZoomLevel coming from the json, if available.
+ m_cameraCapabilities.setMinimumZoomLevel(minimumZoomLevel());
+ m_cameraCapabilities.setMaximumZoomLevel(maximumZoomLevel());
+
+ // Pushing the change
+}
+
void QGeoTileProviderOsm::addProvider(TileProvider *provider)
{
if (!provider)
diff --git a/src/plugins/geoservices/osm/qgeotileproviderosm.h b/src/plugins/geoservices/osm/qgeotileproviderosm.h
index b8647244..54f8049d 100644
--- a/src/plugins/geoservices/osm/qgeotileproviderosm.h
+++ b/src/plugins/geoservices/osm/qgeotileproviderosm.h
@@ -38,7 +38,7 @@
#define QTILEPROVIDEROSM_H
#include <QtLocation/private/qgeomaptype_p.h>
-
+#include <QtLocation/private/qgeocameracapabilities_p.h>
#include <QtCore/QUrl>
#include <QtCore/QVector>
#include <QtNetwork/QNetworkAccessManager>
@@ -142,7 +142,8 @@ public:
QGeoTileProviderOsm(QNetworkAccessManager *nm,
const QGeoMapType &mapType,
- const QVector<TileProvider *> &providers);
+ const QVector<TileProvider *> &providers,
+ const QGeoCameraCapabilities &cameraCapabilities);
~QGeoTileProviderOsm();
QUrl tileAddress(int x, int y, int z) const;
@@ -157,6 +158,7 @@ public:
bool isValid() const;
bool isResolved() const;
const QDateTime timestamp() const;
+ QGeoCameraCapabilities cameraCapabilities() const;
Q_SIGNALS:
void resolutionFinished(const QGeoTileProviderOsm *provider);
@@ -170,6 +172,7 @@ public Q_SLOTS:
protected Q_SLOTS:
void onResolutionFinished(TileProvider *provider);
void onResolutionError(TileProvider *provider);
+ void updateCameraCapabilities();
protected:
void addProvider(TileProvider *provider);
@@ -182,6 +185,7 @@ protected:
int m_providerId;
QGeoMapType m_mapType;
Status m_status;
+ QGeoCameraCapabilities m_cameraCapabilities;
};
QT_END_NAMESPACE