|
|
|
|
@@ -6,6 +6,7 @@
|
|
|
|
|
|
|
|
|
|
#include "../mapview/model/IHasMAC.h"
|
|
|
|
|
#include "../mapview/model/IHasFile.h"
|
|
|
|
|
#include "../mapview/model/IHasParams.h"
|
|
|
|
|
|
|
|
|
|
#include <Indoor/floorplan/v2/Floorplan.h>
|
|
|
|
|
|
|
|
|
|
@@ -65,62 +66,13 @@ QComboBox* getOutlineMethods() {
|
|
|
|
|
|
|
|
|
|
ElementParamWidget::ElementParamWidget(QWidget *parent) : QGroupBox(parent) {
|
|
|
|
|
|
|
|
|
|
this->lay = new QGridLayout(this);
|
|
|
|
|
|
|
|
|
|
setMinimumSize(100, 100);
|
|
|
|
|
setMaximumWidth(200);
|
|
|
|
|
setMaximumWidth(250);
|
|
|
|
|
|
|
|
|
|
setTitle("MapElement Parameters");
|
|
|
|
|
QGridLayout* lay = new QGridLayout(this);
|
|
|
|
|
int r = 0;
|
|
|
|
|
|
|
|
|
|
lblDetails = new QLabel();
|
|
|
|
|
lay->addWidget(new QLabel("selected"),r,0);
|
|
|
|
|
lay->addWidget(lblDetails,r,1);
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
name.txt = new QLineEdit();
|
|
|
|
|
name.lbl = new QLabel("name");
|
|
|
|
|
lay->addWidget(name.lbl,r,0);
|
|
|
|
|
lay->addWidget(name.txt,r,1);
|
|
|
|
|
connect(name.txt , SIGNAL(textChanged(QString)), this, SLOT(onNameChange()));
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
mac.lbl = new QLabel("MAC");
|
|
|
|
|
mac.txt = new QLineEdit();
|
|
|
|
|
lay->addWidget(mac.lbl, r, 0);
|
|
|
|
|
lay->addWidget(mac.txt, r, 1);
|
|
|
|
|
connect(mac.txt, SIGNAL(textChanged(QString)), this, SLOT(onMACChanged()));
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
obstacleType.cmb = getObstacleTypes();
|
|
|
|
|
obstacleType.lbl = new QLabel("type");
|
|
|
|
|
lay->addWidget(obstacleType.lbl,r,0);
|
|
|
|
|
lay->addWidget(obstacleType.cmb,r,1);
|
|
|
|
|
connect(obstacleType.cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(onObstacleTypeChange()));
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
material.cmb = getMaterials();
|
|
|
|
|
material.lbl = new QLabel("material");
|
|
|
|
|
lay->addWidget(material.lbl,r,0);
|
|
|
|
|
lay->addWidget(material.cmb,r,1);
|
|
|
|
|
connect(material.cmb , SIGNAL(currentIndexChanged(int)), this, SLOT(onMaterialChange()));
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
fileName.txt = new QLabel();
|
|
|
|
|
fileName.lbl = new QLabel("file");
|
|
|
|
|
fileName.btn = new QPushButton("op");
|
|
|
|
|
lay->addWidget(fileName.lbl,r,0);
|
|
|
|
|
lay->addWidget(fileName.txt,r,1);
|
|
|
|
|
lay->addWidget(fileName.btn,r,2);
|
|
|
|
|
connect(fileName.btn , SIGNAL(clicked(bool)), this, SLOT(onSelectFileName()));
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
outlineMethod.cmb = getOutlineMethods();
|
|
|
|
|
outlineMethod.lbl = new QLabel("outline");
|
|
|
|
|
lay->addWidget(outlineMethod.lbl,r,0);
|
|
|
|
|
lay->addWidget(outlineMethod.cmb,r,1);
|
|
|
|
|
connect(outlineMethod.cmb , SIGNAL(currentIndexChanged(int)), this, SLOT(onOutlineMethodChange()));
|
|
|
|
|
++r;
|
|
|
|
|
QGridLayout* lay = new QGridLayout();
|
|
|
|
|
|
|
|
|
|
// start empty
|
|
|
|
|
setElement(nullptr);
|
|
|
|
|
@@ -129,68 +81,176 @@ ElementParamWidget::ElementParamWidget(QWidget *parent) : QGroupBox(parent) {
|
|
|
|
|
|
|
|
|
|
void ElementParamWidget::setElement(MapModelElement* el) {
|
|
|
|
|
|
|
|
|
|
while ( QWidget* w = this->findChild<QWidget*>() ) {delete w;}
|
|
|
|
|
delete this->layout();
|
|
|
|
|
|
|
|
|
|
this->lay = new QGridLayout();
|
|
|
|
|
this->setLayout(lay);
|
|
|
|
|
int r = 0;
|
|
|
|
|
|
|
|
|
|
this->curElement = el;
|
|
|
|
|
|
|
|
|
|
if (el == nullptr) {
|
|
|
|
|
lblDetails->setText("-");
|
|
|
|
|
} else if (dynamic_cast<MMFloorObstacleLine*>(el)) {
|
|
|
|
|
MMFloorObstacleLine* obs = dynamic_cast<MMFloorObstacleLine*>(el);
|
|
|
|
|
lblDetails->setText("Obstacle");
|
|
|
|
|
} else if (dynamic_cast<MMFloorOutlinePolygon*>(el)) {
|
|
|
|
|
MMFloorOutlinePolygon* poly = dynamic_cast<MMFloorOutlinePolygon*>(el);
|
|
|
|
|
std::string txt = "Polygon (" + std::to_string(poly->getPolygon()->poly.points.size()) + " Points)";
|
|
|
|
|
lblDetails->setText(txt.c_str());
|
|
|
|
|
} else {
|
|
|
|
|
lblDetails->setText("?");
|
|
|
|
|
}
|
|
|
|
|
// if (el == nullptr) {
|
|
|
|
|
// lblDetails->setText("-");
|
|
|
|
|
// } else if (dynamic_cast<MMFloorObstacleLine*>(el)) {
|
|
|
|
|
// MMFloorObstacleLine* obs = dynamic_cast<MMFloorObstacleLine*>(el);
|
|
|
|
|
// lblDetails->setText("Obstacle");
|
|
|
|
|
// } else if (dynamic_cast<MMFloorOutlinePolygon*>(el)) {
|
|
|
|
|
// MMFloorOutlinePolygon* poly = dynamic_cast<MMFloorOutlinePolygon*>(el);
|
|
|
|
|
// std::string txt = "Polygon (" + std::to_string(poly->getPolygon()->poly.points.size()) + " Points)";
|
|
|
|
|
// lblDetails->setText(txt.c_str());
|
|
|
|
|
// } else {
|
|
|
|
|
// lblDetails->setText("?");
|
|
|
|
|
// }
|
|
|
|
|
|
|
|
|
|
// material? -> select in combo-box
|
|
|
|
|
{
|
|
|
|
|
IHasMaterial* elem = dynamic_cast<IHasMaterial*>(el);
|
|
|
|
|
material.cmb->setVisible(elem != nullptr);
|
|
|
|
|
material.lbl->setVisible(elem != nullptr);
|
|
|
|
|
if (elem) {material.cmb->setCurrentIndex((int)elem->getMaterial());}
|
|
|
|
|
if (elem) {
|
|
|
|
|
material.cmb = getMaterials();
|
|
|
|
|
material.lbl = new QLabel("material");
|
|
|
|
|
lay->addWidget(material.lbl,r,0);
|
|
|
|
|
lay->addWidget(material.cmb,r,1);
|
|
|
|
|
connect(material.cmb , SIGNAL(currentIndexChanged(int)), this, SLOT(onMaterialChange()));
|
|
|
|
|
material.cmb->setCurrentIndex((int)elem->getMaterial());
|
|
|
|
|
++r;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// obstacle-type? -> select in combo-box
|
|
|
|
|
{
|
|
|
|
|
IHasObstacleType* elem = dynamic_cast<IHasObstacleType*>(el);
|
|
|
|
|
obstacleType.cmb->setVisible(elem != nullptr);
|
|
|
|
|
obstacleType.lbl->setVisible(elem != nullptr);
|
|
|
|
|
if (elem) {obstacleType.cmb->setCurrentIndex((int)elem->getObatcleType());}
|
|
|
|
|
if (elem) {
|
|
|
|
|
obstacleType.cmb = getObstacleTypes();
|
|
|
|
|
obstacleType.lbl = new QLabel("type");
|
|
|
|
|
lay->addWidget(obstacleType.lbl,r,0);
|
|
|
|
|
lay->addWidget(obstacleType.cmb,r,1);
|
|
|
|
|
connect(obstacleType.cmb, SIGNAL(currentIndexChanged(int)), this, SLOT(onObstacleTypeChange()));
|
|
|
|
|
obstacleType.cmb->setCurrentIndex((int)elem->getObatcleType());
|
|
|
|
|
++r;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// has name?
|
|
|
|
|
{
|
|
|
|
|
IHasName* elem = dynamic_cast<IHasName*>(el);
|
|
|
|
|
name.txt->setVisible(elem != nullptr);
|
|
|
|
|
name.lbl->setVisible(elem != nullptr);
|
|
|
|
|
if (elem) {name.txt->setText(elem->getName().c_str());}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// has MAC?
|
|
|
|
|
{
|
|
|
|
|
IHasMAC* elem = dynamic_cast<IHasMAC*>(el);
|
|
|
|
|
mac.lbl->setVisible(elem);
|
|
|
|
|
mac.txt->setVisible(elem);
|
|
|
|
|
if (elem) {mac.txt->setText(elem->getMAC().c_str());}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// has outline method?
|
|
|
|
|
{
|
|
|
|
|
MMFloorOutlinePolygon* elem = dynamic_cast<MMFloorOutlinePolygon*>(el);
|
|
|
|
|
outlineMethod.cmb->setVisible(elem);
|
|
|
|
|
outlineMethod.lbl->setVisible(elem);
|
|
|
|
|
if (elem) {outlineMethod.cmb->setCurrentIndex((int)elem->getMethod());}
|
|
|
|
|
if (elem) {
|
|
|
|
|
QComboBox* cmb = getOutlineMethods();
|
|
|
|
|
QLabel* lbl = new QLabel("outline");
|
|
|
|
|
lay->addWidget(lbl,r,0);
|
|
|
|
|
lay->addWidget(cmb,r,1);
|
|
|
|
|
cmb->setCurrentIndex((int)elem->getMethod());
|
|
|
|
|
connect(cmb, static_cast<void (QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [elem, cmb] (int idx) {
|
|
|
|
|
elem->setMethod( (Floorplan::OutlineMethod) cmb->currentData().toInt() );
|
|
|
|
|
});
|
|
|
|
|
++r;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// has File
|
|
|
|
|
{
|
|
|
|
|
IHasFile* elem = dynamic_cast<IHasFile*>(el);
|
|
|
|
|
fileName.lbl->setVisible(elem);
|
|
|
|
|
fileName.txt->setVisible(elem);
|
|
|
|
|
fileName.btn->setVisible(elem);
|
|
|
|
|
if (elem) {fileName.txt->setText(elem->getFileName().c_str());}
|
|
|
|
|
IHasParams* elem = dynamic_cast<IHasParams*>(el);
|
|
|
|
|
if (elem) {
|
|
|
|
|
|
|
|
|
|
for(int i = 0; i < elem->getNumParams(); ++i) {
|
|
|
|
|
|
|
|
|
|
const Param param = elem->getParamDesc(i);
|
|
|
|
|
const ParamValue value = elem->getParamValue(i);
|
|
|
|
|
|
|
|
|
|
lay->addWidget(new QLabel(param.name.c_str()),r,0);
|
|
|
|
|
|
|
|
|
|
switch(param.type) {
|
|
|
|
|
|
|
|
|
|
case ParamType::FLOAT: {
|
|
|
|
|
const std::string str = std::to_string(value.toFloat());
|
|
|
|
|
QLineEdit* le = new QLineEdit( str.c_str() );
|
|
|
|
|
connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
|
|
|
|
|
const float val = std::stof(str.toStdString());
|
|
|
|
|
elem->setParamValue(i, ParamValue(val));
|
|
|
|
|
});
|
|
|
|
|
lay->addWidget(le,r,1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case ParamType::INT: {
|
|
|
|
|
const std::string str = std::to_string(value.toInt());
|
|
|
|
|
QLineEdit* le = new QLineEdit( str.c_str() );
|
|
|
|
|
connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
|
|
|
|
|
const int val = std::stoi(str.toStdString());
|
|
|
|
|
elem->setParamValue(i, ParamValue(val));
|
|
|
|
|
});
|
|
|
|
|
lay->addWidget(le,r,1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case ParamType::STRING: {
|
|
|
|
|
const std::string str = value.toString();
|
|
|
|
|
QLineEdit* le = new QLineEdit( str.c_str() );
|
|
|
|
|
connect(le, &QLineEdit::textChanged, [i,elem] (const QString& str) {
|
|
|
|
|
elem->setParamValue(i, ParamValue(str.toStdString()));
|
|
|
|
|
});
|
|
|
|
|
lay->addWidget(le,r,1);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case ParamType::FILE: {
|
|
|
|
|
const std::string str = value.toString();
|
|
|
|
|
QLabel* lblFile = new QLabel(str.c_str());
|
|
|
|
|
QPushButton* btn = new QPushButton("<");
|
|
|
|
|
btn->setMaximumSize(32,32);
|
|
|
|
|
connect(btn, &QPushButton::clicked, [i,elem,lblFile] (const bool checked) {
|
|
|
|
|
QString res = QFileDialog::getOpenFileName();
|
|
|
|
|
elem->setParamValue(i, ParamValue(res.toStdString()));
|
|
|
|
|
lblFile->setText(res);
|
|
|
|
|
});
|
|
|
|
|
lay->addWidget(lblFile,r,1);
|
|
|
|
|
lay->addWidget(btn,r,2);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case ParamType::POINT2: {
|
|
|
|
|
const Point2 p2 = value.toPoint2();
|
|
|
|
|
QWidget* subWidget = new QWidget();
|
|
|
|
|
QGridLayout* laySub = new QGridLayout(subWidget); laySub->setMargin(0);
|
|
|
|
|
QLineEdit* txtX = new QLineEdit(QString::number(p2.x));
|
|
|
|
|
QLineEdit* txtY = new QLineEdit(QString::number(p2.y));
|
|
|
|
|
laySub->addWidget(txtX,0,0);
|
|
|
|
|
laySub->addWidget(txtY,0,1);
|
|
|
|
|
lay->addWidget(subWidget,r,1);
|
|
|
|
|
auto onChange = [i,elem,txtX,txtY] (const QString& str) {
|
|
|
|
|
elem->setParamValue(i, ParamValue( Point2(txtX->text().toFloat(), txtY->text().toFloat()) ));
|
|
|
|
|
};
|
|
|
|
|
connect(txtX, &QLineEdit::textChanged, onChange);
|
|
|
|
|
connect(txtY, &QLineEdit::textChanged, onChange);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
case ParamType::POINT3: {
|
|
|
|
|
const Point3 p3 = value.toPoint3();
|
|
|
|
|
QWidget* subWidget = new QWidget();
|
|
|
|
|
QGridLayout* laySub = new QGridLayout(subWidget); laySub->setMargin(0);
|
|
|
|
|
QLineEdit* txtX = new QLineEdit(QString::number(p3.x));
|
|
|
|
|
QLineEdit* txtY = new QLineEdit(QString::number(p3.y));
|
|
|
|
|
QLineEdit* txtZ = new QLineEdit(QString::number(p3.z));
|
|
|
|
|
laySub->addWidget(txtX,0,0);
|
|
|
|
|
laySub->addWidget(txtY,0,1);
|
|
|
|
|
laySub->addWidget(txtZ,0,2);
|
|
|
|
|
lay->addWidget(subWidget,r,1);
|
|
|
|
|
auto onChange = [i,elem,txtX,txtY,txtZ] (const QString& str) {
|
|
|
|
|
elem->setParamValue(i, ParamValue( Point3(txtX->text().toFloat(), txtY->text().toFloat(), txtZ->text().toFloat()) ));
|
|
|
|
|
};
|
|
|
|
|
connect(txtX, &QLineEdit::textChanged, onChange);
|
|
|
|
|
connect(txtY, &QLineEdit::textChanged, onChange);
|
|
|
|
|
connect(txtZ, &QLineEdit::textChanged, onChange);
|
|
|
|
|
break;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
++r;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
@@ -205,22 +265,22 @@ void ElementParamWidget::onObstacleTypeChange() {
|
|
|
|
|
if (el) {el->setObstacleType((Floorplan::ObstacleType) obstacleType.cmb->currentData().toInt() );}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void ElementParamWidget::onNameChange() {
|
|
|
|
|
IHasName* el = dynamic_cast<IHasName*>(this->curElement);
|
|
|
|
|
if (el) {el->setName(name.txt->text().toStdString());}
|
|
|
|
|
}
|
|
|
|
|
//void ElementParamWidget::onNameChange() {
|
|
|
|
|
// IHasName* el = dynamic_cast<IHasName*>(this->curElement);
|
|
|
|
|
// if (el) {el->setName(name.txt->text().toStdString());}
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
void ElementParamWidget::onOutlineMethodChange() {
|
|
|
|
|
MMFloorOutlinePolygon* el = dynamic_cast<MMFloorOutlinePolygon*>(this->curElement);
|
|
|
|
|
if (el) {el->setMethod( (Floorplan::OutlineMethod) outlineMethod.cmb->currentData().toInt() );}
|
|
|
|
|
}
|
|
|
|
|
//void ElementParamWidget::onOutlineMethodChange() {
|
|
|
|
|
// MMFloorOutlinePolygon* el = dynamic_cast<MMFloorOutlinePolygon*>(this->curElement);
|
|
|
|
|
// if (el) {el->setMethod( (Floorplan::OutlineMethod) outlineMethod.cmb->currentData().toInt() );}
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
void ElementParamWidget::onMACChanged() {
|
|
|
|
|
dynamic_cast<IHasMAC*>(curElement)->setMAC(mac.txt->text().toStdString());
|
|
|
|
|
}
|
|
|
|
|
//void ElementParamWidget::onMACChanged() {
|
|
|
|
|
// dynamic_cast<IHasMAC*>(curElement)->setMAC(mac.txt->text().toStdString());
|
|
|
|
|
//}
|
|
|
|
|
|
|
|
|
|
void ElementParamWidget::onSelectFileName() {
|
|
|
|
|
QString res = QFileDialog::getOpenFileName(this);
|
|
|
|
|
dynamic_cast<IHasFile*>(curElement)->setFileName(res.toStdString());
|
|
|
|
|
fileName.lbl->setText(res);
|
|
|
|
|
}
|
|
|
|
|
//void ElementParamWidget::onSelectFileName() {
|
|
|
|
|
// QString res = QFileDialog::getOpenFileName(this);
|
|
|
|
|
// dynamic_cast<IHasFile*>(curElement)->setFileName(res.toStdString());
|
|
|
|
|
// fileName.txt->setText(res);
|
|
|
|
|
//}
|
|
|
|
|
|