--- /dev/null
+#include "settings.h"
+#include "ui_settings.h"
+#include "../common/dbusclient.h"
+
+#include <QProcess>
+#include <QDebug>
+
+Settings::Settings(QWidget *parent) :
+ QWidget(parent),
+ ui(new Ui::Settings)
+{
+ intervals << tr("1 second") << tr("2 seconds") << tr("5 seconds") <<
+ tr("10 seconds") << tr("20 seconds") << tr("30 seconds") <<
+ tr("60 seconds") << tr("120 seconds");
+
+ ui->setupUi(this);
+ addUIElements(); //Add Maemo 5 Specific widgets
+
+ settings = new QSettings();
+ loadSettings();
+
+ //Make the window a modal panel
+ setWindowFlags(Qt::Dialog);
+ setWindowModality(Qt::ApplicationModal);
+
+ connect(ui->login_user, SIGNAL(returnPressed()), ui->login_pass, SLOT(setFocus()));
+ connect(ui->login_pass, SIGNAL(returnPressed()), SLOT(close()));
+ connect(ui->ok_button, SIGNAL(clicked()), SLOT(close()));
+
+}
+
+Settings::~Settings()
+{
+#ifdef Q_WS_MAEMO_5
+ delete interval_button;
+ delete interval_selector;
+ delete interval_model;
+#endif
+ delete ui;
+ delete settings;
+}
+
+void Settings::addUIElements()
+{
+ QVBoxLayout* ui_layout = (QVBoxLayout*)ui->scrollArea->widget()->layout();
+#ifdef Q_WS_MAEMO_5
+ interval_button = new QMaemo5ValueButton("Update Interval",ui->scrollArea->widget());
+ interval_button->setValueLayout(QMaemo5ValueButton::ValueBesideText);
+ interval_selector = new QMaemo5ListPickSelector;
+ interval_model = new QStandardItemModel(0, 1);
+ populateListModel(interval_model);
+ interval_selector->setModel(interval_model);
+ interval_button->setPickSelector(interval_selector);
+ ui_layout->insertWidget(4, interval_button);
+#endif
+}
+
+void Settings::closeEvent(QCloseEvent *event)
+{
+ storeSettings();
+ settings->sync();
+#ifdef Q_WS_MAEMO_5
+ updateDaemon();
+#endif
+ event->accept();
+}
+
+void Settings::loadSettings()
+{
+ unsigned short location;
+ unsigned short interval;
+
+ ui->connectIfNecessary->setChecked( settings->value("autoconnect",true).toBool() );
+ ui->launchOnPowerOn->setChecked( settings->value("autolaunch",false).toBool() );
+#ifdef Q_WS_MAEMO_5
+ location = settings->value("location", LOCATION_METHOD_GNSS).toInt();
+#endif
+ ui->login_user->setText(settings->value("user","my_username").toString());
+ ui->login_pass->setText(settings->value("pass","my_password").toString());
+#ifdef Q_WS_MAEMO_5
+ switch(settings->value("interval", LOCATION_INTERVAL_20S).toInt()) {
+ case LOCATION_INTERVAL_1S:
+ interval = 0;
+ break;
+ case LOCATION_INTERVAL_2S:
+ interval = 1;
+ break;
+ case LOCATION_INTERVAL_5S:
+ interval = 2;
+ break;
+ case LOCATION_INTERVAL_10S:
+ interval = 3;
+ break;
+ case LOCATION_INTERVAL_20S:
+ interval = 4;
+ break;
+ case LOCATION_INTERVAL_30S:
+ interval = 5;
+ break;
+ case LOCATION_INTERVAL_60S:
+ interval = 6;
+ break;
+ case LOCATION_INTERVAL_120S:
+ interval = 7;
+ break;
+ }
+ interval_selector->setCurrentIndex(interval);
+
+
+ if (DBusClient::daemonRunning())
+ ui->status_on->setChecked(true);
+ else
+ ui->status_off->setChecked(true);
+
+
+ switch (location) {
+ case LOCATION_METHOD_GNSS:
+ ui->location_gps->setChecked(true);
+ break;
+ case LOCATION_METHOD_AGNSS | LOCATION_METHOD_ACWP:
+ ui->location_gps_network->setChecked(true);
+ break;
+ case LOCATION_METHOD_ACWP:
+ ui->location_network->setChecked(true);
+ break;
+ }
+#endif
+}
+
+void Settings::populateListModel(QStandardItemModel *model)
+{
+ for(int i = 0; i < intervals.size(); ++i) {
+ QStandardItem *item = new QStandardItem(intervals.at(i));
+ item->setTextAlignment(Qt::AlignCenter); // the Maemo 5 design spec recommends this.
+ item->setEditable(false); // prevent editing of the item
+ model->appendRow(item);
+ }
+}
+
+void Settings::storeSettings()
+{
+ unsigned short status;
+ unsigned short location;
+ unsigned short interval;
+
+ settings->setValue("autoconnect", ui->connectIfNecessary->checkState());
+ settings->setValue("autolaunch", ui->launchOnPowerOn->checkState());
+ settings->setValue("user", ui->login_user->text());
+ settings->setValue("pass", ui->login_pass->text());
+#ifdef Q_WS_MAEMO_5
+ switch(interval_selector->currentIndex()) {
+ case 0:
+ interval = LOCATION_INTERVAL_1S;
+ break;
+ case 1:
+ interval = LOCATION_INTERVAL_2S;
+ break;
+ case 2:
+ interval = LOCATION_INTERVAL_5S;
+ break;
+ case 3:
+ interval = LOCATION_INTERVAL_10S;
+ break;
+ case 4:
+ interval = LOCATION_INTERVAL_20S;
+ break;
+ case 5:
+ interval = LOCATION_INTERVAL_30S;
+ break;
+ case 6:
+ interval = LOCATION_INTERVAL_60S;
+ break;
+ case 7:
+ interval = LOCATION_INTERVAL_120S;
+ break;
+ }
+ settings->setValue("interval", interval);
+
+ if (ui->location_gps->isChecked())
+ location = LOCATION_METHOD_GNSS;
+ else if (ui->location_gps_network->isChecked())
+ location = LOCATION_METHOD_AGNSS | LOCATION_METHOD_ACWP;
+ else if (ui->location_network->isChecked())
+ location = LOCATION_METHOD_ACWP;
+ settings->setValue("location", location);
+#endif
+
+ settings->setValue("status", status);
+}
+
+#ifdef Q_WS_MAEMO_5
+void Settings::updateDaemon()
+{
+ if (ui->status_on->isChecked()) {
+ if (DBusClient::daemonRunning())
+ DBusClient::reloadDaemonConfig();
+ else
+ (new QProcess())->start(QString("/opt/linfati.com/googlelatitude-daemon"));
+ }
+ else if (ui->status_off->isChecked())
+ DBusClient::quitDaemon();
+ //else if (ui->status_hide->isChecked())
+ // status = STATUS_HIDE;
+}
+#endif
+
+void Settings::changeEvent(QEvent *e)
+{
+ QWidget::changeEvent(e);
+ switch (e->type()) {
+ case QEvent::LanguageChange:
+ ui->retranslateUi(this);
+ break;
+ default:
+ break;
+ }
+}