digiKam
Loading...
Searching...
No Matches
album.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 : 2004-06-15
7 * Description : digiKam album types
8 *
9 * SPDX-FileCopyrightText: 2004-2005 by Renchi Raju <renchi dot raju at gmail dot com>
10 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2014-2015 by Mohamed_Anwer <m_dot_anwer at gmx dot com>
12 *
13 * SPDX-License-Identifier: GPL-2.0-or-later
14 *
15 * ============================================================ */
16
17#pragma once
18
19// Qt includes
20
21#include <QMap>
22#include <QUrl>
23#include <QList>
24#include <QString>
25#include <QObject>
26#include <QMetaType>
27#include <QReadWriteLock>
28
29// Local includes
30
31#include "coredbalbuminfo.h"
32#include "digikam_export.h"
33
34namespace Digikam
35{
36
40class Album;
41typedef QList<Album*> AlbumList;
42
43class CoreDbUrl;
44
56class DIGIKAM_GUI_EXPORT Album
57{
58public:
59
60 enum Type
61 {
62 PHYSICAL = 0,
66 FACE
67 };
68
72 Album* parent() const;
73
77 Album* firstChild() const;
78
82 Album* lastChild() const;
83
89 Album* next() const;
90
96 Album* prev() const;
97
101 Album* childAtRow(int row) const;
102
106 AlbumList childAlbums(bool recursive = false);
107
111 QList<int> childAlbumIds(bool recursive = false);
112
117 Type type() const;
118
128 int id() const;
129
147 int globalID() const;
148
152 int childCount() const;
153
157 int rowFromAlbum() const;
158
162 QString title() const;
163
167 virtual CoreDbUrl databaseUrl() const = 0;
168
172 bool isRoot() const;
173
180 bool isAncestorOf(Album* const album) const;
181
186 bool isUsedByLabelsTree() const;
187
192 bool isTrashAlbum() const;
193
223 void setExtraData(const void* const key, void* const value);
224
232 void removeExtraData(const void* const key);
233
241 void* extraData(const void* const key) const;
242
249 void setUsedByLabelsTree(bool isUsed);
250
257 static int globalID(Type type, int id);
258
263 void prepareForDeletion();
264
265protected:
266
270 Album(Album::Type type, int id, bool root);
271
277 virtual ~Album();
278
282 void clear();
283
291 void setTitle(const QString& title);
292
300 void setParent(Album* const parent);
301
309 void insertChild(Album* const child);
310
318 void removeChild(Album* const child);
319
320private:
321
322 // Disable
323 Album() = delete;
324 Album& operator==(const Album&) = delete;
325
326 Q_DISABLE_COPY(Album)
327
328private:
329
330 mutable QReadWriteLock m_cacheLock;
331
332 bool m_root = false;
333 bool m_usedByLabelsTree = false;
334
335 int m_id = -1;
336
337 QString m_name;
338 QString m_title;
339
340 QMap<const void*, void*> m_extraMap;
341
342 QList<Album*> m_childCache;
343
344 Type m_type = PHYSICAL;
345
346 Album* m_parent = nullptr;
347
348 friend class AlbumManager;
349};
350
356class DIGIKAM_GUI_EXPORT PAlbum : public Album
357{
358public:
359
361 explicit PAlbum(const QString& title);
362
364 PAlbum(int albumRoot, const QString& label);
365
367 PAlbum(int albumRoot, const QString& parentPath, const QString& title, int id);
368
370 PAlbum(const QString& parentPath, int albumRoot);
371 ~PAlbum() override = default;
372
373 void setCaption(const QString& caption);
374 void setCategory(const QString& category);
375 void setDate(const QDate& date);
376
377 QString albumRootPath() const;
378 QString albumRootLabel() const;
379 int albumRootId() const;
380 QString caption() const;
381 QString category() const;
382 QDate date() const;
383 QString albumPath() const;
384 QString prettyUrl() const;
385 QString folderPath() const;
386 CoreDbUrl databaseUrl() const override;
387 QUrl fileUrl() const;
388 qlonglong iconId() const;
389 bool isAlbumRoot() const;
390
391private:
392
397 static int m_uniqueTrashId;
398
399 bool m_isAlbumRootAlbum = false;
400
401 int m_albumRootId = -1;
402
403 QString m_path;
404 QString m_parentPath = QLatin1String("/");
405
406 QString m_category;
407 QString m_caption;
408 qlonglong m_iconId = 0;
409
410 QDate m_date;
411
412 friend class AlbumManager;
413};
414
420class DIGIKAM_GUI_EXPORT TAlbum : public Album
421{
422public:
423
424 TAlbum(const QString& title, int id, bool root = false);
425 ~TAlbum() override = default;
426
432 QString tagPath(bool leadingSlash = true) const;
433 QString standardIconName() const;
434 CoreDbUrl databaseUrl() const override;
435 QString prettyUrl() const;
436 QString icon() const;
437 qlonglong iconId() const;
438 QList<int> tagIDs() const;
439
440 bool isInternalTag() const;
441 bool hasProperty(const QString& key) const;
442 QString property(const QString& key) const;
443 QMap<QString, QString> properties() const;
444
445private:
446
447 int m_pid = 0;
448
449 QString m_icon;
450 qlonglong m_iconId = 0;
451
452 friend class AlbumManager;
453};
454
460class DIGIKAM_GUI_EXPORT DAlbum : public Album
461{
462public:
463
464 enum Range
465 {
466 Month = 0,
467 Year
468 };
469
470public:
471
472 explicit DAlbum(const QDate& date, bool root = false, Range range = Month);
473 ~DAlbum() override = default;
474
475 QDate date() const;
476 Range range() const;
477 CoreDbUrl databaseUrl() const override;
478
479private:
480
481 static int m_uniqueID;
482 QDate m_date;
483 Range m_range = Month;
484
485 friend class AlbumManager;
486};
487
493class DIGIKAM_GUI_EXPORT SAlbum : public Album
494{
495public:
496
497 SAlbum(const QString& title, int id, bool root = false);
498 ~SAlbum() override = default;
499
500 CoreDbUrl databaseUrl() const override;
501 QString query() const;
502 DatabaseSearch::Type searchType() const;
503 bool isNormalSearch() const;
504 bool isAdvancedSearch() const;
505 bool isKeywordSearch() const;
506 bool isTimelineSearch() const;
507 bool isHaarSearch() const;
508 bool isMapSearch() const;
509 bool isDuplicatesSearch() const;
510
516 bool isTemporarySearch() const;
517
518 QString displayTitle() const;
519
530 static QString getTemporaryTitle(DatabaseSearch::Type type,
531 DatabaseSearch::HaarSearchType haarType = DatabaseSearch::HaarImageSearch);
532
540 static QString getTemporaryHaarTitle(DatabaseSearch::HaarSearchType haarType);
541
542private:
543
544 void setSearch(DatabaseSearch::Type type, const QString& query);
545
546private:
547
548 QString m_query;
549 DatabaseSearch::Type m_searchType = DatabaseSearch::UndefinedType;
550
551 friend class AlbumManager;
552};
553
572class DIGIKAM_GUI_EXPORT AlbumIterator
573{
574public:
575
576 explicit AlbumIterator(Album* const album);
577 ~AlbumIterator() = default;
578
579 AlbumIterator& operator++();
580 Album* operator*();
581 Album* current() const;
582
583private:
584
585 // Disable
586 AlbumIterator() = delete;
587
588 Q_DISABLE_COPY(AlbumIterator)
589
590private:
591
592 Album* m_current = nullptr;
593 Album* m_root = nullptr;
594};
595
596} // namespace Digikam
597
598Q_DECLARE_METATYPE(Digikam::Album*)
599Q_DECLARE_METATYPE(QList<Digikam::TAlbum*>)
Definition album.h:573
Definition albummanager.h:63
Abstract base class for all album types.
Definition album.h:57
Type
Definition album.h:61
@ DATE
A date album type.
Definition album.h:64
@ SEARCH
A search album type.
Definition album.h:65
@ TAG
A tag album type.
Definition album.h:63
virtual CoreDbUrl databaseUrl() const =0
Definition coredburl.h:33
Definition album.h:461
~DAlbum() override=default
Range
Definition album.h:465
Definition album.h:357
~PAlbum() override=default
Definition album.h:494
~SAlbum() override=default
Definition album.h:421
~TAlbum() override=default
qulonglong value
Definition itemviewutilities.cpp:585
@ Album
Definition coredbfields.h:48
HaarSearchType
Definition coredbconstants.h:46
Type
Definition coredbconstants.h:34
Definition datefolderview.cpp:34
QList< Album * > AlbumList
Definition album.h:41
PointTransformAffine operator*(const PointTransformAffine &lhs, const PointTransformAffine &rhs)
Definition pointtransformaffine.cpp:76
bool operator==(const SearchTextSettings &a, const SearchTextSettings &b)
Definition searchtextbar.cpp:40
Type
Definition gpsitemcontainer.h:36