/**************************************************************************** ** ** Copyright (C) 2015 The Qt Company Ltd. ** Contact: http://www.qt.io/licensing/ ** ** This file is part of the QtLocation module of the Qt Toolkit. ** ** $QT_BEGIN_LICENSE:LGPL3$ ** Commercial License Usage ** Licensees holding valid commercial Qt licenses may use this file in ** accordance with the commercial license agreement provided with the ** Software or, alternatively, in accordance with the terms contained in ** a written agreement between you and The Qt Company. For licensing terms ** and conditions see http://www.qt.io/terms-conditions. For further ** information use the contact form at http://www.qt.io/contact-us. ** ** GNU Lesser General Public License Usage ** Alternatively, this file may be used under the terms of the GNU Lesser ** General Public License version 3 as published by the Free Software ** Foundation and appearing in the file LICENSE.LGPLv3 included in the ** packaging of this file. Please review the following information to ** ensure the GNU Lesser General Public License version 3 requirements ** will be met: https://www.gnu.org/licenses/lgpl.html. ** ** GNU General Public License Usage ** Alternatively, this file may be used under the terms of the GNU ** General Public License version 2.0 or later as published by the Free ** Software Foundation and appearing in the file LICENSE.GPL included in ** the packaging of this file. Please review the following information to ** ensure the GNU General Public License version 2.0 requirements will be ** met: http://www.gnu.org/licenses/gpl-2.0.html. ** ** $QT_END_LICENSE$ ** ****************************************************************************/ #ifndef QDECLARATIVEGEOROUTEMODEL_H #define QDECLARATIVEGEOROUTEMODEL_H // // W A R N I N G // ------------- // // This file is not part of the Qt API. It exists purely as an // implementation detail. This header file may change from version to // version without notice, or even be removed. // // We mean it. // #include #include #include #include #include #include #include #include #include #include #include QT_BEGIN_NAMESPACE class QGeoServiceProvider; class QGeoRoutingManager; class QDeclarativeGeoRoute; class QDeclarativeGeoRouteQuery; class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoRouteModel : public QAbstractListModel, public QQmlParserStatus { Q_OBJECT Q_ENUMS(Status) Q_ENUMS(RouteError) Q_PROPERTY(QDeclarativeGeoServiceProvider *plugin READ plugin WRITE setPlugin NOTIFY pluginChanged) Q_PROPERTY(QDeclarativeGeoRouteQuery *query READ query WRITE setQuery NOTIFY queryChanged) Q_PROPERTY(int count READ count NOTIFY countChanged) Q_PROPERTY(bool autoUpdate READ autoUpdate WRITE setAutoUpdate NOTIFY autoUpdateChanged) Q_PROPERTY(Status status READ status NOTIFY statusChanged) Q_PROPERTY(QString errorString READ errorString NOTIFY errorChanged) Q_PROPERTY(RouteError error READ error NOTIFY errorChanged) Q_PROPERTY(QLocale::MeasurementSystem measurementSystem READ measurementSystem WRITE setMeasurementSystem NOTIFY measurementSystemChanged) Q_INTERFACES(QQmlParserStatus) public: enum Roles { RouteRole = Qt::UserRole + 500 }; enum Status { Null, Ready, Loading, Error }; enum RouteError { NoError = QGeoRouteReply::NoError, EngineNotSetError = QGeoRouteReply::EngineNotSetError, CommunicationError = QGeoRouteReply::CommunicationError, ParseError = QGeoRouteReply::ParseError, UnsupportedOptionError = QGeoRouteReply::UnsupportedOptionError, UnknownError = QGeoRouteReply::UnknownError, //we leave gap for future QGeoRouteReply errors //QGeoServiceProvider related errors start here UnknownParameterError = 100, MissingRequiredParameterError }; explicit QDeclarativeGeoRouteModel(QObject *parent = 0); ~QDeclarativeGeoRouteModel(); // From QQmlParserStatus void classBegin() {} void componentComplete(); // From QAbstractListModel int rowCount(const QModelIndex &parent) const; QVariant data(const QModelIndex &index, int role) const; virtual QHash roleNames() const; void setPlugin(QDeclarativeGeoServiceProvider *plugin); QDeclarativeGeoServiceProvider *plugin() const; void setQuery(QDeclarativeGeoRouteQuery *query); QDeclarativeGeoRouteQuery *query() const; void setAutoUpdate(bool autoUpdate); bool autoUpdate() const; void setMeasurementSystem(QLocale::MeasurementSystem ms); QLocale::MeasurementSystem measurementSystem() const; Status status() const; QString errorString() const; RouteError error() const; int count() const; Q_INVOKABLE QDeclarativeGeoRoute *get(int index); Q_INVOKABLE void reset(); Q_INVOKABLE void cancel(); Q_SIGNALS: void countChanged(); void pluginChanged(); void queryChanged(); void autoUpdateChanged(); void statusChanged(); void errorChanged(); //emitted also for errorString notification void routesChanged(); void measurementSystemChanged(); void abortRequested(); public Q_SLOTS: void update(); private Q_SLOTS: void routingFinished(QGeoRouteReply *reply); void routingError(QGeoRouteReply *reply, QGeoRouteReply::Error error, const QString &errorString); void queryDetailsChanged(); void pluginReady(); private: void setStatus(Status status); void setError(RouteError error, const QString &errorString); bool complete_; QDeclarativeGeoServiceProvider *plugin_; QDeclarativeGeoRouteQuery *routeQuery_; QList routes_; bool autoUpdate_; Status status_; QString errorString_; RouteError error_; }; class Q_LOCATION_PRIVATE_EXPORT QDeclarativeGeoRouteQuery : public QObject, public QQmlParserStatus { Q_OBJECT Q_ENUMS(TravelMode) Q_ENUMS(FeatureType) Q_ENUMS(FeatureWeight) Q_ENUMS(SegmentDetail) Q_ENUMS(ManeuverDetail) Q_ENUMS(RouteOptimization) Q_FLAGS(RouteOptimizations) Q_FLAGS(ManeuverDetails) Q_FLAGS(SegmentDetails) Q_FLAGS(TravelModes) Q_PROPERTY(int numberAlternativeRoutes READ numberAlternativeRoutes WRITE setNumberAlternativeRoutes NOTIFY numberAlternativeRoutesChanged) Q_PROPERTY(TravelModes travelModes READ travelModes WRITE setTravelModes NOTIFY travelModesChanged) Q_PROPERTY(RouteOptimizations routeOptimizations READ routeOptimizations WRITE setRouteOptimizations NOTIFY routeOptimizationsChanged) Q_PROPERTY(SegmentDetail segmentDetail READ segmentDetail WRITE setSegmentDetail NOTIFY segmentDetailChanged) Q_PROPERTY(ManeuverDetail maneuverDetail READ maneuverDetail WRITE setManeuverDetail NOTIFY maneuverDetailChanged) Q_PROPERTY(QJSValue waypoints READ waypoints WRITE setWaypoints NOTIFY waypointsChanged) Q_PROPERTY(QJSValue excludedAreas READ excludedAreas WRITE setExcludedAreas NOTIFY excludedAreasChanged) Q_PROPERTY(QList featureTypes READ featureTypes NOTIFY featureTypesChanged) Q_INTERFACES(QQmlParserStatus) public: explicit QDeclarativeGeoRouteQuery(QObject *parent = 0); ~QDeclarativeGeoRouteQuery(); // From QQmlParserStatus void classBegin() {} void componentComplete(); QGeoRouteRequest routeRequest() const; enum TravelMode { CarTravel = QGeoRouteRequest::CarTravel, PedestrianTravel = QGeoRouteRequest::PedestrianTravel, BicycleTravel = QGeoRouteRequest::BicycleTravel, PublicTransitTravel = QGeoRouteRequest::PublicTransitTravel, TruckTravel = QGeoRouteRequest::TruckTravel }; Q_DECLARE_FLAGS(TravelModes, TravelMode) enum FeatureType { NoFeature = QGeoRouteRequest::NoFeature, TollFeature = QGeoRouteRequest::TollFeature, HighwayFeature = QGeoRouteRequest::HighwayFeature, PublicTransitFeature = QGeoRouteRequest::PublicTransitFeature, FerryFeature = QGeoRouteRequest::FerryFeature, TunnelFeature = QGeoRouteRequest::TunnelFeature, DirtRoadFeature = QGeoRouteRequest::DirtRoadFeature, ParksFeature = QGeoRouteRequest::ParksFeature, MotorPoolLaneFeature = QGeoRouteRequest::MotorPoolLaneFeature, TrafficFeature = QGeoRouteRequest::TrafficFeature }; Q_DECLARE_FLAGS(FeatureTypes, FeatureType) enum FeatureWeight { NeutralFeatureWeight = QGeoRouteRequest::NeutralFeatureWeight, PreferFeatureWeight = QGeoRouteRequest::PreferFeatureWeight, RequireFeatureWeight = QGeoRouteRequest::RequireFeatureWeight, AvoidFeatureWeight = QGeoRouteRequest::AvoidFeatureWeight, DisallowFeatureWeight = QGeoRouteRequest::DisallowFeatureWeight }; Q_DECLARE_FLAGS(FeatureWeights, FeatureWeight) enum RouteOptimization { ShortestRoute = QGeoRouteRequest::ShortestRoute, FastestRoute = QGeoRouteRequest::FastestRoute, MostEconomicRoute = QGeoRouteRequest::MostEconomicRoute, MostScenicRoute = QGeoRouteRequest::MostScenicRoute }; Q_DECLARE_FLAGS(RouteOptimizations, RouteOptimization) enum SegmentDetail { NoSegmentData = 0x0000, BasicSegmentData = 0x0001 }; Q_DECLARE_FLAGS(SegmentDetails, SegmentDetail) enum ManeuverDetail { NoManeuvers = 0x0000, BasicManeuvers = 0x0001 }; Q_DECLARE_FLAGS(ManeuverDetails, ManeuverDetail) void setNumberAlternativeRoutes(int numberAlternativeRoutes); int numberAlternativeRoutes() const; //QList featureTypes(); QList featureTypes(); QJSValue waypoints(); void setWaypoints(const QJSValue &value); // READ functions for list properties QJSValue excludedAreas() const; void setExcludedAreas(const QJSValue &value); Q_INVOKABLE void addWaypoint(const QGeoCoordinate &waypoint); Q_INVOKABLE void removeWaypoint(const QGeoCoordinate &waypoint); Q_INVOKABLE void clearWaypoints(); Q_INVOKABLE void addExcludedArea(const QGeoRectangle &area); Q_INVOKABLE void removeExcludedArea(const QGeoRectangle &area); Q_INVOKABLE void clearExcludedAreas(); Q_INVOKABLE void setFeatureWeight(FeatureType featureType, FeatureWeight featureWeight); Q_INVOKABLE int featureWeight(FeatureType featureType); Q_INVOKABLE void resetFeatureWeights(); /* feature weights */ void setTravelModes(TravelModes travelModes); TravelModes travelModes() const; void setSegmentDetail(SegmentDetail segmentDetail); SegmentDetail segmentDetail() const; void setManeuverDetail(ManeuverDetail maneuverDetail); ManeuverDetail maneuverDetail() const; void setRouteOptimizations(RouteOptimizations optimization); RouteOptimizations routeOptimizations() const; Q_SIGNALS: void numberAlternativeRoutesChanged(); void travelModesChanged(); void routeOptimizationsChanged(); void waypointsChanged(); void excludedAreasChanged(); void featureTypesChanged(); void maneuverDetailChanged(); void segmentDetailChanged(); void queryDetailsChanged(); private Q_SLOTS: void excludedAreaCoordinateChanged(); private: Q_INVOKABLE void doCoordinateChanged(); QGeoRouteRequest request_; bool complete_; bool m_excludedAreaCoordinateChanged; }; QT_END_NAMESPACE #endif