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