diff options
author | Mahmoud Badri <mahmoud.badri@qt.io> | 2022-10-20 17:42:46 +0300 |
---|---|---|
committer | Mahmoud Badri <mahmoud.badri@qt.io> | 2022-10-20 16:35:27 +0000 |
commit | 70f532c43f74d0dfdd12222cd95f412e06128a6f (patch) | |
tree | 96f0c42ab3f83d32c5ebb306f51d41e7ab0a8060 | |
parent | e238c8f0a4caf3d1487205093cffee9f56b56516 (diff) | |
download | qt-creator-70f532c43f74d0dfdd12222cd95f412e06128a6f.tar.gz |
QmlDesigner: Allow drag-n-drop a bundle material to materials section
Fixes: QDS-8041
Change-Id: I848f636f41c58e11c719517f4073243a76e293b6
Reviewed-by: Miikka Heikkinen <miikka.heikkinen@qt.io>
3 files changed, 30 insertions, 2 deletions
diff --git a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml index ad9356d44d..1e8cdfda5d 100644 --- a/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml +++ b/share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml @@ -187,6 +187,21 @@ Item { width: root.width caption: qsTr("Materials") hideHeader: !materialBrowserBundleModel.matBundleExists + dropEnabled: true + + onDropEnter: (drag) => { + drag.accepted = rootView.draggedBundleMaterial + userMaterialsSection.highlight = rootView.draggedBundleMaterial + } + + onDropExit: { + userMaterialsSection.highlight = false + } + + onDrop: { + userMaterialsSection.highlight = false + materialBrowserBundleModel.addToProject(rootView.draggedBundleMaterial) + } Grid { id: grid diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp index 333c579e26..0d4e36590c 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp @@ -139,14 +139,24 @@ bool MaterialBrowserWidget::eventFilter(QObject *obj, QEvent *event) mimeData->setData(Constants::MIME_TYPE_BUNDLE_MATERIAL, data); mimeData->removeFormat("text/plain"); + if (!m_draggedBundleMaterial) { + m_draggedBundleMaterial = m_bundleMaterialToDrag; + emit draggedBundleMaterialChanged(); + } + emit bundleMaterialDragStarted(m_bundleMaterialToDrag); model->startDrag(mimeData, m_bundleMaterialToDrag->icon().toLocalFile()); - m_bundleMaterialToDrag = {}; + m_bundleMaterialToDrag = nullptr; } } } else if (event->type() == QMouseEvent::MouseButtonRelease) { m_materialToDrag = {}; - m_bundleMaterialToDrag = {}; + m_bundleMaterialToDrag = nullptr; + + if (m_draggedBundleMaterial) { + m_draggedBundleMaterial = nullptr; + emit draggedBundleMaterialChanged(); + } } return QObject::eventFilter(obj, event); diff --git a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h index 0d50a84cc6..638d3c048a 100644 --- a/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h +++ b/src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h @@ -58,6 +58,7 @@ class PreviewImageProvider; class MaterialBrowserWidget : public QFrame { Q_OBJECT + Q_PROPERTY(BundleMaterial *draggedBundleMaterial MEMBER m_draggedBundleMaterial NOTIFY draggedBundleMaterialChanged) public: MaterialBrowserWidget(MaterialBrowserView *view); @@ -81,6 +82,7 @@ public: signals: void bundleMaterialDragStarted(QmlDesigner::BundleMaterial *bundleMat); + void draggedBundleMaterialChanged(); protected: bool eventFilter(QObject *obj, QEvent *event) override; @@ -102,6 +104,7 @@ private: ModelNode m_materialToDrag; BundleMaterial *m_bundleMaterialToDrag = nullptr; + BundleMaterial *m_draggedBundleMaterial = nullptr; QPoint m_dragStartPoint; }; |