Added Israleli grid projection
[GPXSee.git] / src / GUI / format.cpp
blob36ec0bce56613bc5422c1588188927d05f42002d
1 #include <QApplication>
2 #include "common/coordinates.h"
3 #include "format.h"
6 static QString deg2DMS(double val)
8 int deg = val;
9 double r1 = val - deg;
11 int min = r1 * 60.0;
12 double r2 = r1 - (min / 60.0);
14 double sec = r2 * 3600.0;
16 return QString("%1°%2'%3\"").arg(deg).arg(min, 2, 10, QChar('0'))
17 .arg(sec, 4, 'f', 1, QChar('0'));
20 static QString deg2DMM(double val)
22 int deg = val;
23 double r1 = val - deg;
25 double min = r1 * 60.0;
27 return QString("%1°%2'").arg(deg).arg(min, 6, 'f', 3, QChar('0'));
31 QString Format::timeSpan(qreal time, bool full)
33 unsigned h, m, s;
35 h = time / 3600;
36 m = (time - (h * 3600)) / 60;
37 s = time - (h * 3600) - (m * 60);
39 if (full || h)
40 return QString("%1:%2:%3").arg(h, 2, 10, QChar('0'))
41 .arg(m, 2, 10, QChar('0')).arg(s, 2, 10, QChar('0'));
42 else
43 return QString("%1:%2").arg(m, 2, 10, QChar('0'))
44 .arg(s, 2, 10, QChar('0'));
47 QString Format::distance(qreal value, Units units)
49 QLocale l(QLocale::system());
51 if (units == Imperial) {
52 if (value < MIINM)
53 return l.toString(value * M2FT, 'f', 0) + UNIT_SPACE
54 + qApp->translate("Format", "ft");
55 else
56 return l.toString(value * M2MI, 'f', 1) + UNIT_SPACE
57 + qApp->translate("Format", "mi");
58 } else if (units == Nautical) {
59 if (value < NMIINM)
60 return l.toString(value * M2FT, 'f', 0) + UNIT_SPACE
61 + qApp->translate("Format", "ft");
62 else
63 return l.toString(value * M2NMI, 'f', 1) + UNIT_SPACE
64 + qApp->translate("Format", "nmi");
65 } else {
66 if (value < KMINM)
67 return l.toString(value, 'f', 0) + UNIT_SPACE
68 + qApp->translate("Format", "m");
69 else
70 return l.toString(value * M2KM, 'f', 1) + UNIT_SPACE
71 + qApp->translate("Format", "km");
75 QString Format::elevation(qreal value, Units units)
77 QLocale l(QLocale::system());
79 if (units == Metric)
80 return l.toString(qRound(value)) + UNIT_SPACE
81 + qApp->translate("Format", "m");
82 else
83 return l.toString(qRound(value * M2FT)) + UNIT_SPACE
84 + qApp->translate("Format", "ft");
88 QString Format::lon(const Coordinates &c, CoordinatesFormat type)
90 QChar xH = (c.lon() < 0) ? 'W' : 'E';
92 switch (type) {
93 case DegreesMinutes:
94 return deg2DMM(qAbs(c.lon())) + xH;
95 case DMS:
96 return deg2DMS(qAbs(c.lon())) + xH;
97 default:
98 QLocale l(QLocale::system());
99 return l.toString(qAbs(c.lon()), 'f', 5) + xH;
103 QString Format::lat(const Coordinates &c, CoordinatesFormat type)
105 QChar yH = (c.lat() < 0) ? 'S' : 'N';
107 switch (type) {
108 case DegreesMinutes:
109 return deg2DMM(qAbs(c.lat())) + yH;
110 case DMS:
111 return deg2DMS(qAbs(c.lat())) + yH;
112 default:
113 QLocale l(QLocale::system());
114 return l.toString(qAbs(c.lat()), 'f', 5) + yH;
118 QString Format::coordinates(const Coordinates &c, CoordinatesFormat type)
120 return lat(c, type) + "," + QChar(0x00A0) + lon(c, type);