#include "dialogeditroadmark.h" #include "ui_dialogeditroadmark.h" const std::string roadcolorchoice[] = {"standard","blue","green","red","white","yellow","orange"}; const std::string lanechangechoice[] = {"both","none","increase","decrease"}; const std::string marktypechoice[] = {"none","solid","broken","solid solid","solid broken", "broken solid","broken broken"}; DialogEditRoadMark::DialogEditRoadMark(Road * pRoad,QWidget *parent) : QDialog(parent), ui(new Ui::DialogEditRoadMark) { mpRoad = pRoad; ui->setupUi(this); int i; for(i=0;i<7;i++)ui->comboBox_color->addItem(QString(roadcolorchoice[i].data())); for(i=0;i<4;i++)ui->comboBox_laneChange->addItem(QString(lanechangechoice[i].data())); for(i=0;i<7;i++)ui->comboBox_MarkType->addItem(QString(marktypechoice[i].data())); ui->comboBox_MarkType->setCurrentIndex(1); ui->comboBox_weight->addItem("standard"); ui->comboBox_weight->addItem("bold"); int nsection = pRoad->GetLaneSectionCount(); for(i=0;iGetLaneSection(i); QString stritemname = QString("s=") + QString::number(pLS->GetS()); ui->comboBox_LaneSection->addItem(stritemname); } if(nsection > 0)on_comboBox_LaneSection_currentIndexChanged(0); setWindowTitle(tr("Edit RoadMark")); } DialogEditRoadMark::~DialogEditRoadMark() { delete ui; } void DialogEditRoadMark::on_comboBox_LaneSection_currentIndexChanged(int index) { if(mpRoad == 0)return; LaneSection * pLS = mpRoad->GetLaneSection(index); ui->comboBox_Lane->clear(); mpCurLS = pLS; if(pLS == 0)return; int nLaneCount = pLS->GetLaneCount(); int i; for(i=0;iGetLane(i); QString stritemname = QString::number(pLane->GetId()); ui->comboBox_Lane->addItem(stritemname); } if(nLaneCount > 0)on_comboBox_Lane_currentIndexChanged(0); } void DialogEditRoadMark::on_comboBox_Lane_currentIndexChanged(int index) { if(mpCurLS == 0)return; Lane * pLane = mpCurLS->GetLane(index); ui->comboBox_Mark->clear(); mpCurLane = pLane; if(pLane == 0)return; ui->comboBox_Mark->clear(); int nRoadMarkCount = pLane->GetLaneRoadMarkCount(); if(nRoadMarkCount == 0) { ui->lineEdit_sOffset->setText(""); ui->lineEdit_width->setText(""); return; } int i; for(i=0;icomboBox_Mark->addItem(QString("s=")+QString::number(pLane->GetLaneRoadMark(i)->GetS())); } on_comboBox_Mark_currentIndexChanged(0); } void DialogEditRoadMark::on_comboBox_Mark_currentIndexChanged(int index) { if(mpCurLane == 0)return; LaneRoadMark * pLaneRoadMark = mpCurLane->GetLaneRoadMark(index); if(pLaneRoadMark == 0)return; ui->comboBox_MarkType->setCurrentIndex(1); std::string strmarktype = pLaneRoadMark->GetType(); int i; const int typechoicecount = 7; for(i=0;icomboBox_MarkType->setCurrentIndex(i); else ui->comboBox_MarkType->setCurrentIndex(1); std::string strlanechange = pLaneRoadMark->GetLaneChange(); const int lanechagnechoicecount = 4; for(i=0;icomboBox_laneChange->setCurrentIndex(i); else ui->comboBox_laneChange->setCurrentIndex(0); std::string strweight = pLaneRoadMark->GetWeight(); if(strweight == "bold")ui->comboBox_weight->setCurrentIndex(1); else ui->comboBox_weight->setCurrentIndex(0); std::string strcolor = pLaneRoadMark->GetColor(); const int lanemarkcolorcount = 7; for(i=0;icomboBox_color->setCurrentIndex(i); else ui->comboBox_color->setCurrentIndex(0); ui->lineEdit_sOffset->setText(QString::number(pLaneRoadMark->GetS())); ui->lineEdit_width->setText(QString::number(pLaneRoadMark->GetWidth())); } void DialogEditRoadMark::on_pushButton_AddLaneRoadMark_clicked() { if(mpCurLS == 0)return; Lane * pLane = mpCurLS->GetLane(ui->comboBox_Lane->currentIndex()); if(pLane != 0) { double soffset = ui->lineEdit_sOffset->text().toDouble(); double fwidth = ui->lineEdit_width->text().toDouble(); if(fwidth<=0)fwidth = 0.15; std::string strcolor = ui->comboBox_color->currentText().toStdString(); std::string strlanechagne = ui->comboBox_laneChange->currentText().toStdString(); std::string strmarktype = ui->comboBox_MarkType->currentText().toStdString(); std::string strweight = ui->comboBox_weight->currentText().toStdString(); pLane->AddRoadMarkRecord(soffset,strmarktype,strweight,strcolor,fwidth,strlanechagne); } on_comboBox_Lane_currentIndexChanged(ui->comboBox_Lane->currentIndex()); } void DialogEditRoadMark::on_pushButton_ChangeLaneRoadMark_clicked() { if(mpCurLS == 0)return; Lane * pLane = mpCurLS->GetLane(ui->comboBox_Lane->currentIndex()); if(pLane != 0) { LaneRoadMark * pLaneRoadMark = pLane->GetLaneRoadMark(ui->comboBox_Mark->currentIndex()); if(pLaneRoadMark != 0) { pLaneRoadMark->SetColor(ui->comboBox_color->currentText().toStdString()); pLaneRoadMark->SetLaneChange(ui->comboBox_laneChange->currentText().toStdString()); pLaneRoadMark->SetS(ui->lineEdit_sOffset->text().toDouble()); double fwidth = ui->lineEdit_width->text().toDouble(); if(fwidth<=0)fwidth = 0.15; pLaneRoadMark->SetWidth(fwidth); pLaneRoadMark->SetType(ui->comboBox_MarkType->currentText().toStdString()); pLaneRoadMark->SetWeight(ui->comboBox_weight->currentText().toStdString()); } } // on_comboBox_Width_currentIndexChanged(ui->comboBox_Width->currentIndex()); } void DialogEditRoadMark::on_pushButton_DeleteLaneRoadMark_clicked() { if(mpCurLS == 0)return; Lane * pLane = mpCurLS->GetLane(ui->comboBox_Lane->currentIndex()); if(pLane != 0) { LaneRoadMark * pLaneRoadMark = pLane->GetLaneRoadMark(ui->comboBox_Mark->currentIndex()); if(pLaneRoadMark != 0) { pLane->DeleteLaneRoadMark(ui->comboBox_Mark->currentIndex()); } } on_comboBox_Lane_currentIndexChanged(ui->comboBox_Lane->currentIndex()); }