digiKam
Loading...
Searching...
No Matches
itemfiltermodel.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 : Qt item model for database entries
8 *
9 * SPDX-FileCopyrightText: 2009-2011 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
10 * SPDX-FileCopyrightText: 2011 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// Local includes
22
24#include "textfilter.h"
25#include "itemfiltersettings.h"
26#include "itemmodel.h"
27#include "itemsortsettings.h"
28#include "digikam_export.h"
29
30namespace Digikam
31{
32
33class ImageChangeset;
34class ItemFilterModel;
35class ImageTagChangeset;
36class FaceTagsIface;
37
38class DIGIKAM_DATABASE_EXPORT ItemFilterModelPrepareHook
39{
40public:
41
42 virtual ~ItemFilterModelPrepareHook() = default;
43 virtual void prepare(const QVector<ItemInfo>& infos) = 0;
44
45private:
46
47 Q_DISABLE_COPY(ItemFilterModelPrepareHook)
48};
49
50// -----------------------------------------------------------------------------------------------
51
52class DIGIKAM_DATABASE_EXPORT ImageSortFilterModel : public DCategorizedSortFilterProxyModel
53{
54 Q_OBJECT
55
56public:
57
58 explicit ImageSortFilterModel(QObject* const parent = nullptr);
59
60 void setSourceItemModel(ItemModel* const model);
61 ItemModel* sourceItemModel() const;
62
63 void setSourceFilterModel(ImageSortFilterModel* const model);
64 ImageSortFilterModel* sourceFilterModel() const;
65
66 QModelIndex mapToSourceItemModel(const QModelIndex& index) const;
67 QModelIndex mapFromSourceItemModel(const QModelIndex& imagemodel_index) const;
68 QModelIndex mapFromDirectSourceToSourceItemModel(const QModelIndex& sourceModel_index) const;
69
74 QList<QModelIndex> mapListToSource(const QList<QModelIndex>& indexes) const;
75 QList<QModelIndex> mapListFromSource(const QList<QModelIndex>& sourceIndexes) const;
76
77 ItemInfo imageInfo(const QModelIndex& index) const;
78 qlonglong imageId(const QModelIndex& index) const;
79 QList<ItemInfo> imageInfos(const QList<QModelIndex>& indexes) const;
80 QList<qlonglong> imageIds(const QList<QModelIndex>& indexes) const;
81
82 QModelIndex indexForPath(const QString& filePath) const;
83 QModelIndex indexForItemInfo(const ItemInfo& info) const;
84 QModelIndex indexForImageId(qlonglong id) const;
85
90 QList<ItemInfo> imageInfosSorted() const;
91
95 virtual ItemFilterModel* imageFilterModel() const;
96
97protected:
98
102 virtual void setDirectSourceItemModel(ItemModel* const model);
103
105 void setSourceModel(QAbstractItemModel* const model) override;
106
107protected:
108
109 ImageSortFilterModel* m_chainedModel = nullptr;
110};
111
112// -----------------------------------------------------------------------------------------------
113
114class DIGIKAM_DATABASE_EXPORT ItemFilterModel : public ImageSortFilterModel
115{
116 Q_OBJECT
117
118public:
119
121 {
123 CategorizationModeRole = ItemModel::FilterModelRoles + 1,
124
126 SortOrderRole = ItemModel::FilterModelRoles + 2,
127
129 //CategoryCountRole = ItemModel::FilterModelRoles + 3,
130
132 CategoryAlbumIdRole = ItemModel::FilterModelRoles + 3,
133
135 CategoryFormatRole = ItemModel::FilterModelRoles + 4,
136
138 CategoryDateRole = ItemModel::FilterModelRoles + 5,
139
141 CategoryFaceRole = ItemModel::FilterModelRoles + 6,
142
144 GroupIsOpenRole = ItemModel::FilterModelRoles + 7,
145 ItemFilterModelPointerRole = ItemModel::FilterModelRoles + 50
146 };
147
148public:
149
150 explicit ItemFilterModel(QObject* const parent = nullptr);
151 ~ItemFilterModel() override;
152
156 void addPrepareHook(ItemFilterModelPrepareHook* const hook);
157 void removePrepareHook(ItemFilterModelPrepareHook* const hook);
158
163 DatabaseFields::Set suggestedWatchFlags() const;
164
165 ItemFilterSettings imageFilterSettings() const;
166 VersionItemFilterSettings versionItemFilterSettings() const;
167 GroupItemFilterSettings groupItemFilterSettings() const;
168 ItemSortSettings imageSortSettings() const;
169
173 bool isGroupOpen(qlonglong group) const;
174 bool isAllGroupsOpen() const;
175
179 void setSendItemInfoSignals(bool sendSignals);
180
181 QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override;
182 ItemFilterModel* imageFilterModel() const override;
183
184public Q_SLOTS:
185
189 void setVersionItemFilterSettings(const VersionItemFilterSettings& settings);
190
194 void setGroupItemFilterSettings(const GroupItemFilterSettings& settings);
195
204 void setDayFilter(const QList<QDateTime>& days);
205 void setTagFilter(const QList<int>& includedTags, const QList<int>& excludedTags,
206 ItemFilterSettings::MatchingCondition matchingCond, bool showUnTagged,
207 const QList<int>& clTagIds, const QList<int>& plTagIds);
208 void setRatingFilter(int rating, ItemFilterSettings::RatingCondition ratingCond, bool isUnratedExcluded);
209 void setMimeTypeFilter(int mimeTypeFilter);
210 void setGeolocationFilter(const ItemFilterSettings::GeolocationCondition& condition);
211 void setTextFilter(const SearchTextFilterSettings& settings);
212
213 void setCategorizationMode(ItemSortSettings::CategorizationMode mode);
214 void setCategorizationSortOrder(ItemSortSettings::SortOrder order);
215 void setSortRole(ItemSortSettings::SortRole role);
216 void setSortOrder(ItemSortSettings::SortOrder order);
217 void setStringTypeNatural(bool natural);
218 void setUrlWhitelist(const QList<QUrl>& urlList, const QString& id);
219 void setIdWhitelist(const QList<qlonglong>& idList, const QString& id);
220
221 void setVersionManagerSettings(const VersionManagerSettings& settings);
222 void setExceptionList(const QList<qlonglong>& idlist, const QString& id);
223
224 void setGroupOpen(qlonglong group, bool open);
225 void toggleGroupOpen(qlonglong group);
226 void setAllGroupsOpen(bool open);
227
231 virtual void setItemFilterSettings(const ItemFilterSettings& settings);
232
236 virtual void setItemSortSettings(const ItemSortSettings& settings);
237
238Q_SIGNALS:
239
243 void filterMatches(bool matches);
244
250 void filterMatchesForText(bool matchesByText);
251
257
261 void imageInfosAdded(const QList<ItemInfo>& infos);
262 void imageInfosAboutToBeRemoved(const QList<ItemInfo>& infos);
263
264public:
265
267 class ItemFilterModelPrivate;
268
269protected:
270
271 ItemFilterModelPrivate* const d_ptr = nullptr;
272
273protected:
274
275 ItemFilterModel(ItemFilterModelPrivate& dd, QObject* const parent);
276
277 void setDirectSourceItemModel(ItemModel* const model) override;
278
279 bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override;
280
281 int compareCategories(const QModelIndex& left, const QModelIndex& right) const override;
282 bool subSortLessThan(const QModelIndex& left, const QModelIndex& right) const override;
283/*
284 virtual int categoryCount(const ItemInfo& info) const;
285*/
291 virtual int compareInfosCategories(const ItemInfo& left, const ItemInfo& right) const;
292
298 virtual int compareInfosCategories(const ItemInfo& left, const ItemInfo& right,
299 const FaceTagsIface& leftFace,
300 const FaceTagsIface& rightFace) const;
301
305 virtual bool infosLessThan(const ItemInfo& left, const ItemInfo& right) const;
306
310 virtual QString categoryIdentifier(const ItemInfo& info, const FaceTagsIface& face) const;
311
312protected Q_SLOTS:
313
314 void slotModelReset();
315 void slotUpdateFilter();
316
317 void slotImageTagChange(const ImageTagChangeset& changeset);
318 void slotImageChange(const ImageChangeset& changeset);
319
320 void slotRowsInserted(const QModelIndex& parent, int start, int end);
321 void slotRowsAboutToBeRemoved(const QModelIndex& parent, int start, int end);
322
323private:
324
325 Q_DECLARE_PRIVATE(ItemFilterModel)
326};
327
328// -----------------------------------------------------------------------------------------------------
329
330class DIGIKAM_DATABASE_EXPORT NoDuplicatesItemFilterModel : public ImageSortFilterModel
331{
332 Q_OBJECT
333
334public:
335
336 explicit NoDuplicatesItemFilterModel(QObject* const parent = nullptr);
337
338protected:
339
340 bool filterAcceptsRow(int source_row, const QModelIndex& source_parent) const override;
341};
342
343} // namespace Digikam
344
345Q_DECLARE_METATYPE(Digikam::ItemFilterModel*)
Definition dcategorizedsortfilterproxymodel.h:43
Definition coredbfields.h:376
Definition facetagsiface.h:34
Definition itemfiltersettings.h:300
Definition coredbchangesets.h:38
Definition itemfiltermodel.h:53
Definition coredbchangesets.h:70
Definition itemfiltermodel.h:39
virtual void prepare(const QVector< ItemInfo > &infos)=0
virtual ~ItemFilterModelPrepareHook()=default
Definition itemfiltermodel.h:115
void filterMatches(bool matches)
void filterSettingsChanged(const ItemFilterSettings &settings)
ItemFilterModelRoles
Definition itemfiltermodel.h:121
void filterMatchesForText(bool matchesByText)
void imageInfosAboutToBeRemoved(const QList< ItemInfo > &infos)
void imageInfosAdded(const QList< ItemInfo > &infos)
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
MatchingCondition
Possible logical matching condition used to sort tags id.
Definition itemfiltersettings.h:90
Definition iteminfo.h:68
Definition itemmodel.h:44
Definition itemsortsettings.h:39
SortRole
Definition itemsortsettings.h:60
CategorizationMode
Definition itemsortsettings.h:50
SortOrder
Definition itemsortsettings.h:43
Definition itemfiltermodel.h:331
Definition itemfiltersettings.h:51
Definition itemfiltersettings.h:256
Definition versionmanagersettings.h:33
Definition datefolderview.cpp:34