@@ -5,6 +5,8 @@ import Ubuntu.Components 0.1
55SpreadDelegate {
66 id: root
77
8+ property bool selected: false
9+
810 property real progress: 0
911 property real animatedProgress: 0
1012
@@ -18,20 +20,16 @@ SpreadDelegate {
1820 property real startDistance: units.gu(5)
1921 property real endDistance: units.gu(.5)
2022
21− onClicked: {
22− priv.selectedProgress = root.progress
23− priv.selectedXTranslate = priv.xTranslate;
24− priv.selectedAngle = priv.angle;
25− priv.selectedScale = priv.scale;
26− priv.isSelected = true;
27− }
28−
29− Connections {
30− target: spreadView
31− onStageChanged: {
32− if (stage == 0) {
33− priv.isSelected = false;
34− }
23+ onSelectedChanged: {
24+ if (selected) {
25+ priv.selectedProgress = root.progress
26+ priv.selectedXTranslate = priv.xTranslate;
27+ priv.selectedAngle = priv.angle;
28+ priv.selectedScale = priv.scale;
29+ priv.isSelected = true;
30+ print("tile", index, "selected!!!!!!!!!!!!!!!!")
31+ } else {
32+ priv.isSelected = false;
3533 }
3634 }
3735
@@ -44,12 +42,10 @@ SpreadDelegate {
4442 property real selectedScale
4543
4644 property real negativeProgress: {
47− if (index == 0) {
48− return spreadView.positionMarker2;
49− } else if (index == 1) {
50− return spreadView.positionMarker2 - (spreadView.tileDistance / spreadView.width);
45+ if (index < 2) {
46+ return 0;
5147 }
52− return -(index - 2) * (spreadView.tileDistance / spreadView.width);
48+ return -spreadView.positionMarker2 -(index - 2) * (spreadView.tileDistance / spreadView.width);
5349 }
5450
5551 function linearAnimation(startProgress, endProgress, startValue, endValue, progress) {
@@ -67,6 +63,7 @@ SpreadDelegate {
6763 var translation = 0;
6864 switch (index) {
6965 case 0:
66+ print("+++++++++++++++++++++++++++", spreadView.stage, priv.isSelected)
7067 if (spreadView.stage == 0) {
7168 translation = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.width * .25, root.animatedProgress)
7269 break;
@@ -75,22 +72,22 @@ SpreadDelegate {
7572 var targetTranslate = easingAnimation(0, spreadView.positionMarker4, 0, -spreadView.width, spreadView.positionMarker4) + spreadView.width
7673 translation = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, -spreadView.width * .25, targetTranslate, root.progress)
7774 break;
78− } else if (!isSelected){ // Stage 2
75+ } else if (!priv.isSelected){ // Stage 2
7976 // Move the first tile a bit to the right to be aligned with the others
8077 translation += spreadView.width
8178 // apply the same animation as with the rest
8279 translation += -easingCurve.value * spreadView.width
8380 break;
84− } else if (isSelected) {
81+ } else if (priv.isSelected) {
8582 translation = linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, 0, root.progress)
8683 break;
8784 }
8885
8986 case 1:
90− if (spreadView.stage == 0) {
87+ if (spreadView.stage == 0 && !priv.isSelected) {
9188 translation = linearAnimation(0, spreadView.positionMarker2, 0, -spreadView.width * spreadView.snapPosition, root.animatedProgress)
9289 break;
93− } else if (spreadView.stage == 1) {
90+ } else if (spreadView.stage == 1 && !priv.isSelected) {
9491 // find where the main easing would be when reaching stage 2
9592 var stage2Progress = spreadView.positionMarker4 - spreadView.tileDistance / spreadView.width;
9693 targetTranslate = easingAnimation(0, stage2Progress, 0, -spreadView.width + root.endDistance, stage2Progress);
@@ -106,9 +103,10 @@ SpreadDelegate {
106103 translation += -((index - 1) * root.startDistance)
107104 // ...and use our easing to move them to the left. Stop a bit earlier for each tile
108105 translation += -easingCurve.value * spreadView.width + (index * root.endDistance)
109− if (isSelected) {
106+ if (priv.isSelected) {
110107 // Distance to left edge
111108 var targetTranslate = -spreadView.width - ((index - 1) * root.startDistance)
109+ print("selectedProgress:", selectedProgress, "negativeProgress:", negativeProgress, "progress", root.progress)
112110 translation = linearAnimation(selectedProgress, negativeProgress, selectedXTranslate, targetTranslate, root.progress)
113111 }
114112 }
@@ -126,10 +124,10 @@ SpreadDelegate {
126124 break;
127125 }
128126 case 1:
129− if (spreadView.stage == 0) {
127+ if (spreadView.stage == 0 && !priv.isSelected) {
130128 newAngle = linearAnimation(0, spreadView.positionMarker2, root.startAngle, root.startAngle * (1-spreadView.snapPosition), root.animatedProgress)
131129 break;
132− } else if (spreadView.stage == 1) {
130+ } else if (spreadView.stage == 1 && !priv.isSelected) {
133131 // find where the main easing would be when reaching stage 2
134132 var stage2Progress = spreadView.positionMarker4 - spreadView.tileDistance / spreadView.width;
135133 var targetAngle = easingAnimation(0, stage2Progress, root.startAngle, root.endAngle, stage2Progress)
@@ -139,7 +137,7 @@ SpreadDelegate {
139137
140138 default:
141139 newAngle = root.startAngle - easingCurve.value * (root.startAngle - root.endAngle)
142− if (isSelected) {
140+ if (priv.isSelected) {
143141 newAngle = linearAnimation(selectedProgress, negativeProgress, selectedAngle, 0, root.progress)
144142 }
145143 }
@@ -158,10 +156,10 @@ SpreadDelegate {
158156 break;
159157 }
160158 case 1:
161− if (spreadView.stage == 0) {
159+ if (spreadView.stage == 0 && !priv.isSelected) {
162160 newScale = linearAnimation(0, spreadView.positionMarker2, root.tile1StartScale, 1, root.animatedProgress)
163161 break;
164− } else if (spreadView.stage == 1) {
162+ } else if (spreadView.stage == 1 && !priv.isSelected) {
165163 // find where the main easing would be when reaching positionMarker4
166164 var targetScale = easingAnimation(0, spreadView.positionMarker4, root.startScale, root.endScale, spreadView.positionMarker4);
167165 newScale = linearAnimation(spreadView.positionMarker2, spreadView.positionMarker4, 1, targetScale, root.progress)
@@ -170,7 +168,7 @@ SpreadDelegate {
170168
171169 default:
172170 newScale = root.startScale - easingCurve.value * (root.startScale - root.endScale)
173− if (isSelected) {
171+ if (priv.isSelected) {
174172 newScale = linearAnimation(selectedProgress, negativeProgress, selectedScale, 1, root.progress)
175173 }
176174 }