Qt
Internal/Contributor docs for the Qt SDK. Note: These are NOT official API docs; those are found at https://doc.qt.io/
Loading...
Searching...
No Matches
qdeclarativegeomap_p.h
Go to the documentation of this file.
1// Copyright (C) 2015 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3// Qt-Security score:significant reason:default
4
5#ifndef QDECLARATIVEGEOMAP_H
6#define QDECLARATIVEGEOMAP_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include <QtLocation/private/qlocationglobal_p.h>
20#include <QtLocation/private/qdeclarativegeomapitemview_p.h>
21#include <QtLocation/private/qdeclarativegeomapitemgroup_p.h>
22#include <QtLocation/qgeoserviceprovider.h>
23#include <QtLocation/private/qgeocameradata_p.h>
24#include <QtLocation/private/qgeocameracapabilities_p.h>
25#include <QtQuick/QQuickItem>
26#include <QtCore/QList>
27#include <QtCore/QPointer>
28#include <QtGui/QColor>
29#include <QtPositioning/qgeorectangle.h>
30#include <QtLocation/private/qgeomap_p.h>
31
32Q_MOC_INCLUDE(<QtLocation/private/qdeclarativegeoserviceprovider_p.h>)
33
34QT_BEGIN_NAMESPACE
35
36class QQuickWindow;
37class QDeclarativeGeoServiceProvider;
38class QGeoMapType;
39class QDeclarativeGeoMapCopyrightNotice;
40
41class Q_LOCATION_EXPORT QDeclarativeGeoMap : public QQuickItem
42{
43 Q_OBJECT
44 QML_NAMED_ELEMENT(Map)
45 QML_ADDED_IN_VERSION(5, 0)
46
47 Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
48 Q_PROPERTY(qreal minimumZoomLevel READ minimumZoomLevel WRITE setMinimumZoomLevel NOTIFY minimumZoomLevelChanged)
49 Q_PROPERTY(qreal maximumZoomLevel READ maximumZoomLevel WRITE setMaximumZoomLevel NOTIFY maximumZoomLevelChanged)
50 Q_PROPERTY(qreal zoomLevel READ zoomLevel WRITE setZoomLevel NOTIFY zoomLevelChanged)
51
52 Q_PROPERTY(qreal tilt READ tilt WRITE setTilt NOTIFY tiltChanged)
53 Q_PROPERTY(qreal minimumTilt READ minimumTilt WRITE setMinimumTilt NOTIFY minimumTiltChanged)
54 Q_PROPERTY(qreal maximumTilt READ maximumTilt WRITE setMaximumTilt NOTIFY maximumTiltChanged)
55
56 Q_PROPERTY(qreal bearing READ bearing WRITE setBearing NOTIFY bearingChanged)
57
58 Q_PROPERTY(qreal fieldOfView READ fieldOfView WRITE setFieldOfView NOTIFY fieldOfViewChanged)
59 Q_PROPERTY(qreal minimumFieldOfView READ minimumFieldOfView WRITE setMinimumFieldOfView NOTIFY minimumFieldOfViewChanged)
60 Q_PROPERTY(qreal maximumFieldOfView READ maximumFieldOfView WRITE setMaximumFieldOfView NOTIFY minimumFieldOfViewChanged)
61
62 Q_PROPERTY(QGeoMapType activeMapType READ activeMapType WRITE setActiveMapType NOTIFY activeMapTypeChanged)
63 Q_PROPERTY(QList<QGeoMapType> supportedMapTypes READ supportedMapTypes NOTIFY supportedMapTypesChanged)
64 Q_PROPERTY(QGeoCoordinate center READ center WRITE setCenter NOTIFY centerChanged)
65 Q_PROPERTY(QList<QObject *> mapItems READ mapItems NOTIFY mapItemsChanged)
66 Q_PROPERTY(QGeoServiceProvider::Error error READ error NOTIFY errorChanged)
67 Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
68 Q_PROPERTY(QGeoShape visibleRegion READ visibleRegion WRITE setVisibleRegion NOTIFY visibleRegionChanged)
69 Q_PROPERTY(bool copyrightsVisible READ copyrightsVisible WRITE setCopyrightsVisible NOTIFY copyrightsVisibleChanged)
70 Q_PROPERTY(QColor color READ color WRITE setColor NOTIFY colorChanged)
71 Q_PROPERTY(bool mapReady READ mapReady NOTIFY mapReadyChanged)
72 Q_PROPERTY(QRectF visibleArea READ visibleArea WRITE setVisibleArea NOTIFY visibleAreaChanged REVISION(5, 12))
73 Q_INTERFACES(QQmlParserStatus)
74
75public:
76
77 explicit QDeclarativeGeoMap(QQuickItem *parent = nullptr);
78 ~QDeclarativeGeoMap();
79
80 void setPlugin(QDeclarativeGeoServiceProvider *plugin);
81 QDeclarativeGeoServiceProvider *plugin() const;
82
83 void setActiveMapType(const QGeoMapType &mapType);
84 QGeoMapType activeMapType() const;
85
86 void setMinimumZoomLevel(qreal minimumZoomLevel, bool userSet = true);
87 qreal minimumZoomLevel() const;
88
89 void setMaximumZoomLevel(qreal maximumZoomLevel, bool userSet = true);
90 qreal maximumZoomLevel() const;
91
92 void setZoomLevel(qreal zoomLevel);
93 qreal zoomLevel() const;
94
95 void setBearing(qreal bearing);
96 qreal bearing() const;
97
98 void setTilt(qreal tilt);
99 qreal tilt() const;
100 void setMinimumTilt(qreal minimumTilt, bool userSet = true);
101 qreal minimumTilt() const;
102 void setMaximumTilt(qreal maximumTilt, bool userSet = true);
103 qreal maximumTilt() const;
104
105 void setFieldOfView(qreal fieldOfView);
106 qreal fieldOfView() const;
107 void setMinimumFieldOfView(qreal minimumFieldOfView, bool userSet = true);
108 qreal minimumFieldOfView() const;
109 void setMaximumFieldOfView(qreal maximumFieldOfView, bool userSet = true);
110 qreal maximumFieldOfView() const;
111
112 void setCenter(const QGeoCoordinate &center);
113 QGeoCoordinate center() const;
114
115 void setVisibleRegion(const QGeoShape &shape);
116 QGeoShape visibleRegion() const;
117
118 void setCopyrightsVisible(bool visible);
119 bool copyrightsVisible() const;
120
121 void setColor(const QColor &color);
122 QColor color() const;
123
124 QRectF visibleArea() const;
125 void setVisibleArea(const QRectF &visibleArea);
126
127 bool mapReady() const;
128
129 QList<QGeoMapType> supportedMapTypes();
130
131 Q_INVOKABLE void setBearing(qreal bearing, const QGeoCoordinate &coordinate);
132 Q_INVOKABLE void alignCoordinateToPoint(const QGeoCoordinate &coordinate, const QPointF &point);
133
134 Q_INVOKABLE void removeMapItem(QDeclarativeGeoMapItemBase *item);
135 Q_INVOKABLE void addMapItem(QDeclarativeGeoMapItemBase *item);
136
137 Q_INVOKABLE void addMapItemGroup(QDeclarativeGeoMapItemGroup *itemGroup);
138 Q_INVOKABLE void removeMapItemGroup(QDeclarativeGeoMapItemGroup *itemGroup);
139
140 Q_INVOKABLE void removeMapItemView(QDeclarativeGeoMapItemView *itemView);
141 Q_INVOKABLE void addMapItemView(QDeclarativeGeoMapItemView *itemView);
142
143 Q_INVOKABLE void clearMapItems();
144 QList<QObject *> mapItems();
145
146 Q_INVOKABLE QGeoCoordinate toCoordinate(const QPointF &position, bool clipToViewPort = true) const;
147 Q_INVOKABLE QPointF fromCoordinate(const QGeoCoordinate &coordinate, bool clipToViewPort = true) const;
148
149// QQuickGeoMapGestureArea *gesture();
150
151 Q_INVOKABLE void fitViewportToMapItems(const QVariantList &items = {});
152 Q_INVOKABLE void fitViewportToVisibleMapItems();
153 Q_INVOKABLE void pan(int dx, int dy);
154 Q_INVOKABLE void prefetchData(); // optional hint for prefetch
155 Q_INVOKABLE void clearData();
156 Q_REVISION(5, 13) Q_INVOKABLE void fitViewportToGeoShape(const QGeoShape &shape, QVariant margins);
157 void fitViewportToGeoShape(const QGeoShape &shape, const QMargins &borders = QMargins(10, 10, 10, 10));
158
159 QString errorString() const;
160 QGeoServiceProvider::Error error() const;
161 QGeoMap* map() const;
162
163 // From QQuickItem
164 void itemChange(ItemChange, const ItemChangeData &) override;
165
166Q_SIGNALS:
167 void pluginChanged(QDeclarativeGeoServiceProvider *plugin);
168 void zoomLevelChanged(qreal zoomLevel);
169 void centerChanged(const QGeoCoordinate &coordinate);
170 void activeMapTypeChanged();
171 void supportedMapTypesChanged();
172 void minimumZoomLevelChanged(qreal minimumZoomLevel);
173 void maximumZoomLevelChanged(qreal maximumZoomLevel);
174 void mapItemsChanged();
175 void errorChanged();
176 void copyrightLinkActivated(const QString &link);
177 void copyrightsVisibleChanged(bool visible);
178 void colorChanged(const QColor &color);
179 void bearingChanged(qreal bearing);
180 void tiltChanged(qreal tilt);
181 void fieldOfViewChanged(qreal fieldOfView);
182 void minimumTiltChanged(qreal minimumTilt);
183 void maximumTiltChanged(qreal maximumTilt);
184 void minimumFieldOfViewChanged(qreal minimumFieldOfView);
185 void maximumFieldOfViewChanged(qreal maximumFieldOfView);
186 void copyrightsImageChanged(const QImage &copyrightsImage);
187 void copyrightsChanged(const QString &copyrightsHtml);
188 void mapReadyChanged(bool ready);
189 void visibleAreaChanged();
190 Q_REVISION(5, 14) void visibleRegionChanged();
191
192protected:
193 void componentComplete() override;
194 QSGNode *updatePaintNode(QSGNode *, UpdatePaintNodeData *) override;
195 void geometryChange(const QRectF &newGeometry, const QRectF &oldGeometry) override;
196
197 void setError(QGeoServiceProvider::Error error, const QString &errorString);
198 void initialize();
199 void setZoomLevel(qreal zoomLevel, bool overzoom);
200 bool addMapChild(QObject *child);
201 bool removeMapChild(QObject *child);
202 bool isGroupNested(QDeclarativeGeoMapItemGroup *group) const;
203
204 bool addMapItem_real(QDeclarativeGeoMapItemBase *item);
205 bool removeMapItem_real(QDeclarativeGeoMapItemBase *item);
206 bool addMapItemGroup_real(QDeclarativeGeoMapItemGroup *itemGroup);
207 bool removeMapItemGroup_real(QDeclarativeGeoMapItemGroup *itemGroup);
208 bool addMapItemView_real(QDeclarativeGeoMapItemView *itemView);
209 bool removeMapItemView_real(QDeclarativeGeoMapItemView *itemView);
210 void updateItemToWindowTransform();
211 void onSGNodeChanged();
212
213private Q_SLOTS:
214 void mappingManagerInitialized();
215 void pluginReady();
216 void onSupportedMapTypesChanged();
217 void onCameraCapabilitiesChanged(const QGeoCameraCapabilities &oldCameraCapabilities);
218 void onAttachedCopyrightNoticeVisibilityChanged();
219 void onCameraDataChanged(const QGeoCameraData &cameraData);
220
221private:
222 void setupMapView(QDeclarativeGeoMapItemView *view);
223 void populateMap();
224 void fitViewportToMapItemsRefine(const QList<QPointer<QDeclarativeGeoMapItemBase> > &mapItems, bool refine, bool onlyVisible);
225 void attachCopyrightNotice(bool initialVisibility);
226 void detachCopyrightNotice(bool currentVisibility);
227 QMargins mapMargins() const;
228
229private:
230 QQuickWindow *m_window = nullptr;
231 QDeclarativeGeoServiceProvider *m_plugin = nullptr;
232 QGeoMappingManager *m_mappingManager = nullptr;
233 QGeoMapType m_activeMapType;
234 QList<QGeoMapType> m_supportedMapTypes;
235 QList<QDeclarativeGeoMapItemView *> m_mapViews;
236 QPointer<QGeoMap> m_map;
237 QPointer<QDeclarativeGeoMapCopyrightNotice> m_copyrights;
238 QList<QPointer<QDeclarativeGeoMapItemBase> > m_mapItems;
239 QList<QPointer<QDeclarativeGeoMapItemGroup> > m_mapItemGroups;
240 QString m_errorString;
241 QGeoServiceProvider::Error m_error = QGeoServiceProvider::NoError;
242 QGeoRectangle m_visibleRegion;
243 QColor m_color = QColor::fromRgbF(0.9f, 0.9f, 0.9f);
244 QGeoCameraData m_cameraData;
245 bool m_componentCompleted = false;
246 bool m_pendingFitViewport = false;
247 bool m_copyrightsVisible = true;
248 double m_maximumViewportLatitude = 0.0;
249 double m_minimumViewportLatitude = 0.0;
250 bool m_initialized = false;
251 bool m_sgNodeHasChanged = false;
252 QGeoCameraCapabilities m_cameraCapabilities;
253 qreal m_minimumZoomLevel = Q_QNAN;
254 qreal m_maximumZoomLevel = Q_QNAN;
255 qreal m_userMinimumZoomLevel = 0;
256 qreal m_userMaximumZoomLevel = Q_INFINITY;
257
258 qreal m_minimumTilt = Q_QNAN;
259 qreal m_maximumTilt = Q_QNAN;
260 qreal m_userMinimumTilt = 0;
261 qreal m_userMaximumTilt = Q_INFINITY;
262
263 qreal m_minimumFieldOfView = Q_QNAN;
264 qreal m_maximumFieldOfView = Q_QNAN;
265 qreal m_userMinimumFieldOfView = 0;
266 qreal m_userMaximumFieldOfView = Q_INFINITY;
267
268 int m_copyNoticesVisible = 0;
269 qreal m_maxChildZ = 0;
270 QRectF m_visibleArea;
271
272
273 friend class QDeclarativeGeoMapItem;
274 friend class QDeclarativeGeoMapItemView;
275 friend class QDeclarativeGeoMapCopyrightNotice;
276 Q_DISABLE_COPY(QDeclarativeGeoMap)
277};
278
279
280QT_END_NAMESPACE
281
282QML_DECLARE_TYPE(QDeclarativeGeoMap)
283
284#endif
#define M_PI
Definition qmath.h:201