qDebug() << __PRETTY_FUNCTION__;
}
-GeoCoordinate::GeoCoordinate(SceneCoordinate &coordinate)
+GeoCoordinate::GeoCoordinate(const SceneCoordinate &coordinate)
{
qDebug() << __PRETTY_FUNCTION__;
m_longitude = longitude;
}
+QDataStream &operator<<(QDataStream &out, const GeoCoordinate &coordinate)
+{
+ out << coordinate.m_latitude << coordinate.m_longitude;
+ return out;
+}
+
+QDataStream &operator>>(QDataStream &in, GeoCoordinate &coordinate)
+{
+ in >> coordinate.m_latitude >> coordinate.m_longitude;
+ return in;
+}
+
QDebug operator<<(QDebug dbg, const GeoCoordinate &coordinate)
{
dbg.nospace() << "(" << coordinate.latitude() << ", " << coordinate.longitude() << ")";
*
* @param coordinate Scene coordinate
*/
- GeoCoordinate(SceneCoordinate &coordinate);
+ GeoCoordinate(const SceneCoordinate &coordinate);
/*******************************************************************************
* MEMBER FUNCTIONS AND SLOTS
private:
double m_latitude; ///< Latitude value
double m_longitude; ///< Longitude value
+
+/*******************************************************************************
+ * OPERATORS
+ ******************************************************************************/
+public:
+ friend QDataStream &operator<<(QDataStream &out, const GeoCoordinate &coordinate);
+ friend QDataStream &operator>>(QDataStream &in, GeoCoordinate &coordinate);
};
-QDebug operator<<(QDebug dbg, const GeoCoordinate &c);
+QDebug operator<<(QDebug dbg, const GeoCoordinate &coordinate);
Q_DECLARE_METATYPE(GeoCoordinate)
#include <cmath>
#include <QDebug>
+#include <QPointF>
#include "geocoordinate.h"
#include "map/osm.h"
qDebug() << __PRETTY_FUNCTION__;
}
-SceneCoordinate::SceneCoordinate(GeoCoordinate &coordinate)
+SceneCoordinate::SceneCoordinate(const GeoCoordinate &coordinate)
{
qDebug() << __PRETTY_FUNCTION__;
value -= max - min + 1;
}
-double SceneCoordinate::x() const
+void SceneCoordinate::setX(double x)
{
qDebug() << __PRETTY_FUNCTION__;
- return m_x;
+ m_x = x;
}
-double SceneCoordinate::y() const
+void SceneCoordinate::setY(double y)
{
qDebug() << __PRETTY_FUNCTION__;
- return m_y;
+ m_y = y;
}
-void SceneCoordinate::setX(double x)
+QPointF SceneCoordinate::toPointF() const
{
qDebug() << __PRETTY_FUNCTION__;
- m_x = x;
+ return QPointF(m_x, m_y);
}
-void SceneCoordinate::setY(double y)
+double SceneCoordinate::x() const
{
qDebug() << __PRETTY_FUNCTION__;
- m_y = y;
+ return m_x;
+}
+
+double SceneCoordinate::y() const
+{
+ qDebug() << __PRETTY_FUNCTION__;
+
+ return m_y;
}
QDebug operator<<(QDebug dbg, const SceneCoordinate &coordinate)
*
* @param coordinate Geological coordinate
*/
- SceneCoordinate(GeoCoordinate &coordinate);
+ SceneCoordinate(const GeoCoordinate &coordinate);
/*******************************************************************************
* MEMBER FUNCTIONS AND SLOTS
*/
void setY(double y);
+ QPointF toPointF() const;
+
/**
* @brief Returns the x value
*
USA.
*/
+#include <cmath>
+
#include <QMessageBox>
#include <QNetworkReply>
#ifdef Q_WS_MAEMO_5
#include "application.h"
#endif
+
#include "common.h"
#include "facebookservice/facebookauthentication.h"
#include "gps/gpsposition.h"
#include "map/mapengine.h"
+#include "mce.h"
+#include "network/networkaccessmanager.h"
#include "situareservice/situareservice.h"
#include "ui/mainwindow.h"
-#include "network/networkaccessmanager.h"
-#include "mce.h"
-#include <cmath>
#include "engine.h"
m_automaticUpdateRequest(false),
m_userMoved(false),
m_automaticUpdateIntervalTimer(0),
- m_lastUpdatedGPSPosition(QPointF())
+ m_lastUpdatedGPSPosition(GeoCoordinate())
{
qDebug() << __PRETTY_FUNCTION__;
else
m_automaticUpdateIntervalTimer->setInterval(updateIntervalMsecs);
- connect(m_gps, SIGNAL(position(QPointF,qreal)),
- this, SLOT(requestAutomaticUpdateIfMoved(QPointF)));
+ connect(m_gps, SIGNAL(position(GeoCoordinate, qreal)),
+ this, SLOT(requestAutomaticUpdateIfMoved(GeoCoordinate)));
m_automaticUpdateIntervalTimer->start();
} else {
- disconnect(m_gps, SIGNAL(position(QPointF,qreal)),
- this, SLOT(requestAutomaticUpdateIfMoved(QPointF)));
+ disconnect(m_gps, SIGNAL(position(GeoCoordinate, qreal)),
+ this, SLOT(requestAutomaticUpdateIfMoved(GeoCoordinate)));
m_automaticUpdateIntervalTimer->stop();
}
if (gpsEnabled.toString().isEmpty()) { // First start. Situare.conf file does not exists
- connect(m_gps, SIGNAL(position(QPointF,qreal)),
- this, SLOT(setFirstStartZoomLevel(QPointF,qreal)));
+ connect(m_gps, SIGNAL(position(GeoCoordinate, qreal)),
+ this, SLOT(setFirstStartZoomLevel()));
changeAutoCenteringSetting(true);
enableGPS(true);
}
}
-void SituareEngine::requestAutomaticUpdateIfMoved(QPointF position)
+void SituareEngine::requestAutomaticUpdateIfMoved(GeoCoordinate position)
{
qDebug() << __PRETTY_FUNCTION__;
- if ((fabs(m_lastUpdatedGPSPosition.x() - position.x()) >
+ if ((fabs(m_lastUpdatedGPSPosition.longitude() - position.longitude()) >
USER_MOVEMENT_MINIMUM_LONGITUDE_DIFFERENCE) ||
- (fabs(m_lastUpdatedGPSPosition.y() - position.y()) >
+ (fabs(m_lastUpdatedGPSPosition.latitude() - position.latitude()) >
USER_MOVEMENT_MINIMUM_LATITUDE_DIFFERENCE)) {
m_lastUpdatedGPSPosition = position;
}
}
-void SituareEngine::setFirstStartZoomLevel(QPointF latLonCoordinate, qreal accuracy)
+void SituareEngine::setFirstStartZoomLevel()
{
qDebug() << __PRETTY_FUNCTION__;
- Q_UNUSED(latLonCoordinate);
- Q_UNUSED(accuracy);
-
if (m_autoCenteringEnabled) // autocentering is disabled when map is scrolled
m_mapEngine->setZoomLevel(DEFAULT_ZOOM_LEVEL_WHEN_GPS_IS_AVAILABLE);
- disconnect(m_gps, SIGNAL(position(QPointF,qreal)),
- this, SLOT(setFirstStartZoomLevel(QPointF,qreal)));
+ disconnect(m_gps, SIGNAL(position(GeoCoordinate, qreal)),
+ this, SLOT(setFirstStartZoomLevel()));
}
void SituareEngine::signalsFromFacebookAuthenticator()
{
qDebug() << __PRETTY_FUNCTION__;
- connect(m_gps, SIGNAL(position(QPointF,qreal)),
- m_mapEngine, SLOT(gpsPositionUpdate(QPointF,qreal)));
+ connect(m_gps, SIGNAL(position(GeoCoordinate, qreal)),
+ m_mapEngine, SLOT(gpsPositionUpdate(GeoCoordinate, qreal)));
connect(m_gps, SIGNAL(timeout()),
m_ui, SLOT(gpsTimeout()));
m_facebookAuthenticator, SLOT(updateCredentials(QUrl)));
// signals from map view
- connect(m_ui, SIGNAL(mapViewScrolled(QPoint)),
- m_mapEngine, SLOT(setCenterPosition(QPoint)));
+ connect(m_ui, SIGNAL(mapViewScrolled(SceneCoordinate)),
+ m_mapEngine, SLOT(setCenterPosition(SceneCoordinate)));
connect(m_ui, SIGNAL(mapViewResized(QSize)),
m_mapEngine, SLOT(viewResized(QSize)));
connect(m_ui, SIGNAL(refreshUserData()),
this, SLOT(refreshUserData()));
- connect(m_ui, SIGNAL(findUser(QPointF)),
- m_mapEngine, SLOT(centerToCoordinates(QPointF)));
+ connect(m_ui, SIGNAL(findUser(GeoCoordinate)),
+ m_mapEngine, SLOT(centerToCoordinates(GeoCoordinate)));
// signals from friend list tab
- connect(m_ui, SIGNAL(findFriend(QPointF)),
- m_mapEngine, SLOT(centerToCoordinates(QPointF)));
+ connect(m_ui, SIGNAL(findFriend(GeoCoordinate)),
+ m_mapEngine, SLOT(centerToCoordinates(GeoCoordinate)));
}
void SituareEngine::signalsFromMapEngine()
connect(m_mapEngine, SIGNAL(error(int, int)),
this, SLOT(error(int, int)));
- connect(m_mapEngine, SIGNAL(locationChanged(QPoint)),
- m_ui, SIGNAL(centerToSceneCoordinates(QPoint)));
+ connect(m_mapEngine, SIGNAL(locationChanged(SceneCoordinate)),
+ m_ui, SIGNAL(centerToSceneCoordinates(SceneCoordinate)));
connect(m_mapEngine, SIGNAL(zoomLevelChanged(int)),
m_ui, SIGNAL(zoomLevelChanged(int)));
#include <QObject>
#include <QTime>
-#include <QPointF>
+
+#include "coordinates/geocoordinate.h"
#ifdef Q_WS_MAEMO_5
class Application;
*
* @param position geo coordinates
*/
- void requestAutomaticUpdateIfMoved(QPointF position);
+ void requestAutomaticUpdateIfMoved(GeoCoordinate position);
/**
* @brief Sets zoom level to default when first GPS location is received if autocentering
* is enabled.
- *
- * @param latLonCoordinate own location
- * @param accuracy accuracy of GPS location
*/
- void setFirstStartZoomLevel(QPointF latLonCoordinate, qreal accuracy);
+ void setFirstStartZoomLevel();
/**
* @brief Automatic update interval timer timeout.
MCE *m_mce; ///< Instance of the MCE
QTimer *m_automaticUpdateIntervalTimer; ///< Automatic update interval timer
- QPointF m_lastUpdatedGPSPosition; ///< Last updated GPS position
+ GeoCoordinate m_lastUpdatedGPSPosition; ///< Last updated GPS position
};
m_gpsPositionPrivate->setPowerSave(enabled);
}
-bool GPSPosition::isInitialized()
+bool GPSPosition::isInitialized() const
{
qDebug() << __PRETTY_FUNCTION__;
return m_gpsPositionPrivate->isInitialized();
}
-bool GPSPosition::isRunning()
+bool GPSPosition::isRunning() const
{
qDebug() << __PRETTY_FUNCTION__;
return m_gpsPositionPrivate->isRunning();
}
-QPointF GPSPosition::lastPosition()
+GeoCoordinate GPSPosition::lastPosition() const
{
qDebug() << __PRETTY_FUNCTION__;
#define GPSPOSITION_H
#include <QObject>
-#include <QPointF>
+
+#include "coordinates/geocoordinate.h"
class GPSPositionPrivate;
*
* @return true if initialized, false otherwise
*/
- bool isInitialized();
+ bool isInitialized() const;
/**
* @brief Checks if GPS is running.
*
* @return true if GPS running, false otherwise
*/
- bool isRunning();
+ bool isRunning() const;
/**
* @brief Return last known position.
*/
- QPointF lastPosition();
+ GeoCoordinate lastPosition() const;
/**
* @brief Informs gps to emit last known position.
* @param latLonCoordinate latitude and longitude values
* @param accuracy accuracy in metres
*/
- void position(QPointF latLonCoordinate, qreal accuracy);
+ void position(GeoCoordinate coordinate, qreal accuracy);
/**
* @brief Signal for timeout.
m_parent = static_cast<GPSPosition*>(parent);
}
-bool GPSPositionPrivate::isInitialized()
+bool GPSPositionPrivate::isInitialized() const
{
qDebug() << __PRETTY_FUNCTION__;
return false;
}
-bool GPSPositionPrivate::isRunning()
+bool GPSPositionPrivate::isRunning() const
{
qDebug() << __PRETTY_FUNCTION__;
qDebug() << __PRETTY_FUNCTION__;
}
-QPointF GPSPositionPrivate::lastPosition()
+GeoCoordinate GPSPositionPrivate::lastPosition() const
{
qDebug() << __PRETTY_FUNCTION__;
- return QPointF(0, 0);
+ return GeoCoordinate(0, 0);
}
void GPSPositionPrivate::requestLastPosition()
#include "gpsposition.h"
-class QPointF;
class QString;
+class GeoCoordinate;
+
/**
* @brief GPSPositionPrivate class does nothing.
*
* RETURNS FALSE
* @return true if initialized, false otherwise
*/
- bool isInitialized();
+ bool isInitialized() const;
/**
* @brief Checks if GPS is running.
* RETURNS FALSE.
* @return true if GPS running, false otherwise
*/
- bool isRunning();
+ bool isRunning() const;
/**
* @brief Return last known position.
*/
- QPointF lastPosition();
+ GeoCoordinate lastPosition() const;
/**
* @brief Informs gps to emit last known position.
#include <QDebug>
+#include "coordinates/scenecoordinate.h"
#include "friendgroupitem.h"
#include "friendlocationitem.h"
#include "mapcommon.h"
-#include "mapengine.h"
+/// @todo remove #include "mapengine.h"
#include "mapscene.h"
#include "user/user.h"
FriendLocationItem *item = new FriendLocationItem(friendData->userId());
item->setProfileImage(friendData->profileImage(), friendData->profileImageUrl());
- item->setPos(MapEngine::convertLatLonToSceneCoordinate(friendData->coordinates()));
+ item->setPos(SceneCoordinate(friendData->coordinates()).toPointF());
m_friendItems.append(item);
m_mapScene->addItem(item);
qDebug() << __PRETTY_FUNCTION__;
// update position
- QPoint newPosition = MapEngine::convertLatLonToSceneCoordinate(friendData->coordinates());
- if (friendItem->pos().toPoint() != newPosition)
- friendItem->setPos(newPosition);
+ friendItem->setPos(SceneCoordinate(friendData->coordinates()).toPointF());
// update image
if (friendItem->profileImageUrl() != friendData->profileImageUrl())
#include <QDebug>
#include <QGraphicsPixmapItem>
+#include "coordinates/scenecoordinate.h"
#include "../gps/gpscommon.h"
#include "mapcommon.h"
}
-void GPSLocationItem::updatePosition(QPoint scenePosition, qreal accuracy)
+void GPSLocationItem::updatePosition(SceneCoordinate scenePosition, qreal accuracy)
{
qDebug() << __PRETTY_FUNCTION__;
- setPos(scenePosition);
+ setPos(scenePosition.toPointF());
if (accuracy == GPS_ACCURACY_UNDEFINED) { // fix is NOT accurate
if (m_currentAccuracy != COARSE) { // coarse pixmap not yet set
#include <QGraphicsPixmapItem>
+class SceneCoordinate;
+
/**
* @brief Class for indicating current position accuired from GPS on the map.
*
* @param scenePosition Scene coordinate
* @param accuracy Accuracy of the GPS fix
*/
- void updatePosition(QPoint scenePosition, qreal accuracy);
+ void updatePosition(SceneCoordinate scenePosition, qreal accuracy);
/*******************************************************************************
* DATA MEMBERS
#include <QtCore>
+#include "coordinates/geocoordinate.h"
#include "osm.h"
const int MAP_TILE_MIN_INDEX = 0; ///< First index number of map tiles
* @brief Maps Default zoom level, used when latest zoom level is not available.
*/
const int MAP_DEFAULT_ZOOM_LEVEL = MAP_VIEW_MIN_ZOOM_LEVEL;
-
const qreal MAP_DEFAULT_LONGITUDE = 0.0000; ///< Default longitude value
const qreal MAP_DEFAULT_LATITUDE = 0.0000; ///< Default latitude value
m_zoomedIn(false),
m_zoomLevel(MAP_DEFAULT_ZOOM_LEVEL),
m_centerTile(QPoint(UNDEFINED, UNDEFINED)),
- m_lastAutomaticPosition(QPoint(0, 0)),
+ /// @todo remove, automatic init to zero // m_lastAutomaticPosition(QPoint(0, 0)),
+ m_sceneCoordinate(SceneCoordinate(GeoCoordinate(MAP_DEFAULT_LATITUDE, MAP_DEFAULT_LONGITUDE))),
m_tilesGridSize(QSize(0, 0)),
m_viewSize(QSize(DEFAULT_SCREEN_WIDTH, DEFAULT_SCREEN_HEIGHT))
{
m_scroller = &MapScroller::getInstance();
- connect(m_scroller, SIGNAL(coordinateUpdated(QPoint)),
- this, SLOT(setCenterPosition(QPoint)));
+ connect(m_scroller, SIGNAL(coordinateUpdated(SceneCoordinate)),
+ this, SLOT(setCenterPosition(SceneCoordinate)));
connect(m_scroller, SIGNAL(stateChanged(QAbstractAnimation::State, QAbstractAnimation::State)),
this, SLOT(scrollerStateChanged(QAbstractAnimation::State)));
qDebug() << __PRETTY_FUNCTION__;
QSettings settings(DIRECTORY_NAME, FILE_NAME);
- settings.setValue(MAP_LAST_POSITION,
- convertSceneCoordinateToLatLon(m_zoomLevel, m_sceneCoordinate));
+
+ // register meta type for custom GeoCoordinate class so that saving the settings does work
+ qRegisterMetaType<GeoCoordinate>("GeoCoordinate");
+ qRegisterMetaTypeStreamOperators<GeoCoordinate>("GeoCoordinate");
+
+ settings.setValue(MAP_LAST_POSITION, QVariant::fromValue(centerGeoCoordinate()));
settings.setValue(MAP_LAST_ZOOMLEVEL, m_zoomLevel);
}
-QRect MapEngine::calculateTileGrid(QPoint sceneCoordinate)
+QRect MapEngine::calculateTileGrid(SceneCoordinate sceneCoordinate)
{
qDebug() << __PRETTY_FUNCTION__;
return QRect(topLeft, m_tilesGridSize);
}
-QPointF MapEngine::centerGeoCoordinate()
+GeoCoordinate MapEngine::centerGeoCoordinate()
{
qDebug() << __PRETTY_FUNCTION__;
- return convertSceneCoordinateToLatLon(m_zoomLevel, m_sceneCoordinate);
+ return GeoCoordinate(m_sceneCoordinate);
}
-void MapEngine::centerToCoordinates(QPointF latLonCoordinate)
+void MapEngine::centerToCoordinates(GeoCoordinate latLonCoordinate)
{
qDebug() << __PRETTY_FUNCTION__;
- scrollToPosition(convertLatLonToSceneCoordinate(latLonCoordinate));
+ scrollToPosition(SceneCoordinate(latLonCoordinate));
}
-QPoint MapEngine::convertLatLonToSceneCoordinate(QPointF latLonCoordinate)
-{
- qDebug() << __PRETTY_FUNCTION__;
+/// @todo remove
+//QPoint MapEngine::convertLatLonToSceneCoordinate(QPointF latLonCoordinate)
+//{
+// qDebug() << __PRETTY_FUNCTION__;
- qreal longitude = latLonCoordinate.x();
- qreal latitude = latLonCoordinate.y();
+// qreal longitude = latLonCoordinate.x();
+// qreal latitude = latLonCoordinate.y();
- if ((longitude > MAX_LONGITUDE) || (longitude < MIN_LONGITUDE))
- return QPoint(UNDEFINED, UNDEFINED);
- if ((latitude > OSM_MAX_LATITUDE) || (latitude < OSM_MIN_LATITUDE))
- return QPoint(UNDEFINED, UNDEFINED);
+// if ((longitude > MAX_LONGITUDE) || (longitude < MIN_LONGITUDE))
+// return QPoint(UNDEFINED, UNDEFINED);
+// if ((latitude > OSM_MAX_LATITUDE) || (latitude < OSM_MIN_LATITUDE))
+// return QPoint(UNDEFINED, UNDEFINED);
- qreal z = static_cast<qreal>(MapEngine::tilesPerSide(OSM_MAX_ZOOM_LEVEL));
+// qreal z = static_cast<qreal>(MapEngine::tilesPerSide(OSM_MAX_ZOOM_LEVEL));
- qreal x = static_cast<qreal>((longitude + 180.0) / 360.0);
- qreal y = static_cast<qreal>((1.0 - log(tan(latitude * M_PI / 180.0) + 1.0
- / cos(latitude * M_PI / 180.0)) / M_PI) / 2.0);
+// qreal x = static_cast<qreal>((longitude + 180.0) / 360.0);
+// qreal y = static_cast<qreal>((1.0 - log(tan(latitude * M_PI / 180.0) + 1.0
+// / cos(latitude * M_PI / 180.0)) / M_PI) / 2.0);
- return QPointF(x * z * OSM_TILE_SIZE_X, y * z * OSM_TILE_SIZE_Y).toPoint();
-}
+// return QPointF(x * z * OSM_TILE_SIZE_X, y * z * OSM_TILE_SIZE_Y).toPoint();
+//}
-QPointF MapEngine::convertSceneCoordinateToLatLon(int zoomLevel, QPoint sceneCoordinate)
-{
- qDebug() << __PRETTY_FUNCTION__;
+//QPointF MapEngine::convertSceneCoordinateToLatLon(int zoomLevel, QPoint sceneCoordinate)
+//{
+// qDebug() << __PRETTY_FUNCTION__;
- double tileFactor = 1 << (OSM_MAX_ZOOM_LEVEL - zoomLevel);
- double xFactor = (sceneCoordinate.x() / (OSM_TILE_SIZE_X*tileFactor));
- double yFactor = (sceneCoordinate.y() / (OSM_TILE_SIZE_Y*tileFactor));
+// double tileFactor = 1 << (OSM_MAX_ZOOM_LEVEL - zoomLevel);
+// double xFactor = (sceneCoordinate.x() / (OSM_TILE_SIZE_X*tileFactor));
+// double yFactor = (sceneCoordinate.y() / (OSM_TILE_SIZE_Y*tileFactor));
- tileFactor = 1 << zoomLevel;
- double longitude = xFactor / tileFactor * 360.0 - 180;
+// tileFactor = 1 << zoomLevel;
+// double longitude = xFactor / tileFactor * 360.0 - 180;
- double n = M_PI - 2.0 * M_PI * yFactor / tileFactor;
- double latitude = 180.0 / M_PI * atan(0.5 * (exp(n) - exp(-n)));
+// double n = M_PI - 2.0 * M_PI * yFactor / tileFactor;
+// double latitude = 180.0 / M_PI * atan(0.5 * (exp(n) - exp(-n)));
- return QPointF(longitude, latitude);
-}
+// return QPointF(longitude, latitude);
+//}
-QPoint MapEngine::convertSceneCoordinateToTileNumber(int zoomLevel, QPoint sceneCoordinate)
+QPoint MapEngine::convertSceneCoordinateToTileNumber(int zoomLevel, SceneCoordinate sceneCoordinate)
{
qDebug() << __PRETTY_FUNCTION__;
return QPoint(x, y);
}
-QPoint MapEngine::convertTileNumberToSceneCoordinate(int zoomLevel, QPoint tileNumber)
+SceneCoordinate MapEngine::convertTileNumberToSceneCoordinate(int zoomLevel, QPoint tileNumber)
{
qDebug() << __PRETTY_FUNCTION__;
int x = tileNumber.x() * OSM_TILE_SIZE_X * pow;
int y = tileNumber.y() * OSM_TILE_SIZE_Y * pow;
- return QPoint(x, y);
+ return SceneCoordinate(x, y);
}
-void MapEngine::disableAutoCenteringIfRequired(QPoint sceneCoordinate)
+void MapEngine::disableAutoCenteringIfRequired(SceneCoordinate sceneCoordinate)
{
if (isAutoCenteringEnabled()) {
int zoomFactor = (1 << (OSM_MAX_ZOOM_LEVEL - m_zoomLevel));
- QPoint oldPixelValue = QPoint(m_lastAutomaticPosition.x() / zoomFactor,
+ SceneCoordinate oldPixelValue(m_lastAutomaticPosition.x() / zoomFactor,
m_lastAutomaticPosition.y() / zoomFactor);
- QPoint newPixelValue = QPoint(sceneCoordinate.x() / zoomFactor,
+ SceneCoordinate newPixelValue(sceneCoordinate.x() / zoomFactor,
sceneCoordinate.y() / zoomFactor);
if ((abs(oldPixelValue.x() - newPixelValue.x()) > AUTO_CENTERING_DISABLE_DISTANCE)
m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
}
-void MapEngine::getTiles(QPoint sceneCoordinate)
+void MapEngine::getTiles(SceneCoordinate sceneCoordinate)
{
qDebug() << __PRETTY_FUNCTION__;
}
}
-void MapEngine::gpsPositionUpdate(QPointF position, qreal accuracy)
+void MapEngine::gpsPositionUpdate(GeoCoordinate position, qreal accuracy)
{
qDebug() << __PRETTY_FUNCTION__;
- m_gpsLocationItem->updatePosition(convertLatLonToSceneCoordinate(position), accuracy);
+ m_gpsLocationItem->updatePosition(SceneCoordinate(position), accuracy);
m_mapScene->spanItems(m_zoomLevel, m_sceneCoordinate, m_viewSize);
if (m_autoCenteringEnabled) {
- m_lastAutomaticPosition = convertLatLonToSceneCoordinate(position);
+ m_lastAutomaticPosition = SceneCoordinate(position);
m_scrollStartedByGps = true;
scrollToPosition(m_lastAutomaticPosition);
}
}
-qreal MapEngine::greatCircleDistance(QPointF firstLocation, QPointF secondLocation)
+qreal MapEngine::greatCircleDistance(GeoCoordinate firstLocation, GeoCoordinate secondLocation)
{
qDebug() << __PRETTY_FUNCTION__;
- const qreal TORAD = (M_PI/180);
+ const qreal TO_RAD = (M_PI / 180);
- qreal dLat = (secondLocation.y() - firstLocation.y())*TORAD;
- qreal dLon = (secondLocation.x() - firstLocation.x())*TORAD;
- qreal a = pow(sin(dLat/2),2) + cos(firstLocation.y()*TORAD) * cos(secondLocation.y()*TORAD)
- * pow(sin(dLon/2),2);
- qreal c = 2 * atan2(sqrt(a), sqrt(1-a));
+ qreal dLat = (secondLocation.latitude() - firstLocation.latitude()) * TO_RAD;
+ qreal dLon = (secondLocation.longitude() - firstLocation.longitude()) * TO_RAD;
+ qreal a = pow(sin(dLat / 2), 2)
+ + cos(firstLocation.latitude() * TO_RAD)
+ * cos(secondLocation.latitude() * TO_RAD)
+ * pow(sin(dLon / 2), 2);
+ qreal c = 2 * atan2(sqrt(a), sqrt(1 - a));
return (EARTH_RADIUS * c);
}
{
qDebug() << __PRETTY_FUNCTION__;
- QPointF startLocation;
QSettings settings(DIRECTORY_NAME, FILE_NAME);
- if (settings.value(MAP_LAST_POSITION, ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toString()
- == ERROR_VALUE_NOT_FOUND_ON_SETTINGS || settings.value(MAP_LAST_ZOOMLEVEL,
- ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toString() == ERROR_VALUE_NOT_FOUND_ON_SETTINGS) {
-
- startLocation = QPointF(MAP_DEFAULT_LONGITUDE, MAP_DEFAULT_LATITUDE);
- m_zoomLevel = qBound(MAP_VIEW_MIN_ZOOM_LEVEL, MAP_DEFAULT_ZOOM_LEVEL, OSM_MAX_ZOOM_LEVEL);
- } else {
- m_zoomLevel = settings.value(MAP_LAST_ZOOMLEVEL, ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toInt();
- startLocation = settings.value(MAP_LAST_POSITION,
- ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toPointF();
+ /// @todo remove
+// if (settings.value(MAP_LAST_POSITION, ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toString()
+// == ERROR_VALUE_NOT_FOUND_ON_SETTINGS || settings.value(MAP_LAST_ZOOMLEVEL,
+// ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toString() == ERROR_VALUE_NOT_FOUND_ON_SETTINGS) {
+
+// startLocation = GeoCoordinate(MAP_DEFAULT_LATITUDE, MAP_DEFAULT_LONGITUDE);
+// m_zoomLevel = qBound(MAP_VIEW_MIN_ZOOM_LEVEL, MAP_DEFAULT_ZOOM_LEVEL, OSM_MAX_ZOOM_LEVEL);
+// } else {
+// m_zoomLevel = settings.value(MAP_LAST_ZOOMLEVEL, ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toInt();
+// startLocation = settings.value(MAP_LAST_POSITION,
+// ERROR_VALUE_NOT_FOUND_ON_SETTINGS).toPointF();
+// }
+
+ // init can be only done if both values exists in the settings
+ if (settings.contains(MAP_LAST_POSITION) && settings.contains(MAP_LAST_ZOOMLEVEL)) {
+ qWarning() << __PRETTY_FUNCTION__ << "both settings found";
+ QVariant zoomLevel = settings.value(MAP_LAST_ZOOMLEVEL);
+ QVariant location = settings.value(MAP_LAST_POSITION);
+ // init can be only done if we are able to convert variants into target data types
+ if (zoomLevel.canConvert<int>() && location.canConvert<GeoCoordinate>()) {
+ qWarning() << __PRETTY_FUNCTION__ << "both settings can be converted";
+ m_zoomLevel = zoomLevel.toInt();
+ m_sceneCoordinate = SceneCoordinate(location.value<GeoCoordinate>());
+ }
}
emit zoomLevelChanged(m_zoomLevel);
- centerToCoordinates(QPointF(startLocation.x(), startLocation.y()));
+ scrollToPosition(m_sceneCoordinate);
}
bool MapEngine::isAutoCenteringEnabled()
return m_autoCenteringEnabled;
}
-bool MapEngine::isCenterTileChanged(QPoint sceneCoordinate)
+bool MapEngine::isCenterTileChanged(SceneCoordinate sceneCoordinate)
{
qDebug() << __PRETTY_FUNCTION__;
const int SHIFT = 200;
const int KM_TO_M = 1000;
qreal scale = (1 << (OSM_MAX_ZOOM_LEVEL - m_zoomLevel));
- QPointF centerCoordinate = centerGeoCoordinate();
- QPoint shiftedSceneCoordinate = QPoint(m_sceneCoordinate.x() + SHIFT*scale
- , m_sceneCoordinate.y());
- QPointF shiftedCoordinate = convertSceneCoordinateToLatLon(m_zoomLevel, shiftedSceneCoordinate);
+ GeoCoordinate centerCoordinate = centerGeoCoordinate();
+ SceneCoordinate shiftedSceneCoordinate(m_sceneCoordinate.x() + SHIFT * scale,
+ m_sceneCoordinate.y());
+ GeoCoordinate shiftedCoordinate(shiftedSceneCoordinate);
qreal dist = greatCircleDistance(centerCoordinate, shiftedCoordinate) * KM_TO_M;
return (dist / SHIFT);
}
qDebug() << __PRETTY_FUNCTION__;
if(user) {
- QPoint newPosition = convertLatLonToSceneCoordinate(user->coordinates());
- if (m_ownLocation->pos().toPoint() != newPosition) {
- m_ownLocation->setPos(newPosition);
- }
-
+ m_ownLocation->setPos(SceneCoordinate(user->coordinates()).toPointF());
if (!m_ownLocation->isVisible())
m_ownLocation->show();
} else {
m_scrollStartedByGps = false;
}
-void MapEngine::scrollToPosition(QPoint scenePosition)
+void MapEngine::scrollToPosition(SceneCoordinate scenePosition)
{
qDebug() << __PRETTY_FUNCTION__;
m_scroller->stop();
m_scroller->setEasingCurve(QEasingCurve::InOutQuart);
m_scroller->setDuration(SMOOTH_CENTERING_TIME_MS);
- m_scroller->setStartValue(m_sceneCoordinate);
- m_scroller->setEndValue(scenePosition);
+ m_scroller->setStartValue(m_sceneCoordinate.toPointF());
+ m_scroller->setEndValue(scenePosition.toPointF());
m_smoothScrollRunning = true;
m_scroller->start();
}
m_autoCenteringEnabled = enabled;
}
-void MapEngine::setCenterPosition(QPoint scenePosition)
+void MapEngine::setCenterPosition(SceneCoordinate scenePosition)
{
qDebug() << __PRETTY_FUNCTION__;
scenePosition.setX(normalize(scenePosition.x(), OSM_MAP_MIN_PIXEL_X, OSM_MAP_MAX_PIXEL_X));
// don't allow vertical scene coordinates go out of the map
- scenePosition.setY(qBound(OSM_MAP_MIN_PIXEL_Y, scenePosition.y(), OSM_MAP_MAX_PIXEL_Y));
+ scenePosition.setY(qBound(double(OSM_MAP_MIN_PIXEL_Y),
+ scenePosition.y(),
+ double(OSM_MAP_MAX_PIXEL_Y)));
if (!m_smoothScrollRunning)
disableAutoCenteringIfRequired(scenePosition);
qDebug() << __PRETTY_FUNCTION__;
const QPoint ONE_TILE = QPoint(1, 1);
- const QPoint ONE_PIXEL = QPoint(1, 1);
+ const double ONE_PIXEL = 1;
+
+ SceneCoordinate topLeft = convertTileNumberToSceneCoordinate(m_zoomLevel,
+ m_viewTilesGrid.topLeft());
- QPoint topLeft = convertTileNumberToSceneCoordinate(m_zoomLevel, m_viewTilesGrid.topLeft());
// one tile - one pixel is added because returned coordinates are pointing to upper left corner
// of the last tile.
- QPoint bottomRight = convertTileNumberToSceneCoordinate(m_zoomLevel,
+ SceneCoordinate bottomRight = convertTileNumberToSceneCoordinate(m_zoomLevel,
m_viewTilesGrid.bottomRight()
- + ONE_TILE) - ONE_PIXEL;
+ + ONE_TILE);
+ bottomRight.setX(bottomRight.x() - ONE_PIXEL);
+ bottomRight.setY(bottomRight.y() - ONE_PIXEL);
- m_mapScene->tilesSceneRectUpdated(QRect(topLeft, bottomRight));
+ m_mapScene->tilesSceneRectUpdated(QRect(topLeft.toPointF().toPoint(),
+ bottomRight.toPointF().toPoint()));
}
void MapEngine::viewResized(const QSize &size)
#include <QtCore>
+#include "coordinates/geocoordinate.h"
+#include "coordinates/scenecoordinate.h"
+
class QGraphicsScene;
class FriendItemsHandler;
******************************************************************************/
public:
/**
- * @brief Coordinates of the current center point
+ * @brief Coordinates of the current center point
*
- * @return Current coordinates (latitude & longitude)
+ * @return Current coordinates
*/
- QPointF centerGeoCoordinate();
+ GeoCoordinate centerGeoCoordinate();
- /**
- * @brief Convert latitude and longitude to scene coordinates.
- *
- * @param latLonCoordinate latitude and longitude values
- * @return scene coordinate
- */
- static QPoint convertLatLonToSceneCoordinate(QPointF latLonCoordinate);
+ /// @todo remove
+// /**
+// * @brief Convert latitude and longitude to scene coordinates.
+// *
+// * @param latLonCoordinate latitude and longitude values
+// * @return scene coordinate
+// */
+// static QPoint convertLatLonToSceneCoordinate(GeoCoordinate latLonCoordinate);
- /**
- * @brief converts scene coordinates to latitude and longitude
- *
- * @param zoomLevel current zoom level
- * @param sceneCoordinate that will be converted
- */
- QPointF convertSceneCoordinateToLatLon(int zoomLevel, QPoint sceneCoordinate);
+// /**
+// * @brief converts scene coordinates to latitude and longitude
+// *
+// * @param zoomLevel current zoom level
+// * @param sceneCoordinate that will be converted
+// */
+// GeoCoordinate convertSceneCoordinateToLatLon(int zoomLevel, QPoint sceneCoordinate);
/**
* @brief Convert MapScene coordinate to tile x & y numbers.
*
* @param zoomLevel ZoomLevel
* @param sceneCoordinate MapScene coordinate
- * @return QPoint tile x & y numbers
+ * @return tile x & y numbers
*/
- static QPoint convertSceneCoordinateToTileNumber(int zoomLevel, QPoint sceneCoordinate);
+ static QPoint convertSceneCoordinateToTileNumber(int zoomLevel, SceneCoordinate sceneCoordinate);
/**
* @brief Convert tile x & y numbers to MapScene coordinates
*
* @param zoomLevel Zoom level
* @param tileNumber x & y numbers of the tile
- * @return QPoint MapScene coordinate
+ * @return Scene coordinate
*/
- static QPoint convertTileNumberToSceneCoordinate(int zoomLevel, QPoint tileNumber);
+ static SceneCoordinate convertTileNumberToSceneCoordinate(int zoomLevel, QPoint tileNumber);
/**
* @brief Calculate great-circle distance between two geographic coordinates
* @param secondLocation Coordinates of the second location
* @return qreal Distance in kilometers
*/
- qreal greatCircleDistance(QPointF firstLocation, QPointF secondLocation);
+ qreal greatCircleDistance(GeoCoordinate firstLocation, GeoCoordinate secondLocation);
/**
- * @brief MapEngine initializer
+ * @brief Set initial values for the map
*
- * Set initial location and zoom level for the engine. locationChanged and
- * zoomLevelChanged signals are emitted, so init should be called after
- * those signals are connected to MapView.
+ * Set initial location and zoom level from the settings, if available, or use the default
+ * values set in the constructor. Signals locationChanged() and zoomLevelChanged() are emitted,
+ * so init should be called after those signals are connected.
*/
void init();
*
* @param latLonCoordinate Latitude & longitude coordinates for location
*/
- void centerToCoordinates(QPointF latLonCoordinate);
+ void centerToCoordinates(GeoCoordinate latLonCoordinate);
/**
* @brief Slot to catch user own location data
* @param sceneCoordinate scene's current center coordinate
* @return QRect grid of tile coordinates
*/
- QRect calculateTileGrid(QPoint sceneCoordinate);
+ QRect calculateTileGrid(SceneCoordinate sceneCoordinate);
/**
* @brief Request disabling of auto centering if centered too far from the real location.
*
* @param sceneCoordinate scene's center coordinate
*/
- void disableAutoCenteringIfRequired(QPoint sceneCoordinate);
+ void disableAutoCenteringIfRequired(SceneCoordinate sceneCoordinate);
/**
* @brief Get new tiles.
* aren't already in the scene.
* @param sceneCoordinate scene's center coordinate
*/
- void getTiles(QPoint sceneCoordinate);
+ void getTiles(SceneCoordinate sceneCoordinate);
/**
* @brief Check if auto centering is enabled
* @param sceneCoordinate scene's center coordinate
* @return bool true if center tile changed, false otherwise
*/
- bool isCenterTileChanged(QPoint sceneCoordinate);
+ bool isCenterTileChanged(SceneCoordinate sceneCoordinate);
/**
* @brief Calculate scale at the map center of the map in meters/pixel
* @param position New coordinates from GPS
* @param accuracy Accuracy of the GPS fix
*/
- void gpsPositionUpdate(QPointF position, qreal accuracy);
+ void gpsPositionUpdate(GeoCoordinate position, qreal accuracy);
/**
* @brief Slot for received map tile images
*
* @param scenePosition Target position in the scene
*/
- void scrollToPosition(QPoint scenePosition);
+ void scrollToPosition(SceneCoordinate scenePosition);
/**
* @brief Set center point in the scene
* Does emit locationChanged signal.
* @param scenePosition Scene coordinates for new position
*/
- void setCenterPosition(QPoint scenePosition);
+ void setCenterPosition(SceneCoordinate scenePosition);
/**
* @brief Slot for actions after view zoom is finished
*
* @param sceneCoordinate New scene coordinates
*/
- void locationChanged(QPoint sceneCoordinate);
+ void locationChanged(SceneCoordinate sceneCoordinate);
/**
* @brief Signal is emitted when location item is clicked.
int m_zoomLevel; ///< Current zoom level
QPoint m_centerTile; ///< Current center tile
- QPoint m_lastAutomaticPosition; ///< Last automatically set position in scene coordinate
- QPoint m_sceneCoordinate; ///< Current center coordinate
+ SceneCoordinate m_lastAutomaticPosition; ///< Last automatically set position in scene coordinate
+ SceneCoordinate m_sceneCoordinate; ///< Current center coordinate
QRect m_viewTilesGrid; ///< Current grid of tiles in view (includes margin)
m_zoomLevel = zoomLevel;
}
-void MapScene::spanItems(int zoomLevel, QPoint sceneCoordinate, QSize viewSize)
+void MapScene::spanItems(int zoomLevel, SceneCoordinate sceneCoordinate, QSize viewSize)
{
qDebug() << __PRETTY_FUNCTION__;
#include "maptile.h"
+class SceneCoordinate;
+
/**
* @brief Map scene for storing MapTile items
*
* @param sceneCoordinate Scene coordinates of the current center point
* @param viewSize Current size of the view
*/
- void spanItems(int zoomLevel, QPoint sceneCoordinate, QSize viewSize);
+ void spanItems(int zoomLevel, SceneCoordinate sceneCoordinate, QSize viewSize);
/**
* @brief Save new tiles scene rect
{
qDebug() << __PRETTY_FUNCTION__;
- Q_ASSERT(value.type() == QVariant::Point);
+ Q_ASSERT(value.type() == QVariant::PointF);
- if (state() == QAbstractAnimation::Running)
- emit coordinateUpdated(value.toPoint());
+ if (state() == QAbstractAnimation::Running) {
+ QPointF point = value.toPointF();
+ emit coordinateUpdated(SceneCoordinate(point.x(), point.y()));
+ }
}
#ifndef MAPSCROLLER_H
#define MAPSCROLLER_H
-#include <QPoint>
#include <QVariantAnimation>
+#include "coordinates/scenecoordinate.h"
+
/**
* @brief Map scroller
*
* Used for kinetic and smooth scroll effects. Class implementation is following the singleton
* desing pattern.
*
+* Use QPointF datatype for startValue and endValue. Emitted datatype is SceneCoordinate.
+*
* @author Sami Rämö - sami.ramo@ixonos.com
*/
class MapScroller : public QVariantAnimation
*
* @param coordinate New coordinate value
*/
- void coordinateUpdated(QPoint coordinate);
+ void coordinateUpdated(SceneCoordinate coordinate);
};
#endif // MAPSCROLLER_H
if ((m_zoomLevel >= OSM_MIN_ZOOM_LEVEL) && (m_zoomLevel <= OSM_MAX_ZOOM_LEVEL)
&& (m_tileNumber.x() >= MIN_TILE_NUMBER_X) && (m_tileNumber.x() <= MAX_TILE_NUMBER_X)
&& (m_tileNumber.y() >= 0) && (m_tileNumber.y() <= MAX_TILE_NUMBER)) {
- setPos(MapEngine::convertTileNumberToSceneCoordinate(m_zoomLevel, m_tileNumber));
+ setPos(MapEngine::convertTileNumberToSceneCoordinate(m_zoomLevel, m_tileNumber).toPointF());
} else {
setPos(UNDEFINED, UNDEFINED);
}
this, SLOT(doubleTapZoomFinished()));
}
-void MapView::centerToSceneCoordinates(QPoint sceneCoordinate)
+void MapView::centerToSceneCoordinates(const SceneCoordinate &sceneCoordinate)
{
qDebug() << __PRETTY_FUNCTION__ << "sceneCoordinate" << sceneCoordinate;
- centerOn(sceneCoordinate);
+ centerOn(sceneCoordinate.toPointF());
}
void MapView::doubleTapZoomFinished()
m_scroller->setEasingCurve(QEasingCurve::Linear);
m_scroller->setDuration(ZOOM_TIME_MS);
- m_scroller->setStartValue(m_scenePosition);
- m_scroller->setEndValue(zoomPosition);
+ m_scroller->setStartValue(QPointF(m_scenePosition));
+ m_scroller->setEndValue(QPointF(zoomPosition));
m_zoomAnimation->setEasingCurve(QEasingCurve::InQuad);
m_zoomAnimation->setDuration(ZOOM_TIME_MS);
m_time.start();
m_index++;
- emit viewScrolled(m_scenePosition);
+ emit viewScrolled(SceneCoordinate(m_scenePosition.x(), m_scenePosition.y()));
m_mouseLastScenePosition = mapToScene(event->pos()).toPoint();
m_mouseLastViewPosition = event->pos();
m_scroller->setEasingCurve(QEasingCurve::OutCirc);
m_scroller->setDuration(KINETIC_SCROLL_TIME_MS);
- m_scroller->setStartValue(m_scenePosition);
- m_scroller->setEndValue(m_scenePosition + effectSceneDistance.toPoint());
+ m_scroller->setStartValue(QPointF(m_scenePosition));
+ m_scroller->setEndValue(QPointF(m_scenePosition) + effectSceneDistance);
m_scroller->start();
}
}
class MapScroller;
+class SceneCoordinate;
+
#define VALUES 4
/**
*
* @param sceneCoordinate Scene coordinates of the new center point
*/
- void centerToSceneCoordinates(QPoint sceneCoordinate);
+ void centerToSceneCoordinates(const SceneCoordinate &sceneCoordinate);
/**
* @brief Set zoom level of the view
* Signal is emitted when view is scrolled.
* @param sceneCoordinate Scene coordinates of the new center point of the view
*/
- void viewScrolled(QPoint sceneCoordinate);
+ void viewScrolled(const SceneCoordinate &sceneCoordinate);
/**
* @brief Signal for informing that zooming animation is finished
sendRequest(url, COOKIE, cookie);
}
-void SituareService::reverseGeo(const QPointF &coordinates)
+void SituareService::reverseGeo(const GeoCoordinate &coordinates)
{
qDebug() << __PRETTY_FUNCTION__;
sendRequest(url, COOKIE, cookie);
}
-void SituareService::updateLocation(const QPointF &coordinates, const QString &status,
+void SituareService::updateLocation(const GeoCoordinate &coordinates, const QString &status,
const bool &publish)
{
qDebug() << __PRETTY_FUNCTION__;
return url;
}
-QString SituareService::formUrlParameters(const QPointF &coordinates, QString status,
+QString SituareService::formUrlParameters(const GeoCoordinate &coordinates, QString status,
QString publish)
{
QString parameters;
parameters.append(QUESTION_MARK);
parameters.append(LATITUDE);
parameters.append(EQUAL_MARK);
- parameters.append(QString::number(coordinates.y()));
+ parameters.append(QString::number(coordinates.latitude()));
parameters.append(AMBERSAND_MARK);
parameters.append(LONGTITUDE);
parameters.append(EQUAL_MARK);
- parameters.append(QString::number(coordinates.x()));
+ parameters.append(QString::number(coordinates.longitude()));
if(publish.compare(PUBLISH_TRUE) == 0) {
parameters.append(AMBERSAND_MARK);
{
qDebug() << __PRETTY_FUNCTION__;
- m_credentials = credentials;
+ m_credentials = credentials;
}
void SituareService::parseUserData(const QByteArray &jsonReply)
QVariant userVariant = result.value("user");
QMap<QString, QVariant> userMap = userVariant.toMap();
- QPointF coordinates(userMap["longitude"].toReal(), userMap["latitude"].toReal());
+ GeoCoordinate coordinates(userMap["latitude"].toReal(), userMap["longitude"].toReal());
QUrl imageUrl = userMap[NORMAL_SIZE_PROFILE_IMAGE].toUrl();
QString address = userMap["address"].toString();
if(address.isEmpty()) {
QStringList location;
- location.append(QString::number(coordinates.y()));
- location.append(QString::number(coordinates.x()));
+ location.append(QString::number(coordinates.latitude()));
+ location.append(QString::number(coordinates.longitude()));
address = location.join(", ");
}
QVariant distance = friendMap["distance"];
QMap<QString, QVariant> distanceMap = distance.toMap();
- QPointF coordinates(friendMap["longitude"].toReal(), friendMap["latitude"].toReal());
+ GeoCoordinate coordinates(friendMap["latitude"].toReal(),friendMap["longitude"].toReal());
QUrl imageUrl = friendMap["profile_pic"].toUrl();
QString address = friendMap["address"].toString();
if(address.isEmpty()) {
QStringList location;
- location.append(QString::number(coordinates.y()));
- location.append(QString::number(coordinates.x()));
+ location.append(QString::number(coordinates.latitude()));
+ location.append(QString::number(coordinates.longitude()));
address = location.join(", ");
}
class NetworkAccessManager;
class QNetworkReply;
class QNetworkRequest;
-class QPointF;
+class GeoCoordinate;
class QUrl;
/**
*
* @param coordinates coordinates to be translated
*/
- void reverseGeo(const QPointF &coordinates);
+ void reverseGeo(const GeoCoordinate &coordinates);
/**
* @brief Updates location to the Situare server
* @param status message
* @param publish publish location on Facebook wall (true/false)
*/
- void updateLocation(const QPointF &coordinates, const QString &status, const bool &publish);
+ void updateLocation(const GeoCoordinate &coordinates, const QString &status, const bool &publish);
public slots:
* @param publish optional publish location on Facebook wall (true/false)
* @return QString
*/
- QString formUrlParameters(const QPointF &coordinates, QString status = QString(),
+ QString formUrlParameters(const GeoCoordinate &coordinates, QString status = QString(),
QString publish = QString());
/**
ui/zoombuttonpanel.cpp \
user/user.cpp \
ui/fullscreenbutton.cpp \
- engine/mce.cpp
+ engine/mce.cpp \
+ coordinates/scenecoordinate.cpp \
+ coordinates/geocoordinate.cpp
HEADERS += application.h \
common.h \
engine/engine.h \
user/user.h \
ui/fullscreenbutton.h \
engine/mce.h \
- map/osm.h
+ map/osm.h \
+ coordinates/scenecoordinate.h \
+ coordinates/geocoordinate.h
QT += network \
webkit
/**
* @brief Signal for finding friend.
*
- * @param coordinates friend's geo coordinates
+ * @param coordinates friend's coordinates
*/
- void findFriend(const QPointF &coordinates);
+ void findFriend(const GeoCoordinate &coordinates);
/******************************************************************************
* DATA MEMBERS
USA.
*/
-#include "friendlistpanel.h"
+#include "coordinates/geocoordinate.h"
#include "friendlistview.h"
#include "friendlistitem.h"
#include "panelcommon.h"
#include "sidepanel.h"
+#include "friendlistpanel.h"
+
FriendListPanel::FriendListPanel(QWidget *parent)
: SidePanel(parent)
{
item->setData(user);
m_friendListView->addWidget(user->userId(), item);
- connect(item, SIGNAL(findFriend(QPointF)),
- this, SIGNAL(findFriend(QPointF)));
+ connect(item, SIGNAL(findFriend(GeoCoordinate)),
+ this, SIGNAL(findFriend(GeoCoordinate)));
}
else {
item = m_friendListView->takeWidgetFromView(user->userId());
#include "sidepanel.h"
-class FriendListView;
-class User;
class QLabel;
class QWidget;
+class FriendListView;
+class GeoCoordinate;
+class User;
+
/**
* @brief Class for sliding friends list panel
*
/**
* @brief Signal for friend finding.
*
- * @param coordinates longitude and latitude values
+ * @param coordinates Target coordinate
*/
- void findFriend(const QPointF &coordinates);
+ void findFriend(const GeoCoordinate &coordinates);
/*******************************************************************************
* DATA MEMBERS
m_refresh(false),
m_progressIndicatorCount(0),
m_ownLocationCrosshair(0),
- m_email(),
+ m_email(),
m_password(),
m_fullScreenButton(0),
m_webView(0),
connect(m_mapView, SIGNAL(viewResized(QSize)),
m_friendsListPanelSidebar, SLOT(resizeSideBar(QSize)));
- connect(m_friendsListPanel, SIGNAL(findFriend(QPointF)),
- this, SIGNAL(findFriend(QPointF)));
+ connect(m_friendsListPanel, SIGNAL(findFriend(GeoCoordinate)),
+ this, SIGNAL(findFriend(GeoCoordinate)));
connect(this, SIGNAL(friendImageReady(User*)),
m_friendsListPanel, SLOT(friendImageReady(User*)));
buildFullScreenButton();
buildMapScale();
- connect(m_mapView, SIGNAL(viewScrolled(QPoint)),
- this, SIGNAL(mapViewScrolled(QPoint)));
+ connect(m_mapView, SIGNAL(viewScrolled(SceneCoordinate)),
+ this, SIGNAL(mapViewScrolled(SceneCoordinate)));
- connect(this, SIGNAL(centerToSceneCoordinates(QPoint)),
- m_mapView, SLOT(centerToSceneCoordinates(QPoint)));
+ connect(this, SIGNAL(centerToSceneCoordinates(SceneCoordinate)),
+ m_mapView, SLOT(centerToSceneCoordinates(SceneCoordinate)));
connect(m_mapView, SIGNAL(viewResized(QSize)),
this, SIGNAL(mapViewResized(QSize)));
connect(m_mapView, SIGNAL(viewResized(QSize)),
m_userPanelSidebar, SLOT(resizeSideBar(QSize)));
- connect(m_userPanel, SIGNAL(findUser(QPointF)),
- this, SIGNAL(findUser(QPointF)));
+ connect(m_userPanel, SIGNAL(findUser(GeoCoordinate)),
+ this, SIGNAL(findUser(GeoCoordinate)));
connect(m_userPanel, SIGNAL(requestReverseGeo()),
this, SIGNAL(requestReverseGeo()));
buildWebView();
loadCookies();
-
+
QStringList urlParts;
urlParts.append(FACEBOOK_LOGINBASE);
urlParts.append(SITUARE_PUBLIC_FACEBOOKAPI_KEY);
void MainWindow::updateItemVisibility()
{
qDebug() << __PRETTY_FUNCTION__;
-
- if(m_loggedIn) {
+
+ if(m_loggedIn) {
if(!m_gpsToggleAct->isChecked())
setOwnLocationCrosshairVisibility(true);
const QString MainWindow::username()
{
qDebug() << __PRETTY_FUNCTION__;
-
+
return m_email;
}
class QGraphicsScene;
class QLabel;
-class QWebView;
+class QMessageBox;
class QNetworkReply;
+class QToolButton;
+class QWebView;
class FacebookAuthentication;
class FullScreenButton;
class FriendListPanel;
+class GeoCoordinate;
class MapScale;
class MapScene;
class MapView;
+class SettingsDialog;
+class SceneCoordinate;
class SituareService;
class User;
class UserInfoPanel;
class ZoomButtonPanel;
-class SettingsDialog;
-class QToolButton;
-class QMessageBox;
+
/**
* @brief Main Window Class
*
* @param sceneCoordinate Scene coordinates of the new center point
*/
- void centerToSceneCoordinates(QPoint sceneCoordinate);
+ void centerToSceneCoordinates(const SceneCoordinate &sceneCoordinate);
/**
* @brief Signal for enabling automatic location update.
*
* @param coordinates user geo coordinates
*/
- void findUser(const QPointF &coordinates);
+ void findUser(const GeoCoordinate &coordinates);
/**
* @brief Signals when friend's profile image is ready
*
* @param coordinates friend's geo coordinates
*/
- void findFriend(const QPointF &coordinates);
+ void findFriend(const GeoCoordinate &coordinates);
/**
* @brief Signal for friend location ready.
*
* @param sceneCoordinate
*/
- void mapViewScrolled(QPoint sceneCoordinate);
+ void mapViewScrolled(const SceneCoordinate &sceneCoordinate);
/**
* @brief Forwarding signal from MapEngine to MapView
QSettings settings(DIRECTORY_NAME, FILE_NAME);
- if (!m_backupMessage.isEmpty()) {
+ if (!m_backupMessage.isEmpty()) {
settings.setValue(USER_UNSEND_MESSAGE, m_backupMessage.toAscii());
settings.setValue(USER_UNSEND_MESSAGE_PUBLISH, m_backupFacebookPublishPolicity);
} else {
m_locationLabel->setText(address);
}
-void UserInfo::setCoordinates(const QPointF &coordinates)
+void UserInfo::setCoordinates(const GeoCoordinate &coordinates)
{
qDebug() << __PRETTY_FUNCTION__;
#define USERINFO_H
#include <QWidget>
+
+#include "coordinates/geocoordinate.h"
#include "updatelocation/updatelocationdialog.h"
class ImageButton;
*
* @param coordinates Reference to users current coordinates
*/
- void setCoordinates(const QPointF &coordinates);
+ void setCoordinates(const GeoCoordinate &coordinates);
/**
* @brief Sets the user picture
* @brief Slot function to forward messageUpdate launch signal
*
*/
- void messageUpdate();
+ void messageUpdate();
/**
* @brief Slot function to get indication when dialog is finished
*
* @param coordinates user geo coordinates
*/
- void findUser(const QPointF &coordinates);
+ void findUser(const GeoCoordinate &coordinates);
/**
* @brief Signal that used to inform user that his message/location update tp Situare server
******************************************************************************/
private:
bool m_backupFacebookPublishPolicity; ///< Backup of publish on Facebook checkbox value
- bool m_expanded; ///< Item expanded state
+ bool m_expanded; ///< Item expanded state
QLabel *m_locationLabel; ///< Location label
QLabel *m_nameLabel; ///< Name label
QLabel *m_statusTextLabel; ///< Status text label
QPixmap m_backgroundMiddleImage; ///< Middle background image
QPixmap m_backgroundTopImage; ///< Top background image
QPoint m_mousePosition; ///< Current mouse press position
- QPointF m_coordinates; ///< User current coordinates
+ GeoCoordinate m_coordinates; ///< User current coordinates
QString m_address; ///< Address from where the new message was sent
QString m_backupMessage; ///< Backup of users message
QString m_expandedMessageText; ///< Expanded message text
QString m_messageText; ///< User's message
QString m_time; ///< Time when the new message was sent
QString m_userName; ///< User's name
- ImageButton *m_findButton; ///< User find button
+ ImageButton *m_findButton; ///< User find button
UpdateLocationDialog *m_updateLocation; ///< Update location dialog
};
m_panelVBox->addWidget(userInfoScroll);
m_panelVBox->setContentsMargins(USERPANEL_MARGIN_LEFT, 0, USERPANEL_MARGIN_RIGHT, 0);
- connect(m_userInfo, SIGNAL(findUser(QPointF)),
- this, SIGNAL(findUser(QPointF)));
+ connect(m_userInfo, SIGNAL(findUser(GeoCoordinate)),
+ this, SIGNAL(findUser(GeoCoordinate)));
connect(m_userInfo,SIGNAL(requestReverseGeo()),
this, SIGNAL(requestReverseGeo()));
*
* @param coordinates user geo coordinates
*/
- void findUser(const QPointF &coordinates);
+ void findUser(const GeoCoordinate &coordinates);
/**
* @brief Signal that used to inform user that his message/location update tp Situare server
#include "user.h"
-User::User(const QString &address, const QPointF &coordinates, const QString &name,
+User::User(const QString &address, const GeoCoordinate &coordinates, const QString &name,
const QString ¬e, const QUrl &imageUrl, const QString ×tamp, const bool &type,
const QString &userId, const QString &units, const double &value)
: m_address(address)
m_address = address;
}
-void User::setCoordinates(const QPointF &coordinates)
+void User::setCoordinates(const GeoCoordinate &coordinates)
{
m_coordinates = coordinates;
}
return m_address;
}
-const QPointF& User::coordinates() const
+const GeoCoordinate& User::coordinates() const
{
return m_coordinates;
}
#define USER_H
#include <QPixmap>
-#include <QPointF>
#include <QString>
#include <QUrl>
+#include "coordinates/geocoordinate.h"
+
/**
* @brief Class to store user information (applies to friends also)
*
* @brief Constructor, initializes member data
*
*/
- User(const QString &address, const QPointF &coordinates, const QString &name,
+ User(const QString &address, const GeoCoordinate &coordinates, const QString &name,
const QString ¬e, const QUrl &imageUrl, const QString ×tamp,
const bool &type, const QString &userId, const QString &units = 0,
const double &value = 0);
*
* @param coordinates coordinates
*/
- void setCoordinates(const QPointF &coordinates);
+ void setCoordinates(const GeoCoordinate &coordinates);
/**
* @brief Set distance
/**
* @brief Get coordinates
*
- * @return QPointF coordinates
+ * @return GeoCoordinate coordinates
*/
- const QPointF &coordinates() const;
+ const GeoCoordinate &coordinates() const;
/**
* @brief Get distance and units
private:
QString m_address; ///< placeholder for address information
- QPointF m_coordinates; ///< placeholder for coordinates
+ GeoCoordinate m_coordinates; ///< placeholder for coordinates
QString m_name; ///< placeholder for name
QString m_note; ///< placeholder for note
QUrl m_profileImageUrl; ///< placeholder for image url