1 /****************************************************************************
2 **
3 ** Copyright (C) 2018 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 
37 #ifndef QGEOMAPOBJECTBASE_H
38 #define QGEOMAPOBJECTBASE_H
39 
40 //
41 //  W A R N I N G
42 //  -------------
43 //
44 // This file is not part of the Qt API.  It exists purely as an
45 // implementation detail.  This header file may change from version to
46 // version without notice, or even be removed.
47 //
48 // We mean it.
49 //
50 
51 #include <QtLocation/private/qparameterizableobject_p.h>
52 #include <QExplicitlySharedDataPointer>
53 #include <QtPositioning/qgeoshape.h>
54 #include <qqml.h>
55 
56 QT_BEGIN_NAMESPACE
57 
58 class QGeoMapObjectPrivate;
59 class QGeoMap;
60 
61 class Q_LOCATION_PRIVATE_EXPORT QGeoMapObject : public QParameterizableObject, public QQmlParserStatus
62 {
63     Q_OBJECT
64 
65     Q_PROPERTY(bool visible READ visible WRITE setVisible NOTIFY visibleChanged)
66     Q_PROPERTY(Type type READ type CONSTANT)
67     Q_PROPERTY(QGeoShape geoShape READ geoShape WRITE setGeoShape STORED false) // non-NOTIFYable
68     Q_INTERFACES(QQmlParserStatus)
69 
70 public:
71     enum Feature {
72         NoFeature = 0x0,
73         Clickable = 0x01,
74         Draggable = 0x02,
75         AllFeatures = 0xFFFFFFFF
76     };
77 
78     enum Type {
79         InvalidType = 0,
80         ViewType = 1,
81         RouteType = 2,
82         RectangleType = 3,
83         CircleType = 4,
84         PolylineType = 5,
85         PolygonType = 6,
86         IconType = 7,
87         UserType = 0x0100
88     };
89 
90     Q_ENUM(Type)
91     Q_DECLARE_FLAGS(Features, Feature)
92 
93     virtual ~QGeoMapObject();
94 
95     bool operator == (const QGeoMapObject &other) const;
96     bool operator != (const QGeoMapObject &other) const;
97 
98     Features features() const;
99     QGeoMapObjectPrivate *implementation() const;
100     bool setImplementation(const QExplicitlySharedDataPointer<QGeoMapObjectPrivate> &pimpl);
101     bool implemented() const;
102 
103     bool visible() const;
104     void setVisible(bool visible);
105     void setParentVisiblity(bool visible);
106 
107     Type type() const;
108 
109     virtual QList<QGeoMapObject*> geoMapObjectChildren() const;
110     virtual void setMap(QGeoMap *map);
111     QGeoMap *map() const;
112 
113     QGeoShape geoShape() const;
114     void setGeoShape(const QGeoShape &shape);
115 
116 Q_SIGNALS:
117     void visibleChanged();
118     void selected();
119     void completed();
120 
121 protected:
122     QGeoMapObject(const QExplicitlySharedDataPointer<QGeoMapObjectPrivate> &dd, QObject *parent = nullptr);
123     QExplicitlySharedDataPointer<QGeoMapObjectPrivate> d_ptr;
124 
125     void setChildrenVisibility();
126 
127     // QQmlParserStatus interface
128     void classBegin() override;
129     void componentComplete() override;
130     void completeComponent();
131 
132     friend class QGeoMap;
133     friend class QDeclarativeGeoMap;
134     friend class QGeoMapLayer;
135     friend class QDeclarativeNavigator;
136 };
137 
138 QT_END_NAMESPACE
139 
140 QML_DECLARE_TYPE(QGeoMapObject)
141 
142 #endif // QGEOMAPOBJECTBASE_H
143