forked from qt-creator/qt-creator
QmlDesigner: Move component specific code out of the model
The model is an abstraction for communication between components and should not used as place for component specific code. Otherwise it will grow quite dramatically. Add Utils3D in component core which is shared between all components is actually the place to share code between components. Change-Id: Ic9d0be72e4480fc33ac6300a10871db4983b4a73 Reviewed-by: Qt CI Patch Build Bot <ci_patchbuild_bot@qt.io> Reviewed-by: Tim Jenssen <tim.jenssen@qt.io> Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
This commit is contained in:
@@ -626,6 +626,7 @@ extend_qtc_plugin(QmlDesigner
|
|||||||
anchoraction.cpp anchoraction.h
|
anchoraction.cpp anchoraction.h
|
||||||
svgpasteaction.cpp svgpasteaction.h
|
svgpasteaction.cpp svgpasteaction.h
|
||||||
viewmanager.cpp viewmanager.h
|
viewmanager.cpp viewmanager.h
|
||||||
|
utils3d.cpp utils3d.h
|
||||||
)
|
)
|
||||||
|
|
||||||
extend_qtc_plugin(QmlDesigner
|
extend_qtc_plugin(QmlDesigner
|
||||||
|
@@ -9,11 +9,12 @@
|
|||||||
#include "assetslibraryview.h"
|
#include "assetslibraryview.h"
|
||||||
#include "designeractionmanager.h"
|
#include "designeractionmanager.h"
|
||||||
#include "import.h"
|
#include "import.h"
|
||||||
#include "nodemetainfo.h"
|
|
||||||
#include "modelnodeoperations.h"
|
#include "modelnodeoperations.h"
|
||||||
|
#include "nodemetainfo.h"
|
||||||
#include "qmldesignerconstants.h"
|
#include "qmldesignerconstants.h"
|
||||||
#include "qmldesignerplugin.h"
|
#include "qmldesignerplugin.h"
|
||||||
#include "theme.h"
|
#include "theme.h"
|
||||||
|
#include <utils3d.h>
|
||||||
|
|
||||||
#include <studioquickwidget.h>
|
#include <studioquickwidget.h>
|
||||||
|
|
||||||
@@ -229,16 +230,18 @@ int AssetsLibraryWidget::qtVersion() const
|
|||||||
void AssetsLibraryWidget::addTextures(const QStringList &filePaths)
|
void AssetsLibraryWidget::addTextures(const QStringList &filePaths)
|
||||||
{
|
{
|
||||||
m_assetsView->executeInTransaction(__FUNCTION__, [&] {
|
m_assetsView->executeInTransaction(__FUNCTION__, [&] {
|
||||||
m_createTextures.execute(filePaths, AddTextureMode::Texture,
|
m_createTextures.execute(filePaths,
|
||||||
m_assetsView->model()->active3DSceneId());
|
AddTextureMode::Texture,
|
||||||
|
Utils3D::active3DSceneId(m_assetsView->model()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetsLibraryWidget::addLightProbe(const QString &filePath)
|
void AssetsLibraryWidget::addLightProbe(const QString &filePath)
|
||||||
{
|
{
|
||||||
m_assetsView->executeInTransaction(__FUNCTION__, [&] {
|
m_assetsView->executeInTransaction(__FUNCTION__, [&] {
|
||||||
m_createTextures.execute({filePath}, AddTextureMode::LightProbe,
|
m_createTextures.execute({filePath},
|
||||||
m_assetsView->model()->active3DSceneId());
|
AddTextureMode::LightProbe,
|
||||||
|
Utils3D::active3DSceneId(m_assetsView->model()));
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -247,7 +250,8 @@ void AssetsLibraryWidget::updateContextMenuActionsEnableState()
|
|||||||
setHasMaterialLibrary(m_assetsView->materialLibraryNode().isValid()
|
setHasMaterialLibrary(m_assetsView->materialLibraryNode().isValid()
|
||||||
&& m_assetsView->model()->hasImport("QtQuick3D"));
|
&& m_assetsView->model()->hasImport("QtQuick3D"));
|
||||||
|
|
||||||
ModelNode activeSceneEnv = m_createTextures.resolveSceneEnv(m_assetsView->model()->active3DSceneId());
|
ModelNode activeSceneEnv = m_createTextures.resolveSceneEnv(
|
||||||
|
Utils3D::active3DSceneId(m_assetsView->model()));
|
||||||
setHasSceneEnv(activeSceneEnv.isValid());
|
setHasSceneEnv(activeSceneEnv.isValid());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
34
src/plugins/qmldesigner/components/componentcore/utils3d.cpp
Normal file
34
src/plugins/qmldesigner/components/componentcore/utils3d.cpp
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
#include "utils3d.h"
|
||||||
|
|
||||||
|
namespace QmlDesigner {
|
||||||
|
namespace Utils3D {
|
||||||
|
|
||||||
|
ModelNode active3DSceneNode(AbstractView *view)
|
||||||
|
{
|
||||||
|
if (!view)
|
||||||
|
return {};
|
||||||
|
|
||||||
|
auto activeSceneAux = view->rootModelNode().auxiliaryData(active3dSceneProperty);
|
||||||
|
if (activeSceneAux) {
|
||||||
|
int activeScene = activeSceneAux->toInt();
|
||||||
|
|
||||||
|
if (view->hasModelNodeForInternalId(activeScene))
|
||||||
|
return view->modelNodeForInternalId(activeScene);
|
||||||
|
}
|
||||||
|
|
||||||
|
return {};
|
||||||
|
}
|
||||||
|
|
||||||
|
qint32 active3DSceneId(Model *model)
|
||||||
|
{
|
||||||
|
auto sceneId = model->rootModelNode().auxiliaryData(active3dSceneProperty);
|
||||||
|
if (sceneId)
|
||||||
|
return sceneId->toInt();
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Utils3D
|
||||||
|
} // namespace QmlDesigner
|
18
src/plugins/qmldesigner/components/componentcore/utils3d.h
Normal file
18
src/plugins/qmldesigner/components/componentcore/utils3d.h
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
// Copyright (C) 2024 The Qt Company Ltd.
|
||||||
|
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||||
|
|
||||||
|
// please put here 3d related functions which have no clear place elsewhere
|
||||||
|
|
||||||
|
#include <abstractview.h>
|
||||||
|
|
||||||
|
namespace QmlDesigner {
|
||||||
|
namespace Utils3D {
|
||||||
|
|
||||||
|
inline constexpr AuxiliaryDataKeyView active3dSceneProperty{AuxiliaryDataType::Temporary,
|
||||||
|
"active3dScene"};
|
||||||
|
|
||||||
|
ModelNode active3DSceneNode(AbstractView *view);
|
||||||
|
qint32 active3DSceneId(Model *model);
|
||||||
|
|
||||||
|
} // namespace Utils3D
|
||||||
|
} // namespace QmlDesigner
|
@@ -16,6 +16,7 @@
|
|||||||
#include "qmldesignerconstants.h"
|
#include "qmldesignerconstants.h"
|
||||||
#include "qmlobjectnode.h"
|
#include "qmlobjectnode.h"
|
||||||
#include "variantproperty.h"
|
#include "variantproperty.h"
|
||||||
|
#include <utils3d.h>
|
||||||
|
|
||||||
#include <coreplugin/messagebox.h>
|
#include <coreplugin/messagebox.h>
|
||||||
#include <enumeration.h>
|
#include <enumeration.h>
|
||||||
@@ -143,7 +144,7 @@ WidgetInfo ContentLibraryView::widgetInfo()
|
|||||||
QTC_ASSERT(typeName.size(), return);
|
QTC_ASSERT(typeName.size(), return);
|
||||||
|
|
||||||
if (!m_bundleEffectTarget)
|
if (!m_bundleEffectTarget)
|
||||||
m_bundleEffectTarget = active3DSceneNode();
|
m_bundleEffectTarget = Utils3D::active3DSceneNode(this);
|
||||||
|
|
||||||
QTC_ASSERT(m_bundleEffectTarget, return);
|
QTC_ASSERT(m_bundleEffectTarget, return);
|
||||||
|
|
||||||
@@ -168,7 +169,7 @@ WidgetInfo ContentLibraryView::widgetInfo()
|
|||||||
QTC_ASSERT(metaInfo.isValid(), return);
|
QTC_ASSERT(metaInfo.isValid(), return);
|
||||||
|
|
||||||
if (!m_bundleEffectTarget)
|
if (!m_bundleEffectTarget)
|
||||||
m_bundleEffectTarget = active3DSceneNode();
|
m_bundleEffectTarget = Utils3D::active3DSceneNode(this);
|
||||||
|
|
||||||
QTC_ASSERT(m_bundleEffectTarget, return);
|
QTC_ASSERT(m_bundleEffectTarget, return);
|
||||||
|
|
||||||
@@ -226,7 +227,7 @@ void ContentLibraryView::modelAttached(Model *model)
|
|||||||
m_widget->setHasQuick3DImport(m_hasQuick3DImport);
|
m_widget->setHasQuick3DImport(m_hasQuick3DImport);
|
||||||
m_widget->setIsQt6Project(externalDependencies().isQt6Project());
|
m_widget->setIsQt6Project(externalDependencies().isQt6Project());
|
||||||
|
|
||||||
m_sceneId = model->active3DSceneId();
|
m_sceneId = Utils3D::active3DSceneId(model);
|
||||||
|
|
||||||
m_widget->setHasActive3DScene(m_sceneId != -1);
|
m_widget->setHasActive3DScene(m_sceneId != -1);
|
||||||
m_widget->clearSearchFilter();
|
m_widget->clearSearchFilter();
|
||||||
@@ -322,7 +323,7 @@ void ContentLibraryView::customNotification(const AbstractView *view,
|
|||||||
|
|
||||||
m_bundleEffectPos = data.size() == 1 ? data.first() : QVariant();
|
m_bundleEffectPos = data.size() == 1 ? data.first() : QVariant();
|
||||||
m_widget->effectsModel()->addInstance(m_draggedBundleEffect);
|
m_widget->effectsModel()->addInstance(m_draggedBundleEffect);
|
||||||
m_bundleEffectTarget = nodeList.first() ? nodeList.first() : active3DSceneNode();
|
m_bundleEffectTarget = nodeList.first() ? nodeList.first() : Utils3D::active3DSceneNode(this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -341,6 +342,14 @@ void ContentLibraryView::nodeAboutToBeRemoved(const ModelNode &removedNode)
|
|||||||
m_widget->setHasMaterialLibrary(false);
|
m_widget->setHasMaterialLibrary(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ContentLibraryView::auxiliaryDataChanged(const ModelNode &,
|
||||||
|
AuxiliaryDataKeyView type,
|
||||||
|
const QVariant &data)
|
||||||
|
{
|
||||||
|
if (type == Utils3D::active3dSceneProperty)
|
||||||
|
active3DSceneChanged(data.toInt());
|
||||||
|
}
|
||||||
|
|
||||||
#ifdef QDS_USE_PROJECTSTORAGE
|
#ifdef QDS_USE_PROJECTSTORAGE
|
||||||
void ContentLibraryView::applyBundleMaterialToDropTarget(const ModelNode &bundleMat,
|
void ContentLibraryView::applyBundleMaterialToDropTarget(const ModelNode &bundleMat,
|
||||||
const TypeName &typeName)
|
const TypeName &typeName)
|
||||||
|
@@ -33,7 +33,6 @@ public:
|
|||||||
void modelAttached(Model *model) override;
|
void modelAttached(Model *model) override;
|
||||||
void modelAboutToBeDetached(Model *model) override;
|
void modelAboutToBeDetached(Model *model) override;
|
||||||
void importsChanged(const Imports &addedImports, const Imports &removedImports) override;
|
void importsChanged(const Imports &addedImports, const Imports &removedImports) override;
|
||||||
void active3DSceneChanged(qint32 sceneId) override;
|
|
||||||
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
|
void selectedNodesChanged(const QList<ModelNode> &selectedNodeList,
|
||||||
const QList<ModelNode> &lastSelectedNodeList) override;
|
const QList<ModelNode> &lastSelectedNodeList) override;
|
||||||
void customNotification(const AbstractView *view, const QString &identifier,
|
void customNotification(const AbstractView *view, const QString &identifier,
|
||||||
@@ -42,8 +41,12 @@ public:
|
|||||||
const NodeAbstractProperty &oldPropertyParent,
|
const NodeAbstractProperty &oldPropertyParent,
|
||||||
AbstractView::PropertyChangeFlags propertyChange) override;
|
AbstractView::PropertyChangeFlags propertyChange) override;
|
||||||
void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
|
void nodeAboutToBeRemoved(const ModelNode &removedNode) override;
|
||||||
|
void auxiliaryDataChanged(const ModelNode &node,
|
||||||
|
AuxiliaryDataKeyView type,
|
||||||
|
const QVariant &data) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void active3DSceneChanged(qint32 sceneId);
|
||||||
void updateBundleMaterialsImportedState();
|
void updateBundleMaterialsImportedState();
|
||||||
void updateBundleEffectsImportedState();
|
void updateBundleEffectsImportedState();
|
||||||
void updateBundlesQuick3DVersion();
|
void updateBundlesQuick3DVersion();
|
||||||
|
@@ -12,6 +12,7 @@
|
|||||||
#include "nodemetainfo.h"
|
#include "nodemetainfo.h"
|
||||||
#include "qmlobjectnode.h"
|
#include "qmlobjectnode.h"
|
||||||
#include "variantproperty.h"
|
#include "variantproperty.h"
|
||||||
|
#include <utils3d.h>
|
||||||
|
|
||||||
#include <coreplugin/messagebox.h>
|
#include <coreplugin/messagebox.h>
|
||||||
|
|
||||||
@@ -117,7 +118,7 @@ ModelNode CreateTexture::resolveSceneEnv(int sceneId)
|
|||||||
if (selectedNode.metaInfo().isQtQuick3DSceneEnvironment()) {
|
if (selectedNode.metaInfo().isQtQuick3DSceneEnvironment()) {
|
||||||
activeSceneEnv = selectedNode;
|
activeSceneEnv = selectedNode;
|
||||||
} else if (sceneId != -1) {
|
} else if (sceneId != -1) {
|
||||||
ModelNode activeScene = m_view->active3DSceneNode();
|
ModelNode activeScene = Utils3D::active3DSceneNode(m_view);
|
||||||
if (activeScene.isValid()) {
|
if (activeScene.isValid()) {
|
||||||
QmlObjectNode view3D;
|
QmlObjectNode view3D;
|
||||||
if (activeScene.metaInfo().isQtQuick3DView3D()) {
|
if (activeScene.metaInfo().isQtQuick3DView3D()) {
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
#include <nodemetainfo.h>
|
#include <nodemetainfo.h>
|
||||||
#include <plaintexteditmodifier.h>
|
#include <plaintexteditmodifier.h>
|
||||||
#include <rewriterview.h>
|
#include <rewriterview.h>
|
||||||
|
#include <utils3d.h>
|
||||||
#include <variantproperty.h>
|
#include <variantproperty.h>
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
@@ -84,7 +85,7 @@ ModelNode BakeLights::resolveView3dNode(AbstractView *view)
|
|||||||
return {};
|
return {};
|
||||||
|
|
||||||
ModelNode activeView3D;
|
ModelNode activeView3D;
|
||||||
ModelNode activeScene = view->active3DSceneNode();
|
ModelNode activeScene = Utils3D::active3DSceneNode(view);
|
||||||
|
|
||||||
if (activeScene.isValid()) {
|
if (activeScene.isValid()) {
|
||||||
if (activeScene.metaInfo().isQtQuick3DView3D()) {
|
if (activeScene.metaInfo().isQtQuick3DView3D()) {
|
||||||
|
@@ -23,7 +23,9 @@
|
|||||||
#include "seekerslider.h"
|
#include "seekerslider.h"
|
||||||
#include "snapconfiguration.h"
|
#include "snapconfiguration.h"
|
||||||
|
|
||||||
|
#include <auxiliarydataproperties.h>
|
||||||
#include <model/modelutils.h>
|
#include <model/modelutils.h>
|
||||||
|
#include <utils3d.h>
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
#include <coreplugin/messagebox.h>
|
#include <coreplugin/messagebox.h>
|
||||||
@@ -143,7 +145,7 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
|||||||
if (sceneState.contains(sceneKey)) {
|
if (sceneState.contains(sceneKey)) {
|
||||||
qint32 newActiveScene = sceneState[sceneKey].value<qint32>();
|
qint32 newActiveScene = sceneState[sceneKey].value<qint32>();
|
||||||
edit3DWidget()->canvas()->updateActiveScene(newActiveScene);
|
edit3DWidget()->canvas()->updateActiveScene(newActiveScene);
|
||||||
model()->setActive3DSceneId(newActiveScene);
|
setActive3DSceneId(newActiveScene);
|
||||||
updateAlignActionStates();
|
updateAlignActionStates();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -238,7 +240,7 @@ void Edit3DView::updateActiveScene3D(const QVariantMap &sceneState)
|
|||||||
bool desiredSyncValue = false;
|
bool desiredSyncValue = false;
|
||||||
if (sceneState.contains(syncEnvBgKey))
|
if (sceneState.contains(syncEnvBgKey))
|
||||||
desiredSyncValue = sceneState[syncEnvBgKey].toBool();
|
desiredSyncValue = sceneState[syncEnvBgKey].toBool();
|
||||||
ModelNode checkNode = active3DSceneNode();
|
ModelNode checkNode = Utils3D::active3DSceneNode(this);
|
||||||
const bool activeSceneValid = checkNode.isValid();
|
const bool activeSceneValid = checkNode.isValid();
|
||||||
|
|
||||||
while (checkNode.isValid()) {
|
while (checkNode.isValid()) {
|
||||||
@@ -385,7 +387,7 @@ void Edit3DView::updateAlignActionStates()
|
|||||||
{
|
{
|
||||||
bool enabled = false;
|
bool enabled = false;
|
||||||
|
|
||||||
ModelNode activeScene = active3DSceneNode();
|
ModelNode activeScene = Utils3D::active3DSceneNode(this);
|
||||||
if (activeScene.isValid()) {
|
if (activeScene.isValid()) {
|
||||||
const QList<ModelNode> nodes = activeScene.allSubModelNodes();
|
const QList<ModelNode> nodes = activeScene.allSubModelNodes();
|
||||||
enabled = ::Utils::anyOf(nodes, [](const ModelNode &node) {
|
enabled = ::Utils::anyOf(nodes, [](const ModelNode &node) {
|
||||||
@@ -397,6 +399,11 @@ void Edit3DView::updateAlignActionStates()
|
|||||||
m_alignViewAction->action()->setEnabled(enabled);
|
m_alignViewAction->action()->setEnabled(enabled);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Edit3DView::setActive3DSceneId(qint32 sceneId)
|
||||||
|
{
|
||||||
|
rootModelNode().setAuxiliaryData(Utils3D::active3dSceneProperty, sceneId);
|
||||||
|
}
|
||||||
|
|
||||||
void Edit3DView::modelAboutToBeDetached(Model *model)
|
void Edit3DView::modelAboutToBeDetached(Model *model)
|
||||||
{
|
{
|
||||||
m_isBakingLightsSupported = false;
|
m_isBakingLightsSupported = false;
|
||||||
|
@@ -111,6 +111,7 @@ private:
|
|||||||
void handleEntriesChanged();
|
void handleEntriesChanged();
|
||||||
void showMaterialPropertiesView();
|
void showMaterialPropertiesView();
|
||||||
void updateAlignActionStates();
|
void updateAlignActionStates();
|
||||||
|
void setActive3DSceneId(qint32 sceneId);
|
||||||
|
|
||||||
void createSelectBackgroundColorAction(QAction *syncEnvBackgroundAction);
|
void createSelectBackgroundColorAction(QAction *syncEnvBackgroundAction);
|
||||||
void createGridColorSelectionAction();
|
void createGridColorSelectionAction();
|
||||||
|
@@ -19,6 +19,7 @@
|
|||||||
#include "qmleditormenu.h"
|
#include "qmleditormenu.h"
|
||||||
#include "qmlvisualnode.h"
|
#include "qmlvisualnode.h"
|
||||||
#include "viewmanager.h"
|
#include "viewmanager.h"
|
||||||
|
#include <utils3d.h>
|
||||||
|
|
||||||
#include <auxiliarydataproperties.h>
|
#include <auxiliarydataproperties.h>
|
||||||
#include <designeractionmanager.h>
|
#include <designeractionmanager.h>
|
||||||
@@ -479,10 +480,7 @@ void Edit3DWidget::onCreateAction(QAction *action)
|
|||||||
if (!m_view->model()->hasImport(import, true, true))
|
if (!m_view->model()->hasImport(import, true, true))
|
||||||
m_view->model()->changeImports({import}, {});
|
m_view->model()->changeImports({import}, {});
|
||||||
|
|
||||||
int activeScene = -1;
|
int activeScene = Utils3D::active3DSceneId(m_view->model());
|
||||||
auto data = m_view->rootModelNode().auxiliaryData(active3dSceneProperty);
|
|
||||||
if (data)
|
|
||||||
activeScene = data->toInt();
|
|
||||||
auto modelNode = QmlVisualNode::createQml3DNode(m_view, entry,
|
auto modelNode = QmlVisualNode::createQml3DNode(m_view, entry,
|
||||||
activeScene, m_contextMenuPos3d).modelNode();
|
activeScene, m_contextMenuPos3d).modelNode();
|
||||||
QTC_ASSERT(modelNode.isValid(), return);
|
QTC_ASSERT(modelNode.isValid(), return);
|
||||||
@@ -688,7 +686,7 @@ void Edit3DWidget::dragEnterEvent(QDragEnterEvent *dragEnterEvent)
|
|||||||
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_BUNDLE_MATERIAL)
|
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_BUNDLE_MATERIAL)
|
||||||
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_BUNDLE_EFFECT)
|
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_BUNDLE_EFFECT)
|
||||||
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_TEXTURE)) {
|
|| dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_TEXTURE)) {
|
||||||
if (m_view->active3DSceneNode().isValid())
|
if (Utils3D::active3DSceneNode(m_view).isValid())
|
||||||
dragEnterEvent->acceptProposedAction();
|
dragEnterEvent->acceptProposedAction();
|
||||||
} else if (dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO)) {
|
} else if (dragEnterEvent->mimeData()->hasFormat(Constants::MIME_TYPE_ITEM_LIBRARY_INFO)) {
|
||||||
QByteArray data = dragEnterEvent->mimeData()->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO);
|
QByteArray data = dragEnterEvent->mimeData()->data(Constants::MIME_TYPE_ITEM_LIBRARY_INFO);
|
||||||
|
@@ -15,6 +15,7 @@
|
|||||||
#include <nodeinstanceview.h>
|
#include <nodeinstanceview.h>
|
||||||
#include <nodelistproperty.h>
|
#include <nodelistproperty.h>
|
||||||
#include <rewritingexception.h>
|
#include <rewritingexception.h>
|
||||||
|
#include <utils3d.h>
|
||||||
#include <variantproperty.h>
|
#include <variantproperty.h>
|
||||||
#include <viewmanager.h>
|
#include <viewmanager.h>
|
||||||
#include <qmldesignerplugin.h>
|
#include <qmldesignerplugin.h>
|
||||||
@@ -232,13 +233,12 @@ void DesignDocument::moveNodesToPosition(const QList<ModelNode> &nodes, const st
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (all3DNodes) {
|
if (all3DNodes) {
|
||||||
auto data = rootModelNode().auxiliaryData(active3dSceneProperty);
|
int activeSceneId = Utils3D::active3DSceneId(m_documentModel.get());
|
||||||
if (data) {
|
|
||||||
if (int activeSceneId = data->toInt(); activeSceneId != -1) {
|
if (activeSceneId != -1) {
|
||||||
NodeListProperty sceneNodeProperty = QmlVisualNode::findSceneNodeProperty(
|
NodeListProperty sceneNodeProperty = QmlVisualNode::findSceneNodeProperty(
|
||||||
rootModelNode().view(), activeSceneId);
|
rootModelNode().view(), activeSceneId);
|
||||||
targetNode = sceneNodeProperty.parentModelNode();
|
targetNode = sceneNodeProperty.parentModelNode();
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -16,6 +16,7 @@
|
|||||||
#include "qmldesignerconstants.h"
|
#include "qmldesignerconstants.h"
|
||||||
#include "qmlobjectnode.h"
|
#include "qmlobjectnode.h"
|
||||||
#include "variantproperty.h"
|
#include "variantproperty.h"
|
||||||
|
#include <utils3d.h>
|
||||||
|
|
||||||
#include <coreplugin/icore.h>
|
#include <coreplugin/icore.h>
|
||||||
|
|
||||||
@@ -240,7 +241,7 @@ void MaterialBrowserView::modelAttached(Model *model)
|
|||||||
loadPropertyGroups(); // Needs the delay because it uses metaInfo
|
loadPropertyGroups(); // Needs the delay because it uses metaInfo
|
||||||
});
|
});
|
||||||
|
|
||||||
m_sceneId = model->active3DSceneId();
|
m_sceneId = Utils3D::active3DSceneId(model);
|
||||||
}
|
}
|
||||||
|
|
||||||
void MaterialBrowserView::refreshModel(bool updateImages)
|
void MaterialBrowserView::refreshModel(bool updateImages)
|
||||||
@@ -585,6 +586,14 @@ void MaterialBrowserView::instancePropertyChanged(const QList<QPair<ModelNode, P
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void MaterialBrowserView::auxiliaryDataChanged(const ModelNode &,
|
||||||
|
AuxiliaryDataKeyView type,
|
||||||
|
const QVariant &data)
|
||||||
|
{
|
||||||
|
if (type == Utils3D::active3dSceneProperty)
|
||||||
|
active3DSceneChanged(data.toInt());
|
||||||
|
}
|
||||||
|
|
||||||
void MaterialBrowserView::applyTextureToModel3D(const QmlObjectNode &model3D, const ModelNode &texture)
|
void MaterialBrowserView::applyTextureToModel3D(const QmlObjectNode &model3D, const ModelNode &texture)
|
||||||
{
|
{
|
||||||
if (!texture.isValid() && m_appliedTexturePath.isEmpty())
|
if (!texture.isValid() && m_appliedTexturePath.isEmpty())
|
||||||
|
@@ -49,7 +49,9 @@ public:
|
|||||||
const QList<ModelNode> &nodeList, const QList<QVariant> &data) override;
|
const QList<ModelNode> &nodeList, const QList<QVariant> &data) override;
|
||||||
void instancesCompleted(const QVector<ModelNode> &completedNodeList) override;
|
void instancesCompleted(const QVector<ModelNode> &completedNodeList) override;
|
||||||
void instancePropertyChanged(const QList<QPair<ModelNode, PropertyName> > &propertyList) override;
|
void instancePropertyChanged(const QList<QPair<ModelNode, PropertyName> > &propertyList) override;
|
||||||
void active3DSceneChanged(qint32 sceneId) override;
|
void auxiliaryDataChanged(const ModelNode &node,
|
||||||
|
AuxiliaryDataKeyView type,
|
||||||
|
const QVariant &data) override;
|
||||||
void currentStateChanged(const ModelNode &node) override;
|
void currentStateChanged(const ModelNode &node) override;
|
||||||
|
|
||||||
void applyTextureToModel3D(const QmlObjectNode &model3D, const ModelNode &texture = {});
|
void applyTextureToModel3D(const QmlObjectNode &model3D, const ModelNode &texture = {});
|
||||||
@@ -65,6 +67,7 @@ protected:
|
|||||||
bool eventFilter(QObject *obj, QEvent *event) override;
|
bool eventFilter(QObject *obj, QEvent *event) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
void active3DSceneChanged(qint32 sceneId);
|
||||||
void refreshModel(bool updateImages);
|
void refreshModel(bool updateImages);
|
||||||
void updateMaterialsPreview();
|
void updateMaterialsPreview();
|
||||||
bool isMaterial(const ModelNode &node) const;
|
bool isMaterial(const ModelNode &node) const;
|
||||||
|
@@ -223,8 +223,6 @@ public:
|
|||||||
|
|
||||||
virtual void view3DAction(View3DActionType type, const QVariant &value);
|
virtual void view3DAction(View3DActionType type, const QVariant &value);
|
||||||
|
|
||||||
virtual void active3DSceneChanged(qint32 sceneId);
|
|
||||||
|
|
||||||
virtual void dragStarted(QMimeData *mimeData);
|
virtual void dragStarted(QMimeData *mimeData);
|
||||||
virtual void dragEnded();
|
virtual void dragEnded();
|
||||||
|
|
||||||
@@ -233,7 +231,6 @@ public:
|
|||||||
void ensureMaterialLibraryNode();
|
void ensureMaterialLibraryNode();
|
||||||
ModelNode materialLibraryNode();
|
ModelNode materialLibraryNode();
|
||||||
bool isPartOfMaterialLibrary(const ModelNode &node);
|
bool isPartOfMaterialLibrary(const ModelNode &node);
|
||||||
ModelNode active3DSceneNode();
|
|
||||||
ModelNode getTextureDefaultInstance(const QString &source);
|
ModelNode getTextureDefaultInstance(const QString &source);
|
||||||
|
|
||||||
const NodeInstanceView *nodeInstanceView() const;
|
const NodeInstanceView *nodeInstanceView() const;
|
||||||
|
@@ -95,8 +95,6 @@ inline constexpr AuxiliaryDataKeyDefaultValue insightCategoriesProperty{Auxiliar
|
|||||||
"insightCategories",
|
"insightCategories",
|
||||||
{}};
|
{}};
|
||||||
inline constexpr AuxiliaryDataKeyView uuidProperty{AuxiliaryDataType::Document, "uuid"};
|
inline constexpr AuxiliaryDataKeyView uuidProperty{AuxiliaryDataType::Document, "uuid"};
|
||||||
inline constexpr AuxiliaryDataKeyView active3dSceneProperty{AuxiliaryDataType::Temporary,
|
|
||||||
"active3dScene"};
|
|
||||||
inline constexpr AuxiliaryDataKeyView tmpProperty{AuxiliaryDataType::Temporary, "tmp"};
|
inline constexpr AuxiliaryDataKeyView tmpProperty{AuxiliaryDataType::Temporary, "tmp"};
|
||||||
inline constexpr AuxiliaryDataKeyView recordProperty{AuxiliaryDataType::Temporary, "Record"};
|
inline constexpr AuxiliaryDataKeyView recordProperty{AuxiliaryDataType::Temporary, "Record"};
|
||||||
inline constexpr AuxiliaryDataKeyView transitionDurationProperty{AuxiliaryDataType::Document,
|
inline constexpr AuxiliaryDataKeyView transitionDurationProperty{AuxiliaryDataType::Document,
|
||||||
|
@@ -239,9 +239,6 @@ public:
|
|||||||
std::optional<std::function<bool(const QString &)>> isDuplicate = {}) const;
|
std::optional<std::function<bool(const QString &)>> isDuplicate = {}) const;
|
||||||
QString generateIdFromName(const QString &name, const QString &fallbackId = "element") const;
|
QString generateIdFromName(const QString &name, const QString &fallbackId = "element") const;
|
||||||
|
|
||||||
void setActive3DSceneId(qint32 sceneId);
|
|
||||||
qint32 active3DSceneId() const;
|
|
||||||
|
|
||||||
void startDrag(QMimeData *mimeData, const QPixmap &icon);
|
void startDrag(QMimeData *mimeData, const QPixmap &icon);
|
||||||
void endDrag();
|
void endDrag();
|
||||||
|
|
||||||
|
@@ -373,8 +373,6 @@ void AbstractView::modelNodePreviewPixmapChanged(const ModelNode &/*node*/, cons
|
|||||||
|
|
||||||
void AbstractView::view3DAction(View3DActionType, const QVariant &) {}
|
void AbstractView::view3DAction(View3DActionType, const QVariant &) {}
|
||||||
|
|
||||||
void AbstractView::active3DSceneChanged(qint32 /*sceneId*/) {}
|
|
||||||
|
|
||||||
void AbstractView::dragStarted(QMimeData * /*mimeData*/) {}
|
void AbstractView::dragStarted(QMimeData * /*mimeData*/) {}
|
||||||
void AbstractView::dragEnded() {}
|
void AbstractView::dragEnded() {}
|
||||||
|
|
||||||
@@ -837,19 +835,6 @@ bool AbstractView::isPartOfMaterialLibrary(const ModelNode &node)
|
|||||||
|| (node.hasParentProperty() && node.parentProperty().parentModelNode() == matLib));
|
|| (node.hasParentProperty() && node.parentProperty().parentModelNode() == matLib));
|
||||||
}
|
}
|
||||||
|
|
||||||
ModelNode AbstractView::active3DSceneNode()
|
|
||||||
{
|
|
||||||
auto activeSceneAux = rootModelNode().auxiliaryData(active3dSceneProperty);
|
|
||||||
if (activeSceneAux) {
|
|
||||||
int activeScene = activeSceneAux->toInt();
|
|
||||||
|
|
||||||
if (hasModelNodeForInternalId(activeScene))
|
|
||||||
return modelNodeForInternalId(activeScene);
|
|
||||||
}
|
|
||||||
|
|
||||||
return {};
|
|
||||||
}
|
|
||||||
|
|
||||||
ModelNode AbstractView::getTextureDefaultInstance(const QString &source)
|
ModelNode AbstractView::getTextureDefaultInstance(const QString &source)
|
||||||
{
|
{
|
||||||
ModelNode matLib = materialLibraryNode();
|
ModelNode matLib = materialLibraryNode();
|
||||||
|
@@ -733,11 +733,6 @@ void ModelPrivate::notifyView3DAction(View3DActionType type, const QVariant &val
|
|||||||
notifyNormalViewsLast([&](AbstractView *view) { view->view3DAction(type, value); });
|
notifyNormalViewsLast([&](AbstractView *view) { view->view3DAction(type, value); });
|
||||||
}
|
}
|
||||||
|
|
||||||
void ModelPrivate::notifyActive3DSceneIdChanged(qint32 sceneId)
|
|
||||||
{
|
|
||||||
notifyInstanceChanges([&](AbstractView *view) { view->active3DSceneChanged(sceneId); });
|
|
||||||
}
|
|
||||||
|
|
||||||
void ModelPrivate::notifyDragStarted(QMimeData *mimeData)
|
void ModelPrivate::notifyDragStarted(QMimeData *mimeData)
|
||||||
{
|
{
|
||||||
notifyInstanceChanges([&](AbstractView *view) { view->dragStarted(mimeData); });
|
notifyInstanceChanges([&](AbstractView *view) { view->dragStarted(mimeData); });
|
||||||
@@ -1903,24 +1898,6 @@ QString Model::generateIdFromName(const QString &name, const QString &fallbackId
|
|||||||
return newId;
|
return newId;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Model::setActive3DSceneId(qint32 sceneId)
|
|
||||||
{
|
|
||||||
auto activeSceneAux = d->rootNode()->auxiliaryData(active3dSceneProperty);
|
|
||||||
if (activeSceneAux && activeSceneAux->toInt() == sceneId)
|
|
||||||
return;
|
|
||||||
|
|
||||||
d->rootNode()->setAuxiliaryData(active3dSceneProperty, sceneId);
|
|
||||||
d->notifyActive3DSceneIdChanged(sceneId);
|
|
||||||
}
|
|
||||||
|
|
||||||
qint32 Model::active3DSceneId() const
|
|
||||||
{
|
|
||||||
auto sceneId = d->rootNode()->auxiliaryData(active3dSceneProperty);
|
|
||||||
if (sceneId)
|
|
||||||
return sceneId->toInt();
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void Model::startDrag(QMimeData *mimeData, const QPixmap &icon)
|
void Model::startDrag(QMimeData *mimeData, const QPixmap &icon)
|
||||||
{
|
{
|
||||||
d->notifyDragStarted(mimeData);
|
d->notifyDragStarted(mimeData);
|
||||||
|
Reference in New Issue
Block a user