1/****************************************************************************
2**
3** Copyright (C) 2015 The Qt Company Ltd.
4** Contact: http://www.qt.io/licensing/
5**
6** This file is part of the QtLocation module of the Qt Toolkit.
7**
8** $QT_BEGIN_LICENSE:LGPL3$
9** Commercial License Usage
10** Licensees holding valid commercial Qt licenses may use this file in
11** accordance with the commercial license agreement provided with the
12** Software or, alternatively, in accordance with the terms contained in
13** a written agreement between you and The Qt Company. For licensing terms
14** and conditions see http://www.qt.io/terms-conditions. For further
15** information use the contact form at http://www.qt.io/contact-us.
16**
17** GNU Lesser General Public License Usage
18** Alternatively, this file may be used under the terms of the GNU Lesser
19** General Public License version 3 as published by the Free Software
20** Foundation and appearing in the file LICENSE.LGPLv3 included in the
21** packaging of this file. Please review the following information to
22** ensure the GNU Lesser General Public License version 3 requirements
23** will be met: https://www.gnu.org/licenses/lgpl.html.
24**
25** GNU General Public License Usage
26** Alternatively, this file may be used under the terms of the GNU
27** General Public License version 2.0 or later as published by the Free
28** Software Foundation and appearing in the file LICENSE.GPL included in
29** the packaging of this file. Please review the following information to
30** ensure the GNU General Public License version 2.0 requirements will be
31** met: http://www.gnu.org/licenses/gpl-2.0.html.
32**
33** $QT_END_LICENSE$
34**
35****************************************************************************/
36#ifndef QGEOMAP_P_H
37#define QGEOMAP_P_H
38
39//
40// W A R N I N G
41// -------------
42//
43// This file is not part of the Qt API. It exists purely as an
44// implementation detail. This header file may change from version to
45// version without notice, or even be removed.
46//
47// We mean it.
48//
49
50#include <QtLocation/private/qlocationglobal_p.h>
51#include <QtLocation/private/qgeocameradata_p.h>
52#include <QtLocation/private/qgeomaptype_p.h>
53#include <QtLocation/private/qgeocameracapabilities_p.h>
54#include <QtCore/QObject>
55#include <QtPositioning/private/qdoublevector2d_p.h>
56#include <QtLocation/private/qgeoprojection_p.h>
57#include <QtLocation/qgeoroute.h>
58#include <QTransform>
59
60QT_BEGIN_NAMESPACE
61
62class QGeoMappingManagerEngine;
63class QGeoMapPrivate;
64class QGeoMapController;
65class QGeoCoordinate;
66class QSGNode;
67class QQuickWindow;
68class QGeoMapParameter;
69class QDeclarativeGeoMapItemBase;
70class QGeoMapObject;
71class QDeclarativeGeoMap;
72
73class Q_LOCATION_PRIVATE_EXPORT QGeoMap : public QObject
74{
75 Q_OBJECT
76 Q_DECLARE_PRIVATE(QGeoMap)
77
78 Q_ENUMS(Capability)
79 Q_FLAGS(Capabilities)
80public:
81 enum ItemType {
82 NoItem = 0x0000,
83 MapRectangle = 0x0001,
84 MapCircle = 0x0002,
85 MapPolyline = 0x0004,
86 MapPolygon = 0x0008,
87 MapQuickItem = 0x0010,
88 CustomMapItem = 0x8000
89 };
90
91 Q_DECLARE_FLAGS(ItemTypes, ItemType)
92
93 enum Capability {
94 SupportsNothing = 0x0000,
95 SupportsVisibleRegion = 0x0001,
96 SupportsSetBearing = 0x0002,
97 SupportsAnchoringCoordinate = 0x0004,
98 SupportsFittingViewportToGeoRectangle = 0x0008,
99 SupportsVisibleArea = 0x0010,
100 };
101
102 Q_DECLARE_FLAGS(Capabilities, Capability)
103
104 virtual ~QGeoMap();
105
106 // Sets the display size
107 void setViewportSize(const QSize& viewportSize);
108 QSize viewportSize() const;
109 int viewportWidth() const;
110 int viewportHeight() const;
111
112
113 const QGeoCameraData &cameraData() const;
114 QGeoCameraCapabilities cameraCapabilities() const;
115 virtual Capabilities capabilities() const;
116
117 void setActiveMapType(const QGeoMapType mapType);
118 const QGeoMapType activeMapType() const;
119
120 // returns the minimum zoom at the current viewport size
121 double minimumZoom() const;
122 double maximumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const;
123 double minimumCenterLatitudeAtZoom(const QGeoCameraData &cameraData) const;
124
125 // returns the size of the underlying map, at the current zoom level. Unrelated to width()/height()/size().
126 double mapWidth() const;
127 double mapHeight() const;
128
129 const QGeoProjection &geoProjection() const;
130
131 virtual void prefetchData();
132 virtual void clearData();
133
134 void addParameter(QGeoMapParameter *param);
135 void removeParameter(QGeoMapParameter *param);
136 void clearParameters();
137
138 ItemTypes supportedMapItemTypes() const;
139
140 void addMapItem(QDeclarativeGeoMapItemBase *item);
141 void removeMapItem(QDeclarativeGeoMapItemBase *item);
142 void clearMapItems();
143
144 virtual bool createMapObjectImplementation(QGeoMapObject *obj);
145 QList<QGeoMapObject *> mapObjects() const;
146
147
148 virtual QString copyrightsStyleSheet() const;
149 virtual void setAcceptedGestures(bool pan, bool flick, bool pinch, bool rotate, bool tilt);
150 virtual bool handleEvent(QEvent *event);
151
152 virtual bool setBearing(qreal bearing, const QGeoCoordinate &coordinate);
153 virtual QGeoShape visibleRegion() const;
154 virtual bool anchorCoordinateToPoint(const QGeoCoordinate &coordinate, const QPointF &anchorPoint);
155 virtual bool fitViewportToGeoRectangle(const QGeoRectangle &rectangle, const QMargins &borders);
156
157 virtual void setCopyrightVisible(bool visible);
158 virtual void removeMapObject(QGeoMapObject *obj);
159 virtual QList<QObject *> mapObjectsAt(const QGeoCoordinate &coordinate) const;
160 virtual void setItemToWindowTransform(const QTransform &itemToWindowTransform);
161
162 void setVisibleArea(const QRectF &visibleArea);
163 QRectF visibleArea() const;
164
165protected:
166 QGeoMap(QGeoMapPrivate &dd, QObject *parent = 0);
167 void setCameraData(const QGeoCameraData &cameraData);
168 void setCameraCapabilities(const QGeoCameraCapabilities &cameraCapabilities);
169 virtual QSGNode *updateSceneGraph(QSGNode *node, QQuickWindow *window) = 0;
170
171Q_SIGNALS:
172 void cameraDataChanged(const QGeoCameraData &cameraData);
173 void sgNodeChanged();
174 void activeMapTypeChanged();
175 void cameraCapabilitiesChanged(const QGeoCameraCapabilities &oldCameraCapabilities);
176 void copyrightsChanged(const QImage &copyrightsImage);
177 void copyrightsChanged(const QString &copyrightsHtml);
178 void copyrightsStyleSheetChanged(const QString &styleSheet);
179 void visibleAreaChanged();
180
181private:
182 Q_DISABLE_COPY(QGeoMap)
183 friend class QDeclarativeGeoMap; //updateSceneGraph
184};
185
186Q_DECLARE_OPERATORS_FOR_FLAGS(QGeoMap::ItemTypes)
187
188QT_END_NAMESPACE
189
190#endif // QGEOMAP_P_H
191

source code of qtlocation/src/location/maps/qgeomap_p.h