From dafadbab60c612a5b8cd7ccc9ee8a58703907143 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Tue, 2 Aug 2016 00:28:56 +0200 Subject: [PATCH] Some more tool tips related changes --- gpxsee.pro | 6 ++++-- lang/gpxsee_cs.ts | 17 ++--------------- src/misc.cpp | 9 +++++++++ src/misc.h | 1 + src/parser.cpp | 4 ++++ src/tooltip.cpp | 26 ++++++++++++++++++++++++++ src/tooltip.h | 30 ++++++++++++++++++++++++++++++ src/trackitem.cpp | 16 +++++++++++----- src/trackitem.h | 2 +- src/trackview.cpp | 15 +++++++++++---- src/waypointitem.cpp | 40 +++++++++++++++++++++++++++++++--------- src/waypointitem.h | 10 ++++++++++ 12 files changed, 140 insertions(+), 36 deletions(-) create mode 100644 src/tooltip.cpp create mode 100644 src/tooltip.h diff --git a/gpxsee.pro b/gpxsee.pro index bc923a50..8910da5b 100644 --- a/gpxsee.pro +++ b/gpxsee.pro @@ -46,7 +46,8 @@ HEADERS += src/config.h \ src/temperaturegraph.h \ src/graphtab.h \ src/misc.h \ - src/trackitem.h + src/trackitem.h \ + src/tooltip.h SOURCES += src/main.cpp \ src/gui.cpp \ src/gpx.cpp \ @@ -80,7 +81,8 @@ SOURCES += src/main.cpp \ src/trackpoint.cpp \ src/misc.cpp \ src/waypoint.cpp \ - src/trackitem.cpp + src/trackitem.cpp \ + src/tooltip.cpp RESOURCES += gpxsee.qrc TRANSLATIONS = lang/gpxsee_cs.ts macx { diff --git a/lang/gpxsee_cs.ts b/lang/gpxsee_cs.ts index a1036171..8effd77f 100644 --- a/lang/gpxsee_cs.ts +++ b/lang/gpxsee_cs.ts @@ -548,6 +548,7 @@ + ft ft @@ -560,25 +561,11 @@ + m m - - - Date: - Datum: - - - - Distance: - Vzdálenost: - - - - Time: - Čas: - SpeedGraph diff --git a/src/misc.cpp b/src/misc.cpp index 4672f23d..995b2a91 100644 --- a/src/misc.cpp +++ b/src/misc.cpp @@ -65,6 +65,15 @@ QString distance(qreal value, Units units) } } +QString elevation(qreal value, Units units) +{ + if (units == Metric) + return QString::number(value, 'f', 0) + UNIT_SPACE + QObject::tr("m"); + else + return QString::number(value * M2FT, 'f', 0) + UNIT_SPACE + + QObject::tr("ft"); +} + QString coordinates(const QPointF &value) { QChar yH = (value.y() < 0) ? 'S' : 'N'; diff --git a/src/misc.h b/src/misc.h index 79bddae6..c07cb191 100644 --- a/src/misc.h +++ b/src/misc.h @@ -9,6 +9,7 @@ double niceNum(double x, int round); QString timeSpan(qreal time); QString distance(qreal value, Units units); +QString elevation(qreal value, Units units); QString coordinates(const QPointF &value); #endif // MISC_H diff --git a/src/parser.cpp b/src/parser.cpp index be30fbc7..ef04232d 100644 --- a/src/parser.cpp +++ b/src/parser.cpp @@ -23,6 +23,8 @@ void Parser::handleTrackpointData(DataType type, const QString &value) case Temperature: _track->last().setTemperature(value.toDouble()); break; + default: + break; } } @@ -45,6 +47,8 @@ void Parser::handleWaypointData(DataType type, const QString &value) case Geoidheight: _waypoints.last().setGeoidHeight(value.toLatin1().toDouble()); break; + default: + break; } } diff --git a/src/tooltip.cpp b/src/tooltip.cpp new file mode 100644 index 00000000..d0abe7a9 --- /dev/null +++ b/src/tooltip.cpp @@ -0,0 +1,26 @@ +#include "tooltip.h" + +ToolTip::ToolTip() +{ +} + +void ToolTip::insert(const QString &key, const QString &value) +{ + KV kv(key, value); + int i; + + if ((i = _list.indexOf(kv)) < 0) + _list.append(kv); + else + _list[i] = kv; +} + +QString ToolTip::toString() +{ + QString ret; + + for (int i = 0; i < _list.count(); i++) + ret += "" + _list.at(i).key + ": " + _list.at(i).value + "
"; + + return ret; +} diff --git a/src/tooltip.h b/src/tooltip.h new file mode 100644 index 00000000..cae45d0a --- /dev/null +++ b/src/tooltip.h @@ -0,0 +1,30 @@ +#ifndef TOOLTIP_H +#define TOOLTIP_H + +#include +#include + +class ToolTip +{ +public: + ToolTip(); + + void insert(const QString &key, const QString &value); + QString toString(); + +private: + class KV { + public: + QString key; + QString value; + + KV(const QString &k, const QString &v) + {key = k; value = v;} + bool operator==(const KV &other) const + {return this->key == other.key;} + }; + + QList _list; +}; + +#endif // TOOLTIP_H diff --git a/src/trackitem.cpp b/src/trackitem.cpp index 0ca7ae66..b3168ce7 100644 --- a/src/trackitem.cpp +++ b/src/trackitem.cpp @@ -2,6 +2,7 @@ #include #include "ll.h" #include "misc.h" +#include "tooltip.h" #include "trackitem.h" @@ -9,11 +10,15 @@ QString TrackItem::toolTip() { - QString date = _date.date().toString(Qt::SystemLocaleShortDate); + ToolTip tt; - return "" + QObject::tr("Date:") + " " + date + "
" - + QObject::tr("Distance:") + " " + distance(_distance, _units) - + "
" + QObject::tr("Time:") + " " + timeSpan(_time); + tt.insert("Distance", ::distance(_distance, _units)); + if (_time > 0) + tt.insert("Time", ::timeSpan(_time)); + if (!_date.isNull()) + tt.insert("Date", _date.toString(Qt::SystemLocaleShortDate)); + + return tt.toString(); } void TrackItem::updateShape() @@ -23,7 +28,8 @@ void TrackItem::updateShape() _shape = s.createStroke(path().simplified()); } -TrackItem::TrackItem(const Track &track) +TrackItem::TrackItem(const Track &track, QGraphicsItem *parent) + : QGraphicsPathItem(parent) { QVector t; QPainterPath path; diff --git a/src/trackitem.h b/src/trackitem.h index 7ed11ae6..aa759275 100644 --- a/src/trackitem.h +++ b/src/trackitem.h @@ -9,7 +9,7 @@ class TrackItem : public QGraphicsPathItem { public: - TrackItem(const Track &track); + TrackItem(const Track &track, QGraphicsItem *parent = 0); QPainterPath shape() const {return _shape;} void setScale(qreal scale); diff --git a/src/trackview.cpp b/src/trackview.cpp index 7f870c5f..f52af029 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -77,7 +77,7 @@ void TrackView::addWaypoints(const QList &waypoints) const Waypoint &w = waypoints.at(i); WaypointItem *wi = new WaypointItem(w); - wi->setPos(wi->coordinates() * 1.0/_scale); + wi->setScale(1.0/_scale); wi->setZValue(1); _scene->addItem(wi); @@ -207,11 +207,11 @@ void TrackView::rescale(qreal scale) } for (int i = 0; i < _waypoints.size(); i++) - _waypoints.at(i)->setPos(_waypoints.at(i)->coordinates() * 1.0/scale); + _waypoints.at(i)->setScale(1.0/scale); QHash::const_iterator it, jt; for (it = _pois.constBegin(); it != _pois.constEnd(); it++) { - it.value()->setPos(it.value()->coordinates() * 1.0/scale); + it.value()->setScale(1.0/scale); it.value()->show(); } @@ -235,7 +235,7 @@ void TrackView::addPOI(const QVector &waypoints) continue; WaypointItem *pi = new WaypointItem(w); - pi->setPos(pi->coordinates() * 1.0/_scale); + pi->setScale(1.0/_scale); pi->setZValue(1); _scene->addItem(pi); @@ -280,6 +280,13 @@ void TrackView::setUnits(enum Units units) for (int i = 0; i < _paths.count(); i++) _paths[i]->setUnits(units); + + for (int i = 0; i < _waypoints.size(); i++) + _waypoints.at(i)->setUnits(units); + + QHash::const_iterator it; + for (it = _pois.constBegin(); it != _pois.constEnd(); it++) + it.value()->setUnits(units); } void TrackView::redraw() diff --git a/src/waypointitem.cpp b/src/waypointitem.cpp index 4885081d..02ee2034 100644 --- a/src/waypointitem.cpp +++ b/src/waypointitem.cpp @@ -2,34 +2,45 @@ #include "config.h" #include "ll.h" #include "misc.h" +#include "tooltip.h" #include "waypointitem.h" #define POINT_SIZE 8 -static QString tt(const Waypoint &waypoint) +QString WaypointItem::toolTip() { - QString date = waypoint.timestamp().toString(Qt::SystemLocaleShortDate); + ToolTip tt; - return "" + QObject::tr("Coordinates:") + " " - + coordinates(waypoint.coordinates()) + "
" - + QObject::tr("Description:") + " " + waypoint.description() - + "
" + QObject::tr("Elevation:") + " " - + QString::number(waypoint.elevation() - waypoint.geoidHeight()) - + "
" + QObject::tr("Date:") + " " + date; + tt.insert("Coordinates", ::coordinates(_coordinates)); + if (!std::isnan(_elevation)) + tt.insert("Elevation", ::elevation(_elevation, _units)); + if (!_date.isNull()) + tt.insert("Date", _date.toString(Qt::SystemLocaleShortDate)); + if (!_description.isNull()) + tt.insert("Description", _description); + + return tt.toString(); } WaypointItem::WaypointItem(const Waypoint &waypoint, QGraphicsItem *parent) : QGraphicsItem(parent) { + _units = Metric; + _label = waypoint.name(); _coordinates = ll2mercator(QPointF(waypoint.coordinates().x(), -waypoint.coordinates().y())); + _elevation = waypoint.elevation() - waypoint.geoidHeight(); + _description = waypoint.description(); + _date = waypoint.timestamp(); updateBoundingRect(); - setToolTip(tt(waypoint)); + setToolTip(toolTip()); setCursor(Qt::ArrowCursor); + + setPos(_coordinates); } void WaypointItem::updateBoundingRect() @@ -67,3 +78,14 @@ void WaypointItem::paint(QPainter *painter, painter->drawRect(boundingRect()); */ } + +void WaypointItem::setScale(qreal scale) +{ + setPos(_coordinates * scale); +} + +void WaypointItem::setUnits(enum Units units) +{ + _units = units; + setToolTip(toolTip()); +} diff --git a/src/waypointitem.h b/src/waypointitem.h index aa817c63..c666204c 100644 --- a/src/waypointitem.h +++ b/src/waypointitem.h @@ -3,6 +3,7 @@ #include #include "waypoint.h" +#include "units.h" class WaypointItem : public QGraphicsItem { @@ -14,12 +15,21 @@ public: void paint(QPainter *painter, const QStyleOptionGraphicsItem *option, QWidget *widget); + void setUnits(enum Units units); + void setScale(qreal scale); + private: void updateBoundingRect(); + QString toolTip(); QString _label; QPointF _coordinates; QRectF _boundingRect; + + Units _units; + QDateTime _date; + QString _description; + qreal _elevation; }; #endif // WAYPOINTITEM_H