Added function to kill usersDialog when dialog is closed.
[speedfreak] / Client / resultdialog.cpp
1 /*
2  * Result dialog
3  *
4  * @author     Janne Änäkkälä <janne.anakkala@fudeco.com>
5  * @author     Toni Jussila     <toni.jussila@fudeco.com>
6  * @copyright  (c) 2010 Speed Freak team
7  * @license    http://opensource.org/licenses/gpl-license.php GNU Public License
8  */
9
10 #include "resultdialog.h"
11 #include "ui_resultdialog.h"
12 #include "usersettings.h"
13 #include "math.h"
14 #include <QPainter>
15 #include <QPicture>
16 #include <QDebug>
17 #include <QDesktopServices>
18 #include <QUrl>
19
20 const int DIAGRAM_WIDTH = 400;
21 const int DIAGRAM_HEIGHT = 300;
22
23 const int DIAGRAMGAP10KMH = 300;
24 const int DIAGRAMGAP20KMH = 150;
25 const int DIAGRAMGAP30KMH = 100;
26 const int DIAGRAMGAP40KMH = 75;
27 const int DIAGRAMGAP50KMH = 60;
28 const int DIAGRAMGAP60KMH = 50;
29 const double DIAGRAMGAP70KMH = 42.86;
30 const double DIAGRAMGAP80KMH = 37.5;
31 const double DIAGRAMGAP90KMH = 33.33;
32 const int DIAGRAMGAP100KMH = 30;
33
34 const int DIAGRAMGAP5S = 80;
35 const int DIAGRAMGAP10S = 40;
36 const int DIAGRAMGAP16S = 25;
37 const int DIAGRAMGAP20S = 20;
38
39 const QPoint diagramStemStart(70, 330);
40 const QPoint diagramStemEnd(70, 30);
41
42 const QPoint diagramHorizontalStart(70, 330);
43 const QPoint diagramHorizontalEnd(470, 330);
44
45 const int diagramGap = 30;
46
47 // Test arrays for changing speeds and times to the points in diagram
48 static const int speedArray[11] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100};
49 //static const int timeArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 10, 12};
50
51 // Test point array for the diagram.
52 QPoint points[11];
53
54 /**
55   * Constructor of this class.
56   * @param QWidget pointer to parent object. By default the value is NULL.
57   */
58 ResultDialog::ResultDialog(QWidget *parent) :
59     QDialog(parent),
60     ui(new Ui::ResultDialog)
61 {
62     ui->setupUi(this);
63
64     helpAccelerationDialog = NULL;
65
66     timeAxelLength = 10;
67     resultString = "";
68     speedList << "0" << "10" << "20" << "30" << "40" << "50" << "60" << "70" << "80" << "90" << "100" ;
69     timeList << "0" << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "8" << "9" << "10" << "11"
70             << "12" << "13" << "14" << "15" << "16" << "17" << "18" << "19" << "20";
71     this->diagramGapStem = DIAGRAMGAP100KMH;
72     this->diagramGapHorizontal = DIAGRAMGAP20S;
73     for (int i = 0; i < 11; i++)
74     {
75         timeArray[i] = 0;
76     }
77
78     //Clear info label
79     ui->labelInfoToUser->setText("");
80
81     if (loginSaved())
82     {
83         ui->pushButtonSend->setEnabled(true);
84     }
85     else
86     {
87         ui->pushButtonSend->setEnabled(false);
88         ui->labelInfoToUser->setText("You're not logged! Please register or log in and accelerate again.");
89     }
90 }
91
92 /**
93   * Destructor of this class.  Should be used to release all allocated resources.
94   */
95 ResultDialog::~ResultDialog()
96 {
97     delete ui;
98 }
99
100 void ResultDialog::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   * Draws speed diagram to the UI
114   * @param QPaintEvent
115  */
116 void ResultDialog::paintEvent(QPaintEvent *)
117 {
118     setHeaders();
119     //Create Pixmap, where image will be draw
120     QPixmap image(ui->scrollArea->width(), ui->scrollArea->height()/*DIAGRAM_WIDTH+100, DIAGRAM_HEIGHT+70*/);
121         
122     //Create painter and give paramemeter where image will be draw
123     QPainter painter(&image);
124     painter.setPen(Qt::white);
125     painter.setBrush(Qt::white);
126     painter.drawRect(QRect(0, 0, ui->scrollArea->width(), ui->scrollArea->height()/*DIAGRAM_WIDTH+100, DIAGRAM_HEIGHT+70*/));
127     
128
129     painter.setRenderHint(QPainter::Antialiasing, true);
130     painter.setPen(QPen((Qt::gray),2));
131     QFont font;
132     QFont fontForResult;
133     font.setPixelSize(12);
134     painter.setFont(font);
135     painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern));
136
137     fontForResult.setPixelSize(50);
138     painter.setFont(fontForResult);
139     painter.drawText(diagramStemStart.x() + 30, diagramStemStart.y() - 150, resultString);
140     painter.setFont(font);
141
142     painter.setPen(QPen((Qt::darkCyan),2));
143     painter.drawLine(diagramStemStart, diagramStemEnd);
144     painter.drawLine(diagramHorizontalStart, diagramHorizontalEnd);
145     painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 100, "S");
146     painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 115, "P");
147     painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 130, "E");
148     painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 145, "E");
149     painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 160, "D");
150     painter.drawText(diagramStemStart.x() - 65, diagramStemEnd.y() + 180, "(km/h)");
151
152     painter.drawText(diagramStemStart.x() + 140, diagramStemStart.y() + 40, "T");
153     painter.drawText(diagramStemStart.x() + 150, diagramStemStart.y() + 40, "I");
154     painter.drawText(diagramStemStart.x() + 155, diagramStemStart.y() + 40, "M");
155     painter.drawText(diagramStemStart.x() + 165, diagramStemStart.y() + 40, "E");
156     painter.drawText(diagramStemStart.x() + 180, diagramStemStart.y() + 40, "(s)");
157
158     int currentX = 0;
159     int currentY = diagramStemStart.y();
160
161     painter.setPen(QPen((Qt::darkCyan),1));
162
163     int i = 0;
164     // Draws diagram's X-axel
165     while (currentX <= DIAGRAM_WIDTH)
166     {
167         painter.drawLine(currentX + diagramStemStart.x(), currentY, currentX + diagramStemStart.x(), currentY - 300);
168         painter.drawText(currentX + diagramStemStart.x() - 3, currentY + 20, timeList[i]);
169         currentX += this->diagramGapHorizontal;
170         i++;
171     }
172
173     currentX = diagramStemStart.x();
174     currentY = 0;
175
176     i = 0;
177     // Draws diagram's Y-axel
178     while (currentY >= -(DIAGRAM_HEIGHT))
179     {
180         painter.drawLine(currentX, diagramStemStart.y() + currentY, currentX+400, diagramStemStart.y() + currentY);
181         painter.drawText(currentX - 25, diagramStemStart.y() + currentY + 3, speedList[i]);
182         currentY -= this->diagramGapStem;
183         i++;
184     }
185
186     painter.setPen(QPen((Qt::red),2));
187
188     int pointsToShow = 0;
189     bool pointsUnderDiagramWidth = true;
190
191     for (i = 0; i < 11 ; i++)
192     {
193         if (points[i].x() > diagramHorizontalEnd.x())
194         {
195             pointsToShow = i;
196             pointsUnderDiagramWidth = false;
197             i = 10;
198         }
199     }
200
201     // Draws result line to the diagram
202     if (pointsUnderDiagramWidth)
203     {
204         painter.drawPolyline(points, this->getTargetChoice() + 1);
205     }
206
207     else
208     {
209         painter.drawPolyline(points, pointsToShow);
210     }
211     //Save image in file acceleration.png
212     image.save("acceleration.png", 0, -1);
213
214     //Create label
215     QLabel *imageLabel = new QLabel(this);
216     
217     //Set image pixmap to label
218     imageLabel->setPixmap(image);
219     
220     //Set image label to scrollArea
221     ui->scrollArea->setWidget(imageLabel);
222
223 }
224
225 /**
226   * Change the given speed and time to the point for the diagram.
227   * @param aSpeed is speed which need to change, aTime is time in seconds which need to change.
228   * @return point is calculated from aSpeed and aTime.
229   */
230 QPoint ResultDialog::changeMeasuresToDiagramPoint(int aSpeed, qreal aTime)
231 {
232     QPoint point;
233
234     int speedAsPixels;
235     int timeAsPixels;
236
237     // Calculate speed and time to the point which can be drawn to the diagram
238     speedAsPixels = (DIAGRAM_HEIGHT*aSpeed) / (this->getTargetChoice() * 10);
239     timeAsPixels = DIAGRAM_WIDTH*aTime/timeAxelLength;
240
241     point.setY(diagramStemStart.y()-speedAsPixels);
242     point.setX(diagramStemStart.x()+timeAsPixels);
243
244     return point;
245 }
246
247 /**
248   * Sets result times in to the labels.
249   */
250 void ResultDialog::setTimesIntoLabels()
251 {
252     QString time, timeInteger;
253     timeInteger.setNum(timeArray[4]);
254     time = "0 - 40 km/h: ";
255     time.append(timeInteger);
256     ui->labelResult40kmh->setText(time);
257
258     timeInteger.setNum(timeArray[3]);
259     time = "0 - 30 km/h: ";
260     time.append(timeInteger);
261     ui->labelResult30kmh->setText(time);
262
263     timeInteger.setNum(timeArray[2]);
264     time = "0 - 20 km/h: ";
265     time.append(timeInteger);
266     ui->labelResult20kmh->setText(time);
267
268     timeInteger.setNum(timeArray[1]);
269     time = "0 - 10 km/h: ";
270     time.append(timeInteger);
271     ui->labelResult10kmh->setText(time);
272
273     timeInteger.setNum(timeArray[6]);
274     time = "0 - 60 km/h: ";
275     time.append(timeInteger);
276     ui->labelResult60kmh->setText(time);
277
278     timeInteger.setNum(timeArray[5]);
279     time = "0 - 50 km/h: ";
280     time.append(timeInteger);
281     ui->labelResult50kmh->setText(time);
282
283     timeInteger.setNum(timeArray[7]);
284     time = "0 - 70 km/h: ";
285     time.append(timeInteger);
286     ui->labelResult70kmh->setText(time);
287
288     timeInteger.setNum(timeArray[8]);
289     time = "0 - 80 km/h: ";
290     time.append(timeInteger);
291     ui->labelResult80kmh->setText(time);
292
293     timeInteger.setNum(timeArray[9]);
294     time = "0 - 90 km/h: ";
295     time.append(timeInteger);
296     ui->labelResult90kmh->setText(time);
297
298     timeInteger.setNum(timeArray[10]);
299     time = "0 - 100 km/h: ";
300     time.append(timeInteger);
301     ui->labelResult100kmh->setText(time);
302
303     showOrHideLabels();
304 }
305
306 /**
307   * Sets right timeAxelLength value depending the time which
308   * has spent to reach target speed.
309   */
310 void ResultDialog::setTimeAxelLength(int pChoice)
311 {
312     if (timeArray[pChoice] <= 5.0)
313     {
314         timeAxelLength = 5;
315     }
316
317     else if (timeArray[pChoice] <= 10.0 && timeArray[pChoice] > 5.0)
318     {
319         timeAxelLength = 10;
320     }
321
322     else if (timeArray[pChoice] <= 16.0 && timeArray[pChoice] > 10.0)
323     {
324         timeAxelLength = 16;
325     }
326
327     else
328     {
329         timeAxelLength = 20;
330     }
331 }
332
333 /**
334   * This slot function close result dialog when new run -button has been clicked.
335   */
336 void ResultDialog::on_pushButtonNew_clicked()
337 {
338     for (int i = 0; i < 11; i++)
339     {
340         timeArray[i] = 0;
341     }
342     resultString = "";
343     this->close();
344     emit rejected();
345 }
346
347 /**
348   * This slot function emits sendresult signal for sending results to server when
349   * send results -button has been clicked.
350   * Emit accrealtimedialog sendresult.
351   */
352 void ResultDialog::on_pushButtonSend_clicked()
353 {
354     ui->pushButtonSend->setEnabled(false);
355     emit sendresult(timeArray[this->getTargetChoice()]);
356 }
357
358 double ResultDialog::getResult()
359 {
360     return timeArray[this->getTargetChoice()];
361 }
362
363 /**
364   * This public function sets diagram's stem gap
365   * @param pValue is the speed value which determines diagram gap's value
366   */
367 void ResultDialog::setEnd(int pValue)
368 {
369     for (int i = 0; i < 11; i++)
370     {
371         timeArray[i] = 0;
372     }
373     resultString = "";
374
375     switch (pValue)
376     {
377     case 10:
378         this->diagramGapStem = DIAGRAMGAP10KMH;
379         break;
380
381     case 20:
382         this->diagramGapStem = DIAGRAMGAP20KMH;
383         break;
384
385     case 30:
386         this->diagramGapStem = DIAGRAMGAP30KMH;
387         break;
388
389     case 40:
390         this->diagramGapStem = DIAGRAMGAP40KMH;
391         break;
392
393     case 50:
394         this->diagramGapStem = DIAGRAMGAP50KMH;
395         break;
396
397     case 60:
398         this->diagramGapStem = DIAGRAMGAP60KMH;
399         break;
400
401     case 70:
402         this->diagramGapStem = DIAGRAMGAP70KMH;
403         break;
404
405     case 80:
406         this->diagramGapStem = DIAGRAMGAP80KMH;
407         break;
408
409     case 90:
410         this->diagramGapStem = DIAGRAMGAP90KMH;
411         break;
412
413     case 100:
414         this->diagramGapStem = DIAGRAMGAP100KMH;
415         break;
416
417     default:
418         this->diagramGapStem = DIAGRAMGAP100KMH;
419         break;
420     }
421 }
422
423 /**
424   * This public function stores time in timeArray
425   * @param pSpeed is the speed value at the time so we know where store time
426   * @param pTime is the result which needs to be store in timeArray
427   */
428 void ResultDialog::setValue(int pSpeed, double pTime)
429 {
430     //timeArray[0] = 0;
431     if (pTime <= 5.0)
432     {
433         this->diagramGapHorizontal = DIAGRAMGAP5S;
434     }
435
436     else if (pTime <= 10.0 && pTime > 5.0)
437     {
438        this->diagramGapHorizontal = DIAGRAMGAP10S;
439     }
440
441     else if (pTime <= 16.0 && pTime > 10.0)
442     {
443         this->diagramGapHorizontal = DIAGRAMGAP16S;
444     }
445
446     else
447     {
448         this->diagramGapHorizontal = DIAGRAMGAP20S;
449     }
450
451     switch (pSpeed)
452     {
453     case 10:
454         timeArray[1] = pTime;
455         break;
456     case 20:
457         timeArray[2] = pTime;
458         break;
459     case 30:
460         timeArray[3] = pTime;
461         break;
462     case 40:
463         timeArray[4] = pTime;
464         break;
465     case 50:
466         timeArray[5] = pTime;
467         break;
468     case 60:
469         timeArray[6] = pTime;
470         break;
471     case 70:
472         timeArray[7] = pTime;
473         break;
474     case 80:
475         timeArray[8] = pTime;
476         break;
477     case 90:
478         timeArray[9] = pTime;
479         break;
480     case 100:
481         timeArray[10] = pTime;
482         break;
483     }
484
485     setTimeAxelLength(getTargetChoice());
486
487     for (int i = 0; i < 11; i++)
488     {
489         points[i] = changeMeasuresToDiagramPoint(speedArray[i], timeArray[i]);
490     }
491
492     setTimesIntoLabels();
493     this->repaint();
494 }
495
496 /**
497   * Sets dialog's heading and result text
498   */
499 void ResultDialog::setHeaders()
500 {
501     //QString resultString;
502     resultString.append("Time was ");
503
504     QString time;
505
506     if (this->diagramGapStem == DIAGRAMGAP100KMH)
507     {
508         time.sprintf("%.2f", timeArray[10]);
509         resultString.append(time);
510         this->setWindowTitle("Result for accelerating 100 km/h");
511     }
512
513     else if (this->diagramGapStem == DIAGRAMGAP90KMH)
514     {
515         time.sprintf("%.2f", timeArray[9]);
516         resultString.append(time);
517         this->setWindowTitle("Result for accelerating 90 km/h");
518     }
519
520     else if (this->diagramGapStem == DIAGRAMGAP80KMH)
521     {
522         time.sprintf("%.2f", timeArray[8]);
523         resultString.append(time);
524         this->setWindowTitle("Result for accelerating 80 km/h");
525     }
526
527     else if (this->diagramGapStem == DIAGRAMGAP70KMH)
528     {
529         time.sprintf("%.2f", timeArray[7]);
530         resultString.append(time);
531         this->setWindowTitle("Result for accelerating 70 km/h");
532     }
533
534     else if (this->diagramGapStem == DIAGRAMGAP60KMH)
535     {
536         time.sprintf("%.2f", timeArray[6]);
537         resultString.append(time);
538         this->setWindowTitle("Result for accelerating 60 km/h");
539     }
540
541     else if (this->diagramGapStem == DIAGRAMGAP50KMH)
542     {
543         time.sprintf("%.2f", timeArray[5]);
544         resultString.append(time);
545         this->setWindowTitle("Result for accelerating 50 km/h");
546     }
547
548     else if (this->diagramGapStem == DIAGRAMGAP40KMH)
549     {
550         time.sprintf("%.2f", timeArray[4]);
551         resultString.append(time);
552         this->setWindowTitle("Result for accelerating 40 km/h");
553     }
554
555     else if (this->diagramGapStem == DIAGRAMGAP30KMH)
556     {
557         time.sprintf("%.2f", timeArray[3]);
558         resultString.append(time);
559         this->setWindowTitle("Result for accelerating 30 km/h");
560     }
561
562     else if (this->diagramGapStem == DIAGRAMGAP20KMH)
563     {
564         time.sprintf("%.2f", timeArray[2]);
565         resultString.append(time);
566         this->setWindowTitle("Result for accelerating 20 km/h");
567     }
568
569     else
570     {
571         time.sprintf("%.2f", timeArray[1]);
572         resultString.append(time);
573         this->setWindowTitle("Result for accelerating 10 km/h");
574     }
575 }
576
577 /**
578   * Shows only wanted results and hides
579   * unwanted
580   */
581 void ResultDialog::showOrHideLabels()
582 {
583     if (this->diagramGapStem == DIAGRAMGAP10KMH)
584     {
585         ui->labelResult20kmh->hide();
586         ui->labelResult30kmh->hide();
587         ui->labelResult40kmh->hide();
588         ui->labelResult50kmh->hide();
589         ui->labelResult60kmh->hide();
590         ui->labelResult70kmh->hide();
591         ui->labelResult80kmh->hide();
592         ui->labelResult90kmh->hide();
593         ui->labelResult100kmh->hide();
594     }
595
596     else if (this->diagramGapStem == DIAGRAMGAP20KMH)
597     {
598         ui->labelResult10kmh->show();
599         ui->labelResult20kmh->show();
600         ui->labelResult30kmh->hide();
601         ui->labelResult40kmh->hide();
602         ui->labelResult50kmh->hide();
603         ui->labelResult60kmh->hide();
604         ui->labelResult70kmh->hide();
605         ui->labelResult80kmh->hide();
606         ui->labelResult90kmh->hide();
607         ui->labelResult100kmh->hide();
608     }
609
610     else if (this->diagramGapStem == DIAGRAMGAP30KMH)
611     {
612         ui->labelResult10kmh->show();
613         ui->labelResult20kmh->show();
614         ui->labelResult30kmh->show();
615         ui->labelResult40kmh->hide();
616         ui->labelResult50kmh->hide();
617         ui->labelResult60kmh->hide();
618         ui->labelResult70kmh->hide();
619         ui->labelResult80kmh->hide();
620         ui->labelResult90kmh->hide();
621         ui->labelResult100kmh->hide();
622     }
623
624     else if (this->diagramGapStem == DIAGRAMGAP40KMH)
625     {
626         ui->labelResult10kmh->show();
627         ui->labelResult20kmh->show();
628         ui->labelResult30kmh->show();
629         ui->labelResult40kmh->show();
630         ui->labelResult50kmh->hide();
631         ui->labelResult60kmh->hide();
632         ui->labelResult70kmh->hide();
633         ui->labelResult80kmh->hide();
634         ui->labelResult90kmh->hide();
635         ui->labelResult100kmh->hide();
636     }
637
638     else if (this->diagramGapStem == DIAGRAMGAP50KMH)
639     {
640         ui->labelResult10kmh->show();
641         ui->labelResult20kmh->show();
642         ui->labelResult30kmh->show();
643         ui->labelResult40kmh->show();
644         ui->labelResult50kmh->show();
645         ui->labelResult60kmh->hide();
646         ui->labelResult70kmh->hide();
647         ui->labelResult80kmh->hide();
648         ui->labelResult90kmh->hide();
649         ui->labelResult100kmh->hide();
650     }
651
652     else if (this->diagramGapStem == DIAGRAMGAP60KMH)
653     {
654         ui->labelResult10kmh->show();
655         ui->labelResult20kmh->show();
656         ui->labelResult30kmh->show();
657         ui->labelResult40kmh->show();
658         ui->labelResult50kmh->show();
659         ui->labelResult60kmh->show();
660         ui->labelResult70kmh->hide();
661         ui->labelResult80kmh->hide();
662         ui->labelResult90kmh->hide();
663         ui->labelResult100kmh->hide();
664     }
665
666     else if (this->diagramGapStem == DIAGRAMGAP70KMH)
667     {
668         ui->labelResult10kmh->show();
669         ui->labelResult20kmh->show();
670         ui->labelResult30kmh->show();
671         ui->labelResult40kmh->show();
672         ui->labelResult50kmh->show();
673         ui->labelResult60kmh->show();
674         ui->labelResult70kmh->show();
675         ui->labelResult80kmh->hide();
676         ui->labelResult90kmh->hide();
677         ui->labelResult100kmh->hide();
678     }
679
680     else if (this->diagramGapStem == DIAGRAMGAP80KMH)
681     {
682         ui->labelResult10kmh->show();
683         ui->labelResult20kmh->show();
684         ui->labelResult30kmh->show();
685         ui->labelResult40kmh->show();
686         ui->labelResult50kmh->show();
687         ui->labelResult60kmh->show();
688         ui->labelResult70kmh->show();
689         ui->labelResult80kmh->show();
690         ui->labelResult90kmh->hide();
691         ui->labelResult100kmh->hide();
692     }
693
694     else if (this->diagramGapStem == DIAGRAMGAP90KMH)
695     {
696         ui->labelResult10kmh->show();
697         ui->labelResult20kmh->show();
698         ui->labelResult30kmh->show();
699         ui->labelResult40kmh->show();
700         ui->labelResult50kmh->show();
701         ui->labelResult60kmh->show();
702         ui->labelResult70kmh->show();
703         ui->labelResult80kmh->show();
704         ui->labelResult90kmh->show();
705         ui->labelResult100kmh->hide();
706     }
707
708     else
709     {
710         ui->labelResult10kmh->show();
711         ui->labelResult20kmh->show();
712         ui->labelResult30kmh->show();
713         ui->labelResult40kmh->show();
714         ui->labelResult50kmh->show();
715         ui->labelResult60kmh->show();
716         ui->labelResult70kmh->show();
717         ui->labelResult80kmh->show();
718         ui->labelResult90kmh->show();
719         ui->labelResult100kmh->show();
720     }
721 }
722
723 /**
724   * Checks which target speed has been choosed
725   * @return targetChoice which tells to caller integer value about the target speed
726   * e.g. 20 km/h is value 2 and 60 km/h is value 6
727   */
728 int ResultDialog::getTargetChoice()
729 {
730
731     int targetChoice = 0;
732
733     if (this->diagramGapStem == DIAGRAMGAP10KMH)
734     {
735        targetChoice = 1;
736     }
737
738     else if (this->diagramGapStem == DIAGRAMGAP20KMH)
739     {
740         targetChoice = 2;
741     }
742
743     else if (this->diagramGapStem == DIAGRAMGAP30KMH)
744     {
745         targetChoice = 3;
746     }
747
748     else if (this->diagramGapStem == DIAGRAMGAP40KMH)
749     {
750         targetChoice = 4;
751     }
752
753     else if (this->diagramGapStem == DIAGRAMGAP50KMH)
754     {
755         targetChoice = 5;
756     }
757
758     else if (this->diagramGapStem == DIAGRAMGAP60KMH)
759     {
760         targetChoice = 6;
761     }
762
763     else if (this->diagramGapStem == DIAGRAMGAP70KMH)
764     {
765         targetChoice = 7;
766     }
767
768     else if (this->diagramGapStem == DIAGRAMGAP80KMH)
769     {
770         targetChoice = 8;
771     }
772
773     else if (this->diagramGapStem == DIAGRAMGAP90KMH)
774     {
775         targetChoice = 9;
776     }
777
778     else
779     {
780         targetChoice = 10;
781     }
782     return targetChoice;
783 }
784
785 void ResultDialog::setLabelInfoToUser(QString infoText)
786 {
787     this->ui->labelInfoToUser->setText(infoText);
788 }
789
790 /**
791   * This function enable send server button.
792   */
793 void ResultDialog::setSendServerButtonEnabled()
794 {
795     ui->pushButtonSend->setEnabled(true);
796 }
797
798 /**
799   * This slot function called when ever info button clicked.
800   */
801 void ResultDialog::on_pushButtonInfo_clicked()
802 {
803     if(!helpAccelerationDialog)
804     {
805         helpAccelerationDialog = new HelpAccelerationDialog;
806     }
807     connect(helpAccelerationDialog, SIGNAL(rejected()), this, SLOT(killHelpDialog()));
808     helpAccelerationDialog->show();
809 }
810
811 /**
812   * This slot function called when ever dialog rejected.
813   */
814 void ResultDialog::killHelpDialog()
815 {
816     if(helpAccelerationDialog)
817     {
818         qDebug() << "__Result kill: helpAccelerationDialog";
819         delete helpAccelerationDialog;
820         helpAccelerationDialog = NULL;
821     }
822 }
823 /**
824   * This slot function opens E-mail application with attachment file
825   * (acceleration.png). Image of resultdialog
826   */
827
828 void ResultDialog::on_pushButtonEMail_clicked()
829 {
830     QDesktopServices::openUrl(QUrl("mailto:name@domain.com?Subject=Acceleration Result&Body=Hi, Here are my acceleration result!&Attachment=acceleration.png"));
831 }