This repository has been archived on 2020-04-08. You can view files and clone it, but cannot push or open issues or pull requests.
Files
IndoorMap/params/ElementParamWidget.cpp
2016-05-24 16:55:19 +02:00

227 lines
6.9 KiB
C++

#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 <Indoor/floorplan/v2/Floorplan.h>
#include <QLabel>
#include <QComboBox>
#include <QGridLayout>
#include <QLineEdit>
#include <QPushButton>
#include <QFileDialog>
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<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());}
}
// 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());}
}
// 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());}
}
// 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());}
}
}
void ElementParamWidget::onMaterialChange() {
IHasMaterial* el = dynamic_cast<IHasMaterial*>(this->curElement);
if (el) {el->setMaterial( (Floorplan::Material) material.cmb->currentData().toInt() );}
}
void ElementParamWidget::onObstacleTypeChange() {
IHasObstacleType* el = dynamic_cast<IHasObstacleType*>(this->curElement);
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::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::onSelectFileName() {
QString res = QFileDialog::getOpenFileName(this);
dynamic_cast<IHasFile*>(curElement)->setFileName(res.toStdString());
fileName.lbl->setText(res);
}