diff --git a/forms/tileseteditor.ui b/forms/tileseteditor.ui index 54919db6..bdbbae89 100644 --- a/forms/tileseteditor.ui +++ b/forms/tileseteditor.ui @@ -307,7 +307,7 @@ 0 0 386 - 361 + 359 @@ -397,10 +397,17 @@ + + + + Tools + + + @@ -421,6 +428,11 @@ Import Secondary Tiles + + + Change Number of Metatiles + + diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h index cb360d03..53755153 100644 --- a/include/ui/tileseteditor.h +++ b/include/ui/tileseteditor.h @@ -46,6 +46,8 @@ private slots: void on_actionImport_Secondary_Tiles_triggered(); + void on_actionChange_Metatiles_Count_triggered(); + private: void closeEvent(QCloseEvent*); void initMetatileSelector(); diff --git a/include/ui/tileseteditortileselector.h b/include/ui/tileseteditortileselector.h index 62a14e2b..fe8d6bc2 100644 --- a/include/ui/tileseteditortileselector.h +++ b/include/ui/tileseteditortileselector.h @@ -12,6 +12,8 @@ public: this->secondaryTileset = secondaryTileset; this->numTilesWide = 16; this->paletteId = 0; + this->xFlip = false; + this->yFlip = false; setAcceptHoverEvents(true); } void draw(); diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 540c5bf4..b1d388c7 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -4,6 +4,7 @@ #include #include #include +#include TilesetEditor::TilesetEditor(Project *project, QString primaryTilesetLabel, QString secondaryTilesetLabel, QWidget *parent) : QMainWindow(parent), @@ -349,3 +350,72 @@ void TilesetEditor::closeEvent(QCloseEvent *event) event->ignore(); } } + +void TilesetEditor::on_actionChange_Metatiles_Count_triggered() +{ + QDialog dialog(this, Qt::WindowTitleHint | Qt::WindowCloseButtonHint); + dialog.setWindowTitle("Change Number of Metatiles"); + dialog.setWindowModality(Qt::NonModal); + + QFormLayout form(&dialog); + + QSpinBox *primarySpinBox = new QSpinBox(); + QSpinBox *secondarySpinBox = new QSpinBox(); + primarySpinBox->setMinimum(1); + secondarySpinBox->setMinimum(1); + primarySpinBox->setMaximum(Project::getNumMetatilesPrimary()); + secondarySpinBox->setMaximum(Project::getNumMetatilesTotal() - Project::getNumMetatilesPrimary()); + primarySpinBox->setValue(this->primaryTileset->metatiles->length()); + secondarySpinBox->setValue(this->secondaryTileset->metatiles->length()); + form.addRow(new QLabel("Primary Tileset"), primarySpinBox); + form.addRow(new QLabel("Secondary Tileset"), secondarySpinBox); + + QDialogButtonBox buttonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, &dialog); + connect(&buttonBox, SIGNAL(accepted()), &dialog, SLOT(accept())); + connect(&buttonBox, SIGNAL(rejected()), &dialog, SLOT(reject())); + form.addRow(&buttonBox); + + if (dialog.exec() == QDialog::Accepted) { + int numPrimaryMetatiles = primarySpinBox->value(); + int numSecondaryMetatiles = secondarySpinBox->value(); + while (this->primaryTileset->metatiles->length() > numPrimaryMetatiles) { + Metatile *metatile = this->primaryTileset->metatiles->takeLast(); + delete metatile; + } + while (this->primaryTileset->metatiles->length() < numPrimaryMetatiles) { + Tile tile; + tile.palette = 0; + tile.tile = 0; + tile.xflip = 0; + tile.yflip = 0; + Metatile *metatile = new Metatile; + metatile->behavior = 0; + metatile->layerType = 0; + for (int i = 0; i < 8; i++) { + metatile->tiles->append(tile); + } + this->primaryTileset->metatiles->append(metatile); + } + while (this->secondaryTileset->metatiles->length() > numSecondaryMetatiles) { + Metatile *metatile = this->secondaryTileset->metatiles->takeLast(); + delete metatile; + } + while (this->secondaryTileset->metatiles->length() < numSecondaryMetatiles) { + Tile tile; + tile.palette = 0; + tile.tile = 0; + tile.xflip = 0; + tile.yflip = 0; + Metatile *metatile = new Metatile; + metatile->behavior = 0; + metatile->layerType = 0; + for (int i = 0; i < 8; i++) { + metatile->tiles->append(tile); + } + this->secondaryTileset->metatiles->append(metatile); + } + + this->refresh(); + this->hasUnsavedChanges = true; + } +}