blob: f3a0cac8d278423430716508c513550a9c9434e1 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
// Copyright (C) 2024 The Qt Company Ltd.
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR BSD-3-Clause
pragma ComponentBehavior: Bound
import QtQml
import QtQuick
import QtQml.Models
//! [entire]
GridView {
id: root
width: 320
height: 480
cellWidth: 80
cellHeight: 80
interactive: false
displaced: Transition {
NumberAnimation {
properties: "x,y"
easing.type: Easing.OutQuad
}
}
model: DelegateModel {
id: visualModel
model: 24
property var dropTarget: undefined
property bool copy: false
delegate: DropArea {
id: delegateRoot
width: 80
height: 80
onEntered: drag => {
if (visualModel.copy) {
if (drag.source !== icon)
visualModel.dropTarget = icon
} else {
visualModel.items.move(drag.source.DelegateModel.itemsIndex, icon.DelegateModel.itemsIndex)
}
}
Rectangle {
id: icon
objectName: DelegateModel.itemsIndex
property string text
Component.onCompleted: {
color = Qt.rgba(0.2 + (48 - DelegateModel.itemsIndex) * Math.random() / 48,
0.3 + DelegateModel.itemsIndex * Math.random() / 48,
0.4 * Math.random(),
1.0)
text = DelegateModel.itemsIndex
}
border.color: visualModel.dropTarget === this ? "black" : "transparent"
border.width: 2
radius: 3
width: 72
height: 72
anchors {
horizontalCenter: parent.horizontalCenter
verticalCenter: parent.verticalCenter
}
states: [
State {
when: dragHandler.active || controlDragHandler.active
ParentChange {
target: icon
parent: root
}
AnchorChanges {
target: icon
anchors {
horizontalCenter: undefined
verticalCenter: undefined
}
}
}
]
Text {
anchors.centerIn: parent
color: "white"
font.pointSize: 14
text: controlDragHandler.active ? "+" : icon.text
}
//! [draghandlers]
DragHandler {
id: dragHandler
acceptedModifiers: Qt.NoModifier
onActiveChanged: if (!active) visualModel.dropTarget = undefined
}
DragHandler {
id: controlDragHandler
acceptedModifiers: Qt.ControlModifier
onActiveChanged: {
visualModel.copy = active
if (!active) {
visualModel.dropTarget.text = icon.text
visualModel.dropTarget.color = icon.color
visualModel.dropTarget = undefined
}
}
}
//! [draghandlers]
Drag.active: dragHandler.active || controlDragHandler.active
Drag.source: icon
Drag.hotSpot.x: 36
Drag.hotSpot.y: 36
}
}
}
}
//! [entire]
|