From 67af7e52da20776c7ae773d28c31a455e5bba0f4 Mon Sep 17 00:00:00 2001 From: GriffinR Date: Tue, 23 Nov 2021 12:58:04 -0500 Subject: [PATCH] Add get/setMetatileLabel to API --- include/mainwindow.h | 2 ++ include/ui/tileseteditor.h | 2 ++ src/mainwindow_scriptapi.cpp | 38 ++++++++++++++++++++++++++++++++++++ src/ui/tileseteditor.cpp | 26 ++++++++++++++++-------- 4 files changed, 60 insertions(+), 8 deletions(-) diff --git a/include/mainwindow.h b/include/mainwindow.h index a0fb8ae8..09855672 100644 --- a/include/mainwindow.h +++ b/include/mainwindow.h @@ -112,6 +112,8 @@ public: Q_INVOKABLE void setMetatileLayerOrder(QList order); Q_INVOKABLE QList getMetatileLayerOpacity(); Q_INVOKABLE void setMetatileLayerOpacity(QList order); + Q_INVOKABLE QString getMetatileLabel(int metatileId); + Q_INVOKABLE void setMetatileLabel(int metatileId, QString label); private slots: void on_action_Open_Project_triggered(); diff --git a/include/ui/tileseteditor.h b/include/ui/tileseteditor.h index ab901627..1088d27e 100644 --- a/include/ui/tileseteditor.h +++ b/include/ui/tileseteditor.h @@ -41,6 +41,8 @@ public: void updateMap(Map *map); void updateTilesets(QString primaryTilsetLabel, QString secondaryTilesetLabel); bool selectMetatile(uint16_t metatileId); + uint16_t getSelectedMetatile(); + void setMetatileLabel(QString label); QObjectList shortcutableObjects() const; diff --git a/src/mainwindow_scriptapi.cpp b/src/mainwindow_scriptapi.cpp index 2ed0be62..70e54a17 100644 --- a/src/mainwindow_scriptapi.cpp +++ b/src/mainwindow_scriptapi.cpp @@ -539,3 +539,41 @@ void MainWindow::setMetatileLayerOpacity(QList order) { this->editor->map->metatileLayerOpacity = order; this->refreshAfterPalettePreviewChange(); } + +QString MainWindow::getMetatileLabel(int metatileId) { + if (!this->editor || !this->editor->map || !this->editor->map->layout) + return QString(); + Tileset * primaryTileset = this->editor->map->layout->tileset_primary; + Tileset * secondaryTileset = this->editor->map->layout->tileset_secondary; + Metatile * metatile = Tileset::getMetatile(metatileId, primaryTileset, secondaryTileset); + if (!metatile || metatile->label.size() == 0) + return QString(); + + return metatile->label; +} + +void MainWindow::setMetatileLabel(int metatileId, QString label) { + if (!this->editor || !this->editor->map || !this->editor->map->layout) + return; + Tileset * primaryTileset = this->editor->map->layout->tileset_primary; + Tileset * secondaryTileset = this->editor->map->layout->tileset_secondary; + Metatile * metatile = Tileset::getMetatile(metatileId, primaryTileset, secondaryTileset); + if (!metatile) + return; + + // TODO: Verify input + //label.remove(QRegularExpression("?![_A-Za-z0-9]*$")); + + if (this->tilesetEditor && this->tilesetEditor->getSelectedMetatile() == metatileId) { + this->tilesetEditor->setMetatileLabel(label); + } else if (metatile->label != label) { + metatile->label = label; + + // TODO: Writing to file immediately. + // Perhaps update tilesets to carry a "hasUnsavedChanges" field, + // and on saving the project save all tilesets with unsaved changes. + // saveTilesetMetatileLabels can be trivially updated to handle a single tileset at a time. + if (editor->project) + editor->project->saveTilesetMetatileLabels(primaryTileset, secondaryTileset); + } +} diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 9660fbbd..2ad25a76 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -76,6 +76,10 @@ bool TilesetEditor::selectMetatile(uint16_t metatileId) { return true; } +uint16_t TilesetEditor::getSelectedMetatile() { + return this->metatileSelector->getSelectedMetatile(); +} + void TilesetEditor::setTilesets(QString primaryTilesetLabel, QString secondaryTilesetLabel) { Tileset *primaryTileset = project->getTileset(primaryTilesetLabel); Tileset *secondaryTileset = project->getTileset(secondaryTilesetLabel); @@ -173,7 +177,7 @@ void TilesetEditor::initMetatileSelector() } void TilesetEditor::initMetatileLayersItem() { - Metatile *metatile = Tileset::getMetatile(this->metatileSelector->getSelectedMetatile(), this->primaryTileset, this->secondaryTileset); + Metatile *metatile = Tileset::getMetatile(this->getSelectedMetatile(), this->primaryTileset, this->secondaryTileset); this->metatileLayersItem = new MetatileLayersItem(metatile, this->primaryTileset, this->secondaryTileset); connect(this->metatileLayersItem, &MetatileLayersItem::tileChanged, this, &TilesetEditor::onMetatileLayerTileChanged); @@ -278,7 +282,7 @@ void TilesetEditor::refresh() { this->metatileLayersItem->setTilesets(this->primaryTileset, this->secondaryTileset); this->tileSelector->setTilesets(this->primaryTileset, this->secondaryTileset); this->metatileSelector->setTilesets(this->primaryTileset, this->secondaryTileset); - this->metatileSelector->select(this->metatileSelector->getSelectedMetatile()); + this->metatileSelector->select(this->getSelectedMetatile()); this->drawSelectedTiles(); if (metatileSelector) { @@ -415,7 +419,7 @@ void TilesetEditor::onMetatileLayerTileChanged(int x, int y) { this->metatileLayersItem->draw(); this->hasUnsavedChanges = true; - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + MetatileHistoryItem *commit = new MetatileHistoryItem(this->getSelectedMetatile(), prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); } @@ -482,13 +486,19 @@ void TilesetEditor::on_comboBox_metatileBehaviors_textActivated(const QString &m if (this->metatile) { Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->behavior = static_cast(project->metatileBehaviorMap[metatileBehavior]); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + MetatileHistoryItem *commit = new MetatileHistoryItem(this->getSelectedMetatile(), prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; } } +void TilesetEditor::setMetatileLabel(QString label) +{ + this->ui->lineEdit_metatileLabel->setText(label); + saveMetatileLabel(); +} + void TilesetEditor::on_lineEdit_metatileLabel_editingFinished() { saveMetatileLabel(); @@ -500,7 +510,7 @@ void TilesetEditor::saveMetatileLabel() if (this->metatile && this->metatile->label != this->ui->lineEdit_metatileLabel->text()) { Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->label = this->ui->lineEdit_metatileLabel->text(); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + MetatileHistoryItem *commit = new MetatileHistoryItem(this->getSelectedMetatile(), prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; @@ -512,7 +522,7 @@ void TilesetEditor::on_comboBox_layerType_activated(int layerType) if (this->metatile) { Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->layerType = static_cast(layerType); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + MetatileHistoryItem *commit = new MetatileHistoryItem(this->getSelectedMetatile(), prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; @@ -524,7 +534,7 @@ void TilesetEditor::on_comboBox_encounterType_activated(int encounterType) if (this->metatile) { Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->encounterType = static_cast(encounterType); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + MetatileHistoryItem *commit = new MetatileHistoryItem(this->getSelectedMetatile(), prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true; @@ -536,7 +546,7 @@ void TilesetEditor::on_comboBox_terrainType_activated(int terrainType) if (this->metatile) { Metatile *prevMetatile = new Metatile(*this->metatile); this->metatile->terrainType = static_cast(terrainType); - MetatileHistoryItem *commit = new MetatileHistoryItem(metatileSelector->getSelectedMetatile(), + MetatileHistoryItem *commit = new MetatileHistoryItem(this->getSelectedMetatile(), prevMetatile, new Metatile(*this->metatile)); metatileHistory.push(commit); this->hasUnsavedChanges = true;