Added distance information in indicator button
authorKatri Kaikkonen <katri.kaikkonen@ixonos.com>
Thu, 29 Jul 2010 05:28:28 +0000 (08:28 +0300)
committerKatri Kaikkonen <katri.kaikkonen@ixonos.com>
Thu, 29 Jul 2010 05:28:28 +0000 (08:28 +0300)
src/map/mapengine.cpp
src/ui/indicatorbutton.cpp
src/ui/indicatorbutton.h

index f858c17..d168892 100644 (file)
@@ -552,7 +552,7 @@ void MapEngine::updateDirectionIndicator()
     qDebug() << __PRETTY_FUNCTION__;
 
     /// @todo implement distance calculation
-    qreal distance = 0;
+    qreal distance = greatCircleDistance(m_gpsPosition, m_sceneCoordinate);
 
     qreal direction = m_sceneCoordinate.azimuthTo(SceneCoordinate(m_gpsPosition));
 
index 97d046a..635513c 100644 (file)
@@ -39,10 +39,14 @@ const int ROUNDING_RADIUS = 9;  ///< Roundness of the rounded edge
 const int BUTTON_WIDTH = 66;    ///< Button width
 const int BUTTON_HEIGHT = 66;   ///< Button height
 
+const qreal M_TO_KM = 1000;                     ///< Meters to kilometers conversion
+
 IndicatorButton::IndicatorButton(QWidget *parent)
     : QToolButton(parent),
       m_isDraggable(false),
-      m_direction(0)
+      m_direction(0),
+      m_distance(0),
+      m_distanceText("hetula")
 {
     m_indicatorLeds[OFF].load(":res/images/led_red.png");
     m_indicatorLeds[ON].load(":res/images/led_red_s.png");
@@ -248,6 +252,11 @@ void IndicatorButton::paintEvent(QPaintEvent *event)
         painter.drawPixmap(CENTER - offset, m_indicatorLeds[OFF]);
     }
 
+    // Distance text
+    painter.setFont(QFont(NOKIA_FONT_SMALL));
+    painter.setPen(Qt::white);
+    painter.drawText(10, 60, m_distanceText);
+
     const int TRIANGLE_WIDTH = 10;
     const int TRIANGLE_HEIGHT = 10;
     const int TRIANGLE_DISTANCE_FROM_CENTER = 15;
@@ -270,6 +279,8 @@ void IndicatorButton::paintEvent(QPaintEvent *event)
     painter.setBrush(Qt::red);
     painter.setPen(Qt::red);
     painter.drawPolygon(points, POINTS);
+
+
 }
 
 void IndicatorButton::timerExpired()
@@ -287,4 +298,22 @@ void IndicatorButton::updateValues(qreal direction, qreal distance)
     qWarning() << __PRETTY_FUNCTION__ << "direction:" << direction;
 
     m_direction = direction;
+    m_distance = distance;
+
+    qWarning() << "distance:" << distance;
+
+}
+
+qreal IndicatorButton::roundTo(qreal distance)
+{
+    qDebug() << __PRETTY_FUNCTION__;
+
+    if(distance < M_TO_KM)
+    {
+        m_distanceText.setNum(distance * M_TO_KM);
+        m_distanceText.append(" m");
+    } else {
+        m_distanceText.setNum(distance);
+        m_distanceText.append(" km");
+    }
 }
index 9cf1eea..9b37f56 100644 (file)
@@ -123,6 +123,8 @@ private slots:
      */
     void forceMouseRelease();
 
+    qreal roundTo(qreal distance);
+
     /**
      * @brief Slot that handles drag initialization once timer has timed out
      */
@@ -147,6 +149,7 @@ private:
     bool m_isDraggable;             ///< Boolean for tracking the draggability state
 
     qreal m_direction;                ///< Direction to the GPS position (in degrees)
+    qreal m_distance;
 
     QColor *m_normalColor;                  ///< Normal background color
 
@@ -161,6 +164,8 @@ private:
 
     QSize m_screenSize;             ///< Store for the screen size
 
+    QString m_distanceText;
+
     QTimer *m_dragStartTimer;       ///< Timer to init draggability of the distance indicator button
     QTimer *m_forceReleaseTimer;    ///< Timer to run forceMouseRelease
 };