1 #include "stationlistproxymodel.h"
2 #include "stationlistmodel.h"
5 #include <QGeoCoordinate>
9 Q_DECLARE_METATYPE(QGeoCoordinate)
11 StationListProxyModel::StationListProxyModel(QObject *parent) :
12 QSortFilterProxyModel(parent),
14 m_sortingMode(NoSorting),
15 m_filterRecentOnly(false)
17 QHash<int, QByteArray> roles;
18 roles[StationListModel::PositionRole] = "position";
21 setFilterCaseSensitivity(Qt::CaseInsensitive);
22 setSortCaseSensitivity(Qt::CaseInsensitive);
25 bool StationListProxyModel::lessThan(const QModelIndex &left,
26 const QModelIndex &right) const
28 int role = sortRole();
30 if (role == StationListModel::PositionRole) {
31 QGeoCoordinate first = left.data(role).value<QGeoCoordinate>();
32 QGeoCoordinate second = right.data(role).value<QGeoCoordinate>();
33 return first.distanceTo(m_here) < second.distanceTo(m_here);
35 return QString::compare(left.data(role).toString(),
36 right.data(role).toString(),
37 sortCaseSensitivity()) < 0;
41 void StationListProxyModel::setUserPosition(const QtMobility::QGeoCoordinate &pos)
46 void StationListProxyModel::setRecentStations(const QStringList &stations)
48 m_stations = stations;
51 bool StationListProxyModel::filterAcceptsRow(int sourceRow,
52 const QModelIndex &sourceParent) const
55 QModelIndex i = sourceModel()->index(sourceRow, 0, sourceParent);
56 QString stationName = sourceModel()->data(i).toString();
57 if (m_filterRecentOnly) {
58 acceptable = m_stations.contains(stationName);
62 return acceptable && stationName.contains(filterRegExp());
65 void StationListProxyModel::setRecentOnlyFilter(bool activation)
67 m_filterRecentOnly = activation;
70 QString StationListProxyModel::searchPattern() const
72 return m_searchPattern;
75 void StationListProxyModel::setSearchPattern(const QString &pattern)
77 m_searchPattern = pattern;
78 setFilterFixedString(m_searchPattern);
81 StationListProxyModel::SortingMode StationListProxyModel::sortingMode()
86 void StationListProxyModel::setSortingMode(SortingMode mode)
88 if (mode != m_sortingMode) {
89 qDebug() << "setSorting Mode" << mode << m_sortingMode << "called";
91 setRecentOnlyFilter(false);
94 case StationListProxyModel::AlphaSorting:
95 setSortRole(Qt::DisplayRole);
97 case StationListProxyModel::DistanceSorting:
98 setSortRole(StationListModel::PositionRole);
100 case StationListProxyModel::RecentUsageSorting:
101 setRecentOnlyFilter(true);
103 case StationListProxyModel::NoSorting:
109 emit sortingModeChanged(mode);