Bugfix: category dublicates
[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
12 /**
13   *Constructor of this class.
14   *@param QWidget pointer to parent object. By default the value is NULL.
15   */
16 RouteSaveDialog::RouteSaveDialog(QWidget *parent) :
17     QDialog(parent),
18     ui(new Ui::RouteSaveDialog)
19 {
20     ui->setupUi(this);
21     this->setWindowTitle("Tracking");
22
23     routeDialog = new RouteDialog;
24
25     //Button settings
26     buttonStatus = true;
27     pixmapRouteStop = new QPixmap("Graphics/route_stop.png");
28     pixmapRoutePlay = new QPixmap("Graphics/route_play.png");
29     iconRouteStop = new QIcon(*pixmapRouteStop);
30     iconRoutePlay = new QIcon(*pixmapRoutePlay);
31     QSize iconSize(125, 125);
32     ui->buttonRouteStartStop->setIconSize(iconSize);
33     ui->buttonRouteStartStop->setIcon(*iconRoutePlay);
34     ui->buttonRouteStartStop->setAutoFillBackground(true);
35     ui->buttonRouteStartStop->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
36
37     //Satellite picture and label
38     ui->labelRouteSatelliteStatus->setVisible(0);
39     ui->labelRouteSatellitePicture->setVisible(0);
40     //ui->labelRouteSatellitePicture->setPixmap(QPixmap("Graphics/satellite_vista.png"));
41     timerSatellitePicture = new QTimer();
42     timerSatellitePicture->setInterval(400);
43     connect(timerSatellitePicture, SIGNAL(timeout()),this, SLOT(timerSatellitePictureTimeout()));
44
45     //Route picture and label
46     ui->labelRouteStatus->setVisible(0);
47     ui->labelRoutePicture->setVisible(0);
48     timerRoutePicture = new QTimer();
49     timerRoutePicture->setInterval(400);
50     connect(timerRoutePicture, SIGNAL(timeout()),this, SLOT(timerRoutePictureTimeout()));
51
52     //GPS speed label
53     ui->labelGpsSpeed->setVisible(0);
54
55     //GPS
56     location = new Maemo5Location(this);
57     gpsData = new GPSData(location);
58     connect(location,SIGNAL(agnss()),this,SLOT(gpsStatus()));
59 }
60
61 /**
62   *Destructor of this class. Deletes all dynamic objects and sets them to NULL.
63   */
64 RouteSaveDialog::~RouteSaveDialog()
65 {
66     delete ui;
67     delete timerSatellitePicture;
68     delete timerRoutePicture;
69     delete location;
70     delete gpsData;
71     delete routeDialog;
72     delete pixmapRouteStop;
73     delete pixmapRoutePlay;
74     delete iconRouteStop;
75     delete iconRoutePlay;
76 }
77
78 void RouteSaveDialog::changeEvent(QEvent *e)
79 {
80     QDialog::changeEvent(e);
81     switch (e->type()) {
82     case QEvent::LanguageChange:
83         ui->retranslateUi(this);
84         break;
85     default:
86         break;
87     }
88 }
89
90 /**
91   *This slot function is called when route start/stop button clicked.
92   */
93 void RouteSaveDialog::on_buttonRouteStartStop_clicked()
94 {
95     //If start button clicked
96     if ( buttonStatus == true )
97     {
98         buttonStatus = false;
99         ui->buttonRouteStartStop->setIcon(*iconRouteStop);
100         location->startPollingGPS();
101         gpsStatus();
102     }
103     else
104     {
105         buttonStatus = true;
106         ui->buttonRouteStartStop->setIcon(*iconRoutePlay);
107
108         //Satellite picture and label
109         ui->labelRouteSatelliteStatus->setText("Searching satellite");
110         ui->labelRouteSatelliteStatus->setVisible(0);
111         ui->labelRouteSatellitePicture->setVisible(0);
112         timerSatellitePicture->stop();
113
114         //Route picture and label
115         ui->labelRouteStatus->setVisible(0);
116         ui->labelRoutePicture->setVisible(0);
117         timerRoutePicture->stop();
118         location->stopPollingGPS();
119
120         QString routeFile = QString("routetemp.xml");
121         if (routeDialog->readRouteFromFile( routeFile) == true)
122         {
123             routeDialog->show();
124         }
125
126         //GPS speed label
127         ui->labelGpsSpeed->setVisible(0);
128
129         //Stop route recording
130         gpsData->stopRouteRecording();
131     }
132 }
133
134 /**
135   *This slot function is called when satellite picture timer timeout(400ms).
136   */
137 void RouteSaveDialog::timerSatellitePictureTimeout()
138 {
139     //If satellite picture visible.
140     if (ui->labelRouteSatellitePicture->isVisible() == 1)
141     {
142         ui->labelRouteSatelliteStatus->setVisible(0);
143         ui->labelRouteSatellitePicture->setVisible(0);
144     }
145     else
146     {
147         ui->labelRouteSatelliteStatus->setVisible(1);
148         ui->labelRouteSatellitePicture->setVisible(1);
149     }
150     timerSatellitePicture->start();
151 }
152
153 /**
154   *This slot function is called when route picture timer timeout(400ms).
155   */
156 void RouteSaveDialog::timerRoutePictureTimeout()
157 {
158     //If route picture visible.
159     if (ui->labelRoutePicture->isVisible() == 1)
160     {
161         ui->labelRouteStatus->setVisible(0);
162         ui->labelRoutePicture->setVisible(0);
163     }
164     else
165     {
166         ui->labelRouteStatus->setVisible(1);
167         ui->labelRoutePicture->setVisible(1);
168     }
169     timerRoutePicture->start();
170 }
171
172 void RouteSaveDialog::gpsStatus()
173 {
174     //IF GPS start button clicked
175     if (buttonStatus == false)
176     {
177         //If GPS find 4 satellite.
178         if (location->getSatellitesInUse() >= 4)
179         {
180             //Satellite picture and label
181             ui->labelRouteSatelliteStatus->setText("GPS Ready");
182             ui->labelRouteSatelliteStatus->setVisible(1);
183             ui->labelRouteSatellitePicture->setVisible(1);
184             timerSatellitePicture->stop();
185
186             //Route picture and label
187             ui->labelRouteStatus->setText("Recorded " + QString::number(gpsData->roundCounter) + " route point");
188             ui->labelRouteStatus->setVisible(1);
189             ui->labelRoutePicture->setVisible(1);
190             timerRoutePicture->start();
191
192             //Set GPS speed.
193             gpsSpeed.sprintf("%.0f",location->getSpeed());
194             ui->labelGpsSpeed->setText(gpsSpeed + " km/h");
195             ui->labelGpsSpeed->setVisible(1);
196
197             //Start route recording
198             gpsData->startRouteRecording();
199         }
200
201         //If GPS find less than 4 satellite.
202         else
203         {
204             //Satellite picture and label
205             ui->labelRouteSatelliteStatus->setText("Searching satellite");
206             ui->labelRouteSatelliteStatus->setVisible(1);
207             ui->labelRouteSatellitePicture->setVisible(1);
208             timerSatellitePicture->start();
209
210             //Route picture and label
211             ui->labelRouteStatus->setVisible(0);
212             ui->labelRoutePicture->setVisible(0);
213             timerRoutePicture->stop();
214
215             //GPS speed label
216             ui->labelGpsSpeed->setVisible(0);
217         }
218     }
219     else
220     {
221         //Satellite picture and label
222         ui->labelRouteSatelliteStatus->setText("Searching satellite");
223         ui->labelRouteSatelliteStatus->setVisible(0);
224         ui->labelRouteSatellitePicture->setVisible(0);
225         timerSatellitePicture->stop();
226
227         //Route picture and label
228         ui->labelRouteStatus->setVisible(0);
229         ui->labelRoutePicture->setVisible(0);
230         timerRoutePicture->stop();
231
232         //GPS speed label
233         ui->labelGpsSpeed->setVisible(0);
234     }
235 }