#include "ElementParamWidget.h" #include "../mapview/model/MapModelElement.h" #include "../mapview/model/MMFloorObstacleLine.h" #include "../mapview/model/MMFloorOutlinePolygon.h" #include "../mapview/model/IHasMAC.h" #include "../mapview/model/IHasFile.h" #include #include #include #include #include #include #include QComboBox* getMaterials() { using namespace Floorplan; QComboBox* cmbMaterial = new QComboBox(); for (int i = 0; i < (int)Material::_END; ++i) { switch ((Material)i) { case Material::CONCRETE: cmbMaterial->addItem("Concrete", i); break; case Material::UNKNOWN: cmbMaterial->addItem("Unknown ", i); break; case Material::DRYWALL: cmbMaterial->addItem("Drywall", i); break; case Material::WOOD: cmbMaterial->addItem("Wood", i); break; case Material::GLASS: cmbMaterial->addItem("Glass", i); break; case Material::_END: throw 1; } } return cmbMaterial; } QComboBox* getObstacleTypes() { using namespace Floorplan; QComboBox* cmb = new QComboBox(); for (int i = 0; i < (int)ObstacleType::_END; ++i) { switch ((ObstacleType)i) { case ObstacleType::DOOR: cmb->addItem("Door", i); break; case ObstacleType::UNKNOWN: cmb->addItem("Unknown ", i); break; case ObstacleType::WALL: cmb->addItem("Wall", i); break; case ObstacleType::WINDOW: cmb->addItem("Window", i); break; case ObstacleType::HANDRAIL:cmb->addItem("Handrail", i); break; case ObstacleType::PILLAR: cmb->addItem("Pillar", i); break; case ObstacleType::_END: throw 1; } } return cmb; } QComboBox* getOutlineMethods() { using namespace Floorplan; QComboBox* cmb = new QComboBox(); for (int i = 0; i < (int)OutlineMethod::_END; ++i) { switch ((OutlineMethod)i) { case OutlineMethod::ADD: cmb->addItem("add", i); break; case OutlineMethod::REMOVE: cmb->addItem("remove ", i); break; case OutlineMethod::_END: throw 1; } } return cmb; } ElementParamWidget::ElementParamWidget(QWidget *parent) : QGroupBox(parent) { setMinimumSize(100, 100); setMaximumWidth(200); 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; // start empty setElement(nullptr); } void ElementParamWidget::setElement(MapModelElement* el) { this->curElement = el; if (el == nullptr) { lblDetails->setText("-"); } else if (dynamic_cast(el)) { MMFloorObstacleLine* obs = dynamic_cast(el); lblDetails->setText("Obstacle"); } else if (dynamic_cast(el)) { MMFloorOutlinePolygon* poly = dynamic_cast(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(el); material.cmb->setVisible(elem != nullptr); material.lbl->setVisible(elem != nullptr); if (elem) {material.cmb->setCurrentIndex((int)elem->getMaterial());} } // obstacle-type? -> select in combo-box { IHasObstacleType* elem = dynamic_cast(el); obstacleType.cmb->setVisible(elem != nullptr); obstacleType.lbl->setVisible(elem != nullptr); if (elem) {obstacleType.cmb->setCurrentIndex((int)elem->getObatcleType());} } // has name? { IHasName* elem = dynamic_cast(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(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(el); outlineMethod.cmb->setVisible(elem); outlineMethod.lbl->setVisible(elem); if (elem) {outlineMethod.cmb->setCurrentIndex((int)elem->getMethod());} } // has File { IHasFile* elem = dynamic_cast(el); fileName.lbl->setVisible(elem); fileName.txt->setVisible(elem); fileName.btn->setVisible(elem); if (elem) {fileName.txt->setText(elem->getFileName().c_str());} } } void ElementParamWidget::onMaterialChange() { IHasMaterial* el = dynamic_cast(this->curElement); if (el) {el->setMaterial( (Floorplan::Material) material.cmb->currentData().toInt() );} } void ElementParamWidget::onObstacleTypeChange() { IHasObstacleType* el = dynamic_cast(this->curElement); if (el) {el->setObstacleType((Floorplan::ObstacleType) obstacleType.cmb->currentData().toInt() );} } void ElementParamWidget::onNameChange() { IHasName* el = dynamic_cast(this->curElement); if (el) {el->setName(name.txt->text().toStdString());} } void ElementParamWidget::onOutlineMethodChange() { MMFloorOutlinePolygon* el = dynamic_cast(this->curElement); if (el) {el->setMethod( (Floorplan::OutlineMethod) outlineMethod.cmb->currentData().toInt() );} } void ElementParamWidget::onMACChanged() { dynamic_cast(curElement)->setMAC(mac.txt->text().toStdString()); } void ElementParamWidget::onSelectFileName() { QString res = QFileDialog::getOpenFileName(this); dynamic_cast(curElement)->setFileName(res.toStdString()); fileName.lbl->setText(res); }