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
qdeclarativegeoroutemodel_p.h
Go to the documentation of this file.
1// Copyright (C) 2022 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 QDECLARATIVEGEOROUTEMODEL_H
6#define QDECLARATIVEGEOROUTEMODEL_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 <QObject>
20#include <QAbstractListModel>
21#include <QtPositioning/QGeoCoordinate>
22#include <QtPositioning/QGeoRectangle>
23#include <qgeorouterequest.h>
24#include <qgeoroutereply.h>
25#include <QtQml/qqml.h>
26#include <QtQml/QQmlParserStatus>
27
28#include <QtLocation/private/qlocationglobal_p.h>
29#include <QtLocation/private/qdeclarativegeoserviceprovider_p.h>
30
31#include <QtPositioning/private/qgeocoordinateobject_p.h>
32
34
35class QGeoServiceProvider;
36class QGeoRoutingManager;
37class QDeclarativeGeoRoute;
38class QDeclarativeGeoRouteQuery;
39
40class Q_LOCATION_EXPORT QDeclarativeGeoRouteModel : public QAbstractListModel, public QQmlParserStatus
41{
42 Q_OBJECT
43 QML_NAMED_ELEMENT(RouteModel)
44 QML_ADDED_IN_VERSION(5, 0)
45
46 Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged)
47 Q_PROPERTY(QDeclarativeGeoRouteQuery *query READ query WRITE setQuery NOTIFY queryChanged)
48 Q_PROPERTY(int count READ count NOTIFY countChanged)
49 Q_PROPERTY(bool autoUpdate READ autoUpdate WRITE setAutoUpdate NOTIFY autoUpdateChanged)
50 Q_PROPERTY(Status status READ status NOTIFY statusChanged)
51 Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged)
52 Q_PROPERTY(RouteError error READ error NOTIFY errorChanged)
53 Q_PROPERTY(QLocale::MeasurementSystem measurementSystem READ measurementSystem WRITE setMeasurementSystem NOTIFY measurementSystemChanged)
54
55 Q_INTERFACES(QQmlParserStatus)
56
57public:
58 enum Roles {
59 RouteRole = Qt::UserRole + 500
60 };
61
62 enum Status {
63 Null,
64 Ready,
65 Loading,
66 Error
67 };
68 Q_ENUM(Status)
69
70 enum RouteError {
71 NoError = QGeoRouteReply::NoError,
72 EngineNotSetError = QGeoRouteReply::EngineNotSetError,
73 CommunicationError = QGeoRouteReply::CommunicationError,
74 ParseError = QGeoRouteReply::ParseError,
75 UnsupportedOptionError = QGeoRouteReply::UnsupportedOptionError,
76 UnknownError = QGeoRouteReply::UnknownError,
77 //we leave gap for future QGeoRouteReply errors
78
79 //QGeoServiceProvider related errors start here
80 UnknownParameterError = 100,
81 MissingRequiredParameterError
82 };
83 Q_ENUM(RouteError)
84
85 explicit QDeclarativeGeoRouteModel(QObject *parent = nullptr);
86
87 // From QQmlParserStatus
88 void classBegin() override {}
89 void componentComplete() override;
90
91 // From QAbstractListModel
92 int rowCount(const QModelIndex &parent) const override;
93 QVariant data(const QModelIndex &index, int role) const override;
94 QHash<int,QByteArray> roleNames() const override;
95
96 void setPlugin(QDeclarativeGeoServiceProvider *plugin);
97 QDeclarativeGeoServiceProvider *plugin() const;
98
99 void setQuery(QDeclarativeGeoRouteQuery *query);
100 QDeclarativeGeoRouteQuery *query() const;
101
102 void setAutoUpdate(bool autoUpdate);
103 bool autoUpdate() const;
104
105 void setMeasurementSystem(QLocale::MeasurementSystem ms);
106 QLocale::MeasurementSystem measurementSystem() const;
107
108 Status status() const;
109 QString errorString() const;
110 RouteError error() const;
111
112 int count() const;
113 Q_INVOKABLE QGeoRoute get(int index);
114 Q_INVOKABLE void reset();
115 Q_INVOKABLE void cancel();
116
117Q_SIGNALS:
118 void countChanged();
119 void pluginChanged();
120 void queryChanged();
121 void autoUpdateChanged();
122 void statusChanged();
123 void errorChanged(); //emitted also for errorString notification
124 void routesChanged();
125 void measurementSystemChanged();
126 void abortRequested();
127
128public Q_SLOTS:
129 void update();
130
131private Q_SLOTS:
132 void routingFinished(QGeoRouteReply *reply);
133 void routingError(QGeoRouteReply *reply,
134 QGeoRouteReply::Error error,
135 const QString &errorString);
136 void queryDetailsChanged();
137 void pluginReady();
138
139private:
140 void setStatus(Status status);
141 void setError(RouteError error, const QString &errorString);
142
143 bool complete_ = false;
144
145 QDeclarativeGeoServiceProvider *plugin_ = nullptr;
146 QDeclarativeGeoRouteQuery *routeQuery_ = nullptr;
147
148 QList<QGeoRoute> routes_;
149 bool autoUpdate_ = false;
150 Status status_ = QDeclarativeGeoRouteModel::Null;
151 QString errorString_;
152 RouteError error_ = QDeclarativeGeoRouteModel::NoError;
153};
154
155class Q_LOCATION_EXPORT QDeclarativeGeoRouteQuery : public QObject, public QQmlParserStatus
156{
157 Q_OBJECT
158 QML_NAMED_ELEMENT(RouteQuery)
159 QML_ADDED_IN_VERSION(5, 0)
160
161 Q_PROPERTY(int numberAlternativeRoutes READ numberAlternativeRoutes WRITE setNumberAlternativeRoutes NOTIFY numberAlternativeRoutesChanged)
162 Q_PROPERTY(TravelModes travelModes READ travelModes WRITE setTravelModes NOTIFY travelModesChanged)
163 Q_PROPERTY(RouteOptimizations routeOptimizations READ routeOptimizations WRITE setRouteOptimizations NOTIFY routeOptimizationsChanged)
164 Q_PROPERTY(SegmentDetail segmentDetail READ segmentDetail WRITE setSegmentDetail NOTIFY segmentDetailChanged)
165 Q_PROPERTY(ManeuverDetail maneuverDetail READ maneuverDetail WRITE setManeuverDetail NOTIFY maneuverDetailChanged)
166 Q_PROPERTY(QList<QGeoCoordinate> waypoints READ waypoints WRITE setWaypoints NOTIFY waypointsChanged)
167 Q_PROPERTY(QList<QGeoRectangle> excludedAreas READ excludedAreas WRITE setExcludedAreas NOTIFY excludedAreasChanged)
168 Q_PROPERTY(QList<int> featureTypes READ featureTypes NOTIFY featureTypesChanged)
169 Q_PROPERTY(QDateTime departureTime READ departureTime WRITE setDepartureTime NOTIFY departureTimeChanged REVISION(5, 13))
170 Q_INTERFACES(QQmlParserStatus)
171
172public:
173
174 explicit QDeclarativeGeoRouteQuery(QObject *parent = nullptr);
175 QDeclarativeGeoRouteQuery(const QGeoRouteRequest &request, QObject *parent = nullptr); // init from request. For instances intended to be read only
176 ~QDeclarativeGeoRouteQuery();
177
178 // From QQmlParserStatus
179 void classBegin() override {}
180 void componentComplete() override;
181
182 QGeoRouteRequest routeRequest() const;
183
184 enum TravelMode {
185 CarTravel = QGeoRouteRequest::CarTravel,
186 PedestrianTravel = QGeoRouteRequest::PedestrianTravel,
187 BicycleTravel = QGeoRouteRequest::BicycleTravel,
188 PublicTransitTravel = QGeoRouteRequest::PublicTransitTravel,
189 TruckTravel = QGeoRouteRequest::TruckTravel
190 };
191 Q_ENUM(TravelMode)
192 Q_DECLARE_FLAGS(TravelModes, TravelMode)
193 Q_FLAG(TravelModes)
194
195 enum FeatureType {
196 NoFeature = QGeoRouteRequest::NoFeature,
197 TollFeature = QGeoRouteRequest::TollFeature,
198 HighwayFeature = QGeoRouteRequest::HighwayFeature,
199 PublicTransitFeature = QGeoRouteRequest::PublicTransitFeature,
200 FerryFeature = QGeoRouteRequest::FerryFeature,
201 TunnelFeature = QGeoRouteRequest::TunnelFeature,
202 DirtRoadFeature = QGeoRouteRequest::DirtRoadFeature,
203 ParksFeature = QGeoRouteRequest::ParksFeature,
204 MotorPoolLaneFeature = QGeoRouteRequest::MotorPoolLaneFeature,
205 TrafficFeature = QGeoRouteRequest::TrafficFeature
206 };
207 Q_DECLARE_FLAGS(FeatureTypes, FeatureType)
208 Q_FLAG(FeatureTypes);
209
210 enum FeatureWeight {
211 NeutralFeatureWeight = QGeoRouteRequest::NeutralFeatureWeight,
212 PreferFeatureWeight = QGeoRouteRequest::PreferFeatureWeight,
213 RequireFeatureWeight = QGeoRouteRequest::RequireFeatureWeight,
214 AvoidFeatureWeight = QGeoRouteRequest::AvoidFeatureWeight,
215 DisallowFeatureWeight = QGeoRouteRequest::DisallowFeatureWeight
216 };
217 Q_DECLARE_FLAGS(FeatureWeights, FeatureWeight)
218 Q_FLAG(FeatureWeight)
219
220 enum RouteOptimization {
221 ShortestRoute = QGeoRouteRequest::ShortestRoute,
222 FastestRoute = QGeoRouteRequest::FastestRoute,
223 MostEconomicRoute = QGeoRouteRequest::MostEconomicRoute,
224 MostScenicRoute = QGeoRouteRequest::MostScenicRoute
225 };
226 Q_ENUM(RouteOptimization)
227 Q_DECLARE_FLAGS(RouteOptimizations, RouteOptimization)
228 Q_FLAG(RouteOptimizations)
229
230 enum SegmentDetail {
231 NoSegmentData = 0x0000,
232 BasicSegmentData = 0x0001
233 };
234 Q_ENUM(SegmentDetail)
235 Q_DECLARE_FLAGS(SegmentDetails, SegmentDetail)
236 Q_FLAG(SegmentDetails)
237
238 enum ManeuverDetail {
239 NoManeuvers = 0x0000,
240 BasicManeuvers = 0x0001
241 };
242 Q_ENUM(ManeuverDetail)
243 Q_DECLARE_FLAGS(ManeuverDetails, ManeuverDetail)
244 Q_FLAG(ManeuverDetails)
245
246 void setNumberAlternativeRoutes(int numberAlternativeRoutes);
247 int numberAlternativeRoutes() const;
248
249 //QList<FeatureType> featureTypes();
250 QList<int> featureTypes() const;
251
252
253 QList<QGeoCoordinate> waypoints() const;
254 void setWaypoints(const QList<QGeoCoordinate> &value);
255
256 QList<QGeoRectangle> excludedAreas() const;
257 void setExcludedAreas(const QList<QGeoRectangle> &value);
258
259 Q_INVOKABLE void addWaypoint(const QGeoCoordinate &w);
260 Q_INVOKABLE void removeWaypoint(const QGeoCoordinate &waypoint);
261 Q_INVOKABLE void clearWaypoints();
262
263 Q_INVOKABLE void addExcludedArea(const QGeoRectangle &area);
264 Q_INVOKABLE void removeExcludedArea(const QGeoRectangle &area);
265 Q_INVOKABLE void clearExcludedAreas();
266
267 Q_INVOKABLE void setFeatureWeight(FeatureType featureType, FeatureWeight featureWeight);
268 Q_INVOKABLE int featureWeight(FeatureType featureType);
269 Q_INVOKABLE void resetFeatureWeights();
270
271 /*
272 feature weights
273 */
274
275 void setTravelModes(TravelModes travelModes);
276 TravelModes travelModes() const;
277
278 void setSegmentDetail(SegmentDetail segmentDetail);
279 SegmentDetail segmentDetail() const;
280
281 void setManeuverDetail(ManeuverDetail maneuverDetail);
282 ManeuverDetail maneuverDetail() const;
283
284 void setRouteOptimizations(RouteOptimizations optimization);
285 RouteOptimizations routeOptimizations() const;
286
287 void setDepartureTime(const QDateTime &departureTime);
288 QDateTime departureTime() const;
289
290Q_SIGNALS:
291 void numberAlternativeRoutesChanged();
292 void travelModesChanged();
293 void routeOptimizationsChanged();
294
295 void waypointsChanged();
296 void excludedAreasChanged();
297
298 void featureTypesChanged();
299 void maneuverDetailChanged();
300 void segmentDetailChanged();
301
302 void queryDetailsChanged();
303 void departureTimeChanged();
304
305private Q_SLOTS:
306 void excludedAreaCoordinateChanged();
307 void waypointChanged();
308
309private:
310 Q_INVOKABLE void doCoordinateChanged();
311
312 mutable QGeoRouteRequest request_;
313 bool complete_ = false;
314 bool m_excludedAreaCoordinateChanged = false;
315 mutable bool m_waypointsChanged = false;
316 QList<QGeoCoordinate> m_waypoints;
317};
318
319QT_END_NAMESPACE
320
321#endif
Combined button and popup list for selecting options.