setRoleNames(roles);
Settings *settings = Settings::instance();
- m_sortingMode = settings->stationListSortingMode();
+ forceSortingMode(settings->stationListSortingMode());
setFilterCaseSensitivity(Qt::CaseInsensitive);
setSortCaseSensitivity(Qt::CaseInsensitive);
+ setDynamicSortFilter(true);
if (positionInfoSource) {
qDebug() << "position info source available";
connect(positionInfoSource, SIGNAL(positionUpdated(QGeoPositionInfo)),
} else {
qDebug() << "No position info source available";
}
+ connect(settings, SIGNAL(recentStationsChanged()),
+ this, SLOT(updateRecentStations()));
+ updateRecentStations();
}
bool StationListProxyModel::lessThan(const QModelIndex &left,
void StationListProxyModel::setUserPosition(const QtMobility::QGeoCoordinate &pos)
{
+ qDebug() << "Position is now" << pos;
m_here = pos;
+ if (sortingMode() == StationListProxyModel::DistanceSorting) {
+ invalidate();
+ }
}
void StationListProxyModel::setRecentStations(const QStringList &stations)
{
+ qDebug() << "Recent stations are now" << stations;
m_stations = stations;
+ if (sortingMode() == StationListProxyModel::RecentUsageSorting) {
+ invalidate();
+ }
+}
+
+void StationListProxyModel::updateRecentStations(void)
+{
+ Settings *settings = Settings::instance();
+ setRecentStations(settings->recentStations());
}
bool StationListProxyModel::filterAcceptsRow(int sourceRow,
void StationListProxyModel::setSortingMode(SortingMode mode)
{
if (mode != m_sortingMode) {
- qDebug() << "setSorting Mode" << mode << m_sortingMode << "called";
- m_sortingMode = mode;
- setRecentOnlyFilter(false);
-
- switch (mode) {
- case StationListProxyModel::AlphaSorting:
- setSortRole(Qt::DisplayRole);
- break;
- case StationListProxyModel::DistanceSorting:
- setSortRole(StationListModel::PositionRole);
- break;
- case StationListProxyModel::RecentUsageSorting:
- setRecentOnlyFilter(true);
- break;
- default:
- break;
- }
- if (mode == StationListProxyModel::DistanceSorting) {
- positionInfoSource->startUpdates();
- } else {
- positionInfoSource->stopUpdates();
- }
- invalidate();
- sort(0);
+ beginResetModel();
+ forceSortingMode(mode);
+ endResetModel();
+ }
+ Settings *settings = Settings::instance();
+ settings->setStationListSortingMode(m_sortingMode);
- Settings *settings = Settings::instance();
- settings->setStationListSortingMode(m_sortingMode);
+ emit sortingModeChanged(mode);
+}
- emit sortingModeChanged(mode);
+void StationListProxyModel::forceSortingMode(SortingMode mode)
+{
+ m_sortingMode = mode;
+ setRecentOnlyFilter(false);
+
+ switch (mode) {
+ case StationListProxyModel::AlphaSorting:
+ setSortRole(Qt::DisplayRole);
+ break;
+ case StationListProxyModel::DistanceSorting:
+ setSortRole(StationListModel::PositionRole);
+ break;
+ case StationListProxyModel::RecentUsageSorting:
+ setRecentOnlyFilter(true);
+ break;
+ default:
+ break;
}
+ if (mode == StationListProxyModel::DistanceSorting) {
+ positionInfoSource->startUpdates();
+ } else {
+ positionInfoSource->stopUpdates();
+ }
+ invalidate();
+ sort(0);
}
void StationListProxyModel::updatePosition(const QtMobility::QGeoPositionInfo &update)