1 // SPDX-License-Identifier: LGPL-2.1-or-later
2 //
3 // SPDX-FileCopyrightText: 2011 Dennis Nienhüser <nienhueser@kde.org>
4 //
5 
6 #ifndef MARBLE_DECLARATIVE_ROUTING_H
7 #define MARBLE_DECLARATIVE_ROUTING_H
8 
9 #include <QQuickItem>
10 
11 #include <Placemark.h>
12 #include <routing/RoutingModel.h>
13 #include <RouteRequestModel.h>
14 
15 namespace Marble {
16 
17 class MarbleMap;
18 class RoutingPrivate;
19 
20 class Routing : public QQuickItem
21 {
22     Q_OBJECT
23     Q_PROPERTY( MarbleMap* marbleMap READ marbleMap WRITE setMarbleMap NOTIFY marbleMapChanged)
24     Q_PROPERTY( QString routingProfile READ routingProfile WRITE setRoutingProfile NOTIFY routingProfileChanged )
25     Q_PROPERTY( bool hasRoute READ hasRoute NOTIFY hasRouteChanged )
26     Q_PROPERTY( bool hasWaypoints READ hasWaypoints NOTIFY hasWaypointsChanged )
27     Q_PROPERTY( RoutingModel* routingModel READ routingModel NOTIFY routingModelChanged)
28     Q_PROPERTY( QQmlComponent* waypointDelegate READ waypointDelegate WRITE setWaypointDelegate NOTIFY waypointDelegateChanged)
29     Q_PROPERTY( RouteRequestModel* routeRequestModel READ routeRequestModel NOTIFY routeRequestModelChanged)
30 
31 public:
32     enum RoutingProfile { Motorcar, Bicycle, Pedestrian };
33 
34     explicit Routing( QQuickItem* parent = nullptr );
35 
36     ~Routing() override;
37 
38     void setMarbleMap( MarbleMap* marbleMap );
39 
40     MarbleMap *marbleMap();
41 
42     QString routingProfile() const;
43 
44     void setRoutingProfile( const QString & profile );
45 
46     bool hasRoute() const;
47 
48     bool hasWaypoints() const;
49 
50     RoutingModel *routingModel();
51 
52     QQmlComponent * waypointDelegate() const;
53 
54     Q_INVOKABLE int waypointCount() const;
55 
56     RouteRequestModel* routeRequestModel();
57 
58 public Q_SLOTS:
59     void addVia( qreal lon, qreal lat );
60 
61     void addViaAtIndex( int index, qreal lon, qreal lat );
62 
63     void addViaByPlacemark( Placemark * placemark );
64 
65     void addViaByPlacemarkAtIndex( int index, Placemark * placemark );
66 
67     void setVia( int index, qreal lon, qreal lat );
68 
69     void removeVia( int index );
70 
71     void swapVias( int index1, int index2 );
72 
73     void reverseRoute();
74 
75     void clearRoute();
76 
77     void updateRoute();
78 
79     void openRoute( const QString &filename );
80 
81     void saveRoute( const QString &filename );
82 
83     QObject* waypointModel();
84 
85     void setWaypointDelegate(QQmlComponent * waypointDelegate);
86 
87     int addSearchResultPlacemark( Placemark * placemark );
88 
89     void clearSearchResultPlacemarks();
90 
91 Q_SIGNALS:
92     void marbleMapChanged();
93 
94     void routingProfileChanged();
95 
96     void hasRouteChanged();
97 
98     void hasWaypointsChanged();
99 
100     void routingModelChanged();
101 
102     void waypointDelegateChanged(QQmlComponent * waypointDelegate);
103 
104     void routeRequestModelChanged(RouteRequestModel* routeRequestModel);
105 
106 protected:
107     // Implements QQuickItem interface
108     QSGNode * updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *) override;
109 
110 private Q_SLOTS:
111     void updateWaypointItems();
112 
113     void updateSearchResultPlacemarks();
114 
115 private:
116     RoutingPrivate* const d;
117 };
118 
119 }
120 
121 #endif
122