/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtLocation module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL3$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPLv3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or later as published by the Free ** Software Foundation and appearing in the file LICENSE.GPL included in ** the packaging of this file. Please review the following information to ** ensure the GNU General Public License version 2.0 requirements will be ** met: http://www.gnu.org/licenses/gpl-2.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QDECLARATIVEGEOMAP_H #define QDECLARATIVEGEOMAP_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QDeclarativeGeoServiceProvider; class QDeclarativeGeoMapType; class QDeclarativeGeoMapCopyrightNotice; class QDeclarativeGeoMapParameter; class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoMap : public QQuickItem { Q_OBJECT Q_ENUMS(QGeoServiceProvider::Error) Q_PROPERTY(QQuickGeoMapGestureArea *gesture READ gesture CONSTANT) Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged) Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel WRITE setMaximumZoomLevel NOTIFY maximumZoomLevelChanged) Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged) Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged) Q_PROPERTY(qreal minimumTilt READ minimumTilt WRITE setMinimumTilt NOTIFY minimumTiltChanged) Q_PROPERTY(qreal maximumTilt READ maximumTilt WRITE setMaximumTilt NOTIFY maximumTiltChanged) Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged) Q_PROPERTY(qreal fieldOfView READ fieldOfView WRITE setFieldOfView NOTIFY fieldOfViewChanged) Q_PROPERTY(qreal minimumFieldOfView READ minimumFieldOfView WRITE setMinimumFieldOfView NOTIFY minimumFieldOfViewChanged) Q_PROPERTY(qreal maximumFieldOfView READ maximumFieldOfView WRITE setMaximumFieldOfView NOTIFY minimumFieldOfViewChanged) Q_PROPERTY(QDeclarativeGeoMapType *activeMapType READ activeMapType WRITE setActiveMapType NOTIFY activeMapTypeChanged) Q_PROPERTY(QQmlListProperty supportedMapTypes READ supportedMapTypes NOTIFY supportedMapTypesChanged) Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged) Q_PROPERTY(QList mapItems READ mapItems NOTIFY mapItemsChanged) Q_PROPERTY(QList mapParameters READ mapParameters) Q_PROPERTY(QGeoServiceProvider::Error error READ error NOTIFY errorChanged) Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged) Q_PROPERTY(QGeoShape visibleRegion READ visibleRegion WRITE setVisibleRegion NOTIFY visibleRegionChanged) Q_PROPERTY(bool copyrightsVisible READ copyrightsVisible WRITE setCopyrightsVisible NOTIFY copyrightsVisibleChanged) Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged) Q_PROPERTY(bool mapReady READ mapReady NOTIFY mapReadyChanged) Q_PROPERTY(QRectF visibleArea READ visibleArea WRITE setVisibleArea NOTIFY visibleAreaChanged REVISION 12) Q_INTERFACES(QQmlParserStatus) public: explicit QDeclarativeGeoMap(QQuickItem *parent = 0); ~QDeclarativeGeoMap(); void setPlugin(QDeclarativeGeoServiceProvider *plugin); QDeclarativeGeoServiceProvider *plugin() const; void setActiveMapType(QDeclarativeGeoMapType *mapType); QDeclarativeGeoMapType *activeMapType() const; void setMinimumZoomLevel(qreal minimumZoomLevel, bool userSet = true); qreal minimumZoomLevel() const; qreal implicitMinimumZoomLevel() const; qreal effectiveMinimumZoomLevel() const; void setMaximumZoomLevel(qreal maximumZoomLevel, bool userSet = true); qreal maximumZoomLevel() const; void setZoomLevel(qreal zoomLevel); qreal zoomLevel() const; void setBearing(qreal bearing); qreal bearing() const; void setTilt(qreal tilt); qreal tilt() const; void setMinimumTilt(qreal minimumTilt, bool userSet = true); qreal minimumTilt() const; void setMaximumTilt(qreal maximumTilt, bool userSet = true); qreal maximumTilt() const; void setFieldOfView(qreal fieldOfView); qreal fieldOfView() const; void setMinimumFieldOfView(qreal minimumFieldOfView, bool userSet = true); qreal minimumFieldOfView() const; void setMaximumFieldOfView(qreal maximumFieldOfView, bool userSet = true); qreal maximumFieldOfView() const; void setCenter(const QGeoCoordinate ¢er); QGeoCoordinate center() const; void setVisibleRegion(const QGeoShape &shape); QGeoShape visibleRegion() const; void setCopyrightsVisible(bool visible); bool copyrightsVisible() const; void setColor(const QColor &color); QColor color() const; QRectF visibleArea() const; void setVisibleArea(const QRectF &visibleArea); bool mapReady() const; QQmlListProperty supportedMapTypes(); Q_INVOKABLE void setBearing(qreal bearing, const QGeoCoordinate &coordinate); Q_INVOKABLE void alignCoordinateToPoint(const QGeoCoordinate &coordinate, const QPointF &point); Q_INVOKABLE void removeMapItem(QDeclarativeGeoMapItemBase *item); Q_INVOKABLE void addMapItem(QDeclarativeGeoMapItemBase *item); Q_INVOKABLE void addMapItemGroup(QDeclarativeGeoMapItemGroup *itemGroup); Q_INVOKABLE void removeMapItemGroup(QDeclarativeGeoMapItemGroup *itemGroup); Q_INVOKABLE void removeMapItemView(QDeclarativeGeoMapItemView *itemView); Q_INVOKABLE void addMapItemView(QDeclarativeGeoMapItemView *itemView); Q_INVOKABLE void clearMapItems(); QList mapItems(); Q_INVOKABLE void addMapParameter(QDeclarativeGeoMapParameter *parameter); Q_INVOKABLE void removeMapParameter(QDeclarativeGeoMapParameter *parameter); Q_INVOKABLE void clearMapParameters(); QList mapParameters(); void addMapObject(QGeoMapObject *object); void removeMapObject(QGeoMapObject *object); void clearMapObjects(); QList mapObjects(); Q_INVOKABLE QGeoCoordinate toCoordinate(const QPointF &position, bool clipToViewPort = true) const; Q_INVOKABLE QPointF fromCoordinate(const QGeoCoordinate &coordinate, bool clipToViewPort = true) const; QQuickGeoMapGestureArea *gesture(); Q_INVOKABLE void fitViewportToMapItems(const QVariantList &items = {}); Q_INVOKABLE void fitViewportToVisibleMapItems(); Q_INVOKABLE void pan(int dx, int dy); Q_INVOKABLE void prefetchData(); // optional hint for prefetch Q_INVOKABLE void clearData(); Q_REVISION(13) Q_INVOKABLE void fitViewportToGeoShape(const QGeoShape &shape, QVariant margins); void fitViewportToGeoShape(const QGeoShape &shape, const QMargins &borders = QMargins(10, 10, 10, 10)); QString errorString() const; QGeoServiceProvider::Error error() const; QGeoMap* map() const; // From QQuickItem void itemChange(ItemChange, const ItemChangeData &) override; Q_SIGNALS: void pluginChanged(QDeclarativeGeoServiceProvider *plugin); void zoomLevelChanged(qreal zoomLevel); void centerChanged(const QGeoCoordinate &coordinate); void activeMapTypeChanged(); void supportedMapTypesChanged(); void minimumZoomLevelChanged(); void maximumZoomLevelChanged(); void mapItemsChanged(); void errorChanged(); void copyrightLinkActivated(const QString &link); void copyrightsVisibleChanged(bool visible); void colorChanged(const QColor &color); void bearingChanged(qreal bearing); void tiltChanged(qreal tilt); void fieldOfViewChanged(qreal fieldOfView); void minimumTiltChanged(qreal minimumTilt); void maximumTiltChanged(qreal maximumTilt); void minimumFieldOfViewChanged(qreal minimumFieldOfView); void maximumFieldOfViewChanged(qreal maximumFieldOfView); void copyrightsChanged(const QImage ©rightsImage); void copyrightsChanged(const QString ©rightsHtml); void mapReadyChanged(bool ready); Q_REVISION(11) void mapObjectsChanged(); void visibleAreaChanged(); Q_REVISION(14) void visibleRegionChanged(); protected: void mousePressEvent(QMouseEvent *event) override ; void mouseMoveEvent(QMouseEvent *event) override ; void mouseReleaseEvent(QMouseEvent *event) override ; void mouseUngrabEvent() override ; void touchUngrabEvent() override; void touchEvent(QTouchEvent *event) override ; #if QT_CONFIG(wheelevent) void wheelEvent(QWheelEvent *event) override ; #endif bool childMouseEventFilter(QQuickItem *item, QEvent *event) override; bool sendMouseEvent(QMouseEvent *event); bool sendTouchEvent(QTouchEvent *event); void componentComplete() override; QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; void geometryChanged(const QRectF &newGeometry, const QRectF &oldGeometry) override; void setError(QGeoServiceProvider::Error error, const QString &errorString); void initialize(); void setZoomLevel(qreal zoomLevel, bool overzoom); bool addMapChild(QObject *child); bool removeMapChild(QObject *child); bool isGroupNested(QDeclarativeGeoMapItemGroup *group); bool addMapItem_real(QDeclarativeGeoMapItemBase *item); bool removeMapItem_real(QDeclarativeGeoMapItemBase *item); bool addMapItemGroup_real(QDeclarativeGeoMapItemGroup *itemGroup); bool removeMapItemGroup_real(QDeclarativeGeoMapItemGroup *itemGroup); bool addMapItemView_real(QDeclarativeGeoMapItemView *itemView); bool removeMapItemView_real(QDeclarativeGeoMapItemView *itemView); private Q_SLOTS: void mappingManagerInitialized(); void pluginReady(); void onSupportedMapTypesChanged(); void onCameraCapabilitiesChanged(const QGeoCameraCapabilities &oldCameraCapabilities); void onAttachedCopyrightNoticeVisibilityChanged(); void onCameraDataChanged(const QGeoCameraData &cameraData); private: void setupMapView(QDeclarativeGeoMapItemView *view); void populateMap(); void populateParameters(); void fitViewportToMapItemsRefine(const QList > &mapItems, bool refine, bool onlyVisible); bool isInteractive(); void attachCopyrightNotice(bool initialVisibility); void detachCopyrightNotice(bool currentVisibility); QMargins mapMargins() const; private: QDeclarativeGeoServiceProvider *m_plugin; QGeoMappingManager *m_mappingManager; QDeclarativeGeoMapType *m_activeMapType; QList m_supportedMapTypes; QList m_mapViews; QQuickGeoMapGestureArea *m_gestureArea; QPointer m_map; QPointer m_copyrights; QList > m_mapItems; QList > m_mapItemGroups; QString m_errorString; QGeoServiceProvider::Error m_error; QGeoRectangle m_visibleRegion; QColor m_color; QGeoCameraData m_cameraData; bool m_componentCompleted; bool m_pendingFitViewport; bool m_copyrightsVisible; double m_maximumViewportLatitude; double m_minimumViewportLatitude = 0.0; bool m_initialized; QList m_mapParameters; QList m_pendingMapObjects; // Used only in the initialization phase QGeoCameraCapabilities m_cameraCapabilities; qreal m_userMinimumZoomLevel; qreal m_userMaximumZoomLevel; qreal m_minimumTilt; qreal m_maximumTilt; qreal m_userMinimumTilt; qreal m_userMaximumTilt; qreal m_minimumFieldOfView; qreal m_maximumFieldOfView; qreal m_userMinimumFieldOfView; qreal m_userMaximumFieldOfView; int m_copyNoticesVisible = 0; qreal m_maxChildZ = 0; QRectF m_visibleArea; friend class QDeclarativeGeoMapItem; friend class QDeclarativeGeoMapItemView; friend class QQuickGeoMapGestureArea; friend class QDeclarativeGeoMapCopyrightNotice; Q_DISABLE_COPY(QDeclarativeGeoMap) }; QT_END_NAMESPACE QML_DECLARE_TYPE(QDeclarativeGeoMap) #endif