From 489a64fd691bbc1df1095a36147a68713d579641 Mon Sep 17 00:00:00 2001 From: kazu Date: Wed, 24 May 2017 17:54:09 +0200 Subject: [PATCH] added "new map" button fixed minor model/logic issues --- MainController.cpp | 15 ++++++++++++++- MainController.h | 3 +-- mapview/2D/tools/ToolSelector.h | 6 ++++-- mapview/3D/MapView3D.cpp | 9 +++++++++ mapview/3DGrid/GridModel.h | 3 ++- mapview/model/MapModel.h | 7 +++++++ params/ActionWidget.cpp | 8 +++++++- params/ActionWidget.h | 5 +++++ 8 files changed, 49 insertions(+), 7 deletions(-) diff --git a/MainController.cpp b/MainController.cpp index 1599009..e19d2b7 100644 --- a/MainController.cpp +++ b/MainController.cpp @@ -81,7 +81,8 @@ MainController::MainController() { connect(mapModel, SIGNAL(reset()), this, SLOT(onMapModelReset())); mapModel->addListener(this); - // load/save + // new/load/save + connect(mw->getActionWidget(), SIGNAL(onNew()), this, SLOT(onNew())); connect(mw->getActionWidget(), SIGNAL(onLoad()), this, SLOT(onLoad())); connect(mw->getActionWidget(), SIGNAL(onSave()), this, SLOT(onSave())); @@ -96,6 +97,8 @@ MainController::MainController() { mapModel->load("../IndoorMap/maps/SHL38_no_elev.xml"); + //mapModel->load("/apps/android/workspace/testmap.xml"); + //mapModel->resize(0.983, 0.983, 1, -0.2, -0.3, 0); @@ -168,6 +171,8 @@ void MainController::onMapModelAboutToReset() { mw->getLayerParamWidget()->setElement(nullptr); mw->getToolBoxWidget()->setSelectedLayer(nullptr); mw->getMapView2D()->update(); + mw->getMapView3D()->update(); + //mw->getToolBoxWidget()-> } void MainController::onMapModelNeedsRepaint() { @@ -180,6 +185,14 @@ void MainController::onMapModelReset() { mw->getLINT()->update(mapModel->getMap()); } + +void MainController::onNew() { + const int res = QMessageBox::question(nullptr, "New Map", "really start a new map?", QMessageBox::Yes, QMessageBox::No); + if (res == QMessageBox::Yes) { + mapModel->startEmpty(); + } +} + void MainController::onLoad() { QString file = QFileDialog::getOpenFileName(mw, "open a map"); if (file != "") { diff --git a/MainController.h b/MainController.h index 77a2dca..67520e5 100644 --- a/MainController.h +++ b/MainController.h @@ -55,9 +55,8 @@ public slots: /** the currently selected MapElement has changed */ void curMapElementChanged(); - + void onNew(); void onLoad(); - void onSave(); void onMapModelAboutToReset(); diff --git a/mapview/2D/tools/ToolSelector.h b/mapview/2D/tools/ToolSelector.h index fcb030f..3aab18e 100644 --- a/mapview/2D/tools/ToolSelector.h +++ b/mapview/2D/tools/ToolSelector.h @@ -181,8 +181,10 @@ private: // set the currently focused object (if any) focused = el; - // focus the new one (if any) - if (focused) {focused->getMV2D()->focus();} + // focus the new one (if any, and focus supported) + if (focused && focused->getMV2D()) { + focused->getMV2D()->focus(); + } // update the help-text showHelp(); diff --git a/mapview/3D/MapView3D.cpp b/mapview/3D/MapView3D.cpp index de84783..c820bb6 100644 --- a/mapview/3D/MapView3D.cpp +++ b/mapview/3D/MapView3D.cpp @@ -185,12 +185,21 @@ void MapView3D::showFloorplan() { } void MapView3D::showGrid() { + + // delete the previous grid (if any) if (gridModel) {delete gridModel; gridModel = nullptr;} + + // build a new model GridModel* gm = new GridModel(); Floorplan::IndoorMap* im = getModel()->getMap(); gm->rebuild(im); + + // remember this->gridModel = gm; + + // update UI update(); + } void MapView3D::draw() { diff --git a/mapview/3DGrid/GridModel.h b/mapview/3DGrid/GridModel.h index b27901d..20a3d09 100644 --- a/mapview/3DGrid/GridModel.h +++ b/mapview/3DGrid/GridModel.h @@ -21,7 +21,8 @@ class GridModel { private: - int gridSize_cm = 20; + int gridSize_cm = 30; // TODO + Grid grid; Floorplan::IndoorMap* im; diff --git a/mapview/model/MapModel.h b/mapview/model/MapModel.h index e056eb1..51e49cb 100644 --- a/mapview/model/MapModel.h +++ b/mapview/model/MapModel.h @@ -53,10 +53,17 @@ public: /** create a new, empty root node */ void startEmpty() { + + emit aboutToReset(); + cleanup(); + im = new Floorplan::IndoorMap(); root = new MMRoot(nullptr, im); root->addListener(this); //root->addSublayer(new MMFloors(root, im)); + + emit reset(); + } void cleanup() { diff --git a/params/ActionWidget.cpp b/params/ActionWidget.cpp index cc6b08d..3a1a5e1 100644 --- a/params/ActionWidget.cpp +++ b/params/ActionWidget.cpp @@ -7,15 +7,21 @@ ActionWidget::ActionWidget(QWidget *parent) : QWidget(parent) { QHBoxLayout* lay = new QHBoxLayout(this); + + QPushButton* btnNew = new QPushButton("new"); + lay->addWidget(btnNew); + QPushButton* btnLoad = new QPushButton("load"); lay->addWidget(btnLoad); QPushButton* btnSave = new QPushButton("save"); lay->addWidget(btnSave); + // events + connect(btnNew, SIGNAL(clicked(bool)), this, SIGNAL(onNew())); + connect(btnLoad, SIGNAL(clicked(bool)), this, SIGNAL(onLoad())); connect(btnSave, SIGNAL(clicked(bool)), this, SIGNAL(onSave())); - } diff --git a/params/ActionWidget.h b/params/ActionWidget.h index 469528f..059e112 100644 --- a/params/ActionWidget.h +++ b/params/ActionWidget.h @@ -13,10 +13,15 @@ public: signals: + /** request: load a map */ void onLoad(); + /** request: save a map */ void onSave(); + /** request: new map */ + void onNew(); + public slots: };