7f99271c95dcea8e8fdaa3f16fb6908ac7cf487c
[mdictionary] / src / plugins / xdxf / DictsProxyModel.h
1 /*******************************************************************************
2
3     This file is part of mDictionary.
4
5     mDictionary is free software: you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation, either version 3 of the License, or
8     (at your option) any later version.
9
10     mDictionary is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with mDictionary.  If not, see <http://www.gnu.org/licenses/>.
17
18     Copyright 2010 Comarch S.A.
19
20 *******************************************************************************/
21
22 /*!
23   \file DictsProxyModel.h
24   \author Mateusz Półrola <mateusz.polrola@gmail.com>
25   */
26
27 #ifndef DICTSPROXYMODEL_H
28 #define DICTSPROXYMODEL_H
29
30 #include <QSortFilterProxyModel>
31 #include <QDebug>
32
33
34 /*!
35   Proxy model used for filtering and sorting informations about xdxf dictionaries.
36 It allow to filter dictionaries based on their langages
37 */
38 class DictsProxyModel : public QSortFilterProxyModel
39 {
40     Q_OBJECT
41 public:
42     DictsProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent){
43
44     }
45
46     /*! Returns currently setted language used to filter dictionaries based on dictionarie's language from*/
47     QString from() { return _from;}
48
49         /*! Returns currently setted language used to filter dictionaries based on dictionarie's language to*/
50     QString to() {return _to;}
51
52
53         /*! Sets currently setted language used to filter dictionaries based on dictionarie's language from*/
54     void setFrom(QString from) { _from = from; invalidateFilter(); }
55
56         /*! Sets currently setted language used to filter dictionaries based on dictionarie's language to*/
57     void setTo(QString to) {_to = to; invalidateFilter();}
58
59 protected:
60         /*! Filtering passed row*/
61     bool filterAcceptsRow(int source_row, const QModelIndex&) const {
62         QString sourceFrom = sourceModel()->data(
63                 sourceModel()->index(source_row, 0)).toString();
64         QString sourceTo = sourceModel()->data(
65                 sourceModel()->index(source_row, 1)).toString();
66
67         return ((_from.isEmpty() || sourceFrom == _from) &&
68                 (_to.isEmpty() || sourceTo == _to));
69     }
70
71         /*! Sorting, if sort column is set to column containing size of dictionary, string containing size of it is converted to fload and compared to other dict size*/
72     bool lessThan(const QModelIndex &left, const QModelIndex &right) const {
73         if(sortColumn() == 3) {
74             QString l = left.model()->data(left).toString();
75             l.remove(" MB");
76
77             QString r = right.model()->data(right).toString();
78             r.remove(" MB");
79
80             float lNumber = l.toFloat();
81             float rNumber = r.toFloat();
82
83             return (lNumber < rNumber);
84         }
85         else
86             QSortFilterProxyModel::lessThan(left, right);
87     }
88
89 private:
90     QString _from;
91     QString _to;
92
93 };
94
95 #endif // DICTSPROXYMODEL_H