change and add some comments, remove some warning
[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     \file DictsProxyModel.h
23     \author Mateusz Półrola <mateusz.polrola@gmail.com>
24 */
25
26 #ifndef DICTSPROXYMODEL_H
27 #define DICTSPROXYMODEL_H
28
29 #include <QSortFilterProxyModel>
30 #include <QDebug>
31
32
33 /*!
34     Proxy model used for filtering and sorting informations about xdxf dictionaries.
35     It allow to filter dictionaries based on their langages
36 */
37 class DictsProxyModel : public QSortFilterProxyModel
38 {
39     Q_OBJECT
40 public:
41     DictsProxyModel(QObject *parent = 0): QSortFilterProxyModel(parent){
42
43     }
44
45     /*!
46         Returns currently setted language used to filter dictionaries
47         based on dictionarie's language from
48     */
49     QString from() { return _from;}
50
51     /*!
52         Returns currently setted language used to filter dictionaries
53         based on dictionarie's language to
54     */
55     QString to() {return _to;}
56
57
58     /*!
59         Sets currently setted language used to filter dictionaries based
60         on dictionarie's language from
61     */
62     void setFrom(QString from) { _from = from; invalidateFilter(); }
63
64     /*!
65         Sets currently setted language used to filter dictionaries
66         based on dictionarie's language to
67     */
68     void setTo(QString to) {_to = to; invalidateFilter();}
69
70 protected:
71     //! Filtering passed row
72     bool filterAcceptsRow(int source_row, const QModelIndex&) const {
73         QString sourceFrom = sourceModel()->data(
74                 sourceModel()->index(source_row, 0)).toString();
75         QString sourceTo = sourceModel()->data(
76                 sourceModel()->index(source_row, 1)).toString();
77
78         return ((_from.isEmpty() || sourceFrom == _from) &&
79                 (_to.isEmpty() || sourceTo == _to));
80     }
81
82     /*!
83         Sorting, if sort column is set to column containing size of dictionary,
84         string containing size of it is converted to fload and compared to
85         other dict size
86     */
87     bool lessThan(const QModelIndex &left, const QModelIndex &right) const {
88         if(sortColumn() == 3) {
89             QString l = left.model()->data(left).toString();
90             l.remove(" MB");
91
92             QString r = right.model()->data(right).toString();
93             r.remove(" MB");
94
95             float lNumber = l.toFloat();
96             float rNumber = r.toFloat();
97
98             return (lNumber < rNumber);
99         }
100         else
101             QSortFilterProxyModel::lessThan(left, right);
102     }
103
104 private:
105     QString _from;
106     QString _to;
107
108 };
109
110 #endif // DICTSPROXYMODEL_H