X-Git-Url: http://git.maemo.org/git/?p=speedfreak;a=blobdiff_plain;f=Client%2Fresultdialog.cpp;h=659f037fd8fdcdb9d235c9a9376de3febe1aa2a1;hp=e10b46e1fe96c3f06df9c7837a9c94af57fa3e4c;hb=74a1541fc05869163401c4885da4445c8940c822;hpb=e555ac29de66892f09396ee7d6cd2a92374629b0 diff --git a/Client/resultdialog.cpp b/Client/resultdialog.cpp index e10b46e..659f037 100644 --- a/Client/resultdialog.cpp +++ b/Client/resultdialog.cpp @@ -1,21 +1,51 @@ +/* + * CarMainWindow main class + * + * @author Janne Änäkkälä + * @copyright (c) 2010 Speed Freak team + * @license http://opensource.org/licenses/gpl-license.php GNU Public License + */ + #include "resultdialog.h" #include "ui_resultdialog.h" +#include "usersettings.h" +#include "math.h" #include +#include + +const int DIAGRAM_WIDTH = 400; +const int DIAGRAM_HEIGHT = 300; + +const int DIAGRAMGAP10KMH = 300; +const int DIAGRAMGAP20KMH = 150; +const int DIAGRAMGAP30KMH = 100; +const int DIAGRAMGAP40KMH = 75; +const int DIAGRAMGAP50KMH = 60; +const int DIAGRAMGAP60KMH = 50; +const double DIAGRAMGAP70KMH = 42.86; +const double DIAGRAMGAP80KMH = 37.5; +const double DIAGRAMGAP90KMH = 33.33; +const int DIAGRAMGAP100KMH = 30; -const QPoint diagramStemStart(50, 350); -const QPoint diagramStemEnd(50, 30); +const int DIAGRAMGAP5S = 80; +const int DIAGRAMGAP10S = 40; +const int DIAGRAMGAP16S = 25; +const int DIAGRAMGAP20S = 20; -const QPoint diagramHorizontalStart(50, 350); -const QPoint diagramHorizontalEnd(450, 350); +const QPoint diagramStemStart(70, 330); +const QPoint diagramStemEnd(70, 30); + +const QPoint diagramHorizontalStart(70, 330); +const QPoint diagramHorizontalEnd(470, 330); const int diagramGap = 30; // Test arrays for changing speeds and times to the points in diagram -static const int speedArray[10] = {10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; +static const int speedArray[11] = {0, 10, 20, 30, 40, 50, 60, 70, 80, 90, 100}; //static const int timeArray[10] = {1, 2, 3, 4, 5, 6, 7, 8, 10, 12}; // Test point array for the diagram. -QPoint points[10]; +QPoint points[11]; /** * Constructor of this class. @@ -26,11 +56,26 @@ ResultDialog::ResultDialog(QWidget *parent) : ui(new Ui::ResultDialog) { ui->setupUi(this); + timeAxelLength = 10; + resultString = ""; + speedList << "0" << "10" << "20" << "30" << "40" << "50" << "60" << "70" << "80" << "90" << "100" ; + timeList << "0" << "1" << "2" << "3" << "4" << "5" << "6" << "7" << "8" << "9" << "10" << "11" + << "12" << "13" << "14" << "15" << "16" << "17" << "18" << "19" << "20"; + this->diagramGapStem = DIAGRAMGAP100KMH; + this->diagramGapHorizontal = DIAGRAMGAP20S; + for (int i = 0; i < 11; i++) + { + timeArray[i] = 0; + } - - - // ui->labelXLine->setText(ui->labelXLine->text().append(": time/ s")); - // ui->labelYLine->setText(ui->labelYLine->text().append(": speed/ km/h")); + if (loginSaved()) + { + ui->pushButtonSend->setEnabled(true); + } + else + { + ui->pushButtonSend->setEnabled(false); + } } /** @@ -59,36 +104,91 @@ void ResultDialog::changeEvent(QEvent *e) */ void ResultDialog::paintEvent(QPaintEvent *) { - QPainter painter(this); + setHeaders(); + QPainter painter(this); + + painter.setRenderHint(QPainter::Antialiasing, true); + painter.setPen(QPen((Qt::gray),2)); + QFont font; + QFont fontForResult; + font.setPixelSize(12); + painter.setFont(font); + painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern)); + + fontForResult.setPixelSize(50); + painter.setFont(fontForResult); + painter.drawText(diagramStemStart.x() + 50, diagramStemStart.y() - 150, resultString); + painter.setFont(font); + + painter.setPen(QPen((Qt::darkCyan),2)); + painter.drawLine(diagramStemStart, diagramStemEnd); + painter.drawLine(diagramHorizontalStart, diagramHorizontalEnd); + painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 100, "S"); + painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 115, "P"); + painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 130, "E"); + painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 145, "E"); + painter.drawText(diagramStemStart.x() - 50, diagramStemEnd.y() + 160, "D"); + painter.drawText(diagramStemStart.x() - 65, diagramStemEnd.y() + 180, "(km/h)"); + + painter.drawText(diagramStemStart.x() + 140, diagramStemStart.y() + 40, "T"); + painter.drawText(diagramStemStart.x() + 150, diagramStemStart.y() + 40, "I"); + painter.drawText(diagramStemStart.x() + 155, diagramStemStart.y() + 40, "M"); + painter.drawText(diagramStemStart.x() + 165, diagramStemStart.y() + 40, "E"); + painter.drawText(diagramStemStart.x() + 180, diagramStemStart.y() + 40, "(s)"); + + int currentX = 0; + int currentY = diagramStemStart.y(); + + painter.setPen(QPen((Qt::darkCyan),1)); + + int i = 0; + // Draws diagram's X-axel + while (currentX <= DIAGRAM_WIDTH) + { + painter.drawLine(currentX + diagramStemStart.x(), currentY, currentX + diagramStemStart.x(), currentY - 300); + painter.drawText(currentX + diagramStemStart.x() - 3, currentY + 20, timeList[i]); + currentX += this->diagramGapHorizontal; + i++; + } - painter.setRenderHint(QPainter::Antialiasing, true); - painter.setPen(QPen((Qt::white),2)); - painter.setBrush(QBrush((Qt::yellow), Qt::SolidPattern)); - painter.drawLine(diagramStemStart, diagramStemEnd); - painter.drawLine(diagramHorizontalStart, diagramHorizontalEnd); + currentX = diagramStemStart.x(); + currentY = 0; - int currentX = diagramStemStart.x(); - int currentY = diagramStemStart.y(); + i = 0; + // Draws diagram's Y-axel + while (currentY >= -(DIAGRAM_HEIGHT)) + { + painter.drawLine(currentX, diagramStemStart.y() + currentY, currentX+400, diagramStemStart.y() + currentY); + painter.drawText(currentX - 25, diagramStemStart.y() + currentY + 3, speedList[i]); + currentY -= this->diagramGapStem; + i++; + } - // Draws diagram's X-axel - for (int i = 0; i < 13; i++) - { - currentX += diagramGap; - painter.drawLine(currentX, currentY, currentX, currentY - 10); - } + painter.setPen(QPen((Qt::red),2)); - currentX = diagramStemStart.x(); - currentY = diagramStemStart.y(); + int pointsToShow = 0; + bool pointsUnderDiagramWidth = true; - // Draws diagram's Y-axel - for (int i = 0; i < 10; i++) + for (i = 0; i < 11 ; i++) + { + if (points[i].x() > diagramHorizontalEnd.x()) { - currentY -= diagramGap; - painter.drawLine(currentX, currentY, currentX+10, currentY); + pointsToShow = i; + pointsUnderDiagramWidth = false; + i = 10; } + } - painter.drawPolyline(points, 4); + // Draws result line to the diagram + if (pointsUnderDiagramWidth) + { + painter.drawPolyline(points, this->getTargetChoice() + 1); + } + else + { + painter.drawPolyline(points, pointsToShow); + } } /** @@ -102,8 +202,11 @@ QPoint ResultDialog::changeMeasuresToDiagramPoint(int aSpeed, qreal aTime) int speedAsPixels; int timeAsPixels; - speedAsPixels = 300*aSpeed/100; - timeAsPixels = 300*aTime/10; + + // Calculate speed and time to the point which can be drawn to the diagram + speedAsPixels = (DIAGRAM_HEIGHT*aSpeed) / (this->getTargetChoice() * 10); + timeAsPixels = DIAGRAM_WIDTH*aTime/timeAxelLength; + point.setY(diagramStemStart.y()-speedAsPixels); point.setX(diagramStemStart.x()+timeAsPixels); @@ -111,67 +214,542 @@ QPoint ResultDialog::changeMeasuresToDiagramPoint(int aSpeed, qreal aTime) } /** - * Saves the given measures to array. - * @param pMeasures has information about acceleration. + * Sets result times in to the labels. */ -void ResultDialog::saveMeasuresToArray(Measures *pMeasures) +void ResultDialog::setTimesIntoLabels() { - timeArray[0] = pMeasures->getTime10kmh(); - timeArray[1] = pMeasures->getTime20kmh(); - timeArray[2] = pMeasures->getTime30kmh(); - timeArray[3] = pMeasures->getTime40kmh(); - timeArray[4] = pMeasures->getTime50kmh(); - timeArray[5] = pMeasures->getTime60kmh(); - timeArray[6] = pMeasures->getTime70kmh(); - timeArray[7] = pMeasures->getTime80kmh(); - timeArray[8] = pMeasures->getTime90kmh(); - timeArray[9] = pMeasures->getTime100kmh(); - - for (int i = 0; i < 4; i++) - { - points[i] = changeMeasuresToDiagramPoint(speedArray[i], timeArray[i]); - } - QString time, timeInteger; - timeInteger.setNum(timeArray[3]); + timeInteger.setNum(timeArray[4]); time = "0 - 40 km/h: "; time.append(timeInteger); ui->labelResult40kmh->setText(time); - timeInteger.setNum(timeArray[2]); + timeInteger.setNum(timeArray[3]); time = "0 - 30 km/h: "; time.append(timeInteger); ui->labelResult30kmh->setText(time); - timeInteger.setNum(timeArray[1]); + timeInteger.setNum(timeArray[2]); time = "0 - 20 km/h: "; time.append(timeInteger); ui->labelResult20kmh->setText(time); - timeInteger.setNum(timeArray[0]); + timeInteger.setNum(timeArray[1]); time = "0 - 10 km/h: "; time.append(timeInteger); ui->labelResult10kmh->setText(time); - /* timeInteger.setNum(timeArray[5]); + timeInteger.setNum(timeArray[6]); time = "0 - 60 km/h: "; time.append(timeInteger); - ui->labelResult_5->setText(time); + ui->labelResult60kmh->setText(time); - timeInteger.setNum(timeArray[4]); + timeInteger.setNum(timeArray[5]); time = "0 - 50 km/h: "; time.append(timeInteger); - ui->labelResult_6->setText(time); + ui->labelResult50kmh->setText(time); - timeInteger.setNum(timeArray[3]); - time = "0 - 40 km/h: "; + timeInteger.setNum(timeArray[7]); + time = "0 - 70 km/h: "; time.append(timeInteger); - ui->labelResult_7->setText(time);*/ + ui->labelResult70kmh->setText(time); - this->repaint(); + timeInteger.setNum(timeArray[8]); + time = "0 - 80 km/h: "; + time.append(timeInteger); + ui->labelResult80kmh->setText(time); + + timeInteger.setNum(timeArray[9]); + time = "0 - 90 km/h: "; + time.append(timeInteger); + ui->labelResult90kmh->setText(time); + + timeInteger.setNum(timeArray[10]); + time = "0 - 100 km/h: "; + time.append(timeInteger); + ui->labelResult100kmh->setText(time); + + showOrHideLabels(); +} + +/** + * Sets right timeAxelLength value depending the time which + * has spent to reach target speed. + */ +void ResultDialog::setTimeAxelLength(int pChoice) +{ + if (timeArray[pChoice] <= 5.0) + { + timeAxelLength = 5; + } + + else if (timeArray[pChoice] <= 10.0 && timeArray[pChoice] > 5.0) + { + timeAxelLength = 10; + } + + else if (timeArray[pChoice] <= 16.0 && timeArray[pChoice] > 10.0) + { + timeAxelLength = 16; + } + + else + { + timeAxelLength = 20; + } +} + +/** + * This slot function close result dialog when new run -button has been clicked. + */ +void ResultDialog::on_pushButtonNew_clicked() +{ + for (int i = 0; i < 11; i++) + { + timeArray[i] = 0; + } + resultString = ""; + this->close(); +} + +/** + * This slot function emits sendresult signal for sending results to server when + * send results -button has been clicked. + */ +void ResultDialog::on_pushButtonSend_clicked() +{ + emit sendresult(); + //emit sendresult(timeArray[this->getTargetChoice()]); +} - for (int i = 0; i < 10; i++) +double ResultDialog::getResult() +{ + return timeArray[this->getTargetChoice()]; +} + +/** + * This public function sets diagram's stem gap + * @param pValue is the speed value which determines diagram gap's value + */ +void ResultDialog::setEnd(int pValue) +{ + for (int i = 0; i < 11; i++) { timeArray[i] = 0; } + resultString = ""; + + switch (pValue) + { + case 10: + this->diagramGapStem = DIAGRAMGAP10KMH; + break; + + case 20: + this->diagramGapStem = DIAGRAMGAP20KMH; + break; + + case 30: + this->diagramGapStem = DIAGRAMGAP30KMH; + break; + + case 40: + this->diagramGapStem = DIAGRAMGAP40KMH; + break; + + case 50: + this->diagramGapStem = DIAGRAMGAP50KMH; + break; + + case 60: + this->diagramGapStem = DIAGRAMGAP60KMH; + break; + + case 70: + this->diagramGapStem = DIAGRAMGAP70KMH; + break; + + case 80: + this->diagramGapStem = DIAGRAMGAP80KMH; + break; + + case 90: + this->diagramGapStem = DIAGRAMGAP90KMH; + break; + + case 100: + this->diagramGapStem = DIAGRAMGAP100KMH; + break; + + default: + this->diagramGapStem = DIAGRAMGAP100KMH; + break; + } +} + +/** + * This public function stores time in timeArray + * @param pSpeed is the speed value at the time so we know where store time + * @param pTime is the result which needs to be store in timeArray + */ +void ResultDialog::setValue(int pSpeed, double pTime) +{ + //timeArray[0] = 0; + if (pTime <= 5.0) + { + this->diagramGapHorizontal = DIAGRAMGAP5S; + } + + else if (pTime <= 10.0 && pTime > 5.0) + { + this->diagramGapHorizontal = DIAGRAMGAP10S; + } + + else if (pTime <= 16.0 && pTime > 10.0) + { + this->diagramGapHorizontal = DIAGRAMGAP16S; + } + + else + { + this->diagramGapHorizontal = DIAGRAMGAP20S; + } + + switch (pSpeed) + { + case 10: + timeArray[1] = pTime; + break; + case 20: + timeArray[2] = pTime; + break; + case 30: + timeArray[3] = pTime; + break; + case 40: + timeArray[4] = pTime; + break; + case 50: + timeArray[5] = pTime; + break; + case 60: + timeArray[6] = pTime; + break; + case 70: + timeArray[7] = pTime; + break; + case 80: + timeArray[8] = pTime; + break; + case 90: + timeArray[9] = pTime; + break; + case 100: + timeArray[10] = pTime; + break; + } + + setTimeAxelLength(getTargetChoice()); + + for (int i = 0; i < 11; i++) + { + points[i] = changeMeasuresToDiagramPoint(speedArray[i], timeArray[i]); + } + + setTimesIntoLabels(); + this->repaint(); +} + +/** + * Sets dialog's heading and result text + */ +void ResultDialog::setHeaders() +{ + //QString resultString; + resultString.append("Time was "); + + QString time; + + if (this->diagramGapStem == DIAGRAMGAP100KMH) + { + time.sprintf("%.2f", timeArray[10]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 100 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP90KMH) + { + time.sprintf("%.2f", timeArray[9]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 90 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP80KMH) + { + time.sprintf("%.2f", timeArray[8]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 80 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP70KMH) + { + time.sprintf("%.2f", timeArray[7]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 70 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP60KMH) + { + time.sprintf("%.2f", timeArray[6]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 60 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP50KMH) + { + time.sprintf("%.2f", timeArray[5]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 50 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP40KMH) + { + time.sprintf("%.2f", timeArray[4]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 40 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP30KMH) + { + time.sprintf("%.2f", timeArray[3]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 30 km/h"); + } + + else if (this->diagramGapStem == DIAGRAMGAP20KMH) + { + time.sprintf("%.2f", timeArray[2]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 20 km/h"); + } + + else + { + time.sprintf("%.2f", timeArray[1]); + resultString.append(time); + this->setWindowTitle("Result for accelerating 10 km/h"); + } +} + +/** + * Shows only wanted results and hides + * unwanted + */ +void ResultDialog::showOrHideLabels() +{ + if (this->diagramGapStem == DIAGRAMGAP10KMH) + { + ui->labelResult20kmh->hide(); + ui->labelResult30kmh->hide(); + ui->labelResult40kmh->hide(); + ui->labelResult50kmh->hide(); + ui->labelResult60kmh->hide(); + ui->labelResult70kmh->hide(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP20KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->hide(); + ui->labelResult40kmh->hide(); + ui->labelResult50kmh->hide(); + ui->labelResult60kmh->hide(); + ui->labelResult70kmh->hide(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP30KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->hide(); + ui->labelResult50kmh->hide(); + ui->labelResult60kmh->hide(); + ui->labelResult70kmh->hide(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP40KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->hide(); + ui->labelResult60kmh->hide(); + ui->labelResult70kmh->hide(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP50KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->show(); + ui->labelResult60kmh->hide(); + ui->labelResult70kmh->hide(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP60KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->show(); + ui->labelResult60kmh->show(); + ui->labelResult70kmh->hide(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP70KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->show(); + ui->labelResult60kmh->show(); + ui->labelResult70kmh->show(); + ui->labelResult80kmh->hide(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP80KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->show(); + ui->labelResult60kmh->show(); + ui->labelResult70kmh->show(); + ui->labelResult80kmh->show(); + ui->labelResult90kmh->hide(); + ui->labelResult100kmh->hide(); + } + + else if (this->diagramGapStem == DIAGRAMGAP90KMH) + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->show(); + ui->labelResult60kmh->show(); + ui->labelResult70kmh->show(); + ui->labelResult80kmh->show(); + ui->labelResult90kmh->show(); + ui->labelResult100kmh->hide(); + } + + else + { + ui->labelResult10kmh->show(); + ui->labelResult20kmh->show(); + ui->labelResult30kmh->show(); + ui->labelResult40kmh->show(); + ui->labelResult50kmh->show(); + ui->labelResult60kmh->show(); + ui->labelResult70kmh->show(); + ui->labelResult80kmh->show(); + ui->labelResult90kmh->show(); + ui->labelResult100kmh->show(); + } +} + +/** + * Checks which target speed has been choosed + * @return targetChoice which tells to caller integer value about the target speed + * e.g. 20 km/h is value 2 and 60 km/h is value 6 + */ +int ResultDialog::getTargetChoice() +{ + + int targetChoice = 0; + + if (this->diagramGapStem == DIAGRAMGAP10KMH) + { + targetChoice = 1; + } + + else if (this->diagramGapStem == DIAGRAMGAP20KMH) + { + targetChoice = 2; + } + + else if (this->diagramGapStem == DIAGRAMGAP30KMH) + { + targetChoice = 3; + } + + else if (this->diagramGapStem == DIAGRAMGAP40KMH) + { + targetChoice = 4; + } + + else if (this->diagramGapStem == DIAGRAMGAP50KMH) + { + targetChoice = 5; + } + + else if (this->diagramGapStem == DIAGRAMGAP60KMH) + { + targetChoice = 6; + } + + else if (this->diagramGapStem == DIAGRAMGAP70KMH) + { + targetChoice = 7; + } + + else if (this->diagramGapStem == DIAGRAMGAP80KMH) + { + targetChoice = 8; + } + + else if (this->diagramGapStem == DIAGRAMGAP90KMH) + { + targetChoice = 9; + } + + else + { + targetChoice = 10; + } + return targetChoice; +} + +void ResultDialog::setLabelInfoToUser(QString infoText) +{ + this->ui->labelInfoToUser->setText(infoText); }