diff options
Diffstat (limited to 'examples/quick/draganddrop/external/externaldraganddrop.qml')
-rw-r--r-- | examples/quick/draganddrop/external/externaldraganddrop.qml | 84 |
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 + } + } +} |