Bump version to 0.9.0
[quandoparte] / application / stationlistview.cpp
index 0763038..ef18b39 100644 (file)
@@ -21,128 +21,77 @@ Boston, MA 02110-1301, USA.
 
 #include "stationlistview.h"
 #include "ui_stationlistview.h"
-
+#include "stationlistmodel.h"
+#include "stationlistproxymodel.h"
 #include "keypressforwarder.h"
 #include "settingsdialog.h"
 
 #include <QActionGroup>
 #include <QDebug>
 #include <QKeyEvent>
+#include <QSettings>
 #include <QSortFilterProxyModel>
 #include <QStringListModel>
 
-StationListView::StationListView(QWidget *parent) :
+StationListView::StationListView(StationListModel *model, QWidget *parent) :
     QMainWindow(parent),
     ui(new Ui::StationListView),
     viewSelectionGroup(new QActionGroup(0)),
-    stationListModel(new QStringListModel(this)),
-    filterModel(new QSortFilterProxyModel(this)),
-    keyPressForwarder(new KeyPressForwarder(this))
-
+    stationListModel(model),
+    filterModel(new StationListProxyModel(this)),
+    keyPressForwarder(new KeyPressForwarder(this)),
+    m_sortingMode(StationListProxyModel::NoSorting)
 {
+    ui->setupUi(this);
 #ifdef Q_WS_MAEMO_5
     setAttribute(Qt::WA_Maemo5StackedWindow);
     setAttribute(Qt::WA_Maemo5AutoOrientation);
+    ui->filterClear->setIcon(QIcon::fromTheme("general_close"));
+#else
+    ui->filterClear->setIcon(QIcon::fromTheme("edit-clear"));
 #endif
-    ui->setupUi(this);
+
     viewSelectionGroup->addAction(ui->sortByNameAction);
-    viewSelectionGroup->addAction(ui->sortNearFirstAction);
+    viewSelectionGroup->addAction(ui->sortByDistanceAction);
     viewSelectionGroup->addAction(ui->sortRecentFirstAction);
-    QStringList stationList;
-    stationList << "Savona"
-                << "Albisola"
-                << "Celle"
-                << "Varazze"
-                << "Cogoleto"
-                << "Arenzano"
-                << "Genova Voltri"
-                << "Genova Pra"
-                << "Genova Pegli"
-                << "Genova Sestri Ponente"
-                << "Genova Cornigliano"
-                << "Genova Sampierdarena"
-                << "Genova Borzoli"
-                << "Genova Costa di Sestri Ponente"
-                << "Genova Granara"
-                << "Genova Acquasanta"
-                << "Mele"
-                << "Campo Ligure"
-                << "Rossiglione"
-                << "Ovada"
-                << "Molare"
-                << "Prasco Cremolino"
-                << "Visone"
-                << "Acqui Terme"
-                << "Alice Belcolle"
-                << "Mombaruzzo"
-                << "Nizza Monferrato"
-                << "Castelnuovo Calcea"
-                << "Montegrosso"
-                << "Vigliano"
-                << "Mongardino"
-                << "Asti"
-                << "Genova Rivarolo"
-                << "Genova Bolzaneto"
-                << "Genova San Biagio"
-                << "Genova Pontedecimo"
-                << "Piano Orzzontale dei Giovi"
-                << "Mignanego"
-                << "Busalla"
-                << "Borgo Fornari"
-                << "Ronco Scrivia"
-                << "Arquata Scrivia"
-                << "Serravalle Scrivia"
-                << "Novi Ligure"
-                << "Alessandria"
-                << "Genova Via di Francia"
-                << "Genova Piazza Principe"
-                << "Genova Brignole"
-                << "Genova Sturla"
-                << "Genova Quarto dei Mille"
-                << "Genova Quinto al Mare"
-                << "Genova Nervi"
-                << "Bogliasco"
-                << "Pontetto"
-                << "Pieve Ligure"
-                << "Sori"
-                << "Mulinetti"
-                << "Recco"
-                << "Camogli";
-    stationListModel->setStringList(stationList);
     filterModel->setSourceModel(stationListModel);
-    filterModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
     ui->listView->setModel(filterModel);
     ui->listView->setEditTriggers(QAbstractItemView::NoEditTriggers);
     ui->listView->setSelectionMode(QAbstractItemView::SingleSelection);
-    ui->filterEdit->hide();
+    ui->filterFrame->hide();
 
     keyPressForwarder->setTarget(ui->filterEdit);
     ui->listView->installEventFilter(keyPressForwarder);
 
     connect(ui->showAboutAction, SIGNAL(triggered()),
             this, SIGNAL(aboutTriggered()));
-    connect(ui->listView,
-            SIGNAL(activated(QModelIndex)), SLOT(showStation(QModelIndex)));
+    connect(ui->showSettingsAction, SIGNAL(triggered()),
+            this, SIGNAL(settingsChangeRequested()));
+    connect(ui->listView, SIGNAL(activated(QModelIndex)),
+            SLOT(showStation(QModelIndex)));
     connect(ui->filterEdit, SIGNAL(textChanged(const QString &)),
             SLOT(handleFilterChanges(const QString &)));
+    connect(ui->filterClear, SIGNAL(clicked()), SLOT(handlefilterClearClick()));
+    connect(viewSelectionGroup, SIGNAL(triggered(QAction*)),
+            SLOT(handleSortingChange(QAction*)));
+
+    QSettings settings;
+    StationListProxyModel::SortingMode mode =
+            static_cast<StationListProxyModel::SortingMode>(
+                settings.value("StationListView/SortingMode",
+                               StationListProxyModel::AlphaSorting).toInt());
+    filterModel->setRecentStations(
+                settings.value("RecentStations").toString().split(","));
+    setSortingMode(mode);
+    emit sortingModeChanged(mode);
 }
 
+
 StationListView::~StationListView()
 {
     delete ui;
 }
 
-void StationListView::showSettings(void)
-{
-    qDebug() << "Show Settings";
-    SettingsDialog *settingsDialog = new SettingsDialog(this);
-    if (settingsDialog->exec() == QDialog::Accepted) {
-        // TODO Use new settings
-    }
-
-    delete settingsDialog;
-}
-
 void StationListView::showStation(const QModelIndex &index)
 {
     qDebug() << "Show Station" << index.data();
@@ -152,8 +101,63 @@ void StationListView::showStation(const QModelIndex &index)
 void StationListView::handleFilterChanges(const QString &filter)
 {
     if (!filter.isEmpty())
-        ui->filterEdit->show();
+        ui->filterFrame->show();
     else
-        ui->filterEdit->hide();
+        ui->filterFrame->hide();
     filterModel->setFilterFixedString(filter);
+    qDebug() << "Filtering for" << filter;
+}
+
+void StationListView::handleSortingChange(QAction *action)
+{
+    StationListProxyModel::SortingMode mode = StationListProxyModel::NoSorting;
+    if (action == ui->sortByNameAction) {
+        mode = StationListProxyModel::AlphaSorting;
+        qDebug() << "sort by name";
+    } else if (action == ui->sortByDistanceAction) {
+        mode = StationListProxyModel::DistanceSorting;
+        qDebug() << "sort by distance";
+    } else if (action == ui->sortRecentFirstAction) {
+        mode = StationListProxyModel::RecentUsageSorting;
+        qDebug() << "sort by recent use";
+    }
+
+    QSettings settings;
+    settings.setValue("StationListView/SortingMode", mode);
+
+    setSortingMode(mode);
+}
+
+void StationListView::setSortingMode(StationListProxyModel::SortingMode mode)
+{
+    qDebug() << "setSorting Mode" << mode << "called";
+    if (mode != m_sortingMode) {
+        switch (mode) {
+        case StationListProxyModel::AlphaSorting:
+            ui->sortByNameAction->setChecked(true);
+            break;
+        case StationListProxyModel::DistanceSorting:
+            ui->sortByDistanceAction->setChecked(true);
+            break;
+        case StationListProxyModel::RecentUsageSorting:
+            ui->sortRecentFirstAction->setChecked(true);
+            break;
+        case StationListProxyModel::NoSorting:
+        default:
+            break;
+        }
+        m_sortingMode = mode;
+        filterModel->setSortingMode(mode);
+
+    }
+}
+
+StationListProxyModel::SortingMode StationListView::sortingMode()
+{
+    return m_sortingMode;
+}
+
+void StationListView::handlefilterClearClick()
+{
+    ui->filterEdit->clear();
 }