You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
ksquirrel/ksquirrel/sq_pixmapcache.h

134 lines
3.3 KiB

/***************************************************************************
sq_pixmapcache.h - description
-------------------
begin : Sep 28 2004
copyright : (C) 2004 by Baryshev Dmitry
email : ksquirrel.iv@gmail.com
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
#ifndef SQ_PIXMAPCACHE_H
#define SQ_PIXMAPCACHE_H
#include <tqmap.h>
#include <tqobject.h>
#include <kurl.h>
#include "sq_thumbnailinfo.h"
class SQ_DirThumbs;
/*
* SQ_PixmapCache represents a simple memory cache, which
* stores pixmaps. It doesn't use neither TQPixmapCache nor TQCache.
*
* Uses SQ_Dir(Thumbnails) to store thumbnails on disk.
*/
class SQ_PixmapCache : public TQObject, public TQMap<KURL, SQ_Thumbnail>
{
public:
SQ_PixmapCache(TQObject *parent, int limit = 20*1024);
~SQ_PixmapCache();
/*
* Get maximum cache limit.
*/
int cacheLimit();
/*
* Set cache limit, in kilobytes.
*
* 200 means ~200 Kb, 1024 - 1Mb
*/
void setCacheLimit(int);
/*
* Write all entries to disk and clear cache.
*/
void sync();
/*
* Write one entry to disk and remove it from cache.
*/
void syncEntry(const KURL &key, SQ_Thumbnail &thumb);
/*
* Insert new entry to cache
*/
void insert(const KURL &key, const SQ_Thumbnail &thumb);
/*
* Check if pixmap, represented by 'key', is already in cache.
*/
bool contains2(const KURL &key, SQ_Thumbnail &th);
/*
* Calculate total size used by cache (not exact!)
*/
int totalSize();
/*
* Is cache full ?
*/
bool full();
/*
* Clear cache.
*/
void clear();
/*
* Remove entry from cache.
*/
void removeEntry(const KURL &key);
/*
* Remove entry from cache and from disk.
*/
void removeEntryFull(const KURL &key);
static SQ_PixmapCache* instance() { return m_instance; }
private:
int entrySize(const SQ_Thumbnail &th) const;
private:
int cache_limit;
int last_full;
bool valid_full;
SQ_DirThumbs *dir;
static SQ_PixmapCache *m_instance;
};
inline
int SQ_PixmapCache::cacheLimit()
{
return cache_limit;
}
inline
void SQ_PixmapCache::setCacheLimit(int n)
{
cache_limit = n << 10;
}
inline
bool SQ_PixmapCache::full()
{
// when 'cache_limit' is 0, pixmap cache is always full
return cache_limit ? (cache_limit <= totalSize()) : true;
}
#endif