2 * This file is part of jSpeed.
4 * jSpeed is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
9 * jSpeed is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License
15 * along with jSpeed. If not, see <http://www.gnu.org/licenses/>.
19 #include <QtCore/QDir>
20 #include <QtCore/QDebug>
21 #include <QtCore/QString>
22 #include <QtCore/QStringList>
23 #include <QtGui/QFileDialog>
24 #include <QtGui/QDialogButtonBox>
25 #include <QtGui/QPushButton>
26 #include <QtGui/QHBoxLayout>
27 #include <QtGui/QVBoxLayout>
28 #include <QtGui/QLabel>
29 #include <QtGui/QCheckBox>
30 #include <QtGui/QLineEdit>
31 #include <QtGui/QIntValidator>
32 #include <QMaemo5InformationBox>
33 #include "poisettings.h"
34 #include "fileselector.h"
35 #include "poialerts.h"
37 #include "mediaplayer.h"
38 #include "poireader.h"
39 #include "buttonbox.h"
40 #include "soundselector.h"
43 PoiSettings::PoiSettings(QWidget* parent): QDialog(parent)
45 setWindowTitle(tr("Speed camera alerts"));
46 enabled_ = new QCheckBox(tr("Enabled"));
47 enabled_->setChecked(Settings::instance().value("alert_enabled", false).toBool());
49 QHBoxLayout* poiLayout = new QHBoxLayout;
50 poiFileSelector_ = new FileSelector(tr("Poi file (.asc)"));
51 QPushButton* importButton = new QPushButton(tr("Import"));
52 connect(importButton, SIGNAL(clicked(bool)), this, SLOT(importFile()));
53 poiLayout->addWidget(poiFileSelector_, Qt::AlignLeft);
54 poiLayout->addWidget(importButton);
56 soundSelector_ = new SoundSelector;
58 QLabel* distanceLabel = new QLabel(tr("Alert distance"));
59 distance_ = new QLineEdit;
60 distance_->setText(QString::number(Settings::instance().value("alert_distance", 300).toInt()));
61 distance_->setValidator(new QIntValidator(0, 5000, this));
62 QHBoxLayout* distance = new QHBoxLayout;
63 distance->addWidget(distanceLabel);
64 distance->addWidget(distance_);
65 onlyOnRoute_ = new QCheckBox(tr("Alert only if poi is in route"));
66 onlyOnRoute_->setChecked(Settings::instance().value("alert_only_on_route", true).toBool());
68 ButtonBox* buttons = new ButtonBox;
69 buttons->addButton(tr("Save"), this, SLOT(saveSettings()), QDialogButtonBox::AcceptRole);
71 QHBoxLayout* layout = new QHBoxLayout;
72 QVBoxLayout* left = new QVBoxLayout;
74 left->addWidget(enabled_);
75 left->addLayout(poiLayout);
76 left->addWidget(soundSelector_);
77 left->addLayout(distance);
78 left->addWidget(onlyOnRoute_);
80 layout->addLayout(left, Qt::AlignLeft);
81 layout->addWidget(buttons);
87 void PoiSettings::importFile()
89 if(!poiFileSelector_->importFile(PoiAlerts::getPoiDir(),
91 PoiReader::getFormatPattern(),
94 qDebug() << "Unable to import";
98 void PoiSettings::loadFiles()
100 QDir poiDir(PoiAlerts::getPoiDir());
102 QString selectedSound = Settings::instance().value("alert_sound", "").toString();
103 soundSelector_->setValue(selectedSound);
105 poiFileSelector_->clear();
106 QString selectedPoi = Settings::instance().value("alert_poi_file", "").toString();
107 poiFileSelector_->loadFiles(PoiAlerts::getPoiDir(), PoiReader::getFormatPattern());
108 poiFileSelector_->selectByValue(selectedPoi);
112 void PoiSettings::setVisible(bool visible)
119 QDialog::setVisible(visible);
122 void PoiSettings::saveSettings()
124 if(poiFileSelector_->currentIndex() < 0 && enabled_->isChecked())
126 QMaemo5InformationBox::information(this, tr("No poi file selected"));
130 Settings::instance().setValue("alert_enabled", enabled_->isChecked());
131 Settings::instance().setValue("alert_only_on_route", onlyOnRoute_->isChecked());
132 Settings::instance().setValue("alert_distance", distance_->text().toInt());
133 Settings::instance().setValue("alert_sound", soundSelector_->value());
134 Settings::instance().setValue("alert_poi_file", poiFileSelector_->value());
138 if(!PoiAlerts::instance().loadConfig())
140 QMaemo5InformationBox::information(0, tr("Unable to load poi file: %1.").arg(PoiAlerts::instance().error()),
141 QMaemo5InformationBox::NoTimeout);