1 /*
2  * SPDX-FileCopyrightText: 2011 Janardhan Reddy <annapareddyjanardhanreddy@gmail.com>
3  *
4  * SPDX-License-Identifier: GPL-2.0-or-later
5  */
6 
7 #ifndef KFILEITEMMODELFILTER_H
8 #define KFILEITEMMODELFILTER_H
9 
10 #include "dolphin_export.h"
11 
12 #include <QStringList>
13 
14 class KFileItem;
15 class QRegularExpression;
16 
17 /**
18  * @brief Allows to check whether an item of the KFileItemModel
19  *        matches with a set filter-string.
20  *
21  * Currently the filter is only checked for the KFileItem::text()
22  * property of the KFileItem, but this might get extended in
23  * future.
24  */
25 class DOLPHIN_EXPORT KFileItemModelFilter
26 {
27 
28 public:
29     KFileItemModelFilter();
30     virtual ~KFileItemModelFilter();
31 
32     /**
33      * Sets the pattern that is used for a comparison with the item
34      * in KFileItemModelFilter::matches(). Per default the pattern
35      * defines a sub-string. As soon as the pattern contains at least
36      * a '*', '?' or '[' the pattern represents a regular expression.
37      */
38     void setPattern(const QString& pattern);
39     QString pattern() const;
40 
41     /**
42      * Set the list of mimetypes that are used for comparison with the
43      * item in KFileItemModelFilter::matchesMimeType.
44      */
45     void setMimeTypes(const QStringList& types);
46     QStringList mimeTypes() const;
47 
48     /**
49      * @return True if either the pattern or mimetype filters has been set.
50      */
51     bool hasSetFilters() const;
52 
53     /**
54      * @return True if the item matches with the pattern defined by
55      *         @ref setPattern() or @ref setMimeTypes
56      */
57     bool matches(const KFileItem& item) const;
58 
59 private:
60     /**
61      * @return True if item matches pattern set by @ref setPattern.
62      */
63     bool matchesPattern(const KFileItem& item) const;
64 
65     /**
66      * @return True if item matches mimetypes set by @ref setMimeTypes.
67      */
68     bool matchesType(const KFileItem& item) const;
69 
70     bool m_useRegExp;           // If true, m_regExp is used for filtering,
71                                 // otherwise m_lowerCaseFilter is used.
72     QRegularExpression *m_regExp;
73     QString m_lowerCasePattern; // Lowercase version of m_filter for
74                                 // faster comparison in matches().
75     QString m_pattern;          // Property set by setPattern().
76     QStringList m_mimeTypes;    // Property set by setMimeTypes()
77 };
78 #endif
79 
80 
81