diff --git a/include/core/validator.h b/include/core/validator.h index f5f2ef91..2419de5d 100644 --- a/include/core/validator.h +++ b/include/core/validator.h @@ -52,8 +52,11 @@ public: : PrefixValidator(prefix, re_identifier, parent) {}; ~IdentifierValidator() {}; + void setAllowEmpty(bool allowEmpty); + private: static const QRegularExpression re_identifier; + static const QRegularExpression re_identifierOrEmpty; }; class UppercaseValidator : public QValidator { diff --git a/src/core/tileset.cpp b/src/core/tileset.cpp index 20590369..da5fcf54 100644 --- a/src/core/tileset.cpp +++ b/src/core/tileset.cpp @@ -182,9 +182,11 @@ bool Tileset::setMetatileLabel(int metatileId, QString label, Tileset *primaryTi if (!tileset) return false; - IdentifierValidator validator; - if (!validator.isValid(label)) - return false; + if (!label.isEmpty()) { + IdentifierValidator validator; + if (!validator.isValid(label)) + return false; + } tileset->metatileLabels[metatileId] = label; return true; diff --git a/src/core/validator.cpp b/src/core/validator.cpp index f682efc3..6f7a72a7 100644 --- a/src/core/validator.cpp +++ b/src/core/validator.cpp @@ -2,7 +2,11 @@ // Identifiers must only contain word characters, and cannot start with a digit. const QRegularExpression IdentifierValidator::re_identifier = QRegularExpression("[A-Za-z_]+[\\w]*"); +const QRegularExpression IdentifierValidator::re_identifierOrEmpty = QRegularExpression("(^$|[A-Za-z_]+[\\w]*)"); +void IdentifierValidator::setAllowEmpty(bool allowEmpty) { + this->setRegularExpression(allowEmpty ? re_identifierOrEmpty : re_identifier); +} bool PrefixValidator::missingPrefix(const QString &input) const { return !m_prefix.isEmpty() && !input.startsWith(m_prefix); diff --git a/src/ui/tileseteditor.cpp b/src/ui/tileseteditor.cpp index 835877da..9668f1cb 100644 --- a/src/ui/tileseteditor.cpp +++ b/src/ui/tileseteditor.cpp @@ -34,7 +34,10 @@ TilesetEditor::TilesetEditor(Project *project, Layout *layout, QWidget *parent) ui->actionShow_Tileset_Divider->setChecked(porymapConfig.showTilesetEditorDivider); ui->spinBox_paletteSelector->setMinimum(0); ui->spinBox_paletteSelector->setMaximum(Project::getNumPalettesTotal() - 1); - ui->lineEdit_metatileLabel->setValidator(new IdentifierValidator(this)); + + auto validator = new IdentifierValidator(this); + validator->setAllowEmpty(true); + ui->lineEdit_metatileLabel->setValidator(validator); ActiveWindowFilter *filter = new ActiveWindowFilter(this); connect(filter, &ActiveWindowFilter::activated, this, &TilesetEditor::onWindowActivated);