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