diff options
author | Michal Klocek <michal.klocek@theqtcompany.com> | 2016-03-01 18:20:02 +0100 |
---|---|---|
committer | Michal Klocek <michal.klocek@theqtcompany.com> | 2016-03-17 06:56:26 +0000 |
commit | 3cf9f339f2a319d99e81feebb6f5f1e428eec51c (patch) | |
tree | f41d694475a0295af2ceec334c9d17bf0c886008 | |
parent | de165175549642c7fefa901d41ee96ef0702879c (diff) |
Replace m_mappingManagerInitialized check from qdeclaratviegeomap
Replace initialization checks with more accurate checks.
In some cases mapping manager is not able to create qgeomap
and mappingManager is initialized anyway.
Change-Id: I2265dcd82ebcd3a07ebdcfb74a6077bdd7be16c7
Reviewed-by: Alex Blasche <alexander.blasche@theqtcompany.com>
-rw-r--r-- | src/imports/location/qdeclarativegeomap.cpp | 58 | ||||
-rw-r--r-- | src/imports/location/qdeclarativegeomap_p.h | 2 | ||||
-rw-r--r-- | src/location/maps/qgeomappingmanager.cpp | 3 |
3 files changed, 36 insertions, 27 deletions
diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp index 2878d3b6..2da6c3b9 100644 --- a/src/imports/location/qdeclarativegeomap.cpp +++ b/src/imports/location/qdeclarativegeomap.cpp @@ -178,10 +178,10 @@ QDeclarativeGeoMap::QDeclarativeGeoMap(QQuickItem *parent) m_error(QGeoServiceProvider::NoError), m_color(QColor::fromRgbF(0.9, 0.9, 0.9)), m_componentCompleted(false), - m_mappingManagerInitialized(false), m_pendingFitViewport(false), m_copyrightsVisible(true), - m_maximumViewportLatitude(0.0) + m_maximumViewportLatitude(0.0), + m_initialized(false) { setAcceptHoverEvents(false); setAcceptedMouseButtons(Qt::LeftButton); @@ -217,7 +217,7 @@ QDeclarativeGeoMap::~QDeclarativeGeoMap() */ void QDeclarativeGeoMap::onMapChildrenChanged() { - if (!m_componentCompleted || !m_mappingManagerInitialized) + if (!m_componentCompleted || !m_map) return; int maxChildZ = 0; @@ -294,6 +294,8 @@ void QDeclarativeGeoMap::initialize() m_map->setCameraData(m_cameraData); + m_initialized = true; + if (centerHasChanged) emit centerChanged(m_cameraData.center()); } @@ -493,9 +495,11 @@ void QDeclarativeGeoMap::setPlugin(QDeclarativeGeoServiceProvider *plugin) */ void QDeclarativeGeoMap::mappingManagerInitialized() { - m_mappingManagerInitialized = true; - m_map = m_mappingManager->createMap(this); + + if (!m_map) + return; + m_gestureArea->setMap(m_map); QList<QGeoMapType> types = m_mappingManager->supportedMapTypes(); @@ -526,7 +530,7 @@ void QDeclarativeGeoMap::mappingManagerInitialized() // Map tiles are built in this call. m_map->minimumZoom() becomes operational // after this has been called at least once, after creation. - if (width() > 0 && height() > 0) { + if (!m_initialized && width() > 0 && height() > 0) { m_map->resize(width(), height()); initialize(); } @@ -584,11 +588,13 @@ void QDeclarativeGeoMap::setMinimumZoomLevel(qreal minimumZoomLevel) if (minimumZoomLevel >= 0) { qreal oldMinimumZoomLevel = this->minimumZoomLevel(); - if (m_mappingManagerInitialized) - minimumZoomLevel = qBound(m_mappingManager->cameraCapabilities().minimumZoomLevel(), minimumZoomLevel, maximumZoomLevel()); - double minimumViewportZoomLevel = m_map->minimumZoomForMapSize(width(),height()); - if (minimumZoomLevel < minimumViewportZoomLevel) - minimumZoomLevel = minimumViewportZoomLevel; + + if (m_map) { + minimumZoomLevel = qBound(m_map->cameraCapabilities().minimumZoomLevel(), minimumZoomLevel, maximumZoomLevel()); + double minimumViewportZoomLevel = m_map->minimumZoomForMapSize(width(),height()); + if (minimumZoomLevel < minimumViewportZoomLevel) + minimumZoomLevel = minimumViewportZoomLevel; + } m_gestureArea->setMinimumZoomLevel(minimumZoomLevel); @@ -618,8 +624,8 @@ qreal QDeclarativeGeoMap::minimumZoomLevel() const { if (m_gestureArea->minimumZoomLevel() != -1) return m_gestureArea->minimumZoomLevel(); - else if (m_mappingManager && m_mappingManagerInitialized) - return m_mappingManager->cameraCapabilities().minimumZoomLevel(); + else if (m_map) + return m_map->cameraCapabilities().minimumZoomLevel(); else return -1.0; } @@ -633,8 +639,9 @@ void QDeclarativeGeoMap::setMaximumZoomLevel(qreal maximumZoomLevel) { if (maximumZoomLevel >= 0) { qreal oldMaximumZoomLevel = this->maximumZoomLevel(); - if (m_mappingManagerInitialized) - maximumZoomLevel = qBound(minimumZoomLevel(), double(maximumZoomLevel), m_mappingManager->cameraCapabilities().maximumZoomLevel()); + + if (m_map) + maximumZoomLevel = qBound(minimumZoomLevel(), double(maximumZoomLevel), m_map->cameraCapabilities().maximumZoomLevel()); m_gestureArea->setMaximumZoomLevel(maximumZoomLevel); @@ -659,8 +666,8 @@ qreal QDeclarativeGeoMap::maximumZoomLevel() const { if (m_gestureArea->maximumZoomLevel() != -1) return m_gestureArea->maximumZoomLevel(); - else if (m_mappingManager && m_mappingManagerInitialized) - return m_mappingManager->cameraCapabilities().maximumZoomLevel(); + else if (m_map) + return m_map->cameraCapabilities().maximumZoomLevel(); else return -1.0; } @@ -681,7 +688,7 @@ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel) //small optiomatization to avoid double setCameraData bool centerHasChanged = false; - if (m_mappingManagerInitialized) { + if (m_map) { m_cameraData.setZoomLevel(qBound(minimumZoomLevel(), zoomLevel, maximumZoomLevel())); m_maximumViewportLatitude = m_map->maximumLatitudeForZoom(m_cameraData.zoomLevel()); QGeoCoordinate coord = m_cameraData.center(); @@ -721,7 +728,7 @@ void QDeclarativeGeoMap::setCenter(const QGeoCoordinate ¢er) if (!center.isValid()) return; - if (m_mappingManagerInitialized) { + if (m_map) { QGeoCoordinate coord(center); coord.setLatitude(qBound(-m_maximumViewportLatitude, center.latitude(), m_maximumViewportLatitude)); m_cameraData.setCenter(coord); @@ -953,7 +960,7 @@ QPointF QDeclarativeGeoMap::fromCoordinate(const QGeoCoordinate &coordinate, boo */ void QDeclarativeGeoMap::pan(int dx, int dy) { - if (!m_mappingManagerInitialized) + if (!m_map) return; if (dx == 0 && dy == 0) return; @@ -971,7 +978,7 @@ void QDeclarativeGeoMap::pan(int dx, int dy) */ void QDeclarativeGeoMap::prefetchData() { - if (!m_mappingManagerInitialized) + if (!m_map) return; m_map->prefetchData(); } @@ -1237,13 +1244,13 @@ void QDeclarativeGeoMap::geometryChanged(const QRectF &newGeometry, const QRectF m_gestureArea->setSize(newGeometry.size()); QQuickItem::geometryChanged(newGeometry, oldGeometry); - if (!m_mappingManagerInitialized || !newGeometry.size().isValid()) + if (!m_map || !newGeometry.size().isValid()) return; m_map->resize(newGeometry.width(), newGeometry.height()); - if (!oldGeometry.size().isValid()) // TBD: see following commit + if (!m_initialized) initialize(); else setMinimumZoomLevel(m_map->minimumZoomForMapSize(newGeometry.width(), newGeometry.height())); @@ -1274,8 +1281,6 @@ void QDeclarativeGeoMap::geometryChanged(const QRectF &newGeometry, const QRectF */ void QDeclarativeGeoMap::fitViewportToMapItems() { - if (!m_mappingManagerInitialized) - return; fitViewportToMapItemsRefine(true); } @@ -1284,6 +1289,9 @@ void QDeclarativeGeoMap::fitViewportToMapItems() */ void QDeclarativeGeoMap::fitViewportToMapItemsRefine(bool refine) { + if (!m_map) + return; + if (m_mapItems.size() == 0) return; diff --git a/src/imports/location/qdeclarativegeomap_p.h b/src/imports/location/qdeclarativegeomap_p.h index 3db1aed2..807ed59c 100644 --- a/src/imports/location/qdeclarativegeomap_p.h +++ b/src/imports/location/qdeclarativegeomap_p.h @@ -199,10 +199,10 @@ private: QColor m_color; QGeoCameraData m_cameraData; bool m_componentCompleted; - bool m_mappingManagerInitialized; bool m_pendingFitViewport; bool m_copyrightsVisible; double m_maximumViewportLatitude; + bool m_initialized; friend class QDeclarativeGeoMapItem; friend class QDeclarativeGeoMapItemView; diff --git a/src/location/maps/qgeomappingmanager.cpp b/src/location/maps/qgeomappingmanager.cpp index 681e68a7..5e9531ca 100644 --- a/src/location/maps/qgeomappingmanager.cpp +++ b/src/location/maps/qgeomappingmanager.cpp @@ -133,7 +133,8 @@ QGeoCameraCapabilities QGeoMappingManager::cameraCapabilities() const QGeoMap *QGeoMappingManager::createMap(QObject *parent) { QGeoMap * map = d_ptr->engine->createMap(); - connect(parent,&QObject::destroyed,map,&QGeoMap::deleteLater); + if (map) + connect(parent, &QObject::destroyed,map, &QGeoMap::deleteLater); return map; } |