From 3bf1cf0ac61cbcb130259afda0a3fc813a427582 Mon Sep 17 00:00:00 2001 From: Luciano Montanaro Date: Sun, 17 Jul 2011 20:29:09 +0200 Subject: [PATCH] Moved sortingMode to StationListProxyModel --- application/stationlistproxymodel.cpp | 29 +++++++++++++++++++++++++---- application/stationlistproxymodel.h | 5 ++++- application/stationlistview.cpp | 13 ++++--------- 3 files changed, 33 insertions(+), 14 deletions(-) diff --git a/application/stationlistproxymodel.cpp b/application/stationlistproxymodel.cpp index 77fd467..a85cbc1 100644 --- a/application/stationlistproxymodel.cpp +++ b/application/stationlistproxymodel.cpp @@ -11,6 +11,7 @@ Q_DECLARE_METATYPE(QGeoCoordinate) StationListProxyModel::StationListProxyModel(QObject *parent) : QSortFilterProxyModel(parent), m_here(44.5, 9.0), + m_sortingMode(NoSorting), m_filterRecentOnly(false) { QHash roles; @@ -82,9 +83,29 @@ StationListProxyModel::SortingMode StationListProxyModel::sortingMode() return m_sortingMode; } -void StationListProxyModel::setSortingMode(StationListProxyModel::SortingMode mode) +void StationListProxyModel::setSortingMode(SortingMode mode) { - m_sortingMode = mode; - invalidate(); - sort(0); + 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; + case StationListProxyModel::NoSorting: + default: + break; + } + invalidate(); + sort(0); + emit sortingModeChanged(mode); + } } diff --git a/application/stationlistproxymodel.h b/application/stationlistproxymodel.h index 3ebf861..15d3ec7 100644 --- a/application/stationlistproxymodel.h +++ b/application/stationlistproxymodel.h @@ -11,7 +11,7 @@ class StationListProxyModel : public QSortFilterProxyModel { Q_OBJECT Q_PROPERTY(QString searchPattern READ searchPattern WRITE setSearchPattern) - Q_PROPERTY(SortingMode sortingMode READ sortingMode WRITE setSortingMode) + Q_PROPERTY(SortingMode sortingMode READ sortingMode WRITE setSortingMode NOTIFY sortingModeChanged) Q_ENUMS(SortingMode) public: @@ -34,6 +34,9 @@ public: Q_INVOKABLE void setRecentStations(const QStringList &stations); Q_INVOKABLE void setRecentOnlyFilter(bool); +signals: + void sortingModeChanged(SortingMode mode); + protected: virtual bool lessThan(const QModelIndex &left, const QModelIndex &right) const; virtual bool filterAcceptsRow(int sourceRow, diff --git a/application/stationlistview.cpp b/application/stationlistview.cpp index f8dfc78..42f9e47 100644 --- a/application/stationlistview.cpp +++ b/application/stationlistview.cpp @@ -90,6 +90,7 @@ StationListView::StationListView(StationListModel *model, QWidget *parent) : filterModel->setRecentStations( settings.value("RecentStations").toString().split(",")); setSortingMode(mode); + emit sortingModeChanged(mode); } @@ -146,21 +147,15 @@ void StationListView::setSortingMode(StationListProxyModel::SortingMode mode) { qDebug() << "setSorting Mode" << mode << "called"; if (mode != m_sortingMode) { - m_sortingMode = mode; - filterModel->setRecentOnlyFilter(false); - switch (mode) { case StationListProxyModel::AlphaSorting: - filterModel->setSortRole(Qt::DisplayRole); ui->sortByNameAction->setChecked(true); break; case StationListProxyModel::DistanceSorting: - filterModel->setSortRole(StationListModel::PositionRole); ui->sortByDistanceAction->setChecked(true); break; case StationListProxyModel::RecentUsageSorting: ui->sortRecentFirstAction->setChecked(true); - filterModel->setRecentOnlyFilter(true); break; case StationListProxyModel::NoSorting: default: @@ -171,9 +166,9 @@ void StationListView::setSortingMode(StationListProxyModel::SortingMode mode) } else { positionInfoSource->stopUpdates(); } - filterModel->invalidate(); - filterModel->sort(0); - emit sortingModeChanged(mode); + m_sortingMode = mode; + filterModel->setSortingMode(mode); + } } -- 1.7.9.5