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/mapview/model/MapModel.h
2016-06-06 22:08:53 +02:00

118 lines
2.3 KiB
C++

#ifndef MAPMODEL_H
#define MAPMODEL_H
#include <QObject>
#include "MapLayer.h"
#include "MapModelElement.h"
#include "MMRoot.h"
#include <Indoor/floorplan/v2/Floorplan.h>
#include <Indoor/floorplan/v2/FloorplanReader.h>
#include <Indoor/floorplan/v2/FloorplanWriter.h>
class MapModel : public QObject {
Q_OBJECT
private:
///** wrapper-classes for all elements */
//std::vector<MapModelElement*> 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<MapModelElement*> getSelectedLayerElements() {
//return selElements;
//return (selLayer) ? (selLayer->getElementsRecursive()) : (std::vector<MapModelElement*>());
std::vector<MapModelElement*> elements;
root->getVisibleElementsRecursive(elements);
return elements;
}
/** get all currently visible elements */
std::vector<MapModelElement*> 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