summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMahmoud Badri <mahmoud.badri@qt.io>2022-10-20 17:42:46 +0300
committerMahmoud Badri <mahmoud.badri@qt.io>2022-10-20 16:35:27 +0000
commit70f532c43f74d0dfdd12222cd95f412e06128a6f (patch)
tree96f0c42ab3f83d32c5ebb306f51d41e7ab0a8060
parente238c8f0a4caf3d1487205093cffee9f56b56516 (diff)
downloadqt-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>
-rw-r--r--share/qtcreator/qmldesigner/materialBrowserQmlSource/MaterialBrowser.qml15
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.cpp14
-rw-r--r--src/plugins/qmldesigner/components/materialbrowser/materialbrowserwidget.h3
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;
};