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); }
QVariant TilesetDocumentsModel::data(const QModelIndex &index, int role) const { TilesetDocument *document = mTilesetDocuments.at(index.row()); switch (role) { case TilesetDocumentRole: return QVariant::fromValue(document); case TilesetRole: return QVariant::fromValue(document->tileset()); case Qt::DisplayRole: return document->tileset()->name(); case Qt::ToolTipRole: return document->fileName(); } return QVariant(); }
void TilesetDocumentsModel::tilesetNameChanged(Tileset *tileset) { for (int i = 0; i < mTilesetDocuments.size(); ++i) { TilesetDocument *doc = mTilesetDocuments.at(i); if (doc->tileset() == tileset) { const QModelIndex dataIndex = index(i, 0, QModelIndex()); emit dataChanged(dataIndex, dataIndex, { Qt::DisplayRole }); break; } } }
void TilesetDock::tilesetFileNameChanged(const QString &fileName) { TilesetDocument *tilesetDocument = static_cast<TilesetDocument*>(sender()); Tileset *tileset = tilesetDocument->tileset().data(); const int index = indexOf(mTilesets, tileset); Q_ASSERT(index != -1); mTabBar->setTabToolTip(index, fileName); updateActions(); }
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::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 TilesetEditor::removeDocument(Document *document) { TilesetDocument *tilesetDocument = qobject_cast<TilesetDocument*>(document); Q_ASSERT(tilesetDocument); Q_ASSERT(mViewForTileset.contains(tilesetDocument)); tilesetDocument->disconnect(this); TilesetView *view = mViewForTileset.take(tilesetDocument); QString path = QLatin1String("TilesetEditor/TilesetScale/") + tilesetDocument->tileset()->name(); QSettings *settings = Preferences::instance()->settings(); if (view->scale() != 1.0) settings->setValue(path, view->scale()); else settings->remove(path); // remove first, to keep it valid while the current widget changes mWidgetStack->removeWidget(view); delete view; }