--- /dev/null
+#ifndef DICTSPROXYLISTMODEL_H
+#define DICTSPROXYLISTMODEL_H
+
+#include <QSortFilterProxyModel>
+#include <QDebug>
+
+class DictsProxyListModel : public QSortFilterProxyModel
+{
+ Q_OBJECT
+public:
+ enum DictTypeRoles {
+ NumberRole=Qt::UserRole + 1,
+ FromRole,
+ ToRole,
+ NameRole,
+ SizeRole,
+ LinkRole };
+
+ DictsProxyListModel(QObject *parent = 0): QSortFilterProxyModel(parent){ }
+ QString from() { return _from;}
+ QString to() {return _to;}
+ void setFrom(QString from) { _from = from; invalidateFilter(); }
+ void setTo(QString to) {_to = to; invalidateFilter();}
+
+protected:
+ bool filterAcceptsRow(int source_row, const QModelIndex&) const {
+ QString sourceFrom = sourceModel()->data(sourceModel()->index(source_row, 0),FromRole).toString();
+ QString sourceTo = sourceModel()->data(sourceModel()->index(source_row, 0),ToRole).toString();
+ return ((_from.isEmpty() || sourceFrom == _from) &&
+ (_to.isEmpty() || sourceTo == _to));
+ }
+
+ bool lessThan(const QModelIndex &left, const QModelIndex &right) const {
+ QString l = left.model()->data(left,sortRole()).toString();
+ QString r = right.model()->data(right,sortRole()).toString();
+ if(sortRole() == SizeRole){
+ l.remove(" MB");
+ r.remove(" MB");
+ float lNumber = l.toFloat();
+ float rNumber = r.toFloat();
+ return (lNumber < rNumber);
+ }
+ else if(sortRole()>Qt::UserRole)
+ return (l < r);
+ else
+ QSortFilterProxyModel::lessThan(left, right);
+ }
+
+private:
+ QString _from;
+ QString _to;
+
+};
+
+#endif // DICTPROXYLISTMODEL_H