#include <QActionGroup>
#include <QDebug>
#include <QKeyEvent>
+#include <QSettings>
#include <QSortFilterProxyModel>
#include <QStringListModel>
stationListModel(model),
filterModel(new StationListProxyModel(this)),
keyPressForwarder(new KeyPressForwarder(this)),
- m_sortingMode(NoSorting)
-
+ 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);
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*)));
- setSortingMode(AlphaSorting);
+ 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);
}
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);
-}
-
-void StationListView::updatePosition(const QtMobility::QGeoPositionInfo &update)
-{
- qDebug() << "Position update received" << update;
- filterModel->setUserPosition(update.coordinate());
- filterModel->invalidate();
- filterModel->sort(0);
+ qDebug() << "Filtering for" << filter;
}
void StationListView::handleSortingChange(QAction *action)
{
- SortingMode mode = NoSorting;
+ StationListProxyModel::SortingMode mode = StationListProxyModel::NoSorting;
if (action == ui->sortByNameAction) {
- mode = AlphaSorting;
+ mode = StationListProxyModel::AlphaSorting;
qDebug() << "sort by name";
- } else if (action == ui->sortNearFirstAction) {
- mode = DistanceSorting;
+ } else if (action == ui->sortByDistanceAction) {
+ mode = StationListProxyModel::DistanceSorting;
qDebug() << "sort by distance";
} else if (action == ui->sortRecentFirstAction) {
- mode = RecentUsageSorting;
+ mode = StationListProxyModel::RecentUsageSorting;
qDebug() << "sort by recent use";
}
+
+ QSettings settings;
+ settings.setValue("StationListView/SortingMode", mode);
+
setSortingMode(mode);
}
-void StationListView::setSortingMode(StationListView::SortingMode mode)
+void StationListView::setSortingMode(StationListProxyModel::SortingMode mode)
{
+ qDebug() << "setSorting Mode" << mode << "called";
if (mode != m_sortingMode) {
- m_sortingMode = mode;
switch (mode) {
- case AlphaSorting:
- filterModel->setSortRole(Qt::DisplayRole);
+ case StationListProxyModel::AlphaSorting:
+ ui->sortByNameAction->setChecked(true);
break;
- case DistanceSorting:
- filterModel->setSortRole(StationListModel::PositionRole);
+ case StationListProxyModel::DistanceSorting:
+ ui->sortByDistanceAction->setChecked(true);
break;
- case RecentUsageSorting:
+ case StationListProxyModel::RecentUsageSorting:
+ ui->sortRecentFirstAction->setChecked(true);
break;
- case NoSorting:
+ case StationListProxyModel::NoSorting:
default:
break;
}
- filterModel->invalidate();
- filterModel->sort(0);
- emit sortingModeChanged(mode);
+ m_sortingMode = mode;
+ filterModel->setSortingMode(mode);
+
}
}
-StationListView::SortingMode StationListView::sortingMode()
+StationListProxyModel::SortingMode StationListView::sortingMode()
{
return m_sortingMode;
}
+
+void StationListView::handlefilterClearClick()
+{
+ ui->filterEdit->clear();
+}