diff options
Diffstat (limited to 'src/imports/location/qdeclarativegeomap.cpp')
-rw-r--r-- | src/imports/location/qdeclarativegeomap.cpp | 188 |
1 files changed, 109 insertions, 79 deletions
diff --git a/src/imports/location/qdeclarativegeomap.cpp b/src/imports/location/qdeclarativegeomap.cpp index 6e0d4a2b..42993efb 100644 --- a/src/imports/location/qdeclarativegeomap.cpp +++ b/src/imports/location/qdeclarativegeomap.cpp @@ -112,6 +112,7 @@ QDeclarativeGeoMap::QDeclarativeGeoMap(QQuickItem *parent) mappingManager_(0), zoomLevel_(8.0), bearing_(0.0), + tilt_(0.0), center_(0), // mapType_(NoMap), componentCompleted_(false), @@ -269,6 +270,7 @@ void QDeclarativeGeoMap::geometryChanged(const QRectF &newGeometry, const QRectF QQuickItem::geometryChanged(newGeometry, oldGeometry); } +// Note: this keyboard handling is for development purposes only void QDeclarativeGeoMap::keyPressEvent(QKeyEvent *e) { if (!mappingManagerInitialized_) @@ -374,22 +376,6 @@ void QDeclarativeGeoMap::paint(QPainter* p) restoreDefaults(&painter); } -void QDeclarativeGeoMap::setCameraData(const CameraData &camera) -{ - if (!mappingManagerInitialized_) - return; - map_->setCameraData(camera); - if (!map_->autoUpdate()) - map_->update(); -} - -CameraData QDeclarativeGeoMap::cameraData() const -{ - if (!mappingManagerInitialized_) - return CameraData(); - return map_->cameraData(); -} - void QDeclarativeGeoMap::restoreDefaults(QGLPainter *painter) { // Disable the effect to return control to the GL paint engine. @@ -503,17 +489,31 @@ void QDeclarativeGeoMap::mappingManagerInitialized() SIGNAL(updateRequired()), this, SLOT(update())); - connect(map_, - SIGNAL(cameraDataChanged(CameraData)), + connect(map_->mapController(), + SIGNAL(centerChanged(AnimatableCoordinate)), this, - SLOT(cameraDataChanged(CameraData))); + SLOT(mapCenterChanged(AnimatableCoordinate))); + connect(map_->mapController(), + SIGNAL(bearingChanged(qreal)), + this, + SLOT(mapBearingChanged(qreal))); + connect(map_->mapController(), + SIGNAL(tiltChanged(qreal)), + this, + SLOT(mapTiltChanged(qreal))); + connect(map_->mapController(), + SIGNAL(zoomChanged(qreal)), + this, + SLOT(mapZoomLevelChanged(qreal))); + map_->setMappingManager(mappingManager_); map_->resize(width(), height()); - CameraData cameraData = map_->cameraData(); - cameraData.setCenter(center()->coordinate()); - cameraData.setZoomFactor(zoomLevel_); - cameraData.setBearing(bearing_); - map_->setCameraData(cameraData); + AnimatableCoordinate acenter = map_->mapController()->center(); + acenter.setCoordinate(center()->coordinate()); + map_->mapController()->setCenter(acenter); + map_->mapController()->setZoom(zoomLevel_); + map_->mapController()->setBearing(bearing_); + map_->mapController()->setTilt(tilt_); map_->update(); emit minimumZoomLevelChanged(); emit maximumZoomLevelChanged(); @@ -574,11 +574,8 @@ void QDeclarativeGeoMap::setBearing(qreal bearing) if (!clockwise) bearing = (-1.0 * bearing) + 360; bearing_ = bearing + fractions; - if (mappingManagerInitialized_) { - CameraData cameraData = map_->cameraData(); - cameraData.setBearing(bearing_); - map_->setCameraData(cameraData); - } + if (mappingManagerInitialized_) + map_->mapController()->setBearing(bearing_); emit bearingChanged(bearing_); } @@ -603,15 +600,31 @@ void QDeclarativeGeoMap::setBearing(qreal bearing) qreal QDeclarativeGeoMap::bearing() const { if (mappingManagerInitialized_) { - if (map_->cameraData().bearing() >= 0) - return map_->cameraData().bearing(); + if (map_->mapController()->bearing() >= 0) + return map_->mapController()->bearing(); else - return map_->cameraData().bearing() + 360; + return map_->mapController()->bearing() + 360; } else { return bearing_; } } +void QDeclarativeGeoMap::setTilt(qreal tilt) +{ + if (tilt_ == tilt || tilt > 85.0 || tilt < 0) + return; + tilt_ = tilt; + if (mappingManagerInitialized_) + map_->mapController()->setTilt(tilt); + emit tiltChanged(tilt); +} + +qreal QDeclarativeGeoMap::tilt() const +{ + if (!mappingManagerInitialized_) + return tilt_; + return map_->mapController()->tilt(); +} /*! \qmlproperty qreal Map::zoomLevel @@ -631,18 +644,15 @@ void QDeclarativeGeoMap::setZoomLevel(qreal zoomLevel) return; } zoomLevel_ = zoomLevel; - if (mappingManagerInitialized_) { - CameraData cameraData = map_->cameraData(); - cameraData.setZoomFactor(zoomLevel_); - map_->setCameraData(cameraData); - } + if (mappingManagerInitialized_) + map_->mapController()->setZoom(zoomLevel_); emit zoomLevelChanged(zoomLevel); } qreal QDeclarativeGeoMap::zoomLevel() const { if (mappingManagerInitialized_) - return map_->cameraData().zoomFactor(); + return map_->mapController()->zoom(); else return zoomLevel_; } @@ -676,9 +686,9 @@ void QDeclarativeGeoMap::setCenter(QDeclarativeCoordinate *center) this, SLOT(centerAltitudeChanged(double))); if (center_->coordinate().isValid() && mappingManagerInitialized_) { - CameraData cameraData = map_->cameraData(); - cameraData.setCenter(center_->coordinate()); - map_->setCameraData(cameraData); + AnimatableCoordinate acoord = map_->mapController()->center(); + acoord.setCoordinate(center_->coordinate()); + map_->mapController()->setCenter(acoord); update(); } } @@ -689,7 +699,7 @@ QDeclarativeCoordinate* QDeclarativeGeoMap::center() { if (!center_) { if (mappingManagerInitialized_) - center_ = new QDeclarativeCoordinate(map_->cameraData().center()); + center_ = new QDeclarativeCoordinate(map_->mapController()->center().coordinate()); else center_ = new QDeclarativeCoordinate(QGeoCoordinate(0,0,0)); connect(center_, @@ -708,24 +718,37 @@ QDeclarativeCoordinate* QDeclarativeGeoMap::center() return center_; } -void QDeclarativeGeoMap::cameraDataChanged(const CameraData &cameraData) +void QDeclarativeGeoMap::mapZoomLevelChanged(qreal zoom) +{ + if (zoom == zoomLevel_) + return; + zoomLevel_ = zoom; + emit zoomLevelChanged(zoomLevel_); +} + +void QDeclarativeGeoMap::mapTiltChanged(qreal tilt) +{ + if (tilt == zoomLevel_) + return; + tilt_ = tilt; + emit tiltChanged(tilt_); +} + +void QDeclarativeGeoMap::mapBearingChanged(qreal bearing) { - if (!componentCompleted_) + if (bearing == bearing_) return; - // check what has changed and emit appropriate signals - if (cameraData.center() != center()->coordinate()) { - QDeclarativeCoordinate* currentCenter = center(); - currentCenter->setCoordinate(cameraData.center()); + bearing_ = bearing; + emit bearingChanged(bearing_); +} + +void QDeclarativeGeoMap::mapCenterChanged(AnimatableCoordinate center) +{ + if (center.coordinate() != this->center()->coordinate()) { + QDeclarativeCoordinate* currentCenter = this->center(); + currentCenter->setCoordinate(center.coordinate()); emit centerChanged(currentCenter); } - if (cameraData.zoomFactor() != zoomLevel_) { - zoomLevel_ = cameraData.zoomFactor(); - emit zoomLevelChanged(zoomLevel_); - } - if (cameraData.bearing() != bearing_) { - bearing_ = cameraData.bearing(); - emit bearingChanged(bearing_); - } } void QDeclarativeGeoMap::centerLatitudeChanged(double latitude) @@ -733,14 +756,18 @@ void QDeclarativeGeoMap::centerLatitudeChanged(double latitude) if (qIsNaN(latitude)) return; if (mappingManagerInitialized_) { - CameraData cameraData = map_->cameraData(); - QGeoCoordinate coord = cameraData.center(); + AnimatableCoordinate acoord = map_->mapController()->center(); + QGeoCoordinate coord = acoord.coordinate(); + // if the change originated from app, emit (other changes via mapctrl signals) + if (latitude != coord.latitude()) + emit centerChanged(center_); coord.setLatitude(latitude); - cameraData.setCenter(coord); - map_->setCameraData(cameraData); + acoord.setCoordinate(coord); + map_->mapController()->setCenter(acoord); update(); + } else { + emit centerChanged(center_); } - emit centerChanged(center_); } void QDeclarativeGeoMap::centerLongitudeChanged(double longitude) @@ -748,14 +775,18 @@ void QDeclarativeGeoMap::centerLongitudeChanged(double longitude) if (qIsNaN(longitude)) return; if (mappingManagerInitialized_) { - CameraData cameraData = map_->cameraData(); - QGeoCoordinate coord = cameraData.center(); + AnimatableCoordinate acoord = map_->mapController()->center(); + QGeoCoordinate coord = acoord.coordinate(); + // if the change originated from app, emit (other changes via mapctrl signals) + if (longitude != coord.longitude()) + emit centerChanged(center_); coord.setLongitude(longitude); - cameraData.setCenter(coord); - map_->setCameraData(cameraData); + acoord.setCoordinate(coord); + map_->mapController()->setCenter(acoord); update(); + } else { + emit centerChanged(center_); } - emit centerChanged(center_); } void QDeclarativeGeoMap::centerAltitudeChanged(double altitude) @@ -763,14 +794,18 @@ void QDeclarativeGeoMap::centerAltitudeChanged(double altitude) if (qIsNaN(altitude)) return; if (mappingManagerInitialized_) { - CameraData cameraData = map_->cameraData(); - QGeoCoordinate coord = cameraData.center(); + AnimatableCoordinate acoord = map_->mapController()->center(); + QGeoCoordinate coord = acoord.coordinate(); + // if the change originated from app, emit (other changes via mapctrl signals) + if (altitude != coord.altitude()) + emit centerChanged(center_); coord.setAltitude(altitude); - cameraData.setCenter(coord); - map_->setCameraData(cameraData); + acoord.setCoordinate(coord); + map_->mapController()->setCenter(acoord); update(); + } else { + emit centerChanged(center_); } - emit centerChanged(center_); } /*! @@ -856,9 +891,9 @@ QPointF QDeclarativeGeoMap::toScreenPosition(QDeclarativeCoordinate* coordinate) void QDeclarativeGeoMap::pan(int dx, int dy) { - Q_UNUSED(dx); - Q_UNUSED(dy); - qWarning() << __FUNCTION__ << " of Map not implemented."; // TODO + if (!mappingManagerInitialized_) + return; + map_->mapController()->pan(dx, dy); } void QDeclarativeGeoMap::touchEvent(QTouchEvent *event) @@ -1035,11 +1070,6 @@ void QDeclarativeGeoMap::mouseMoveEvent(QMouseEvent *event) event->ignore(); } -void QDeclarativeGeoMap::internalCenterChanged(const QGeoCoordinate &coordinate) -{ - emit centerChanged(new QDeclarativeCoordinate(coordinate, this)); -} - //void QDeclarativeGeoMap::internalMapTypeChanged(QGraphicsGeoMap::MapType mapType) //{ // emit mapTypeChanged(QDeclarativeGeoMap::MapType(mapType)); |