forked from qt-creator/qt-creator
QmlDesigner: Update material browser nodes on property changes
Binding property changes and removed properties are followed by a preview request in Material Browser Fixes: QDS-12987 Change-Id: I6e84ef6dad08653e7f611fc8ba36d29d87ee03b9 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -280,6 +280,29 @@ void MaterialBrowserView::updateMaterialsPreview()
|
||||
m_previewTimer.start(0);
|
||||
}
|
||||
|
||||
template<typename T, typename> // T can be either BindingProperty or VariantProperty
|
||||
void MaterialBrowserView::updatePropertyList(const QList<T> &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<VariantProperty> &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<BindingProperty> &propertyList,
|
||||
[[maybe_unused]] PropertyChangeFlags propertyChange)
|
||||
{
|
||||
updatePropertyList(propertyList);
|
||||
}
|
||||
|
||||
void MaterialBrowserView::propertiesRemoved(const QList<AbstractProperty> &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,
|
||||
|
@@ -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<VariantProperty> &propertyList, PropertyChangeFlags propertyChange) override;
|
||||
void bindingPropertiesChanged(const QList<BindingProperty> &propertyList,
|
||||
PropertyChangeFlags propertyChange) override;
|
||||
void propertiesRemoved(const QList<AbstractProperty> &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<typename T, typename = typename std::enable_if<std::is_base_of<AbstractProperty, T>::value>::type>
|
||||
void updatePropertyList(const QList<T> &propertyList);
|
||||
|
||||
bool isMaterial(const ModelNode &node) const;
|
||||
bool isTexture(const ModelNode &node) const;
|
||||
void loadPropertyGroups();
|
||||
|
Reference in New Issue
Block a user