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_filterRecentOnly(false)
16 QHash<int, QByteArray> roles;
17 roles[StationListModel::PositionRole] = "position";
20 setFilterCaseSensitivity(Qt::CaseInsensitive);
21 setSortCaseSensitivity(Qt::CaseInsensitive);
24 bool StationListProxyModel::lessThan(const QModelIndex &left,
25 const QModelIndex &right) const
27 int role = sortRole();
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);
34 return QString::compare(left.data(role).toString(),
35 right.data(role).toString(),
36 sortCaseSensitivity()) < 0;
40 void StationListProxyModel::setUserPosition(const QtMobility::QGeoCoordinate &pos)
45 void StationListProxyModel::setRecentStations(const QStringList &stations)
47 m_stations = stations;
50 bool StationListProxyModel::filterAcceptsRow(int sourceRow,
51 const QModelIndex &sourceParent) const
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);
61 return acceptable && stationName.contains(filterRegExp());
64 void StationListProxyModel::setRecentOnlyFilter(bool activation)
66 m_filterRecentOnly = activation;
69 QString StationListProxyModel::searchPattern() const
71 return m_searchPattern;
74 void StationListProxyModel::setSearchPattern(const QString &pattern)
76 m_searchPattern = pattern;
77 setFilterFixedString(m_searchPattern);
80 StationListProxyModel::SortingMode StationListProxyModel::sortingMode()
85 void StationListProxyModel::setSortingMode(StationListProxyModel::SortingMode mode)