#ifndef MAPMODEL_H #define MAPMODEL_H #include #include "MapLayer.h" #include "MapModelElement.h" #include "MMRoot.h" #include #include #include class MapModel : public QObject { Q_OBJECT private: ///** wrapper-classes for all elements */ //std::vector selElements; /** the map's root-layer containing all other layers */ MapLayer* root = nullptr; /** the currently selected layer (if any) */ MapLayer* selLayer = nullptr; /** the loaded floorplan */ Floorplan::IndoorMap* im; public: /** ctor */ MapModel() { root = new MapLayerRoot(nullptr); } virtual ~MapModel() { cleanup(); } void cleanup() { selLayer = nullptr; //selElements.clear(); if (root) {delete root; root = nullptr;} } void load(const std::string& file) { emit aboutToReset(); cleanup(); // load the indoor-map using the given XML-file im = Floorplan::Reader::readFromFile(file); root = new MMRoot(nullptr, im); emit reset(); } void save(const std::string& file) { Floorplan::Writer::writeToFile(im, file); } /** get the constructed map */ Floorplan::IndoorMap* getMap() const { return im; } /** get the map's root-layer containing all other layers */ MapLayer* getRootLayer() { return root; } /** get all elements within the currently selected layer */ std::vector getSelectedLayerElements() { //return selElements; //return (selLayer) ? (selLayer->getElementsRecursive()) : (std::vector()); std::vector elements; root->getVisibleElementsRecursive(elements); return elements; } /** get all currently visible elements */ std::vector getVisibleElements() { return getSelectedLayerElements(); } /** set the currently selected layer */ void setSelectedLayer(MapLayer* ml) { //selElements.clear(); //for (MapModelElement* el : ml->getElementsRecursive()) {selElements.push_back(el);} selLayer = ml; } /** get the currently selected layer */ MapLayer* getSelectedLayer() const { return selLayer; } void reselect() { setSelectedLayer(selLayer); emit reset(); } signals: void aboutToReset(); void reset(); }; #endif // MAPMODEL_H