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);
|
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
|
bool MaterialBrowserView::isMaterial(const ModelNode &node) const
|
||||||
{
|
{
|
||||||
return node.metaInfo().isQtQuick3DMaterial();
|
return node.metaInfo().isQtQuick3DMaterial();
|
||||||
@@ -356,26 +379,18 @@ void MaterialBrowserView::nodeIdChanged(const ModelNode &node, [[maybe_unused]]
|
|||||||
void MaterialBrowserView::variantPropertiesChanged(const QList<VariantProperty> &propertyList,
|
void MaterialBrowserView::variantPropertiesChanged(const QList<VariantProperty> &propertyList,
|
||||||
[[maybe_unused]] PropertyChangeFlags propertyChange)
|
[[maybe_unused]] PropertyChangeFlags propertyChange)
|
||||||
{
|
{
|
||||||
for (const VariantProperty &property : propertyList) {
|
updatePropertyList(propertyList);
|
||||||
ModelNode node(property.parentModelNode());
|
}
|
||||||
if (isMaterial(node) && property.name() == "objectName") {
|
|
||||||
m_widget->materialBrowserModel()->updateMaterialName(node);
|
void MaterialBrowserView::bindingPropertiesChanged(const QList<BindingProperty> &propertyList,
|
||||||
} else if (property.name() == "source") {
|
[[maybe_unused]] PropertyChangeFlags propertyChange)
|
||||||
QmlObjectNode selectedTex = m_widget->materialBrowserTexturesModel()->selectedTexture();
|
{
|
||||||
if (isTexture(node))
|
updatePropertyList(propertyList);
|
||||||
m_widget->materialBrowserTexturesModel()->updateTextureSource(node);
|
|
||||||
else if (selectedTex.propertyChangeForCurrentState() == node)
|
|
||||||
m_widget->materialBrowserTexturesModel()->updateTextureSource(selectedTex);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaterialBrowserView::propertiesRemoved(const QList<AbstractProperty> &propertyList)
|
void MaterialBrowserView::propertiesRemoved(const QList<AbstractProperty> &propertyList)
|
||||||
{
|
{
|
||||||
for (const AbstractProperty &prop : propertyList) {
|
updatePropertyList(propertyList);
|
||||||
if (isTexture(prop.parentModelNode()) && prop.name() == "source")
|
|
||||||
m_widget->materialBrowserTexturesModel()->updateTextureSource(prop.parentModelNode());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaterialBrowserView::nodeReparented(const ModelNode &node,
|
void MaterialBrowserView::nodeReparented(const ModelNode &node,
|
||||||
|
@@ -39,6 +39,8 @@ public:
|
|||||||
const QByteArray &requestId) override;
|
const QByteArray &requestId) override;
|
||||||
void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) override;
|
void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) override;
|
||||||
void variantPropertiesChanged(const QList<VariantProperty> &propertyList, PropertyChangeFlags propertyChange) 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 propertiesRemoved(const QList<AbstractProperty> &propertyList) override;
|
||||||
void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent,
|
void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent,
|
||||||
const NodeAbstractProperty &oldPropertyParent,
|
const NodeAbstractProperty &oldPropertyParent,
|
||||||
@@ -72,6 +74,10 @@ private:
|
|||||||
void active3DSceneChanged(qint32 sceneId);
|
void active3DSceneChanged(qint32 sceneId);
|
||||||
void refreshModel(bool updateImages);
|
void refreshModel(bool updateImages);
|
||||||
void updateMaterialsPreview();
|
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 isMaterial(const ModelNode &node) const;
|
||||||
bool isTexture(const ModelNode &node) const;
|
bool isTexture(const ModelNode &node) const;
|
||||||
void loadPropertyGroups();
|
void loadPropertyGroups();
|
||||||
|
Reference in New Issue
Block a user