forked from qt-creator/qt-creator
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:
@@ -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()
|
||||||
|
@@ -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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -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;
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user