void TilesetDock::deleteTilesetView(int index) { TilesetDocument *tilesetDocument = mTilesetDocuments.at(index); tilesetDocument->disconnect(this); Tileset *tileset = tilesetDocument->tileset().data(); TilesetView *view = tilesetViewAt(index); QString path = QLatin1String("TilesetDock/TilesetScale/") + tileset->name(); QSettings *settings = Preferences::instance()->settings(); if (view->scale() != 1.0) settings->setValue(path, view->scale()); else settings->remove(path); mTilesets.remove(index); mTilesetDocuments.removeAt(index); delete view; // view needs to go before the tab mTabBar->removeTab(index); // Make sure we don't reference this tileset anymore if (mCurrentTiles && mCurrentTiles->referencesTileset(tileset)) { TileLayer *cleaned = mCurrentTiles->clone(); cleaned->removeReferencesToTileset(tileset); setCurrentTiles(cleaned); } if (mCurrentTile && mCurrentTile->tileset() == tileset) setCurrentTile(nullptr); }
void TilesetDock::deleteTilesetView(int index) { TilesetDocument *tilesetDocument = mTilesetDocuments.at(index); tilesetDocument->disconnect(this); mTilesets.remove(index); mTilesetDocuments.removeAt(index); delete tilesetViewAt(index); // view needs to go before the tab mTabBar->removeTab(index); Tileset *tileset = tilesetDocument->tileset().data(); // Make sure we don't reference this tileset anymore if (mCurrentTiles && mCurrentTiles->referencesTileset(tileset)) { TileLayer *cleaned = static_cast<TileLayer *>(mCurrentTiles->clone()); cleaned->removeReferencesToTileset(tileset); setCurrentTiles(cleaned); } if (mCurrentTile && mCurrentTile->tileset() == tileset) setCurrentTile(nullptr); }
void TilesetDock::tilesetRemoved(Tileset *tileset) { // Delete the related tileset view const int index = indexOf(mTilesets, tileset); Q_ASSERT(index != -1); mTilesets.remove(index); mTabBar->removeTab(index); delete tilesetViewAt(index); // Make sure we don't reference this tileset anymore if (mCurrentTiles) { // TODO: Don't clean unnecessarily (but first the concept of // "current brush" would need to be introduced) TileLayer *cleaned = static_cast<TileLayer *>(mCurrentTiles->clone()); cleaned->removeReferencesToTileset(tileset); setCurrentTiles(cleaned); } if (mCurrentTile && mCurrentTile->tileset() == tileset) setCurrentTile(nullptr); updateActions(); }