From 392b8297338eec974efa0b6a75ac6ffa65a9b11b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20T=C5=AFma?= Date: Wed, 10 Aug 2016 20:35:39 +0200 Subject: [PATCH] Redesigned obscure position marker handling --- src/routeitem.cpp | 12 +++++++++--- src/routeitem.h | 4 +++- src/trackitem.cpp | 10 +++++++--- src/trackitem.h | 2 +- src/trackview.cpp | 39 ++++++++++----------------------------- src/trackview.h | 2 +- 6 files changed, 31 insertions(+), 38 deletions(-) diff --git a/src/routeitem.cpp b/src/routeitem.cpp index 0e6bbef1..0904aa92 100644 --- a/src/routeitem.cpp +++ b/src/routeitem.cpp @@ -26,6 +26,8 @@ RouteItem::RouteItem(const Route &route, QGraphicsItem *parent) wi->setParentItem(this); } + _distance = route.distance(); + QBrush brush(Qt::SolidPattern); _pen = QPen(brush, ROUTE_WIDTH, Qt::DotLine); @@ -66,10 +68,14 @@ void RouteItem::setColor(const QColor &color) update(); } -void RouteItem::moveMarker(qreal t) +void RouteItem::moveMarker(qreal distance) { - Q_ASSERT(t >= 0 && t <= 1.0); - _marker->setPos(_path.pointAtPercent(t)); + if (distance > _distance) + _marker->setVisible(false); + else { + _marker->setVisible(true); + _marker->setPos(_path.pointAtPercent(distance / _distance)); + } } void RouteItem::showWaypoints(bool show) diff --git a/src/routeitem.h b/src/routeitem.h index 916c25bf..e2336c0c 100644 --- a/src/routeitem.h +++ b/src/routeitem.h @@ -20,7 +20,7 @@ public: void setColor(const QColor &color); void showMarker(bool show) {_marker->setVisible(show);} - void moveMarker(qreal t); + void moveMarker(qreal distance); void showWaypoints(bool show); void showWaypointLabels(bool show); @@ -30,6 +30,8 @@ private: QPen _pen; MarkerItem *_marker; + + qreal _distance; }; #endif // ROUTEITEM_H diff --git a/src/trackitem.cpp b/src/trackitem.cpp index d00def1b..0a363c71 100644 --- a/src/trackitem.cpp +++ b/src/trackitem.cpp @@ -99,8 +99,12 @@ void TrackItem::setUnits(enum Units units) setToolTip(toolTip()); } -void TrackItem::moveMarker(qreal t) +void TrackItem::moveMarker(qreal distance) { - Q_ASSERT(t >= 0 && t <= 1.0); - _marker->setPos(_path.pointAtPercent(t)); + if (distance > _distance) + _marker->setVisible(false); + else { + _marker->setVisible(true); + _marker->setPos(_path.pointAtPercent(distance / _distance)); + } } diff --git a/src/trackitem.h b/src/trackitem.h index 8d59570d..2e1ba5ac 100644 --- a/src/trackitem.h +++ b/src/trackitem.h @@ -25,7 +25,7 @@ public: void setColor(const QColor &color); void showMarker(bool show) {_marker->setVisible(show);} - void moveMarker(qreal t); + void moveMarker(qreal distance); private: void updateShape(); diff --git a/src/trackview.cpp b/src/trackview.cpp index 5beaf499..3ff62885 100644 --- a/src/trackview.cpp +++ b/src/trackview.cpp @@ -34,8 +34,6 @@ TrackView::TrackView(QWidget *parent) _zoom = ZOOM_MAX; _scale = mapScale(_zoom); _map = 0; - _maxPath = 0; - _maxDistance = 0; _units = Metric; @@ -48,6 +46,7 @@ TrackView::TrackView(QWidget *parent) _showRouteWaypoints = true; _plot = false; + _markerPos = 0; } TrackView::~TrackView() @@ -70,10 +69,8 @@ void TrackView::addTrack(const Track &track) ti->setScale(1.0/_scale); ti->setColor(_palette.color()); ti->setVisible(_showTracks); + ti->moveMarker(_markerPos); _scene->addItem(ti); - - _maxPath = qMax(ti->path().length(), _maxPath); - _maxDistance = qMax(track.distance(), _maxDistance); } void TrackView::addRoute(const Route &route) @@ -92,10 +89,8 @@ void TrackView::addRoute(const Route &route) ri->setVisible(_showRoutes); ri->showWaypoints(_showRouteWaypoints); ri->showWaypointLabels(_showWaypointLabels); + ri->moveMarker(_markerPos); _scene->addItem(ri); - - _maxPath = qMax(ri->path().length(), _maxPath); - _maxDistance = qMax(route.distance(), _maxDistance); } void TrackView::addWaypoints(const QList &waypoints) @@ -478,37 +473,23 @@ void TrackView::clear() _scene->clear(); _palette.reset(); - _maxPath = 0; - _maxDistance = 0; _zoom = ZOOM_MAX; _scale = mapScale(_zoom); _scene->setSceneRect(QRectF()); + + _markerPos = 0; } void TrackView::movePositionMarker(qreal val) { - qreal mp = val / _maxDistance; + _markerPos = val; - for (int i = 0; i < _tracks.size(); i++) { - qreal f = _maxPath / _tracks.at(i)->path().length(); - if (mp * f < 0 || mp * f > 1.0) - _tracks.at(i)->showMarker(false); - else { - _tracks.at(i)->moveMarker(mp * f); - _tracks.at(i)->showMarker(true); - } - } + for (int i = 0; i < _tracks.size(); i++) + _tracks.at(i)->moveMarker(val); - for (int i = 0; i < _routes.size(); i++) { - qreal f = _maxPath / _routes.at(i)->path().length(); - if (mp * f < 0 || mp * f > 1.0) - _routes.at(i)->showMarker(false); - else { - _routes.at(i)->moveMarker(mp * f); - _routes.at(i)->showMarker(true); - } - } + for (int i = 0; i < _routes.size(); i++) + _routes.at(i)->moveMarker(val); } void TrackView::showTracks(bool show) diff --git a/src/trackview.h b/src/trackview.h index db071782..13794e7a 100644 --- a/src/trackview.h +++ b/src/trackview.h @@ -88,7 +88,6 @@ private: ScaleItem *_mapScale; Palette _palette; - qreal _maxPath, _maxDistance; qreal _scale; int _zoom; @@ -104,6 +103,7 @@ private: bool _showRouteWaypoints; bool _plot; + qreal _markerPos; }; #endif // TRACKVIEW_H