]>
cloud.milkyroute.net Git - dolphin.git/blob - src/kitemviews/private/kfileitemmodelfilter.cpp
2 * SPDX-FileCopyrightText: 2011 Janardhan Reddy <annapareddyjanardhanreddy@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0-or-later
7 #include "kfileitemmodelfilter.h"
9 #include <QRegularExpression>
15 KFileItemModelFilter::KFileItemModelFilter()
18 , m_lowerCasePattern()
23 KFileItemModelFilter::~KFileItemModelFilter()
29 void KFileItemModelFilter::setPattern(const QString
&filter
)
32 m_lowerCasePattern
= filter
.toLower();
34 if (filter
.contains(QLatin1Char('*')) || filter
.contains(QLatin1Char('?')) || filter
.contains(QLatin1Char('['))) {
36 m_regExp
= new QRegularExpression();
37 m_regExp
->setPatternOptions(QRegularExpression::CaseInsensitiveOption
);
39 m_regExp
->setPattern(QRegularExpression::wildcardToRegularExpression(filter
));
40 m_useRegExp
= m_regExp
->isValid();
46 QString
KFileItemModelFilter::pattern() const
51 void KFileItemModelFilter::setMimeTypes(const QStringList
&types
)
56 QStringList
KFileItemModelFilter::mimeTypes() const
61 void KFileItemModelFilter::setExcludeMimeTypes(const QStringList
&types
)
63 m_excludeMimeTypes
= types
;
66 QStringList
KFileItemModelFilter::excludeMimeTypes() const
68 return m_excludeMimeTypes
;
71 bool KFileItemModelFilter::hasSetFilters() const
73 return (!m_pattern
.isEmpty() || !m_mimeTypes
.isEmpty() || !m_excludeMimeTypes
.isEmpty());
76 bool KFileItemModelFilter::matches(const KFileItem
&item
) const
78 const bool hasPatternFilter
= !m_pattern
.isEmpty();
79 const bool hasMimeTypesFilter
= !m_mimeTypes
.isEmpty() || !m_excludeMimeTypes
.isEmpty();
81 // If no filter is set, return true.
82 if (!hasPatternFilter
&& !hasMimeTypesFilter
) {
86 // If both filters are set, return true when both filters are matched
87 if (hasPatternFilter
&& hasMimeTypesFilter
) {
88 return (matchesPattern(item
) && matchesType(item
));
91 // If only one filter is set, return true when that filter is matched
92 if (hasPatternFilter
) {
93 return matchesPattern(item
);
96 return matchesType(item
);
99 bool KFileItemModelFilter::matchesPattern(const KFileItem
&item
) const
102 return m_regExp
->match(item
.text()).hasMatch();
104 return item
.text().toLower().contains(m_lowerCasePattern
);
108 bool KFileItemModelFilter::matchesType(const KFileItem
&item
) const
110 bool excluded
= std::any_of(m_excludeMimeTypes
.constBegin(), m_excludeMimeTypes
.constEnd(), [item
](const QString
&excludeMimetype
) {
111 return item
.mimetype() == excludeMimetype
;
117 bool included
= std::any_of(m_mimeTypes
.constBegin(), m_mimeTypes
.constEnd(), [item
](const QString
&mimeType
) {
118 return item
.mimetype() == mimeType
;
124 return m_mimeTypes
.isEmpty();