QmlDesigner: Fix custom notifications to hidden views

Hidden views are detached, so custom notifications to those views don't
get handled, which in many cases leads to desired outcome not happening.

Fixing most cases by simply forcing the handling view visible before
emitting custom notification.

Fixes: QDS-13349
Change-Id: I65842ac429bcdb1caa4b1f60d4f4fdb4a48f8742
Reviewed-by: Mahmoud Badri <mahmoud.badri@qt.io>
Reviewed-by: Marco Bubke <marco.bubke@qt.io>
This commit is contained in:
Miikka Heikkinen
2024-08-13 17:54:54 +03:00
parent 0d16b9c901
commit 33245891b5
22 changed files with 143 additions and 75 deletions

View File

@@ -75,6 +75,13 @@ Item {
root.numColumns = numColumns
}
Connections {
target: ContentLibraryBackend.rootView
function onRequestTab(tabIndex) {
tabBar.currIndex = tabIndex
}
}
Column {
id: col
anchors.fill: parent

View File

@@ -9,6 +9,7 @@
#include <designeractionmanager.h>
#include <designerpaths.h>
#include <designmodewidget.h>
#include <hdrimage.h>
#include <import.h>
#include <modelnodeoperations.h>
@@ -662,6 +663,7 @@ void AssetsLibraryWidget::addResources(const QStringList &files, bool showDialog
void AssetsLibraryWidget::addAssetsToContentLibrary(const QStringList &assetPaths)
{
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
m_assetsView->emitCustomNotification("add_assets_to_content_lib", {}, {assetPaths});
}

View File

@@ -8,6 +8,7 @@
#include "designeractionmanagerview.h"
#include "designericons.h"
#include "designermcumanager.h"
#include "designmodewidget.h"
#include "formatoperation.h"
#include "groupitemaction.h"
#include "modelnodecontextmenu_helper.h"
@@ -730,6 +731,7 @@ public:
(propertyName + "OpenEditorId").toLatin1(),
QString(QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Edit the Connection")),
[=](const SelectionContext &) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ConnectionView");
signalHandler.view()
->emitCustomNotification(EditConnectionNotification,
{signalHandler.parentModelNode()},
@@ -811,6 +813,7 @@ public:
(signalStr + "OpenEditorId").toLatin1(),
QString(QT_TRANSLATE_NOOP("QmlDesignerContextMenu", "Add new Connection")),
[=](const SelectionContext &) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ConnectionView");
currentNode.view()->emitCustomNotification(AddConnectionNotification,
{currentNode},
{signalStr});

View File

@@ -801,17 +801,20 @@ void moveToComponent(const SelectionContext &selectionContext)
void add3DAssetToContentLibrary(const SelectionContext &selectionContext)
{
ModelNode node = selectionContext.currentSingleSelectedNode();
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
selectionContext.view()->emitCustomNotification("add_3d_to_content_lib", {node});
}
void importComponent(const SelectionContext &selectionContext)
{
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
selectionContext.view()->emitCustomNotification("import_bundle_to_project");
}
void exportComponent(const SelectionContext &selectionContext)
{
ModelNode node = selectionContext.currentSingleSelectedNode();
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
selectionContext.view()->emitCustomNotification("export_item_as_bundle", {node});
}
@@ -857,7 +860,8 @@ void editMaterial(const SelectionContext &selectionContext)
}
if (material.isValid()) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor");
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor", true);
// to MaterialBrowser...
view->emitCustomNotification("select_material", {material});
@@ -1676,6 +1680,7 @@ void openSignalDialog(const SelectionContext &selectionContext)
void updateImported3DAsset(const SelectionContext &selectionContext)
{
if (selectionContext.view()) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("Components");
selectionContext.view()->emitCustomNotification(
"UpdateImported3DAsset", {selectionContext.currentSingleSelectedNode()});
}
@@ -2016,6 +2021,7 @@ bool dropAsImage3dTexture(const ModelNode &targetNode,
QTimer::singleShot(0, view, [targetNode, imagePath, view]() {
if (view && targetNode.isValid()) {
// To MaterialBrowserView. Done async to avoid custom notification in transaction
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
view->emitCustomNotification("apply_asset_to_model3D",
{targetNode},
{DocumentManager::currentFilePath()
@@ -2069,6 +2075,7 @@ void handleTextureDrop(const QMimeData *mimeData, const ModelNode &targetModelNo
QTC_ASSERT(texNode.isValid(), return );
if (targetNode.modelNode().metaInfo().isQtQuick3DModel()) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
view->emitCustomNotification("apply_texture_to_model3D", {targetNode, texNode});
} else {
auto *dialog = ChooseFromPropertyListDialog::createIfNeeded(targetNode,

View File

@@ -119,10 +119,9 @@ ViewManager::ViewManager(AsynchronousImageCache &imageCache,
: d(std::make_unique<ViewManagerData>(imageCache, externalDependencies))
{
d->formEditorView.setGotoErrorCallback([this](int line, int column) {
if (Internal::DesignModeWidget *w = QmlDesignerPlugin::instance()->mainWidget())
w->showDockWidget("TextEditor");
d->textEditorView.gotoCursorPosition(line, column);
if (Internal::DesignModeWidget *designModeWidget = QmlDesignerPlugin::instance()
->mainWidget())
designModeWidget->showDockWidget("TextEditor");
});
registerViewActions();

View File

@@ -386,13 +386,16 @@ void ContentLibraryView::customNotification(const AbstractView *view,
QTC_ASSERT(nodeList.size() == 1 && data.size() == 1, return);
addLibItem(nodeList.first(), data.first().value<QPixmap>());
m_widget->showTab(ContentLibraryWidget::TabIndex::UserAssetsTab);
} else if (identifier == "add_assets_to_content_lib") {
addLibAssets(data.first().toStringList());
m_widget->showTab(ContentLibraryWidget::TabIndex::UserAssetsTab);
} else if (identifier == "add_3d_to_content_lib") {
if (nodeList.first().isComponent())
addLib3DComponent(nodeList.first());
else
addLibItem(nodeList.first());
m_widget->showTab(ContentLibraryWidget::TabIndex::UserAssetsTab);
} else if (identifier == "export_item_as_bundle") {
// TODO: support exporting 2D items
if (nodeList.first().isComponent())

View File

@@ -221,6 +221,11 @@ ContentLibraryIconProvider *ContentLibraryWidget::iconProvider() const
return m_iconProvider.get();
}
void ContentLibraryWidget::showTab(TabIndex tabIndex)
{
emit requestTab(int(tabIndex));
}
void ContentLibraryWidget::updateImportedState(const QString &bundleId)
{
if (!m_importer)

View File

@@ -47,6 +47,16 @@ class ContentLibraryWidget : public QFrame
Q_PROPERTY(bool isDragging MEMBER m_isDragging NOTIFY isDraggingChanged)
public:
enum class TabIndex {
MaterialsTab,
TexturesTab,
EnvironmentsTab,
EffectsTab,
UserAssetsTab
};
Q_ENUM(TabIndex)
ContentLibraryWidget();
~ContentLibraryWidget();
@@ -97,6 +107,8 @@ public:
ContentLibraryBundleImporter *importer() const;
ContentLibraryIconProvider *iconProvider() const;
void showTab(TabIndex tabIndex);
signals:
void bundleItemDragStarted(QmlDesigner::ContentLibraryItem *item);
void bundleMaterialDragStarted(QmlDesigner::ContentLibraryMaterial *bundleMat);
@@ -111,6 +123,7 @@ signals:
void importerRunningChanged();
void hasModelSelectionChanged();
void importBundle();
void requestTab(int tabIndex);
protected:
bool eventFilter(QObject *obj, QEvent *event) override;

View File

@@ -3,15 +3,17 @@
#include "createtexture.h"
#include "abstractview.h"
#include "asset.h"
#include "documentmanager.h"
#include "modelnode.h"
#include "modelnodeoperations.h"
#include "nodelistproperty.h"
#include "nodemetainfo.h"
#include "qmlobjectnode.h"
#include "variantproperty.h"
#include <abstractview.h>
#include <asset.h>
#include <designmodewidget.h>
#include <documentmanager.h>
#include <modelnode.h>
#include <modelnodeoperations.h>
#include <nodelistproperty.h>
#include <nodemetainfo.h>
#include <qmldesignerplugin.h>
#include <qmlobjectnode.h>
#include <variantproperty.h>
#include <utils3d.h>
#include <coreplugin/messagebox.h>
@@ -109,8 +111,10 @@ ModelNode CreateTexture::execute(const QString &filePath, AddTextureMode mode, i
assignTextureAsLightProbe(texture, sceneId);
QTimer::singleShot(0, m_view, [this, texture]() {
if (m_view->model())
if (m_view->model()) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
m_view->emitCustomNotification("select_texture", {texture}, {true});
}
});
return texture;

View File

@@ -180,6 +180,7 @@ QAction *Edit3DMaterialsAction::createMaterialAction(const ModelNode &material,
QAction *editMaterialAction = new QAction(tr("Edit"), menu);
connect(editMaterialAction, &QAction::triggered, menu, [material] {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor", true);
if (auto materialView = material.view())
materialView->emitCustomNotification("select_material", {material});

View File

@@ -6,29 +6,30 @@
#include "backgroundcolorselection.h"
#include "bakelights.h"
#include "cameraspeedconfiguration.h"
#include "designeractionmanager.h"
#include "designericons.h"
#include "designersettings.h"
#include "designmodecontext.h"
#include "edit3dcanvas.h"
#include "edit3dviewconfig.h"
#include "edit3dwidget.h"
#include "materialutils.h"
#include "metainfo.h"
#include "nodeabstractproperty.h"
#include "nodehints.h"
#include "nodeinstanceview.h"
#include "qmldesignerconstants.h"
#include "qmldesignerplugin.h"
#include "qmlitemnode.h"
#include "qmlvisualnode.h"
#include "seekerslider.h"
#include "snapconfiguration.h"
#include "variantproperty.h"
#include <auxiliarydataproperties.h>
#include <designeractionmanager.h>
#include <designericons.h>
#include <designersettings.h>
#include <designmodecontext.h>
#include <designmodewidget.h>
#include <materialutils.h>
#include <metainfo.h>
#include <modelutils.h>
#include <nodeabstractproperty.h>
#include <nodehints.h>
#include <nodeinstanceview.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmlitemnode.h>
#include <qmlvisualnode.h>
#include <seekerslider.h>
#include <utils3d.h>
#include <variantproperty.h>
#include <coreplugin/icore.h>
#include <coreplugin/messagebox.h>
@@ -435,9 +436,7 @@ void Edit3DView::customNotification([[maybe_unused]] const AbstractView *view,
[[maybe_unused]] const QList<ModelNode> &nodeList,
[[maybe_unused]] const QList<QVariant> &data)
{
if (identifier == "asset_import_update") {
resetPuppet();
} else if (identifier == "pick_3d_node_from_2d_scene" && data.size() == 1 && nodeList.size() == 1) {
if (identifier == "pick_3d_node_from_2d_scene" && data.size() == 1 && nodeList.size() == 1) {
// Pick via 2D view, data has pick coordinates in main scene coordinates
QTimer::singleShot(0, this, [=, self = QPointer{this}]() {
if (!self)
@@ -491,11 +490,14 @@ void Edit3DView::nodeAtPosReady(const ModelNode &modelNode, const QVector3D &pos
} else if (m_nodeAtPosReqType == NodeAtPosReqType::BundleEffectDrop) {
emitCustomNotification("drop_bundle_item", {modelNode}, {pos3d}); // To ContentLibraryView
} else if (m_nodeAtPosReqType == NodeAtPosReqType::TextureDrop) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
emitCustomNotification("apply_texture_to_model3D", {modelNode, m_droppedModelNode});
} else if (m_nodeAtPosReqType == NodeAtPosReqType::AssetDrop) {
bool isModel = modelNode.metaInfo().isQtQuick3DModel();
if (!m_droppedFile.isEmpty() && isModel)
if (!m_droppedFile.isEmpty() && isModel) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
emitCustomNotification("apply_asset_to_model3D", {modelNode}, {m_droppedFile}); // To MaterialBrowserView
}
} else if (m_nodeAtPosReqType == NodeAtPosReqType::MainScenePick) {
if (modelNode.isValid())
setSelectedModelNode(modelNode);

View File

@@ -14,6 +14,7 @@
#include <designdocument.h>
#include <designericons.h>
#include <designermcumanager.h>
#include <designmodewidget.h>
#include <externaldependenciesinterface.h>
#include <generatedcomponentutils.h>
#include <import.h>
@@ -363,18 +364,21 @@ void Edit3DWidget::createContextMenu()
m_addToContentLibAction = m_contextMenu->addAction(
contextIcon(DesignerIcons::CreateIcon), // TODO: placeholder icon
tr("Add to Content Library"), [&] {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
view()->emitCustomNotification("add_3d_to_content_lib", {m_contextMenuTarget}); // To ContentLibrary
});
m_importBundleAction = m_contextMenu->addAction(
contextIcon(DesignerIcons::CreateIcon), // TODO: placeholder icon
tr("Import Component"), [&] {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
view()->emitCustomNotification("import_bundle_to_project"); // To ContentLibrary
});
m_exportBundleAction = m_contextMenu->addAction(
contextIcon(DesignerIcons::CreateIcon), // TODO: placeholder icon
tr("Export Component"), [&] {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
view()->emitCustomNotification("export_item_as_bundle", {m_contextMenuTarget}); // To ContentLibrary
});

View File

@@ -747,6 +747,7 @@ void ItemLibraryAssetImporter::finalizeQuick3DImport()
} else if (counter >= 50) {
for (const ParseData &pd : std::as_const(m_parseData)) {
if (!pd.overwrittenImports.isEmpty()) {
model->rewriterView()->resetPuppet();
model->rewriterView()->emitCustomNotification("asset_import_update");
break;
}

View File

@@ -3,19 +3,22 @@
#include "materialbrowserview.h"
#include "bindingproperty.h"
#include "createtexture.h"
#include "designmodecontext.h"
#include "externaldependenciesinterface.h"
#include "materialbrowsermodel.h"
#include "materialbrowsertexturesmodel.h"
#include "materialbrowserwidget.h"
#include "nodeabstractproperty.h"
#include "nodeinstanceview.h"
#include "nodemetainfo.h"
#include "qmldesignerconstants.h"
#include "qmlobjectnode.h"
#include "variantproperty.h"
#include <bindingproperty.h>
#include <createtexture.h>
#include <designmodecontext.h>
#include <designmodewidget.h>
#include <externaldependenciesinterface.h>
#include <nodeabstractproperty.h>
#include <nodeinstanceview.h>
#include <nodemetainfo.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <qmlobjectnode.h>
#include <variantproperty.h>
#include <utils3d.h>
#include <coreplugin/icore.h>
@@ -75,20 +78,24 @@ WidgetInfo MaterialBrowserView::widgetInfo()
connect(matBrowserModel, &MaterialBrowserModel::applyToSelectedTriggered, this,
[&] (const ModelNode &material, bool add) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor");
emitCustomNotification("apply_to_selected_triggered", {material}, {add});
});
connect(matBrowserModel, &MaterialBrowserModel::renameMaterialTriggered, this,
[&] (const ModelNode &material, const QString &newName) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor");
emitCustomNotification("rename_material", {material}, {newName});
});
connect(matBrowserModel, &MaterialBrowserModel::addNewMaterialTriggered, this, [&] {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor");
emitCustomNotification("add_new_material");
});
connect(matBrowserModel, &MaterialBrowserModel::duplicateMaterialTriggered, this,
[&] (const ModelNode &material) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor");
emitCustomNotification("duplicate_material", {material});
});
@@ -170,6 +177,7 @@ WidgetInfo MaterialBrowserView::widgetInfo()
});
connect(texturesModel, &MaterialBrowserTexturesModel::duplicateTextureTriggered, this,
[&] (const ModelNode &texture) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("TextureEditor");
emitCustomNotification("duplicate_texture", {texture});
});
@@ -189,6 +197,7 @@ WidgetInfo MaterialBrowserView::widgetInfo()
});
connect(texturesModel, &MaterialBrowserTexturesModel::addNewTextureTriggered, this, [&] {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("TextureEditor");
emitCustomNotification("add_new_texture");
});
@@ -235,6 +244,7 @@ void MaterialBrowserView::modelAttached(Model *model)
{
AbstractView::modelAttached(model);
m_pendingTextureSelection = {};
m_widget->clearSearchFilter();
m_widget->materialBrowserModel()->setHasMaterialLibrary(false);
m_hasQuick3DImport = model->hasImport("QtQuick3D");
@@ -245,6 +255,10 @@ void MaterialBrowserView::modelAttached(Model *model)
QTimer::singleShot(1000, model, [this] {
refreshModel(true);
loadPropertyGroups(); // Needs the delay because it uses metaInfo
if (m_pendingTextureSelection.isValid())
emitCustomNotification("select_texture", {m_pendingTextureSelection}, {true});
m_pendingTextureSelection = {};
});
m_sceneId = Utils3D::active3DSceneId(model);
@@ -559,6 +573,8 @@ void MaterialBrowserView::customNotification(const AbstractView *view,
m_widget->materialBrowserTexturesModel()->refreshSearch();
if (!data.isEmpty() && data[0].toBool())
m_widget->focusMaterialSection(false);
} else {
m_pendingTextureSelection = nodeList.first();
}
} else if (identifier == "refresh_material_browser") {
QTimer::singleShot(0, model(), [this] {
@@ -571,8 +587,6 @@ void MaterialBrowserView::customNotification(const AbstractView *view,
applyTextureToModel3D(nodeList.at(0));
} else if (identifier == "apply_texture_to_model3D") {
applyTextureToModel3D(nodeList.at(0), nodeList.at(1));
} else if (identifier == "apply_texture_to_material") {
applyTextureToMaterial({nodeList.at(0)}, nodeList.at(1));
} else if (identifier == "focus_material_section") {
m_widget->focusMaterialSection(true);
}

View File

@@ -101,6 +101,7 @@ private:
QString m_appliedTextureId;
QString m_appliedTexturePath; // defers texture creation until dialog apply
int m_sceneId = -1;
ModelNode m_pendingTextureSelection;
};
} // namespace QmlDesigner

View File

@@ -3,23 +3,24 @@
#include "materialbrowserwidget.h"
#include "asset.h"
#include "assetimageprovider.h"
#include "createtexture.h"
#include "documentmanager.h"
#include "hdrimage.h"
#include "materialbrowsermodel.h"
#include "materialbrowsertexturesmodel.h"
#include "materialbrowserview.h"
#include "qmldesignerconstants.h"
#include "qmldesignerplugin.h"
#include "theme.h"
#include "variantproperty.h"
#include <asset.h>
#include <assetimageprovider.h>
#include <createtexture.h>
#include <designmodewidget.h>
#include <documentmanager.h>
#include <hdrimage.h>
#include <qmldesignerconstants.h>
#include <qmldesignerplugin.h>
#include <studioquickwidget.h>
#include <theme.h>
#include <variantproperty.h>
#include <coreplugin/icore.h>
#include <studioquickwidget.h>
#include <utils/algorithm.h>
#include <utils/environment.h>
#include <utils/qtcassert.h>
@@ -371,6 +372,7 @@ void MaterialBrowserWidget::focusMaterialSection(bool focusMatSec)
void MaterialBrowserWidget::addMaterialToContentLibrary()
{
ModelNode mat = m_materialBrowserModel->selectedMaterial();
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
m_materialBrowserView->emitCustomNotification("add_material_to_content_lib", {mat},
{m_previewImageProvider->getPixmap(mat)}); // to ContentLibrary
}
@@ -378,11 +380,13 @@ void MaterialBrowserWidget::addMaterialToContentLibrary()
void MaterialBrowserWidget::importMaterial()
{
ModelNode mat = m_materialBrowserModel->selectedMaterial();
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
m_materialBrowserView->emitCustomNotification("import_bundle_to_project"); // to ContentLibrary
}
void MaterialBrowserWidget::exportMaterial()
{
ModelNode mat = m_materialBrowserModel->selectedMaterial();
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("ContentLibrary");
m_materialBrowserView->emitCustomNotification("export_material_as_bundle", {mat},
{m_previewImageProvider->getPixmap(mat)}); // to ContentLibrary
}

View File

@@ -715,6 +715,8 @@ void MaterialEditorView::modelAttached(Model *model)
}
resetView();
selectedNodesChanged(selectedModelNodes(), {});
m_locked = false;
}
@@ -1056,17 +1058,22 @@ void MaterialEditorView::customNotification([[maybe_unused]] const AbstractView
const QList<ModelNode> &nodeList,
const QList<QVariant> &data)
{
if (identifier == "selected_material_changed") {
if (!m_hasMaterialRoot) {
auto changeSelected = [&]() {
if (!m_hasMaterialRoot && m_selectedMaterial != nodeList.first()) {
m_selectedMaterial = nodeList.first();
m_dynamicPropertiesModel->setSelectedNode(m_selectedMaterial);
QTimer::singleShot(0, this, &MaterialEditorView::resetView);
}
};
if (identifier == "selected_material_changed") {
changeSelected();
} else if (identifier == "apply_to_selected_triggered") {
changeSelected();
applyMaterialToSelectedModels(nodeList.first(), data.first().toBool());
} else if (identifier == "rename_material") {
if (m_selectedMaterial == nodeList.first())
renameMaterial(m_selectedMaterial, data.first().toString());
changeSelected();
renameMaterial(m_selectedMaterial, data.first().toString());
} else if (identifier == "add_new_material") {
handleToolBarAction(MaterialEditorContextObject::AddNewMaterial);
} else if (identifier == "duplicate_material") {

View File

@@ -14,6 +14,7 @@
#include <coreplugin/icore.h>
#include <designeractionmanager.h>
#include <designersettings.h>
#include <designmodewidget.h>
#include <import.h>
#include <invalididexception.h>
#include <itemlibraryentry.h>
@@ -565,8 +566,10 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
ModelNodeOperations::handleMaterialDrop(mimeData, targetNode);
} else if (mimeData->hasFormat(Constants::MIME_TYPE_BUNDLE_TEXTURE)) {
QByteArray filePath = mimeData->data(Constants::MIME_TYPE_BUNDLE_TEXTURE);
if (targetNode.metaInfo().isQtQuick3DModel())
if (targetNode.metaInfo().isQtQuick3DModel()) {
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
m_view->emitCustomNotification("apply_asset_to_model3D", {targetNode}, {filePath}); // To MaterialBrowserView
}
} else if (mimeData->hasFormat(Constants::MIME_TYPE_BUNDLE_MATERIAL)) {
if (targetNode.isValid())
m_view->emitCustomNotification("drop_bundle_material", {targetNode}); // To ContentLibraryView

View File

@@ -535,6 +535,7 @@ void PropertyEditorValue::commitDrop(const QString &dropData)
void PropertyEditorValue::openMaterialEditor(int idx)
{
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialEditor", true);
m_modelNode.view()->emitCustomNotification("select_material", {}, {idx});
}

View File

@@ -364,6 +364,7 @@ void TextureEditorView::applyTextureToSelectedModel(const ModelNode &texture)
QTC_ASSERT(texture.isValid(), return);
QmlDesignerPlugin::instance()->mainWidget()->showDockWidget("MaterialBrowser");
emitCustomNotification("apply_texture_to_model3D", {m_selectedModel, m_selectedTexture});
}
@@ -837,8 +838,6 @@ void TextureEditorView::customNotification([[maybe_unused]] const AbstractView *
m_dynamicPropertiesModel->setSelectedNode(m_selectedTexture);
QTimer::singleShot(0, this, &TextureEditorView::resetView);
}
} else if (identifier == "apply_texture_to_selected_model") {
applyTextureToSelectedModel(nodeList.first());
} else if (identifier == "add_new_texture") {
handleToolBarAction(TextureEditorContextObject::AddNewTexture);
} else if (identifier == "duplicate_texture") {

View File

@@ -77,9 +77,6 @@ public:
void nodeOrderChanged(const NodeListProperty &listProperty) override;
void rootNodeTypeChanged(const QString &type, int majorVersion, int minorVersion) override;
void nodeTypeChanged(const ModelNode& node, const TypeName &type, int majorVersion, int minorVersion) override;
void customNotification(const AbstractView *view, const QString &identifier,
const QList<ModelNode> &nodeList,
const QList<QVariant> &data) override;
void rewriterBeginTransaction() override;
void rewriterEndTransaction() override;

View File

@@ -385,15 +385,6 @@ void RewriterView::nodeTypeChanged(const ModelNode &node,
applyChanges();
}
void RewriterView::customNotification(const AbstractView * /*view*/,
const QString &identifier,
const QList<ModelNode> & /* nodeList */,
const QList<QVariant> & /*data */)
{
if (identifier == StartRewriterAmend || identifier == EndRewriterAmend)
return; // we emitted this ourselves, so just ignore these notifications.
}
void RewriterView::rewriterBeginTransaction()
{
transactionLevel++;