Merge branch 'crosshair2'
[situare] / src / map / mapengine.cpp
index 03fc198..098874b 100644 (file)
@@ -32,6 +32,7 @@
 #include <QRect>
 
 #include "frienditemshandler.h"
+#include "gpslocationitem.h"
 #include "mapcommon.h"
 #include "mapengine.h"
 #include "maptile.h"
@@ -59,9 +60,13 @@ MapEngine::MapEngine(QObject *parent)
     m_ownLocation->hide(); // hide until first location info is received
     m_mapScene->addItem(m_ownLocation);
 
+    m_gpsLocationItem = new GPSLocationItem();
+    m_mapScene->addItem(m_gpsLocationItem);
+
     m_friendItemsHandler = new FriendItemsHandler(m_mapScene, this);
     connect(this, SIGNAL(zoomLevelChanged(int)),
             m_friendItemsHandler, SLOT(refactorFriendItems(int)));
+
     connect(this, SIGNAL(friendsLocationsReady(QList<User*>&)),
             m_friendItemsHandler, SLOT(friendListUpdated(QList<User*>&)));
 }
@@ -132,17 +137,12 @@ QRect MapEngine::calculateTileGrid(QPoint sceneCoordinate)
     return QRect(topLeftX, topLeftY, gridWidth, gridHeight);
 }
 
-void MapEngine::alignImmovableItems(QPoint viewTopLeft)
-{
-    qDebug() << __PRETTY_FUNCTION__ << "viewTopLeft:" << viewTopLeft;
-}
-
 void MapEngine::setLocation(QPoint sceneCoordinate)
 {
     qDebug() << __PRETTY_FUNCTION__;
 
     if (disableAutoCentering(sceneCoordinate))
-        emit mapScrolled();
+        emit mapScrolledManually();
 
     m_sceneCoordinate = sceneCoordinate;
     emit locationChanged(m_sceneCoordinate);
@@ -234,6 +234,11 @@ void MapEngine::viewZoomFinished()
         m_zoomedIn = false;
         m_mapScene->removeOutOfViewTiles();
     }
+
+    if (m_zoomLevel == MAX_MAP_ZOOM_LEVEL)
+        emit maxZoomLevelReached();
+    else if (m_zoomLevel == MIN_VIEW_ZOOM_LEVEL)
+        emit minZoomLevelReached();
 }
 
 void MapEngine::zoomIn()
@@ -332,6 +337,14 @@ void MapEngine::receiveOwnLocation(User *user)
         m_ownLocation->show();
 }
 
+void MapEngine::gpsPositionUpdate(QPointF position, qreal accuracy)
+{
+    m_gpsLocationItem->updatePosition(convertLatLonToSceneCoordinate(position), accuracy);
+
+    if (m_autoCenteringEnabled)
+        setViewLocation(position);
+}
+
 bool MapEngine::disableAutoCentering(QPoint sceneCoordinate)
 {
     if (isAutoCenteringEnabled()) {
@@ -361,6 +374,12 @@ void MapEngine::setAutoCentering(bool enabled)
     m_autoCenteringEnabled = enabled;
 }
 
+
+void MapEngine::gpsEnabled(bool enabled)
+{
+    m_gpsLocationItem->setEnabled(enabled);
+}
+
 QPointF MapEngine::convertSceneCoordinateToLatLon(int zoomLevel, QPoint sceneCoordinate)
 {   
     qDebug() << __PRETTY_FUNCTION__;