MapDocument::MapDocument(Map *map, const QString &fileName): mFileName(fileName), mMap(map), mLayerModel(new LayerModel(this)), mUndoStack(new QUndoStack(this)) { switch (map->orientation()) { case Map::Isometric: mRenderer = new IsometricRenderer(map); break; case Map::Hexagonal: mRenderer = new HexagonalRenderer(map); break; default: mRenderer = new OrthogonalRenderer(map); break; } mCurrentLayerIndex = (map->layerCount() == 0) ? -1 : 0; mLayerModel->setMapDocument(this); // Forward signals emitted from the layer model connect(mLayerModel, SIGNAL(layerAdded(int)), SLOT(onLayerAdded(int))); connect(mLayerModel, SIGNAL(layerAboutToBeRemoved(int)), SLOT(onLayerAboutToBeRemoved(int))); connect(mLayerModel, SIGNAL(layerRemoved(int)), SLOT(onLayerRemoved(int))); connect(mLayerModel, SIGNAL(layerChanged(int)), SIGNAL(layerChanged(int))); connect(mUndoStack, SIGNAL(cleanChanged(bool)), SIGNAL(modifiedChanged())); // Register tileset references TilesetManager *tilesetManager = TilesetManager::instance(); tilesetManager->addReferences(mMap->tilesets()); }
MapDocument::MapDocument(Map *map, const QString &fileName): mFileName(fileName), mMap(map), mLayerModel(new LayerModel(this)), mCurrentObject(map), mMapObjectModel(new MapObjectModel(this)), mTerrainModel(new TerrainModel(this, this)), mUndoStack(new QUndoStack(this)) { switch (map->orientation()) { case Map::Isometric: mRenderer = new IsometricRenderer(map); break; case Map::Staggered: mRenderer = new StaggeredRenderer(map); break; default: mRenderer = new OrthogonalRenderer(map); break; } mCurrentLayerIndex = (map->layerCount() == 0) ? -1 : 0; mLayerModel->setMapDocument(this); // Forward signals emitted from the layer model connect(mLayerModel, SIGNAL(layerAdded(int)), SLOT(onLayerAdded(int))); connect(mLayerModel, SIGNAL(layerAboutToBeRemoved(int)), SLOT(onLayerAboutToBeRemoved(int))); connect(mLayerModel, SIGNAL(layerRemoved(int)), SLOT(onLayerRemoved(int))); connect(mLayerModel, SIGNAL(layerChanged(int)), SIGNAL(layerChanged(int))); // Forward signals emitted from the map object model mMapObjectModel->setMapDocument(this); connect(mMapObjectModel, SIGNAL(objectsAdded(QList<MapObject*>)), SIGNAL(objectsAdded(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(objectsChanged(QList<MapObject*>)), SIGNAL(objectsChanged(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(objectsRemoved(QList<MapObject*>)), SLOT(onObjectsRemoved(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(onMapObjectModelRowsInserted(QModelIndex,int,int))); connect(mMapObjectModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onMapObjectModelRowsInsertedOrRemoved(QModelIndex,int,int))); connect(mMapObjectModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), SLOT(onObjectsMoved(QModelIndex,int,int,QModelIndex,int))); connect(mTerrainModel, SIGNAL(terrainRemoved(Terrain*)), SLOT(onTerrainRemoved(Terrain*))); connect(mUndoStack, SIGNAL(cleanChanged(bool)), SIGNAL(modifiedChanged())); // Register tileset references TilesetManager *tilesetManager = TilesetManager::instance(); tilesetManager->addReferences(mMap->tilesets()); }
TileStampData::TileStampData(const TileStampData &other) : QSharedData(other) , name(other.name) , fileName() // not copied , variations(other.variations) , quickStampIndex(-1) { TilesetManager *tilesetManager = TilesetManager::instance(); // deep-copy the map data for (TileStampVariation &variation : variations) { variation.map = new Map(*variation.map); tilesetManager->addReferences(variation.map->tilesets()); } }
MapDocument::MapDocument(Map *map, const QString &fileName) : Document(MapDocumentType, fileName) , mMap(map) , mLayerModel(new LayerModel(this)) , mHoveredMapObject(nullptr) , mRenderer(nullptr) , mMapObjectModel(new MapObjectModel(this)) { mCurrentObject = map; createRenderer(); mCurrentLayer = (map->layerCount() == 0) ? nullptr : map->layerAt(0); mLayerModel->setMapDocument(this); // Forward signals emitted from the layer model connect(mLayerModel, &LayerModel::layerAdded, this, &MapDocument::onLayerAdded); connect(mLayerModel, &LayerModel::layerAboutToBeRemoved, this, &MapDocument::onLayerAboutToBeRemoved); connect(mLayerModel, &LayerModel::layerRemoved, this, &MapDocument::onLayerRemoved); connect(mLayerModel, &LayerModel::layerChanged, this, &MapDocument::layerChanged); // Forward signals emitted from the map object model mMapObjectModel->setMapDocument(this); connect(mMapObjectModel, SIGNAL(objectsAdded(QList<MapObject*>)), SIGNAL(objectsAdded(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(objectsChanged(QList<MapObject*>)), SIGNAL(objectsChanged(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(objectsTypeChanged(QList<MapObject*>)), SIGNAL(objectsTypeChanged(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(objectsRemoved(QList<MapObject*>)), SLOT(onObjectsRemoved(QList<MapObject*>))); connect(mMapObjectModel, SIGNAL(rowsInserted(QModelIndex,int,int)), SLOT(onMapObjectModelRowsInserted(QModelIndex,int,int))); connect(mMapObjectModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), SLOT(onMapObjectModelRowsInsertedOrRemoved(QModelIndex,int,int))); connect(mMapObjectModel, SIGNAL(rowsMoved(QModelIndex,int,int,QModelIndex,int)), SLOT(onObjectsMoved(QModelIndex,int,int,QModelIndex,int))); // Register tileset references TilesetManager *tilesetManager = TilesetManager::instance(); tilesetManager->addReferences(mMap->tilesets()); }