mirror of
https://github.com/tumic0/GPXSee.git
synced 2025-07-04 06:49:16 +02:00
Compare commits
8 Commits
Author | SHA1 | Date | |
---|---|---|---|
30e78591c5 | |||
a26b1257b2 | |||
97a9dadd39 | |||
6acbf0d89f | |||
9941faa218 | |||
e7edd5c3c3 | |||
16cce5abd0 | |||
c2391929d3 |
@ -63,7 +63,7 @@ Section "GPXSee (required)" SEC_APP
|
||||
; Write the uninstall keys for Windows
|
||||
WriteRegStr HKCU "${REGENTRY}" "DisplayName" "GPXSee"
|
||||
WriteRegStr HKCU "${REGENTRY}" "Publisher" "Martin Tuma"
|
||||
WriteRegStr HKCU "${REGENTRY}" "DisplayVersion" "2.5"
|
||||
WriteRegStr HKCU "${REGENTRY}" "DisplayVersion" "2.6"
|
||||
WriteRegStr HKCU "${REGENTRY}" "UninstallString" '"$INSTDIR\uninstall.exe"'
|
||||
WriteRegDWORD HKCU "${REGENTRY}" "NoModify" 1
|
||||
WriteRegDWORD HKCU "${REGENTRY}" "NoRepair" 1
|
||||
|
@ -28,7 +28,9 @@ HEADERS += src/config.h \
|
||||
src/map.h \
|
||||
src/maplist.h \
|
||||
src/downloader.h \
|
||||
src/units.h
|
||||
src/units.h \
|
||||
src/scaleitem.h \
|
||||
src/nicenum.h
|
||||
SOURCES += src/main.cpp \
|
||||
src/gui.cpp \
|
||||
src/gpx.cpp \
|
||||
@ -49,7 +51,9 @@ SOURCES += src/main.cpp \
|
||||
src/filebrowser.cpp \
|
||||
src/map.cpp \
|
||||
src/maplist.cpp \
|
||||
src/downloader.cpp
|
||||
src/downloader.cpp \
|
||||
src/scaleitem.cpp \
|
||||
src/nicenum.cpp
|
||||
RESOURCES += gpxsee.qrc
|
||||
TRANSLATIONS = lang/gpxsee_cs.ts
|
||||
macx:ICON = icons/gpxsee.icns
|
||||
|
@ -1,6 +1,7 @@
|
||||
#include <cmath>
|
||||
#include <QPainter>
|
||||
#include "config.h"
|
||||
#include "nicenum.h"
|
||||
#include "axisitem.h"
|
||||
|
||||
|
||||
@ -15,38 +16,6 @@ struct Label {
|
||||
double d;
|
||||
};
|
||||
|
||||
static double niceNum(double x, int round)
|
||||
{
|
||||
int expv;
|
||||
double f;
|
||||
double nf;
|
||||
|
||||
expv = floor(log10(x));
|
||||
f = x / pow(10.0, expv);
|
||||
|
||||
if (round) {
|
||||
if (f < 1.5)
|
||||
nf = 1.0;
|
||||
else if (f < 3.0)
|
||||
nf = 2.0;
|
||||
else if (f < 7.0)
|
||||
nf = 5.0;
|
||||
else
|
||||
nf = 10.0;
|
||||
} else {
|
||||
if (f <= 1.0)
|
||||
nf = 1.;
|
||||
else if (f <= 2.0)
|
||||
nf = 2.0;
|
||||
else if (f <= 5.0)
|
||||
nf = 5.0;
|
||||
else
|
||||
nf = 10.0;
|
||||
}
|
||||
|
||||
return nf * pow(10.0, expv);
|
||||
}
|
||||
|
||||
static struct Label label(double min, double max, int ticks)
|
||||
{
|
||||
double range;
|
||||
@ -123,7 +92,6 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QFont font;
|
||||
font.setPixelSize(FONT_SIZE);
|
||||
font.setFamily(FONT_FAMILY);
|
||||
painter->setFont(font);
|
||||
QFontMetrics fm(font);
|
||||
QRect ts, ls;
|
||||
struct Label l;
|
||||
@ -131,6 +99,8 @@ void AxisItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
qreal val;
|
||||
|
||||
|
||||
painter->setFont(font);
|
||||
|
||||
ls = fm.tightBoundingRect(_label);
|
||||
|
||||
if (_type == X) {
|
||||
|
@ -3,7 +3,7 @@
|
||||
|
||||
#define APP_NAME "GPXSee"
|
||||
#define APP_HOMEPAGE "http://tumic.wz.cz/gpxsee"
|
||||
#define APP_VERSION "2.5"
|
||||
#define APP_VERSION "2.6"
|
||||
|
||||
#define FONT_FAMILY "Arial"
|
||||
#define FONT_SIZE 12
|
||||
|
@ -237,7 +237,7 @@ void Graph::plot(QPainter *painter, const QRectF &target)
|
||||
resize(canvas);
|
||||
_slider->hide();
|
||||
_info->hide();
|
||||
_scene->render(painter, target, QRectF(), Qt::KeepAspectRatioByExpanding);
|
||||
_scene->render(painter, target, QRectF());
|
||||
_slider->show();
|
||||
_info->show();
|
||||
resize(orig);
|
||||
|
@ -170,12 +170,14 @@ void GUI::createActions()
|
||||
_showPOIAction = new QAction(QIcon(QPixmap(SHOW_POI_ICON)),
|
||||
tr("Show POIs"), this);
|
||||
_showPOIAction->setCheckable(true);
|
||||
_showPOIAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_P));
|
||||
connect(_showPOIAction, SIGNAL(triggered(bool)), this, SLOT(showPOI(bool)));
|
||||
|
||||
// Map actions
|
||||
_showMapAction = new QAction(QIcon(QPixmap(SHOW_MAP_ICON)), tr("Show map"),
|
||||
this);
|
||||
_showMapAction->setCheckable(true);
|
||||
_showMapAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_M));
|
||||
connect(_showMapAction, SIGNAL(triggered(bool)), this, SLOT(showMap(bool)));
|
||||
if (_maps.empty())
|
||||
_showMapAction->setEnabled(false);
|
||||
@ -186,6 +188,7 @@ void GUI::createActions()
|
||||
_showGraphsAction = new QAction(tr("Show graphs"), this);
|
||||
_showGraphsAction->setCheckable(true);
|
||||
_showGraphsAction->setChecked(true);
|
||||
_showGraphsAction->setShortcut(QKeySequence(Qt::CTRL + Qt::Key_G));
|
||||
connect(_showGraphsAction, SIGNAL(triggered(bool)), this,
|
||||
SLOT(showGraphs(bool)));
|
||||
_showToolbarsAction = new QAction(tr("Show toolbars"), this);
|
||||
@ -670,6 +673,7 @@ void GUI::updateNavigationActions()
|
||||
|
||||
void GUI::setMetricUnits()
|
||||
{
|
||||
_track->setUnits(Metric);
|
||||
_elevationGraph->setUnits(Metric);
|
||||
_speedGraph->setUnits(Metric);
|
||||
updateStatusBarInfo();
|
||||
@ -677,6 +681,7 @@ void GUI::setMetricUnits()
|
||||
|
||||
void GUI::setImperialUnits()
|
||||
{
|
||||
_track->setUnits(Imperial);
|
||||
_elevationGraph->setUnits(Imperial);
|
||||
_speedGraph->setUnits(Imperial);
|
||||
updateStatusBarInfo();
|
||||
|
@ -3,7 +3,6 @@
|
||||
#include "config.h"
|
||||
#include "infoitem.h"
|
||||
|
||||
|
||||
#define PADDING 10
|
||||
|
||||
InfoItem::InfoItem(QGraphicsItem *parent) : QGraphicsItem(parent)
|
||||
@ -11,24 +10,21 @@ InfoItem::InfoItem(QGraphicsItem *parent) : QGraphicsItem(parent)
|
||||
|
||||
}
|
||||
|
||||
QRectF InfoItem::boundingRect() const
|
||||
void InfoItem::updateBoundingRect()
|
||||
{
|
||||
QFont font;
|
||||
font.setPixelSize(FONT_SIZE);
|
||||
font.setFamily(FONT_FAMILY);
|
||||
QFontMetrics fm(font);
|
||||
QList<KV>::const_iterator i;
|
||||
int width = 0;
|
||||
|
||||
if (_list.isEmpty())
|
||||
return QRectF();
|
||||
qreal width = 0;
|
||||
|
||||
for (i = _list.constBegin(); i != _list.constEnd(); i++) {
|
||||
width += fm.width(i->key + ": ");
|
||||
width += fm.width(i->value) + ((i == _list.end() - 1) ? 0 : PADDING);
|
||||
}
|
||||
|
||||
return QRectF(0, 0, width, fm.height());
|
||||
_boundingRect = QRectF(0, 0, width, _list.isEmpty() ? 0 : fm.height());
|
||||
}
|
||||
|
||||
void InfoItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
@ -74,5 +70,13 @@ void InfoItem::insert(const QString &key, const QString &value)
|
||||
else
|
||||
_list[i] = kv;
|
||||
|
||||
updateBoundingRect();
|
||||
prepareGeometryChange();
|
||||
}
|
||||
|
||||
void InfoItem::clear()
|
||||
{
|
||||
_list.clear();
|
||||
updateBoundingRect();
|
||||
prepareGeometryChange();
|
||||
}
|
||||
|
@ -9,14 +9,16 @@ class InfoItem : public QGraphicsItem
|
||||
public:
|
||||
InfoItem(QGraphicsItem *parent = 0);
|
||||
|
||||
QRectF boundingRect() const;
|
||||
QRectF boundingRect() const {return _boundingRect;}
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
void insert(const QString &key, const QString &value);
|
||||
void clear() {_list.clear();}
|
||||
void clear();
|
||||
|
||||
private:
|
||||
void updateBoundingRect();
|
||||
|
||||
class KV {
|
||||
public:
|
||||
QString key;
|
||||
@ -29,6 +31,7 @@ private:
|
||||
};
|
||||
|
||||
QList<KV> _list;
|
||||
QRectF _boundingRect;
|
||||
};
|
||||
|
||||
#endif // INFOITEM_H
|
||||
|
@ -68,3 +68,9 @@ int scale2zoom(qreal scale)
|
||||
return ZOOM_MAX;
|
||||
return zoom;
|
||||
}
|
||||
|
||||
qreal zoom2resolution(int zoom, qreal y)
|
||||
{
|
||||
return (WGS84_RADIUS * 2 * M_PI / 256 * cos(2 * atan(exp(deg2rad(y)))
|
||||
- M_PI/2)) / pow(2.0, zoom);
|
||||
}
|
||||
|
1
src/ll.h
1
src/ll.h
@ -12,5 +12,6 @@ qreal llDistance(const QPointF &p1, const QPointF &p2);
|
||||
QPoint mercator2tile(const QPointF &m, int zoom);
|
||||
QPointF tile2mercator(const QPoint &tile, int zoom);
|
||||
int scale2zoom(qreal scale);
|
||||
qreal zoom2resolution(int zoom, qreal y);
|
||||
|
||||
#endif // LL_H
|
||||
|
34
src/nicenum.cpp
Normal file
34
src/nicenum.cpp
Normal file
@ -0,0 +1,34 @@
|
||||
#include <cmath>
|
||||
#include "nicenum.h"
|
||||
|
||||
double niceNum(double x, int round)
|
||||
{
|
||||
int expv;
|
||||
double f;
|
||||
double nf;
|
||||
|
||||
expv = floor(log10(x));
|
||||
f = x / pow(10.0, expv);
|
||||
|
||||
if (round) {
|
||||
if (f < 1.5)
|
||||
nf = 1.0;
|
||||
else if (f < 3.0)
|
||||
nf = 2.0;
|
||||
else if (f < 7.0)
|
||||
nf = 5.0;
|
||||
else
|
||||
nf = 10.0;
|
||||
} else {
|
||||
if (f <= 1.0)
|
||||
nf = 1.0;
|
||||
else if (f <= 2.0)
|
||||
nf = 2.0;
|
||||
else if (f <= 5.0)
|
||||
nf = 5.0;
|
||||
else
|
||||
nf = 10.0;
|
||||
}
|
||||
|
||||
return nf * pow(10.0, expv);
|
||||
}
|
6
src/nicenum.h
Normal file
6
src/nicenum.h
Normal file
@ -0,0 +1,6 @@
|
||||
#ifndef NICENUM_H
|
||||
#define NICENUM_H
|
||||
|
||||
double niceNum(double x, int round);
|
||||
|
||||
#endif // NICENUM_H
|
129
src/scaleitem.cpp
Normal file
129
src/scaleitem.cpp
Normal file
@ -0,0 +1,129 @@
|
||||
#include <QPainter>
|
||||
#include "config.h"
|
||||
#include "ll.h"
|
||||
#include "nicenum.h"
|
||||
#include "scaleitem.h"
|
||||
|
||||
|
||||
#define SCALE_WIDTH 132
|
||||
#define SCALE_HEIGHT 5
|
||||
#define SEGMENTS 3
|
||||
|
||||
#define PADDING 4
|
||||
|
||||
|
||||
ScaleItem::ScaleItem(QGraphicsItem *parent) : QGraphicsItem(parent)
|
||||
{
|
||||
_units = Metric;
|
||||
_zoom = ZOOM_MIN;
|
||||
_lat = 0;
|
||||
}
|
||||
|
||||
void ScaleItem::updateBoundingRect()
|
||||
{
|
||||
QFont font;
|
||||
font.setPixelSize(FONT_SIZE);
|
||||
font.setFamily(FONT_FAMILY);
|
||||
QFontMetrics fm(font);
|
||||
QRect ss, es, us;
|
||||
|
||||
ss = fm.tightBoundingRect(QString::number(0));
|
||||
es = fm.tightBoundingRect(QString::number(_length * SEGMENTS));
|
||||
us = fm.tightBoundingRect(units());
|
||||
|
||||
_boundingRect = QRectF(-ss.width()/2, 0,
|
||||
_width * SEGMENTS + ss.width()/2 + qMax(us.width() + PADDING, es.width()/2),
|
||||
SCALE_HEIGHT + PADDING + ss.height() + 2*fm.descent());
|
||||
}
|
||||
|
||||
void ScaleItem::paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget)
|
||||
{
|
||||
Q_UNUSED(option);
|
||||
Q_UNUSED(widget);
|
||||
QFont font;
|
||||
font.setPixelSize(FONT_SIZE);
|
||||
font.setFamily(FONT_FAMILY);
|
||||
QFontMetrics fm(font);
|
||||
QRect br;
|
||||
|
||||
painter->setFont(font);
|
||||
|
||||
for (int i = 0; i <= SEGMENTS; i++) {
|
||||
QString label = QString::number(_length * i);
|
||||
br = fm.tightBoundingRect(label);
|
||||
painter->drawText(_width * i - br.width()/2, br.height(), label);
|
||||
}
|
||||
painter->drawText(_width * SEGMENTS + PADDING, SCALE_HEIGHT + PADDING
|
||||
+ br.height() + fm.descent(), units());
|
||||
|
||||
painter->drawRect(QRectF(0, br.height() + PADDING, SEGMENTS * _width,
|
||||
SCALE_HEIGHT));
|
||||
for (int i = 0; i < SEGMENTS; i += 2)
|
||||
painter->fillRect(QRectF(i * _width, br.height() + PADDING, _width,
|
||||
SCALE_HEIGHT), Qt::black);
|
||||
|
||||
/*
|
||||
painter->setPen(Qt::red);
|
||||
painter->drawRect(boundingRect());
|
||||
*/
|
||||
}
|
||||
|
||||
QString ScaleItem::units() const
|
||||
{
|
||||
if (_units == Imperial)
|
||||
return _scale ? QObject::tr("mi") : QObject::tr("ft");
|
||||
else
|
||||
return _scale ? QObject::tr("km") : QObject::tr("m");
|
||||
}
|
||||
|
||||
void ScaleItem::computeScale()
|
||||
{
|
||||
qreal res = zoom2resolution(_zoom, _lat);
|
||||
|
||||
if (_units == Imperial) {
|
||||
_length = niceNum((res * M2FT * SCALE_WIDTH) / SEGMENTS, 1);
|
||||
if (_length >= MIINFT) {
|
||||
_length = niceNum((res * M2FT * FT2MI * SCALE_WIDTH) / SEGMENTS, 1);
|
||||
_width = (_length / (res * M2FT * FT2MI));
|
||||
_scale = true;
|
||||
} else {
|
||||
_width = (_length / (res * M2FT));
|
||||
_scale = false;
|
||||
}
|
||||
} else {
|
||||
_length = niceNum((res * SCALE_WIDTH) / SEGMENTS, 1);
|
||||
if (_length >= KMINM) {
|
||||
_length *= M2KM;
|
||||
_width = (_length / (res * M2KM));
|
||||
_scale = true;
|
||||
} else {
|
||||
_width = (_length / res);
|
||||
_scale = false;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void ScaleItem::setLatitude(qreal lat)
|
||||
{
|
||||
_lat = lat;
|
||||
computeScale();
|
||||
updateBoundingRect();
|
||||
prepareGeometryChange();
|
||||
}
|
||||
|
||||
void ScaleItem::setZoom(int z)
|
||||
{
|
||||
_zoom = z;
|
||||
computeScale();
|
||||
updateBoundingRect();
|
||||
prepareGeometryChange();
|
||||
}
|
||||
|
||||
void ScaleItem::setUnits(enum Units units)
|
||||
{
|
||||
_units = units;
|
||||
computeScale();
|
||||
updateBoundingRect();
|
||||
prepareGeometryChange();
|
||||
}
|
35
src/scaleitem.h
Normal file
35
src/scaleitem.h
Normal file
@ -0,0 +1,35 @@
|
||||
#ifndef SCALEITEM_H
|
||||
#define SCALEITEM_H
|
||||
|
||||
#include <QGraphicsItem>
|
||||
#include "units.h"
|
||||
|
||||
class ScaleItem : public QGraphicsItem
|
||||
{
|
||||
public:
|
||||
ScaleItem(QGraphicsItem *parent = 0);
|
||||
|
||||
QRectF boundingRect() const {return _boundingRect;}
|
||||
void paint(QPainter *painter, const QStyleOptionGraphicsItem *option,
|
||||
QWidget *widget);
|
||||
|
||||
void setLatitude(qreal lat);
|
||||
void setZoom(int z);
|
||||
void setUnits(enum Units units);
|
||||
|
||||
private:
|
||||
void updateBoundingRect();
|
||||
void computeScale();
|
||||
QString units() const;
|
||||
|
||||
int _zoom;
|
||||
qreal _lat;
|
||||
qreal _width;
|
||||
qreal _length;
|
||||
Units _units;
|
||||
bool _scale;
|
||||
|
||||
QRectF _boundingRect;
|
||||
};
|
||||
|
||||
#endif // SCALEITEM_H
|
@ -5,12 +5,14 @@
|
||||
#include <QWheelEvent>
|
||||
#include "poiitem.h"
|
||||
#include "markeritem.h"
|
||||
#include "scaleitem.h"
|
||||
#include "ll.h"
|
||||
#include "track.h"
|
||||
|
||||
|
||||
#define MARGIN 10.0
|
||||
#define TRACK_WIDTH 3
|
||||
#define MARGIN 10.0
|
||||
#define TRACK_WIDTH 3
|
||||
#define SCALE_OFFSET 7
|
||||
|
||||
Track::Track(QWidget *parent)
|
||||
: QGraphicsView(parent)
|
||||
@ -19,9 +21,13 @@ Track::Track(QWidget *parent)
|
||||
setScene(_scene);
|
||||
setCacheMode(QGraphicsView::CacheBackground);
|
||||
setDragMode(QGraphicsView::ScrollHandDrag);
|
||||
setViewportUpdateMode(QGraphicsView::FullViewportUpdate);
|
||||
setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
|
||||
|
||||
_mapScale = new ScaleItem();
|
||||
_mapScale->setZValue(2.0);
|
||||
|
||||
_zoom = -1;
|
||||
_scale = 1.0;
|
||||
_map = 0;
|
||||
@ -79,6 +85,12 @@ void Track::loadGPX(const GPX &gpx)
|
||||
QRectF ba = br.adjusted(-TILE_SIZE, -TILE_SIZE, TILE_SIZE, TILE_SIZE);
|
||||
_scene->setSceneRect(ba);
|
||||
centerOn(ba.center());
|
||||
|
||||
if (_mapScale->scene() != _scene)
|
||||
_scene->addItem(_mapScale);
|
||||
|
||||
_mapScale->setLatitude(track.at(track.size() / 2).y());
|
||||
_mapScale->setZoom(_zoom);
|
||||
}
|
||||
|
||||
QRectF Track::trackBoundingRect() const
|
||||
@ -198,6 +210,11 @@ void Track::setMap(Map *map)
|
||||
resetCachedContent();
|
||||
}
|
||||
|
||||
void Track::setUnits(enum Units units)
|
||||
{
|
||||
_mapScale->setUnits(units);
|
||||
}
|
||||
|
||||
void Track::redraw()
|
||||
{
|
||||
resetCachedContent();
|
||||
@ -225,13 +242,9 @@ void Track::wheelEvent(QWheelEvent *event)
|
||||
else
|
||||
centerOn(pos * scale/_scale);
|
||||
|
||||
resetCachedContent();
|
||||
}
|
||||
_mapScale->setZoom(_zoom);
|
||||
|
||||
void Track::showMarkers(bool show)
|
||||
{
|
||||
for (int i = 0; i < _markers.size(); i++)
|
||||
_markers.at(i)->setVisible(show);
|
||||
resetCachedContent();
|
||||
}
|
||||
|
||||
void Track::setTrackLineWidth(qreal width)
|
||||
@ -245,10 +258,14 @@ void Track::setTrackLineWidth(qreal width)
|
||||
|
||||
void Track::plot(QPainter *painter, const QRectF &target)
|
||||
{
|
||||
QRectF orig = _scene->itemsBoundingRect();
|
||||
QRectF adj;
|
||||
QRectF orig, adj;
|
||||
qreal ratio, diff;
|
||||
|
||||
_scene->removeItem(_mapScale);
|
||||
orig = _scene->itemsBoundingRect().adjusted(0, 0, 0,
|
||||
_mapScale->boundingRect().height());
|
||||
_scene->addItem(_mapScale);
|
||||
|
||||
if (target.width()/target.height() > orig.width()/orig.height()) {
|
||||
ratio = target.width()/target.height();
|
||||
diff = qAbs((orig.height() * ratio) - orig.width());
|
||||
@ -259,11 +276,13 @@ void Track::plot(QPainter *painter, const QRectF &target)
|
||||
adj = orig.adjusted(0, -diff/2, 0, diff/2);
|
||||
}
|
||||
|
||||
showMarkers(false);
|
||||
_mapScale->setPos(adj.bottomRight()
|
||||
+ QPoint(-_mapScale->boundingRect().width(),
|
||||
-_mapScale->boundingRect().height()));
|
||||
|
||||
setTrackLineWidth(0);
|
||||
_scene->render(painter, target, adj, Qt::KeepAspectRatioByExpanding);
|
||||
_scene->render(painter, target, adj);
|
||||
setTrackLineWidth(TRACK_WIDTH * _scale);
|
||||
showMarkers(true);
|
||||
}
|
||||
|
||||
enum QPrinter::Orientation Track::orientation() const
|
||||
@ -286,6 +305,9 @@ void Track::clearPOI()
|
||||
|
||||
void Track::clear()
|
||||
{
|
||||
if (_mapScale->scene() == _scene)
|
||||
_scene->removeItem(_mapScale);
|
||||
|
||||
_pois.clear();
|
||||
_tracks.clear();
|
||||
_trackPaths.clear();
|
||||
@ -362,3 +384,13 @@ void Track::resizeEvent(QResizeEvent *e)
|
||||
centerOn(br.center());
|
||||
resetCachedContent();
|
||||
}
|
||||
|
||||
void Track::paintEvent(QPaintEvent *e)
|
||||
{
|
||||
QPointF scenePos = mapToScene(rect().bottomLeft() + QPoint(SCALE_OFFSET,
|
||||
-(SCALE_OFFSET + _mapScale->boundingRect().height())));
|
||||
if (_mapScale->pos() != scenePos)
|
||||
_mapScale->setPos(scenePos);
|
||||
|
||||
QGraphicsView::paintEvent(e);
|
||||
}
|
||||
|
@ -9,11 +9,13 @@
|
||||
#include "poi.h"
|
||||
#include "gpx.h"
|
||||
#include "map.h"
|
||||
#include "units.h"
|
||||
#include "colorshop.h"
|
||||
|
||||
|
||||
class POIItem;
|
||||
class MarkerItem;
|
||||
class ScaleItem;
|
||||
|
||||
class Track : public QGraphicsView
|
||||
{
|
||||
@ -30,6 +32,7 @@ public:
|
||||
void clear();
|
||||
|
||||
void setMap(Map *map);
|
||||
void setUnits(enum Units units);
|
||||
|
||||
void plot(QPainter *painter, const QRectF &target);
|
||||
enum QPrinter::Orientation orientation() const;
|
||||
@ -52,6 +55,7 @@ private:
|
||||
void wheelEvent(QWheelEvent *event);
|
||||
void drawBackground(QPainter *painter, const QRectF &rect);
|
||||
void resizeEvent(QResizeEvent *e);
|
||||
void paintEvent(QPaintEvent *e);
|
||||
|
||||
QGraphicsScene *_scene;
|
||||
QList<QVector<QPointF> > _tracks;
|
||||
@ -59,6 +63,7 @@ private:
|
||||
QList<MarkerItem*> _markers;
|
||||
QHash<Entry, POIItem*> _pois;
|
||||
Map *_map;
|
||||
ScaleItem *_mapScale;
|
||||
|
||||
ColorShop _colorShop;
|
||||
qreal _maxLen;
|
||||
|
@ -11,5 +11,9 @@ enum Units {
|
||||
#define M2FT 3.280839900000 // m -> ft
|
||||
#define MS2KMH 3.600000000000 // m/s -> km/h
|
||||
#define MS2MIH 2.236936290000 // m/s -> mi/h
|
||||
#define FT2MI 0.000189393939 // ft -> mi
|
||||
|
||||
#define MIINFT 5280 // 1 mi in ft
|
||||
#define KMINM 1000 // 1 km in m
|
||||
|
||||
#endif // UNITS_H
|
||||
|
Reference in New Issue
Block a user