digiKam
Loading...
Searching...
No Matches
itemfiltersettings.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 : 2009-03-05
7 * Description : Filter values for use with ItemFilterModel
8 *
9 * SPDX-FileCopyrightText: 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2011-2024 by Gilles Caulier <caulier dot gilles at gmail dot com>
11 * SPDX-FileCopyrightText: 2010 by Andi Clemens <andi dot clemens at gmail dot com>
12 * SPDX-FileCopyrightText: 2011 by Michael G. Hansen <mike at mghansen dot de>
13 * SPDX-FileCopyrightText: 2014 by Mohamed_Anwer <m_dot_anwer at gmx dot com>
14 *
15 * SPDX-License-Identifier: GPL-2.0-or-later
16 *
17 * ============================================================ */
18
19#pragma once
20
21// Qt includes
22
23#include <QHash>
24#include <QList>
25#include <QMap>
26#include <QString>
27#include <QSet>
28#include <QUrl>
29#include <QDateTime>
30
31// Local includes
32
33#include "searchtextbar.h"
34#include "mimefilter.h"
35#include "digikam_export.h"
36
37namespace Digikam
38{
39
40class ItemInfo;
41class VersionManagerSettings;
42
43namespace DatabaseFields
44{
45 class Set;
46}
47
48// ---------------------------------------------------------------------------------------
49
50class DIGIKAM_DATABASE_EXPORT SearchTextFilterSettings : public SearchTextSettings
51{
52
53public:
54
56 {
57 None = 0x00,
58 ImageName = 0x01,
59 ImageTitle = 0x02,
60 ImageComment = 0x04,
61 TagName = 0x08,
62 AlbumName = 0x10,
63 ImageAspectRatio = 0x20,
64 ImagePixelSize = 0x40,
65 All = ImageName | ImageTitle | ImageComment | TagName | AlbumName | ImageAspectRatio | ImagePixelSize
66 };
67
68public:
69
71
73 {
74 caseSensitive = settings.caseSensitive;
75 text = settings.text;
76 textFields = None;
77 }
78
79 TextFilterFields textFields = None;
80};
81
82// ---------------------------------------------------------------------------------------
83
84class DIGIKAM_DATABASE_EXPORT ItemFilterSettings
85{
86public:
87
90 {
92 AndCondition
93 };
94
97 {
100 LessEqualCondition
101 };
102
105 {
106 GeolocationNoFilter = 0,
107 GeolocationNoCoordinates = 1 << 1,
108 GeolocationHasCoordinates = 1 << 2
109 };
110
111public:
112
114
119 bool matches(const ItemInfo& info, bool* const foundText = nullptr) const;
120
121public:
122
124
125 void setTagFilter(const QList<int>& includedTags,
126 const QList<int>& excludedTags,
127 MatchingCondition matchingCond,
128 bool showUnTagged,
129 const QList<int>& clTagIds,
130 const QList<int>& plTagIds);
131
132public:
133
135 void setRatingFilter(int rating, RatingCondition ratingCond, bool isUnratedExcluded);
136
137public:
138
140 void setDayFilter(const QList<QDateTime>& days);
141
142public:
143
145 void setTextFilter(const SearchTextFilterSettings& settings);
146 void setTagNames(const QHash<int, QString>& tagNameHash);
147 void setAlbumNames(const QHash<int, QString>& albumNameHash);
148
149public:
150
152 void setMimeTypeFilter(int mimeTypeFilter);
153
154public:
155
157 void setGeolocationFilter(const GeolocationCondition& condition);
158
159public:
160
162 bool isFilteringByDay() const;
163
165 bool isFilteringByTypeMime() const;
166
168 bool isFilteringByGeolocation() const;
169
171 bool isFilteringByRating() const;
172
174 bool isFilteringByPickLabels() const;
175
177 bool isFilteringByColorLabels() const;
178
180 bool isFilteringByTags() const;
181
183 bool isFilteringByText() const;
184
186 bool isFiltering() const;
187
188public:
189
191 void setUrlWhitelist(const QList<QUrl>& urlList, const QString& id);
192
193public:
194
196 void setIdWhitelist(const QList<qlonglong>& idList, const QString& id);
197
198public:
199
201
206 DatabaseFields::Set watchFlags() const;
207
208private:
209
213 bool isFilteringInternally() const;
214
215private:
216
218 bool m_untaggedFilter = false;
219 QList<int> m_includeTagFilter;
220 QList<int> m_excludeTagFilter;
221 MatchingCondition m_matchingCond = OrCondition;
222 QList<int> m_colorLabelTagFilter;
223 QList<int> m_pickLabelTagFilter;
224
226 int m_ratingFilter = 0;
227 RatingCondition m_ratingCond = GreaterEqualCondition;
228 bool m_isUnratedExcluded = false;
229
231 QHash<QDateTime, bool> m_dayFilter;
232
234 SearchTextFilterSettings m_textFilterSettings;
235
237 QHash<int, QString> m_tagNameHash;
238 QHash<int, QString> m_albumNameHash;
239
241 MimeFilter::TypeMimeFilter m_mimeTypeFilter = MimeFilter::AllFiles;
242
244 GeolocationCondition m_geolocationCondition = GeolocationNoFilter;
245
247 QHash<QString, QList<QUrl> > m_urlWhitelists;
248
250 QHash<QString, QList<qlonglong> > m_idWhitelists;
251};
252
253// ---------------------------------------------------------------------------------------
254
255class DIGIKAM_DATABASE_EXPORT VersionItemFilterSettings
256{
257public:
258
260 explicit VersionItemFilterSettings(const VersionManagerSettings& settings);
261
262 bool operator==(const VersionItemFilterSettings& other) const;
263
267 bool matches(const ItemInfo& info) const;
268
269 bool isHiddenBySettings(const ItemInfo& info) const;
270 bool isExemptedBySettings(const ItemInfo& info) const;
271
273
274 void setVersionManagerSettings(const VersionManagerSettings& settings);
275
279 void setExceptionList(const QList<qlonglong>& idlist, const QString& id);
280
282 bool isFiltering() const;
283
285 bool isFilteringByTags() const;
286
288
289protected:
290
292 int m_includeTagFilter = 0;
293 int m_exceptionTagFilter = 0;
294 QHash<QString, QList<qlonglong> > m_exceptionLists;
295};
296
297// ---------------------------------------------------------------------------------------
298
299class DIGIKAM_DATABASE_EXPORT GroupItemFilterSettings
300{
301public:
302
304
305 bool operator==(const GroupItemFilterSettings& other) const;
306
310 bool matches(const ItemInfo& info) const;
311
315 void setOpen(qlonglong group, bool open);
316 bool isOpen(qlonglong group) const;
317
321 void setAllOpen(bool open);
322 bool isAllOpen() const;
323
325 bool isFiltering() const;
326
327 DatabaseFields::Set watchFlags() const;
328
329protected:
330
331 bool m_allOpen = false;
332 QSet<qlonglong> m_openGroups;
333};
334
335} // namespace Digikam
336
Definition coredbfields.h:376
Definition itemfiltersettings.h:300
QSet< qlonglong > m_openGroups
Definition itemfiltersettings.h:332
Definition itemfiltersettings.h:85
GeolocationCondition
Possible logical matching condition used to sort geolocation.
Definition itemfiltersettings.h:105
RatingCondition
Possible conditions used to filter rating: >=, =, <=.
Definition itemfiltersettings.h:97
@ GreaterEqualCondition
Definition itemfiltersettings.h:98
@ EqualCondition
Definition itemfiltersettings.h:99
MatchingCondition
Possible logical matching condition used to sort tags id.
Definition itemfiltersettings.h:90
@ OrCondition
Definition itemfiltersettings.h:91
Definition iteminfo.h:68
TypeMimeFilter
Definition mimefilter.h:31
Definition itemfiltersettings.h:51
SearchTextFilterSettings(const SearchTextSettings &settings)
Definition itemfiltersettings.h:72
TextFilterFields
Definition itemfiltersettings.h:56
Definition searchtextbar.h:33
Qt::CaseSensitivity caseSensitive
Definition searchtextbar.h:39
QString text
Definition searchtextbar.h:41
Definition itemfiltersettings.h:256
QList< int > m_excludeTagFilter
DatabaseFields::Set watchFlags() const: Would return 0.
Definition itemfiltersettings.h:291
QHash< QString, QList< qlonglong > > m_exceptionLists
Definition itemfiltersettings.h:294
Definition versionmanagersettings.h:33
Definition datefolderview.cpp:34
bool operator==(const SearchTextSettings &a, const SearchTextSettings &b)
Definition searchtextbar.cpp:40