8 import org.kde.kirigami 2.4 as Kirigami
81 property Item listItem
86 property ListView listView
98 signal moveRequested(
int oldIndex,
int newIndex)
106 implicitWidth: Kirigami.
Units.iconSizes.smallMedium
107 implicitHeight: implicitWidth
117 cursorShape: pressed ?
Qt.ClosedHandCursor :
Qt.OpenHandCursor
121 source:
"handle-sort"
123 property int mouseDownY
124 property Item originalParent
125 opacity: mouseArea.pressed || (!Kirigami.Settings.tabletMode && listItem.hovered) ? 1 : 0.6
126 property
int listItemLastY
127 property
bool draggingUp
129 function arrangeItem() {
130 const newIndex = listView.indexAt(1, listView.contentItem.mapFromItem(mouseArea, 0,
internal.mouseDownY).y);
132 if (newIndex > -1 && ((
internal.draggingUp && newIndex < index) || (!
internal.draggingUp && newIndex > index))) {
133 root.moveRequested(index, newIndex);
139 preventStealing:
true
142 onPressed: mouse => {
143 internal.originalParent = listItem.parent;
144 listItem.parent = listView;
145 listItem.y =
internal.originalParent.mapToItem(listItem.parent, listItem.x, listItem.y).y;
146 internal.originalParent.z = 99;
147 internal.startY = listItem.y;
148 internal.listItemLastY = listItem.y;
149 internal.mouseDownY = mouse.y;
152 mouseArea.drag.maximumY = listView.height - listItem.height;
155 onPositionChanged: mouse => {
156 if (!pressed || listItem.y ===
internal.listItemLastY) {
160 internal.draggingUp = listItem.y <
internal.listItemLastY
161 internal.listItemLastY = listItem.y;
163 internal.arrangeItem();
166 scrollTimer.running = (listView.contentHeight > listView.height)
167 && ( (listItem.y === 0 && !listView.atYBeginning) ||
168 (listItem.y === mouseArea.drag.maximumY && !listView.atYEnd) );
170 onReleased: mouse => {
171 listItem.y =
internal.originalParent.mapFromItem(listItem, 0, 0).y;
172 listItem.parent =
internal.originalParent;
173 dropAnimation.running =
true;
174 scrollTimer.running =
false;
177 onCanceled: released()
178 SequentialAnimation {
184 duration: Kirigami.Units.longDuration
185 easing.type: Easing.InOutQuad
188 target: listItem.parent
198 if (
internal.draggingUp) {
199 listView.contentY -= Kirigami.Units.gridUnit;
200 if (listView.atYBeginning) {
201 listView.positionViewAtBeginning();
205 listView.contentY += Kirigami.Units.gridUnit;
206 if (listView.atYEnd) {
207 listView.positionViewAtEnd();
211 internal.arrangeItem();