aboutsummaryrefslogtreecommitdiffstats
path: root/examples/quick/draganddrop/external/externaldraganddrop.qml
diff options
context:
space:
mode:
Diffstat (limited to 'examples/quick/draganddrop/external/externaldraganddrop.qml')
-rw-r--r--examples/quick/draganddrop/external/externaldraganddrop.qml84
1 files changed, 84 insertions, 0 deletions
diff --git a/examples/quick/draganddrop/external/externaldraganddrop.qml b/examples/quick/draganddrop/external/externaldraganddrop.qml
new file mode 100644
index 0000000000..8156a13f55
--- /dev/null
+++ b/examples/quick/draganddrop/external/externaldraganddrop.qml
@@ -0,0 +1,84 @@
+// Copyright (C) 2023 The Qt Company Ltd.
+// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
+
+import QtQuick
+import QtQuick.Controls
+import QtQuick.Layouts
+
+Control {
+ padding: 8
+ contentItem: ColumnLayout {
+ component DragAndDropArea: Rectangle {
+ id: item
+ property string display: qsTr("Drag items to this area, or drag this item to a different drop area.")
+ property alias dropEnabled: acceptDropCB.checked
+ color: dropArea.containsDrag ? Qt.darker(palette.base) : palette.base
+
+ ColorAnimation on color {
+ id: rejectAnimation
+ from: "#FCC"
+ to: palette.base
+ duration: 1000
+ }
+ Label {
+ anchors.fill: parent
+ anchors.margins: 10
+ text: item.display
+ wrapMode: Text.WordWrap
+ }
+ DropArea {
+ id: dropArea
+ anchors.fill: parent
+ keys: ["text/plain"]
+ onEntered: (drag) => {
+ if (!acceptDropCB.checked) {
+ drag.accepted = false
+ rejectAnimation.start()
+ }
+ }
+ onDropped: (drop) => {
+ if (drop.hasText && acceptDropCB.checked) {
+ if (drop.proposedAction === Qt.MoveAction || drop.proposedAction === Qt.CopyAction) {
+ item.display = drop.text
+ drop.acceptProposedAction()
+ }
+ }
+ }
+ }
+ MouseArea {
+ id: mouseArea
+ anchors.fill: parent
+ drag.target: draggable
+ }
+ Item {
+ id: draggable
+ anchors.fill: parent
+ Drag.active: mouseArea.drag.active
+ Drag.hotSpot.x: 0
+ Drag.hotSpot.y: 0
+ Drag.mimeData: { "text/plain": item.display }
+ Drag.dragType: Drag.Automatic
+ Drag.onDragFinished: (dropAction) => {
+ if (dropAction === Qt.MoveAction)
+ item.display = ""
+ }
+ }
+ CheckBox {
+ id: acceptDropCB
+ anchors.bottom: parent.bottom
+ checked: true
+ text: qsTr("accept drop")
+ }
+ }
+
+ DragAndDropArea {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+
+ DragAndDropArea {
+ Layout.fillWidth: true
+ Layout.fillHeight: true
+ }
+ }
+}