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 width: img.width
anchors.horizontalCenter: parent.horizontalCenter anchors.horizontalCenter: parent.horizontalCenter
validator: RegularExpressionValidator { regularExpression: /(^$|^[a-z_]\w*$)/ }
onRenamed: (newId) => { onRenamed: (newId) => {
MaterialBrowserBackend.materialBrowserTexturesModel.setTextureId(index, newId); MaterialBrowserBackend.materialBrowserTexturesModel.setTextureId(index, newId);
mouseArea.forceActiveFocus() mouseArea.forceActiveFocus()

View File

@@ -206,6 +206,13 @@ void MaterialBrowserTexturesModel::updateTextureSource(const ModelNode &texture)
emit dataChanged(index(idx, 0), index(idx, 0), {RoleTexSource, RoleTexToolTip}); 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() void MaterialBrowserTexturesModel::updateAllTexturesSources()
{ {
emit dataChanged(index(0, 0), index(rowCount() - 1, 0), {RoleTexSource, RoleTexToolTip}); emit dataChanged(index(0, 0), index(rowCount() - 1, 0), {RoleTexSource, RoleTexToolTip});
@@ -314,8 +321,13 @@ void MaterialBrowserTexturesModel::setTextureId(int idx, const QString &newId)
return; return;
if (node.id() != newId) { if (node.id() != newId) {
node.setIdWithRefactoring(newId); QString nodeId;
emit dataChanged(index(idx, 0), index(idx, 0), {RoleTexId}); 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 deleteSelectedTexture();
void updateSelectedTexture(); void updateSelectedTexture();
void updateTextureSource(const ModelNode &texture); void updateTextureSource(const ModelNode &texture);
void updateTextureId(const ModelNode &texture);
void updateAllTexturesSources(); void updateAllTexturesSources();
int textureIndex(const ModelNode &texture) const; int textureIndex(const ModelNode &texture) const;
ModelNode textureAt(int idx) 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) [[maybe_unused]] const QString &oldId)
{ {
if (isTexture(node)) if (isTexture(node))
m_widget->materialBrowserTexturesModel()->updateTextureSource(node); m_widget->materialBrowserTexturesModel()->updateTextureId(node);
} }
void MaterialBrowserView::variantPropertiesChanged(const QList<VariantProperty> &propertyList, void MaterialBrowserView::variantPropertiesChanged(const QList<VariantProperty> &propertyList,