QmlDesigner: Validate the id for texture before setting it

* Also updates the texture id when it's changed from another view

Fixes: QDS-12992
Fixes: QDS-12995
Change-Id: Iee39feff5e1790b507d908664ad551db33a9b61d
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
Ali Kianian
2024-06-12 17:11:13 +03:00
parent 88f6f52cd4
commit 28af0f1394
4 changed files with 18 additions and 3 deletions

View File

@@ -82,6 +82,8 @@ Item {
width: img.width
anchors.horizontalCenter: parent.horizontalCenter
validator: RegularExpressionValidator { regularExpression: /(^$|^[a-z_]\w*$)/ }
onRenamed: (newId) => {
MaterialBrowserBackend.materialBrowserTexturesModel.setTextureId(index, newId);
mouseArea.forceActiveFocus()

View File

@@ -206,6 +206,13 @@ void MaterialBrowserTexturesModel::updateTextureSource(const ModelNode &texture)
emit dataChanged(index(idx, 0), index(idx, 0), {RoleTexSource, RoleTexToolTip});
}
void MaterialBrowserTexturesModel::updateTextureId(const ModelNode &texture)
{
int idx = textureIndex(texture);
if (idx != -1)
emit dataChanged(index(idx, 0), index(idx, 0), {RoleTexId, RoleTexSource, RoleTexToolTip});
}
void MaterialBrowserTexturesModel::updateAllTexturesSources()
{
emit dataChanged(index(0, 0), index(rowCount() - 1, 0), {RoleTexSource, RoleTexToolTip});
@@ -314,8 +321,13 @@ void MaterialBrowserTexturesModel::setTextureId(int idx, const QString &newId)
return;
if (node.id() != newId) {
node.setIdWithRefactoring(newId);
emit dataChanged(index(idx, 0), index(idx, 0), {RoleTexId});
QString nodeId;
if (!newId.isEmpty()) {
const auto model = m_view->model();
QTC_ASSERT(model, return);
nodeId = model->generateNewId(newId);
}
node.setIdWithRefactoring(nodeId);
}
}

View File

@@ -38,6 +38,7 @@ public:
void deleteSelectedTexture();
void updateSelectedTexture();
void updateTextureSource(const ModelNode &texture);
void updateTextureId(const ModelNode &texture);
void updateAllTexturesSources();
int textureIndex(const ModelNode &texture) const;
ModelNode textureAt(int idx) const;

View File

@@ -373,7 +373,7 @@ void MaterialBrowserView::nodeIdChanged(const ModelNode &node, [[maybe_unused]]
[[maybe_unused]] const QString &oldId)
{
if (isTexture(node))
m_widget->materialBrowserTexturesModel()->updateTextureSource(node);
m_widget->materialBrowserTexturesModel()->updateTextureId(node);
}
void MaterialBrowserView::variantPropertiesChanged(const QList<VariantProperty> &propertyList,