summaryrefslogtreecommitdiff
path: root/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp')
-rw-r--r--src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp81
1 files changed, 42 insertions, 39 deletions
diff --git a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
index c0b766648b..295935e8ac 100644
--- a/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
+++ b/src/plugins/qmldesigner/components/materialeditor/materialeditorview.cpp
@@ -420,12 +420,15 @@ void MaterialEditorView::handleToolBarAction(int action)
if (!model())
break;
executeInTransaction("MaterialEditorView:handleToolBarAction", [&] {
+ ModelNode matLib = materialLibraryNode();
+ if (!matLib.isValid())
+ return;
+
NodeMetaInfo metaInfo = model()->metaInfo("QtQuick3D.DefaultMaterial");
ModelNode newMatNode = createModelNode("QtQuick3D.DefaultMaterial", metaInfo.majorVersion(),
metaInfo.minorVersion());
renameMaterial(newMatNode, "New Material");
-
- materialLibraryNode().defaultNodeListProperty().reparentHere(newMatNode);
+ matLib.defaultNodeListProperty().reparentHere(newMatNode);
});
break;
}
@@ -462,10 +465,8 @@ void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue)
PropertyName matPrevEnvValueAuxProp("matPrevEnvValue");
auto renderPreviews = [=](const QString &auxEnv, const QString &auxValue) {
- ModelNode matLib = modelNodeForId(Constants::MATERIAL_LIB_ID);
- QTC_ASSERT(matLib.isValid(), return);
- matLib.setAuxiliaryData(matPrevEnvAuxProp, auxEnv);
- matLib.setAuxiliaryData(matPrevEnvValueAuxProp, auxValue);
+ rootModelNode().setAuxiliaryData(matPrevEnvAuxProp, auxEnv);
+ rootModelNode().setAuxiliaryData(matPrevEnvValueAuxProp, auxValue);
QTimer::singleShot(0, this, &MaterialEditorView::requestPreviewRender);
emitCustomNotification("refresh_material_browser", {});
};
@@ -473,13 +474,11 @@ void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue)
if (env == "Color") {
m_colorDialog.clear();
- ModelNode matLib = modelNodeForId(Constants::MATERIAL_LIB_ID);
- QTC_ASSERT(matLib.isValid(), return);
// Store color to separate property to persist selection over non-color env changes
PropertyName colorAuxProp("matPrevColor");
- QString oldColor = matLib.auxiliaryData(colorAuxProp).toString();
- QString oldEnv = matLib.auxiliaryData(matPrevEnvAuxProp).toString();
- QString oldValue = matLib.auxiliaryData(matPrevEnvValueAuxProp).toString();
+ QString oldColor = rootModelNode().auxiliaryData(colorAuxProp).toString();
+ QString oldEnv = rootModelNode().auxiliaryData(matPrevEnvAuxProp).toString();
+ QString oldValue = rootModelNode().auxiliaryData(matPrevEnvValueAuxProp).toString();
m_colorDialog = new QColorDialog(Core::ICore::dialogParent());
m_colorDialog->setModal(true);
@@ -495,9 +494,7 @@ void MaterialEditorView::handlePreviewEnvChanged(const QString &envAndValue)
QObject::connect(m_colorDialog, &QColorDialog::colorSelected,
m_colorDialog, [=](const QColor &color) {
renderPreviews(env, color.name());
- ModelNode matLib = modelNodeForId(Constants::MATERIAL_LIB_ID);
- QTC_ASSERT(matLib.isValid(), return);
- matLib.setAuxiliaryData(colorAuxProp, color.name());
+ rootModelNode().setAuxiliaryData(colorAuxProp, color.name());
});
QObject::connect(m_colorDialog, &QColorDialog::rejected,
@@ -519,9 +516,7 @@ void MaterialEditorView::handlePreviewModelChanged(const QString &modelStr)
QTC_ASSERT(model(), return);
QTC_ASSERT(model()->nodeInstanceView(), return);
- ModelNode matLib = modelNodeForId(Constants::MATERIAL_LIB_ID);
- QTC_ASSERT(matLib.isValid(), return);
- matLib.setAuxiliaryData("matPrevModel", modelStr);
+ rootModelNode().setAuxiliaryData("matPrevModel", modelStr);
QTimer::singleShot(0, this, &MaterialEditorView::requestPreviewRender);
emitCustomNotification("refresh_material_browser", {});
@@ -570,6 +565,7 @@ void MaterialEditorView::setupQmlBackend()
currentQmlBackend->widget()->installEventFilter(this);
currentQmlBackend->contextObject()->setHasQuick3DImport(m_hasQuick3DImport);
+ currentQmlBackend->contextObject()->setHasMaterialRoot(m_hasMaterialRoot);
m_stackedWidget->setCurrentWidget(currentQmlBackend->widget());
@@ -623,23 +619,20 @@ bool MaterialEditorView::noValidSelection() const
void MaterialEditorView::initPreviewData()
{
if (model() && m_qmlBackEnd) {
- ModelNode matLib = modelNodeForId(Constants::MATERIAL_LIB_ID);
- if (matLib.isValid()) {
- QString env = matLib.auxiliaryData("matPrevEnv").toString();
- QString envValue = matLib.auxiliaryData("matPrevEnvValue").toString();
- QString modelStr = matLib.auxiliaryData("matPrevModel").toString();
- if (!envValue.isEmpty() && env != "Color" && env != "Default") {
- env += '=';
- env += envValue;
- }
- if (env.isEmpty())
- env = "Default";
- if (modelStr.isEmpty())
- modelStr = "#Sphere";
- QMetaObject::invokeMethod(m_qmlBackEnd->widget()->rootObject(),
- "initPreviewData",
- Q_ARG(QVariant, env), Q_ARG(QVariant, modelStr));
+ QString env = rootModelNode().auxiliaryData("matPrevEnv").toString();
+ QString envValue = rootModelNode().auxiliaryData("matPrevEnvValue").toString();
+ QString modelStr = rootModelNode().auxiliaryData("matPrevModel").toString();
+ if (!envValue.isEmpty() && env != "Color" && env != "Default") {
+ env += '=';
+ env += envValue;
}
+ if (env.isEmpty())
+ env = "Default";
+ if (modelStr.isEmpty())
+ modelStr = "#Sphere";
+ QMetaObject::invokeMethod(m_qmlBackEnd->widget()->rootObject(),
+ "initPreviewData",
+ Q_ARG(QVariant, env), Q_ARG(QVariant, modelStr));
}
}
@@ -650,11 +643,15 @@ void MaterialEditorView::modelAttached(Model *model)
m_locked = true;
m_hasQuick3DImport = model->hasImport("QtQuick3D");
+ m_hasMaterialRoot = rootModelNode().isSubclassOf("QtQuick3D.Material");
- // Creating the material library node on model attach causes errors as long as the type information
- // not complete yet, so we keep checking until type info is complete.
- if (m_hasQuick3DImport)
+ if (m_hasMaterialRoot) {
+ m_selectedMaterial = rootModelNode();
+ } else if (m_hasQuick3DImport) {
+ // Creating the material library node on model attach causes errors as long as the type
+ // information is not complete yet, so we keep checking until type info is complete.
m_ensureMatLibTimer.start(500);
+ }
if (!m_setupCompleted) {
reloadQml();
@@ -868,6 +865,10 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
QmlObjectNode sourceMat(material);
executeInTransaction(__FUNCTION__, [&] {
+ ModelNode matLib = materialLibraryNode();
+ if (!matLib.isValid())
+ return;
+
// create the duplicate material
NodeMetaInfo metaInfo = model()->metaInfo(matType);
QmlObjectNode duplicateMat = createModelNode(matType, metaInfo.majorVersion(), metaInfo.minorVersion());
@@ -889,7 +890,7 @@ void MaterialEditorView::duplicateMaterial(const ModelNode &material)
duplicateMat.setBindingProperty(prop.name(), prop.toBindingProperty().expression());
}
- materialLibraryNode().defaultNodeListProperty().reparentHere(duplicateMat);
+ matLib.defaultNodeListProperty().reparentHere(duplicateMat);
});
}
@@ -899,8 +900,10 @@ void MaterialEditorView::customNotification(const AbstractView *view, const QStr
Q_UNUSED(view)
if (identifier == "selected_material_changed") {
- m_selectedMaterial = nodeList.first();
- QTimer::singleShot(0, this, &MaterialEditorView::resetView);
+ if (!m_hasMaterialRoot) {
+ m_selectedMaterial = nodeList.first();
+ QTimer::singleShot(0, this, &MaterialEditorView::resetView);
+ }
} else if (identifier == "apply_to_selected_triggered") {
applyMaterialToSelectedModels(nodeList.first(), data.first().toBool());
} else if (identifier == "rename_material") {