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
qgeomap.cpp
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#include "qgeomap_p.h"
6#include "qgeomap_p_p.h"
10#include <QDebug>
11#include <QRectF>
12
14
15QGeoMap::QGeoMap(QGeoMapPrivate &dd, QObject *parent)
16 : QObject(dd,parent)
17{
18}
19
20QGeoMap::~QGeoMap()
21{
22}
23
24void QGeoMap::setViewportSize(const QSize& size)
25{
26 Q_D(QGeoMap);
27 if (size == d->m_viewportSize)
28 return;
29 d->m_viewportSize = size;
30 d->m_geoProjection->setViewportSize(size);
31 d->changeViewportSize(size);
32}
33
34QSize QGeoMap::viewportSize() const
35{
36 Q_D(const QGeoMap);
37 return d->m_viewportSize;
38}
39
40int QGeoMap::viewportWidth() const
41{
42 Q_D(const QGeoMap);
43 return d->m_viewportSize.width();
44}
45
46int QGeoMap::viewportHeight() const
47{
48 Q_D(const QGeoMap);
49 return d->m_viewportSize.height();
50}
51
52void QGeoMap::setCameraData(const QGeoCameraData &cameraData)
53{
54 Q_D(QGeoMap);
55 if (cameraData == d->m_cameraData)
56 return;
57 d->m_cameraData = cameraData;
58 d->m_geoProjection->setCameraData(cameraData, false);
59 d->changeCameraData(cameraData);
60 emit cameraDataChanged(d->m_cameraData);
61}
62
63void QGeoMap::setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities)
64{
65 Q_D(QGeoMap);
66 d->setCameraCapabilities(cameraCapabilities);
67}
68
69bool QGeoMap::handleEvent(QEvent *event)
70{
71 Q_UNUSED(event);
72 return false;
73}
74
75bool QGeoMap::setBearing(qreal bearing, const QGeoCoordinate &coordinate) //FIXME visibleArea
76{
77 Q_D(QGeoMap);
78 bool res = d->m_geoProjection->setBearing(bearing, coordinate);
79 if (!res)
80 return false;
81
82 setCameraData(geoProjection().cameraData());
83 return true;
84}
85
86bool QGeoMap::anchorCoordinateToPoint(const QGeoCoordinate &coordinate, const QPointF &anchorPoint)
87{
88 Q_D(QGeoMap);
89 QGeoCoordinate newCenter = geoProjection().anchorCoordinateToPoint(coordinate, anchorPoint);
90 newCenter.setLatitude(qBound(d->m_minimumViewportLatitude, newCenter.latitude(), d->m_maximumViewportLatitude));
91 QGeoCameraData data = cameraData();
92 if (data.center() != newCenter) {
93 data.setCenter(newCenter);
94 setCameraData(data);
95 return true;
96 }
97 return false;
98}
99
100bool QGeoMap::fitViewportToGeoRectangle(const QGeoRectangle &rectangle, const QMargins &borders)
101{
102 Q_UNUSED(rectangle);
103 Q_UNUSED(borders);
104 return false;
105}
106
107QGeoShape QGeoMap::visibleRegion() const
108{
109 return geoProjection().visibleRegion();
110}
111
112const QGeoCameraData &QGeoMap::cameraData() const
113{
114 Q_D(const QGeoMap);
115 return d->m_cameraData;
116}
117
118void QGeoMap::setActiveMapType(const QGeoMapType &type)
119{
120 Q_D(QGeoMap);
121 if (type == d->m_activeMapType)
122 return;
123 d->m_activeMapType = type;
124 d->setCameraCapabilities(d->m_engine->cameraCapabilities(type.mapId())); // emits
125 d->changeActiveMapType(type);
126 emit activeMapTypeChanged();
127}
128
129QGeoMapType QGeoMap::activeMapType() const
130{
131 Q_D(const QGeoMap);
132 return d->m_activeMapType;
133}
134
135double QGeoMap::minimumZoom() const
136{
137 Q_D(const QGeoMap);
138 return d->m_geoProjection->minimumZoom();
139}
140
141double QGeoMap::maximumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
142{
143 Q_D(const QGeoMap);
144 return d->maximumCenterLatitudeAtZoom(cameraData);
145}
146
147double QGeoMap::minimumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
148{
149 Q_D(const QGeoMap);
150 return d->minimumCenterLatitudeAtZoom(cameraData);
151}
152
153double QGeoMap::mapWidth() const
154{
155 Q_D(const QGeoMap);
156 return d->mapWidth();
157}
158
159double QGeoMap::mapHeight() const
160{
161 Q_D(const QGeoMap);
162 return d->mapHeight();
163}
164
165const QGeoProjection &QGeoMap::geoProjection() const
166{
167 Q_D(const QGeoMap);
168 return *(d->m_geoProjection);
169}
170
171QGeoCameraCapabilities QGeoMap::cameraCapabilities() const
172{
173 Q_D(const QGeoMap);
174 return d->m_cameraCapabilities;
175}
176
177QGeoMap::Capabilities QGeoMap::capabilities() const
178{
179 return Capabilities(QGeoMap::SupportsNothing);
180}
181
182void QGeoMap::prefetchData()
183{
184
185}
186
187void QGeoMap::clearData()
188{
189
190}
191
192QGeoMap::ItemTypes QGeoMap::supportedMapItemTypes() const
193{
194 Q_D(const QGeoMap);
195 return d->supportedMapItemTypes();
196}
197
198void QGeoMap::addMapItem(QDeclarativeGeoMapItemBase *item)
199{
200 Q_D(QGeoMap);
201 if (item && !d->m_mapItems.contains(item) && d->supportedMapItemTypes() & item->itemType()) {
202 d->m_mapItems.append(item);
203 d->addMapItem(item);
204 }
205}
206
207void QGeoMap::removeMapItem(QDeclarativeGeoMapItemBase *item)
208{
209 Q_D(QGeoMap);
210 if (item && d->m_mapItems.contains(item)) {
211 d->removeMapItem(item);
212 d->m_mapItems.removeOne(item);
213 }
214}
215
216void QGeoMap::clearMapItems()
217{
218 Q_D(QGeoMap);
219 for (QDeclarativeGeoMapItemBase *p : d->m_mapItems)
220 d->removeMapItem(p);
221 d->m_mapItems.clear();
222}
223
224void QGeoMap::setItemToWindowTransform(const QTransform &itemToWindowTransform)
225{
226 Q_D(QGeoMap);
227 d->m_geoProjection->setItemToWindowTransform(itemToWindowTransform);
228}
229
230void QGeoMap::setVisibleArea(const QRectF &visibleArea)
231{
232 Q_D(QGeoMap);
233 const QRectF &va = d->visibleArea();
234 d->setVisibleArea(visibleArea);
235 if (va != d->visibleArea())
236 emit visibleAreaChanged();
237}
238
239QRectF QGeoMap::visibleArea() const
240{
241 Q_D(const QGeoMap);
242 return d->visibleArea();
243}
244
245QString QGeoMap::copyrightsStyleSheet() const
246{
247 return QStringLiteral("#copyright-root { background: rgba(255, 255, 255, 128) }");
248}
249
250void QGeoMap::setAcceptedGestures(bool pan, bool flick, bool pinch, bool rotate, bool tilt)
251{
252 Q_UNUSED(pan);
253 Q_UNUSED(flick);
254 Q_UNUSED(pinch);
255 Q_UNUSED(rotate);
256 Q_UNUSED(tilt);
257}
258
259void QGeoMap::setCopyrightVisible(bool visible)
260{
261 Q_D(QGeoMap);
262 if (d->m_copyrightVisible == visible)
263 return;
264
265 d->m_copyrightVisible = visible;
266}
267
268QGeoMapPrivate::QGeoMapPrivate(QGeoMappingManagerEngine *engine, QGeoProjection *geoProjection)
269 : QObjectPrivate(),
270 m_geoProjection(geoProjection),
271 m_engine(engine)
272{
273 // Setting the default camera caps without emitting anything
274 if (engine)
275 m_cameraCapabilities = m_engine->cameraCapabilities(m_activeMapType.mapId());
276}
277
278QGeoMapPrivate::~QGeoMapPrivate()
279{
280 if (m_geoProjection)
281 delete m_geoProjection;
282}
283
284void QGeoMapPrivate::setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities)
285{
286 Q_Q(QGeoMap);
287 if (m_cameraCapabilities == cameraCapabilities)
288 return;
289 QGeoCameraCapabilities oldCaps = m_cameraCapabilities;
290 m_cameraCapabilities = cameraCapabilities;
291 emit q->cameraCapabilitiesChanged(oldCaps);
292}
293
294const QGeoCameraCapabilities &QGeoMapPrivate::cameraCapabilities() const
295{
296 return m_cameraCapabilities;
297}
298
299const QGeoMapPrivate *QGeoMapPrivate::get(const QGeoMap &map)
300{
301 return map.d_func();
302}
303
304QGeoMap::ItemTypes QGeoMapPrivate::supportedMapItemTypes() const
305{
306 return QGeoMap::NoItem;
307}
308
309void QGeoMapPrivate::addMapItem(QDeclarativeGeoMapItemBase *item)
310{
311 Q_UNUSED(item);
312}
313
314void QGeoMapPrivate::removeMapItem(QDeclarativeGeoMapItemBase *item)
315{
316 Q_UNUSED(item);
317}
318
319double QGeoMapPrivate::mapWidth() const
320{
321 if (m_geoProjection->projectionType() == QGeoProjection::ProjectionWebMercator)
322 return static_cast<const QGeoProjectionWebMercator *>(m_geoProjection)->mapWidth();
323 return 0; // override this for maps supporting other projections
324}
325
326double QGeoMapPrivate::mapHeight() const
327{
328 if (m_geoProjection->projectionType() == QGeoProjection::ProjectionWebMercator)
329 return static_cast<const QGeoProjectionWebMercator *>(m_geoProjection)->mapHeight();
330 return 0; // override this for maps supporting other projections
331}
332
333void QGeoMapPrivate::setCopyrightVisible(bool visible)
334{
335 m_copyrightVisible = visible;
336}
337
338bool QGeoMapPrivate::copyrightVisible() const
339{
340 return m_copyrightVisible;
341}
342
343double QGeoMapPrivate::maximumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
344{
345 m_maximumViewportLatitude = m_geoProjection->maximumCenterLatitudeAtZoom(cameraData);
346 return m_maximumViewportLatitude;
347}
348
349double QGeoMapPrivate::minimumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const
350{
351 m_minimumViewportLatitude = m_geoProjection->minimumCenterLatitudeAtZoom(cameraData);
352 return m_minimumViewportLatitude;
353}
354
355void QGeoMapPrivate::setVisibleArea(const QRectF &/*visibleArea*/)
356{
357
358}
359
360QRectF QGeoMapPrivate::visibleArea() const
361{
362 return QRectF();
363}
364
365QRectF QGeoMapPrivate::clampVisibleArea(const QRectF &visibleArea) const
366{
367 qreal xp = qMin<qreal>(visibleArea.x(), qMax(m_viewportSize.width() - 1, 0));
368 qreal yp = qMin<qreal>(visibleArea.y(), qMax(m_viewportSize.height() - 1, 0));
369 qreal w = qMin<qreal>(visibleArea.width(), qMax<qreal>(m_viewportSize.width() - xp, 0));
370 qreal h = qMin<qreal>(visibleArea.height(), qMax<qreal>(m_viewportSize.height() - yp, 0));
371 return QRectF(xp, yp, w, h);
372}
373
374QT_END_NAMESPACE
Combined button and popup list for selecting options.