void TilesetEditor::addDocument(Document *document) { TilesetDocument *tilesetDocument = qobject_cast<TilesetDocument*>(document); Q_ASSERT(tilesetDocument); TilesetView *view = new TilesetView(mWidgetStack); view->setTilesetDocument(tilesetDocument); Tileset *tileset = tilesetDocument->tileset().data(); QString path = QLatin1String("TilesetEditor/TilesetScale/") + tileset->name(); qreal scale = Preferences::instance()->settings()->value(path, 1).toReal(); view->zoomable()->setScale(scale); view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOn); view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOn); TilesetModel *tilesetModel = new TilesetModel(tileset, view); view->setModel(tilesetModel); connect(tilesetDocument, &TilesetDocument::tileTerrainChanged, tilesetModel, &TilesetModel::tilesChanged); connect(tilesetDocument, &TilesetDocument::tileWangSetChanged, tilesetModel, &TilesetModel::tilesChanged); connect(tilesetDocument, &TilesetDocument::tileImageSourceChanged, tilesetModel, &TilesetModel::tileChanged); connect(tilesetDocument, &TilesetDocument::tileAnimationChanged, tilesetModel, &TilesetModel::tileChanged); connect(tilesetDocument, &TilesetDocument::tilesetChanged, this, &TilesetEditor::tilesetChanged); connect(view, &TilesetView::createNewTerrain, this, &TilesetEditor::addTerrainType); connect(view, &TilesetView::terrainImageSelected, this, &TilesetEditor::setTerrainImage); connect(view, &TilesetView::wangSetImageSelected, this, &TilesetEditor::setWangSetImage); connect(view, &TilesetView::wangColorImageSelected, this, &TilesetEditor::setWangColorImage); connect(view, &TilesetView::wangIdUsedChanged, mWangDock, &WangDock::onWangIdUsedChanged); connect(view, &TilesetView::currentWangIdChanged, mWangDock, &WangDock::onCurrentWangIdChanged); QItemSelectionModel *s = view->selectionModel(); connect(s, &QItemSelectionModel::selectionChanged, this, &TilesetEditor::selectionChanged); connect(s, &QItemSelectionModel::currentChanged, this, &TilesetEditor::currentChanged); connect(view, &TilesetView::pressed, this, &TilesetEditor::indexPressed); mViewForTileset.insert(tilesetDocument, view); mWidgetStack->addWidget(view); }
void TilesetDock::createTilesetView(int index, TilesetDocument *tilesetDocument) { auto tileset = tilesetDocument->tileset(); mTilesets.insert(index, tileset); mTilesetDocuments.insert(index, tilesetDocument); TilesetView *view = new TilesetView; // Insert view before the tab to make sure it is there when the tab index // changes (happens when first tab is inserted). mViewStack->insertWidget(index, view); mTabBar->insertTab(index, tileset->name()); mTabBar->setTabToolTip(index, tileset->fileName()); QString path = QLatin1String("TilesetDock/TilesetScale/") + tileset->name(); qreal scale = Preferences::instance()->settings()->value(path, 1).toReal(); view->zoomable()->setScale(scale); connect(tilesetDocument, &TilesetDocument::tilesetNameChanged, this, &TilesetDock::tilesetNameChanged); connect(tilesetDocument, &TilesetDocument::fileNameChanged, this, &TilesetDock::tilesetFileNameChanged); connect(tilesetDocument, &TilesetDocument::tilesetChanged, this, &TilesetDock::tilesetChanged); connect(tilesetDocument, &TilesetDocument::tileImageSourceChanged, this, &TilesetDock::tileImageSourceChanged); connect(tilesetDocument, &TilesetDocument::tileAnimationChanged, this, &TilesetDock::tileAnimationChanged); connect(view, &TilesetView::clicked, this, &TilesetDock::updateCurrentTiles); connect(view, &TilesetView::swapTilesRequested, this, &TilesetDock::swapTiles); connect(view, &TilesetView::changeSelectedMapObjectsTileRequested, this, &TilesetDock::changeSelectedMapObjectsTile); }
void TilesetEditor::setCurrentDocument(Document *document) { TilesetDocument *tilesetDocument = qobject_cast<TilesetDocument*>(document); Q_ASSERT(tilesetDocument || !document); if (mCurrentTilesetDocument == tilesetDocument) return; TilesetView *tilesetView = nullptr; if (document) { tilesetView = mViewForTileset.value(tilesetDocument); Q_ASSERT(tilesetView); mWidgetStack->setCurrentWidget(tilesetView); tilesetView->setEditTerrain(mTerrainDock->isVisible()); tilesetView->setEditWangSet(mWangDock->isVisible()); tilesetView->zoomable()->setComboBox(mZoomComboBox); } mPropertiesDock->setDocument(document); mUndoDock->setStack(document ? document->undoStack() : nullptr); mTileAnimationEditor->setTilesetDocument(tilesetDocument); mTileCollisionDock->setTilesetDocument(tilesetDocument); mTerrainDock->setDocument(document); mWangDock->setDocument(document); mCurrentTilesetDocument = tilesetDocument; if (tilesetDocument) { currentChanged(tilesetView->currentIndex()); selectionChanged(); } updateAddRemoveActions(); }