/* 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