Use the new Settings class
authorLuciano Montanaro <mikelima@cirulla.net>
Fri, 22 Jul 2011 19:24:38 +0000 (21:24 +0200)
committerLuciano Montanaro <mikelima@cirulla.net>
Tue, 27 Dec 2011 22:16:46 +0000 (23:16 +0100)
application/app.cpp
application/app.h
application/settings.cpp
application/settings.h
application/settingsdialog.cpp
application/view.cpp

index 82a322b..278d420 100644 (file)
@@ -24,6 +24,7 @@ Boston, MA 02110-1301, USA.
 #include "stationlistmodel.h"
 #include "stationlistview.h"
 #include "settingsdialog.h"
+#include "settings.h"
 
 #include <QDebug>
 #include <QMessageBox>
@@ -74,10 +75,11 @@ App::App(QObject *parent) :
 
     connect(checkingTimer, SIGNAL(timeout()), SLOT(updateStation()));
     stationView->show();
-    if (recentStations.isEmpty() || !stationViewPreferred) {
+    Settings *settings = Settings::instance();
+    if (settings->recentStations().isEmpty() || !settings->stationViewPreferred()) {
         stationListView->show();
     } else {
-        queryStation(recentStations.front());
+        queryStation(settings->recentStations().front());
     }
 }
 
@@ -104,16 +106,17 @@ void App::downloadFinished(void)
 void App::queryStation(const QString &station)
 {
     QNetworkRequest request;
-    request.setUrl(queryBaseUrl);
+    Settings *settings = Settings::instance();
+    request.setUrl(settings->queryBaseUrl());
     const QString queryString = "stazione=" + station;
     const QByteArray query(queryString.toLocal8Bit());
     stationQueryReply = accessManager->post(request, query);
     connect(stationQueryReply, SIGNAL(finished()),
             this, SLOT(downloadFinished()));
-    recentStations.push_front(station);
-    recentStations.removeDuplicates();
-    if (recentStations.count() > RECENT_STATIONS_MAX_COUNT) {
-        recentStations.pop_back();
+    settings->recentStations().push_front(station);
+    settings->recentStations().removeDuplicates();
+    if (settings->recentStations().count() > RECENT_STATIONS_MAX_COUNT) {
+        settings->recentStations().pop_back();
     }
 #ifdef Q_WS_MAEMO_5
     stationListView->setAttribute(Qt::WA_Maemo5ShowProgressIndicator, true);
@@ -122,9 +125,11 @@ void App::queryStation(const QString &station)
 
 void App::updateStation()
 {
+    Settings *settings = Settings::instance();
+
     qDebug() << "updating station data";
-    if (!recentStations.isEmpty() && !stationListView->isVisible()) {
-        queryStation(recentStations.front());
+    if (!settings->recentStations().isEmpty() && !stationListView->isVisible()) {
+        queryStation(settings->recentStations().front());
     }
 }
 
@@ -167,19 +172,8 @@ void App::showStationSelectView(void)
 
 void App::readSettings(void)
 {
-    QSettings settings;
-    queryBaseUrl = settings.value("QueryURL",
-                                  "http://mobile.viaggiatreno.it/viaggiatreno/mobile/stazione").toString();
-    stationView->setBaseUrl(queryBaseUrl);
-
-    recentStations = settings.value("RecentStations").toString().split(",");
-    qDebug() << "RecentStations:" << recentStations;
-
-    stationViewPreferred = settings.value("StationViewPreferred", false).toBool();
-    qDebug() << "StationsViewPreferred:" << stationViewPreferred;
-
-    checkingInterval = settings.value("CheckInterval", 0).toInt();
-    qDebug() << "CheckInterval:" << checkingInterval;
+    Settings *settings = Settings::instance();
+    stationView->setBaseUrl(settings->queryBaseUrl());
 
     /*
        I would use > 0 here, but people may have an old settings file with a 2
@@ -187,8 +181,8 @@ void App::readSettings(void)
        As a workaround I consider anything less than 30 seconds as too short
        and disable the timer.
     */
-    if (checkingInterval > 30000) {
-        checkingTimer->setInterval(checkingInterval);
+    if (settings->checkingInterval() > 30000) {
+        checkingTimer->setInterval(settings->checkingInterval());
         checkingTimer->start();
     } else {
         checkingTimer->setInterval(-1);
@@ -198,14 +192,7 @@ void App::readSettings(void)
 
 void App::saveSettings(void)
 {
-    QSettings settings;
-
-    qDebug() << "Saving Settings to" << settings.fileName();
-
-    settings.setValue("QueryURL", queryBaseUrl);
-    settings.setValue("RecentStations", recentStations.join(","));
-    settings.setValue("CheckInterval", checkingInterval);
-    settings.setValue("StationViewPreferred", stationViewPreferred);
+    Settings::instance()->save();
 }
 
 QString App::dataDir(void)
index 35899a2..93e5018 100644 (file)
@@ -61,10 +61,6 @@ private:
     StationView *stationView;
     StationListModel *stationListModel;
     StationListView *stationListView;
-    QString queryBaseUrl;
-    QStringList recentStations;
-    int checkingInterval;
-    bool stationViewPreferred;
 };
 
 #endif // APPLICATION_H
index 29fd0bd..43090b6 100644 (file)
@@ -107,3 +107,12 @@ void Settings::setStationViewPreferred(bool preference)
     m_stationViewPreferred = preference;
     emit stationViewPreferredChanged(m_stationViewPreferred);
 }
+
+Settings *Settings::instance()
+{
+    static Settings *settings = 0;
+
+    if (!settings)
+        settings = new Settings();
+    return settings;
+}
index 5b9fa5b..f79e312 100644 (file)
@@ -45,6 +45,7 @@ class Settings : public QObject
 public:
     explicit Settings(QObject *parent = 0);
     ~Settings();
+    Q_INVOKABLE static Settings *instance();
 
     Q_INVOKABLE void load(void);
     Q_INVOKABLE void save(void);
index f427be2..ccb085d 100644 (file)
@@ -19,6 +19,7 @@ Boston, MA 02110-1301, USA.
 
 */
 
+#include <settings.h>
 #include "settingsdialog.h"
 #include "ui_settingsdialog.h"
 
@@ -26,7 +27,6 @@ Boston, MA 02110-1301, USA.
 #include <QMaemo5ValueButton>
 #endif
 
-#include <QSettings>
 
 SettingsDialog::SettingsDialog(QWidget *parent) :
     QDialog(parent),
@@ -35,16 +35,16 @@ SettingsDialog::SettingsDialog(QWidget *parent) :
 #endif
     ui(new Ui::SettingsDialog)
 {
+    Settings *settings = Settings::instance();
+
     ui->setupUi(this);
 
-    QSettings settings;
-    bool showStationPreference = settings.value("StationViewPreferred",
-                                                false).toBool();
+    bool showStationPreference = settings->stationViewPreferred();
     ui->showLastStationCheckBox->setChecked(showStationPreference);
     connect(ui->showLastStationCheckBox, SIGNAL(toggled(bool)),
             SLOT(showStationChanged(bool)));
 
-    bool checkingInterval = settings.value("CheckInterval", 0).toInt();
+    bool checkingInterval = settings->checkingInterval();
     ui->periodicUpdateCheckBox->setChecked(checkingInterval > 30000);
     connect(ui->periodicUpdateCheckBox, SIGNAL(toggled(bool)),
             SLOT(periodicUpdateToggled(bool)));
@@ -62,12 +62,12 @@ SettingsDialog::~SettingsDialog()
 
 void SettingsDialog::showStationChanged(bool newValue)
 {
-    QSettings settings;
-    settings.setValue("StationViewPreferred", newValue);
+    Settings *settings = Settings::instance();
+    settings->setStationViewPreferred(newValue);
 }
 
 void SettingsDialog::periodicUpdateToggled(bool checked)
 {
-    QSettings settings;
-    settings.setValue("CheckInterval", checked ? 120000 : 0);
+    Settings *settings = Settings::instance();
+    settings->setCheckingInterval(checked ? 120000 : 0);
 }
index e3959af..9da6d06 100644 (file)
@@ -61,11 +61,16 @@ View::View(QWidget *parent) :
     stationListModel->load(trueFilePath("stations:stations.qpl"));
 
     stationListProxyModel->setSourceModel(stationListModel);
-    stationListProxyModel->setFilterCaseSensitivity(Qt::CaseInsensitive);
 
+    /* Types to be made accessible to QML */
     qmlRegisterType<Settings>("net.cirulla.quandoparte", 1, 0, "Settings");
+    qmlRegisterType<StationListProxyModel>(
+                "net.cirulla.quandoparte", 1, 0, "StationListProxyModel");
 
     QDeclarativeContext *context = this->rootContext();
+    /* objects to be made accessible to QML */
+    context->setContextProperty("settings", Settings::instance());
+    context->setContextProperty("stationList", stationListModel);
     context->setContextProperty("stationListProxyModel", stationListProxyModel);
 
     // This does not seem ot work in harmattan. As a workaround, change dir to