1 #pragma once
2 
3 #include <QtCore/qsortfilterproxymodel.h>
4 #include <QtQml/qqmlparserstatus.h>
5 
6 class SortFilterProxyModel : public QSortFilterProxyModel, public QQmlParserStatus
7 {
8     Q_OBJECT
9     Q_INTERFACES(QQmlParserStatus)
10 
11     Q_PROPERTY(QObject *source READ source WRITE setSource)
12 
13     Q_PROPERTY(QByteArray sortRole READ sortRole WRITE setSortRole)
14     Q_PROPERTY(Qt::SortOrder sortOrder READ sortOrder WRITE setSortOrder)
15 
16     Q_PROPERTY(QByteArray filterRole READ filterRole WRITE setFilterRole)
17     Q_PROPERTY(QString filterString READ filterString WRITE setFilterString NOTIFY filterStringChanged)
18     Q_PROPERTY(FilterSyntax filterSyntax READ filterSyntax WRITE setFilterSyntax)
19 
20     Q_PROPERTY(int filterKeyColumn READ filterKeyColumn WRITE setFilterKeyColumn)
21 
22     Q_ENUMS(FilterSyntax)
23 
24 public:
25     explicit SortFilterProxyModel(QObject *parent = 0);
26 
27     QObject *source() const;
28     void setSource(QObject *source);
29 
30     QByteArray sortRole() const;
31     Q_INVOKABLE void setSortRole(const QByteArray &role);
32 
33     Q_INVOKABLE void setSortOrder(Qt::SortOrder order);
34 
35     QByteArray filterRole() const;
36     void setFilterRole(const QByteArray &role);
37 
38     QString filterString() const;
39     void setFilterString(const QString &filter);
40 
41     enum FilterSyntax {
42         RegExp,
43         Wildcard,
44         FixedString
45     };
46 
47     FilterSyntax filterSyntax() const;
48     void setFilterSyntax(FilterSyntax syntax);
49 
50     void classBegin();
51     void componentComplete();
52 
53     Q_INVOKABLE int getOriginalRowIndex(int i);
54 
55 signals:
56     void filterStringChanged();
57 
58 protected:
59     int roleKey(const QByteArray &role) const;
60 
61 private:
62     bool m_complete;
63     QByteArray m_sortRole;
64     QByteArray m_filterRole;
65 };
66