|
@@ -1,10 +1,15 @@
|
|
|
#include "dialogroadobject_marking.h"
|
|
|
#include "ui_dialogroadobject_marking.h"
|
|
|
|
|
|
+#include <iostream>
|
|
|
|
|
|
static std::string gstr_e_markingsideType[] ={"left","right","front","rear"};
|
|
|
+static std::string gstr_e_markingweight[] ={"standard","bold"};
|
|
|
+static std::string gstr_e_markingcolor[] = {"standard","blue","green","red","white","yellow","orange"};
|
|
|
|
|
|
static const int gmarkingsideTypeCount = 4;
|
|
|
+static const int gmarkingweightCount = 2;
|
|
|
+static const int gmarkingcolorcount = 7;
|
|
|
|
|
|
|
|
|
DialogRoadObject_Marking::DialogRoadObject_Marking(Object * pObject,QWidget *parent) :
|
|
@@ -22,8 +27,24 @@ DialogRoadObject_Marking::DialogRoadObject_Marking(Object * pObject,QWidget *par
|
|
|
{
|
|
|
mpCBside->addItem(gstr_e_markingsideType[i].data());
|
|
|
}
|
|
|
- mpCBside->addItem("NO");
|
|
|
- mpCBside->setCurrentIndex(gmarkingsideTypeCount);
|
|
|
+ mpCBside->setCurrentIndex(0);
|
|
|
+
|
|
|
+ for(i=0;i<gmarkingweightCount;i++)
|
|
|
+ {
|
|
|
+ mpCBweight->addItem(gstr_e_markingweight[i].data());
|
|
|
+ }
|
|
|
+ mpCBweight->addItem("NO");
|
|
|
+ mpCBweight->setCurrentIndex(gmarkingweightCount);
|
|
|
+
|
|
|
+ for(i=0;i<gmarkingcolorcount;i++)
|
|
|
+ {
|
|
|
+ mpCBcolor->addItem(gstr_e_markingcolor[i].data());
|
|
|
+ }
|
|
|
+ mpCBcolor->setCurrentIndex(0);
|
|
|
+
|
|
|
+ UpdateCB();
|
|
|
+
|
|
|
+ setWindowTitle("Edit Marking");
|
|
|
|
|
|
|
|
|
}
|
|
@@ -87,24 +108,337 @@ void DialogRoadObject_Marking::CreateView()
|
|
|
connect(mpPBDelete,SIGNAL(clicked(bool)),this,SLOT(onClickDelete()));
|
|
|
connect(mpPBChange,SIGNAL(clicked(bool)),this,SLOT(onClickChange()));
|
|
|
|
|
|
+
|
|
|
}
|
|
|
|
|
|
void DialogRoadObject_Marking::CurrentMarking(int index)
|
|
|
{
|
|
|
+ if(index == -1)return;
|
|
|
+ if(mpObject == 0)return;
|
|
|
+
|
|
|
+ Object * pObject = mpObject;
|
|
|
+
|
|
|
+ Object_markings * pmarkings = pObject->Getmarkings();
|
|
|
+
|
|
|
+ if(pmarkings == NULL)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Object_markings_marking * pmarking = pmarkings->GetMarking(index);
|
|
|
+
|
|
|
+ if(pmarking == NULL)
|
|
|
+ {
|
|
|
+ std::cout<<" Object Marking "<<index<<" is NULL"<<std::endl;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ std::string strside,strweight,strcolor;
|
|
|
+ double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
|
|
|
+ bool bweight = false;
|
|
|
+ bool bwidth = false;
|
|
|
+ bool bzOffset = false;
|
|
|
+
|
|
|
+ pmarking->Getside(strside);
|
|
|
+ if(pmarking->Getweight(strweight) == 1)
|
|
|
+ {
|
|
|
+ bweight = true;
|
|
|
+ }
|
|
|
+ strcolor = pmarking->Getcolor();
|
|
|
+ if(pmarking->Getwidth(fwidth) == 1)
|
|
|
+ {
|
|
|
+ bwidth = true;
|
|
|
+ }
|
|
|
+ if(pmarking->GetzOffset(fzOffset) == 1)
|
|
|
+ {
|
|
|
+ bzOffset = true;
|
|
|
+ }
|
|
|
+ fspaceLength = pmarking->GetspaceLength();
|
|
|
+ flineLength = pmarking->GetlineLength();
|
|
|
+ fstartOffset = pmarking->GetstartOffset();
|
|
|
+ fstopOffset = pmarking->GetstopOffset();
|
|
|
+
|
|
|
+ int indexside =0;
|
|
|
+ int i;
|
|
|
+ for(i=0;i<gmarkingsideTypeCount;i++)
|
|
|
+ {
|
|
|
+ if(gstr_e_markingsideType[i] == strside)
|
|
|
+ {
|
|
|
+ indexside = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int indexweight = gmarkingweightCount;
|
|
|
+ for(i=0;i<gmarkingweightCount;i++)
|
|
|
+ {
|
|
|
+ if(gstr_e_markingweight[i] == strweight)
|
|
|
+ {
|
|
|
+ indexweight = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int indexcolor = 0;
|
|
|
+ for(i=0;i<gmarkingcolorcount;i++)
|
|
|
+ {
|
|
|
+ if(gstr_e_markingcolor[i] == strcolor)
|
|
|
+ {
|
|
|
+ indexcolor = i;
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ mpCBside->setCurrentIndex(indexside);
|
|
|
+ if(bweight) mpCBweight->setCurrentIndex(indexweight);
|
|
|
+ else mpCBweight->setCurrentIndex(gmarkingweightCount);
|
|
|
+ mpCBcolor->setCurrentIndex(indexcolor);
|
|
|
+ if(bwidth) mpLEwidth->setText(QString::number(fwidth));
|
|
|
+ else mpLEwidth->setText("");
|
|
|
+ if(bzOffset) mpLEzOffset->setText(QString::number(fzOffset));
|
|
|
+ else mpLEzOffset->setText("");
|
|
|
+ mpLEspaceLength->setText(QString::number(fspaceLength));
|
|
|
+ mpLElineLength->setText(QString::number(flineLength));
|
|
|
+ mpLEstartOffset->setText(QString::number(fstartOffset));
|
|
|
+ mpLEstopOffset->setText(QString::number(fstopOffset));
|
|
|
+}
|
|
|
+
|
|
|
+void DialogRoadObject_Marking::UpdateCB()
|
|
|
+{
|
|
|
+ mpCBMarking->clear();
|
|
|
+ int i;
|
|
|
+ if(mpObject == 0)return;
|
|
|
+ Object * pObject = mpObject;
|
|
|
|
|
|
+ Object_markings * pmarkings = pObject->Getmarkings();
|
|
|
+ if(pmarkings == NULL)return;
|
|
|
+ int nMarkingCount = pmarkings->GetMarkingCount();
|
|
|
+
|
|
|
+ for(i=0;i<nMarkingCount;i++)
|
|
|
+ {
|
|
|
+ mpCBMarking->addItem(QString("Marking ")+ QString::number(i));
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void DialogRoadObject_Marking::onClickAdd()
|
|
|
{
|
|
|
+ if(mpObject == 0)
|
|
|
+ {
|
|
|
+ QMessageBox::warning(this,"Warning","Object is NULL.",QMessageBox::YesAll);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Object * pObject = mpObject;
|
|
|
+
|
|
|
+ std::string strside,strweight,strcolor;
|
|
|
+ double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
|
|
|
+
|
|
|
+ bool bweight = false;
|
|
|
+ bool bwidth = false;
|
|
|
+ bool bzOffset = false;
|
|
|
+
|
|
|
+ strside = mpCBside->currentText().toStdString();
|
|
|
+
|
|
|
+ if(mpCBweight->currentIndex() != (unsigned int)gmarkingweightCount)
|
|
|
+ {
|
|
|
+ strweight = mpCBweight->currentText().toStdString();
|
|
|
+ bweight = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ strcolor = mpCBcolor->currentText().toStdString();
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEwidth,"width",false,this) == true)
|
|
|
+ {
|
|
|
+ fwidth = mpLEwidth->text().toDouble();
|
|
|
+ bwidth = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEzOffset,"zOffset",false,this) == true)
|
|
|
+ {
|
|
|
+ fzOffset = mpLEzOffset->text().toDouble();
|
|
|
+ bzOffset = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEspaceLength,"spaceLength",true,this) == true)
|
|
|
+ {
|
|
|
+ fspaceLength = mpLEspaceLength->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLElineLength,"lineLength",true,this) == true)
|
|
|
+ {
|
|
|
+ flineLength = mpLElineLength->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEstartOffset,"startOffset",true,this) == true)
|
|
|
+ {
|
|
|
+ fstartOffset = mpLEstartOffset->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEstopOffset,"stopOffset",true,this) == true)
|
|
|
+ {
|
|
|
+ fstopOffset = mpLEstopOffset->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Object_markings * pmarkings = pObject->Getmarkings();
|
|
|
+
|
|
|
+ Object_markings_marking * pmarking;
|
|
|
+
|
|
|
+ if(pmarkings == NULL)
|
|
|
+ {
|
|
|
+ Object_markings xmarkings;
|
|
|
+ unsigned markindex = xmarkings.AddMarking(strside,strcolor,fspaceLength,flineLength,fstartOffset,fstopOffset);
|
|
|
+ pmarking = xmarkings.GetMarking(markindex);
|
|
|
+ if(bweight)pmarking->Setweight(strweight);
|
|
|
+ if(bwidth)pmarking->Setwidth(fwidth);
|
|
|
+ if(bzOffset)pmarking->SetzOffset(fzOffset);
|
|
|
+ pObject->Setmarkings(xmarkings);
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ unsigned markindex = pmarkings->AddMarking(strside,strcolor,fspaceLength,flineLength,fstartOffset,fstopOffset);
|
|
|
+ pmarking = pmarkings->GetMarking(markindex);
|
|
|
+ if(bweight)pmarking->Setweight(strweight);
|
|
|
+ if(bwidth)pmarking->Setwidth(fwidth);
|
|
|
+ if(bzOffset)pmarking->SetzOffset(fzOffset);
|
|
|
+ }
|
|
|
+
|
|
|
+ UpdateCB();
|
|
|
|
|
|
}
|
|
|
|
|
|
void DialogRoadObject_Marking::onClickDelete()
|
|
|
{
|
|
|
+ Object * pObject = mpObject;
|
|
|
+
|
|
|
+ if(mpObject == 0)return;
|
|
|
|
|
|
+ Object_markings * pmarkings = pObject->Getmarkings();
|
|
|
+
|
|
|
+ if(pmarkings == NULL)
|
|
|
+ {
|
|
|
+ QMessageBox::warning(this,"Warning","No Marking",QMessageBox::YesAll);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ pmarkings->DeleteMarking(mpCBMarking->currentIndex());
|
|
|
+
|
|
|
+ if(pmarkings->GetMarkingCount() == 0)
|
|
|
+ {
|
|
|
+ pObject->Resetmarkings();
|
|
|
+ }
|
|
|
+
|
|
|
+ UpdateCB();
|
|
|
}
|
|
|
|
|
|
void DialogRoadObject_Marking::onClickChange()
|
|
|
{
|
|
|
+ Object * pObject = mpObject;
|
|
|
+
|
|
|
+ if(mpObject == 0)return;
|
|
|
+
|
|
|
+ Object_markings * pmarkings = pObject->Getmarkings();
|
|
|
+
|
|
|
+ if(pmarkings == NULL)
|
|
|
+ {
|
|
|
+ QMessageBox::warning(this,"Warning","No Marking",QMessageBox::YesAll);
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ Object_markings_marking * pmarking = pmarkings->GetMarking(mpCBMarking->currentIndex());
|
|
|
+
|
|
|
+ if(pmarking == NULL)
|
|
|
+ {
|
|
|
+ QMessageBox::warning(this,"Warning","Can't GetMarking.",QMessageBox::YesAll);
|
|
|
+ }
|
|
|
+
|
|
|
+ std::string strside,strweight,strcolor;
|
|
|
+ double fwidth,fzOffset,fspaceLength,flineLength,fstartOffset,fstopOffset;
|
|
|
+
|
|
|
+ bool bweight = false;
|
|
|
+ bool bwidth = false;
|
|
|
+ bool bzOffset = false;
|
|
|
+
|
|
|
+ strside = mpCBside->currentText().toStdString();
|
|
|
+
|
|
|
+ if(mpCBweight->currentIndex() != (unsigned int)gmarkingweightCount)
|
|
|
+ {
|
|
|
+ strweight = mpCBweight->currentText().toStdString();
|
|
|
+ bweight = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ strcolor = mpCBcolor->currentText().toStdString();
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEwidth,"width",false,this) == true)
|
|
|
+ {
|
|
|
+ fwidth = mpLEwidth->text().toDouble();
|
|
|
+ bwidth = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEzOffset,"zOffset",false,this) == true)
|
|
|
+ {
|
|
|
+ fzOffset = mpLEzOffset->text().toDouble();
|
|
|
+ bzOffset = true;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEspaceLength,"spaceLength",true,this) == true)
|
|
|
+ {
|
|
|
+ fspaceLength = mpLEspaceLength->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLElineLength,"lineLength",true,this) == true)
|
|
|
+ {
|
|
|
+ flineLength = mpLElineLength->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEstartOffset,"startOffset",true,this) == true)
|
|
|
+ {
|
|
|
+ fstartOffset = mpLEstartOffset->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(ViewCreate::CheckLE(mpLEstopOffset,"stopOffset",true,this) == true)
|
|
|
+ {
|
|
|
+ fstopOffset = mpLEstopOffset->text().toDouble();
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ pmarking->Setside(strside);
|
|
|
+ pmarking->Setweight(strweight);
|
|
|
+ pmarking->Setwidth(fwidth);
|
|
|
+ pmarking->Setcolor(strcolor);
|
|
|
+ pmarking->SetzOffset(fzOffset);
|
|
|
+ pmarking->SetspaceLength(fspaceLength);
|
|
|
+ pmarking->SetlineLength(flineLength);
|
|
|
+ pmarking->SetstartOffset(fstartOffset);
|
|
|
+ pmarking->SetstopOffset(fstopOffset);
|
|
|
|
|
|
+ QMessageBox::information(this,"Info","Change marking successfully",QMessageBox::YesAll);
|
|
|
}
|