77fd467d8c38533881836ada1f4002a329a6d84c
[quandoparte] / application / stationlistproxymodel.cpp
1 #include "stationlistproxymodel.h"
2 #include "stationlistmodel.h"
3
4 #include <QDebug>
5 #include <QGeoCoordinate>
6
7 QTM_USE_NAMESPACE
8
9 Q_DECLARE_METATYPE(QGeoCoordinate)
10
11 StationListProxyModel::StationListProxyModel(QObject *parent) :
12     QSortFilterProxyModel(parent),
13     m_here(44.5, 9.0),
14     m_filterRecentOnly(false)
15 {
16     QHash<int, QByteArray> roles;
17     roles[StationListModel::PositionRole] = "position";
18     setRoleNames(roles);
19
20     setFilterCaseSensitivity(Qt::CaseInsensitive);
21     setSortCaseSensitivity(Qt::CaseInsensitive);
22 }
23
24 bool StationListProxyModel::lessThan(const QModelIndex &left,
25                                      const QModelIndex &right) const
26 {
27     int role = sortRole();
28
29     if (role == StationListModel::PositionRole) {
30         QGeoCoordinate first = left.data(role).value<QGeoCoordinate>();
31         QGeoCoordinate second = right.data(role).value<QGeoCoordinate>();
32        return first.distanceTo(m_here) < second.distanceTo(m_here);
33     } else {
34         return QString::compare(left.data(role).toString(),
35                                 right.data(role).toString(),
36                                 sortCaseSensitivity()) < 0;
37     }
38 }
39
40 void StationListProxyModel::setUserPosition(const QtMobility::QGeoCoordinate &pos)
41 {
42     m_here = pos;
43 }
44
45 void StationListProxyModel::setRecentStations(const QStringList &stations)
46 {
47     m_stations = stations;
48 }
49
50 bool StationListProxyModel::filterAcceptsRow(int sourceRow,
51                                              const QModelIndex &sourceParent) const
52 {
53     bool acceptable;
54     QModelIndex i = sourceModel()->index(sourceRow, 0, sourceParent);
55     QString stationName = sourceModel()->data(i).toString();
56     if (m_filterRecentOnly) {
57         acceptable =  m_stations.contains(stationName);
58     } else {
59         acceptable = true;
60     }
61     return acceptable && stationName.contains(filterRegExp());
62 }
63
64 void StationListProxyModel::setRecentOnlyFilter(bool activation)
65 {
66     m_filterRecentOnly = activation;
67 }
68
69 QString StationListProxyModel::searchPattern() const
70 {
71     return m_searchPattern;
72 }
73
74 void StationListProxyModel::setSearchPattern(const QString &pattern)
75 {
76     m_searchPattern = pattern;
77     setFilterFixedString(m_searchPattern);
78 }
79
80 StationListProxyModel::SortingMode StationListProxyModel::sortingMode()
81 {
82     return m_sortingMode;
83 }
84
85 void StationListProxyModel::setSortingMode(StationListProxyModel::SortingMode mode)
86 {
87     m_sortingMode = mode;
88     invalidate();
89     sort(0);
90 }