digiKam
Loading...
Searching...
No Matches
disjointmetadata.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 : 2015-08-17
7 * Description : Helper class for Image Description Editor Tab
8 *
9 * SPDX-FileCopyrightText: 2015 by Veaceslav Munteanu <veaceslav dot munteanu90 at gmail dot com>
10 *
11 * SPDX-License-Identifier: GPL-2.0-or-later
12 *
13 * ============================================================ */
14
15#pragma once
16
17// Qt includes
18
19#include <QString>
20#include <QMap>
21#include <QObject>
22#include <QDateTime>
23
24// Local includes
25
26#include "digikam_export.h"
28#include "metaenginesettings.h"
29
30namespace Digikam
31{
32
33class ItemInfo;
34class CaptionsMap;
35class Template;
36
37class DIGIKAM_GUI_EXPORT DisjointMetadata : public QObject
38{
39 Q_OBJECT
40
41public:
42
44 {
49
60
66 PartialWrite
67 };
68
69public:
70
72 ~DisjointMetadata() override;
73
74
75 DisjointMetadataDataFields dataFields() const;
76 void setDataFields(const DisjointMetadataDataFields& data);
77
78 void reset();
79
80 void load(const ItemInfo& info);
81
83
87 DisjointMetadataDataFields::Status dateTimeStatus() const;
88 DisjointMetadataDataFields::Status titlesStatus() const;
89 DisjointMetadataDataFields::Status commentsStatus() const;
90 DisjointMetadataDataFields::Status pickLabelStatus() const;
91 DisjointMetadataDataFields::Status colorLabelStatus() const;
92 DisjointMetadataDataFields::Status ratingStatus() const;
93 DisjointMetadataDataFields::Status templateStatus() const;
94
95 DisjointMetadataDataFields::Status tagStatus(int albumId) const;
96 DisjointMetadataDataFields::Status tagStatus(const QString& tagPath) const;
97
99
101
106 bool dateTimeChanged() const;
107 bool titlesChanged() const;
108 bool commentsChanged() const;
109 bool pickLabelChanged() const;
110 bool colorLabelChanged() const;
111 bool ratingChanged() const;
112 bool templateChanged() const;
113 bool tagsChanged() const;
114
116
118
123 void setDateTime(const QDateTime& dateTime,
124 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
125 void setTitles(const CaptionsMap& titles,
126 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
127 void setComments(const CaptionsMap& comments,
128 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
129 void setPickLabel(int pickId,
130 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
131 void setColorLabel(int colorId,
132 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
133 void setRating(int rating,
134 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
135 void setMetadataTemplate(const Template& t,
136 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
137 void setTag(int albumID,
138 DisjointMetadataDataFields::Status status = DisjointMetadataDataFields::MetadataAvailable);
139
144 void replaceColorLabel(int colorId);
145 void replacePickLabel(int pickId);
146 void replaceRating(int rating);
147
149
156 QDateTime dateTime() const;
157
163 CaptionsMap titles() const;
164
170 CaptionsMap comments() const;
171
178 int pickLabel() const;
179
186 int colorLabel() const;
187
194 int rating() const;
195
201 Template metadataTemplate() const;
202
208 void dateTimeInterval(QDateTime& lowest,
209 QDateTime& highest) const;
210
216 void pickLabelInterval(int& lowest,
217 int& highest) const;
218
224 void colorLabelInterval(int& lowest,
225 int& highest) const;
226
232 void ratingInterval(int& lowest,
233 int& highest) const;
234
239 QStringList keywords() const;
240
248 QMap<int, DisjointMetadataDataFields::Status> tags() const;
249
250 void resetChanged();
251
257 bool write(ItemInfo info, WriteMode writeMode = FullWrite);
258
264 bool willWriteMetadata(WriteMode writeMode,
265 const MetaEngineSettingsContainer& settings =
266 MetaEngineSettings::instance()->settings()) const;
267
273 int changedFlags();
274
275private Q_SLOTS:
276
277 void slotTagDeleted(int tagId);
278 void slotInvalidate();
279
280private:
281
282 void load(const QDateTime& dateTime,
283 const CaptionsMap& titles,
284 const CaptionsMap& comment,
285 int colorLabel, int pickLabel,
286 int rating, const Template& t);
287
288 void loadTags(const QList<int>& tagIds);
289 void notifyTagDeleted(int id);
290 void applyChangeNotifications();
291
292private:
293
294 // Disable
295 explicit DisjointMetadata(QObject*) = delete;
296
297 // Disable copy constructor and operator to prevent potential slicing with this class, reported by Clazy static analyzer.
298 // https://github.com/KDE/clazy/blob/master/docs/checks/README-copyable-polymorphic.md
299 // Use DisjointMetadataDataFields container setter and getter instead.
300 // TODO: remove legacy implementations for these methods later if no side effect.
302 DisjointMetadata& operator=(const DisjointMetadata& other);
303
304private:
305
306 class Private;
307 Private* d = nullptr;
308};
309
310} // namespace Digikam
Definition captionvalues.h:59
Definition disjointmetadatadatafields.h:39
Status
Definition disjointmetadatadatafields.h:49
Definition disjointmetadata.h:38
WriteMode
Definition disjointmetadata.h:44
@ FullWrite
Definition disjointmetadata.h:48
@ FullWriteIfChanged
Definition disjointmetadata.h:59
Definition iteminfo.h:68
Definition metaenginesettingscontainer.h:38
Definition template.h:36
Definition datefolderview.cpp:34