From bb58c9b4539a6095a97902881d91a764ac34ff1c Mon Sep 17 00:00:00 2001 From: Janne Kiiski Date: Fri, 19 Nov 2010 12:06:58 +0200 Subject: [PATCH] Refactored 'distance to gps location text' logic --- src/qmlui/Map.qml | 2 +- src/qmlui/geomap.cpp | 34 +++++++++++++++++++++++++++++++--- src/qmlui/geomap.h | 2 ++ 3 files changed, 34 insertions(+), 4 deletions(-) diff --git a/src/qmlui/Map.qml b/src/qmlui/Map.qml index e8510a1..73b643d 100644 --- a/src/qmlui/Map.qml +++ b/src/qmlui/Map.qml @@ -90,7 +90,7 @@ Item { anchors.fill: parent verticalAlignment: "AlignVCenter" horizontalAlignment: "AlignHCenter" - text: map.distanceToGpsLocation + " km" + text: map.distanceToGpsLocationText color: palette.text font.pixelSize: height / 3 } diff --git a/src/qmlui/geomap.cpp b/src/qmlui/geomap.cpp index 158b668..ba742cc 100644 --- a/src/qmlui/geomap.cpp +++ b/src/qmlui/geomap.cpp @@ -85,9 +85,37 @@ qreal GeoMap::angleToGpsLocation() const qreal GeoMap::distanceToGpsLocation() const { const qreal result = prevGpsLocation.isValid() ? center().distanceTo(prevGpsLocation) : 0.0; - const int km = result * 0.001; - qDebug() << "QmlMap::distanceToGpsLocation: " << km; - return km; + qDebug() << "QmlMap::distanceToGpsLocation: " << result << " meters"; + return result; +} + +QString GeoMap::distanceToGpsLocationText() const +{ + const qreal distance = distanceToGpsLocation(); + // copy/paste from: IndicatorButtonPanel::updateValues + const int MAX_TO_METERS = 999.5; + const int MAX_TO_KM_WITH_DESIMAL = 99950; + const int MIN_TO_METERS = 10; + const int M_TO_KM = 1000; ///< Meters to kilometers conversion + const QString UNIT_KILOMETER = " km"; + const QString UNIT_METER = " m"; + + QString distanceText; + if (distance < MIN_TO_METERS) { + distanceText.setNum(10); + distanceText.prepend("< "); + distanceText.append(UNIT_METER); + } else if (distance < MAX_TO_METERS) { + distanceText.setNum(distance, 'f', 0); + distanceText.append(UNIT_METER); + } else if (distance < MAX_TO_KM_WITH_DESIMAL) { + distanceText.setNum(distance / M_TO_KM, 'f', 1); + distanceText.append(UNIT_KILOMETER); + } else { + distanceText.setNum(distance / M_TO_KM, 'f', 0); + distanceText.append(UNIT_KILOMETER); + } + return distanceText; } double GeoMap::centerLatitude() const { diff --git a/src/qmlui/geomap.h b/src/qmlui/geomap.h index 3ab15ea..7e9e362 100644 --- a/src/qmlui/geomap.h +++ b/src/qmlui/geomap.h @@ -19,6 +19,7 @@ class GeoMap : public QGraphicsGeoMap Q_PROPERTY(qreal angleToGpsLocation READ angleToGpsLocation NOTIFY positionChanged) Q_PROPERTY(qreal distanceToGpsLocation READ distanceToGpsLocation NOTIFY positionChanged) + Q_PROPERTY(QString distanceToGpsLocationText READ distanceToGpsLocationText NOTIFY positionChanged) Q_PROPERTY(double centerLatitude READ centerLatitude WRITE setCenterLatitude NOTIFY positionChanged) Q_PROPERTY(double centerLongitude READ centerLongitude WRITE setCenterLongitude NOTIFY positionChanged) Q_PROPERTY(double gpsLocationLatitude READ gpsLocationLatitude NOTIFY gpsLocationChanged) @@ -30,6 +31,7 @@ public: qreal angleToGpsLocation() const; qreal distanceToGpsLocation() const; + QString distanceToGpsLocationText() const; double centerLatitude() const; void setCenterLatitude(const double latitude); -- 1.7.9.5