3153b2124ca8808ac00b169399d8219de14b3daf
[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     helpRoutingDialog = NULL;
28
29     //Clear variables
30     averageSpeed = 0.0;
31     speed = 0.0;
32     allSpeeds = 0.0;
33     speedCount = 0;
34
35     //Button settings
36     buttonStatus = true;
37     pixmapRouteStop = new QPixmap("Graphics/route_stop.png");
38     pixmapRouteStart = new QPixmap("Graphics/route_start.png");
39     iconRouteStop = new QIcon(*pixmapRouteStop);
40     iconRouteStart = new QIcon(*pixmapRouteStart);
41     QSize iconSize(125, 125);
42     ui->buttonRouteStartStop->setIconSize(iconSize);
43     ui->buttonRouteStartStop->setIcon(*iconRouteStart);
44     ui->buttonRouteStartStop->setAutoFillBackground(true);
45     ui->buttonRouteStartStop->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
46     ui->pushButtonInfo->setAutoFillBackground(true);
47     ui->pushButtonInfo->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
48
49     //Satellite picture and label
50     ui->labelRouteSatelliteStatus->setVisible(0);
51     ui->labelRouteSatellitePicture->setVisible(0);
52     //ui->labelRouteSatellitePicture->setPixmap(QPixmap("Graphics/satellite_vista.png"));
53     timerSatellitePicture = new QTimer();
54     timerSatellitePicture->setInterval(400);
55     connect(timerSatellitePicture, SIGNAL(timeout()),this, SLOT(timerSatellitePictureTimeout()));
56     ui->labelUserInfo->setText("Push start button");  //User info label
57
58     //Invisible or clear labels
59     ui->labelRouteStatus->setVisible(0);
60     ui->labelRoutePicture->setVisible(0);
61     ui->labelGpsSpeed->setVisible(0); //GPS speed label
62     ui->labelGpsAvgSpeed->setVisible(0); //GPS average speed label
63     ui->labelSignalStrength->setText(""); //GPS signal strength label
64     timerRoutePicture = new QTimer();
65     timerRoutePicture->setInterval(400);
66     connect(timerRoutePicture, SIGNAL(timeout()),this, SLOT(timerRoutePictureTimeout()));
67
68     //GPS
69     location = new Maemo5Location(this);
70     gpsData = new GPSData(location);
71     connect(location,SIGNAL(agnss()),this,SLOT(gpsStatus()));
72 }
73
74 /**
75   *Destructor of this class. Deletes all dynamic objects and sets them to NULL.
76   */
77 RouteSaveDialog::~RouteSaveDialog()
78 {
79     qDebug() << "__~RouteSaveDialog";
80     if(ui)
81         delete ui;
82     if(gpsData)
83         delete gpsData;
84     if(location)
85         delete location;
86     if(routeDialog)
87         delete routeDialog;
88
89     delete timerSatellitePicture;
90     delete timerRoutePicture;
91     delete pixmapRouteStop;
92     delete pixmapRouteStart;
93     delete iconRouteStop;
94     delete iconRouteStart;
95 }
96
97 /**
98   *
99   */
100 void RouteSaveDialog::changeEvent(QEvent *e)
101 {
102     QDialog::changeEvent(e);
103     switch (e->type()) {
104     case QEvent::LanguageChange:
105         ui->retranslateUi(this);
106         break;
107     default:
108         break;
109     }
110 }
111
112 /**
113   *This slot function is called when route start/stop button clicked.
114   */
115 void RouteSaveDialog::on_buttonRouteStartStop_clicked()
116 {
117     if ( buttonStatus == true )//If start button clicked
118     {
119         qDebug() << "__start button clicked";
120
121         //Clear variables
122         averageSpeed = 0.0;
123         speed = 0.0;
124         allSpeeds = 0.0;
125         speedCount = 1;
126
127         buttonStatus = false;
128         ui->buttonRouteStartStop->setIcon(*iconRouteStop);
129         location->startPollingGPS();
130         gpsStatus();
131     }
132     else //If stop button clicked
133     {
134         qDebug() << "__stop button clicked";
135         buttonStatus = true;
136         ui->buttonRouteStartStop->setIcon(*iconRouteStart);
137
138         //Satellite picture and label
139         ui->labelRouteSatelliteStatus->setText("Searching satellite");
140         ui->labelRouteSatelliteStatus->setVisible(0);
141         ui->labelRouteSatellitePicture->setVisible(0);
142         timerSatellitePicture->stop();
143
144         //Route picture and label
145         ui->labelRouteStatus->setVisible(0);
146         ui->labelRoutePicture->setVisible(0);
147         timerRoutePicture->stop();
148         location->stopPollingGPS();
149
150         QString routeFile = QString("routetemp.xml");
151         if (routeDialog->readRouteFromFile( routeFile ) == true)
152         {
153             if(!routeDialog)
154                 routeDialog = new RouteDialog(this);
155             connect(routeDialog, SIGNAL(sendroute()), this, SLOT(sendRoute()));
156             routeDialog->show();
157         }
158
159         //Set GPS speed labels in visible
160         ui->labelGpsSpeed->setVisible(0);
161         ui->labelGpsAvgSpeed->setVisible(0);
162
163         //Stop route recording
164         gpsData->stopRouteRecording();
165
166         //User info label
167         ui->labelUserInfo->setText("Push start button");
168     }
169 }
170
171 /**
172   *This slot function is called when satellite picture timer timeout(400ms).
173   */
174 void RouteSaveDialog::timerSatellitePictureTimeout()
175 {
176     //If satellite picture visible.
177     if (ui->labelRouteSatellitePicture->isVisible() == 1)
178     {
179         ui->labelRouteSatelliteStatus->setVisible(0);
180         ui->labelRouteSatellitePicture->setVisible(0);
181     }
182     else
183     {
184         ui->labelRouteSatelliteStatus->setVisible(1);
185         ui->labelRouteSatellitePicture->setVisible(1);
186     }
187     timerSatellitePicture->start();
188 }
189
190 /**
191   *This slot function is called when route picture timer timeout(400ms).
192   */
193 void RouteSaveDialog::timerRoutePictureTimeout()
194 {
195     //If route picture visible.
196     if (ui->labelRoutePicture->isVisible() == 1)
197     {
198         ui->labelRouteStatus->setVisible(0);
199         ui->labelRoutePicture->setVisible(0);
200     }
201     else
202     {
203         ui->labelRouteStatus->setVisible(1);
204         ui->labelRoutePicture->setVisible(1);
205     }
206     timerRoutePicture->start();
207 }
208
209 /**
210   * This slot function is called when GPS update location.
211   */
212 void RouteSaveDialog::gpsStatus()
213 {
214     //IF GPS start button clicked
215     if (buttonStatus == false)
216     {
217         //ui->labelSignalStrength->setText(QString::number(location->getSignalStrength()));    //Returns average signal strength of satellites which are in use.
218
219         //If GPS find 4 or more satellite and signal stregth is 30 or more.
220         if (location->getSatellitesInUse() >= 4 && location->getSignalStrength() >= 30)
221         {
222             //Satellite picture and label
223             ui->labelRouteSatelliteStatus->setText("GPS Ready");
224             ui->labelRouteSatelliteStatus->setVisible(1);
225             ui->labelRouteSatellitePicture->setVisible(1);
226             timerSatellitePicture->stop();
227
228             //Route picture and label
229             ui->labelRouteStatus->setText("Recorded " + QString::number(gpsData->roundCounter) + " route point");
230             ui->labelUserInfo->setText("Recorded " + QString::number(gpsData->roundCounter) + " route point");
231             ui->labelRouteStatus->setVisible(1);
232             ui->labelRoutePicture->setVisible(1);
233             timerRoutePicture->start();
234
235             //Get GPS speed
236             speed = location->getSpeed();
237
238             //Set GPS speed
239             gpsSpeed.sprintf("%.0f", speed);
240             ui->labelGpsSpeed->setText(gpsSpeed + " km/h");
241             ui->labelGpsSpeed->setVisible(1);
242
243             //Set GPS average speed
244             allSpeeds += speed;
245             averageSpeed = allSpeeds/speedCount;
246             gpsSpeed.sprintf("%.0f",averageSpeed);
247             ui->labelGpsAvgSpeed->setText("Average: " + gpsSpeed + " km/h");
248             ui->labelGpsAvgSpeed->setVisible(1);
249             speedCount++;
250
251             //Start route recording
252             gpsData->startRouteRecording();
253         }
254         else //If GPS find less than 4 satellite or signal strength is poor.
255         {
256             //Satellite picture and label
257             ui->labelRouteSatelliteStatus->setText("Searching satellite");
258             ui->labelUserInfo->setText("Searching satellite");
259             ui->labelRouteSatelliteStatus->setVisible(1);
260             ui->labelRouteSatellitePicture->setVisible(1);
261             timerSatellitePicture->start();
262
263             //Route picture and label
264             ui->labelRouteStatus->setVisible(0);
265             ui->labelRoutePicture->setVisible(0);
266             timerRoutePicture->stop();
267
268             //Set GPS speed labels in visible
269             ui->labelGpsSpeed->setVisible(0);
270             ui->labelGpsAvgSpeed->setVisible(0);
271         }
272     }
273     else //If stop button clicked
274     {
275         //Satellite picture and label
276         ui->labelRouteSatelliteStatus->setText("Searching satellite");
277         ui->labelUserInfo->setText("Push start button");
278         ui->labelRouteSatelliteStatus->setVisible(0);
279         ui->labelRouteSatellitePicture->setVisible(0);
280         timerSatellitePicture->stop();
281
282         //Route picture and label
283         ui->labelRouteStatus->setVisible(0);
284         ui->labelRoutePicture->setVisible(0);
285         timerRoutePicture->stop();
286
287         //Set GPS speed labels in visible
288         ui->labelGpsSpeed->setVisible(0);
289         ui->labelGpsAvgSpeed->setVisible(0);
290     }
291 }
292
293 /**
294   * This slot function is called when routeDialog emit sendroute (sendPushButton).
295   */
296 void RouteSaveDialog::sendRoute()
297 {
298     emit sendroute(); //Emit mainwindow clientSendRoute
299 }
300
301 /**
302   * This slot function called when ever info button clicked.
303   */
304 void RouteSaveDialog::on_pushButtonInfo_clicked()
305 {
306     if(!helpRoutingDialog)
307     {
308         helpRoutingDialog = new HelpRoutingDialog;
309     }
310     connect(helpRoutingDialog, SIGNAL(rejected()), this, SLOT(killHelpDialog()));
311     helpRoutingDialog->show();
312 }
313
314 /**
315   * This slot function called when ever dialog rejected.
316   */
317 void RouteSaveDialog::killHelpDialog()
318 {
319     if(helpRoutingDialog)
320     {
321         qDebug() << "__Route save kill: helpRoutingDialog";
322         delete helpRoutingDialog;
323         helpRoutingDialog = NULL;
324     }
325 }
326
327 /**
328   * This function return speed average.
329   * @return double average speed
330   */
331 double RouteSaveDialog::getAverageSpeed()
332 {
333     return averageSpeed;
334 }