mirror of
https://github.com/tumic0/GPXSee.git
synced 2024-11-24 03:35:53 +01:00
Redesigned obscure position marker handling
This commit is contained in:
parent
36083d2fa1
commit
392b829733
@ -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)
|
||||
|
@ -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
|
||||
|
@ -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));
|
||||
}
|
||||
}
|
||||
|
@ -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();
|
||||
|
@ -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<Waypoint> &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)
|
||||
|
@ -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
|
||||
|
Loading…
Reference in New Issue
Block a user