/*
* Mainwindow for speedFreak project
*
-- * @author Rikhard Kuutti <rikhard.kuutti@fudeco.com>
++ * @author Rikhard Kuutti <rikhard.kuutti@fudeco.com>
++ * @author Toni Jussila <toni.jussila@fudeco.com>
* @copyright (c) 2010 Speed Freak team
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
#include <QDesktopServices>
#include <QUrl>
+#include <QSettings>
+#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
{
ui->setupUi(this);
+ QCoreApplication::setOrganizationName("Fudeco Oy");
+ QCoreApplication::setOrganizationDomain("fudeco.com");
+ QCoreApplication::setApplicationName("Speed Freak");
+
creditsDialog = new CreditsDialog;
routeSaveDialog = new RouteSaveDialog;
+ settingsDialog = new SettingsDialog;
+ connect(settingsDialog,SIGNAL(sendregistration()),this,SLOT(regUserToServer()));
+ connect(settingsDialog,SIGNAL(userNameChanged()),this,SLOT(userLogin()));
+ topResultDialog = new TopResultDialog;
+ connect(topResultDialog, SIGNAL(refreshCategoryList()), this, SLOT(clientRequestCategoryList()));
+ connect(topResultDialog, SIGNAL(refreshTopList(int)), this, SLOT(clientRequestTopList(int)));
+ accstart = NULL;
+
+ httpClient = new HttpClient(this);
+ connect(httpClient->myXmlreader, SIGNAL(receivedCategoryList()), this, SLOT(setCategoryCompoBox()));
+ connect(httpClient->myXmlreader, SIGNAL(receivedTop10List()), this, SLOT(showTop10()));
+
+ welcomeDialog = new WelcomeDialog;
+ welcomeDialog->show();
+
+ //Button settings
+ ui->pushButtonAccelerate->setAutoFillBackground(true);
+ ui->pushButtonAccelerate->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+ ui->pushButtonRoute->setAutoFillBackground(true);
+ ui->pushButtonRoute->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+ ui->pushButtonResults->setAutoFillBackground(true);
+ ui->pushButtonResults->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+ ui->pushButtonSettings->setAutoFillBackground(true);
+ ui->pushButtonSettings->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+ ui->pushButtonWWW->setAutoFillBackground(true);
+ ui->pushButtonWWW->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
}
MainWindow::~MainWindow()
{
delete ui;
-
delete routeSaveDialog;
+
+ if(!accstart)
+ delete accstart;
}
void MainWindow::changeEvent(QEvent *e)
{
routeSaveDialog->show();
}
+
+void MainWindow::on_pushButtonSettings_clicked()
+{
+ settingsDialog->show();
+}
+
+void MainWindow::on_pushButtonAccelerate_clicked()
+{
+ if(!accstart)
+ accstart = new accelerationstart(this);
+ accstart->show();
+}
+
+void MainWindow::on_pushButtonResults_clicked()
+{
+ topResultDialog->show();
+}
+
+/**
+ *This slot function is called when ever mytTopResultDialog emits signal refreshCategoryList button clicked.
+ */
+void MainWindow::clientRequestCategoryList()
+{
+ httpClient->requestCategories();
+}
+
+/**
+ *This slot function is called when ever mytTopResultDialog emits signal refreshTopList button clicked.
+ */
+void MainWindow::clientRequestTopList(int index)
+{
+ qDebug() << "index" << index << httpClient->myXmlreader->myCategoryList->getRecentCategory(index);
+ QString limit = QString::number(topResultDialog->getLimitNr());
+ httpClient->requestTopList(httpClient->myXmlreader->myCategoryList->getRecentCategory(index), limit);
+}
+
+/**
+ *This function is used to set items to category combobox. Top-tab view.
+ *@param
+ */
+void MainWindow::setCategoryCompoBox()
+{
+ qDebug() << "_setCategoryCompoBox";
+ topResultDialog->setCompoBoxCategories(httpClient->myXmlreader->myCategoryList->getCategoryList());
+}
+
+/**
+ *This function prcesses UI updating after a new top10List has been received.
+ *@todo Check where limitNr is taken, fixed or user input, see on_comboBoxTopCategory_currentIndexChanged.
+ */
+void MainWindow::showTop10()
+{
+ qDebug() << "_showTop10";
+ int ind = topResultDialog->getRecentCategoryIndex();
+ setListViewTopList(httpClient->myXmlreader->myCategoryList->getRecentCategory(ind), topResultDialog->getLimitNr());
+}
+
+/**
+ *This function is used to set items to labelTopList. Top-tab view.
+ *@param Category
+ *@param Size, number of results.
+ */
+void MainWindow::setListViewTopList(QString category, int size)
+{
+ qDebug() << "_setListViewTopList" << category;
+ QString topList;
+ topList.append(httpClient->myXmlreader->myCategoryList->getTopList(category, size));
+ topResultDialog->showTopList(topList);
+}
+
+void MainWindow::regUserToServer()
+{
+ httpClient->requestRegistration();
+}
+
+void MainWindow::userLogin()
+{
+ httpClient->checkLogin();
+}
ui(new Ui::RouteSaveDialog)
{
ui->setupUi(this);
+ this->setWindowTitle("Tracking");
+ routeDialog = new RouteDialog;
+
+ //Button settings
+ buttonStatus = true;
+ pixmapRouteStop = new QPixmap("Graphics/route_stop.png");
+ pixmapRoutePlay = new QPixmap("Graphics/route_play.png");
+ iconRouteStop = new QIcon(*pixmapRouteStop);
+ iconRoutePlay = new QIcon(*pixmapRoutePlay);
+ QSize iconSize(125, 125);
+ ui->buttonRouteStartStop->setIconSize(iconSize);
+ ui->buttonRouteStartStop->setIcon(*iconRoutePlay);
+ ui->buttonRouteStartStop->setAutoFillBackground(true);
+ ui->buttonRouteStartStop->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+
+ //Satellite picture and label
ui->labelRouteSatelliteStatus->setVisible(0);
ui->labelRouteSatellitePicture->setVisible(0);
- ui->labelRouteSatellitePicture->setPixmap(QPixmap("satellite_vista.png"));
+ //ui->labelRouteSatellitePicture->setPixmap(QPixmap("Graphics/satellite_vista.png"));
timerSatellitePicture = new QTimer();
timerSatellitePicture->setInterval(400);
connect(timerSatellitePicture, SIGNAL(timeout()),this, SLOT(timerSatellitePictureTimeout()));
+
+ //Route picture and label
+ ui->labelRouteStatus->setVisible(0);
+ ui->labelRoutePicture->setVisible(0);
+ timerRoutePicture = new QTimer();
+ timerRoutePicture->setInterval(400);
+ connect(timerRoutePicture, SIGNAL(timeout()),this, SLOT(timerRoutePictureTimeout()));
+
+ //GPS speed label
+ ui->labelGpsSpeed->setVisible(0);
+
+ //GPS
+ location = new Maemo5Location(this);
+ gpsData = new GPSData(location);
+ connect(location,SIGNAL(agnss()),this,SLOT(gpsStatus()));
}
/**
RouteSaveDialog::~RouteSaveDialog()
{
delete ui;
+ delete timerSatellitePicture;
+ delete timerRoutePicture;
+ delete location;
+ delete gpsData;
+ delete routeDialog;
+ delete pixmapRouteStop;
+ delete pixmapRoutePlay;
+ delete iconRouteStop;
+ delete iconRoutePlay;
}
void RouteSaveDialog::changeEvent(QEvent *e)
*/
void RouteSaveDialog::on_buttonRouteStartStop_clicked()
{
- if ( ui->buttonRouteStartStop->text() == "Start" )
+ //If start button clicked
+ if ( buttonStatus == true )
{
- ui->buttonRouteStartStop->setText("Stop");
- ui->labelRouteSatelliteStatus->setText("Searching satellite");
- ui->labelRouteSatelliteStatus->setVisible(1);
- ui->labelRouteSatellitePicture->setVisible(1);
- timerSatellitePicture->start();
+ buttonStatus = false;
+ ui->buttonRouteStartStop->setIcon(*iconRouteStop);
+ location->startPollingGPS();
+ gpsStatus();
}
else
{
- ui->buttonRouteStartStop->setText("Start");
+ buttonStatus = true;
+ ui->buttonRouteStartStop->setIcon(*iconRoutePlay);
+
+ //Satellite picture and label
+ ui->labelRouteSatelliteStatus->setText("Searching satellite");
ui->labelRouteSatelliteStatus->setVisible(0);
ui->labelRouteSatellitePicture->setVisible(0);
timerSatellitePicture->stop();
+
+ //Route picture and label
+ ui->labelRouteStatus->setVisible(0);
+ ui->labelRoutePicture->setVisible(0);
+ timerRoutePicture->stop();
+ location->stopPollingGPS();
+ routeDialog->show();
+
+ //GPS speed label
+ ui->labelGpsSpeed->setVisible(0);
+
+ //Stop route recording
+ gpsData->stopRouteRecording();
}
}
}
timerSatellitePicture->start();
}
+
+ /**
+ *This slot function is called when route picture timer timeout(400ms).
+ */
+ void RouteSaveDialog::timerRoutePictureTimeout()
+ {
+ //If route picture visible.
+ if (ui->labelRoutePicture->isVisible() == 1)
+ {
+ ui->labelRouteStatus->setVisible(0);
+ ui->labelRoutePicture->setVisible(0);
+ }
+ else
+ {
+ ui->labelRouteStatus->setVisible(1);
+ ui->labelRoutePicture->setVisible(1);
+ }
+ timerRoutePicture->start();
+ }
+
+ void RouteSaveDialog::gpsStatus()
+ {
+ //IF GPS start button clicked
+ if (buttonStatus == false)
+ {
+ //If GPS find 4 satellite.
+ if (location->getSatellitesInUse() >= 4)
+ {
+ //Satellite picture and label
+ ui->labelRouteSatelliteStatus->setText("GPS Ready");
+ ui->labelRouteSatelliteStatus->setVisible(1);
+ ui->labelRouteSatellitePicture->setVisible(1);
+ timerSatellitePicture->stop();
+
+ //Route picture and label
+ ui->labelRouteStatus->setText("Recorded " + QString::number(gpsData->roundCounter) + " route point");
+ ui->labelRouteStatus->setVisible(1);
+ ui->labelRoutePicture->setVisible(1);
+ timerRoutePicture->start();
+
+ //Set GPS speed.
+ gpsSpeed.sprintf("%.0f",location->getSpeed());
+ ui->labelGpsSpeed->setText(gpsSpeed + " km/h");
+ ui->labelGpsSpeed->setVisible(1);
+
+ //Start route recording
+ gpsData->startRouteRecording();
+ }
+
+ //If GPS find less than 4 satellite.
+ else
+ {
+ //Satellite picture and label
+ ui->labelRouteSatelliteStatus->setText("Searching satellite");
+ ui->labelRouteSatelliteStatus->setVisible(1);
+ ui->labelRouteSatellitePicture->setVisible(1);
+ timerSatellitePicture->start();
+
+ //Route picture and label
+ ui->labelRouteStatus->setVisible(0);
+ ui->labelRoutePicture->setVisible(0);
+ timerRoutePicture->stop();
+
+ //GPS speed label
+ ui->labelGpsSpeed->setVisible(0);
+ }
+ }
+ else
+ {
+ //Satellite picture and label
+ ui->labelRouteSatelliteStatus->setText("Searching satellite");
+ ui->labelRouteSatelliteStatus->setVisible(0);
+ ui->labelRouteSatellitePicture->setVisible(0);
+ timerSatellitePicture->stop();
+
+ //Route picture and label
+ ui->labelRouteStatus->setVisible(0);
+ ui->labelRoutePicture->setVisible(0);
+ timerRoutePicture->stop();
+
+ //GPS speed label
+ ui->labelGpsSpeed->setVisible(0);
+ }
+ }
# -------------------------------------------------
# Project created by QtCreator 2010-03-29T09:21:42
+ # @author Speed Freak team
+ # @copyright (c) 2010 Speed Freak team
+ # @license http://opensource.org/licenses/gpl-license.php GNU Public License
# -------------------------------------------------
+QT += dbus \
+ network \
+ xml
TARGET = speedfreak
TEMPLATE = app
SOURCES += main.cpp \
creditsdialog.cpp \
routedialog.cpp \
routesavedialog.cpp \
+ welcomedialog.cpp \
+ usersettings.cpp \
+ resultdialog.cpp \
+ instructionsdialog.cpp \
+ settingsdialog.cpp \
+ accelerationstart.cpp \
+ accrealtimedialog.cpp \
+ accelerometer.cpp \
+ movingaverage.cpp \
+ calculate.cpp \
+ calibratedialog.cpp \
+ topresultdialog.cpp \
+ categorylist.cpp \
+ httpclient.cpp \
+ xmlreader.cpp \
- xmlwriter.cpp
++ xmlwriter.cpp \
+ gpsdata.cpp \
+ maemo5locationprivate.cpp \
+ maemo5location.cpp
++
HEADERS += mainwindow.h \
creditsdialog.h \
routedialog.h \
routesavedialog.h \
+ welcomedialog.h \
+ usersettings.h \
+ resultdialog.h \
+ instructionsdialog.h \
+ settingsdialog.h \
+ accelerationstart.h \
+ accrealtimedialog.h \
+ accelerometer.h \
+ movingaverage.h \
+ calculate.h \
+ calibratedialog.h \
+ topresultdialog.h \
+ categorylist.h \
+ httpclient.h \
+ xmlreader.h \
+ xmlwriter.h
+ gpsdata.h \
+ maemo5locationprivate.h \
+ maemo5location.h
++
FORMS += mainwindow.ui \
creditsdialog.ui \
routedialog.ui \
- routesavedialog.ui
+ routesavedialog.ui \
+ welcomedialog.ui \
+ resultdialog.ui \
+ instructionsdialog.ui \
+ settingsdialog.ui \
+ accelerationstartdialog.ui \
+ accrealtimedialog.ui \
+ calibratedialog.ui \
+ topresultdialog.ui
RESOURCES += graphics.qrc
+
+ contains(QT_CONFIG, hildon):CONFIG += hildon
+ CONFIG += link_pkgconfig
+
+ # Enable this to disable debugging
+ DEFINES += QT_NO_DEBUG_OUTPUT
+ target.path += /usr/lib
+ devincludes.files = $$HEADERS
+ devincludes.path += /usr/include/$$TEMPLATE$$TARGET
+ INSTALLS += target \
+ devincludes
+ PKGCONFIG += glib-2.0 \
+ liblocation
+ exists(/usr/lib/liblocation.so) {
+ DEFINES += LIBLOCATION
+ message(liblocation found)
+ }