/*
QAD - Qt ADvanced
Ivan Pelipenko peri4ko@yandex.ru
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Lesser General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public License
along with this program. If not, see .
*/
#ifndef mapview_tile_cache_h
#define mapview_tile_cache_h
#include "mapview_types.h"
#include
#include
#include
#include
#include
#include
class MapView;
class MapViewTileCache: public QThread {
Q_OBJECT
public:
explicit MapViewTileCache(MapView * p);
~MapViewTileCache();
void setMinimumCacheSize(int bytes) {
fixed_size_b = bytes;
updateCacheSize();
}
void setAdditionalCacheSize(int mb) {
add_size_b = mb * 1024 * 1024;
updateCacheSize();
}
void setTileObsoleteTime(int secs) { secs_obsolete = secs; }
void tileDownloaded(MapViewTypes::TileIndex index, const QPixmap & pixmap);
MapViewTypes::TilePixmap getTile(MapViewTypes::TileIndex index, QRectF & rect_src);
void clearCache();
bool isTileFileExists(MapViewTypes::TileIndex index) const;
QString cacheRoot() const { return cache_root; }
void setCacheRoot(const QString & p);
void tileProviderChanged();
void setOfflineMode(bool yes);
private:
MapViewTypes::TilePixmap getTileFromCache(MapViewTypes::TileIndex index);
void updateCacheSize();
void saveTile(MapViewTypes::TilePixmap * tile);
void writeToDisk(const MapViewTypes::TilePixmap & tile);
void run() override;
MapView * parent;
QString cache_root;
QDir cache_dir;
QWaitCondition cond;
QMutex cond_mutex;
int secs_obsolete = -1;
int fixed_size_b = 0, add_size_b = 0;
bool is_offline = false;
QQueue queue;
QCache tile_cache;
public slots:
private slots:
signals:
void tileReady(MapViewTypes::TilePixmap);
};
#endif