diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml index 5ed132461b3..58a8f7418a9 100644 --- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml +++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/TextureItem.qml @@ -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() diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp index 918956a04c0..9137e14b14f 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp @@ -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); } } diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h index 8836d3b5db8..728a20f64af 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h @@ -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; diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp index 55170f616b2..516e1f777a2 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp @@ -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 &propertyList,