1 /* SPDX-FileCopyrightText: 2020 Tobias Leupold <tobias.leupold@gmx.de>
2 
3    SPDX-License-Identifier: GPL-3.0-or-later OR LicenseRef-KDE-Accepted-GPL
4 */
5 
6 // Local includes
7 #include "CoordinatesFormatter.h"
8 #include "KGeoTag.h"
9 #include "Coordinates.h"
10 
11 // KDE includes
12 #include <KLocalizedString>
13 
14 // Qt includes
15 #include <QLocale>
16 
17 // C++ includes
18 #include <cmath>
19 
CoordinatesFormatter(QObject * parent,QLocale * locale)20 CoordinatesFormatter::CoordinatesFormatter(QObject *parent, QLocale *locale)
21     : QObject(parent),
22       m_locale(locale)
23 {
24 }
25 
formatLonLat(double value) const26 QString CoordinatesFormatter::formatLonLat(double value) const
27 {
28     return m_locale->toString(std::abs(value), 'f', KGeoTag::degreesPrecision);
29 }
30 
lon(const Coordinates & coordinates) const31 QString CoordinatesFormatter::lon(const Coordinates &coordinates) const
32 {
33     return i18nc("Formatted longitude with a cardinal direction", "%1° %2",
34                  formatLonLat(coordinates.lon()),
35                  coordinates.lon() >= 0 ? i18nc("Abbreviated cardinal direction \"East\"", "E")
36                                         : i18nc("Abbreviated cardinal direction \"West\"", "W"));
37 }
38 
lat(const Coordinates & coordinates) const39 QString CoordinatesFormatter::lat(const Coordinates &coordinates) const
40 {
41     return i18nc("Formatted latitude with a cardinal direction", "%1° %2",
42                  formatLonLat(coordinates.lat()),
43                  coordinates.lat() >= 0 ? i18nc("Abbreviated cardinal direction \"North\"", "N")
44                                         : i18nc("Abbreviated cardinal direction \"South\"", "S"));
45 }
46 
alt(const Coordinates & coordinates) const47 QString CoordinatesFormatter::alt(const Coordinates &coordinates) const
48 {
49     return m_locale->toString(coordinates.alt(), 'f', KGeoTag::altitudePrecision);
50 }
51