diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp index e5c111aedbc..55170f616b2 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp @@ -280,6 +280,29 @@ void MaterialBrowserView::updateMaterialsPreview() m_previewTimer.start(0); } +template // T can be either BindingProperty or VariantProperty +void MaterialBrowserView::updatePropertyList(const QList &propertyList) +{ + for (const AbstractProperty &property : propertyList) { + ModelNode node(property.parentModelNode()); + if (isMaterial(node)) { + if (property.name() == "objectName") + m_widget->materialBrowserModel()->updateMaterialName(node); + else + m_previewRequests << node; + } else if (property.name() == "source") { + QmlObjectNode selectedTex = m_widget->materialBrowserTexturesModel()->selectedTexture(); + if (isTexture(node)) + m_widget->materialBrowserTexturesModel()->updateTextureSource(node); + else if (selectedTex.propertyChangeForCurrentState() == node) + m_widget->materialBrowserTexturesModel()->updateTextureSource(selectedTex); + } + } + + if (!m_previewRequests.isEmpty()) + m_previewTimer.start(0); +} + bool MaterialBrowserView::isMaterial(const ModelNode &node) const { return node.metaInfo().isQtQuick3DMaterial(); @@ -356,26 +379,18 @@ void MaterialBrowserView::nodeIdChanged(const ModelNode &node, [[maybe_unused]] void MaterialBrowserView::variantPropertiesChanged(const QList &propertyList, [[maybe_unused]] PropertyChangeFlags propertyChange) { - for (const VariantProperty &property : propertyList) { - ModelNode node(property.parentModelNode()); - if (isMaterial(node) && property.name() == "objectName") { - m_widget->materialBrowserModel()->updateMaterialName(node); - } else if (property.name() == "source") { - QmlObjectNode selectedTex = m_widget->materialBrowserTexturesModel()->selectedTexture(); - if (isTexture(node)) - m_widget->materialBrowserTexturesModel()->updateTextureSource(node); - else if (selectedTex.propertyChangeForCurrentState() == node) - m_widget->materialBrowserTexturesModel()->updateTextureSource(selectedTex); - } - } + updatePropertyList(propertyList); +} + +void MaterialBrowserView::bindingPropertiesChanged(const QList &propertyList, + [[maybe_unused]] PropertyChangeFlags propertyChange) +{ + updatePropertyList(propertyList); } void MaterialBrowserView::propertiesRemoved(const QList &propertyList) { - for (const AbstractProperty &prop : propertyList) { - if (isTexture(prop.parentModelNode()) && prop.name() == "source") - m_widget->materialBrowserTexturesModel()->updateTextureSource(prop.parentModelNode()); - } + updatePropertyList(propertyList); } void MaterialBrowserView::nodeReparented(const ModelNode &node, diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h index 9689e721667..b6470ee1617 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h @@ -39,6 +39,8 @@ public: const QByteArray &requestId) override; void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) override; void variantPropertiesChanged(const QList &propertyList, PropertyChangeFlags propertyChange) override; + void bindingPropertiesChanged(const QList &propertyList, + PropertyChangeFlags propertyChange) override; void propertiesRemoved(const QList &propertyList) override; void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent, const NodeAbstractProperty &oldPropertyParent, @@ -72,6 +74,10 @@ private: void active3DSceneChanged(qint32 sceneId); void refreshModel(bool updateImages); void updateMaterialsPreview(); + + template::value>::type> + void updatePropertyList(const QList &propertyList); + bool isMaterial(const ModelNode &node) const; bool isTexture(const ModelNode &node) const; void loadPropertyGroups();