SVN checkout 11/12/2010
[monav:monav.git] / client / routinglogic.h
1 /*
2 Copyright 2010  Christian Vetter veaac.fdirct@gmail.com
3
4 This file is part of MoNav.
5
6 MoNav is free software: you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation, either version 3 of the License, or
9 (at your option) any later version.
10
11 MoNav is distributed in the hope that it will be useful,
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 GNU General Public License for more details.
15
16 You should have received a copy of the GNU General Public License
17 along with MoNav.  If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 #ifndef ROUTINGLOGIC_H
21 #define ROUTINGLOGIC_H
22
23 #include "utils/coordinates.h"
24 #include "interfaces/irouter.h"
25
26 #include <QObject>
27 #include <QStringList>
28 #include <QVector>
29 #include <QDateTime>
30 #include <limits>
31
32 #ifndef NOQTMOBILE
33         #include <QGeoPositionInfoSource>
34         QTM_USE_NAMESPACE
35 #endif
36
37 class RoutingLogic : public QObject
38 {
39
40         Q_OBJECT
41
42 public:
43
44         // GPS information
45         struct GPSInfo {
46                 UnsignedCoordinate position;
47                 double altitude;
48                 double heading;
49                 double groundSpeed;
50                 double verticalSpeed;
51                 double horizontalAccuracy;
52                 double verticalAccuracy;
53                 QDateTime timestamp;
54         };
55
56         // return the instance of RoutingLogic
57         static RoutingLogic* instance();
58         // the waypoints used to calculate the route, excluding the source
59         QVector< UnsignedCoordinate > waypoints() const;
60         // source
61         UnsignedCoordinate source() const;
62         // target == last waypoint
63         UnsignedCoordinate target() const;
64         // route description via its nodes' coordinate
65         QVector< IRouter::Node > route() const;
66         // is the source linked to the GPS reciever?
67         bool gpsLink() const;
68         // GPS information
69         const GPSInfo& gpsInfo() const;
70         // clears the waypoints/ target / route
71         void clear();
72         // driving instruction for the current route
73         void instructions( QStringList* labels, QStringList* icons, int maxSeconds = std::numeric_limits< int >::max() );
74
75 signals:
76
77         void instructionsChanged();
78         void routeChanged();
79         void distanceChanged( double meter );
80         void travelTimeChanged( double seconds );
81         void waypointReached( int id );
82         void waypointsChanged();
83         void gpsInfoChanged();
84         void gpsLinkChanged( bool linked );
85         void sourceChanged();
86
87 public slots:
88
89         // sets a waypoint. If the coordinate is not valid the waypoint i removed
90         void setWaypoint( int id, UnsignedCoordinate coordinate );
91         // sets the source coordinate
92         void setSource( UnsignedCoordinate coordinate );
93         // sets the target coordine == last waypoint. Inserte a waypoint if necessary.
94         void setTarget( UnsignedCoordinate target );
95         // links / unlinks GPS and source coordinate
96         void setGPSLink( bool linked );
97
98 protected:
99
100         RoutingLogic();
101         ~RoutingLogic();
102         void computeRoute();
103         void updateInstructions();
104         void clearRoute();
105
106         struct PrivateImplementation;
107         PrivateImplementation* const d;
108
109 protected slots:
110
111         void dataLoaded();
112
113 #ifndef NOQTMOBILE
114         void positionUpdated( const QGeoPositionInfo& update );
115 #endif
116 };
117
118 #endif // ROUTINGLOGIC_H