digiKam
Loading...
Searching...
No Matches
thumbnailloadthread.h
Go to the documentation of this file.
1/* ============================================================
2 *
3 * This file is a part of digiKam project
4 * https://www.digikam.org
5 *
6 * Date : 2007-06-05
7 * Description : Thumbnail loading
8 *
9 * SPDX-FileCopyrightText: 2006-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2008-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QPixmap>
21#include <QImage>
22
23// Local includes
24
26#include "thumbnailinfo.h"
27
28namespace Digikam
29{
30
31class DbEngineParameters;
32class ThumbnailCreator;
33class ThumbnailInfoProvider;
34
35class DIGIKAM_EXPORT ThumbnailLoadThread : public ManagedLoadSaveThread
36{
37 Q_OBJECT
38
39public:
40
41 explicit ThumbnailLoadThread(QObject* const parent = nullptr);
42 ~ThumbnailLoadThread() override;
43
49 static ThumbnailLoadThread* defaultThread();
50 static ThumbnailLoadThread* defaultIconViewThread();
51
52 static void cleanUp();
53
59 static void initializeNoThumbnailStorage();
60
67 static void initializeThumbnailDatabase(const DbEngineParameters& params, ThumbnailInfoProvider* const provider = nullptr);
68
73 static void setDisplayingWidget(QWidget* const widget);
74
82 bool find(const ThumbnailIdentifier& identifier, QPixmap& pixmap);
83
87 bool find(const ThumbnailIdentifier& identifier,
88 QPixmap& pixmap, int size, bool onlyStorage = false);
89
96 void find(const ThumbnailIdentifier& identifier);
97
101 void find(const ThumbnailIdentifier& identifier, int size);
102
107 void findGroup(QList<ThumbnailIdentifier>& identifiers);
108 void findGroup(QList<ThumbnailIdentifier>& identifiers, int size);
109
113 bool find(const ThumbnailIdentifier& identifier, const QRect& rect, QPixmap& pixmap);
114 bool find(const ThumbnailIdentifier& identifier,
115 const QRect& rect, QPixmap& pixmap, int size, bool onlyStorage = false);
116 void find(const ThumbnailIdentifier& identifier, const QRect& rect);
117 void find(const ThumbnailIdentifier& identifier, const QRect& rect, int size);
118 void findGroup(const QList<QPair<ThumbnailIdentifier, QRect> >& filePathAndRects);
119 void findGroup(const QList<QPair<ThumbnailIdentifier, QRect> >& filePathsAndRects, int size);
120
125 bool findBuffered(const ThumbnailIdentifier& identifier,
126 const QRect& rect, QPixmap& pixmap, int size);
127
132 void preload(const ThumbnailIdentifier& identifier);
133 void preload(const ThumbnailIdentifier& identifier, int size);
134 void preloadGroup(QList<ThumbnailIdentifier>& identifiers);
135 void preloadGroup(QList<ThumbnailIdentifier>& identifiers, int size);
136
141 void pregenerateGroup(const QList<ThumbnailIdentifier>& identifiers);
142 void pregenerateGroup(const QList<ThumbnailIdentifier>& identifiers, int size);
143
150 void load(const LoadingDescription& description);
151
160 QList<LoadingDescription> lastDescriptions() const;
161
171 void setThumbnailSize(int size, bool forFace = false);
172
178 static int maximumThumbnailSize();
179 static int maximumThumbnailPixmapSize(bool withHighlighting);
180
190 void setPixmapRequested(bool wantPixmap);
191
197 void setHighlightPixmap(bool highlight);
198
203 int thumbnailToPixmapSize(int size) const;
204 static int thumbnailToPixmapSize(bool withHighlight, int size);
205
209 int pixmapToThumbnailSize(int size) const;
210
219 void setSendSurrogatePixmap(bool send);
220
227 void storeDetailThumbnail(const QString& filePath,
228 const QRect& detailRect,
229 const QImage& image,
230 bool isFace = false);
231 int storedSize() const;
232
240 static void deleteThumbnail(const QString& filePath);
241
242Q_SIGNALS:
243
245 void signalThumbnailLoaded(const LoadingDescription& loadingDescription, const QPixmap& pix);
246
247public:
248
250 ThumbnailCreator* thumbnailCreator() const;
251
252protected:
253
254 void thumbnailLoaded(const LoadingDescription& loadingDescription, const QImage& img) override;
255
256private:
257
258 bool find(const ThumbnailIdentifier& identifier, int size, QPixmap* retPixmap,
259 bool emitSignal, const QRect& detailRect, bool onlyStorage = false);
260 void load(const LoadingDescription& description, bool pregenerate);
261 bool checkSize(int size);
262 QPixmap surrogatePixmap(const LoadingDescription& loadingDescription);
263
264Q_SIGNALS:
265
268 void ThumbnailLoaded(const LoadingDescription&, const QImage&);
269
270private Q_SLOTS:
271
272 void slotThumbnailsAvailable();
273 void slotThumbnailLoaded(const LoadingDescription&, const QImage&);
274
275private:
276
277 // Disable
279 ThumbnailLoadThread& operator=(const ThumbnailLoadThread&) = delete;
280
281private:
282
283 class Private;
284 Private* const d = nullptr;
285};
286
287// --------------------------------------------------------------------------------------------------
288
289class DIGIKAM_EXPORT ThumbnailImageCatcher : public QObject
290{
291 Q_OBJECT
292
293public:
294
305 explicit ThumbnailImageCatcher(QObject* const parent = nullptr);
306 explicit ThumbnailImageCatcher(ThumbnailLoadThread* const thread,
307 QObject* const parent = nullptr);
308 ~ThumbnailImageCatcher() override;
309
310 ThumbnailLoadThread* thread() const;
311 void setThumbnailLoadThread(ThumbnailLoadThread* const thread);
312
322 int enqueue();
323 QList<QImage> waitForThumbnails();
324
325public Q_SLOTS:
326
333 void setActive(bool active);
334
339 void cancel();
340
341protected Q_SLOTS:
342
343 void slotThumbnailLoaded(const LoadingDescription&, const QImage&);
344
345private:
346
347 // Disable
349 ThumbnailImageCatcher& operator=(const ThumbnailImageCatcher&) = delete;
350
351private:
352
353 class Private;
354 Private* const d = nullptr;
355};
356
357} // namespace Digikam
Definition dbengineparameters.h:39
Definition loadingdescription.h:35
Definition managedloadsavethread.h:29
Definition thumbnailcreator.h:41
Definition thumbnailinfo.h:31
Definition thumbnailloadthread_p.h:129
Definition thumbnailloadthread.h:290
Definition thumbnailinfo.h:105
Definition thumbnailloadthread_p.h:93
Definition thumbnailloadthread.h:36
void thumbnailsAvailable()
NOTE: For internal use only.
void ThumbnailLoaded(const LoadingDescription &, const QImage &)
void signalThumbnailLoaded(const LoadingDescription &loadingDescription, const QPixmap &pix)
NOTE: See LoadSaveThread for a QImage-based thumbnailLoaded() signal.
Definition datefolderview.cpp:34