Use the canonical file name also for the "already open" check
[GPXSee.git] / src / GUI / coordinatesitem.cpp
blobdbf3911b392ea246e5817b5f34be57886ef67fff
1 #include <QFontMetrics>
2 #include <QPainter>
3 #include "font.h"
4 #include "coordinatesitem.h"
7 CoordinatesItem::CoordinatesItem(QGraphicsItem *parent) : QGraphicsItem(parent)
9 _format = DecimalDegrees;
10 _units = Metric;
11 _ele = NAN;
12 _color = Qt::black;
13 _bgColor = Qt::white;
14 _drawBackground = false;
15 _font.setPixelSize(FONT_SIZE);
16 _font.setFamily(FONT_FAMILY);
17 _digitalZoom = 0;
19 setAcceptHoverEvents(true);
21 updateBoundingRect();
24 void CoordinatesItem::paint(QPainter *painter,
25 const QStyleOptionGraphicsItem *option, QWidget *widget)
27 Q_UNUSED(option);
28 Q_UNUSED(widget);
30 if (!_c.isValid())
31 return;
33 if (_drawBackground) {
34 painter->setPen(Qt::NoPen);
35 QColor bc(_bgColor);
36 bc.setAlpha(196);
37 painter->setBrush(QBrush(bc));
38 painter->drawRect(_boundingRect);
39 painter->setBrush(Qt::NoBrush);
42 QFontMetrics fm(_font);
43 painter->setFont(_font);
44 painter->setPen(QPen(_color));
45 painter->drawText(0, -fm.descent(), text());
47 //painter->setPen(Qt::red);
48 //painter->drawRect(boundingRect());
51 void CoordinatesItem::setCoordinates(const Coordinates &c, qreal elevation)
53 prepareGeometryChange();
55 _c = c;
56 _ele = elevation;
58 updateBoundingRect();
59 update();
62 void CoordinatesItem::setFormat(CoordinatesFormat format)
64 prepareGeometryChange();
66 _format = format;
67 updateBoundingRect();
70 void CoordinatesItem::setUnits(Units units)
72 prepareGeometryChange();
74 _units = units;
75 updateBoundingRect();
78 void CoordinatesItem::setDigitalZoom(qreal zoom)
80 _digitalZoom = zoom;
81 setScale(pow(2, -_digitalZoom));
84 QString CoordinatesItem::text() const
86 return (std::isnan(_ele))
87 ? Format::coordinates(_c, _format)
88 : Format::coordinates(_c, _format) + ", " + Format::elevation(_ele, _units);
91 void CoordinatesItem::updateBoundingRect()
93 QFontMetrics fm(_font);
95 QRectF br(fm.tightBoundingRect(text()));
96 QRectF r1(br);
97 QRectF r2(br);
98 r1.moveTop(-fm.ascent());
99 r2.moveBottom(-fm.descent());
101 _boundingRect = r1 | r2;
104 void CoordinatesItem::setColor(const QColor &color)
106 _color = color;
107 update();
110 void CoordinatesItem::setBackgroundColor(const QColor &color)
112 _bgColor = color;
113 update();
116 void CoordinatesItem::drawBackground(bool draw)
118 _drawBackground = draw;
119 update();