#include "../fixC11.h" #include "ToolBoxWidget.h" #include #include #include #include //#include "../mapview/model/MapLayers.h" #include "../mapview/2D/MapView2D.h" #include "../mapview/model/MapModel.h" #include "../mapview/model/MMFloorAccessPoint.h" #include "../mapview/model/MMFloorBeacon.h" #include "../mapview/model/MMFloorGroundTruthPoints.h" #include "../mapview/model/MMRegistration.h" #include "../mapview/2D/tools/ToolMeasure.h" #include "../mapview/2D/tools/ToolSelector.h" #include "../mapview/2D/tools/ToolNewElement.h" #include "../mapview/2D/tools/ToolNewWall.h" #include "../mapview/2D/tools/ToolNewLine.h" #include "../mapview/2D/tools/ToolNewDoor.h" #include "../mapview/2D/tools/ToolNewStair.h" #include "../mapview/2D/tools/ToolNewElevator.h" #include "../mapview/2D/tools/ToolNewOutline.h" #include "../mapview/2D/tools/ToolNewFingerprint.h" #include "../mapview/2D/tools/ToolNewGroundTruth.h" #include "../mapview/2D/tools/ToolNewAccessPoint.h" #include "../mapview/2D/tools/ToolNewBeacon.h" #include "../mapview/2D/tools/ToolNewPOI.h" #include "../mapview/2D/tools/ToolNewObject.h" #include "../mapview/2D/tools/ToolNewPillar.h" #include "../UIHelper.h" QSplitter* getSplitter() { QSplitter* splt = new QSplitter(); splt->setStyleSheet("background-color:black;"); splt->setMinimumHeight(1); return splt; } ToolBoxWidget::ToolBoxWidget(MapView2D* view, QWidget *parent) : QWidget(parent), view(view) { const int s = 32; setMaximumWidth(48); setMinimumWidth(48); QGridLayout* lay = new QGridLayout(this); // SELECTION btnSelect = new QPushButton(UIHelper::getIcon("cursor"), ""); btnSelect->setMinimumSize(s,s); lay->addWidget(btnSelect, r++, 0, 1,1,Qt::AlignTop); connect(btnSelect, SIGNAL(clicked(bool)), this, SLOT(onSelect())); // MEASURE btnMeasure = new QPushButton(UIHelper::getIcon("ruler"), ""); btnMeasure->setMinimumSize(s,s); lay->addWidget(btnMeasure, r++, 0, 1,1,Qt::AlignTop); connect(btnMeasure, SIGNAL(clicked(bool)), this, SLOT(onMeasure())); // splitter lay->addWidget(getSplitter(), r++, 0, 1,1,Qt::AlignTop); // OBSTACLES btnGround = new QPushButton(UIHelper::getIcon("floor"), ""); btnGround->setMinimumSize(s,s); lay->addWidget(btnGround, r++, 0, 1,1,Qt::AlignTop); connect(btnGround, SIGNAL(clicked(bool)), this, SLOT(onNewGround())); btnWall = new QPushButton(UIHelper::getIcon("wall"), ""); btnWall->setMinimumSize(s,s); lay->addWidget(btnWall, r++, 0, 1,1,Qt::AlignTop); connect(btnWall, SIGNAL(clicked(bool)), this, SLOT(onNewWall())); btnLine = new QPushButton(UIHelper::getIcon("line"), ""); btnLine->setMinimumSize(s,s); lay->addWidget(btnLine, r++, 0, 1,1,Qt::AlignTop); connect(btnLine, SIGNAL(clicked(bool)), this, SLOT(onNewLine())); btnPillar = new QPushButton(UIHelper::getIcon("pillar"), ""); btnPillar->setMinimumSize(s,s); lay->addWidget(btnPillar, r++, 0, 1,1,Qt::AlignTop); connect(btnPillar, SIGNAL(clicked(bool)), this, SLOT(onNewPillar())); btnDoor = new QPushButton(UIHelper::getIcon("door"), ""); btnDoor->setMinimumSize(s,s); lay->addWidget(btnDoor, r++, 0, 1,1,Qt::AlignTop); connect(btnDoor, SIGNAL(clicked(bool)), this, SLOT(onNewDoor())); btnObject = new QPushButton(UIHelper::getIcon("objects"), ""); btnObject->setMinimumSize(s,s); lay->addWidget(btnObject, r++, 0, 1,1,Qt::AlignTop); connect(btnObject, SIGNAL(clicked(bool)), this, SLOT(onNewObject())); btnStair = new QPushButton(UIHelper::getIcon("stair"), ""); btnStair->setMinimumSize(s,s); lay->addWidget(btnStair, r++, 0, 1,1,Qt::AlignTop); connect(btnStair, SIGNAL(clicked(bool)), this, SLOT(onNewStair())); btnElevator = new QPushButton(UIHelper::getIcon("elevator"), ""); btnElevator->setMinimumSize(s,s); lay->addWidget(btnElevator, r++, 0, 1,1,Qt::AlignTop); connect(btnElevator, SIGNAL(clicked(bool)), this, SLOT(onNewElevator())); // splitter lay->addWidget(getSplitter(), r++, 0, 1,1,Qt::AlignTop); // TRANSMITTERS btnWifi = new QPushButton(UIHelper::getIcon("wifi"), ""); btnWifi->setMinimumSize(s,s); lay->addWidget(btnWifi, r++, 0, 1,1,Qt::AlignTop); connect(btnWifi, SIGNAL(clicked(bool)), this, SLOT(onNewAccessPoint())); btnBeacon = new QPushButton(UIHelper::getIcon("beacon"), ""); btnBeacon->setMinimumSize(s,s); lay->addWidget(btnBeacon, r++, 0, 1,1,Qt::AlignTop); connect(btnBeacon, SIGNAL(clicked(bool)), this, SLOT(onNewBeacon())); // TRANSMITTER RELATED btnFingerprintLocation = new QPushButton(UIHelper::getIcon("fingerprint"), ""); btnFingerprintLocation->setMinimumSize(s,s); lay->addWidget(btnFingerprintLocation, r++, 0, 1,1,Qt::AlignTop); connect(btnFingerprintLocation, SIGNAL(clicked(bool)), this, SLOT(onNewFingerprintLocation())); // IMAGES btnImage = new QPushButton(UIHelper::getIcon("image"), ""); btnImage->setMinimumSize(s,s); lay->addWidget(btnImage, r++, 0, 1,1,Qt::AlignTop); connect(btnImage, SIGNAL(clicked(bool)), this, SLOT(onNewImage())); // POI btnPOI = new QPushButton(UIHelper::getIcon("poi"), ""); btnPOI->setMinimumSize(s,s); lay->addWidget(btnPOI, r++, 0, 1,1,Qt::AlignTop); connect(btnPOI, SIGNAL(clicked(bool)), this, SLOT(onNewPOI())); // GROUNDTRUTH btnGTP = new QPushButton(UIHelper::getIcon("gtp"), ""); btnGTP->setMinimumSize(s,s); lay->addWidget(btnGTP, r++, 0, 1,1,Qt::AlignTop); connect(btnGTP, SIGNAL(clicked(bool)), this, SLOT(onNewGTP())); // EARTH REGISTRATION btnEarthReg = new QPushButton(UIHelper::getIcon("registration"), ""); btnEarthReg->setMinimumSize(s,s); lay->addWidget(btnEarthReg, r++, 0, 1,1,Qt::AlignTop); connect(btnEarthReg, SIGNAL(clicked(bool)), this, SLOT(onNewEarthReg())); // what to do when the main-tool is changed connect(&view->getTools(), SIGNAL(mainToolChanged()), this, SLOT(onMainToolChanged())); // FILL lay->addItem(new QSpacerItem(0,0,QSizePolicy::Minimum, QSizePolicy::MinimumExpanding), r, 0); // start empty setSelectedLayer(nullptr); } void ToolBoxWidget::onMainToolChanged() { // get the currently active Main-Tool Tool* t = view->getTools().getMain(); QString styleSel = "background-color: #bbbbff;"; QString styleNor = ""; // highlight the corresponding button btnSelect->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnMeasure->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnGround->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnLine->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnDoor->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnWall->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnObject->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnElevator->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnStair->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnPillar->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnFingerprintLocation->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnGTP->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnWifi->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnBeacon->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); btnPOI->setStyleSheet( dynamic_cast(t) ? styleSel : styleNor ); } void ToolBoxWidget::setSelectedLayer(MapLayer *ml) { this->curLayer = ml; btnGround->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_GROUND)); btnLine->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES)); btnWall->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES)); btnPillar->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES)); btnDoor->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES)); btnObject->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_OBSTACLES)); btnStair->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_STAIRS)); btnElevator->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_ELEVATORS)); btnWifi->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_ACCESS_POINTS)); btnBeacon->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_BEACONS)); btnFingerprintLocation->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_FINGERPRINTS)); btnPOI->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_POIS)); btnGTP->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_GROUND_TRUTH_POINTS)); btnImage->setEnabled(ml && (ml->getLayerType() == MapLayerType::FLOOR_UNDERLAYS)); btnEarthReg->setEnabled(ml && (ml->getLayerType() == MapLayerType::REGISTRATION)); } void ToolBoxWidget::onNewGround() { // const Point2 center = view->getScaler().getCenter(); // float s = view->getScaler().sm(50); // Floorplan::FloorOutlinePolygon* poly = new Floorplan::FloorOutlinePolygon(); // poly->name = "new"; // poly->poly.points.push_back(Point2(center.x-s, center.y-s)); // poly->poly.points.push_back(Point2(center.x+s, center.y-s)); // poly->poly.points.push_back(Point2(center.x, center.y+s)); // MMFloorOutline* ml = (MMFloorOutline*)curLayer; // ml->create(poly); // view->getModel()->reselect(); view->getTools().setMain(new ToolNewOutline(view->getTools(), curLayer)); } void ToolBoxWidget::onSelect() { view->getTools().setMainDefault(); } void ToolBoxWidget::onMeasure() { view->getTools().setMain(new ToolMeasure(view->getTools())); } void ToolBoxWidget::onNewLine() { view->getTools().setMain(new ToolNewLine(view->getTools(), curLayer)); } void ToolBoxWidget::onNewWall() { view->getTools().setMain(new ToolNewWall(view->getTools(), curLayer)); } void ToolBoxWidget::onNewDoor() { view->getTools().setMain(new ToolNewDoor(view->getTools(), curLayer)); } void ToolBoxWidget::onNewObject() { view->getTools().setMain(new ToolNewObject(view->getTools(), curLayer)); } void ToolBoxWidget::onNewPillar() { view->getTools().setMain(new ToolNewPillar(view->getTools(), curLayer)); } void ToolBoxWidget::onNewStair() { view->getTools().setMain(new ToolNewStair(view->getTools(), curLayer)); } void ToolBoxWidget::onNewElevator() { view->getTools().setMain(new ToolNewElevator(view->getTools(), curLayer)); } void ToolBoxWidget::onNewAccessPoint() { view->getTools().setMain(new ToolNewAccessPoint(view->getTools(), curLayer)); } void ToolBoxWidget::onNewBeacon() { view->getTools().setMain(new ToolNewBeacon(view->getTools(), curLayer)); } void ToolBoxWidget::onNewFingerprintLocation() { view->getTools().setMain(new ToolNewFingerprint(view->getTools(), curLayer)); } void ToolBoxWidget::onNewPOI() { view->getTools().setMain(new ToolNewPOI(view->getTools(), curLayer)); } void ToolBoxWidget::onNewGTP() { view->getTools().setMain(new ToolNewGroundTruth(view->getTools(), curLayer)); } void ToolBoxWidget::onNewEarthReg() { const Point2 center = view->getScaler().getCenter(); Floorplan::EarthPosMapPos* reg = new Floorplan::EarthPosMapPos( EarthPos(50, 10, 300), Point3(center.x, center.y, 0) ); MMRegistration* mmreg = (MMRegistration*) curLayer; mmreg->create(reg); } void ToolBoxWidget::onNewImage() { const Point2 center = view->getScaler().getCenter(); MMFloorUnderlays* underlays = (MMFloorUnderlays*) curLayer; underlays->createImage(center); }