aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2022-09-30 14:44:42 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2022-09-30 12:08:55 +0000
commit395e40b8f3a50a327b65ccce9cf2443d2c641924 (patch)
treea033ee38485c02f63b4c2f2cf6ca7c9f529fe3e7
parent5da5830fa7730f6b580e9b7abb5f113232edac50 (diff)
QmlDesigner: Allow dropping bundle materials to Navigator
Fixes: QDS-7844 Change-Id: If3c58f82797beabe76baf99ea2dddc59032729df Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp1
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp7
-rw-r--r--src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp7
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp5
-rw-r--r--src/plugins/qmldesigner/components/navigator/navigatorview.cpp8
5 files changed, 24 insertions, 4 deletions
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
index c2120d9281..f159593d51 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserview.cpp
@@ -481,7 +481,6 @@ void MaterialBrowserView::customNotification(const AbstractView *view, const QSt
} else if (identifier == "drop_bundle_material") {
m_bundleMaterialDropTarget = nodeList.first();
-
ModelNode defaultMat = getBundleMaterialDefaultInstance(m_draggedBundleMaterial->type());
if (defaultMat.isValid())
applyBundleMaterialToDropTarget(defaultMat);
diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp
index 9b91254f0f..333c579e26 100644
--- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp
+++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp
@@ -132,12 +132,15 @@ bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event)
} else if (m_bundleMaterialToDrag != nullptr) {
QMouseEvent *me = static_cast<QMouseEvent *>(event);
if ((me->globalPos() - m_dragStartPoint).manhattanLength() > 20) {
+ QByteArray data;
QMimeData *mimeData = new QMimeData;
- mimeData->setData(Constants::MIME_TYPE_BUNDLE_MATERIAL, {});
+ QDataStream stream(&data, QIODevice::WriteOnly);
+ stream << m_bundleMaterialToDrag->type();
+ mimeData->setData(Constants::MIME_TYPE_BUNDLE_MATERIAL, data);
mimeData->removeFormat("text/plain");
- model->startDrag(mimeData, m_bundleMaterialToDrag->icon().toLocalFile());
emit bundleMaterialDragStarted(m_bundleMaterialToDrag);
+ model->startDrag(mimeData, m_bundleMaterialToDrag->icon().toLocalFile());
m_bundleMaterialToDrag = {};
}
}
diff --git a/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp b/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp
index 178f79e18a..6d8a303f7c 100644
--- a/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp
+++ b/src/plugins/qmldesigner/components/navigator/choosefrompropertylistdialog.cpp
@@ -58,6 +58,8 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i
// -> Attractor3D
// Material
// -> Model
+ // BundleMaterial
+ // -> Model
const TypeName textureType = "QtQuick3D.Texture";
if (insertInfo.isSubclassOf(textureType)) {
@@ -107,7 +109,10 @@ ChooseFromPropertyListFilter::ChooseFromPropertyListFilter(const NodeMetaInfo &i
|| parentInfo.isSubclassOf("QtQuick3D.Particles3D.Attractor3D"))
propertyList.append("shape");
} else if (insertInfo.isSubclassOf("QtQuick3D.Material")) {
- if (parentInfo.isSubclassOf("QtQuick3D.Particles3D.Model"))
+ if (parentInfo.isSubclassOf("QtQuick3D.Model"))
+ propertyList.append("materials");
+ } else if (insertInfo.typeName().startsWith("ComponentBundles.MaterialBundle")) {
+ if (parentInfo.isSubclassOf("QtQuick3D.Model"))
propertyList.append("materials");
}
}
diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
index d347854f00..d9c9d6699e 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatortreemodel.cpp
@@ -465,6 +465,7 @@ QStringList NavigatorTreeModel::mimeTypes() const
const static QStringList types({Constants::MIME_TYPE_MODELNODE_LIST,
Constants::MIME_TYPE_ITEM_LIBRARY_INFO,
Constants::MIME_TYPE_MATERIAL,
+ Constants::MIME_TYPE_BUNDLE_MATERIAL,
Constants::MIME_TYPE_ASSETS});
return types;
@@ -562,6 +563,10 @@ bool NavigatorTreeModel::dropMimeData(const QMimeData *mimeData,
handleItemLibraryItemDrop(mimeData, rowNumber, dropModelIndex);
} else if (mimeData->hasFormat(Constants::MIME_TYPE_MATERIAL)) {
handleMaterialDrop(mimeData, rowNumber, dropModelIndex);
+ } else if (mimeData->hasFormat(Constants::MIME_TYPE_BUNDLE_MATERIAL)) {
+ ModelNode targetNode(modelNodeForIndex(dropModelIndex));
+ if (targetNode.isValid())
+ m_view->emitCustomNotification("drop_bundle_material", {targetNode}); // To MaterialBrowserView
} else if (mimeData->hasFormat(Constants::MIME_TYPE_ASSETS)) {
const QStringList assetsPaths = QString::fromUtf8(mimeData->data(Constants::MIME_TYPE_ASSETS)).split(',');
NodeAbstractProperty targetProperty;
diff --git a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
index 64f7d05602..7b455a9ffd 100644
--- a/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
+++ b/src/plugins/qmldesigner/components/navigator/navigatorview.cpp
@@ -284,6 +284,14 @@ void NavigatorView::dragStarted(QMimeData *mimeData)
m_widget->setDragType(matNode.metaInfo().typeName());
m_widget->update();
+ } else if (mimeData->hasFormat(Constants::MIME_TYPE_BUNDLE_MATERIAL)) {
+ QByteArray data = mimeData->data(Constants::MIME_TYPE_BUNDLE_MATERIAL);
+ QDataStream stream(data);
+ TypeName bundleMatType;
+ stream >> bundleMatType;
+
+ m_widget->setDragType(bundleMatType);
+ m_widget->update();
}
}