1 #ifndef QMAPBOX_H
2 #define QMAPBOX_H
3 
4 #include <QColor>
5 #include <QList>
6 #include <QPair>
7 #include <QVariant>
8 #include <QString>
9 
10 // This header follows the Qt coding style: https://wiki.qt.io/Qt_Coding_Style
11 
12 #if !defined(QT_MAPBOXGL_STATIC)
13 #  if defined(QT_BUILD_MAPBOXGL_LIB)
14 #    define Q_MAPBOXGL_EXPORT Q_DECL_EXPORT
15 #  else
16 #    define Q_MAPBOXGL_EXPORT Q_DECL_IMPORT
17 #  endif
18 #else
19 #  define Q_MAPBOXGL_EXPORT
20 #endif
21 
22 namespace QMapbox {
23 
24 typedef QPair<double, double> Coordinate;
25 typedef QPair<Coordinate, double> CoordinateZoom;
26 typedef QPair<double, double> ProjectedMeters;
27 
28 typedef QList<Coordinate> Coordinates;
29 typedef QList<Coordinates> CoordinatesCollection;
30 
31 typedef QList<CoordinatesCollection> CoordinatesCollections;
32 
33 struct Q_MAPBOXGL_EXPORT Feature {
34     enum Type {
35         PointType = 1,
36         LineStringType,
37         PolygonType
38     };
39 
40     /*! Class constructor. */
FeatureQMapbox::Feature41     Feature(Type type_ = PointType, const CoordinatesCollections& geometry_ = CoordinatesCollections(),
42             const QVariantMap& properties_ = QVariantMap(), const QVariant& id_ = QVariant())
43         : type(type_), geometry(geometry_), properties(properties_), id(id_) {}
44 
45     Type type;
46     CoordinatesCollections geometry;
47     QVariantMap properties;
48     QVariant id;
49 };
50 
51 struct Q_MAPBOXGL_EXPORT ShapeAnnotationGeometry {
52     enum Type {
53         LineStringType = 1,
54         PolygonType,
55         MultiLineStringType,
56         MultiPolygonType
57     };
58 
59     /*! Class constructor. */
ShapeAnnotationGeometryQMapbox::ShapeAnnotationGeometry60     ShapeAnnotationGeometry(Type type_ = LineStringType, const CoordinatesCollections& geometry_ = CoordinatesCollections())
61         : type(type_), geometry(geometry_) {}
62 
63     Type type;
64     CoordinatesCollections geometry;
65 };
66 
67 struct Q_MAPBOXGL_EXPORT SymbolAnnotation {
68     Coordinate geometry;
69     QString icon;
70 };
71 
72 struct Q_MAPBOXGL_EXPORT LineAnnotation {
73     /*! Class constructor. */
LineAnnotationQMapbox::LineAnnotation74     LineAnnotation(const ShapeAnnotationGeometry& geometry_ = ShapeAnnotationGeometry(), float opacity_ = 1.0f,
75             float width_ = 1.0f, const QColor& color_ = Qt::black)
76         : geometry(geometry_), opacity(opacity_), width(width_), color(color_) {}
77 
78     ShapeAnnotationGeometry geometry;
79     float opacity;
80     float width;
81     QColor color;
82 };
83 
84 struct Q_MAPBOXGL_EXPORT FillAnnotation {
85     /*! Class constructor. */
FillAnnotationQMapbox::FillAnnotation86     FillAnnotation(const ShapeAnnotationGeometry& geometry_ = ShapeAnnotationGeometry(), float opacity_ = 1.0f,
87             const QColor& color_ = Qt::black, const QVariant& outlineColor_ = QVariant())
88         : geometry(geometry_), opacity(opacity_), color(color_), outlineColor(outlineColor_) {}
89 
90     ShapeAnnotationGeometry geometry;
91     float opacity;
92     QColor color;
93     QVariant outlineColor;
94 };
95 
96 typedef QVariant Annotation;
97 typedef quint32 AnnotationID;
98 typedef QList<AnnotationID> AnnotationIDs;
99 
100 enum NetworkMode {
101     Online, // Default
102     Offline,
103 };
104 
105 Q_MAPBOXGL_EXPORT QList<QPair<QString, QString> >& defaultStyles();
106 
107 Q_MAPBOXGL_EXPORT NetworkMode networkMode();
108 Q_MAPBOXGL_EXPORT void setNetworkMode(NetworkMode);
109 
110 // This struct is a 1:1 copy of mbgl::CustomLayerRenderParameters.
111 struct Q_MAPBOXGL_EXPORT CustomLayerRenderParameters {
112     double width;
113     double height;
114     double latitude;
115     double longitude;
116     double zoom;
117     double bearing;
118     double pitch;
119     double fieldOfView;
120 };
121 
122 class Q_MAPBOXGL_EXPORT CustomLayerHostInterface {
123 public:
124     virtual ~CustomLayerHostInterface() = default;
125     virtual void initialize() = 0;
126     virtual void render(const CustomLayerRenderParameters&) = 0;
127     virtual void deinitialize() = 0;
128 };
129 
130 } // namespace QMapbox
131 
132 Q_DECLARE_METATYPE(QMapbox::Coordinate);
133 Q_DECLARE_METATYPE(QMapbox::Coordinates);
134 Q_DECLARE_METATYPE(QMapbox::CoordinatesCollection);
135 Q_DECLARE_METATYPE(QMapbox::CoordinatesCollections);
136 Q_DECLARE_METATYPE(QMapbox::Feature);
137 
138 Q_DECLARE_METATYPE(QMapbox::SymbolAnnotation);
139 Q_DECLARE_METATYPE(QMapbox::ShapeAnnotationGeometry);
140 Q_DECLARE_METATYPE(QMapbox::LineAnnotation);
141 Q_DECLARE_METATYPE(QMapbox::FillAnnotation);
142 
143 #endif // QMAPBOX_H
144