aboutsummaryrefslogtreecommitdiffstats
path: root/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp')
-rw-r--r--src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp69
1 files changed, 39 insertions, 30 deletions
diff --git a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
index ae1d87276b..347512a837 100644
--- a/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
+++ b/src/plugins/qmldesigner/components/contentlibrary/contentlibraryview.cpp
@@ -3,7 +3,6 @@
#include "contentlibraryview.h"
-#include "bindingproperty.h"
#include "contentlibrarybundleimporter.h"
#include "contentlibrarywidget.h"
#include "contentlibrarymaterial.h"
@@ -88,11 +87,14 @@ WidgetInfo ContentLibraryView::widgetInfo()
}
// assign the texture as scene environment's light probe
- if (mode == ContentLibraryWidget::AddTextureMode::LightProbe && m_activeSceneEnv.isValid()) {
- BindingProperty lightProbeProp = m_activeSceneEnv.bindingProperty("lightProbe");
- lightProbeProp.setExpression(texNode.id());
- VariantProperty bgModeProp = m_activeSceneEnv.variantProperty("backgroundMode");
- bgModeProp.setValue(QVariant::fromValue(Enumeration("SceneEnvironment", "SkyBox")));
+ if (mode == ContentLibraryWidget::AddTextureMode::LightProbe && m_sceneId != -1) {
+ QmlObjectNode sceneEnv = resolveSceneEnv();
+ if (sceneEnv.isValid()) {
+ sceneEnv.setBindingProperty("lightProbe", texNode.id());
+ sceneEnv.setVariantProperty("backgroundMode",
+ QVariant::fromValue(Enumeration("SceneEnvironment",
+ "SkyBox")));
+ }
}
QTimer::singleShot(0, this, [this, texNode]() {
if (model() && texNode.isValid())
@@ -101,6 +103,9 @@ WidgetInfo ContentLibraryView::widgetInfo()
});
});
+ connect(m_widget, &ContentLibraryWidget::updateSceneEnvStateRequested,
+ this, &ContentLibraryView::resolveSceneEnv);
+
ContentLibraryMaterialsModel *materialsModel = m_widget->materialsModel().data();
connect(materialsModel, &ContentLibraryMaterialsModel::applyToSelectedTriggered, this,
@@ -187,30 +192,7 @@ void ContentLibraryView::importsChanged(const QList<Import> &addedImports, const
void ContentLibraryView::active3DSceneChanged(qint32 sceneId)
{
- m_activeSceneEnv = {};
- bool sceneEnvExists = false;
- if (sceneId != -1) {
- ModelNode activeScene = active3DSceneNode();
- if (activeScene.isValid()) {
- ModelNode view3D;
- if (activeScene.metaInfo().isQtQuick3DView3D()) {
- view3D = activeScene;
- } else {
- ModelNode sceneParent = activeScene.parentProperty().parentModelNode();
- if (sceneParent.metaInfo().isQtQuick3DView3D())
- view3D = sceneParent;
- }
-
- if (view3D.isValid()) {
- m_activeSceneEnv = modelNodeForId(view3D.bindingProperty("environment").expression());
- if (m_activeSceneEnv.isValid())
- sceneEnvExists = true;
- }
- }
- }
-
- m_widget->texturesModel()->setHasSceneEnv(sceneEnvExists);
- m_widget->environmentsModel()->setHasSceneEnv(sceneEnvExists);
+ m_sceneId = sceneId;
}
void ContentLibraryView::selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
@@ -361,6 +343,33 @@ ModelNode ContentLibraryView::createMaterial(const NodeMetaInfo &metaInfo)
return newMatNode;
}
+ModelNode ContentLibraryView::resolveSceneEnv()
+{
+ ModelNode activeSceneEnv;
+
+ if (m_sceneId != -1) {
+ ModelNode activeScene = active3DSceneNode();
+ if (activeScene.isValid()) {
+ QmlObjectNode view3D;
+ if (activeScene.metaInfo().isQtQuick3DView3D()) {
+ view3D = activeScene;
+ } else {
+ ModelNode sceneParent = activeScene.parentProperty().parentModelNode();
+ if (sceneParent.metaInfo().isQtQuick3DView3D())
+ view3D = sceneParent;
+ }
+ if (view3D.isValid())
+ activeSceneEnv = modelNodeForId(view3D.expression("environment"));
+ }
+ }
+
+ const bool sceneEnvExists = activeSceneEnv.isValid();
+ m_widget->texturesModel()->setHasSceneEnv(sceneEnvExists);
+ m_widget->environmentsModel()->setHasSceneEnv(sceneEnvExists);
+
+ return activeSceneEnv;
+}
+
void ContentLibraryView::updateBundleMaterialsImportedState()
{
using namespace Utils;