┌   ┐
54
└   ┘

summaryrefslogtreecommitdiff
path: root/src/kitemviews/private
diff options
context:
space:
mode:
authorDawit Alemayehu <[email protected]>2012-09-03 17:53:03 -0400
committerDawit Alemayehu <[email protected]>2012-09-05 11:25:37 -0400
commit1bac8668d7492a2e363f609efd30366a4cf798b7 (patch)
treee29d54716888cc08448839d0021068c4300f0af7 /src/kitemviews/private
parentbdd0b97662293bf5a9ecdedc46e0e4e48e6b237c (diff)
Implemented the new KParts' listing filter extension, KParts::ListingFilterExtension.
REVIEW: 106289
Diffstat (limited to 'src/kitemviews/private')
-rw-r--r--src/kitemviews/private/kfileitemmodelfilter.cpp51
-rw-r--r--src/kitemviews/private/kfileitemmodelfilter.h29
2 files changed, 77 insertions, 3 deletions
diff --git a/src/kitemviews/private/kfileitemmodelfilter.cpp b/src/kitemviews/private/kfileitemmodelfilter.cpp
index 816d35634..2e320f2d9 100644
--- a/src/kitemviews/private/kfileitemmodelfilter.cpp
+++ b/src/kitemviews/private/kfileitemmodelfilter.cpp
@@ -23,6 +23,7 @@
#include <KFileItem>
#include <QRegExp>
+
KFileItemModelFilter::KFileItemModelFilter() :
m_useRegExp(false),
m_regExp(0),
@@ -61,11 +62,61 @@ QString KFileItemModelFilter::pattern() const
return m_pattern;
}
+void KFileItemModelFilter::setMimeTypes(const QStringList& types)
+{
+ m_mimeTypes = types;
+}
+
+QStringList KFileItemModelFilter::mimeTypes() const
+{
+ return m_mimeTypes;
+}
+
+bool KFileItemModelFilter::hasSetFilters() const
+{
+ return (!m_pattern.isEmpty() || !m_mimeTypes.isEmpty());
+}
+
+
bool KFileItemModelFilter::matches(const KFileItem& item) const
{
+ const bool hasPatternFilter = !m_pattern.isEmpty();
+ const bool hasMimeTypesFilter = !m_mimeTypes.isEmpty();
+
+ // If no filter is set, return true.
+ if (!hasPatternFilter && !hasMimeTypesFilter) {
+ return true;
+ }
+
+ // If both filters are set, return true when both filters are matched
+ if (hasPatternFilter && hasMimeTypesFilter) {
+ return (matchesPattern(item) && matchesType(item));
+ }
+
+ // If only one filter is set, return true when that filter is matched
+ if (hasPatternFilter) {
+ return matchesPattern(item);
+ }
+
+ return matchesType(item);
+}
+
+bool KFileItemModelFilter::matchesPattern(const KFileItem& item) const
+{
if (m_useRegExp) {
return m_regExp->exactMatch(item.text());
} else {
return item.text().toLower().contains(m_lowerCasePattern);
}
}
+
+bool KFileItemModelFilter::matchesType(const KFileItem& item) const
+{
+ foreach (const QString& mimeType, m_mimeTypes) {
+ if (item.mimetype() == mimeType) {
+ return true;
+ }
+ }
+
+ return m_mimeTypes.isEmpty();
+}
diff --git a/src/kitemviews/private/kfileitemmodelfilter.h b/src/kitemviews/private/kfileitemmodelfilter.h
index 9bdf1fd95..e4fb0a2ee 100644
--- a/src/kitemviews/private/kfileitemmodelfilter.h
+++ b/src/kitemviews/private/kfileitemmodelfilter.h
@@ -22,7 +22,7 @@
#define KFILEITEMMODELFILTER_H
#include <libdolphin_export.h>
-#include <QString>
+#include <QStringList>
class KFileItem;
class QRegExp;
@@ -52,18 +52,41 @@ public:
QString pattern() const;
/**
+ * Set the list of mimetypes that are used for comparison with the
+ * item in KFileItemModelFilter::matchesMimeType.
+ */
+ void setMimeTypes(const QStringList& types);
+ QStringList mimeTypes() const;
+
+ /**
+ * @return True if either the pattern or mimetype filters has been set.
+ */
+ bool hasSetFilters() const;
+
+ /**
* @return True if the item matches with the pattern defined by
- * KFileItemModelFilter::setPattern().
+ * @ref setPattern() or @ref setMimeTypes
*/
bool matches(const KFileItem& item) const;
private:
+ /**
+ * @return True if item matches pattern set by @ref setPattern.
+ */
+ bool matchesPattern(const KFileItem& item) const;
+
+ /**
+ * @return True if item matches mimetypes set by @ref setMimeTypes.
+ */
+ bool matchesType(const KFileItem& item) const;
+
bool m_useRegExp; // If true, m_regExp is used for filtering,
// otherwise m_lowerCaseFilter is used.
QRegExp* m_regExp;
QString m_lowerCasePattern; // Lowercase version of m_filter for
// faster comparison in matches().
- QString m_pattern; // Property set by setFilter().
+ QString m_pattern; // Property set by setPattern().
+ QStringList m_mimeTypes; // Property set by setMimeTypes()
};
#endif