From d83d54cbe39ffa872c360c017fccfafc3520e392 Mon Sep 17 00:00:00 2001 From: Tito Eritja Date: Wed, 20 Jul 2011 16:23:27 +0200 Subject: [PATCH] Initial version --- GPSSniffer.png | Bin 6324 -> 79296 bytes GPSSniffer.pro | 7 +- GPSSniffer.pro.user | 266 +++++------ activityinfo.cpp | 19 + activityinfo.h | 19 + constants.h | 48 +- downloadingStatus.cpp | 44 ++ downloadingStatus.h | 20 + loadTracksWindow.h | 19 + loadtracksWindow.cpp | 29 ++ loadtracksWindow.ui | 45 +- log.cpp | 99 ++-- log.h | 19 + main.cpp | 19 + mainWindow.cpp | 26 +- mainWindow.h | 27 +- qtc_packaging/debian_fremantle/COPYING.txt | 674 ++++++++++++++++++++++++++++ qtc_packaging/debian_fremantle/copyright | 9 +- qtc_packaging/debian_harmattan/COPYING.txt | 674 ++++++++++++++++++++++++++++ qtc_packaging/debian_harmattan/copyright | 8 +- qtc_packaging/meego.spec | 34 ++ satellitedialog.cpp | 498 -------------------- satellitedialog.h | 130 ------ settings.cpp | 27 +- settings.h | 23 + settingsWindow.cpp | 28 ++ settingsWindow.h | 19 + settingsWindow.ui | 76 +++- tilesMap.cpp | 81 +++- tilesMap.h | 31 +- track.cpp | 26 ++ track.h | 20 + utils.cpp | 21 +- utils.h | 19 + windowMap.cpp | 359 +++++++++------ windowMap.h | 48 +- 36 files changed, 2446 insertions(+), 1065 deletions(-) mode change 100755 => 100644 GPSSniffer.png create mode 100644 qtc_packaging/debian_fremantle/COPYING.txt create mode 100644 qtc_packaging/debian_harmattan/COPYING.txt create mode 100644 qtc_packaging/meego.spec delete mode 100755 satellitedialog.cpp delete mode 100755 satellitedialog.h diff --git a/GPSSniffer.png b/GPSSniffer.png old mode 100755 new mode 100644 index 3b40f8d9bb3df80728a0ce0fe47a2445e6156b90..24a9cc5e4f0eeada3245c5eb97c7ee8bc855b179 GIT binary patch literal 79296 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 G2=sqp!o7q5 literal 6324 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 ProjectExplorer.Project.ActiveTarget - 2 + 1 ProjectExplorer.Project.EditorSettings @@ -32,7 +32,7 @@ ProjectExplorer.Project.Target.0 Desktop - Desktop + Qt4ProjectManager.Target.DesktopTarget 0 0 @@ -78,7 +78,7 @@ 2 false - Desktop Qt 4.7.3 for GCC (Qt SDK) Release + Release Qt4ProjectManager.Qt4BuildConfiguration 0 @@ -87,7 +87,57 @@ ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit. true - 1 + + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit. + + + qmake + + QtProjectManager.QMakeBuildStep + false + + false + + + Make + + Qt4ProjectManager.MakeStep + false + + + + 2 + Build + + ProjectExplorer.BuildSteps.Build + + + + Make + + Qt4ProjectManager.MakeStep + true + clean + + + 1 + Clean + + ProjectExplorer.BuildSteps.Clean + + 2 + false + + Debug + + Qt4ProjectManager.Qt4BuildConfiguration + 2 + /home/tito/development/GPSSniffer-build-desktop + 5 + ProjectExplorer.ToolChain.Gcc:/usr/bin/g++.x86-linux-generic-elf-32bit. + true + + 2 0 @@ -145,14 +195,14 @@ ProjectExplorer.Project.Target.1 - Harmattan - Harmattan - Qt4ProjectManager.Target.HarmattanDeviceTarget - 2 + Maemo + + Qt4ProjectManager.Target.MaemoDeviceTarget + 0 0 0 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-platform-api/bin/gcc.arm-linux-generic-elf-32bit. + Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. qmake @@ -192,117 +242,17 @@ 2 false - Harmattan Platform API (Qt SDK) Release + Release Qt4ProjectManager.Qt4BuildConfiguration 0 - /home/tito/development/GPSSniffer-build-harmattan - 3 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-platform-api/bin/gcc.arm-linux-generic-elf-32bit. + /home/tito/development/GPSSniffer-build-maemo + 6 + Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. true - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-platform-api/bin/gcc.arm-linux-generic-elf-32bit. - - - qmake - - QtProjectManager.QMakeBuildStep - false - - false - - - Make - - Qt4ProjectManager.MakeStep - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - Make - - Qt4ProjectManager.MakeStep - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - Harmattan Platform API (Qt SDK) Debug - - Qt4ProjectManager.Qt4BuildConfiguration - 2 - /home/tito/development/GPSSniffer-build-harmattan - 3 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-platform-api/bin/gcc.arm-linux-generic-elf-32bit. - true - - - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-nokia-meego-api/bin/gcc.arm-linux-generic-elf-32bit. - - - qmake - - QtProjectManager.QMakeBuildStep - false - - false - - - Make - - Qt4ProjectManager.MakeStep - false - - - - 2 - Build - - ProjectExplorer.BuildSteps.Build - - - - Make - - Qt4ProjectManager.MakeStep - true - clean - - - 1 - Clean - - ProjectExplorer.BuildSteps.Clean - - 2 - false - - MeeGo 1.2 Harmattan API (Qt SDK) Release - - Qt4ProjectManager.Qt4BuildConfiguration - 0 - /home/tito/development/GPSSniffer-build-harmattan - 4 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-nokia-meego-api/bin/gcc.arm-linux-generic-elf-32bit. - true - - - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-nokia-meego-api/bin/gcc.arm-linux-generic-elf-32bit. + Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. qmake @@ -342,16 +292,16 @@ 2 false - MeeGo 1.2 Harmattan API (Qt SDK) Debug + Debug Qt4ProjectManager.Qt4BuildConfiguration 2 - /home/tito/development/GPSSniffer-build-harmattan - 4 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Madde/targets/harmattan-nokia-meego-api/bin/gcc.arm-linux-generic-elf-32bit. + /home/tito/development/GPSSniffer-build-maemo + 6 + Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. true - 4 + 2 @@ -361,15 +311,23 @@ Qt4ProjectManager.MaemoPackageCreationStep - Deploy to Harmattan device + Deploy to Maemo device Qt4ProjectManager.MaemoDeployStep true - 0 - - - - + 2 + + /home/tito/development/GPSSniffer-build-maemo/gpssniffer_0_1_0_armel.deb + + + 192.168.2.15 + + + + + + 2011-07-20T15:22:58 + 2 Deploy @@ -377,7 +335,7 @@ ProjectExplorer.BuildSteps.Deploy 1 - Deploy to Harmattan device + Deploy to Maemo device ProjectExplorer.DefaultDeployConfiguration @@ -426,14 +384,14 @@ ProjectExplorer.Project.Target.2 - Maemo5 - Maemo5 - Qt4ProjectManager.Target.MaemoDeviceTarget + Meego + Meego + Qt4ProjectManager.Target.MeegoDeviceTarget 0 0 0 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. + Qt4ProjectManager.ToolChain.Maemo:/usr/lib/madde/linux-i686/targets/meego-core-armv7l-1.1/bin/gcc.arm-linux-generic-elf-32bit. qmake @@ -473,17 +431,17 @@ 2 false - Qt for Fremantle PR1.3 Devices (Qt SDK) Release + MeeGo 1.2 armv7l Release Qt4ProjectManager.Qt4BuildConfiguration 0 - /home/tito/development/GPSSniffer-build-maemo - 6 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. + /home/tito/development/GPSSniffer-build-meego + 8 + Qt4ProjectManager.ToolChain.Maemo:/usr/lib/madde/linux-i686/targets/meego-core-armv7l-1.1/bin/gcc.arm-linux-generic-elf-32bit. true - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. + Qt4ProjectManager.ToolChain.Maemo:/usr/lib/madde/linux-i686/targets/meego-core-armv7l-1.1/bin/gcc.arm-linux-generic-elf-32bit. qmake @@ -523,13 +481,13 @@ 2 false - Qt for Fremantle PR1.3 Devices (Qt SDK) Debug + MeeGo 1.2 armv7l Debug Qt4ProjectManager.Qt4BuildConfiguration 2 - /home/tito/development/GPSSniffer-build-maemo - 6 - Qt4ProjectManager.ToolChain.Maemo:/home/tito/QtSDK/Maemo/4.6.2/targets/fremantle-pr13/bin/gcc.arm-linux-generic-elf-32bit. + /home/tito/development/GPSSniffer-build-meego + 8 + Qt4ProjectManager.ToolChain.Maemo:/usr/lib/madde/linux-i686/targets/meego-core-armv7l-1.1/bin/gcc.arm-linux-generic-elf-32bit. true 2 @@ -542,31 +500,15 @@ Qt4ProjectManager.MaemoPackageCreationStep - Deploy to Maemo5 device + Deploy to Meego device Qt4ProjectManager.MaemoDeployStep true - 2 - - /home/tito/development/GPSSniffer-build-maemo/gpssniffer_0_1_0_armel.deb - /home/tito/development/GPSSniffer-build-maemo/gpssniffer_0_0_1_armel.deb - /home/tito/development/GPSSniffer-build-maemo/gpssniffer_0_0_1_armel.deb - - - 192.168.2.15 - 10.42.43.100 - 192.168.2.15 - - - - - - - - 2011-07-01T10:36:05 - 2011-06-29T13:45:51 - 2011-07-01T10:15:08 - + 17 + + + + 2 Deploy @@ -574,7 +516,7 @@ ProjectExplorer.BuildSteps.Deploy 1 - Deploy to Maemo5 device + Deploy to Meego device ProjectExplorer.DefaultDeployConfiguration diff --git a/activityinfo.cpp b/activityinfo.cpp index fb06a37..d875d08 100755 --- a/activityinfo.cpp +++ b/activityinfo.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "activityinfo.h" #include "ui_activityinfo.h" #include "track.h" diff --git a/activityinfo.h b/activityinfo.h index 9f4bde6..87409d8 100755 --- a/activityinfo.h +++ b/activityinfo.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef ACTIVITYINFO_H #define ACTIVITYINFO_H diff --git a/constants.h b/constants.h index d9fc9b7..47630b4 100755 --- a/constants.h +++ b/constants.h @@ -1,6 +1,28 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef CONSTANTS_H #define CONSTANTS_H +// tile size in pixels +const int tdim=256; + #ifndef APPLICATION_NAME #define APPLICATION_NAME GPS Sport Sniffer #endif @@ -18,7 +40,11 @@ #endif #ifndef DEBUG_VERBOSITY -#define DEBUG_VERBOSITY 3 +#define DEBUG_VERBOSITY 0 +#endif + +#ifndef NOLOG_VERBOSITY +#define NOLOG_VERBOSITY -1 #endif #ifndef DATE_FORMAT @@ -107,6 +133,10 @@ #define MIN_ICC_ZOOM 8 #endif +#ifndef MAX_ZOOM_DOWNL +#define MAX_ZOOM_DOWNL 16 +#endif + #ifndef TIME_SECONDS_POSSITIONING_PAN #define TIME_SECONDS_POSSITIONING_PAN 7 #endif @@ -127,11 +157,19 @@ #define HTTP_TIMEOUT 3600 #endif +#ifndef ACCURACY_V_MIN +#define ACCURACY_V_MIN 10000 +#endif + +#ifndef ACCURACY_H_MIN +#define ACCURACY_H_MIN 20000 +#endif -enum MapType { MapTypeGoogleMaps=0, - MapTypeICC=1, - MapTypeOpenCycleMaps=2, - MapTypeOpenStreetMaps=3 +enum MapType { MapTypeCloudMade=0, + MapTypeGoogleMaps=1, + MapTypeICC=2, + MapTypeOpenCycleMaps=3, + MapTypeOpenStreetMaps=4 }; enum XMLFileType{XMLFile_GPX=0, diff --git a/downloadingStatus.cpp b/downloadingStatus.cpp index bff11cd..96ac3a6 100644 --- a/downloadingStatus.cpp +++ b/downloadingStatus.cpp @@ -1,6 +1,28 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "downloadingStatus.h" #include "ui_downloadingStatus.h" +#include +#include + DownloadingStatus::DownloadingStatus(QWidget *parent) : QDialog(parent), ui(new Ui::DownloadingStatus) @@ -20,3 +42,25 @@ QProgressBar* DownloadingStatus::getProgressBar(){ void DownloadingStatus::setText(QString text){ ui->label->setText(text); } + +void DownloadingStatus::closeEvent(QCloseEvent *event){ + /* + //event->ignore(); + log->debug("CLOSE EVENT OF LOADTRACKS!!!!!!!!!!!!!!!!!!!"); + QMessageBox::warning(this, tr("GPSSniffer"),QString(tr("No file selected!"))); + this->hide(); + */ + QMessageBox msgBox(this); + msgBox.setText(tr("Are you sure to cancel maps downloading?.")); + msgBox.setIcon(QMessageBox::Warning); + msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel); + msgBox.setDefaultButton(QMessageBox::Cancel); + + int ret = msgBox.exec(); + if (ret == QMessageBox::Cancel) { + event->ignore(); + }else{ + + } + +} diff --git a/downloadingStatus.h b/downloadingStatus.h index 5057a3a..2c883e3 100644 --- a/downloadingStatus.h +++ b/downloadingStatus.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef DOWNLOADINGSTATUS_H #define DOWNLOADINGSTATUS_H @@ -21,6 +40,7 @@ public: private: Ui::DownloadingStatus *ui; + void closeEvent(QCloseEvent *event); }; #endif // DOWNLOADINGSTATUS_H diff --git a/loadTracksWindow.h b/loadTracksWindow.h index d053972..1521b87 100755 --- a/loadTracksWindow.h +++ b/loadTracksWindow.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef LOADTRACKS_H #define LOADTRACKS_H diff --git a/loadtracksWindow.cpp b/loadtracksWindow.cpp index 7db2e25..3584500 100755 --- a/loadtracksWindow.cpp +++ b/loadtracksWindow.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "loadTracksWindow.h" #include "ui_loadtracksWindow.h" @@ -71,10 +90,16 @@ void LoadTracksWindow::browse(){ void LoadTracksWindow::closeEvent(QCloseEvent *event){ + /* //event->ignore(); log->debug("CLOSE EVENT OF LOADTRACKS!!!!!!!!!!!!!!!!!!!"); QMessageBox::warning(this, tr("GPSSniffer"),QString(tr("No file selected!"))); this->hide(); + */ + + this->parentWidget()->hide(); + this->parentWidget()->parentWidget()->show(); + this->hide(); } void LoadTracksWindow::showEvent(QShowEvent *){ @@ -91,6 +116,7 @@ void LoadTracksWindow::accept(){ QString fileName = ui->fileCombo->currentText(); //QString fileName=QString("/home/user/MyDocs/FitxersGPXiTCX/VallDelRiuLac.tcx"); + //QString fileName=QString("/home/user/MyDocs/GPSSniffer/12-07-2011_09-09-16_Cycling.tcx"); if(!fileName.endsWith(".gpx",Qt::CaseInsensitive) && !fileName.endsWith(".tcx",Qt::CaseInsensitive) ){ QMessageBox::warning(this, tr("GPSSniffer"),QString(tr("No file selected!"))); @@ -98,6 +124,8 @@ void LoadTracksWindow::accept(){ Track* toSniff = readFromXML(fileName); log->debug("XML readed without problem"); windowMap->setTrackToSniff(toSniff); + settings->setIsCache(ui->mapCacheOn->isChecked()); + if(windowMap->getMode()==Mode_LoadTracksWindow){ settings->setMapType((MapType)ui->mapsType->currentIndex()); @@ -109,6 +137,7 @@ void LoadTracksWindow::accept(){ windowMap->desactivatePossitionPaint(); } } + windowMap->setIsCacheEnabled(ui->mapCacheOn->isChecked()); windowMap->updateSummary(); windowMap->drawFullTrackMaps(toSniff); settings->setIsConfigured(true); diff --git a/loadtracksWindow.ui b/loadtracksWindow.ui index ab022d8..9fdcf6c 100755 --- a/loadtracksWindow.ui +++ b/loadtracksWindow.ui @@ -39,6 +39,11 @@ + CloudMade (World) + + + + GoogleMaps (World) @@ -122,6 +127,43 @@ + + + + + 0 + 0 + + + + Map cache + + + + + + + + + On + + + false + + + + + + + Off + + + true + + + + + @@ -136,9 +178,6 @@ - verticalLayoutWidget - label_2 - colorLabel diff --git a/log.cpp b/log.cpp index a9e8c3c..458622c 100755 --- a/log.cpp +++ b/log.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "log.h" #include #include @@ -7,33 +26,37 @@ Log::Log(QString fileText,int verbosity) :verbosity(verbosity) { - QString name = QString(APPLICATION_PATH); - name.append(QDate::currentDate().toString(DATE_FORMAT)); - file = new QFile(name.append("_" + fileText)); + if(verbosity>NOLOG_VERBOSITY){ + QString name = QString(APPLICATION_PATH); + name.append(QDate::currentDate().toString(DATE_FORMAT)); + file = new QFile(name.append("_" + fileText)); + + if (!file->open(QIODevice::WriteOnly | QIODevice::Text)){ + qDebug() << "Error: Can not write Log file!"; + return; + } + QTextStream out(file); + out << "start logging\n" << file << "out=" << &out << ", verbosity:" << verbosity << "(-1 no log, 0->debug, 1->info, 2->warn, 3->error)\n"; - if (!file->open(QIODevice::WriteOnly | QIODevice::Text)){ - qDebug() << "Error: Can not write Log file!"; - return; } - QTextStream out(file); - out << "start logging\n" << file << "out=" << &out << ", verbosity:" << verbosity << "(0->debug, 1->info, 2->warn, 3->error)\n"; - } Log::Log(QWidget *win, QString fileText,int verbosity) :verbosity(verbosity) { - QString name = QString(APPLICATION_PATH); - name.append(QDate::currentDate().toString(DATE_FORMAT)); + if(verbosity>NOLOG_VERBOSITY){ + QString name = QString(APPLICATION_PATH); + name.append(QDate::currentDate().toString(DATE_FORMAT)); - file = new QFile(name.append("_" + fileText)); - if (!file->open(QIODevice::WriteOnly | QIODevice::Text)){ - QMessageBox::information(win, tr("GPSSniffer"),tr("Error: Can not write Log file!")); + file = new QFile(name.append("_" + fileText)); + if (!file->open(QIODevice::WriteOnly | QIODevice::Text)){ + QMessageBox::information(win, tr("GPSSniffer"),tr("Error: Can not write Log file!")); - return; + return; + } + QTextStream out(file); + out << "start logging\n"<< file << "out=" << &out << ", verbosity:" << verbosity << "(0->debug, 1->info, 2->warn, 3->error)\n"; } - QTextStream out(file); - out << "start logging\n"<< file << "out=" << &out << ", verbosity:" << verbosity << "(0->debug, 1->info, 2->warn, 3->error)\n"; } Log::~Log(){ @@ -52,37 +75,45 @@ int Log::getVerbosity(){ } void Log::debug(QString msg){ - QTextStream out(file); - if(&out!=0){ - if(verbosity==0){ - out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [DEBUG] " << msg << "\n"; + if(verbosity>NOLOG_VERBOSITY){ + QTextStream out(file); + if(&out!=0){ + if(verbosity==0){ + out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [DEBUG] " << msg << "\n"; + } } } } void Log::info(QString msg){ - QTextStream out(file); - if(&out!=0){ - if(verbosity<=1){ - out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [INFO] " << msg << "\n"; - } + if(verbosity>NOLOG_VERBOSITY){ + QTextStream out(file); + if(&out!=0){ + if(verbosity<=1){ + out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [INFO] " << msg << "\n"; + } + } } } void Log::warn(QString msg){ - QTextStream out(file); - if(&out!=0){ - if(verbosity<=2){ - out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [WARN] " << msg << "\n"; + if(verbosity>NOLOG_VERBOSITY){ + QTextStream out(file); + if(&out!=0){ + if(verbosity<=2){ + out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [WARN] " << msg << "\n"; + } } } } void Log::err(QString msg){ - QTextStream out(file); - if(&out!=0){ - if(verbosity<=3){ - out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [ERROR] " << msg << "\n"; + if(verbosity>NOLOG_VERBOSITY){ + QTextStream out(file); + if(&out!=0){ + if(verbosity<=3){ + out << QDateTime::currentDateTime().toString(CLEAN_DATE_FORMAT)<< " [ERROR] " << msg << "\n"; + } } } } diff --git a/log.h b/log.h index a58380c..824c60c 100755 --- a/log.h +++ b/log.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef LOG_H #define LOG_H diff --git a/main.cpp b/main.cpp index ab7ea88..e283bcb 100755 --- a/main.cpp +++ b/main.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "mainWindow.h" #include diff --git a/mainWindow.cpp b/mainWindow.cpp index 5956b80..bdd6f85 100755 --- a/mainWindow.cpp +++ b/mainWindow.cpp @@ -1,11 +1,21 @@ -// checksum 0xcf61 version 0x30002 -/* - This file was generated by the Mobile Qt Application wizard of Qt Creator. - MainWindow is a convenience class containing mobile device specific code - such as screen orientation handling. - It is recommended not to modify this file, since newer versions of Qt Creator - may offer an updated version of it. -*/ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ #include "mainWindow.h" #include "windowMap.h" diff --git a/mainWindow.h b/mainWindow.h index 5412860..6ddf2a5 100755 --- a/mainWindow.h +++ b/mainWindow.h @@ -1,11 +1,22 @@ -// checksum 0x9a77 version 0x30002 -/* - This file was generated by the Mobile Qt Application wizard of Qt Creator. - MainWindow is a convenience class containing mobile device specific code - such as screen orientation handling. - It is recommended not to modify this file, since newer versions of Qt Creator - may offer an updated version of it. -*/ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef MAINWINDOW_H #define MAINWINDOW_H diff --git a/qtc_packaging/debian_fremantle/COPYING.txt b/qtc_packaging/debian_fremantle/COPYING.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/qtc_packaging/debian_fremantle/COPYING.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/qtc_packaging/debian_fremantle/copyright b/qtc_packaging/debian_fremantle/copyright index 0c494c2..5aeff22 100644 --- a/qtc_packaging/debian_fremantle/copyright +++ b/qtc_packaging/debian_fremantle/copyright @@ -5,19 +5,18 @@ It was downloaded from Upstream Author(s): - - + Tito Eritja Real Copyright: - + Copyright (C) 2011 Tito Eritja Real Tito Eritja Real License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, @@ -32,7 +31,7 @@ License: On Debian systems, the complete text of the GNU General Public License can be found in `/usr/share/common-licenses/GPL'. -The Debian packaging is (C) 2011, tito and +The Debian packaging is (C) 2011, Tito Eritja Real and is licensed under the GPL, see above. diff --git a/qtc_packaging/debian_harmattan/COPYING.txt b/qtc_packaging/debian_harmattan/COPYING.txt new file mode 100644 index 0000000..94a9ed0 --- /dev/null +++ b/qtc_packaging/debian_harmattan/COPYING.txt @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. diff --git a/qtc_packaging/debian_harmattan/copyright b/qtc_packaging/debian_harmattan/copyright index c4d8b32..846b950 100644 --- a/qtc_packaging/debian_harmattan/copyright +++ b/qtc_packaging/debian_harmattan/copyright @@ -5,19 +5,17 @@ It was downloaded from Upstream Author(s): - - + Tito Eritja Real Copyright: - - + Copyright (C) 2011 Tito Eritja Real License: This package is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2 of the License, or + the Free Software Foundation; either version 3 of the License, or (at your option) any later version. This package is distributed in the hope that it will be useful, diff --git a/qtc_packaging/meego.spec b/qtc_packaging/meego.spec new file mode 100644 index 0000000..00827f5 --- /dev/null +++ b/qtc_packaging/meego.spec @@ -0,0 +1,34 @@ +Name: gpssniffer +Summary: +Version: 0.1.0 +Release: 1 +License: +Group: +%description + + +%prep +%setup -q + +%build +# You can leave this empty for use with Qt Creator. +%install +rm -rf %{buildroot} +make INSTALL_ROOT=%{buildroot} install + +%clean +rm -rf %{buildroot} + +BuildRequires: +# %define _unpackaged_files_terminate_build 0 +%files +%defattr(-,root,root,-)/usr +/opt +# Add additional files to be included in the package here. +%pre +# Add pre-install scripts here.%post +/sbin/ldconfig # For shared libraries +%preun +# Add pre-uninstall scripts here.%postun +# Add post-uninstall scripts here. \ No newline at end of file diff --git a/satellitedialog.cpp b/satellitedialog.cpp deleted file mode 100755 index b347f95..0000000 --- a/satellitedialog.cpp +++ /dev/null @@ -1,498 +0,0 @@ -/**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the examples of the Qt Mobility Components. - ** - ** $QT_BEGIN_LICENSE:BSD$ - ** You may use this file under the terms of the BSD license as follows: - ** - ** "Redistribution and use in source and binary forms, with or without - ** modification, are permitted provided that the following conditions are - ** met: - ** * Redistributions of source code must retain the above copyright - ** notice, this list of conditions and the following disclaimer. - ** * Redistributions in binary form must reproduce the above copyright - ** notice, this list of conditions and the following disclaimer in - ** the documentation and/or other materials provided with the - ** distribution. - ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor - ** the names of its contributors may be used to endorse or promote - ** products derived from this software without specific prior written - ** permission. - ** - ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ - - #include "satellitedialog.h" - - #include - - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - #include - - #include "qgeopositioninfosource.h" - #include "qgeosatelliteinfosource.h" - #include "qgeopositioninfo.h" - #include "qgeosatelliteinfo.h" - - class SatelliteWidget : public QWidget - { - public: - SatelliteWidget(QWidget *parent, - SatelliteDialog::Ordering ordering, - SatelliteDialog::StrengthScaling scaling); - - void clearSatellites(); - void satellitesInViewUpdated(const QList &list); - void satellitesInUseUpdated(const QList &list); - - QSize sizeHint() const; - - SatelliteDialog::Ordering ordering() const; - void setOrdering(SatelliteDialog::Ordering ordering); - - SatelliteDialog::StrengthScaling strengthScaling() const; - void setStrengthScaling(SatelliteDialog::StrengthScaling scaling); - - protected: - void paintEvent(QPaintEvent *event); - - private: - static const int numBars = 32; - static const int gapWidth = 1; - static const int barWidth = 3; - static const int spanWidth = gapWidth + barWidth; - static const int borderOffset = 4; - static const int legendTextOffset = 5; - - int textHeight; - int legendHeight; - - QColor inUseColor; - QColor inViewColor; - - SatelliteDialog::Ordering m_ordering; - SatelliteDialog::StrengthScaling m_scaling; - int m_maximumSignalStrength; - - void updateSatelliteList(); - void paintSatellite(QPainter &painter, const QRect &bounds, int index); - void paintLegend(QPainter &painter, const QRect &bounds); - - QList satellitesInView; - QList satellitesInUse; - QList > satellites; - }; - - SatelliteWidget::SatelliteWidget(QWidget *parent, - SatelliteDialog::Ordering ordering, - SatelliteDialog::StrengthScaling scaling) : QWidget(parent), - m_ordering(ordering), - m_scaling(scaling) - { - QPainter painter(this); - textHeight = painter.fontMetrics().height(); - legendHeight = borderOffset + textHeight + 2; - - inViewColor = QColor(192, 192, 255); - inUseColor = QColor(64, 64, 255); - } - - SatelliteDialog::Ordering SatelliteWidget::ordering() const - { - return m_ordering; - } - - void SatelliteWidget::setOrdering(SatelliteDialog::Ordering ordering) - { - if (ordering != m_ordering) { - m_ordering = ordering; - updateSatelliteList(); - } - } - - SatelliteDialog::StrengthScaling SatelliteWidget::strengthScaling() const - { - return m_scaling; - } - - void SatelliteWidget::setStrengthScaling(SatelliteDialog::StrengthScaling scaling) - { - if (scaling != m_scaling) { - m_scaling = scaling; - updateSatelliteList(); - } - } - - bool sortByPrn(const QGeoSatelliteInfo &s1, const QGeoSatelliteInfo &s2) - { - return s1.prnNumber() < s2.prnNumber(); - } - - bool sortBySignalStrength(const QGeoSatelliteInfo &s1, const QGeoSatelliteInfo &s2) - { - return s1.signalStrength() < s2.signalStrength(); - } - - void SatelliteWidget::clearSatellites() - { - satellitesInView.clear(); - satellitesInUse.clear(); - updateSatelliteList(); - } - - void SatelliteWidget::satellitesInViewUpdated(const QList &list) - { - satellitesInView = list; - qSort(satellitesInView.begin(), satellitesInView.end(), sortByPrn); - updateSatelliteList(); - } - - void SatelliteWidget::satellitesInUseUpdated(const QList &list) - { - satellitesInUse = list; - qSort(satellitesInUse.begin(), satellitesInUse.end(), sortByPrn); - updateSatelliteList(); - } - - bool sortPairsByPrn(const QPair &p1, const QPair &p2) - { - return sortByPrn(p1.first, p2.first); - } - - bool sortPairsBySignalStrength(const QPair &p1, const QPair &p2) - { - return sortBySignalStrength(p1.first, p2.first); - } - - void SatelliteWidget::updateSatelliteList() - { - satellites.clear(); - - int useSize = satellitesInUse.size(); - int viewSize = satellitesInView.size(); - - if ((useSize == 0) && (viewSize == 0)) { - update(); - return; - } - - for (int i = 0; i < useSize; ++i) { - if (satellitesInUse.at(i).signalStrength() != 0) - satellites << QPair(satellitesInUse.at(i), true); - } - - QList::iterator end = satellitesInUse.end(); - - for (int i = 0; i < viewSize; ++i) { - if (satellitesInView.at(i).signalStrength() == 0) - continue; - - QList::iterator j = - qBinaryFind( - satellitesInUse.begin(), - end, - satellitesInView.at(i), - sortByPrn - ); - - if (j == end) { - satellites << QPair(satellitesInView.at(i), false); - } - } - - int satSize = satellites.size(); - - if (m_ordering == SatelliteDialog::OrderByPrnNumber) { - qSort(satellites.begin(), satellites.end(), sortPairsByPrn); - m_maximumSignalStrength = 0; - for (int i = 0; i < satSize; ++i) { - if (satellites.at(i).first.signalStrength() > m_maximumSignalStrength) - m_maximumSignalStrength = satellites.at(i).first.signalStrength(); - } - - } else { - qSort(satellites.begin(), satellites.end(), sortPairsBySignalStrength); - m_maximumSignalStrength = satellites.at(satSize - 1).first.signalStrength(); - } - - update(); - } - - void SatelliteWidget::paintEvent(QPaintEvent * /*event*/) - { - QPainter painter(this); - painter.setRenderHint(QPainter::Antialiasing); - - QRect satBounds = QRect(rect().x() + borderOffset, - rect().y() + borderOffset, - rect().width() - 2 * borderOffset, - rect().height() - legendHeight - 2 * borderOffset); - - painter.setPen(QApplication::palette().color(QPalette::WindowText)); - painter.setBrush(QApplication::palette().color(QPalette::Base)); - painter.drawRect(satBounds); - - int size = satellites.size(); - for (int i = 0; i < size; ++i) { - paintSatellite(painter, satBounds, i); - } - - QRect legendBounds = QRect(rect().x() + borderOffset, - rect().height() - legendHeight, - rect().width() - 2 * borderOffset, - legendHeight); - - paintLegend(painter, legendBounds); - } - - void SatelliteWidget::paintSatellite(QPainter &painter, const QRect &bounds, int index) - { - int bars = numBars; - if (m_ordering == SatelliteDialog::OrderBySignalStrength) - bars = satellites.size(); - - double pixelsPerUnit = (double) bounds.width() / (double)(bars * spanWidth + gapWidth); - double spanPixels = pixelsPerUnit * spanWidth; - double gapPixels = pixelsPerUnit * gapWidth; - double barPixels = pixelsPerUnit * barWidth; - - painter.setPen(QApplication::palette().color(QPalette::WindowText)); - if (!satellites.at(index).second) { - painter.setBrush(inViewColor); - } else { - painter.setBrush(inUseColor); - } - - int maximum = 100; - if (m_scaling == SatelliteDialog::ScaleToMaxAvailable) { - maximum = m_maximumSignalStrength; - } - - int i = index; - if (m_ordering == SatelliteDialog::OrderByPrnNumber) - i = satellites.at(index).first.prnNumber() - 1; - - double height = ((double) satellites.at(index).first.signalStrength() / (double) maximum) * bounds.height(); - - QRectF r(bounds.x() + gapPixels + i * spanPixels, bounds.y() + bounds.height() - 1 - height, barPixels, height); - - painter.drawRect(r); - } - - void SatelliteWidget::paintLegend(QPainter &painter, const QRect &bounds) - { - double halfWidth = (double) bounds.width() / 2.0; - - double keyX = bounds.x() + 1; - double textX = keyX + legendHeight + 2 + legendTextOffset; - double y = bounds.y() + 1; - double keyWidth = legendHeight - 2 - borderOffset; - double textWidth = halfWidth - legendHeight - 3 - legendTextOffset; - double height = legendHeight - 2 - borderOffset; - - QRectF viewKeyRect(keyX, y, keyWidth, height); - QRectF viewTextRect(textX, y, textWidth, height); - QRectF useKeyRect(keyX + halfWidth, y, keyWidth, height); - QRectF useTextRect(textX + halfWidth, y, textWidth, height); - - painter.setPen(QApplication::palette().color(QPalette::WindowText)); - - painter.setBrush(inViewColor); - painter.drawRect(viewKeyRect); - - painter.setBrush(inUseColor); - painter.drawRect(useKeyRect); - - painter.setPen(QApplication::palette().color(QPalette::Text)); - painter.drawText(viewTextRect, Qt::AlignLeft, tr("In View")); - painter.drawText(useTextRect, Qt::AlignLeft, tr("In Use")); - } - - QSize SatelliteWidget::sizeHint() const - { - return QSize(parentWidget()->width(), parentWidget()->width() / 2 + legendHeight); - } - - SatelliteDialog::SatelliteDialog(QWidget *parent, - int noSatelliteTimeoutSeconds, - ExitBehaviour exitBehaviour, - Ordering ordering, - StrengthScaling scaling) : QDialog(parent), - m_noSatelliteTimeoutSeconds(noSatelliteTimeoutSeconds), - m_exitBehaviour(exitBehaviour), - m_ordering(ordering), - m_scaling(scaling) - { - noSatelliteTimer = new QTimer(this); - noSatelliteTimer->setInterval(m_noSatelliteTimeoutSeconds * 1000); - noSatelliteTimer->setSingleShot(true); - - connect(noSatelliteTimer, SIGNAL(timeout()), this, SLOT(noSatelliteTimeout())); - - satelliteWidget = new SatelliteWidget(this, ordering, scaling); - - QLabel *titleLabel = new QLabel(tr("Satellite Signal Strength")); - titleLabel->setAlignment(Qt::AlignCenter | Qt::AlignBottom); - - QVBoxLayout *mainLayout = new QVBoxLayout; - mainLayout->addWidget(titleLabel); - mainLayout->addWidget(satelliteWidget); - - #if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) - QAction *switchAction = new QAction(tr("Switch"), this); - switchAction->setSoftKeyRole(QAction::PositiveSoftKey); - - connect(switchAction, SIGNAL(triggered()), this, SLOT(switchButtonClicked())); - addAction(switchAction); - - QAction *cancelAction = new QAction(tr("Cancel"), this); - cancelAction->setSoftKeyRole(QAction::NegativeSoftKey); - - connect(cancelAction, SIGNAL(triggered()), this, SLOT(reject())); - addAction(cancelAction); - - QMenuBar *menuBar = new QMenuBar(this); - menuBar->addAction(switchAction); - menuBar->addAction(cancelAction); - - #if defined(Q_OS_WINCE) - menuBar->setDefaultAction(cancelAction); - #endif - - #else - cancelButton = new QPushButton(tr("Cancel")); - connect(cancelButton, SIGNAL(clicked()), this, SLOT(reject())); - - switchButton = new QPushButton(tr("Switch")); - connect(switchButton, SIGNAL(clicked()), this, SLOT(switchButtonClicked())); - - QHBoxLayout *buttonLayout = new QHBoxLayout; - buttonLayout->addWidget(switchButton); - buttonLayout->addStretch(1); - buttonLayout->addWidget(cancelButton); - - mainLayout->addLayout(buttonLayout); - #endif - - setLayout(mainLayout); - - /*#if defined(Q_OS_SYMBIAN) - // workaround for QTBUG-4771 - oldTitle = windowTitle(); - connect(this, SIGNAL(finished(int)), this, SLOT(restoreWindowTitle())); - #endif*/ - - setWindowTitle(tr("Waiting for GPS fix")); - - setModal(true); - } - - /*#if defined(Q_OS_SYMBIAN) - // workaround for QTBUG-4771 - void SatelliteDialog::restoreWindowTitle() - { - setWindowTitle(oldTitle); - } - #endif*/ - - void SatelliteDialog::connectSources(QGeoPositionInfoSource *posSource, QGeoSatelliteInfoSource *satSource) - { - connect(posSource, SIGNAL(positionUpdated(const QGeoPositionInfo &)), - this, SLOT(positionUpdated(const QGeoPositionInfo &))); - - connect(satSource, SIGNAL(satellitesInViewUpdated(const QList &)), - this, SLOT(satellitesInViewUpdated(const QList &))); - connect(satSource, SIGNAL(satellitesInUseUpdated(const QList &)), - this, SLOT(satellitesInUseUpdated(const QList &))); - } - - void SatelliteDialog::switchButtonClicked() - { - SatelliteDialog::Ordering o = ordering(); - if (o == SatelliteDialog::OrderByPrnNumber) - setOrdering(SatelliteDialog::OrderBySignalStrength); - else if (o == SatelliteDialog::OrderBySignalStrength) - setOrdering(SatelliteDialog::OrderByPrnNumber); - } - - SatelliteDialog::ExitBehaviour SatelliteDialog::exitBehaviour() const - { - return m_exitBehaviour; - } - - void SatelliteDialog::setExitBehaviour(SatelliteDialog::ExitBehaviour exitBehaviour) - { - m_exitBehaviour = exitBehaviour; - } - - SatelliteDialog::Ordering SatelliteDialog::ordering() const - { - return satelliteWidget->ordering(); - } - - void SatelliteDialog::setOrdering(SatelliteDialog::Ordering ordering) - { - satelliteWidget->setOrdering(ordering); - } - - SatelliteDialog::StrengthScaling SatelliteDialog::strengthScaling() const - { - return satelliteWidget->strengthScaling(); - } - - void SatelliteDialog::setStrengthScaling(SatelliteDialog::StrengthScaling scaling) - { - satelliteWidget->setStrengthScaling(scaling); - } - - void SatelliteDialog::noSatelliteTimeout() - { - satelliteWidget->clearSatellites(); - } - - void SatelliteDialog::positionUpdated(const QGeoPositionInfo &/*pos*/) - { - if (m_exitBehaviour == ExitOnFixOrCancel) { - accept(); - } - } - - void SatelliteDialog::satellitesInViewUpdated(const QList &list) - { - noSatelliteTimer->stop(); - satelliteWidget->satellitesInViewUpdated(list); - noSatelliteTimer->start(); - } - - void SatelliteDialog::satellitesInUseUpdated(const QList &list) - { - noSatelliteTimer->stop(); - satelliteWidget->satellitesInUseUpdated(list); - noSatelliteTimer->start(); - } diff --git a/satellitedialog.h b/satellitedialog.h deleted file mode 100755 index 68ee327..0000000 --- a/satellitedialog.h +++ /dev/null @@ -1,130 +0,0 @@ - /**************************************************************************** - ** - ** Copyright (C) 2010 Nokia Corporation and/or its subsidiary(-ies). - ** All rights reserved. - ** Contact: Nokia Corporation (qt-info@nokia.com) - ** - ** This file is part of the examples of the Qt Mobility Components. - ** - ** $QT_BEGIN_LICENSE:BSD$ - ** You may use this file under the terms of the BSD license as follows: - ** - ** "Redistribution and use in source and binary forms, with or without - ** modification, are permitted provided that the following conditions are - ** met: - ** * Redistributions of source code must retain the above copyright - ** notice, this list of conditions and the following disclaimer. - ** * Redistributions in binary form must reproduce the above copyright - ** notice, this list of conditions and the following disclaimer in - ** the documentation and/or other materials provided with the - ** distribution. - ** * Neither the name of Nokia Corporation and its Subsidiary(-ies) nor - ** the names of its contributors may be used to endorse or promote - ** products derived from this software without specific prior written - ** permission. - ** - ** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - ** "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - ** LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - ** A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - ** OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - ** SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - ** LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - ** DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - ** THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - ** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - ** OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE." - ** $QT_END_LICENSE$ - ** - ****************************************************************************/ - - #ifndef QGEOSATELLITEDIALOG_H - #define QGEOSATELLITEDIALOG_H - - #include - #include - - #include - - QTM_BEGIN_NAMESPACE - class QGeoPositionInfoSource; - class QGeoPositionInfo; - class QGeoSatelliteInfoSource; - class QGeoSatelliteInfo; - QTM_END_NAMESPACE - - class SatelliteWidget; - - class QPushButton; - class QTimer; - - QTM_USE_NAMESPACE - - class SatelliteDialog : public QDialog - { - Q_OBJECT - - public: - enum ExitBehaviour { - ExitOnFixOrCancel, - ExitOnCancel - }; - - enum Ordering { - OrderBySignalStrength, - OrderByPrnNumber - }; - - enum StrengthScaling { - ScaleToMaxAvailable, - ScaleToMaxPossible - }; - - SatelliteDialog(QWidget *parent = 0, - int noSatelliteTimeoutSeconds = 30, - ExitBehaviour exitBehaviour = ExitOnFixOrCancel, - Ordering ordering = OrderBySignalStrength, - StrengthScaling scaling = ScaleToMaxPossible); - - void connectSources(QGeoPositionInfoSource *posSource, QGeoSatelliteInfoSource *satSource); - - ExitBehaviour exitBehaviour() const; - void setExitBehaviour(ExitBehaviour exitBehaviour); - - Ordering ordering() const; - void setOrdering(Ordering ordering); - - StrengthScaling strengthScaling() const; - void setStrengthScaling(StrengthScaling scaling); - - private slots: - void positionUpdated(const QGeoPositionInfo &pos); - - void satellitesInViewUpdated(const QList &list); - void satellitesInUseUpdated(const QList &list); - - void switchButtonClicked(); - void noSatelliteTimeout(); - /*#if defined(Q_OS_SYMBIAN) - // workaround for QTBUG-4771 - void restoreWindowTitle(); - #endif*/ - - private: - int m_noSatelliteTimeoutSeconds; - ExitBehaviour m_exitBehaviour; - Ordering m_ordering; - StrengthScaling m_scaling; - - QTimer *noSatelliteTimer; - - SatelliteWidget *satelliteWidget; - QPushButton *switchButton; - QPushButton *cancelButton; - /*#if defined(Q_OS_SYMBIAN) - // workaround for QTBUG-4771 - QString oldTitle; - #endif*/ - }; - - #endif // #ifndef QGEOSATELLITEDIALOG_H diff --git a/settings.cpp b/settings.cpp index 1ee1b7e..6c19b23 100755 --- a/settings.cpp +++ b/settings.cpp @@ -1,10 +1,29 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "settings.h" Settings::Settings(Log *log) :servicesStarted(false),isConfigured(false),log(log),autosaveInterval(5){ - horizontalAccuracy=200; //200 - verticalAccuracy=100; //100 + horizontalAccuracy=ACCURACY_H_MIN; //200 + verticalAccuracy=ACCURACY_V_MIN; //100 trackToSniffColor="#ff0000"; trackColor="#5bff24"; } @@ -14,8 +33,8 @@ Settings::Settings(const Settings& set, Log *log): ,xmlFile(set.xmlFile),servicesStarted(set.servicesStarted),isConfigured(set.isConfigured),log(log){ log->debug("--Settings 2n constuctor ---"); log->debug("isConfigured:" + isConfigured); - horizontalAccuracy=200; - verticalAccuracy=100; + horizontalAccuracy=ACCURACY_H_MIN; + verticalAccuracy=ACCURACY_V_MIN; trackToSniffColor="#ff0000"; trackColor="#5bff24"; } diff --git a/settings.h b/settings.h index fb64302..3a5077e 100755 --- a/settings.h +++ b/settings.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef SETTINGS_H #define SETTINGS_H @@ -11,6 +30,7 @@ private: int gpsInterval; MapType mapType; bool isOnline; + bool isCache; QString xmlFile; QString xmlType; bool servicesStarted; @@ -55,6 +75,9 @@ public: inline bool getIsOnline(){return isOnline;} inline void setIsOnline(bool isOnline){this->isOnline=isOnline;} + inline bool getIsCache(){return isCache;} + inline void setIsCache(bool isCache){this->isCache=isCache;} + inline bool areServicesStarted(){return servicesStarted;} inline void setServicesStarted(bool st){this->servicesStarted=st;} diff --git a/settingsWindow.cpp b/settingsWindow.cpp index cd059ca..d37fb58 100755 --- a/settingsWindow.cpp +++ b/settingsWindow.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "settingsWindow.h" #include "windowMap.h" #include "ui_settingsWindow.h" @@ -212,6 +231,9 @@ void SettingsWindow::accept(){ log->debug(QString("---- ONLINE:%1").arg(ui->onlineButton->isChecked())); activitySettings->setIsOnline(ui->onlineButton->isChecked()); + activitySettings->setIsCache(ui->tileCacheOn->isChecked()); + activityMap->setIsCacheEnabled(ui->tileCacheOn->isChecked()); + activitySettings->setXmlFile(ui->fileCombo->currentText()); activitySettings->setMapType((MapType)ui->mapsType->currentIndex()); @@ -221,9 +243,11 @@ void SettingsWindow::accept(){ activityMap->setTrack(activitySettings->getXmlFile(),activitySettings->getActivity()); + activitySettings->setIsConfigured(true); log->debug("starting services"); activityMap->startServices(); + activityMap->changeMapType(activitySettings->getMapType()); log->debug("done"); //activityMap->startSPositioningTimer(); @@ -269,6 +293,10 @@ void SettingsWindow::accept(){ activityMap->startNetworking(); } } + if(activitySettings->getIsCache()!=ui->tileCacheOn->isChecked()){ + activitySettings->setIsCache(ui->tileCacheOn->isChecked()); + activityMap->setIsCacheEnabled(activitySettings->getIsCache()); + } if(activitySettings->getMapType()!=(MapType)ui->mapsType->currentIndex()){ activitySettings->setMapType((MapType)ui->mapsType->currentIndex()); diff --git a/settingsWindow.h b/settingsWindow.h index d8b0685..79baa70 100755 --- a/settingsWindow.h +++ b/settingsWindow.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef SETTINGSWINDOW_H #define SETTINGSWINDOW_H diff --git a/settingsWindow.ui b/settingsWindow.ui index e84bf40..07ab85b 100755 --- a/settingsWindow.ui +++ b/settingsWindow.ui @@ -46,17 +46,17 @@ - Walking + Cycling - Running + Padding - Cycling + Running @@ -64,6 +64,11 @@ Skiing + + + Walking + + @@ -155,6 +160,11 @@ + CloudMade (World) + + + + GoogleMaps (World) @@ -185,9 +195,12 @@ - + - Offline + Online + + + true buttonGroup @@ -195,12 +208,9 @@ - + - Online - - - true + Offline buttonGroup @@ -209,14 +219,14 @@ - + XML file - + @@ -246,7 +256,7 @@ - + @@ -262,14 +272,14 @@ - + XML type - + @@ -296,11 +306,39 @@ + + + + Map cache + + + + + + + + + On + + + false + + + + + + + Off + + + true + + + + + - formLayoutWidget - offLineButton - onlineButton @@ -338,7 +376,7 @@ - + diff --git a/tilesMap.cpp b/tilesMap.cpp index cff06cb..aa7efbe 100755 --- a/tilesMap.cpp +++ b/tilesMap.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "tilesMap.h" #include "constants.h" #include "log.h" @@ -39,7 +58,8 @@ TilesMap::TilesMap(QNetworkSession *session, QObject *parent = 0, Log* log=0, in longitude(0), width(WIDTH_DEFAULT), height(HEIGHT_DEFAULT), - tilesD(0){ + tilesD(0), + cache(false){ m_mapsDir = QDir(QString(APPLICATION_PATH).append(MAPS_DIR)); m_manager = new QNetworkAccessManager(this); @@ -49,9 +69,9 @@ TilesMap::TilesMap(QNetworkSession *session, QObject *parent = 0, Log* log=0, in m_emptyTile.fill(Qt::lightGray); //log->debug(QString("Is Network accessible?:%1").arg(m_manager->networkAccessible())); - QNetworkDiskCache *cache = new QNetworkDiskCache; - cache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation)); - m_manager->setCache(cache); + QNetworkDiskCache *nCache = new QNetworkDiskCache; + nCache->setCacheDirectory(QDesktopServices::storageLocation(QDesktopServices::CacheLocation)); + m_manager->setCache(nCache); connect(m_manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(handleReplies(QNetworkReply*))); @@ -158,13 +178,17 @@ void TilesMap::getTiles() { request.setAttribute(QNetworkRequest::User, QVariant(grab)); m_pendingReplies << m_manager->get(request); - m_tileRequests[grab]=TileRequest(zoom,QDateTime::currentDateTime(),false); + m_tileRequests[grab]=TileRequest(zoom,QDateTime::currentDateTime(),cache,false); } } } } +void TilesMap::cancelDownloading(){ + +} + int TilesMap::downloadMaps(Track* track_p){ int numTiles = 0; tilesD=0; @@ -180,7 +204,7 @@ int TilesMap::downloadMaps(Track* track_p){ // ading tiles needed by track QList gpsPoints = track_p->getGpsPoints(); int updateProgress=0; - for(int zoom_temp=zoom; zoom_temp < 17; zoom_temp++){ + for(int zoom_temp=zoom; zoom_temp <= MAX_ZOOM_DOWNL; zoom_temp++){ for (int i = 0; i < gpsPoints.size(); ++i) { GpsPoint* point = gpsPoints.at(i); downloadTiles(point->getLatitude(), point->getLongitude(),zoom_temp,&numTiles); @@ -242,7 +266,7 @@ void TilesMap::downloadWindow(int* numTiles,int zoom){ request.setAttribute(QNetworkRequest::User, QVariant(grab)); m_pendingReplies << m_manager->get(request); - m_tileRequests[grab]= TileRequest(zoom,QDateTime::currentDateTime(),true); + m_tileRequests[grab]= TileRequest(zoom,QDateTime::currentDateTime(),true,true); (*numTiles)++; } } @@ -250,8 +274,6 @@ void TilesMap::downloadWindow(int* numTiles,int zoom){ } - - void TilesMap::render(QPainter *p, const QRect &rect) { //log->debug("rendering maps..."); for (int x = 0; x <= m_tilesRect.width(); ++x) @@ -301,33 +323,38 @@ void TilesMap::handleReplies(QNetworkReply *reply){ QDir().mkdir(mapsDir()); } if (!reply->error()){ + if (!img.load(reply, 0)){ img = QImage(); }else{ - if(tr.save){ + if(tr.downloading){ zoomReply=tr.zoom; } - QString fileString = QString(fileUrlProvider()).arg(zoomReply).arg(tp.x()).arg(tp.y()); - if(!QDir(urlProvider()).exists()) - QDir().mkdir(urlProvider()); + if(tr.save){ + QString fileString = QString(fileUrlProvider()).arg(zoomReply).arg(tp.x()).arg(tp.y()); + + if(!QDir(urlProvider()).exists()) + QDir().mkdir(urlProvider()); - if(!QDir(urlProvider().append("%1/").arg(zoomReply)).exists()) - QDir().mkdir(urlProvider().append("%1").arg(zoomReply)); + if(!QDir(urlProvider().append("%1/").arg(zoomReply)).exists()) + QDir().mkdir(urlProvider().append("%1").arg(zoomReply)); + + if(!QDir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())).exists()) + QDir().mkdir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())); - if(!QDir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())).exists()) - QDir().mkdir(urlProvider().append("%1/").arg(zoomReply).append("%1/").arg(tp.x())); - if(tr.save){ QFile file(fileString); if (!file.open(QIODevice::WriteOnly)) { qDebug() << QString("Cannot open file for writing: %1").arg(file.errorString()); } img.save(fileString); - tilesD++; + + if(tr.downloading) + tilesD++; } } } @@ -336,7 +363,7 @@ void TilesMap::handleReplies(QNetworkReply *reply){ m_tileRequests.remove(tp); - if(!tr.save){ + if(!tr.downloading){ m_tileMaps[tp] = QPixmap::fromImage(img); if (img.isNull()){ @@ -350,6 +377,7 @@ void TilesMap::handleReplies(QNetworkReply *reply){ foreach(QPoint tp, m_tileMaps.keys()) if (!bound.contains(tp)) m_tileMaps.remove(tp); + }else{ emit tilesDownloaded(tilesD); } @@ -396,6 +424,9 @@ QString TilesMap::fileUrlProvider(){ case MapTypeICC: dir.append("/icc/%1/%2/%3.png"); break; + case MapTypeCloudMade: + dir.append("/cloudmade/%1/%2/%3.png"); + break; case MapTypeOpenCycleMaps: dir.append("/ocm/%1/%2/%3.png"); break; @@ -422,6 +453,9 @@ QString TilesMap::urlProvider(){ case MapTypeICC: dir.append("/icc/"); break; + case MapTypeCloudMade: + dir.append("/cloudmade/"); + break; case MapTypeOpenCycleMaps: dir.append("/ocm/"); break; @@ -438,9 +472,14 @@ QString TilesMap::mapUrlProvider(){ //m_log->debug("--- mapUrlProvider ---"); QString url("http://"); //m_log->debug(QString("mapType:%1").arg(mapType)); + switch(mapType){ + case MapTypeCloudMade: + url.append("tile.cloudmade.com/e63d1732f3be48299e0c19d6bcefe25c/3/256/%1/%2/%3.png"); + break; case MapTypeGoogleMaps: - url.append("mt1.google.com/vt/&x=%2&y=%3&z=%1"); + url.append("mt1.google.com/vt/lyrs=m@121,bike&hl=es&x=%2&y=%3&z=%1"); + //url.append("mt1.google.com/vt/&x=%2&y=%3&z=%1"); break; case MapTypeICC: url.append("norma.icc.cat/tilecache/tilecache.py/1.0.0/topo3857/%1/%2/%3.png?type=google"); diff --git a/tilesMap.h b/tilesMap.h index 0858489..834581b 100755 --- a/tilesMap.h +++ b/tilesMap.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef TILESMAP_H #define TILESMAP_H @@ -20,8 +39,7 @@ // Use the QtMobility namespace QTM_USE_NAMESPACE -// tile size in pixels -const int tdim=256; + class TileRequest{ @@ -29,14 +47,16 @@ public: QDateTime dateTime; bool save; + bool downloading; int zoom; TileRequest(){} - TileRequest(int z, QDateTime time, bool s){ + TileRequest(int z, QDateTime time, bool s, bool d){ dateTime=time; save=s; zoom=z; + downloading=d; } }; @@ -81,6 +101,9 @@ public: inline void setMapType(MapType m){mapType=m;} inline MapType getMapType(){return mapType;} + inline bool isCacheEnabled(){return cache;} + inline void setIsCacheEnabled(bool value){cache=value;} + //inline void setLatitude(qreal lat){latitude=lat;} inline qreal getLatitude(){return latitude;} @@ -97,6 +120,7 @@ public: void updateTiles(); void updateTiles(qreal lat, qreal lng); + void cancelDownloading(); int downloadMaps(Track* track_p); void downloadTiles(qreal lat, qreal lng, int zoom, int* numTiles); void downloadWindow(int *numTiles, int zoom); @@ -127,6 +151,7 @@ private: int height; int tilesD; + bool cache; qreal latitude; qreal longitude; diff --git a/track.cpp b/track.cpp index e6ea24b..3d3b7a7 100755 --- a/track.cpp +++ b/track.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "track.h" #include #include @@ -290,12 +309,19 @@ Track::Track(QString file,QString nameTrack) addActivity(nameTrack); } +Track::Track(QString fname) + :fileName(fname),name(fname){ + numActivities=0; + addActivity(name); +} + Track::Track() :fileName("noname"),name("noname"){ numActivities=0; addActivity(name); } + Track::~Track(){ for (int i = 0; i < activities.size(); ++i) { delete activities.at(i); diff --git a/track.h b/track.h index 5df908b..4c0b61a 100755 --- a/track.h +++ b/track.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef TRACK_H #define TRACK_H @@ -258,6 +277,7 @@ private: public: explicit Track(QString fileName,QString name); + explicit Track(QString fname); explicit Track(); virtual ~Track(); diff --git a/utils.cpp b/utils.cpp index b48ffad..9b58ba7 100755 --- a/utils.cpp +++ b/utils.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "utils.h" #include "constants.h" #include "track.h" @@ -56,7 +75,7 @@ Track* readFromXML(QString fileName){ qDebug() << "going to read file:" << fileName; - Track* myTrack = new Track(); + Track* myTrack = new Track(fileName); myTrack->addActivity("doesn'tmatter"); if (!file->open(QIODevice::ReadOnly | QIODevice::Text)) { diff --git a/utils.h b/utils.h index 45ec108..b64fec3 100755 --- a/utils.h +++ b/utils.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef UTILS_H #define UTILS_H diff --git a/windowMap.cpp b/windowMap.cpp index 32fcf68..8c388d6 100755 --- a/windowMap.cpp +++ b/windowMap.cpp @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #include "windowMap.h" #include @@ -12,18 +31,18 @@ #include #include - - - - -#include "satellitedialog.h" +//#include "satellitedialog.h" WindowMap::WindowMap(QWidget *parent, Settings* settings_p, Log *log) - : QMainWindow(parent),satelliteInfo(satelliteInfo), satelliteDialog(0), + : QMainWindow(parent), + //satelliteInfo(satelliteInfo), + //satelliteDialog(0), log(log),pressed(false),snapped(false), settings(settings_p),track(0),trackToSniff(0),network(false),slippyMap(0), - waitingForFix(false),validPositions(0),invalidPositions(0),mode(Mode_NewActivityMode),possitionPaint(true),nSession(0),location(0){ + //waitingForFix(false), + isDisplayInit(false), + validPositions(0),invalidPositions(0),mode(Mode_NewActivityMode),possitionPaint(true),nSession(0),location(0){ track = new Track(); trackToSniff = new Track(); @@ -74,7 +93,7 @@ WindowMap::WindowMap(QWidget *parent, Settings* settings_p, Log *log) //log->debug("going to create actions"); loadTrackAction = new QAction(tr("Load track"),this); - downloadMapsAction = new QAction(tr("Download maps"),this); + downloadMapsTrackAction = new QAction(tr("Download maps from track"),this); newActivityAction = new QAction(tr("New activity"),this); simulatedActivityAction = new QAction(tr("Activity simulation"),this); infoAction = new QAction(tr("Activity info"),this); @@ -86,14 +105,14 @@ WindowMap::WindowMap(QWidget *parent, Settings* settings_p, Log *log) startAction = new QAction(tr("Start"), this); startAction->setEnabled(false); tracksAction = new QAction(tr("Load track"), this); - satelliteAction = new QAction(tr("Satellite info."), this); + //satelliteAction = new QAction(tr("Satellite info."), this); startNetworkAction = new QAction(tr("Start Networking"),this); startNetworkAction->setEnabled(false); //log->debug("done, connecting"); connect(loadTrackAction, SIGNAL(triggered()),SLOT(loadTrack())); - connect(downloadMapsAction, SIGNAL(triggered()),SLOT(downloadMapTrack())); + connect(downloadMapsTrackAction, SIGNAL(triggered()),SLOT(downloadMapTrack())); connect(newActivityAction, SIGNAL(triggered()),SLOT(newActivityTrack())); connect(simulatedActivityAction, SIGNAL(triggered()), SLOT(newSimulation())); connect(stopAction, SIGNAL(triggered()), SLOT(stopActivity())); @@ -102,7 +121,7 @@ WindowMap::WindowMap(QWidget *parent, Settings* settings_p, Log *log) connect(lapAction, SIGNAL(triggered()), SLOT(lapActivity())); connect(settingsAction, SIGNAL(triggered()), SLOT(configureSettings())); connect(tracksAction, SIGNAL(triggered()), SLOT(tracksActivity())); - connect(satelliteAction, SIGNAL(triggered()), SLOT(satellite())); + //connect(satelliteAction, SIGNAL(triggered()), SLOT(satellite())); connect(startNetworkAction,SIGNAL(triggered()), SLOT(networkStart())); connect(infoAction, SIGNAL(triggered()), SLOT(info())); @@ -150,7 +169,7 @@ void WindowMap::setMenuLoadTracks(){ #if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) menuBar()->addAction(loadTrackAction); - menuBar()->addAction(downloadMapsAction); + menuBar()->addAction(downloadMapsTrackAction); menuBar()->addAction(newActivityAction); menuBar()->addAction(simulatedActivityAction); menuBar()->addAction(startNetworkAction); @@ -162,7 +181,7 @@ void WindowMap::setMenuLoadTracks(){ QMenu *menu = menuBar()->addMenu("&Options"); menu->clear(); menu->addAction(loadTrackAction); - menu->addAction(downloadMapsAction); + menu->addAction(downloadMapsTrackAction); menu->addAction(newActivityAction); menu->addAction(simulatedActivityAction); menu->addAction(startNetworkAction); @@ -186,7 +205,7 @@ void WindowMap::setMenuActivity(){ menuBar()->addAction(quitAction); - menuBar()->addAction(satelliteAction); + //menuBar()->addAction(satelliteAction); #else QMenu *menu = menuBar()->addMenu("&Options"); @@ -197,7 +216,7 @@ void WindowMap::setMenuActivity(){ menu->addAction(startAction); menu->addAction(tracksAction); menu->addAction(startNetworkAction); - menu->addAction(satelliteAction); + //menu->addAction(satelliteAction); menu->addAction(infoAction); menu->addAction(quitAction); @@ -239,6 +258,7 @@ void WindowMap::startServices(){ startMaps(); } +/* void WindowMap::showSatelliteInfo(){ if(!satelliteInfo) @@ -265,8 +285,9 @@ void WindowMap::showSatelliteInfo(){ } } +*/ - +/* void WindowMap::waitForFix() { if (waitingForFix) return; @@ -299,6 +320,8 @@ void WindowMap::waitForFix() { waitingForFix = false; } +*/ + void WindowMap::stopNetworking(){ network=false; if(nSession) @@ -332,18 +355,24 @@ void WindowMap::startNetworking(){ } nSession = new QNetworkSession(cfg, this); - nSession->open(); - nSession->waitForOpened(-1); - - - connect(nSession, SIGNAL(opened()), this, SLOT(networkSessionOpened())); connect(nSession,SIGNAL(error(QNetworkSession::SessionError)),this,SLOT(error(QNetworkSession::SessionError))); + nSession->open(); + if(nSession->waitForOpened(-1)){ + log->info("session connected"); + + connect(nSession, SIGNAL(opened()), this, SLOT(networkSessionOpened())); + //connect(nSession,SIGNAL(error(QNetworkSession::SessionError)),this,SLOT(error(QNetworkSession::SessionError))); - network=true; - if(slippyMap){ - slippyMap->setNetwork(true); + network=true; + if(slippyMap){ + slippyMap->setNetwork(true); + } + }else{ + log->err(nSession->errorString()); + network=false; } + } } @@ -356,7 +385,6 @@ void WindowMap::networkSessionOpened(){ //log->debug("invalidating map"); slippyMap->setNetwork(true); slippyMap->updateTiles(); - } } @@ -387,11 +415,13 @@ void WindowMap::error(QNetworkSession::SessionError error) //log->debug("enabling startNetworking"); startNetworkAction->setEnabled(true); stopNetworking(); - }else{ - QTimer::singleShot(60000, nSession, SLOT(open())); } + //else{ + // QTimer::singleShot(60000, nSession, SLOT(open())); + //} network=false; - slippyMap->setNetwork(false); + if(slippyMap) + slippyMap->setNetwork(false); } } @@ -421,13 +451,13 @@ void WindowMap::changeMapType(MapType map){ bool WindowMap::checkGPS(){ -#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) +//#if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) location = QGeoPositionInfoSource::createDefaultSource(this); -#else +//#else //With maemo simulator doesn't work, I've to change this. - location=0; -#endif +// location=0; +//#endif if (!location) { if(!simulateGPS) @@ -446,16 +476,86 @@ void WindowMap::startGPS(){ connect(location,SIGNAL(positionUpdated(QGeoPositionInfo)),this,SLOT(positionUpdated(QGeoPositionInfo))); if(!settings->getIsOnline()) location->setPreferredPositioningMethods(QGeoPositionInfoSource::SatellitePositioningMethods); - location->startUpdates(); - waitForFix(); + //waitForFix(); //log->debug("setting signal updateTimeout..."); - connect(location, SIGNAL(updateTimeout()), this, SLOT(waitForFix())); + //connect(location, SIGNAL(updateTimeout()), this, SLOT(waitForFix())); //log->debug("start positioning..."); } startPositioning(); } + +void WindowMap::positionUpdated(const QGeoPositionInfo &pos){ + + //log->info("ACTIVITYMAP-POSSITIONUPDATED!!!"); + //setCenter(pos.coordinate().latitude(), pos.coordinate().longitude()); + + if(pos.isValid() && + pos.attribute(QGeoPositionInfo::HorizontalAccuracy)<=settings->getHorizontalAccuracy() && + pos.attribute(QGeoPositionInfo::VerticalAccuracy)<=settings->getVerticalAccuracy()){ + + GpsPoint* point = new GpsPoint(pos.coordinate().latitude(),pos.coordinate().longitude(),pos.coordinate().altitude(),pos.timestamp(), + pos.attribute(QGeoPositionInfo::GroundSpeed),pos.attribute(QGeoPositionInfo::Direction), + pos.attribute(QGeoPositionInfo::MagneticVariation), + pos.attribute(QGeoPositionInfo::HorizontalAccuracy), + pos.attribute(QGeoPositionInfo::VerticalAccuracy)); + + + // log->debug(point->toString()); + //log->debug("going to add point..."); + track->addPoint(point); + emit(infoWindow->updateSummary()); + validPositions++; + + if(possitionPaint) + setCenter(point->getLatitude(),point->getLongitude()); + + //if(satelliteDialog) + // satelliteDialog->hide(); + + + }else{ + log->debug("position not updated:"); + + log->debug("Horizontal accuracy (meters):" + QString::number(pos.attribute(QGeoPositionInfo::HorizontalAccuracy))); + log->debug("Vertical accuracy (meters):" + QString::number(pos.attribute(QGeoPositionInfo::VerticalAccuracy))); + invalidPositions++; + } + +} + +void WindowMap::simulatedPossitionUpdated(){ + log->info("simulated possition!!!"); + //log->info(QString("num points to simulate:%1").arg(trackToSimulate.size())); + GpsPoint* point= new GpsPoint(0,0,0); + + + if(trackToSimulate.size()>0){ + + point = trackToSimulate.first(); + + log->debug(QString("point to simulate:%1").arg(point->toString())); + track->addPoint(point); + log->debug("going to emit updateSummary!!!"); + emit(infoWindow->updateSummary()); + log->debug("point added to track and updated"); + //log->debug(QString("track num points:%1").arg(track->getNumPoints())); + + trackToSimulate.removeFirst(); + validPositions++; + //log->info(QString("num points to simulate:%1").arg(trackToSimulate.size())); + + //log->debug(QString("Possition paint???????????%1").arg(possitionPaint)); + if(possitionPaint) + setCenter(point->getLatitude(),point->getLongitude()); + } + + + +} + + void WindowMap::setTopLeft(qreal lat, qreal lng){ //log->debug("----setTopLeft----"); @@ -502,6 +602,7 @@ void WindowMap::closeEvent(QCloseEvent *event){ if (ret == QMessageBox::Cancel){ event->ignore(); }else{ + disconnect(nSession,SIGNAL(error(QNetworkSession::SessionError)),this,SLOT(error(QNetworkSession::SessionError))); stopPositioning(); autosave(); settings->setIsConfigured(false); @@ -526,19 +627,20 @@ void WindowMap::closeEvent(QCloseEvent *event){ } } - void WindowMap::showEvent(QShowEvent *){ +void WindowMap::chooseDisplay(){ + if(mode==Mode_NewActivityMode && !settings->getIsConfigured()){ + checkGPS(); + settingsWindow->show(); + //setWindowTitle(settings->getActivity()); + }else if(mode==Mode_LoadTracksWindow && !settings->getIsConfigured()){ + setWindowTitle(QString("Load Tracks ->").append(trackToSniff->getName())); + loadTracksWindow->show(); + } +} - if(mode==Mode_NewActivityMode && !settings->getIsConfigured()){ - checkGPS(); - settingsWindow->show(); - //setWindowTitle(settings->getActivity()); - }else if(mode==Mode_LoadTracksWindow && !settings->getIsConfigured()){ - setWindowTitle(QString("Load Tracks ->").append(trackToSniff->getName())); - loadTracksWindow->show(); - }else{ - fixZoomButtons(); - } + void WindowMap::showEvent(QShowEvent *){ + chooseDisplay(); } void WindowMap::networkStart(){ @@ -567,17 +669,17 @@ void WindowMap::closeEvent(QCloseEvent *event){ qreal lat = slippyMap->getLatitude(); qreal lng = slippyMap->getLongitude(); tilesToDownload=0; - - //QPoint pos; - //pos.setX((width()-downloadingStatus->width())/2); - //pos.setY((height()-downloadingStatus->height())/2); + startNetworking(); downloadingStatus->show(); //downloadingStatus->move(pos); QProgressBar* pb = downloadingStatus->getProgressBar(); int numPoints = trackToSniff->getNumPoints(); - pb->setRange(0,numPoints); + int zoomsToDown = (MAX_ZOOM_DOWNL - slippyMap->getZoom()); + if(zoomsToDown>=0){ + pb->setRange(0,numPoints*zoomsToDown); + } pb->setValue(0); downloadingStatus->setText(QString(tr("Making map requests"))); @@ -609,7 +711,7 @@ void WindowMap::closeEvent(QCloseEvent *event){ mode=Mode_NewActivityMode; settings->setIsConfigured(false); setMenuActivity(); - settingsWindow->show(); + chooseDisplay(); } void WindowMap::newSimulation(){ @@ -617,7 +719,7 @@ void WindowMap::closeEvent(QCloseEvent *event){ simulateGPS=true; settings->setIsConfigured(false); setMenuActivity(); - settingsWindow->show(); + chooseDisplay(); } void WindowMap::info(){ @@ -660,12 +762,15 @@ void WindowMap::tracks(){ } */ + +/* void WindowMap::satellite(){ #if defined(Q_OS_SYMBIAN) || defined(Q_OS_WINCE_WM) || defined(Q_WS_MAEMO_5) || defined(Q_WS_MAEMO_6) showSatelliteInfo(); #endif } +*/ void WindowMap::stopPositioning() { if(simulateGPS){ @@ -725,74 +830,6 @@ void WindowMap::updateSummary(){ emit(infoWindow->updateSummary()); } -void WindowMap::simulatedPossitionUpdated(){ - log->info("simulated possition!!!"); - //log->info(QString("num points to simulate:%1").arg(trackToSimulate.size())); - GpsPoint* point= new GpsPoint(0,0,0); - - - if(trackToSimulate.size()>0){ - - point = trackToSimulate.first(); - - log->debug(QString("point to simulate:%1").arg(point->toString())); - track->addPoint(point); - log->debug("going to emit updateSummary!!!"); - emit(infoWindow->updateSummary()); - log->debug("point added to track and updated"); - //log->debug(QString("track num points:%1").arg(track->getNumPoints())); - - trackToSimulate.removeFirst(); - validPositions++; - //log->info(QString("num points to simulate:%1").arg(trackToSimulate.size())); - - //log->debug(QString("Possition paint???????????%1").arg(possitionPaint)); - if(possitionPaint) - setCenter(point->getLatitude(),point->getLongitude()); - } - - - -} - -void WindowMap::positionUpdated(const QGeoPositionInfo &pos){ - - //log->info("ACTIVITYMAP-POSSITIONUPDATED!!!"); - //setCenter(pos.coordinate().latitude(), pos.coordinate().longitude()); - - if(pos.isValid() && - pos.attribute(QGeoPositionInfo::HorizontalAccuracy)<=settings->getHorizontalAccuracy() && - pos.attribute(QGeoPositionInfo::VerticalAccuracy)<=settings->getVerticalAccuracy()){ - - GpsPoint* point = new GpsPoint(pos.coordinate().latitude(),pos.coordinate().longitude(),pos.coordinate().altitude(),pos.timestamp(), - pos.attribute(QGeoPositionInfo::GroundSpeed),pos.attribute(QGeoPositionInfo::Direction), - pos.attribute(QGeoPositionInfo::MagneticVariation), - pos.attribute(QGeoPositionInfo::HorizontalAccuracy), - pos.attribute(QGeoPositionInfo::VerticalAccuracy)); - - - // log->debug(point->toString()); - //log->debug("going to add point..."); - track->addPoint(point); - emit(infoWindow->updateSummary()); - validPositions++; - - if(possitionPaint) - setCenter(point->getLatitude(),point->getLongitude()); - - if(satelliteDialog) - satelliteDialog->hide(); - - - }else{ - log->debug("position not updated:"); - - log->debug("Horizontal accuracy (meters):" + QString::number(pos.attribute(QGeoPositionInfo::HorizontalAccuracy))); - log->debug("Vertical accuracy (meters):" + QString::number(pos.attribute(QGeoPositionInfo::VerticalAccuracy))); - invalidPositions++; - } - -} void WindowMap::autosave(){ @@ -861,16 +898,18 @@ void WindowMap::showExpanded() #endif } + void WindowMap::paintEvent(QPaintEvent *event) { - fixZoomButtons(); + fixZoomButtons(); log->debug("---- paint Event ----!"); QPainter p; p.begin(this); p.setPen(Qt::black); + #if defined(Q_OS_SYMBIAN) QFont font = p.font(); font.setPixelSize(13); @@ -879,22 +918,25 @@ void WindowMap::paintEvent(QPaintEvent *event) { if (!slippyMap){ log->debug("slippyMap not created!"); - return; - } + displayInit(&p); - slippyMap->render(&p, event->rect()); + }else{ + + slippyMap->render(&p, event->rect()); - //log->info("going to draw tracking route..."); - drawTrack(trackToSniff,&p, settings->getTrackToSniffColor()); + //log->info("going to draw tracking route..."); + drawTrack(trackToSniff,&p, settings->getTrackToSniffColor()); - if(mode==Mode_NewActivityMode){ - //log->info("going to draw actual route..."); - //log->debug(QString("num points track:%1").arg(track->getNumPoints())); - //log->debug("entering to drawTrack"); - drawTrack(track,&p,settings->getTrackColor(),true); - //log->info("done"); + if(mode==Mode_NewActivityMode){ + //log->info("going to draw actual route..."); + //log->debug(QString("num points track:%1").arg(track->getNumPoints())); + //log->debug("entering to drawTrack"); + drawTrack(track,&p,settings->getTrackColor(),true); + //log->info("done"); + } } + //log->info("done"); //p.drawText(rect(), Qt::AlignBottom | Qt::TextWordWrap,"OpenStreetMap maps"); //log->debug("ending Paint event..."); @@ -902,6 +944,34 @@ void WindowMap::paintEvent(QPaintEvent *event) { //log->debug("done... and now?"); } + +void WindowMap::displayInit(QPainter *p){ + + QPixmap emptyTile = QPixmap(tdim,tdim); + emptyTile.fill(Qt::lightGray); + + int numWidth = floor(width()/tdim)+1; + int numHeight = floor(height()/tdim)+1; + qreal tempx = static_cast(width())/tdim; + qreal tempy = static_cast(height())/tdim; + + int width_offset=(tempx-numWidth)*tdim/2; + int height_offset=(tempy-numHeight)*tdim/2; + + QPoint topLeft = QPoint(width_offset,height_offset); + + for (int x = 0; x <= numWidth; ++x){ + for (int y = 0; y <= numHeight; ++y) { + QRect box = QRect(topLeft.x()+x*tdim, topLeft.y()+y*tdim, tdim, tdim); + + p->drawPixmap(box,emptyTile); + } + } + + + +} + void WindowMap::drawFullTrackMaps(Track* track_p){ QList gpsPoints = track_p->getGpsPoints(); @@ -1091,21 +1161,18 @@ void WindowMap::mouseReleaseEvent(QMouseEvent *) { void WindowMap::fixZoomButtons(){ - if(settings->getIsConfigured()){ - int x_in=(width()-zoomInButton->width()); - int y_in=(height()/2-zoomInButton->height()/2); - //log->debug(QString("ZoomIn possition: x=%1,y=%2").arg(x_in).arg(y_in)); - - int x_out=0; - int y_out=(height()/2-zoomOutButton->height()/2); - //log->debug(QString("ZoomOut possition: x=%1,y=%2").arg(x_out).arg(y_out)); + int x_in=(width()-zoomInButton->width()); + int y_in=(height()/2-zoomInButton->height()/2); + //log->debug(QString("ZoomIn possition: x=%1,y=%2").arg(x_in).arg(y_in)); - zoomInButton->move(x_in,y_in); - zoomOutButton->move(x_out,y_out); - zoomInButton->show(); - zoomOutButton->show(); + int x_out=0; + int y_out=(height()/2-zoomOutButton->height()/2); + //log->debug(QString("ZoomOut possition: x=%1,y=%2").arg(x_out).arg(y_out)); - } + zoomInButton->move(x_in,y_in); + zoomOutButton->move(x_out,y_out); + zoomInButton->show(); + zoomOutButton->show(); } void WindowMap::resizeEvent(QResizeEvent * /* event */) diff --git a/windowMap.h b/windowMap.h index acb42c6..350630d 100755 --- a/windowMap.h +++ b/windowMap.h @@ -1,3 +1,22 @@ +/**************************************************************************** +** +** Copyright (C) 2011 Tito Eritja Real +** +** This program is free software: you can redistribute it and/or modify +** it under the terms of the GNU General Public License as published by +** the Free Software Foundation, either version 3 of the License, or +** (at your option) any later version. +** +** This program is distributed in the hope that it will be useful, +** but WITHOUT ANY WARRANTY; without even the implied warranty of +** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +** GNU General Public License for more details. +** +** You should have received a copy of the GNU General Public License +** along with this program. If not, see . +** +****************************************************************************/ + #ifndef ACTIVITYMAP_H #define ACTIVITYMAP_H @@ -27,7 +46,7 @@ class Settings; class ConnectivityHelper; -class SatelliteDialog; +//class SatelliteDialog; // Use the QtMobility namespace @@ -54,6 +73,7 @@ private: bool pressed; bool snapped; bool possitionPaint; + bool isDisplayInit; int tilesToDownload; @@ -75,7 +95,7 @@ private: QAction *startNetworkAction; QAction *loadTrackAction; - QAction *downloadMapsAction; + QAction *downloadMapsTrackAction; QAction *newActivityAction; QAction *simulatedActivityAction; QAction *quitAction; @@ -84,7 +104,7 @@ private: QAction *stopAction; QAction *startAction; QAction *tracksAction; - QAction *satelliteAction; + //QAction *satelliteAction; QAction *infoAction; // Dialogs @@ -96,8 +116,8 @@ private: DownloadingStatus* downloadingStatus; - QGeoSatelliteInfoSource *satelliteInfo; - SatelliteDialog *satelliteDialog; + //QGeoSatelliteInfoSource *satelliteInfo; + //SatelliteDialog *satelliteDialog; Log *log; @@ -107,7 +127,7 @@ private: QList trackToSimulate; - bool waitingForFix; + //bool waitingForFix; int validPositions; int invalidPositions; @@ -126,6 +146,7 @@ private: void mouseReleaseEvent(QMouseEvent *event); void resizeEvent(QResizeEvent * ); + void chooseDisplay(); public: QToolButton *zoomInButton; @@ -142,6 +163,8 @@ public: explicit WindowMap(QWidget *parent = 0,Settings* settings=0, Log *log=0); virtual ~WindowMap(); + void displayInit(QPainter *p); + void fixZoomButtons(); void updateSummary(); void clearAllMaps(); @@ -158,7 +181,7 @@ public: void startGPS(); void startMaps(); - void showSatelliteInfo(); + //void showSatelliteInfo(); void startNetworking(); void stopNetworking(); void setOrientation(ScreenOrientation orientation); @@ -167,7 +190,7 @@ public: inline Track* getTrack(){return track;} inline Track* getTrackToSniff(){return trackToSniff;} inline void setTrackToSimulate(QList toDo){trackToSimulate=toDo;} - inline bool hasTrackToSimulate(){(trackToSimulate.size()>0);} + inline bool hasTrackToSimulate(){return (trackToSimulate.size()>0);} inline void startAutosaveTimer(int milliseconds){autosaveTimer->start(milliseconds);} inline void startSimulatePossitioning(int milliseconds){simulatePossitioningTimer->start(milliseconds);} inline void startSimulatePossitioning(){simulatePossitioningTimer->start();} @@ -179,6 +202,11 @@ public: inline bool simulatingGPS(){return simulateGPS;} inline void setSimulateGPS(bool value){simulateGPS=value;} inline int getTilesToDownload(){return tilesToDownload;} + inline void setIsCacheEnabled(bool value){ + if(slippyMap) + slippyMap->setIsCacheEnabled(value); + } + inline bool isCacheEnabled(){return slippyMap->isCacheEnabled();} void setTrack(QString filename,QString activity); void setCenter(qreal lat, qreal lng); @@ -208,7 +236,7 @@ public: void quit(); - void satellite(); + //void satellite(); void onZoomIn(); void onZoomOut(); @@ -217,7 +245,7 @@ public: //void networkSessionOpened(); - void waitForFix(); + //void waitForFix(); void updateMap(const QRect &r); -- 1.7.9.5