void MapEngine::setViewLocation(QPointF latLonCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
setLocation(convertLatLonToSceneCoordinate(latLonCoordinate));
}
void MapEngine::mapImageReceived(int zoomLevel, int x, int y, const QPixmap &image)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
QString hashKey = tilePath(zoomLevel, x, y);
if (!m_mapScene->isTileInScene(hashKey)) {
QGraphicsScene* MapEngine::scene()
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
return m_mapScene;
}
int MapEngine::tileMaxValue(int zoomLevel)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
return (1 << zoomLevel) - 1;
}
QRect MapEngine::calculateTileGrid(QPoint sceneCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
QPoint tileCoordinate = convertSceneCoordinateToTileNumber(m_zoomLevel, sceneCoordinate);
int gridWidth = (m_viewSize.width()/TILE_SIZE_X + 1) + (GRID_PADDING*2);
void MapEngine::alignImmovableItems(QPoint viewTopLeft)
{
- qDebug() << __PRETTY_FUNCTION__ << "viewTopLeft:" << viewTopLeft;
+ // qDebug() << __PRETTY_FUNCTION__ << "viewTopLeft:" << viewTopLeft;
m_mapZoomPanel->setPos(viewTopLeft);
}
void MapEngine::setLocation(QPoint sceneCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
m_sceneCoordinate = sceneCoordinate;
emit locationChanged(m_sceneCoordinate);
bool MapEngine::isCenterTileChanged(QPoint sceneCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ // qDebug() << __PRETTY_FUNCTION__;
QPoint centerTile = convertSceneCoordinateToTileNumber(m_zoomLevel, sceneCoordinate);
QPoint temp = m_centerTile;
void MapEngine::getTiles(QPoint sceneCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
m_viewTilesGrid = calculateTileGrid(sceneCoordinate);
updateViewTilesSceneRect();
void MapEngine::updateViewTilesSceneRect()
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
const QPoint ONE_TILE = QPoint(1, 1);
const QPoint ONE_PIXEL = QPoint(1, 1);
void MapEngine::viewResized(const QSize &size)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
m_viewSize = size;
getTiles(m_sceneCoordinate);
void MapEngine::viewZoomFinished()
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
if (m_zoomedIn) {
m_zoomedIn = false;
void MapEngine::zoomIn()
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
if (m_zoomLevel < MAX_MAP_ZOOM_LEVEL) {
m_zoomLevel++;
void MapEngine::zoomOut()
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
if (m_zoomLevel > MIN_VIEW_ZOOM_LEVEL) {
m_zoomLevel--;
QString MapEngine::tilePath(int zoomLevel, int x, int y)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
QString tilePathString(QString::number(zoomLevel) + "/");
tilePathString.append(QString::number(x) + "/");
QPoint MapEngine::convertSceneCoordinateToTileNumber(int zoomLevel, QPoint sceneCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ // qDebug() << __PRETTY_FUNCTION__;
int pow = 1 << (MAX_MAP_ZOOM_LEVEL - zoomLevel);
int x = static_cast<int>(sceneCoordinate.x() / (TILE_SIZE_X*pow));
QPoint MapEngine::convertTileNumberToSceneCoordinate(int zoomLevel, QPoint tileNumber)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
int pow = 1 << (MAX_MAP_ZOOM_LEVEL - zoomLevel);
int x = tileNumber.x() * TILE_SIZE_X * pow;
QPoint MapEngine::convertLatLonToSceneCoordinate(QPointF latLonCoordinate)
{
- qDebug() << __PRETTY_FUNCTION__;
+ //qDebug() << __PRETTY_FUNCTION__;
qreal longitude = latLonCoordinate.x();
qreal latitude = latLonCoordinate.y();
void MapEngine::receiveOwnLocation(User *user)
{
- qDebug() << __PRETTY_FUNCTION__;
+ // qDebug() << __PRETTY_FUNCTION__;
m_ownLocation->setPosition(user->coordinates());
m_mapScene->addItem(m_ownLocation);
}
void MapEngine::receiveFriendLocations(QList<User *> &friendsList)
{
qDebug() << __PRETTY_FUNCTION__;
- qDeleteAll(m_friendsLocations.begin(),m_friendsLocations.end());
- m_friendsLocations.clear();
+ //qDeleteAll(m_friendsLocations.begin(), m_friendsLocations.end());
+ //m_friendsLocations.clear();
+
+
+ static int friendReceiveCounter = 0;
+
+ qDebug() << friendReceiveCounter << "TIME IN THIS FUNCTION";
+
+ if (friendReceiveCounter == 0){
+ friendReceiveCounter++;
+
+ for(int i=0; i<friendsList.count(); i++) {
+ FriendLocationItem *friendLocation
+ = new FriendLocationItem(friendsList.at(i)->profileImage(),
+ friendsList.at(i)->coordinates(),0);
+
+ friendLocation->setUserId(friendsList.at(i)->userId());
+ m_friendsLocations.append(friendLocation);
+ m_mapScene->addItem(friendLocation);
+ }
+
+ }
+
+ else {
+ friendReceiveCounter++;
+ QList<int> currentFriendList;
+
+ //remember to check Qt style about inner loops
+
+ //finds users that have still location available.
+ //stores their index in to currentFriendlist
+ //check if their location is changed
+ //set new location to changed items
+ for(int i=0; i<friendsList.count(); i++) {
+ qDebug() << "friendsList Count : " << friendsList.count();
+
+ for(int j=0; j<m_friendsLocations.count(); j++){
+ qDebug() << "m_friendsLocations Count : " << m_friendsLocations.count();
- for(int i=0; i<friendsList.count(); i++) {
- FriendLocationItem *friendLocation
- = new FriendLocationItem(friendsList.at(i)->profileImage(),
- friendsList.at(i)->coordinates(),0);
+ if (m_friendsLocations.at(j)->userId() == friendsList.at(i)->userId()){
+ currentFriendList.append(j);
+ qDebug() << "i: " << i;
+ qDebug() << "j: " << j;
- friendLocation->setUserId(friendsList.at(i)->userId());
- m_friendsLocations.append(friendLocation);
- m_mapScene->addItem(friendLocation);
+ if (m_friendsLocations.at(j)->position()
+ != convertLatLonToSceneCoordinate(friendsList.at(i)->coordinates())){
+
+ m_friendsLocations.at(j)->setPosition(friendsList.at(i)->coordinates());
+ }
+ }
+ }
+ }
+
+ // now numbers that are not on the currentFriendList needs to be removed from scene.
+ // users that are not available are also removed from m_friendLocations
+ int m_friendsLocationsOriginalCount = m_friendsLocations.count();
+ for(int i=0; i<m_friendsLocationsOriginalCount; i++){
+ if(currentFriendList.contains(i) == false){
+ m_mapScene->removeItem(m_friendsLocations.at(i));
+ m_friendsLocations.removeAt(i);
+ }
+ }
}
}