1 #ifndef WAYPOINT_H
2 #define WAYPOINT_H
3 
4 #include <QString>
5 #include <QDateTime>
6 #include <QHash>
7 #include <QVector>
8 #include <QDebug>
9 #include "common/coordinates.h"
10 #include "imageinfo.h"
11 #include "link.h"
12 #include "address.h"
13 
14 class Waypoint
15 {
16 public:
Waypoint()17 	Waypoint() : _elevation(NAN) {}
Waypoint(const Coordinates & coordinates)18 	Waypoint(const Coordinates &coordinates)
19 	  : _coordinates(coordinates), _elevation(NAN) {}
20 
coordinates()21 	const Coordinates &coordinates() const {return _coordinates;}
rcoordinates()22 	Coordinates &rcoordinates() {return _coordinates;}
name()23 	const QString &name() const {return _name;}
description()24 	const QString &description() const {return _description;}
comment()25 	const QString &comment() const {return _comment;}
address()26 	const Address &address() const {return _address;}
images()27 	const QVector<ImageInfo> &images() const {return _images;}
links()28 	const QVector<Link> &links() const {return _links;}
timestamp()29 	const QDateTime &timestamp() const {return _timestamp;}
elevation()30 	qreal elevation() const {return _elevation;}
31 
32 	QPair<qreal, qreal> elevations() const;
33 
setCoordinates(const Coordinates & coordinates)34 	void setCoordinates(const Coordinates &coordinates)
35 	  {_coordinates = coordinates;}
setName(const QString & name)36 	void setName(const QString &name) {_name = name;}
setDescription(const QString & description)37 	void setDescription(const QString &description)
38 	  {_description = description;}
setComment(const QString & comment)39 	void setComment(const QString &comment) {_comment = comment;}
setAddress(const Address & address)40 	void setAddress(const Address &address) {_address = address;}
setTimestamp(const QDateTime & timestamp)41 	void setTimestamp(const QDateTime &timestamp) {_timestamp = timestamp;}
setElevation(qreal elevation)42 	void setElevation(qreal elevation) {_elevation = elevation;}
addImage(const ImageInfo & image)43 	void addImage(const ImageInfo &image) {_images.append(image);}
addLink(const Link & link)44 	void addLink(const Link &link) {_links.append(link);}
45 
hasElevation()46 	bool hasElevation() const {return !std::isnan(_elevation);}
47 
48 	bool operator==(const Waypoint &other) const
49 	  {return this->_name == other._name
50 	  && this->_coordinates == other._coordinates;}
51 
useDEM(bool use)52 	static void useDEM(bool use) {_useDEM = use;}
showSecondaryElevation(bool show)53 	static void showSecondaryElevation(bool show)
54 	  {_show2ndElevation = show;}
55 
56 private:
57 	Coordinates _coordinates;
58 	QString _name;
59 	QString _description;
60 	QString _comment;
61 	Address _address;
62 	QVector<ImageInfo> _images;
63 	QVector<Link> _links;
64 	QDateTime _timestamp;
65 	qreal _elevation;
66 
67 	static bool _useDEM;
68 	static bool _show2ndElevation;
69 };
70 
qHash(const Waypoint & key)71 inline uint qHash(const Waypoint &key)
72 {
73 	return ::qHash(key.name());
74 }
75 
76 #ifndef QT_NO_DEBUG
77 inline QDebug operator<<(QDebug dbg, const Waypoint &waypoint)
78 {
79 	dbg.nospace() << "Waypoint(" << waypoint.coordinates() << ", "
80 	  << waypoint.name() << ")";
81 	return dbg.space();
82 }
83 #endif // QT_NO_DEBUG
84 
85 #endif // WAYPOINT_H
86