diff --git a/src/tiled/mainwindow.cpp b/src/tiled/mainwindow.cpp index 8857fc0fbe..b677c422d8 100644 --- a/src/tiled/mainwindow.cpp +++ b/src/tiled/mainwindow.cpp @@ -810,6 +810,8 @@ MainWindow::MainWindow(QWidget *parent, Qt::WindowFlags flags) mUi->menuTileset->insertAction(mUi->actionTilesetProperties, mTilesetEditor->addTilesAction()); mUi->menuTileset->insertAction(mUi->actionTilesetProperties, mTilesetEditor->removeTilesAction()); mUi->menuTileset->insertSeparator(mUi->actionTilesetProperties); + mUi->menuTileset->insertAction(mUi->actionTilesetProperties, mTilesetEditor->editTilesetParametersAction()); + mUi->menuTileset->insertSeparator(mUi->actionTilesetProperties); connect(mViewsAndToolbarsMenu, &QMenu::aboutToShow, this, &MainWindow::updateViewsAndToolbarsMenu); diff --git a/src/tiled/tilesetchanges.h b/src/tiled/tilesetchanges.h index 01db25f6b8..4c5ceaaae5 100644 --- a/src/tiled/tilesetchanges.h +++ b/src/tiled/tilesetchanges.h @@ -74,10 +74,7 @@ class ChangeTilesetTileOffset : public QUndoCommand struct TilesetParameters { - TilesetParameters() - : tileSpacing(0) - , margin(0) - {} + TilesetParameters() = default; explicit TilesetParameters(const Tileset &tileset); @@ -86,8 +83,8 @@ struct TilesetParameters QUrl imageSource; QColor transparentColor; QSize tileSize; - int tileSpacing; - int margin; + int tileSpacing = 0; + int margin = 0; }; class ChangeTilesetParameters : public QUndoCommand diff --git a/src/tiled/tileseteditor.cpp b/src/tiled/tileseteditor.cpp index 9580d9d9ae..168b89f835 100644 --- a/src/tiled/tileseteditor.cpp +++ b/src/tiled/tileseteditor.cpp @@ -33,8 +33,11 @@ #include "maintoolbar.h" #include "mapdocument.h" #include "mapobject.h" +#include "newtilesetdialog.h" #include "objectgroup.h" -#include "objecttemplate.h" +#if QT_VERSION < QT_VERSION_CHECK(6, 5, 0) +#include "objecttemplate.h" // needed for static assert in QtCore/qmetatype.h +#endif #include "preferences.h" #include "propertiesdock.h" #include "scriptmanager.h" @@ -132,6 +135,7 @@ TilesetEditor::TilesetEditor(QObject *parent) , mWidgetStack(new QStackedWidget(mMainWindow)) , mAddTiles(new QAction(this)) , mRemoveTiles(new QAction(this)) + , mEditTilesetParameters(new QAction(this)) , mRelocateTiles(new QAction(this)) , mShowAnimationEditor(new QAction(this)) , mDynamicWrappingToggle(new QAction(this)) @@ -155,6 +159,7 @@ TilesetEditor::TilesetEditor(QObject *parent) ActionManager::registerAction(editWang, "EditWang"); ActionManager::registerAction(mAddTiles, "AddTiles"); ActionManager::registerAction(mRemoveTiles, "RemoveTiles"); + ActionManager::registerAction(mEditTilesetParameters, "EditTilesetParameters"); ActionManager::registerAction(mRelocateTiles, "RelocateTiles"); ActionManager::registerAction(mShowAnimationEditor, "ShowAnimationEditor"); ActionManager::registerAction(mDynamicWrappingToggle, "DynamicWrappingToggle"); @@ -200,6 +205,8 @@ TilesetEditor::TilesetEditor(QObject *parent) connect(mAddTiles, &QAction::triggered, this, &TilesetEditor::openAddTilesDialog); connect(mRemoveTiles, &QAction::triggered, this, &TilesetEditor::removeTiles); + connect(mEditTilesetParameters, &QAction::triggered, this, &TilesetEditor::editTilesetParameters); + connect(mRelocateTiles, &QAction::toggled, this, &TilesetEditor::setRelocateTiles); connect(editCollision, &QAction::toggled, this, &TilesetEditor::setEditCollision); connect(editWang, &QAction::toggled, this, &TilesetEditor::setEditWang); @@ -250,7 +257,7 @@ TilesetEditor::TilesetEditor(QObject *parent) retranslateUi(); connect(Preferences::instance(), &Preferences::languageChanged, this, &TilesetEditor::retranslateUi); - updateAddRemoveActions(); + updateActions(); } void TilesetEditor::saveState() @@ -368,7 +375,7 @@ void TilesetEditor::setCurrentDocument(Document *document) currentChanged(QModelIndex()); } - updateAddRemoveActions(); + updateActions(); } Document *TilesetEditor::currentDocument() const @@ -550,7 +557,7 @@ void TilesetEditor::selectionChanged() if (!view) return; - updateAddRemoveActions(); + updateActions(); const QItemSelectionModel *s = view->selectionModel(); const QModelIndexList indexes = s->selection().indexes(); @@ -680,6 +687,26 @@ void TilesetEditor::updateTilesetView(Tileset *tileset) model->tilesetChanged(); } +void TilesetEditor::editTilesetParameters() +{ + if (!mCurrentTilesetDocument) + return; + if (mCurrentTilesetDocument->tileset()->isCollection()) + return; + + TilesetParameters parameters(*mCurrentTilesetDocument->tileset()); + NewTilesetDialog dialog(mMainWindow->window()); + + if (dialog.editTilesetParameters(parameters)) { + if (parameters != TilesetParameters(*mCurrentTilesetDocument->tileset())) { + auto command = new ChangeTilesetParameters(mCurrentTilesetDocument, + parameters); + + mCurrentTilesetDocument->undoStack()->push(command); + } + } +} + void TilesetEditor::setCurrentTile(Tile *tile) { if (mCurrentTile == tile) @@ -698,6 +725,7 @@ void TilesetEditor::retranslateUi() mAddTiles->setText(tr("Add Tiles")); mRemoveTiles->setText(tr("Remove Tiles")); + mEditTilesetParameters->setText(tr("Edit Tileset Image Parameters...")); mRelocateTiles->setText(tr("Rearrange Tiles")); mShowAnimationEditor->setText(tr("Tile Animation Editor")); mDynamicWrappingToggle->setText(tr("Dynamically Wrap Tiles")); @@ -1057,7 +1085,7 @@ void TilesetEditor::onAnimationEditorClosed() mShowAnimationEditor->setChecked(false); } -void TilesetEditor::updateAddRemoveActions() +void TilesetEditor::updateActions() { bool isCollection = false; bool hasSelection = false; @@ -1069,6 +1097,8 @@ void TilesetEditor::updateAddRemoveActions() mAddTiles->setEnabled(isCollection); mRemoveTiles->setEnabled(isCollection && hasSelection); + + mEditTilesetParameters->setEnabled(mCurrentTilesetDocument && !isCollection); } } // namespace Tiled diff --git a/src/tiled/tileseteditor.h b/src/tiled/tileseteditor.h index 5f86bb2f33..b49fee486d 100644 --- a/src/tiled/tileseteditor.h +++ b/src/tiled/tileseteditor.h @@ -92,6 +92,7 @@ class TilesetEditor final : public Editor QAction *addTilesAction() const; QAction *removeTilesAction() const; + QAction *editTilesetParametersAction() const; QAction *relocateTilesAction() const; QAction *editCollisionAction() const; QAction *editWangSetsAction() const; @@ -126,6 +127,8 @@ class TilesetEditor final : public Editor void selectedTilesChanged(); void updateTilesetView(Tileset *tileset); + void editTilesetParameters(); + void openAddTilesDialog(); void addTiles(const QList &urls); void removeTiles(); @@ -136,7 +139,7 @@ class TilesetEditor final : public Editor void setEditWang(bool editWang); - void updateAddRemoveActions(); + void updateActions(); void onCurrentWangSetChanged(WangSet *wangSet); void currentWangIdChanged(WangId wangId); @@ -161,6 +164,7 @@ class TilesetEditor final : public Editor QAction *mAddTiles; QAction *mRemoveTiles; + QAction *mEditTilesetParameters; QAction *mRelocateTiles; QAction *mShowAnimationEditor; QAction *mDynamicWrappingToggle; @@ -191,6 +195,11 @@ inline QAction *TilesetEditor::removeTilesAction() const return mRemoveTiles; } +inline QAction *TilesetEditor::editTilesetParametersAction() const +{ + return mEditTilesetParameters; +} + inline QAction *TilesetEditor::relocateTilesAction() const { return mRelocateTiles;