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 ×tamp() 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 ×tamp) {_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)71inline 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