diff --git a/containments/homescreen/contents/ui/HomeLauncher.qml b/containments/homescreen/contents/ui/HomeLauncher.qml index a267fb6a..7889c037 100644 --- a/containments/homescreen/contents/ui/HomeLauncher.qml +++ b/containments/homescreen/contents/ui/HomeLauncher.qml @@ -3,60 +3,103 @@ import org.kde.plasma.core 2.0 as PlasmaCore import org.kde.kio 1.0 as Kio import org.kde.plasma.components 2.0 as PlasmaComponents -MouseArea { +Item { id: delegateRoot width: applicationsView.cellWidth height: width - scale: root.reorderingApps && !drag.target ? 0.6 : 1 - Behavior on scale { - NumberAnimation { - duration: units.shortDuration - easing.type: Easing.InOutQuad + + property int idx: index + property int oldIdx: -1 + onIdxChanged: { + if (oldIdx < 0) { + oldIdx = idx; + return; } - } - onClicked: { - console.log("Clicked: " + model.ApplicationStorageIdRole) - appListModel.runApplication(model.ApplicationStorageIdRole) - } - onPressAndHold: { - delegateRoot.drag.target = delegateRoot; - root.reorderingApps = true; - } - onReleased: { - delegateRoot.drag.target = null; - root.reorderingApps = false; - } - onPositionChanged: { - if (delegateRoot.drag.target) { - appListModel.setOrder(model.ApplicationOriginalRowRole, (Math.round(GridView.view.width / GridView.view.cellWidth) * Math.round(delegateRoot.y / GridView.view.cellHeight) + Math.round(delegateRoot.x / GridView.view.cellWidth))); + delegateItem.x = ((oldIdx % 4) * GridView.view.cellWidth) - ((idx % 4) * GridView.view.cellWidth); + delegateItem.y = (Math.floor(oldIdx / 4) * GridView.view.cellHeight) - (Math.floor(idx / 4) * GridView.view.cellHeight); + if (!delegateItem.drag.target) { + translAnim.running = true; } + oldIdx = idx; } - PlasmaCore.IconItem { - id: icon - anchors.centerIn: parent - width: parent.height / 2 + + NumberAnimation { + id: translAnim + duration: units.longDuration + easing.type: Easing.InOutQuad + target: delegateItem + properties: "x,y" + to: 0 + } + MouseArea { + id: delegateItem + property int oldX + property int oldY + width: applicationsView.cellWidth height: width - source: model.ApplicationIconRole - } - - PlasmaComponents.Label { - id: label - visible: text.length > 0 - - anchors { - top: icon.bottom - left: icon.left - right: icon.right + scale: root.reorderingApps && !drag.target ? 0.6 : 1 + Behavior on scale { + NumberAnimation { + duration: units.shortDuration + easing.type: Easing.InOutQuad + } } - wrapMode: Text.WordWrap - horizontalAlignment: Qt.AlignHCenter - verticalAlignment: Qt.AlignVCenter - maximumLineCount: 2 + onXChanged: { + oldX = x + oldY = y + } + onClicked: { + console.log("Clicked: " + model.ApplicationStorageIdRole) + appListModel.runApplication(model.ApplicationStorageIdRole) + oldX = x + oldY = y + } + onPressAndHold: { + delegateItem.drag.target = delegateItem; + root.reorderingApps = true; + } + onReleased: { + delegateItem.drag.target = null; + root.reorderingApps = false; - text: model.ApplicationNameRole - font.pixelSize: theme.smallestFont.pixelSize - color: PlasmaCore.ColorScope.textColor + translAnim.running = true + } + onPositionChanged: { + if (delegateItem.drag.target) { + var pos = mapToItem(delegateRoot.parent, 0, 0); + + appListModel.setOrder(model.ApplicationOriginalRowRole, (Math.round(delegateRoot.GridView.view.width / delegateRoot.GridView.view.cellWidth) * Math.round(pos.y / delegateRoot.GridView.view.cellHeight) + Math.round(pos.x / delegateRoot.GridView.view.cellWidth))); + } + } + + PlasmaCore.IconItem { + id: icon + anchors.centerIn: parent + width: parent.height / 2 + height: width + source: model.ApplicationIconRole + } + + PlasmaComponents.Label { + id: label + visible: text.length > 0 + + anchors { + top: icon.bottom + left: icon.left + right: icon.right + } + + wrapMode: Text.WordWrap + horizontalAlignment: Qt.AlignHCenter + verticalAlignment: Qt.AlignVCenter + maximumLineCount: 2 + + text: model.ApplicationNameRole + font.pixelSize: theme.smallestFont.pixelSize + color: PlasmaCore.ColorScope.textColor + } } }