digiKam
Loading...
Searching...
No Matches
albumpointer.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 : Albums manager interface.
8 *
9 * SPDX-FileCopyrightText: 2006-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
10 * SPDX-FileCopyrightText: 2006-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
11 *
12 * SPDX-License-Identifier: GPL-2.0-or-later
13 *
14 * ============================================================ */
15
16#pragma once
17
18// Qt includes
19
20#include <QList>
21
22// Local includes
23
24#include "album.h"
25#include "albummanager.h"
26
27namespace Digikam
28{
29
35template <class T = Album>
36
38{
39public:
40
41 AlbumPointer() = default;
42
43 // cppcheck-suppress noExplicitConstructor
44 AlbumPointer(T* const a) // krazy:exclude=explicit
45 : album(a)
46 {
47 AlbumManager::instance()->addGuardedPointer(album, &album);
48 }
49
50 // cppcheck-suppress noExplicitConstructor
51 AlbumPointer(const AlbumPointer<T>& p) // krazy:exclude=explicit
52 : album(p.album)
53 {
54 AlbumManager::instance()->addGuardedPointer(album, &album);
55 }
56
58 {
59 AlbumManager::instance()->removeGuardedPointer(album, &album);
60 }
61
63 {
64 Album* const oldAlbum = album;
65 album = a;
66 AlbumManager::instance()->changeGuardedPointer(oldAlbum, album, &album);
67
68 return *this;
69 }
70
72 {
73 Album* const oldAlbum = album;
74 album = p.album;
75 AlbumManager::instance()->changeGuardedPointer(oldAlbum, album, &album);
76
77 return *this;
78 }
79
80 T* operator->() const
81 {
82 return static_cast<T*>(const_cast<Album*>(album));
83 }
84
85 T& operator*() const
86 {
87 return *static_cast<T*>(const_cast<Album*>(album));
88 }
89
90 operator T* () const
91 {
92 return static_cast<T*>(const_cast<Album*>(album));
93 }
94
95 bool operator!() const
96 {
97 return !album;
98 }
99
100private:
101
102 Album* album = nullptr;
103
104 friend class AlbumManager;
105};
106
107// ------------------------------------------------------------------------------------
108
109template <class T = Album>
110
111class AlbumPointerList : public QList<AlbumPointer<T> >
112{
113public:
114
115 AlbumPointerList() = default;
116 ~AlbumPointerList() = default;
117
119 : QList<AlbumPointer<T> >(list)
120 {
121 }
122
123 explicit AlbumPointerList(const QList<T*>& list)
124 {
125 operator=(list);
126 }
127
128 // cppcheck-suppress operatorEqRetRefThis
130 {
131 return QList<AlbumPointer<T> >::operator=(list);
132 }
133
134 AlbumPointerList<T>& operator=(const QList<T*>& list)
135 {
136 for (T* const t : std::as_const(list))
137 {
138 this->append(AlbumPointer<T>(t));
139 }
140
141 return *this;
142 }
143};
144
145} // namespace Digikam
146
147Q_DECLARE_METATYPE(Digikam::AlbumPointer<>)
Definition albummanager.h:63
static AlbumManager * instance()
Definition albummanager.cpp:30
Definition albumpointer.h:112
AlbumPointerList< T > & operator=(const AlbumPointerList< T > &list)
Definition albumpointer.h:129
AlbumPointerList< T > & operator=(const QList< T * > &list)
Definition albumpointer.h:134
AlbumPointerList(const QList< T * > &list)
Definition albumpointer.h:123
AlbumPointerList(const AlbumPointerList< T > &list)
Definition albumpointer.h:118
Definition albumpointer.h:38
AlbumPointer< T > & operator=(T *const a)
Definition albumpointer.h:62
AlbumPointer< T > & operator=(const AlbumPointer< T > &p)
Definition albumpointer.h:71
T & operator*() const
Definition albumpointer.h:85
~AlbumPointer()
Definition albumpointer.h:57
AlbumPointer(T *const a)
Definition albumpointer.h:44
AlbumPointer(const AlbumPointer< T > &p)
Definition albumpointer.h:51
T * operator->() const
Definition albumpointer.h:80
bool operator!() const
Definition albumpointer.h:95
Abstract base class for all album types.
Definition album.h:57
#define T
Definition datefolderview.cpp:34