Moved sortingMode to StationListProxyModel
authorLuciano Montanaro <mikelima@cirulla.net>
Sun, 17 Jul 2011 18:29:09 +0000 (20:29 +0200)
committerLuciano Montanaro <mikelima@cirulla.net>
Sun, 17 Jul 2011 18:29:09 +0000 (20:29 +0200)
application/stationlistproxymodel.cpp
application/stationlistproxymodel.h
application/stationlistview.cpp

index 77fd467..a85cbc1 100644 (file)
@@ -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<int, QByteArray> 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);
+    }
 }
index 3ebf861..15d3ec7 100644 (file)
@@ -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,
index f8dfc78..42f9e47 100644 (file)
@@ -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);
+
     }
 }