digiKam
Loading...
Searching...
No Matches
itemsortsettings.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-05-31
7 * Description : Sort settings for use with ItemFilterModel
8 *
9 * SPDX-FileCopyrightText: 2009 by Marcel Wiesweg <marcel dot wiesweg at gmx dot de>
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 <QVariant>
21
22// Local includes
23
24#include "digikam_export.h"
25#include "itemsortcollator.h"
26
27namespace Digikam
28{
29
30class ItemInfo;
31class FaceTagsIface;
32
33namespace DatabaseFields
34{
35 class Set;
36}
37
38class DIGIKAM_DATABASE_EXPORT ItemSortSettings
39{
40public:
41
43 {
44 AscendingOrder = Qt::AscendingOrder,
45 DescendingOrder = Qt::DescendingOrder,
46 DefaultOrder
47 };
48
58
60 {
61 // Note: For legacy reasons, the order of the first five entries must remain unchanged
73 SortByManualOrderAndDate
74 };
75
76public:
77
78 ItemSortSettings() = default;
79
80 bool operator==(const ItemSortSettings& other) const;
81
90 int compareCategories(const ItemInfo& left,
91 const ItemInfo& right,
92 const FaceTagsIface& leftFace,
93 const FaceTagsIface& rightFace) const;
94
99 bool lessThan(const ItemInfo& left, const ItemInfo& right) const;
100
107 int compare(const ItemInfo& left, const ItemInfo& right) const;
108
114 bool lessThan(const QVariant& left, const QVariant& right) const;
115
116 void setSortRole(SortRole role);
117 void setSortOrder(SortOrder order);
118 void setStringTypeNatural(bool natural);
119
120public:
121
123
124 void setCategorizationMode(CategorizationMode mode);
125 void setCategorizationSortOrder(SortOrder order);
126
127
128 bool isCategorized() const
129 {
130 return (categorizationMode >= CategoryByAlbum);
131 }
132
133public:
134
136
137 int compare(const ItemInfo& left, const ItemInfo& right, SortRole sortRole) const;
138
139 static Qt::SortOrder defaultSortOrderForCategorizationMode(CategorizationMode mode);
140 static Qt::SortOrder defaultSortOrderForSortRole(SortRole role);
141
142public:
143
145
149 DatabaseFields::Set watchFlags() const;
150
151public:
152
154
158 template <typename T>
159 static inline bool lessThanByOrder(const T& a, const T& b, Qt::SortOrder sortOrder)
160 {
161 if (sortOrder == Qt::AscendingOrder)
162 {
163 return (a < b);
164 }
165
166 return (b < a);
167 }
168
172 template <typename T>
173 static inline int compareValue(const T& a, const T& b)
174 {
175 if (a == b)
176 {
177 return 0;
178 }
179
180 if (a > b)
181 {
182 return 1;
183 }
184
185 return (-1);
186 }
187
192 static inline int compareByOrder(int compareResult, Qt::SortOrder sortOrder)
193 {
194 if (sortOrder == Qt::AscendingOrder)
195 {
196 return compareResult;
197 }
198
199 return (- compareResult);
200 }
201
202 template <typename T>
203 static inline int compareByOrder(const T& a, const T& b, Qt::SortOrder sortOrder)
204 {
205 return compareByOrder(compareValue(a, b), sortOrder);
206 }
207
211 static inline int naturalCompare(const QString& a,
212 const QString& b,
213 Qt::SortOrder sortOrder,
214 Qt::CaseSensitivity caseSensitive = Qt::CaseSensitive,
215 bool natural = true)
216 {
217 ItemSortCollator* const sorter = ItemSortCollator::instance();
218
219 return compareByOrder(sorter->itemCompare(a, b, caseSensitive, natural), sortOrder);
220 }
221
222public:
223
224 CategorizationMode categorizationMode = NoCategories;
225 SortOrder categorizationSortOrder = DefaultOrder;
226
228 Qt::SortOrder currentCategorizationSortOrder = Qt::AscendingOrder;
229 Qt::CaseSensitivity categorizationCaseSensitivity = Qt::CaseSensitive;
230
231 SortRole sortRole = SortByFileName;
232 SortOrder sortOrder = DefaultOrder;
233 bool strTypeNatural = true;
234
235 Qt::SortOrder currentSortOrder = Qt::AscendingOrder;
236 Qt::CaseSensitivity sortCaseSensitivity = Qt::CaseSensitive;
237};
238
239} // namespace Digikam
Definition coredbfields.h:376
Definition facetagsiface.h:34
Definition iteminfo.h:68
Definition itemsortcollator.h:30
int itemCompare(const QString &a, const QString &b, Qt::CaseSensitivity caseSensitive, bool natural) const
Definition itemsortcollator.cpp:76
Definition itemsortsettings.h:39
static int naturalCompare(const QString &a, const QString &b, Qt::SortOrder sortOrder, Qt::CaseSensitivity caseSensitive=Qt::CaseSensitive, bool natural=true)
Definition itemsortsettings.h:211
SortRole
Definition itemsortsettings.h:60
@ SortByModificationDate
Definition itemsortsettings.h:65
@ SortBySimilarity
Definition itemsortsettings.h:71
@ SortByAspectRatio
width / height * 100000
Definition itemsortsettings.h:69
@ SortByFileName
Definition itemsortsettings.h:62
@ SortByImageSize
pixel number
Definition itemsortsettings.h:68
@ SortByFaces
count of unconfirmed faces
Definition itemsortsettings.h:70
@ SortByCreationDate
Definition itemsortsettings.h:64
@ SortByFilePath
Definition itemsortsettings.h:63
@ SortByManualOrderAndName
Definition itemsortsettings.h:72
@ SortByFileSize
Definition itemsortsettings.h:66
@ SortByRating
Definition itemsortsettings.h:67
static bool lessThanByOrder(const T &a, const T &b, Qt::SortOrder sortOrder)
— Utilities —
Definition itemsortsettings.h:159
bool isCategorized() const
Definition itemsortsettings.h:128
static int compareValue(const T &a, const T &b)
Definition itemsortsettings.h:173
CategorizationMode
Definition itemsortsettings.h:50
@ CategoryByMonth
Definition itemsortsettings.h:55
@ OneCategory
all items in one global category
Definition itemsortsettings.h:52
@ NoCategories
categorization switched off
Definition itemsortsettings.h:51
@ CategoryByFormat
Definition itemsortsettings.h:54
@ CategoryByAlbum
Definition itemsortsettings.h:53
static int compareByOrder(const T &a, const T &b, Qt::SortOrder sortOrder)
Definition itemsortsettings.h:203
static int compareByOrder(int compareResult, Qt::SortOrder sortOrder)
Definition itemsortsettings.h:192
SortOrder
Definition itemsortsettings.h:43
#define T
Definition datefolderview.cpp:34
bool operator==(const SearchTextSettings &a, const SearchTextSettings &b)
Definition searchtextbar.cpp:40