diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp index a24cd06bfa5..571dfff1fb2 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.cpp @@ -33,7 +33,7 @@ QVariant MaterialBrowserTexturesModel::data(const QModelIndex &index, int role) QByteArray roleName = roleNames().value(role); if (roleName == "textureSource") { - QString source = m_textureList.at(index.row()).variantProperty("source").value().toString(); + QString source = QmlObjectNode(m_textureList.at(index.row())).modelValue("source").toString(); if (source.isEmpty()) return {}; if (Utils::FilePath::fromString(source).isAbsolutePath()) @@ -184,6 +184,11 @@ void MaterialBrowserTexturesModel::updateTextureSource(const ModelNode &texture) emit dataChanged(index(idx, 0), index(idx, 0), {roleNames().key("textureSource")}); } +void MaterialBrowserTexturesModel::updateAllTexturesSources() +{ + emit dataChanged(index(0, 0), index(rowCount() - 1, 0), {roleNames().key("textureSource")}); +} + void MaterialBrowserTexturesModel::updateSelectedTexture() { selectTexture(m_selectedIndex, true); @@ -205,6 +210,11 @@ ModelNode MaterialBrowserTexturesModel::textureAt(int idx) const return {}; } +ModelNode MaterialBrowserTexturesModel::selectedTexture() const +{ + return textureAt(m_selectedIndex); +} + bool MaterialBrowserTexturesModel::hasSingleModelSelection() const { return m_hasSingleModelSelection; diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h index 50a07623fa4..112a0ccbb82 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowsertexturesmodel.h @@ -37,8 +37,10 @@ public: void deleteSelectedTexture(); void updateSelectedTexture(); void updateTextureSource(const ModelNode &texture); - int textureIndex(const ModelNode &material) const; + void updateAllTexturesSources(); + int textureIndex(const ModelNode &texture) const; ModelNode textureAt(int idx) const; + ModelNode selectedTexture() const; bool hasSingleModelSelection() const; void setHasSingleModelSelection(bool b); @@ -78,7 +80,6 @@ private: QString m_searchText; QList m_textureList; - ModelNode m_copiedMaterial; QHash m_textureIndexHash; // internalId -> index int m_selectedIndex = 0; diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp index 199852dc1af..118c4ca3b91 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp @@ -8,7 +8,6 @@ #include "materialbrowsermodel.h" #include "materialbrowsertexturesmodel.h" #include "materialbrowserwidget.h" -#include "modelnodeoperations.h" #include "nodeabstractproperty.h" #include "nodemetainfo.h" #include "qmlobjectnode.h" @@ -327,10 +326,15 @@ void MaterialBrowserView::variantPropertiesChanged(const QList for (const VariantProperty &property : propertyList) { ModelNode node(property.parentModelNode()); - if (isMaterial(node) && property.name() == "objectName") + if (isMaterial(node) && property.name() == "objectName") { m_widget->materialBrowserModel()->updateMaterialName(node); - else if (isTexture(node) && property.name() == "source") - m_widget->materialBrowserTexturesModel()->updateTextureSource(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); + } } } @@ -483,6 +487,11 @@ void MaterialBrowserView::active3DSceneChanged(qint32 sceneId) m_sceneId = sceneId; } +void MaterialBrowserView::currentStateChanged([[maybe_unused]] const ModelNode &node) +{ + m_widget->materialBrowserTexturesModel()->updateAllTexturesSources(); +} + void MaterialBrowserView::instancesCompleted(const QVector &completedNodeList) { for (const ModelNode &node : completedNodeList) { diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h index 0c1d216aa33..f2a64e945d0 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.h @@ -49,11 +49,12 @@ public: const QList &nodeList, const QList &data) override; void instancesCompleted(const QVector &completedNodeList) override; void instancePropertyChanged(const QList > &propertyList) override; + void active3DSceneChanged(qint32 sceneId) override; + void currentStateChanged(const ModelNode &node) override; void applyTextureToModel3D(const QmlObjectNode &model3D, const ModelNode &texture); void applyTextureToMaterial(const QList &materials, const ModelNode &texture); - void active3DSceneChanged(qint32 sceneId) override; Q_INVOKABLE void updatePropsModel(const QString &matId); Q_INVOKABLE void applyTextureToProperty(const QString &matId, const QString &propName);