forked from qt-creator/qt-creator
QmlDesigner: Handle texture changes on material editor view
Fixes: QDS-12996 Change-Id: I148abcb435e95dc4deeead0f02aa8f1ca95bc600 Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
This commit is contained in:
@@ -178,6 +178,11 @@ void MaterialEditorQmlBackend::updateMaterialPreview(const QPixmap &pixmap)
|
||||
QMetaObject::invokeMethod(m_quickWidget->rootObject(), "refreshPreview");
|
||||
}
|
||||
|
||||
void MaterialEditorQmlBackend::refreshBackendModel()
|
||||
{
|
||||
m_backendModelNode.refresh();
|
||||
}
|
||||
|
||||
DesignerPropertyMap &MaterialEditorQmlBackend::backendValuesPropertyMap()
|
||||
{
|
||||
return m_backendValuesPropertyMap;
|
||||
|
@@ -44,6 +44,7 @@ public:
|
||||
void setSource(const QUrl &url);
|
||||
QmlAnchorBindingProxy &backendAnchorBinding();
|
||||
void updateMaterialPreview(const QPixmap &pixmap);
|
||||
void refreshBackendModel();
|
||||
DesignerPropertyMap &backendValuesPropertyMap();
|
||||
MaterialEditorTransaction *materialEditorTransaction() const;
|
||||
|
||||
|
@@ -44,6 +44,19 @@ namespace QmlDesigner {
|
||||
|
||||
static const char MATERIAL_EDITOR_IMAGE_REQUEST_ID[] = "MaterialEditor";
|
||||
|
||||
static bool containsTexture(const ModelNode &node)
|
||||
{
|
||||
if (node.metaInfo().isQtQuick3DTexture())
|
||||
return true;
|
||||
|
||||
const ModelNodes children = node.allSubModelNodes();
|
||||
for (const ModelNode &child : children) {
|
||||
if (child.metaInfo().isQtQuick3DTexture())
|
||||
return true;
|
||||
}
|
||||
return false;
|
||||
};
|
||||
|
||||
MaterialEditorView::MaterialEditorView(ExternalDependenciesInterface &externalDependencies)
|
||||
: AbstractView{externalDependencies}
|
||||
, m_stackedWidget(new QStackedWidget)
|
||||
@@ -1110,12 +1123,34 @@ void MaterialEditorView::nodeReparented(const ModelNode &node,
|
||||
{
|
||||
if (node.id() == Constants::MATERIAL_LIB_ID && m_qmlBackEnd && m_qmlBackEnd->contextObject())
|
||||
m_qmlBackEnd->contextObject()->setHasMaterialLibrary(true);
|
||||
else if (m_qmlBackEnd && containsTexture(node))
|
||||
m_qmlBackEnd->refreshBackendModel();
|
||||
}
|
||||
|
||||
void MaterialEditorView::nodeIdChanged(const ModelNode &node,
|
||||
[[maybe_unused]] const QString &newId,
|
||||
[[maybe_unused]] const QString &oldId)
|
||||
{
|
||||
if (m_qmlBackEnd && node.metaInfo().isQtQuick3DTexture())
|
||||
m_qmlBackEnd->refreshBackendModel();
|
||||
}
|
||||
|
||||
void MaterialEditorView::nodeAboutToBeRemoved(const ModelNode &removedNode)
|
||||
{
|
||||
if (removedNode.id() == Constants::MATERIAL_LIB_ID && m_qmlBackEnd && m_qmlBackEnd->contextObject())
|
||||
m_qmlBackEnd->contextObject()->setHasMaterialLibrary(false);
|
||||
else if (containsTexture(removedNode))
|
||||
m_textureAboutToBeRemoved = true;
|
||||
}
|
||||
|
||||
void MaterialEditorView::nodeRemoved([[maybe_unused]] const ModelNode &removedNode,
|
||||
[[maybe_unused]] const NodeAbstractProperty &parentProperty,
|
||||
[[maybe_unused]] PropertyChangeFlags propertyChange)
|
||||
{
|
||||
if (m_qmlBackEnd && m_textureAboutToBeRemoved)
|
||||
m_qmlBackEnd->refreshBackendModel();
|
||||
|
||||
m_textureAboutToBeRemoved = false;
|
||||
}
|
||||
|
||||
void QmlDesigner::MaterialEditorView::highlightSupportedProperties(bool highlight)
|
||||
|
@@ -61,10 +61,17 @@ public:
|
||||
void importsChanged(const Imports &addedImports, const Imports &removedImports) override;
|
||||
void customNotification(const AbstractView *view, const QString &identifier,
|
||||
const QList<ModelNode> &nodeList, const QList<QVariant> &data) override;
|
||||
void nodeReparented(const ModelNode &node, const NodeAbstractProperty &newPropertyParent,
|
||||
|
||||
void nodeReparented(const ModelNode &node,
|
||||
const NodeAbstractProperty &newPropertyParent,
|
||||
const NodeAbstractProperty &oldPropertyParent,
|
||||
AbstractView::PropertyChangeFlags propertyChange) override;
|
||||
|
||||
void nodeIdChanged(const ModelNode &node, const QString &newId, const QString &oldId) override;
|
||||
void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
|
||||
void nodeRemoved(const ModelNode &removedNode,
|
||||
const NodeAbstractProperty &parentProperty,
|
||||
PropertyChangeFlags propertyChange) override;
|
||||
|
||||
void dragStarted(QMimeData *mimeData) override;
|
||||
void dragEnded() override;
|
||||
@@ -128,6 +135,7 @@ private:
|
||||
bool m_hasQuick3DImport = false;
|
||||
bool m_hasMaterialRoot = false;
|
||||
bool m_initializingPreviewData = false;
|
||||
bool m_textureAboutToBeRemoved = false;
|
||||
QSize m_previewSize;
|
||||
QByteArray m_previewRequestId;
|
||||
|
||||
|
@@ -28,9 +28,16 @@ void ItemFilterModel::setModelNodeBackend(const QVariant &modelNodeBackend)
|
||||
const auto backendObjectCasted =
|
||||
qobject_cast<const QmlModelNodeProxy *>(modelNodeBackendObject);
|
||||
|
||||
if (backendObjectCasted)
|
||||
disconnect(m_updateConnection);
|
||||
if (backendObjectCasted) {
|
||||
m_modelNode = backendObjectCasted->qmlObjectNode().modelNode();
|
||||
|
||||
m_updateConnection = connect(backendObjectCasted,
|
||||
&QmlModelNodeProxy::refreshRequired,
|
||||
this,
|
||||
&ItemFilterModel::setupModel);
|
||||
}
|
||||
|
||||
setupModel();
|
||||
emit modelNodeBackendChanged();
|
||||
}
|
||||
|
@@ -71,6 +71,7 @@ private:
|
||||
QString m_typeFilter;
|
||||
QList<qint32> m_modelInternalIds;
|
||||
QmlDesigner::ModelNode m_modelNode;
|
||||
QMetaObject::Connection m_updateConnection;
|
||||
bool m_selectionOnly;
|
||||
QStringList m_selectedItems;
|
||||
|
||||
|
@@ -46,6 +46,11 @@ void QmlModelNodeProxy::emitSelectionChanged()
|
||||
emit selectionChanged();
|
||||
}
|
||||
|
||||
void QmlModelNodeProxy::refresh()
|
||||
{
|
||||
emit refreshRequired();
|
||||
}
|
||||
|
||||
QmlObjectNode QmlModelNodeProxy::qmlObjectNode() const
|
||||
{
|
||||
return m_qmlObjectNode;
|
||||
|
@@ -28,6 +28,7 @@ public:
|
||||
|
||||
void emitSelectionToBeChanged();
|
||||
void emitSelectionChanged();
|
||||
void refresh();
|
||||
|
||||
QmlObjectNode qmlObjectNode() const;
|
||||
|
||||
@@ -70,6 +71,7 @@ signals:
|
||||
void modelNodeChanged();
|
||||
void selectionToBeChanged();
|
||||
void selectionChanged();
|
||||
void refreshRequired();
|
||||
|
||||
private:
|
||||
QList<int> allChildren(const ModelNode &modelNode) const;
|
||||
|
Reference in New Issue
Block a user