#include "MainController.h" #include "MainWindow.h" #include "mapview/model/MapModel.h" #include "mapview/model/MapModelElement.h" #include "mapview/tools/ToolSelector.h" #include "mapview/tools/ToolMoveMap.h" #include "mapview/tools/ToolMapZoom.h" #include "mapview/tools/ToolRuler.h" #include "mapview/tools/ToolMapGrid.h" #include "params/ElementParamWidget.h" #include "params/LayerParamWidget.h" #include "params/ToolBoxWidget.h" #include "params/ActionWidget.h" #include "tree/MapTreeModel.h" #include #include MainController::MainController() { mw = new MainWindow(); mw->resize(1000, 700); MapView2D* mapView2D = mw->getMapView2D(); MapView3D* mapView3D = mw->getMapView3D(); QTreeView* layerTree = mw->getTree(); // model setup mapModel = new MapModel(); mapView2D->setModel(mapModel); mapView3D->setModel(mapModel); mapTreeModel = new MapTreeModel(mapModel); layerTree->setModel(mapTreeModel); ToolMoveMap* moveMap = new ToolMoveMap(); ToolRuler* ruler = new ToolRuler(); ToolMapZoom* mapZoom = new ToolMapZoom(); ToolMapGrid* mapGrid = new ToolMapGrid(); ToolSelector* mapSelector = new ToolSelector(); mapView2D->getTools().enable(mapGrid); mapView2D->getTools().enable(moveMap); mapView2D->getTools().enable(mapZoom); mapView2D->getTools().enable(mapSelector); mapView2D->getTools().enable(ruler); connect(layerTree, SIGNAL(clicked(QModelIndex)), this, SLOT(layerSelected(QModelIndex))); connect(mapSelector, SIGNAL(onMapElementSelected(MapModelElement*)), this, SLOT(mapElementSelected(MapModelElement*))); // model events connect(mapModel, SIGNAL(aboutToReset()), this, SLOT(onMapModelAboutToReset())); connect(mapModel, SIGNAL(reset()), this, SLOT(onMapModelReset())); // load/save connect(mw->getActionWidget(), SIGNAL(onLoad()), this, SLOT(onLoad())); connect(mw->getActionWidget(), SIGNAL(onSave()), this, SLOT(onSave())); // 3D view change connect(mw->getShow3DFloorplan(), SIGNAL(triggered(bool)), this, SLOT(onShow3DFloorplan())); connect(mw->getShow3DGrid(), SIGNAL(triggered(bool)), this, SLOT(onShow3DGrid())); mapModel->load("../IndoorMap/maps/SHL9.xml"); } void MainController::onShow3DFloorplan() { mw->getMapView3D()->showFloorplan(); } void MainController::onShow3DGrid() { mw->getMapView3D()->showGrid(); } void MainController::layerSelected(QModelIndex idx) { mw->getMapView2D()->layerChange(); MapLayer* ml = static_cast(idx.internalPointer()); mapModel->setSelectedLayer(ml); mw->getMapView2D()->layerChange(); mw->getLayerParamWidget()->setElement(ml); mw->getToolBoxWidget()->setSelectedLayer(ml); } void MainController::mapElementSelected(MapModelElement* el) { mw->getElementParamWidget()->setElement(el); } void MainController::onMapModelAboutToReset() { mw->getLayerParamWidget()->setElement(nullptr); mw->getToolBoxWidget()->setSelectedLayer(nullptr); mw->getMapView2D()->update(); } void MainController::onMapModelReset() { mw->getTree()->expandAll(); } void MainController::onLoad() { QString file = QFileDialog::getOpenFileName(mw, "open a map"); if (file != "") { mapModel->load(file.toStdString()); } } void MainController::onSave() { QString file = QFileDialog::getSaveFileName(mw, "save the map"); if (file != "") { mapModel->save(file.toStdString()); } }