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