/*
* RouteDialog class
*
- * @author Olavi Pulkkinen <olavi.pulkkinen@fudeco.com>
- * @copyright (c) 2010 Speed Freak team
- * @license http://opensource.org/licenses/gpl-license.php GNU Public License
+ * @author Olavi Pulkkinen <olavi.pulkkinen@fudeco.com>
+ * @author Toni Jussila <toni.jussila@fudeco.com>
+ * @copyright (c) 2010 Speed Freak team
+ * @license http://opensource.org/licenses/gpl-license.php GNU Public License
*/
#include "routedialog.h"
#include <QFile>
#include <QFileDialog>
#include <QPolygon>
+#include <QDebug>
-/*
+/**
* Vector class.
* In starting Qt 4.6 there is QVector3D.
* Later (updating Qt version) this class can be removed.
void transformseg( Viewing *v, Vector *v1, Vector *v2, int *xscreen1, int *yscreen1, int *xscreen2, int *yscreen2 );
#define R 6378.140 // The radius of the earth by kilometers
-/*
+
+/**
* count distance of two points (defined by longitude & latitude)
* on the surface of the earth.
*/
return R*c; // Return distance in kilometers
}
+/**
+ * Constructor of this class.
+ */
RouteDialog::RouteDialog(QWidget *parent) :
- QDialog(parent),
- ui(new Ui::RouteDialog)
+ QDialog(parent), ui(new Ui::RouteDialog)
{
+ qDebug() << "__RouteDialog";
ui->setupUi(this);
+
+ helpRoutingDialog = NULL;
+
this->setWindowTitle("Route");
left = 5; top = 5; right = 495; bottom = 295; // Limits in screen coordinates
- // Send rout to server button disable/enable.
- ui->sendPushButton->setEnabled(false);
- if (loginSaved())
- {
- ui->sendPushButton->setEnabled(true);
- }
+ // Button settings
+ ui->sendPushButton->setAutoFillBackground(true);
+ ui->sendPushButton->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+ ui->newPushButton->setAutoFillBackground(true);
+ ui->newPushButton->setStyleSheet("background-color: rgb(0, 0, 0); color: rgb(255, 255, 255)");
+
+ // Clear labels
+ ui->labelInfoToUser->setText("");
+ ui->speedValueLabel->setText("");
+
+ // Check login
+ checkLogin();
}
+/**
+ * Destructor of this class.
+ */
RouteDialog::~RouteDialog()
{
- delete ui;
+ qDebug() << "__~RouteDialog";
+ if(ui)
+ delete ui;
}
+/**
+ *
+ */
void RouteDialog::changeEvent(QEvent *e)
{
QDialog::changeEvent(e);
break;
}
}
+
+/**
+ *
+ */
int RouteDialog::getLeft()
{
return left;
}
+
+/**
+ *
+ */
int RouteDialog::getRight()
{
return right;
}
+
+/**
+ *
+ */
int RouteDialog::getTop()
{
return top;
}
+
+/**
+ *
+ */
int RouteDialog::getBottom()
{
return bottom;
}
-void drawFlag( RouteDialog *rD, QPainter *p, int x, int y)
+/**
+ *
+ */
+void drawFlag( RouteDialog *rD, QPainter *p, int x, int y, QString startFinish)
{
/*QPolygon pg;
p->drawLine( x, y-25, x+10, y-20);
p->drawLine( x+10, y-20, x, y-15);
p->drawLine( x, y-15, x, y-25);
+
+ // Draw start or finish
+ p->drawText(x+10, y, startFinish);
}
else
{
p->drawLine( x, y-25, x-10, y-20);
p->drawLine( x-10, y-20, x, y-15);
p->drawLine( x, y-15, x, y-25);
- }
+ // Draw start or finish
+ p->drawText(x+10, y, startFinish);
+ }
}
else if (y <= (rD->getTop() + 25))
{
p->drawLine( x, y+25, x+10, y+20);
p->drawLine( x+10, y+20, x, y+15);
p->drawLine( x, y+15, x, y+25);
+
+ // Draw start or finish
+ p->drawText(x+10, y+15, startFinish);
}
else
{
p->drawLine( x, y+25, x-10, y+20);
p->drawLine( x-10, y+20, x, y+15);
p->drawLine( x, y+15, x, y+25);
+
+ // Draw start or finish
+ p->drawText(x+10, y+15, startFinish);
}
}
//p->drawPolygon();
/* */
void RouteDialog::paintEvent(QPaintEvent *)
{
+ // Check login
+ checkLogin();
+
int type = 0; // 0 for 2d, 1 for 3d
int startx, starty; // Starting point of the route
int i, maxi;
int x1Screen, y1Screen, x2Screen, y2Screen;
Vector v1, v2;
QPainter painter(this);
+ int startStop = 0;
painter.setRenderHint(QPainter::Antialiasing, true);
painter.setPen(QPen((Qt::white),2));
// Starting point
startx = x1Screen; starty = y1Screen;
// painter.drawEllipse( x1Screen-5, y1Screen-5, 10, 10);
- drawFlag( this, &painter, x1Screen , y1Screen);
+ drawFlag( this, &painter, x1Screen, y1Screen, "Start" );
}
painter.drawLine( x1Screen, y1Screen, x2Screen, y2Screen);
}
if (x2Screen != startx || y2Screen != starty)
{
//painter.drawEllipse( x2Screen-5, y2Screen-5, 10, 10);
- drawFlag( this, &painter,x2Screen, y2Screen );
+ drawFlag( this, &painter, x2Screen, y2Screen, "Finish" );
}
{
// Show max velocity point by yellow circle
painter.drawEllipse( x1Screen-5, y1Screen-5, 10, 10);
+ painter.drawEllipse( 650, 225, 10, 10);
QString jono;
- jono = QString("%1 m/s").arg(maxv);
+ //jono = QString("%1 km/h").arg(maxv);
+ jono.sprintf("%.1f km/h", maxv); // Show only 1 decimal
ui->speedValueLabel->setText(jono);
}
}
+/**
+ *
+ */
bool RouteDialog::readRouteFromFile( QString &routeFile)
{
+ QString rFile = routeFile; //Not used
Vector temp;
QString rivi;
QFile file;
- QString fileName = QFileDialog::getOpenFileName(this,
- tr("Read Route"), "./", tr("Route Files (*.txt)"));
+ //QString fileName = QFileDialog::getOpenFileName(this,
+ // tr("Read Route"), "./", tr("Route Files (*.txt)"));
- file.setFileName( fileName);
+ //file.setFileName( fileName);
+ file.setFileName( "routetemp.xml");
if (!file.open(QIODevice::ReadOnly))
{
QMessageBox::about(0, "Error", "File not found");
}
vertexList.clear();
+
while(!file.atEnd())
{
+ int count;
+ bool allRead;
+ QString astr1, astr2, astr3, astr4;
QString str1, str2, str3, str4;
rivi = file.readLine();
+ allRead = false;
+ count = 0;
+ while( !allRead)
+ {
+ astr1 = rivi.section(" ", count*4+1, count*4+1); // latitude=""
+ astr2 = rivi.section(" ", count*4+2, count*4+2); // longitude=""
+ astr3 = rivi.section(" ", count*4+3, count*4+3); // altitude=""
+ astr4 = rivi.section(" ", count*4+4, count*4+4); // speed=""
+
+ {
+ double x, y, z, v;
+ str1 = astr1.section('"',1,1);
+ str2 = astr2.section('"',1,1);
+ str3 = astr3.section('"',1,1);
+ str4 = astr4.section('"',1,1);
+ //QString str = QString("%1 %2 %3 %4").arg(str1).arg(str2).arg(str3).arg(str4);
+ //QMessageBox::about(0, "LUKEE", str);
+ /* */
+
+ if (str1.length() > 0)
+ {
+ x = str2.toDouble();// latitude y-value
+ y = str1.toDouble();// longitude x-value
+ z = str3.toDouble();// altitude z-value
+ v = str4.toDouble();// speed km/h
+ // QString str = QString("%1 %2 %3 %4").arg(x).arg(y).arg(z).arg(v);
+ // QMessageBox::about(0, "LUKEE", str);
+ temp.setX( x); // Longitude
+ temp.setY( y); // Latitude
+ temp.setZ( z); // altitude
+ temp.setV( v);
+
+ vertexList.append(temp);
+ count++;
+ }
+ else
+ {
+ allRead = true;
+ }
+ }
+ }
+ // Older version
+ /*
str1 = rivi.section(" ", 0, 0);
if (str1.compare("Start:") != 0 && str1.compare("Stop:") != 0)
{
str1 = rivi.section(" ", 2, 2); // latitude y-value
str2 = rivi.section(" ", 4, 4); // longitude x-value
str3 = rivi.section(" ", 6, 6); // altitude z-value
- str4 = rivi.section(" ", 8, 8); // speed m/s
+ str4 = rivi.section(" ", 8, 8); // speed km/h
//QString str = QString("la: %1 lo: %2 al: %3").arg(str1).arg(str2).arg(str3);
//QMessageBox::about(0, "LUKEE", str);
vertexList.append(temp);
}
}
+ */
}
file.close();
return true;
}
-/*
+/**
* Find out data range for x-, y- and z-coordinates
*/
void dataMinMax( void)
//QMessageBox::about(0,"Tark", jono);
}
-/*
+/**
* Setting the point where the viewed object is. In the middle of datapoints.
*/
void setAtPoint( Viewing *v)
* */
}
-/*
+/**
* Setting the point where the object is viewed by eye.
*/
void setFromPoint( Viewing *v)
#define RIGHTEDGE 0x02
#define BOTTOMEDGE 0x04
#define TOPEDGE 0x08
-/*
+
+/**
* Returns a code specifying which edge in the viewing pyramid was crossed.
* There may be more than one.
*/
return c;
}
-/*
+/**
* Converts clipped world coordinates to screen coordinates.
*/
void WORLDtoSCREEN( qreal xWorld, qreal yWorld, int *xScreen, int *yScreen)
*yScreen = (int) (c*yWorld+d);
}
-/*
+/**
* Clips the line segment in three-dimensional coordinates to the
* viewing pyramid.
*/
//Now ready to draw line( xscreen1, yscreen1, xscreen2, yscreen2);
}
-/*
+/**
* Transform the segment connecting the two vectors into the viewing plane.
* clip3d() clips the line if needed.
*/
clip3d(x1,y1,z1,x2,y2,z2, xscreen1, yscreen1, xscreen2, yscreen2 );
}
+/**
+ * This slot function is called when ever new push button clicked.
+ */
void RouteDialog::on_newPushButton_clicked()
{
close(); // go back to previous dialog
}
+/**
+ * This slot function is called when ever send push button clicked.
+ */
void RouteDialog::on_sendPushButton_clicked()
{
- // Send route points file to server
+ ui->sendPushButton->setEnabled(false);
+ emit sendroute();
+}
+
+/**
+ * This function is set info text to user.
+ */
+void RouteDialog::setLabelInfoToUser(QString infoText)
+{
+ this->ui->labelInfoToUser->setText(infoText);
+}
+
+/**
+ * This function enable send server button.
+ */
+void RouteDialog::setSendServerButtonEnabled()
+{
+ ui->sendPushButton->setEnabled(true);
+}
+
+/**
+ * This function check login and set send route to server button disabled/enabled.
+ */
+void RouteDialog::checkLogin()
+{
+ if (loginSaved())
+ {
+ ui->sendPushButton->setEnabled(true);
+ ui->labelInfoToUser->setText("");
+ }
+ else
+ {
+ ui->sendPushButton->setEnabled(false);
+ ui->labelInfoToUser->setText("You're not logged! Please register or log in.");
+ }
+}
+
+/**
+ * This slot function called when ever info button clicked.
+ */
+void RouteDialog::on_pushButtonInfo_clicked()
+{
+ if(!helpRoutingDialog)
+ {
+ helpRoutingDialog = new HelpRoutingDialog;
+ }
+ connect(helpRoutingDialog, SIGNAL(rejected()), this, SLOT(killHelpDialog()));
+ helpRoutingDialog->show();
+}
+
+/**
+ * This slot function called when ever dialog rejected.
+ */
+void RouteDialog::killHelpDialog()
+{
+ if(helpRoutingDialog)
+ {
+ qDebug() << "__Route kill: helpRoutingDialog";
+ delete helpRoutingDialog;
+ helpRoutingDialog = NULL;
+ }
}