summaryrefslogtreecommitdiffstats
path: root/src/sq_pixmapcache.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/sq_pixmapcache.h')
-rw-r--r--src/sq_pixmapcache.h133
1 files changed, 133 insertions, 0 deletions
diff --git a/src/sq_pixmapcache.h b/src/sq_pixmapcache.h
new file mode 100644
index 0000000..3572715
--- /dev/null
+++ b/src/sq_pixmapcache.h
@@ -0,0 +1,133 @@
+/***************************************************************************
+ sq_pixmapcache.h - description
+ -------------------
+ begin : Sep 28 2004
+ copyright : (C) 2004 by Baryshev Dmitry
+ ***************************************************************************/
+
+/***************************************************************************
+ * *
+ * 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