m_isRemoveStackedTilesRunning = false;
}
+void MapScene::removeOtherLevelTiles()
+{
+ qWarning() << __PRETTY_FUNCTION__;
+
+ QList<QGraphicsItem *> allItems = items();
+ foreach(QGraphicsItem *item, allItems) {
+ MapTile *tile = dynamic_cast<MapTile *>(item);
+ if (tile && tile->zoomLevel() != m_zoomLevel) {
+ removeTile(tile);
+ qWarning() << __PRETTY_FUNCTION__ << "removed other level tile";
+ }
+ }
+
+ qWarning() << __PRETTY_FUNCTION__ << "items in scene:" << items().count();
+}
+
void MapScene::removeOutOfViewTiles(QRect tilesGrid, int zoomLevel)
{
qDebug() << __PRETTY_FUNCTION__;
- QList<QGraphicsItem *> viewTiles = items(m_tilesSceneRect, Qt::IntersectsItemBoundingRect);
- QList<QGraphicsItem *> allTiles = items();
+ QList<QGraphicsItem *> viewItems = items(m_tilesSceneRect, Qt::IntersectsItemBoundingRect);
+ QList<QGraphicsItem *> allItems = items();
//Remove tiles which are in view from allTiles
- foreach (QGraphicsItem *tile, viewTiles)
- allTiles.removeOne(tile);
+ foreach (QGraphicsItem *item, viewItems)
+ allItems.removeOne(item);
// note: add 1 so odd values are rounded up
int tilesGridWidthHalf = (tilesGrid.width() + 1) / 2;
if (tilesGrid.right() > (MapEngine::tileMaxValue(zoomLevel) - tilesGridWidthHalf + GRID_PADDING)) {
QRect oppositeRect = m_tilesSceneRect;
oppositeRect.translate(-MAP_PIXELS_X, 0);
- QList<QGraphicsItem *> oppositeTiles = items(oppositeRect, Qt::IntersectsItemBoundingRect);
- foreach (QGraphicsItem *tile, oppositeTiles)
- allTiles.removeOne(tile);
+ QList<QGraphicsItem *> oppositeItems = items(oppositeRect, Qt::IntersectsItemBoundingRect);
+ foreach (QGraphicsItem *item, oppositeItems)
+ allItems.removeOne(item);
}
if (tilesGrid.left() < (tilesGridWidthHalf - GRID_PADDING)) {
QRect oppositeRect = m_tilesSceneRect;
oppositeRect.translate(MAP_PIXELS_X, 0);
- QList<QGraphicsItem *> oppositeTiles = items(oppositeRect, Qt::IntersectsItemBoundingRect);
- foreach (QGraphicsItem *tile, oppositeTiles)
- allTiles.removeOne(tile);
+ QList<QGraphicsItem *> oppositeItems = items(oppositeRect, Qt::IntersectsItemBoundingRect);
+ foreach (QGraphicsItem *item, oppositeItems)
+ allItems.removeOne(item);
}
//Remove tiles out of view
- foreach (QGraphicsItem *tile, allTiles) {
- MapTile *tileToRemove = dynamic_cast<MapTile *>(tile);
- if (tileToRemove)
- removeTile(tileToRemove);
+ foreach (QGraphicsItem *item, allItems) {
+ MapTile *tile = dynamic_cast<MapTile *>(item);
+ if (tile)
+ removeTile(tile);
}
qWarning() << __PRETTY_FUNCTION__ << "items in scene:" << items().count();
}
}
+void MapScene::setZoomLevel(int zoomLevel)
+{
+ m_zoomLevel = zoomLevel;
+ QTimer::singleShot(10000, this, SLOT(removeOtherLevelTiles()));
+}
+
void MapScene::spanItems(int zoomLevel, QPoint sceneCoordinate, QSize viewSize)
{
qDebug() << __PRETTY_FUNCTION__;
*/
void setTilesDrawingLevels(int zoomLevel);
+ void setZoomLevel(int zoomLevel);
+
void spanItems(int zoomLevel, QPoint sceneCoordinate, QSize viewSize);
/**
void moveIntersectingItemsHorizontally(QRect from, int distance);
private slots:
+ void removeOtherLevelTiles();
+
/**
* @brief Slot for running next queued removal of stacked tiles
*
******************************************************************************/
private:
bool m_isRemoveStackedTilesRunning; ///< Is singleshot timer already running
+ int m_zoomLevel;
QHash<QString, MapTile *> m_mapTilesInScene; ///< List of map tiles in map scene
QList<MapTile *> m_removeStackedTilesList; ///< "Queue" for stacked tiles removal requests
QRect m_tilesSceneRect; ///< Current viewable area