mirror of
https://invent.kde.org/marcoa/shift-shell.git
synced 2026-04-26 14:23:09 +00:00
animate index reordering
This commit is contained in:
parent
ba089aa1dd
commit
d09c3beafb
1 changed files with 87 additions and 44 deletions
|
|
@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue