Merge branch 'master' of ssh://drop.maemo.org/git/mdictionary into qml
[mdictionary] / src / plugins / xdxf / DictsProxyListModel.h
1 #ifndef DICTSPROXYLISTMODEL_H
2 #define DICTSPROXYLISTMODEL_H
3
4 #include <QSortFilterProxyModel>
5 #include <QDebug>
6
7 class DictsProxyListModel : public QSortFilterProxyModel
8 {
9     Q_OBJECT
10 public:
11     enum DictTypeRoles {
12         NumberRole=Qt::UserRole + 1,
13         FromRole,
14         ToRole,
15         NameRole,
16         SizeRole,
17         LinkRole };
18
19     DictsProxyListModel(QObject *parent = 0): QSortFilterProxyModel(parent){ }
20     QString from() { return _from;}
21     QString to() {return _to;}
22     void setFrom(QString from) { _from = from; invalidateFilter(); }
23     void setTo(QString to) {_to = to; invalidateFilter();}
24
25 protected:
26     bool filterAcceptsRow(int source_row, const QModelIndex&) const {
27         QString sourceFrom = sourceModel()->data(sourceModel()->index(source_row, 0),FromRole).toString();
28         QString sourceTo = sourceModel()->data(sourceModel()->index(source_row, 0),ToRole).toString();
29         return ((_from.isEmpty() || sourceFrom == _from) &&
30                 (_to.isEmpty() || sourceTo == _to));
31     }
32
33     bool lessThan(const QModelIndex &left, const QModelIndex &right) const {
34         QString l = left.model()->data(left,sortRole()).toString();
35         QString r = right.model()->data(right,sortRole()).toString();
36         if(sortRole() == SizeRole){
37             l.remove(" MB");
38             r.remove(" MB");
39             float lNumber = l.toFloat();
40             float rNumber = r.toFloat();
41             return (lNumber < rNumber);
42         }
43         else if(sortRole()>Qt::UserRole)
44             return (l < r);
45         else
46             QSortFilterProxyModel::lessThan(left, right);
47     }
48
49 private:
50     QString _from;
51     QString _to;
52
53 };
54
55 #endif // DICTPROXYLISTMODEL_H