diff options
Diffstat (limited to 'src/location/quickmapitems/qdeclarativegeomap_p.h')
-rw-r--r-- | src/location/quickmapitems/qdeclarativegeomap_p.h | 353 |
1 files changed, 353 insertions, 0 deletions
diff --git a/src/location/quickmapitems/qdeclarativegeomap_p.h b/src/location/quickmapitems/qdeclarativegeomap_p.h new file mode 100644 index 00000000..cd3b6254 --- /dev/null +++ b/src/location/quickmapitems/qdeclarativegeomap_p.h @@ -0,0 +1,353 @@ +/**************************************************************************** +** +** Copyright (C) 2015 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtLocation module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** 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 https://www.qt.io/terms-conditions. For further +** information use the contact form at https://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.LGPL3 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-3.0.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 (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.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 <QtLocation/private/qlocationglobal_p.h> +#include <QtLocation/private/qdeclarativegeomapitemview_p.h> +#include <QtLocation/private/qquickgeomapgesturearea_p.h> +#include <QtLocation/private/qdeclarativegeomapitemgroup_p.h> +#include <QtLocation/qgeoserviceprovider.h> +#include <QtLocation/private/qgeocameradata_p.h> +#include <QtLocation/private/qgeocameracapabilities_p.h> +#include <QtQuick/QQuickItem> +#include <QtCore/QList> +#include <QtCore/QPointer> +#include <QtGui/QColor> +#include <QtPositioning/qgeorectangle.h> +#include <QtLocation/private/qgeomap_p.h> + +Q_MOC_INCLUDE(<QtLocation/private/qdeclarativegeomaptype_p.h>) +Q_MOC_INCLUDE(<QtLocation/private/qdeclarativegeoserviceprovider_p.h>) + +QT_BEGIN_NAMESPACE + +class QQuickWindow; +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<QDeclarativeGeoMapType> supportedMapTypes READ supportedMapTypes NOTIFY supportedMapTypesChanged) + Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged) + Q_PROPERTY(QList<QObject *> mapItems READ mapItems NOTIFY mapItemsChanged) + Q_PROPERTY(QList<QObject *> 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 = nullptr); + ~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<QDeclarativeGeoMapType> 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<QObject *> mapItems(); + + Q_INVOKABLE void addMapParameter(QDeclarativeGeoMapParameter *parameter); + Q_INVOKABLE void removeMapParameter(QDeclarativeGeoMapParameter *parameter); + Q_INVOKABLE void clearMapParameters(); + QList<QObject *> mapParameters(); + + void addMapObject(QGeoMapObject *object); // Not invokable as currently meant to be used through a main MapObjectView + void removeMapObject(QGeoMapObject *object); + void clearMapObjects(); + QList<QGeoMapObject *> 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 copyrightsImageChanged(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 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(QPointerEvent *event); + + void componentComplete() override; + QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override; + void geometryChange(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) const; + + 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); + void updateItemToWindowTransform(); + void onSGNodeChanged(); + +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<QPointer<QDeclarativeGeoMapItemBase> > &mapItems, bool refine, bool onlyVisible); + bool isInteractive() const; + void attachCopyrightNotice(bool initialVisibility); + void detachCopyrightNotice(bool currentVisibility); + QMargins mapMargins() const; + +private: + QQuickWindow *m_window = nullptr; + QDeclarativeGeoServiceProvider *m_plugin = nullptr; + QGeoMappingManager *m_mappingManager = nullptr; + QDeclarativeGeoMapType *m_activeMapType = nullptr; + QList<QDeclarativeGeoMapType *> m_supportedMapTypes; + QList<QDeclarativeGeoMapItemView *> m_mapViews; + QQuickGeoMapGestureArea *m_gestureArea = nullptr; + QPointer<QGeoMap> m_map; + QPointer<QDeclarativeGeoMapCopyrightNotice> m_copyrights; + QList<QPointer<QDeclarativeGeoMapItemBase> > m_mapItems; + QList<QPointer<QDeclarativeGeoMapItemGroup> > m_mapItemGroups; + QString m_errorString; + QGeoServiceProvider::Error m_error = QGeoServiceProvider::NoError; + QGeoRectangle m_visibleRegion; + QColor m_color = QColor::fromRgbF(0.9f, 0.9f, 0.9f); + QGeoCameraData m_cameraData; + bool m_componentCompleted = false; + bool m_pendingFitViewport = false; + bool m_copyrightsVisible = true; + double m_maximumViewportLatitude = 0.0; + double m_minimumViewportLatitude = 0.0; + bool m_initialized = false; + bool m_sgNodeHasChanged = false; + QList<QDeclarativeGeoMapParameter *> m_mapParameters; + QList<QGeoMapObject*> m_pendingMapObjects; // Used only in the initialization phase + QGeoCameraCapabilities m_cameraCapabilities; + qreal m_userMinimumZoomLevel = Q_QNAN; + qreal m_userMaximumZoomLevel = Q_QNAN; + + qreal m_minimumTilt = Q_QNAN; + qreal m_maximumTilt = Q_QNAN; + qreal m_userMinimumTilt = Q_QNAN; + qreal m_userMaximumTilt = Q_QNAN; + + qreal m_minimumFieldOfView = Q_QNAN; + qreal m_maximumFieldOfView = Q_QNAN; + qreal m_userMinimumFieldOfView = Q_QNAN; + qreal m_userMaximumFieldOfView = Q_QNAN; + + 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 |