Fixed path marker inaccuracy issue.
[GPXSee.git] / src / routeitem.cpp
blob11383f8deafaff8fa4d85860a1caeabb2b3c2e7f
1 #include <QApplication>
2 #include <QPainter>
3 #include "format.h"
4 #include "waypoint.h"
5 #include "waypointitem.h"
6 #include "tooltip.h"
7 #include "routeitem.h"
10 QString RouteItem::toolTip()
12 ToolTip tt;
14 if (!_name.isEmpty())
15 tt.insert(qApp->translate("RouteItem", "Name"), _name);
16 if (!_desc.isEmpty())
17 tt.insert(qApp->translate("RouteItem", "Description"), _desc);
18 tt.insert(qApp->translate("RouteItem", "Distance"),
19 Format::distance(_distance.last(), _units));
21 return tt.toString();
24 RouteItem::RouteItem(const Route &route, QGraphicsItem *parent)
25 : PathItem(parent)
27 const RouteData &r = route.routeData();
28 Q_ASSERT(r.count() >= 2);
29 QPointF p;
31 _name = r.name();
32 _desc = r.description();
33 _distance = route.distanceData();
35 new WaypointItem(r.at(0), this);
36 p = r.at(0).coordinates().toMercator();
37 _path.moveTo(QPointF(p.x(), -p.y()));
38 for (int i = 1; i < r.size(); i++) {
39 p = r.at(i).coordinates().toMercator();
40 _path.lineTo(QPointF(p.x(), -p.y()));
41 new WaypointItem(r.at(i), this);
44 updateShape();
46 _marker->setPos(_path.pointAtPercent(0));
48 _pen.setStyle(Qt::DotLine);
50 setToolTip(toolTip());
53 void RouteItem::setScale(qreal scale)
55 QList<QGraphicsItem *> childs = childItems();
56 for (int i = 0; i < childs.count(); i++)
57 childs.at(i)->setScale(1.0/scale);
59 PathItem::setScale(scale);
62 void RouteItem::setUnits(enum Units units)
64 PathItem::setUnits(units);
65 setToolTip(toolTip());
68 void RouteItem::showWaypoints(bool show)
70 QList<QGraphicsItem *> childs = childItems();
71 for (int i = 0; i < childs.count(); i++)
72 if (childs.at(i) != _marker)
73 childs.at(i)->setVisible(show);
76 void RouteItem::showWaypointLabels(bool show)
78 QList<QGraphicsItem *> childs = childItems();
79 for (int i = 0; i < childs.count(); i++) {
80 if (childs.at(i) != _marker) {
81 WaypointItem *wi = static_cast<WaypointItem*>(childs.at(i));
82 wi->showLabel(show);