From: Luciano Montanaro Date: Sun, 5 Jun 2011 15:57:10 +0000 (+0200) Subject: Implement Alpha and Distance sort in menu X-Git-Tag: tags/0.3.4~22 X-Git-Url: https://vcs.maemo.org/git/?a=commitdiff_plain;h=4594ad15ff7cc5a4565ffffdf17b7b81bc3d738e;p=quandoparte Implement Alpha and Distance sort in menu --- diff --git a/application/stationlistview.cpp b/application/stationlistview.cpp index 1d64c57..e7ff177 100644 --- a/application/stationlistview.cpp +++ b/application/stationlistview.cpp @@ -38,7 +38,8 @@ StationListView::StationListView(StationListModel *model, QWidget *parent) : viewSelectionGroup(new QActionGroup(0)), stationListModel(model), filterModel(new StationListProxyModel(this)), - keyPressForwarder(new KeyPressForwarder(this)) + keyPressForwarder(new KeyPressForwarder(this)), + m_sortingMode(NoSorting) { #ifdef Q_WS_MAEMO_5 @@ -65,9 +66,10 @@ StationListView::StationListView(StationListModel *model, QWidget *parent) : SIGNAL(activated(QModelIndex)), SLOT(showStation(QModelIndex))); connect(ui->filterEdit, SIGNAL(textChanged(const QString &)), SLOT(handleFilterChanges(const QString &))); - //filterModel->setSortRole(StationListModel::PositionRole); - filterModel->setSortRole(Qt::DisplayRole); - filterModel->sort(0); + connect(viewSelectionGroup, SIGNAL(triggered(QAction*)), + SLOT(handleSortingChange(QAction*))); + + setSortingMode(AlphaSorting); } @@ -110,9 +112,9 @@ void StationListView::updatePosition(const QtMobility::QGeoPositionInfo &update) filterModel->sort(0); } -void StationListView::handleSortingChange(const QAction *action) +void StationListView::handleSortingChange(QAction *action) { - SortingMode mode; + SortingMode mode = NoSorting; if (action == ui->sortByNameAction) { mode = AlphaSorting; qDebug() << "sort by name"; @@ -128,7 +130,25 @@ void StationListView::handleSortingChange(const QAction *action) void StationListView::setSortingMode(StationListView::SortingMode mode) { - m_sortingMode = mode; + if (mode != m_sortingMode) { + m_sortingMode = mode; + switch (mode) { + case AlphaSorting: + filterModel->setSortRole(Qt::DisplayRole); + break; + case DistanceSorting: + filterModel->setSortRole(StationListModel::PositionRole); + break; + case RecentUsageSorting: + break; + case NoSorting: + default: + break; + } + filterModel->invalidate(); + filterModel->sort(0); + emit sortingModeChanged(mode); + } } StationListView::SortingMode StationListView::sortingMode() diff --git a/application/stationlistview.h b/application/stationlistview.h index a3a2cd6..17043e8 100644 --- a/application/stationlistview.h +++ b/application/stationlistview.h @@ -25,6 +25,7 @@ class StationListView : public QMainWindow Q_OBJECT enum SortingMode { + NoSorting, AlphaSorting, DistanceSorting, RecentUsageSorting @@ -40,6 +41,7 @@ public: signals: void stationSelected(const QString &); void aboutTriggered(void); + void sortingModeChanged(SortingMode mode); public slots: void updatePosition(const QGeoPositionInfo &update); @@ -48,7 +50,7 @@ private slots: void showSettings(void); void showStation(const QModelIndex &index); void handleFilterChanges(const QString &filter); - void handleSortingChange(const QAction *action); + void handleSortingChange(QAction *action); private: Ui::StationListView *ui;