forked from qt-creator/qt-creator
QmlDesigner: Update textures sources on state change
Also small relevant fixes. Fixes: QDS-8523 Change-Id: I8125b124024ee18de8c70afbc9f633c3b9265e82 Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -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;
|
||||
|
@@ -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<ModelNode> m_textureList;
|
||||
ModelNode m_copiedMaterial;
|
||||
QHash<qint32, int> m_textureIndexHash; // internalId -> index
|
||||
|
||||
int m_selectedIndex = 0;
|
||||
|
@@ -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<VariantProperty>
|
||||
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<ModelNode> &completedNodeList)
|
||||
{
|
||||
for (const ModelNode &node : completedNodeList) {
|
||||
|
@@ -49,11 +49,12 @@ public:
|
||||
const QList<ModelNode> &nodeList, const QList<QVariant> &data) override;
|
||||
void instancesCompleted(const QVector<ModelNode> &completedNodeList) override;
|
||||
void instancePropertyChanged(const QList<QPair<ModelNode, PropertyName> > &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<ModelNode> &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);
|
||||
|
Reference in New Issue
Block a user