bool TilesetDocument::save(const QString &fileName, QString *error) { TilesetFormat *tilesetFormat = mTileset->format(); if (!tilesetFormat || !(tilesetFormat->capabilities() & FileFormat::Write)) return false; // todo: workaround to avoid writing the tileset like an external tileset reference mTileset->setFileName(QString()); if (!tilesetFormat->write(*tileset(), fileName)) { if (error) *error = tilesetFormat->errorString(); return false; } undoStack()->setClean(); mTileset->setFileName(fileName); setFileName(fileName); mLastSaved = QFileInfo(fileName).lastModified(); emit saved(); return true; }
void TilesetDock::exportTileset() { Tileset *tileset = currentTileset(); if (!tileset) return; const QString tsxFilter = tr("Tiled tileset files (*.tsx)"); FormatHelper<TilesetFormat> helper(FileFormat::ReadWrite, tsxFilter); Preferences *prefs = Preferences::instance(); QString suggestedFileName = prefs->lastPath(Preferences::ExternalTileset); suggestedFileName += QLatin1Char('/'); suggestedFileName += tileset->name(); const QLatin1String extension(".tsx"); if (!suggestedFileName.endsWith(extension)) suggestedFileName.append(extension); QString selectedFilter = tsxFilter; const QString fileName = QFileDialog::getSaveFileName(this, tr("Export Tileset"), suggestedFileName, helper.filter(), &selectedFilter); if (fileName.isEmpty()) return; prefs->setLastPath(Preferences::ExternalTileset, QFileInfo(fileName).path()); TsxTilesetFormat tsxFormat; TilesetFormat *format = helper.formatByNameFilter(selectedFilter); if (!format) format = &tsxFormat; if (format->write(*tileset, fileName)) { QUndoCommand *command = new SetTilesetFileName(mMapDocument, tileset, fileName); mMapDocument->undoStack()->push(command); } else { QString error = format->errorString(); QMessageBox::critical(window(), tr("Export Tileset"), tr("Error saving tileset: %1").arg(error)); } }
void TilesetDock::exportTileset() { Tileset *tileset = currentTileset(); if (!tileset) return; if (tileset->isExternal()) return; int mapTilesetIndex = mMapDocument->map()->tilesets().indexOf(tileset->sharedPointer()); if (mapTilesetIndex == -1) return; // To export a tileset we clone it, since the tileset could now be used by // other maps. This ensures undo can take the map back to using an embedded // tileset, without affecting those other maps. SharedTileset externalTileset = tileset->clone(); FormatHelper<TilesetFormat> helper(FileFormat::ReadWrite); Preferences *prefs = Preferences::instance(); QString suggestedFileName = prefs->lastPath(Preferences::ExternalTileset); suggestedFileName += QLatin1Char('/'); suggestedFileName += externalTileset->name(); const QLatin1String extension(".tsx"); if (!suggestedFileName.endsWith(extension)) suggestedFileName.append(extension); // todo: remember last used filter QString selectedFilter = TsxTilesetFormat().nameFilter(); const QString fileName = QFileDialog::getSaveFileName(this, tr("Export Tileset"), suggestedFileName, helper.filter(), &selectedFilter); if (fileName.isEmpty()) return; prefs->setLastPath(Preferences::ExternalTileset, QFileInfo(fileName).path()); TilesetFormat *format = helper.formatByNameFilter(selectedFilter); if (!format) return; // can't happen if (!format->write(*externalTileset, fileName)) { QString error = format->errorString(); QMessageBox::critical(window(), tr("Export Tileset"), tr("Error saving tileset: %1").arg(error)); return; } externalTileset->setFileName(fileName); externalTileset->setFormat(format); QUndoCommand *command = new ReplaceTileset(mMapDocument, mapTilesetIndex, externalTileset); mMapDocument->undoStack()->push(command); // Make sure the external tileset is selected int externalTilesetIndex = mTilesets.indexOf(externalTileset); if (externalTilesetIndex != -1) mTabBar->setCurrentIndex(externalTilesetIndex); }