#include <cmath>
#include <QDebug>
+#include <QLineF>
#include <QPointF>
#include <QVariant>
convertFrom(coordinate);
}
+qreal SceneCoordinate::azimuthTo(const SceneCoordinate &to) const
+{
+ QLineF line = QLineF(this->toPointF(), to.toPointF());
+ return line.angle();
+}
+
void SceneCoordinate::convertFrom(const GeoCoordinate &coordinate)
{
qDebug() << __PRETTY_FUNCTION__;
******************************************************************************/
public:
/**
+ * @brief Returns the azimuth from this coordinate to other coordinate
+ *
+ * @param to Target coordinate
+ * @returns Azimuth in degrees
+ */
+ qreal azimuthTo(const SceneCoordinate &to) const;
+
+ /**
* @brief Check if coordinate is (0.0, 0.0)
*
* @returns True if both X and Y are 0.0, otherwise false
qDebug() << __PRETTY_FUNCTION__;
m_gpsLocationItem->updatePosition(SceneCoordinate(position), accuracy);
+ m_gpsPosition = position;
m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
if (m_autoCenteringEnabled) {
m_scrollStartedByGps = true;
scrollToPosition(m_lastAutomaticPosition);
}
+
+ updateDirectionIndicator();
}
qreal MapEngine::greatCircleDistance(GeoCoordinate firstLocation, GeoCoordinate secondLocation)
m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
emit newMapResolution(sceneResolution());
+
+ updateDirectionIndicator();
}
void MapEngine::setGPSEnabled(bool enabled)
return (1 << zoomLevel);
}
+void MapEngine::updateDirectionIndicator()
+{
+ /// @todo implement distance calculation
+ qreal distance = 0;
+
+ qreal direction = m_sceneCoordinate.azimuthTo(SceneCoordinate(m_gpsPosition));
+
+ emit directionIndicatorValuesUpdate(direction, distance);
+}
+
void MapEngine::updateViewTilesSceneRect()
{
qDebug() << __PRETTY_FUNCTION__;
*/
void setTilesGridSize(const QSize &viewSize);
+ void updateDirectionIndicator();
+
/**
* @brief Updates the current view rect including margins
*
******************************************************************************/
signals:
/**
+ * @brief Signal when direction and distance from current map center point to current GPS
+ * location is changed
+ */
+ void directionIndicatorValuesUpdate(qreal direction, qreal distance);
+
+ /**
* @brief Signals error
*
* @param context error context
QSize m_viewSize; ///< Current view size
FriendItemsHandler *m_friendItemsHandler; ///< Handler for friend and group items
+ GeoCoordinate m_gpsPosition; ///< Lates GPS position
GPSLocationItem *m_gpsLocationItem; ///< Item pointing current location from GPS
MapFetcher *m_mapFetcher; ///< Fetcher for map tiles
MapRouteItem *m_mapRouteItem; ///< Map route item
IndicatorButton::IndicatorButton(QWidget *parent)
: QToolButton(parent),
- m_isDraggable(false)
+ m_isDraggable(false),
+ m_direction(0)
{
m_indicatorLeds[OFF].load(":res/images/led_red.png");
m_indicatorLeds[ON].load(":res/images/led_red_s.png");
QToolButton::mouseReleaseEvent(event);
}
+void IndicatorButton::setDirection(qreal direction)
+{
+ m_direction = direction;
+}
+
void IndicatorButton::setDraggable(bool mode, QPoint eventPosition)
{
qDebug() << __PRETTY_FUNCTION__;
};
QTransform rotationTransform;
- rotationTransform.rotate(90);
+ rotationTransform.rotate(m_direction);
QTransform translateTransform;
translateTransform.translate(CENTER.x(), CENTER.y());
*/
void screenResized(const QSize &size);
+ void setDirection(qreal direction);
+
/**
* @brief Toggle distance indicator button draggability
*/
bool m_isDraggable; ///< Boolean for tracking the draggability state
+ qreal m_direction; ///< Direction to the GPS position (in degrees)
+
QColor *m_normalColor; ///< Normal background color
QLinearGradient *m_selectedGradient; ///< Selected background