#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();
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();
}