1 /****************************************************************************
3 ** Copyright (C) 2011 Tito Eritja Real <jtitoo@gmail.com>
5 ** This program is free software: you can redistribute it and/or modify
6 ** it under the terms of the GNU General Public License as published by
7 ** the Free Software Foundation, either version 3 of the License, or
8 ** (at your option) any later version.
10 ** This program is distributed in the hope that it will be useful,
11 ** but WITHOUT ANY WARRANTY; without even the implied warranty of
12 ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 ** GNU General Public License for more details.
15 ** You should have received a copy of the GNU General Public License
16 ** along with this program. If not, see <http://www.gnu.org/licenses/>.
18 ****************************************************************************/
20 #include "settingsWindow.h"
21 #include "windowMap.h"
22 #include "ui_settingsWindow.h"
24 #include <QAbstractItemView>
25 #include <QFileDialog>
26 #include <QColorDialog>
27 #include <QCloseEvent>
30 * populate settings widget class
33 SettingsWindow::SettingsWindow(WindowMap *parent, Settings *sett, Log *log)
35 activitySettings(sett),
38 ui(new Ui::SettingsWindow){
42 currentDir = new QDir(APPLICATION_PATH);
44 // Centering all TypeActivity items
45 QAbstractItemView *viewType = ui->typeActivity->view();
46 QAbstractItemModel *modelType = viewType->model();
49 for(int i=0; i < ui->typeActivity->count();i++){
51 modelType->setData(modelType->index(i, 0), QVariant(Qt::AlignCenter), Qt::TextAlignmentRole);
54 QColor color = QColor(activitySettings->getTrackColor());
55 ui->colorLabel->setText(color.name());
56 ui->colorLabel->setPalette(QPalette(color));
57 ui->colorLabel->setAutoFillBackground(true);
59 // Centering GPS interval items
60 QAbstractItemView *viewGPS = ui->gpsInterval->view();
61 QAbstractItemModel *modelGPS = viewGPS->model();
63 for(int i=0; i < ui->gpsInterval->count();i++){
64 modelGPS->setData(modelGPS->index(i, 0), QVariant(Qt::AlignCenter), Qt::TextAlignmentRole);
67 // Centering MapType items
68 QAbstractItemView *viewMaps = ui->mapsType->view();
69 QAbstractItemModel *modelMaps = viewMaps->model();
71 for(int i=0; i < ui->mapsType->count();i++){
72 modelMaps->setData(modelMaps->index(i, 0), QVariant(Qt::AlignCenter), Qt::TextAlignmentRole);
75 currentDir->setPath(APPLICATION_PATH);
77 connect(ui->browseButton, SIGNAL(clicked()), SLOT(browse()));
78 connect(ui->colorButton, SIGNAL(clicked()), this, SLOT(setColor()));
80 connect(ui->typeActivity,SIGNAL(currentIndexChanged(int)),this,SLOT(changeEditText()));
81 connect(ui->tcxButton,SIGNAL(toggled(bool)),this,SLOT(changeTCXTypeFile(bool)));
83 // if simulating mode connect with gpssimulate
89 SettingsWindow::~SettingsWindow()
94 void SettingsWindow::changeEditText(){
95 ui->fileCombo->setEditText(QString(APPLICATION_PATH).append(QDateTime::currentDateTime().toString(CONTINOUS_DATE_FORMAT))
96 .append("_").append(ui->typeActivity->currentText()).append(getExtension()));
99 void SettingsWindow::changeTCXTypeFile(bool checked){
103 extension=QString(".tcx");
105 extension=QString(".gpx");
107 ui->fileCombo->setEditText(QString(APPLICATION_PATH).append(QDateTime::currentDateTime().toString(CONTINOUS_DATE_FORMAT))
108 .append("_").append(ui->typeActivity->currentText()).append(extension));
112 QString SettingsWindow::getExtension(){
114 if(ui->tcxButton->isChecked()){
115 return QString(".tcx");
117 return QString(".gpx");
121 void SettingsWindow::showEvent(QShowEvent *){
123 if(activityMap->simulatingGPS()){
124 setWindowTitle(tr("Simulating GPS Activity"));
125 ui->xmlTypeLabel->setVisible(false);
126 ui->gpxButton->setVisible(false);
127 ui->tcxButton->setVisible(false);
128 //ui->xmlTypeLayout->setVisible(false);
131 setWindowTitle(tr("GPS Activity"));
132 ui->xmlTypeLabel->setVisible(true);
133 //ui->xmlTypeLayout->setVisible(true);
134 ui->gpxButton->setVisible(true);
135 ui->tcxButton->setVisible(true);
136 ui->fileCombo->setEnabled(true);
137 ui->browseButton->setEnabled(true);
138 ui->fileCombo->setEditText(QString(APPLICATION_PATH).append(QDateTime::currentDateTime().toString(CONTINOUS_DATE_FORMAT))
139 .append("_").append(ui->typeActivity->currentText()).append(getExtension()));
142 //if(activitySettings->getIsConfigured() && !activityMap->simulatingGPS()){
143 if(activitySettings->getIsConfigured()){
144 //log->debug("DISABLING BUTTONS...");
145 ui->browseButton->setEnabled(false);
146 ui->fileCombo->setEnabled(false);
147 ui->gpxButton->setEnabled(false);
148 ui->tcxButton->setEnabled(false);
152 void SettingsWindow::browse(){
154 //log->debug("browse slot...");
155 //log->debug("current dir:" + currentDir->path());
159 if(activityMap->simulatingGPS()){
160 //log->debug("simulating GPS...");
161 directory = QFileDialog::getOpenFileName(this,tr("Open XML Files"), currentDir->path(), tr("XML Files (*.gpx *.tcx)"));
163 directory = QFileDialog::getExistingDirectory(this, tr("Open Directory"),currentDir->path(),
164 QFileDialog::ShowDirsOnly
165 | QFileDialog::DontResolveSymlinks);
168 //QString directory = QFileDialog::getExistingDirectory (this, tr("Directory"), currentDir->path());
169 //QString directory = QFileDialog::getExistingDirectory (this, tr("Directory"), "./");
172 log->debug("directory:" + directory);
173 if ( directory.isNull() == false )
175 currentDir->setPath(directory);
177 log->debug("going to catch file...");
179 if (!directory.isEmpty()) {
180 if (ui->fileCombo->findText(directory) == -1)
181 ui->fileCombo->addItem(directory);
182 ui->fileCombo->setCurrentIndex(ui->fileCombo->findText(directory));
188 void SettingsWindow::setColor(){
191 QColor color = QColorDialog::getColor(QColor(activitySettings->getTrackColor()), this);
194 ui->colorLabel->setText(color.name());
195 ui->colorLabel->setPalette(QPalette(color));
196 ui->colorLabel->setAutoFillBackground(true);
197 activitySettings->setTrackColor(color.name());
202 void SettingsWindow::closeEvent(QCloseEvent *event){
203 if(!activitySettings->getIsConfigured()){
204 this->parentWidget()->hide();
205 this->parentWidget()->parentWidget()->show();
209 if(activityMap->simulatingGPS()&&!activityMap->hasTrackToSimulate()){
219 void SettingsWindow::accept(){
222 log->debug("--- SettingsWindows --- closeEvent ");
224 if(!activitySettings->getIsConfigured()){
226 // first time configuration
228 activitySettings->setActivity(ui->typeActivity->currentText());
229 activitySettings->setGpsInterval(intervalFromCombo(ui->gpsInterval->currentIndex()));
231 log->debug(QString("---- ONLINE:%1").arg(ui->onlineButton->isChecked()));
232 activitySettings->setIsOnline(ui->onlineButton->isChecked());
234 activitySettings->setIsCache(ui->tileCacheOn->isChecked());
235 activityMap->setIsCacheEnabled(ui->tileCacheOn->isChecked());
237 activitySettings->setXmlFile(ui->fileCombo->currentText());
239 activitySettings->setMapType((MapType)ui->mapsType->currentIndex());
242 log->debug("going to add activity:" + activitySettings->getActivity());
244 activityMap->setTrack(activitySettings->getXmlFile(),activitySettings->getActivity());
245 activityMap->setWindowTitle(nameFromFile(activitySettings->getXmlFile()));
248 activitySettings->setIsConfigured(true);
249 log->debug("starting services");
250 activityMap->startServices();
251 activityMap->changeMapType(activitySettings->getMapType());
256 //activityMap->startSPositioningTimer();
258 if(activityMap->simulatingGPS()){
259 log->debug(QString("going to read from XML, file:%1").arg(activitySettings->getXmlFile()));
260 Track* toDo = readFromXML(activitySettings->getXmlFile());
261 //Track* toDo = readFromXML("/home/user/MyDocs/FitxersGPXiTCX/PobletLaPena.tcx");
262 log->debug("XML readed without problem");
265 activityMap->setTrackToSimulate(toDo->getGpsPoints());
266 activityMap->changeUpdateInterval(activitySettings->getGpsInterval());
268 emit(activityMap->simulatedPossitionUpdated());
269 activityMap->startSimulatePossitioning();
272 activityMap->startAutosaveTimer(60000*TIME_MIN_TIMEAUTOSAVE);
275 activityMap->setWindowTitle("Activity -> " + (activitySettings->getXmlFile()));
276 log->debug("accept done");
279 //need to see what has changed
280 log->debug("going to configure some parameters!");
282 if(activitySettings->getActivity()!=QString(ui->typeActivity->currentText())){
283 activityMap->getTrack()->addActivity(activitySettings->getActivity());
284 log->debug("activity changed to " + activitySettings->getActivity());
286 if(activitySettings->getGpsInterval()!=intervalFromCombo(ui->gpsInterval->currentIndex())){
287 log->debug("interval changed, going to change it from location");
288 activitySettings->setGpsInterval(intervalFromCombo(ui->gpsInterval->currentIndex()));
289 activityMap->changeUpdateInterval(activitySettings->getGpsInterval());
290 log->debug(QString("Interval setted to: %1").arg(activitySettings->getGpsInterval()));
292 if(activitySettings->getIsOnline()!=ui->onlineButton->isChecked()){
293 activitySettings->setIsOnline(ui->onlineButton->isChecked());
294 if(!activitySettings->getIsOnline()){
295 log->debug("SettingsWindow stopNetworking");
296 activityMap->stopNetworking();
297 }if(activitySettings->getIsOnline()){
298 log->debug("SettingsWindow startNetworking");
299 activityMap->startNetworking();
302 if(activitySettings->getIsCache()!=ui->tileCacheOn->isChecked()){
303 activitySettings->setIsCache(ui->tileCacheOn->isChecked());
304 activityMap->setIsCacheEnabled(activitySettings->getIsCache());
307 if(activitySettings->getMapType()!=(MapType)ui->mapsType->currentIndex()){
308 activitySettings->setMapType((MapType)ui->mapsType->currentIndex());
309 activityMap->changeMapType(activitySettings->getMapType());
310 log->debug(QString("Changing maps to: %1").arg(activitySettings->getMapType()));
311 activityMap->clearAllMaps();
315 //activityMap->setCenter(FIRST_LATITUDE,FIRST_LONGITUDE);
319 void SettingsWindow::setActivityType(){
323 int SettingsWindow::intervalFromCombo(int index){
325 log->debug(QString("index from combo:%1").arg(index));
326 int returnValue=2000;
331 returnValue=5000; //5 seconds
334 returnValue=10000; //10 seconds
337 returnValue=20000; //20 seconds
340 returnValue=30000; //20 seconds
347 returnValue=2000; // 2 seconds