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 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147
|
import QtQuick 2.0
Rectangle {
id: root
width: 500
height: 600
property int duration: 10
property int count: grid.count
Component {
id: myDelegate
Rectangle {
id: wrapper
property string nameData: name
objectName: "wrapper"
width: 80
height: 60
border.width: 1
Column {
Text { text: index }
Text {
text: wrapper.x + ", " + wrapper.y
}
Text {
id: textName
objectName: "textName"
text: name
}
}
color: GridView.isCurrentItem ? "lightsteelblue" : "white"
onXChanged: checkPos()
onYChanged: checkPos()
function checkPos() {
if (Qt.point(x, y) == targetItems_transitionTo) {
model_targetItems_transitionTo.addItem(nameData, "") // name is invalid once model removes the item
}
if (Qt.point(x, y) == displacedItems_transitionVia) {
model_displacedItems_transitionVia.addItem(name, "")
}
}
}
}
GridView {
id: grid
property int targetTransitionsDone
property int displaceTransitionsDone
property var targetTrans_items: new Object()
property var targetTrans_targetIndexes: new Array()
property var targetTrans_targetItems: new Array()
property var displacedTrans_items: new Object()
property var displacedTrans_targetIndexes: new Array()
property var displacedTrans_targetItems: new Array()
objectName: "grid"
width: 240
height: 320
cellWidth: 80
cellHeight: 60
cacheBuffer: 0
anchors.centerIn: parent
model: testModel
delegate: myDelegate
// for QQmlListProperty types
function copyList(propList) {
var temp = new Array()
for (var i=0; i<propList.length; i++)
temp.push(propList[i])
return temp
}
remove: Transition {
id: targetTransition
SequentialAnimation {
ScriptAction {
script: {
grid.targetTrans_items[targetTransition.ViewTransition.item.nameData] = targetTransition.ViewTransition.index
grid.targetTrans_targetIndexes.push(targetTransition.ViewTransition.targetIndexes)
grid.targetTrans_targetItems.push(grid.copyList(targetTransition.ViewTransition.targetItems))
}
}
ParallelAnimation {
NumberAnimation { properties: "x"; to: targetItems_transitionTo.x; duration: root.duration }
NumberAnimation { properties: "y"; to: targetItems_transitionTo.y; duration: root.duration }
}
ScriptAction { script: grid.targetTransitionsDone += 1 }
// delay deleting this item so that it stays valid for the tests
// (this doesn't delay the test itself)
PauseAnimation { duration: 10000 }
}
}
removeDisplaced: Transition {
id: displaced
SequentialAnimation {
ScriptAction {
script: {
grid.displacedTrans_items[displaced.ViewTransition.item.nameData] = displaced.ViewTransition.index
grid.displacedTrans_targetIndexes.push(displaced.ViewTransition.targetIndexes)
grid.displacedTrans_targetItems.push(grid.copyList(displaced.ViewTransition.targetItems))
}
}
ParallelAnimation {
NumberAnimation {
properties: "x"; duration: root.duration
to: displacedItems_transitionVia.x
}
NumberAnimation {
properties: "y"; duration: root.duration
to: displacedItems_transitionVia.y
}
}
NumberAnimation { properties: "x,y"; duration: root.duration }
ScriptAction { script: grid.displaceTransitionsDone += 1 }
}
}
}
Rectangle {
anchors.fill: grid
color: "lightsteelblue"
opacity: 0.2
}
Rectangle {
anchors.bottom: parent.bottom
width: 20; height: 20
color: "white"
NumberAnimation on x { loops: Animation.Infinite; from: 0; to: 300; duration: 10000 }
}
}
|