c67c99c03eb0e6a8af98a453737541d3fb303209
[speedfreak] / Client / routesavedialog.cpp
1 /*
2  * Route save dialog class
3  *
4  * @author     Toni Jussila <toni.jussila@fudeco.com>
5  * @copyright  (c) 2010 Speed Freak team
6  * @license    http://opensource.org/licenses/gpl-license.php GNU Public License
7  */
8
9 #include "routesavedialog.h"
10 #include "ui_routesavedialog.h"
11 #include <QDebug>
12
13 /**
14   *Constructor of this class.
15   *@param QWidget pointer to parent object. By default the value is NULL.
16   */
17 RouteSaveDialog::RouteSaveDialog(QWidget *parent) :
18     QDialog(parent), ui(new Ui::RouteSaveDialog){
19
20     qDebug() << "__RouteSaveDialog";
21     ui->setupUi(this);
22     this->setWindowTitle("Tracking");
23
24     routeDialog = NULL;
25     location = NULL;
26     gpsData = NULL;
27
28     //Button settings
29     buttonStatus = true;
30     pixmapRouteStop = new QPixmap("Graphics/route_stop.png");
31     pixmapRouteStart = new QPixmap("Graphics/route_start.png");
32     iconRouteStop = new QIcon(*pixmapRouteStop);
33     iconRouteStart = new QIcon(*pixmapRouteStart);
34     QSize iconSize(125, 125);
35     ui->buttonRouteStartStop->setIconSize(iconSize);
36     ui->buttonRouteStartStop->setIcon(*iconRouteStart);
37     ui->buttonRouteStartStop->setAutoFillBackground(true);
38     ui->buttonRouteStartStop->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
39
40     //Satellite picture and label
41     ui->labelRouteSatelliteStatus->setVisible(0);
42     ui->labelRouteSatellitePicture->setVisible(0);
43     //ui->labelRouteSatellitePicture->setPixmap(QPixmap("Graphics/satellite_vista.png"));
44     timerSatellitePicture = new QTimer();
45     timerSatellitePicture->setInterval(400);
46     connect(timerSatellitePicture, SIGNAL(timeout()),this, SLOT(timerSatellitePictureTimeout()));
47     ui->labelUserInfo->setText("Push start button");  //User info label
48
49     //Invisible or clear labels
50     ui->labelRouteStatus->setVisible(0);
51     ui->labelRoutePicture->setVisible(0);
52     ui->labelGpsSpeed->setVisible(0); //GPS speed label
53     ui->labelSignalStrength->setText(""); //GPS signal strength label
54     timerRoutePicture = new QTimer();
55     timerRoutePicture->setInterval(400);
56     connect(timerRoutePicture, SIGNAL(timeout()),this, SLOT(timerRoutePictureTimeout()));
57
58     //GPS
59     location = new Maemo5Location(this);
60     gpsData = new GPSData(location);
61     connect(location,SIGNAL(agnss()),this,SLOT(gpsStatus()));
62 }
63
64 /**
65   *Destructor of this class. Deletes all dynamic objects and sets them to NULL.
66   */
67 RouteSaveDialog::~RouteSaveDialog()
68 {
69     qDebug() << "__~RouteSaveDialog";
70     if(ui)
71         delete ui;
72     if(gpsData)
73         delete gpsData;
74     if(location)
75         delete location;
76     if(routeDialog)
77         delete routeDialog;
78
79     delete timerSatellitePicture;
80     delete timerRoutePicture;
81     delete pixmapRouteStop;
82     delete pixmapRouteStart;
83     delete iconRouteStop;
84     delete iconRouteStart;
85 }
86
87 /**
88   *
89   */
90 void RouteSaveDialog::changeEvent(QEvent *e)
91 {
92     QDialog::changeEvent(e);
93     switch (e->type()) {
94     case QEvent::LanguageChange:
95         ui->retranslateUi(this);
96         break;
97     default:
98         break;
99     }
100 }
101
102 /**
103   *This slot function is called when route start/stop button clicked.
104   */
105 void RouteSaveDialog::on_buttonRouteStartStop_clicked()
106 {
107     if ( buttonStatus == true )//If start button clicked
108     {
109         qDebug() << "__start button clicked";
110         buttonStatus = false;
111         ui->buttonRouteStartStop->setIcon(*iconRouteStop);
112         location->startPollingGPS();
113         gpsStatus();
114     }
115     else //If stop button clicked
116     {
117         qDebug() << "__stop button clicked";
118         buttonStatus = true;
119         ui->buttonRouteStartStop->setIcon(*iconRouteStart);
120
121         //Satellite picture and label
122         ui->labelRouteSatelliteStatus->setText("Searching satellite");
123         ui->labelRouteSatelliteStatus->setVisible(0);
124         ui->labelRouteSatellitePicture->setVisible(0);
125         timerSatellitePicture->stop();
126
127         //Route picture and label
128         ui->labelRouteStatus->setVisible(0);
129         ui->labelRoutePicture->setVisible(0);
130         timerRoutePicture->stop();
131         location->stopPollingGPS();
132
133         QString routeFile = QString("routetemp.xml");
134         if (routeDialog->readRouteFromFile( routeFile ) == true)
135         {
136             if(!routeDialog)
137                 routeDialog = new RouteDialog;
138             connect(routeDialog, SIGNAL(sendroute()), this, SLOT(sendRoute()));
139             routeDialog->show();
140         }
141
142         //GPS speed label
143         ui->labelGpsSpeed->setVisible(0);
144
145         //Stop route recording
146         gpsData->stopRouteRecording();
147
148         //User info label
149         ui->labelUserInfo->setText("Push start button");
150     }
151 }
152
153 /**
154   *This slot function is called when satellite picture timer timeout(400ms).
155   */
156 void RouteSaveDialog::timerSatellitePictureTimeout()
157 {
158     //If satellite picture visible.
159     if (ui->labelRouteSatellitePicture->isVisible() == 1)
160     {
161         ui->labelRouteSatelliteStatus->setVisible(0);
162         ui->labelRouteSatellitePicture->setVisible(0);
163     }
164     else
165     {
166         ui->labelRouteSatelliteStatus->setVisible(1);
167         ui->labelRouteSatellitePicture->setVisible(1);
168     }
169     timerSatellitePicture->start();
170 }
171
172 /**
173   *This slot function is called when route picture timer timeout(400ms).
174   */
175 void RouteSaveDialog::timerRoutePictureTimeout()
176 {
177     //If route picture visible.
178     if (ui->labelRoutePicture->isVisible() == 1)
179     {
180         ui->labelRouteStatus->setVisible(0);
181         ui->labelRoutePicture->setVisible(0);
182     }
183     else
184     {
185         ui->labelRouteStatus->setVisible(1);
186         ui->labelRoutePicture->setVisible(1);
187     }
188     timerRoutePicture->start();
189 }
190
191 /**
192   *
193   */
194 void RouteSaveDialog::gpsStatus()
195 {
196     //IF GPS start button clicked
197     if (buttonStatus == false)
198     {
199         //ui->labelSignalStrength->setText(QString::number(location->getSignalStrength()));    //Returns average signal strength of satellites which are in use.
200
201         //If GPS find 4 or more satellite and signal stregth is 30 or more.
202         if (location->getSatellitesInUse() >= 4 && location->getSignalStrength() >= 30)
203         {
204             //Satellite picture and label
205             ui->labelRouteSatelliteStatus->setText("GPS Ready");
206             ui->labelRouteSatelliteStatus->setVisible(1);
207             ui->labelRouteSatellitePicture->setVisible(1);
208             timerSatellitePicture->stop();
209
210             //Route picture and label
211             ui->labelRouteStatus->setText("Recorded " + QString::number(gpsData->roundCounter) + " route point");
212             ui->labelUserInfo->setText("Recorded " + QString::number(gpsData->roundCounter) + " route point");
213             ui->labelRouteStatus->setVisible(1);
214             ui->labelRoutePicture->setVisible(1);
215             timerRoutePicture->start();
216
217             //Set GPS speed.
218             gpsSpeed.sprintf("%.0f",location->getSpeed());
219             ui->labelGpsSpeed->setText(gpsSpeed + " km/h");
220             ui->labelGpsSpeed->setVisible(1);
221
222             //Start route recording
223             gpsData->startRouteRecording();
224         }
225         else //If GPS find less than 4 satellite or signal strength is poor.
226         {
227             //Satellite picture and label
228             ui->labelRouteSatelliteStatus->setText("Searching satellite");
229             ui->labelUserInfo->setText("Searching satellite");
230             ui->labelRouteSatelliteStatus->setVisible(1);
231             ui->labelRouteSatellitePicture->setVisible(1);
232             timerSatellitePicture->start();
233
234             //Route picture and label
235             ui->labelRouteStatus->setVisible(0);
236             ui->labelRoutePicture->setVisible(0);
237             timerRoutePicture->stop();
238
239             //GPS speed label
240             ui->labelGpsSpeed->setVisible(0);
241         }
242     }
243     else //If stop button clicked
244     {
245         //Satellite picture and label
246         ui->labelRouteSatelliteStatus->setText("Searching satellite");
247         ui->labelUserInfo->setText("Push start button");
248         ui->labelRouteSatelliteStatus->setVisible(0);
249         ui->labelRouteSatellitePicture->setVisible(0);
250         timerSatellitePicture->stop();
251
252         //Route picture and label
253         ui->labelRouteStatus->setVisible(0);
254         ui->labelRoutePicture->setVisible(0);
255         timerRoutePicture->stop();
256
257         //GPS speed label
258         ui->labelGpsSpeed->setVisible(0);
259     }
260 }
261
262 /**
263   * This slot function is called when routeDialog emit sendroute (sendPushButton).
264   */
265 void RouteSaveDialog::sendRoute()
266 {
267     emit sendroute(); //Emit mainwindow clientSendRoute
268 }