Merge lp:~unity-team/unity8/side-stage-redesign-tutorial into lp:unity8
- side-stage-redesign-tutorial
- Merge into trunk
Status: | Work in progress |
---|---|
Proposed branch: | lp:~unity-team/unity8/side-stage-redesign-tutorial |
Merge into: | lp:unity8 |
Prerequisite: | lp:~unity-team/unity8/side-stage-redesign |
Diff against target: |
817 lines (+470/-45) 13 files modified
qml/Components/Showable.qml (+2/-2) qml/Shell.qml (+2/-1) qml/Stages/SideStage.qml (+2/-1) qml/Stages/TabletSideStageTouchGesture.qml (+2/-0) qml/Stages/TabletStage.qml (+25/-0) qml/Tutorial/EdgesTutorial.qml (+8/-1) qml/Tutorial/EdgesTutorialContent.qml (+7/-6) qml/Tutorial/SideStageTutorial.qml (+63/-0) qml/Tutorial/SideStageTutorialPage.qml (+250/-0) qml/Tutorial/TutorialPage.qml (+8/-1) tests/qmltests/Stages/tst_TabletStage.qml (+12/-0) tests/qmltests/Tutorial/tst_Tutorial.qml (+74/-32) tests/qmltests/tst_Shell.qml (+15/-1) |
To merge this branch: | bzr merge lp:~unity-team/unity8/side-stage-redesign-tutorial |
Related bugs: |
Reviewer | Review Type | Date Requested | Status |
---|---|---|---|
Unity8 CI Bot | continuous-integration | Needs Fixing | |
Unity Team | Pending | ||
PS Jenkins bot | continuous-integration | Pending | |
Review via email: mp+288833@code.launchpad.net |
This proposal supersedes a proposal from 2016-01-04.
Commit message
Added progressive discovery tutorial for Side stage.
Renamed some of the tutorial pages.
Description of the change
* Are there any related MPs required for this MP to build/function as expected? Please list.
https:/
https:/
https:/
* Did you perform an exploratory manual test run of your code change and any related functionality?
Yes
* Did you make sure that your branch does not contain spurious tags?
Yes
* If you changed the packaging (debian), did you subscribe the ubuntu-unity team to this MP?
N/A
* If you changed the UI, has there been a design review?
Yes
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal | # |
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2040
https:/
Executed test runs:
Click here to trigger a rebuild:
https:/
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2040
https:/
Executed test runs:
Click here to trigger a rebuild:
https:/
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2040
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2041
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2041
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Unity8 CI Bot (unity8-ci-bot) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2042
https:/
Executed test runs:
FAILURE: https:/
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
PS Jenkins bot (ps-jenkins) wrote : Posted in a previous version of this proposal | # |
FAILED: Continuous integration, rev:2042
http://
Executed test runs:
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
FAILURE: http://
Click here to trigger a rebuild:
http://
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:2277
https:/
Executed test runs:
SUCCESS: https:/
SUCCESS: https:/
SUCCESS: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
FAILURE: https:/
Click here to trigger a rebuild:
https:/
Albert Astals Cid (aacid) wrote : | # |
Path conflict: <deleted> / qml/Tutorial/
Path conflict: <deleted> / qml/Tutorial/
Path conflict: <deleted> / qml/Tutorial/
Path conflict: <deleted> / qml/Tutorial/
Text conflict in qml/Shell.qml
Text conflict in qml/Tutorial/
Text conflict in qml/Tutorial/
Text conflict in qml/Tutorial/
Text conflict in tests/qmltests/
Text conflict in tests/qmltests/
10 conflicts encountered.
Unity8 CI Bot (unity8-ci-bot) wrote : | # |
FAILED: Continuous integration, rev:2277
https:/
Executed test runs:
FAILURE: https:/
Click here to trigger a rebuild:
https:/
Albert Astals Cid (aacid) wrote : | # |
Has had conflcits for over a month, moving over to WiP to clear the queue a bit.
Unmerged revisions
- 2277. By Michał Sawicz
-
Added progressive discovery tutorial for Side stage.
Renamed some of the tutorial pages.
Preview Diff
1 | === modified file 'qml/Components/Showable.qml' | |||
2 | --- qml/Components/Showable.qml 2016-03-11 20:21:04 +0000 | |||
3 | +++ qml/Components/Showable.qml 2016-03-11 20:21:06 +0000 | |||
4 | @@ -39,8 +39,8 @@ | |||
5 | 39 | 39 | ||
6 | 40 | // automatically set the target on showAnimation and hideAnimation to be the | 40 | // automatically set the target on showAnimation and hideAnimation to be the |
7 | 41 | // showable itself | 41 | // showable itself |
10 | 42 | onShowAnimationChanged: if (showAnimation) showAnimation["target"] = showable | 42 | onShowAnimationChanged: if (showAnimation && showAnimation.hasOwnProperty("target")) showAnimation["target"] = showable |
11 | 43 | onHideAnimationChanged: if (hideAnimation) hideAnimation["target"] = showable | 43 | onHideAnimationChanged: if (hideAnimation && hideAnimation.hasOwnProperty("target")) hideAnimation["target"] = showable |
12 | 44 | 44 | ||
13 | 45 | Component.onCompleted: required = shown; | 45 | Component.onCompleted: required = shown; |
14 | 46 | 46 | ||
15 | 47 | 47 | ||
16 | === modified file 'qml/Shell.qml' | |||
17 | --- qml/Shell.qml 2016-03-11 20:21:04 +0000 | |||
18 | +++ qml/Shell.qml 2016-03-11 20:21:06 +0000 | |||
19 | @@ -354,10 +354,11 @@ | |||
20 | 354 | } | 354 | } |
21 | 355 | } | 355 | } |
22 | 356 | 356 | ||
24 | 357 | Tutorial { | 357 | EdgesTutorial { |
25 | 358 | id: tutorial | 358 | id: tutorial |
26 | 359 | objectName: "tutorial" | 359 | objectName: "tutorial" |
27 | 360 | anchors.fill: parent | 360 | anchors.fill: parent |
28 | 361 | usageScenario: shell.usageScenario | ||
29 | 361 | 362 | ||
30 | 362 | // EdgeDragAreas don't work with mice. So to avoid trapping the user, | 363 | // EdgeDragAreas don't work with mice. So to avoid trapping the user, |
31 | 363 | // we skip the tutorial on the Desktop to avoid using them. The | 364 | // we skip the tutorial on the Desktop to avoid using them. The |
32 | 364 | 365 | ||
33 | === modified file 'qml/Stages/SideStage.qml' | |||
34 | --- qml/Stages/SideStage.qml 2016-03-11 20:21:04 +0000 | |||
35 | +++ qml/Stages/SideStage.qml 2016-03-11 20:21:06 +0000 | |||
36 | @@ -26,6 +26,7 @@ | |||
37 | 26 | property int panelWidth: units.gu(40) | 26 | property int panelWidth: units.gu(40) |
38 | 27 | readonly property alias dragging: hideSideStageDragArea.dragging | 27 | readonly property alias dragging: hideSideStageDragArea.dragging |
39 | 28 | readonly property real progress: width / panelWidth | 28 | readonly property real progress: width / panelWidth |
40 | 29 | property bool enableDrag: true | ||
41 | 29 | 30 | ||
42 | 30 | width: 0 | 31 | width: 0 |
43 | 31 | shown: false | 32 | shown: false |
44 | @@ -100,7 +101,7 @@ | |||
45 | 100 | 101 | ||
46 | 101 | direction: Direction.Leftwards | 102 | direction: Direction.Leftwards |
47 | 102 | rotation: 180 | 103 | rotation: 180 |
49 | 103 | enabled: root.shown | 104 | enabled: root.shown && enableDrag |
50 | 104 | anchors.right: root.left | 105 | anchors.right: root.left |
51 | 105 | width: sideStageDragHandle.width | 106 | width: sideStageDragHandle.width |
52 | 106 | height: root.height | 107 | height: root.height |
53 | 107 | 108 | ||
54 | === modified file 'qml/Stages/TabletSideStageTouchGesture.qml' | |||
55 | --- qml/Stages/TabletSideStageTouchGesture.qml 2016-03-11 20:21:04 +0000 | |||
56 | +++ qml/Stages/TabletSideStageTouchGesture.qml 2016-03-11 20:21:06 +0000 | |||
57 | @@ -106,6 +106,8 @@ | |||
58 | 106 | } | 106 | } |
59 | 107 | 107 | ||
60 | 108 | onDragStarted: { | 108 | onDragStarted: { |
61 | 109 | if (!dragComponent) return; | ||
62 | 110 | |||
63 | 109 | if (dragComponentProperties) { | 111 | if (dragComponentProperties) { |
64 | 110 | priv.dragObject = dragComponent.createObject(root, dragComponentProperties); | 112 | priv.dragObject = dragComponent.createObject(root, dragComponentProperties); |
65 | 111 | } else { | 113 | } else { |
66 | 112 | 114 | ||
67 | === modified file 'qml/Stages/TabletStage.qml' | |||
68 | --- qml/Stages/TabletStage.qml 2016-03-11 20:21:04 +0000 | |||
69 | +++ qml/Stages/TabletStage.qml 2016-03-11 20:21:06 +0000 | |||
70 | @@ -18,9 +18,11 @@ | |||
71 | 18 | import Ubuntu.Components 1.3 | 18 | import Ubuntu.Components 1.3 |
72 | 19 | import Ubuntu.Gestures 0.1 | 19 | import Ubuntu.Gestures 0.1 |
73 | 20 | import Unity.Application 0.1 | 20 | import Unity.Application 0.1 |
74 | 21 | import AccountsService 0.1 | ||
75 | 21 | import Utils 0.1 | 22 | import Utils 0.1 |
76 | 22 | import Powerd 0.1 | 23 | import Powerd 0.1 |
77 | 23 | import "../Components" | 24 | import "../Components" |
78 | 25 | import "../Tutorial" | ||
79 | 24 | 26 | ||
80 | 25 | AbstractStage { | 27 | AbstractStage { |
81 | 26 | id: root | 28 | id: root |
82 | @@ -603,6 +605,7 @@ | |||
83 | 603 | objectName: "sideStage" | 605 | objectName: "sideStage" |
84 | 604 | height: priv.landscapeHeight | 606 | height: priv.landscapeHeight |
85 | 605 | x: spreadView.width - width | 607 | x: spreadView.width - width |
86 | 608 | showHint: !priv.sideStageAppId | ||
87 | 606 | z: { | 609 | z: { |
88 | 607 | if (!priv.mainStageAppId) return 0; | 610 | if (!priv.mainStageAppId) return 0; |
89 | 608 | 611 | ||
90 | @@ -1101,4 +1104,26 @@ | |||
91 | 1101 | } | 1104 | } |
92 | 1102 | } | 1105 | } |
93 | 1103 | } | 1106 | } |
94 | 1107 | |||
95 | 1108 | Loader { | ||
96 | 1109 | id: sideStageTutorialLoader | ||
97 | 1110 | anchors.fill: parent | ||
98 | 1111 | |||
99 | 1112 | property bool doSideStageDemo: false | ||
100 | 1113 | Component.onCompleted: doSideStageDemo = AccountsService.demoEdges | ||
101 | 1114 | Connections { | ||
102 | 1115 | target: AccountsService | ||
103 | 1116 | onDemoEdgesChanged: { | ||
104 | 1117 | if (AccountsService.demoEdges) sideStageTutorialLoader.doSideStageDemo = true; | ||
105 | 1118 | } | ||
106 | 1119 | } | ||
107 | 1120 | active: doSideStageDemo && mainApp && (mainApp.supportedOrientations & (Qt.PortraitOrientation|Qt.InvertedPortraitOrientation)) | ||
108 | 1121 | |||
109 | 1122 | sourceComponent: SideStageTutorial { | ||
110 | 1123 | Component.onCompleted: sideStage.hide(); | ||
111 | 1124 | onFinished: { | ||
112 | 1125 | sideStageTutorialLoader.doSideStageDemo = false; | ||
113 | 1126 | } | ||
114 | 1127 | } | ||
115 | 1128 | } | ||
116 | 1104 | } | 1129 | } |
117 | 1105 | 1130 | ||
118 | === renamed file 'qml/Tutorial/TutorialBottomFinish.qml' => 'qml/Tutorial/BottomEdgeFinishTutorialPage.qml' | |||
119 | === renamed file 'qml/Tutorial/TutorialBottom.qml' => 'qml/Tutorial/BottomEdgeTutorialPage.qml' | |||
120 | === renamed file 'qml/Tutorial/Tutorial.qml' => 'qml/Tutorial/EdgesTutorial.qml' | |||
121 | --- qml/Tutorial/Tutorial.qml 2015-08-25 07:25:26 +0000 | |||
122 | +++ qml/Tutorial/EdgesTutorial.qml 2016-03-11 20:21:06 +0000 | |||
123 | @@ -23,6 +23,7 @@ | |||
124 | 23 | property alias active: loader.active | 23 | property alias active: loader.active |
125 | 24 | property bool paused | 24 | property bool paused |
126 | 25 | property real edgeSize | 25 | property real edgeSize |
127 | 26 | property string usageScenario | ||
128 | 26 | 27 | ||
129 | 27 | property Item launcher | 28 | property Item launcher |
130 | 28 | property Item panel | 29 | property Item panel |
131 | @@ -44,7 +45,7 @@ | |||
132 | 44 | Loader { | 45 | Loader { |
133 | 45 | id: loader | 46 | id: loader |
134 | 46 | anchors.fill: parent | 47 | anchors.fill: parent |
136 | 47 | source: "TutorialContent.qml" | 48 | source: "EdgesTutorialContent.qml" |
137 | 48 | 49 | ||
138 | 49 | Binding { | 50 | Binding { |
139 | 50 | target: loader.item | 51 | target: loader.item |
140 | @@ -70,6 +71,12 @@ | |||
141 | 70 | value: root.panel | 71 | value: root.panel |
142 | 71 | } | 72 | } |
143 | 72 | 73 | ||
144 | 74 | Binding { | ||
145 | 75 | target: loader.item | ||
146 | 76 | property: "usageScenario" | ||
147 | 77 | value: root.usageScenario | ||
148 | 78 | } | ||
149 | 79 | |||
150 | 73 | Connections { | 80 | Connections { |
151 | 74 | target: loader.item | 81 | target: loader.item |
152 | 75 | onFinished: root.finished() | 82 | onFinished: root.finished() |
153 | 76 | 83 | ||
154 | === renamed file 'qml/Tutorial/TutorialContent.qml' => 'qml/Tutorial/EdgesTutorialContent.qml' | |||
155 | --- qml/Tutorial/TutorialContent.qml 2015-08-25 07:25:26 +0000 | |||
156 | +++ qml/Tutorial/EdgesTutorialContent.qml 2016-03-11 20:21:06 +0000 | |||
157 | @@ -22,6 +22,7 @@ | |||
158 | 22 | 22 | ||
159 | 23 | property Item launcher | 23 | property Item launcher |
160 | 24 | property Item panel | 24 | property Item panel |
161 | 25 | property string usageScenario | ||
162 | 25 | 26 | ||
163 | 26 | readonly property bool launcherEnabled: !running || | 27 | readonly property bool launcherEnabled: !running || |
164 | 27 | (!paused && tutorialLeft.shown) | 28 | (!paused && tutorialLeft.shown) |
165 | @@ -61,7 +62,7 @@ | |||
166 | 61 | } | 62 | } |
167 | 62 | } | 63 | } |
168 | 63 | 64 | ||
170 | 64 | TutorialLeft { | 65 | LeftEdgeTutorialPage { |
171 | 65 | id: tutorialLeft | 66 | id: tutorialLeft |
172 | 66 | objectName: "tutorialLeft" | 67 | objectName: "tutorialLeft" |
173 | 67 | anchors.fill: parent | 68 | anchors.fill: parent |
174 | @@ -71,7 +72,7 @@ | |||
175 | 71 | onFinished: tutorialLeftFinish.show() | 72 | onFinished: tutorialLeftFinish.show() |
176 | 72 | } | 73 | } |
177 | 73 | 74 | ||
179 | 74 | TutorialLeftFinish { | 75 | LeftEdgeFinishTutorialPage { |
180 | 75 | id: tutorialLeftFinish | 76 | id: tutorialLeftFinish |
181 | 76 | objectName: "tutorialLeftFinish" | 77 | objectName: "tutorialLeftFinish" |
182 | 77 | anchors.fill: parent | 78 | anchors.fill: parent |
183 | @@ -85,7 +86,7 @@ | |||
184 | 85 | } | 86 | } |
185 | 86 | } | 87 | } |
186 | 87 | 88 | ||
188 | 88 | TutorialRight { | 89 | RightEdgeTutorialPage { |
189 | 89 | id: tutorialRight | 90 | id: tutorialRight |
190 | 90 | objectName: "tutorialRight" | 91 | objectName: "tutorialRight" |
191 | 91 | anchors.fill: parent | 92 | anchors.fill: parent |
192 | @@ -96,7 +97,7 @@ | |||
193 | 96 | onFinished: tutorialBottom.show() | 97 | onFinished: tutorialBottom.show() |
194 | 97 | } | 98 | } |
195 | 98 | 99 | ||
197 | 99 | TutorialBottom { | 100 | BottomEdgeTutorialPage { |
198 | 100 | id: tutorialBottom | 101 | id: tutorialBottom |
199 | 101 | objectName: "tutorialBottom" | 102 | objectName: "tutorialBottom" |
200 | 102 | anchors.fill: parent | 103 | anchors.fill: parent |
201 | @@ -106,11 +107,11 @@ | |||
202 | 106 | onFinished: tutorialBottomFinish.show() | 107 | onFinished: tutorialBottomFinish.show() |
203 | 107 | } | 108 | } |
204 | 108 | 109 | ||
206 | 109 | TutorialBottomFinish { | 110 | BottomEdgeFinishTutorialPage { |
207 | 110 | id: tutorialBottomFinish | 111 | id: tutorialBottomFinish |
208 | 111 | objectName: "tutorialBottomFinish" | 112 | objectName: "tutorialBottomFinish" |
209 | 112 | anchors.fill: parent | 113 | anchors.fill: parent |
211 | 113 | backgroundFadesOut: true | 114 | backgroundFadesOut: usageScenario !== "tablet" |
212 | 114 | paused: !shown || root.paused | 115 | paused: !shown || root.paused |
213 | 115 | 116 | ||
214 | 116 | onFinished: root.finish() | 117 | onFinished: root.finish() |
215 | 117 | 118 | ||
216 | === renamed file 'qml/Tutorial/TutorialLeftFinish.qml' => 'qml/Tutorial/LeftEdgeFinishTutorialPage.qml' | |||
217 | === renamed file 'qml/Tutorial/TutorialLeft.qml' => 'qml/Tutorial/LeftEdgeTutorialPage.qml' | |||
218 | === renamed file 'qml/Tutorial/TutorialRight.qml' => 'qml/Tutorial/RightEdgeTutorialPage.qml' | |||
219 | === added file 'qml/Tutorial/SideStageTutorial.qml' | |||
220 | --- qml/Tutorial/SideStageTutorial.qml 1970-01-01 00:00:00 +0000 | |||
221 | +++ qml/Tutorial/SideStageTutorial.qml 2016-03-11 20:21:06 +0000 | |||
222 | @@ -0,0 +1,63 @@ | |||
223 | 1 | /* | ||
224 | 2 | * Copyright (C) 2016 Canonical, Ltd. | ||
225 | 3 | * | ||
226 | 4 | * This program is free software; you can redistribute it and/or modify | ||
227 | 5 | * it under the terms of the GNU General Public License as published by | ||
228 | 6 | * the Free Software Foundation; version 3. | ||
229 | 7 | * | ||
230 | 8 | * This program is distributed in the hope that it will be useful, | ||
231 | 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
232 | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
233 | 11 | * GNU General Public License for more details. | ||
234 | 12 | * | ||
235 | 13 | * You should have received a copy of the GNU General Public License | ||
236 | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
237 | 15 | */ | ||
238 | 16 | |||
239 | 17 | import QtQuick 2.4 | ||
240 | 18 | import Ubuntu.Components 1.3 | ||
241 | 19 | |||
242 | 20 | Item { | ||
243 | 21 | id: root | ||
244 | 22 | |||
245 | 23 | property bool paused: false | ||
246 | 24 | readonly property alias running: d.running | ||
247 | 25 | |||
248 | 26 | Component.onCompleted: { | ||
249 | 27 | d.start(); | ||
250 | 28 | } | ||
251 | 29 | |||
252 | 30 | signal finished() | ||
253 | 31 | |||
254 | 32 | function finish() { | ||
255 | 33 | d.stop(); | ||
256 | 34 | finished(); | ||
257 | 35 | } | ||
258 | 36 | |||
259 | 37 | QtObject { | ||
260 | 38 | id: d | ||
261 | 39 | |||
262 | 40 | property bool running | ||
263 | 41 | |||
264 | 42 | function stop() { | ||
265 | 43 | running = false; | ||
266 | 44 | } | ||
267 | 45 | |||
268 | 46 | function start() { | ||
269 | 47 | running = true; | ||
270 | 48 | tutorialSideStage.show(); | ||
271 | 49 | } | ||
272 | 50 | } | ||
273 | 51 | |||
274 | 52 | SideStageTutorialPage { | ||
275 | 53 | id: tutorialSideStage | ||
276 | 54 | objectName: "tutorialSideStage" | ||
277 | 55 | backgroundFadesIn: true | ||
278 | 56 | backgroundFadesOut: true | ||
279 | 57 | anchors.fill: parent | ||
280 | 58 | paused: !shown || root.paused | ||
281 | 59 | panel: root.panel | ||
282 | 60 | |||
283 | 61 | onFinished: root.finish() | ||
284 | 62 | } | ||
285 | 63 | } | ||
286 | 0 | 64 | ||
287 | === added file 'qml/Tutorial/SideStageTutorialPage.qml' | |||
288 | --- qml/Tutorial/SideStageTutorialPage.qml 1970-01-01 00:00:00 +0000 | |||
289 | +++ qml/Tutorial/SideStageTutorialPage.qml 2016-03-11 20:21:06 +0000 | |||
290 | @@ -0,0 +1,250 @@ | |||
291 | 1 | /* | ||
292 | 2 | * Copyright (C) 2016 Canonical, Ltd. | ||
293 | 3 | * | ||
294 | 4 | * This program is free software; you can redistribute it and/or modify | ||
295 | 5 | * it under the terms of the GNU General Public License as published by | ||
296 | 6 | * the Free Software Foundation; version 3. | ||
297 | 7 | * | ||
298 | 8 | * This program is distributed in the hope that it will be useful, | ||
299 | 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
300 | 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
301 | 11 | * GNU General Public License for more details. | ||
302 | 12 | * | ||
303 | 13 | * You should have received a copy of the GNU General Public License | ||
304 | 14 | * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||
305 | 15 | */ | ||
306 | 16 | |||
307 | 17 | import QtQuick 2.4 | ||
308 | 18 | import Ubuntu.Components 1.3 | ||
309 | 19 | import Ubuntu.Gestures 0.1 | ||
310 | 20 | import "../Components" | ||
311 | 21 | import "../Stages" | ||
312 | 22 | import "." as LocalComponents | ||
313 | 23 | |||
314 | 24 | TutorialPage { | ||
315 | 25 | id: root | ||
316 | 26 | |||
317 | 27 | property var panel | ||
318 | 28 | |||
319 | 29 | title: i18n.tr("Open/Close side stage") | ||
320 | 30 | text: i18n.tr("3 finger tap the screen.") | ||
321 | 31 | fullTextWidth: true | ||
322 | 32 | |||
323 | 33 | SequentialAnimation { | ||
324 | 34 | id: teaseAnimation | ||
325 | 35 | paused: running && root.paused | ||
326 | 36 | running: true | ||
327 | 37 | loops: Animation.Infinite | ||
328 | 38 | |||
329 | 39 | property real scale: 1 | ||
330 | 40 | |||
331 | 41 | UbuntuNumberAnimation { | ||
332 | 42 | target: teaseAnimation | ||
333 | 43 | property: "scale" | ||
334 | 44 | to: 0.95 | ||
335 | 45 | duration: UbuntuAnimation.FastDuration | ||
336 | 46 | } | ||
337 | 47 | UbuntuNumberAnimation { | ||
338 | 48 | target: teaseAnimation | ||
339 | 49 | property: "scale" | ||
340 | 50 | to: 1 | ||
341 | 51 | duration: UbuntuAnimation.SleepyDuration | ||
342 | 52 | } | ||
343 | 53 | } | ||
344 | 54 | |||
345 | 55 | Behavior on textYOffset { UbuntuNumberAnimation {} } | ||
346 | 56 | |||
347 | 57 | StateGroup { | ||
348 | 58 | id: internalState | ||
349 | 59 | states: [ | ||
350 | 60 | State { | ||
351 | 61 | name: "initial" | ||
352 | 62 | StateChangeScript { | ||
353 | 63 | script: { | ||
354 | 64 | root.hideError(); | ||
355 | 65 | overlayGesture.hide(); | ||
356 | 66 | overlayFinish.hide(); | ||
357 | 67 | sideStage.hide(); | ||
358 | 68 | } | ||
359 | 69 | } | ||
360 | 70 | }, | ||
361 | 71 | State { | ||
362 | 72 | name: "overlayGesture" | ||
363 | 73 | PropertyChanges { | ||
364 | 74 | target: root | ||
365 | 75 | title: i18n.tr("Load the sidestage") | ||
366 | 76 | text: i18n.tr("3 finger drag from one window to the other") | ||
367 | 77 | } | ||
368 | 78 | PropertyChanges { target: root; textYOffset: -units.gu(15); } | ||
369 | 79 | PropertyChanges { target: tapIcon; visible: false; } | ||
370 | 80 | StateChangeScript { | ||
371 | 81 | script: { | ||
372 | 82 | root.hideError(); | ||
373 | 83 | overlayGesture.show(); | ||
374 | 84 | sideStage.show(); | ||
375 | 85 | } | ||
376 | 86 | } | ||
377 | 87 | }, | ||
378 | 88 | State { | ||
379 | 89 | name: "overlayFinish" | ||
380 | 90 | PropertyChanges { | ||
381 | 91 | target: root | ||
382 | 92 | title: i18n.tr("This is the loaded side stage") | ||
383 | 93 | text: i18n.tr("Tap here to continue.") | ||
384 | 94 | } | ||
385 | 95 | PropertyChanges { target: tapIcon; visible: false; } | ||
386 | 96 | StateChangeScript { | ||
387 | 97 | script: { | ||
388 | 98 | root.hideError(); | ||
389 | 99 | overlayFinish.show(); | ||
390 | 100 | } | ||
391 | 101 | } | ||
392 | 102 | PropertyChanges { target: gestureArea; enabled: false } | ||
393 | 103 | } | ||
394 | 104 | ] | ||
395 | 105 | } | ||
396 | 106 | |||
397 | 107 | foreground { | ||
398 | 108 | children: [ | ||
399 | 109 | Icon { | ||
400 | 110 | id: tapIcon | ||
401 | 111 | width: units.gu(20) | ||
402 | 112 | anchors.verticalCenter: parent.verticalCenter | ||
403 | 113 | anchors.left: parent.horizontalCenter | ||
404 | 114 | source: "../Stages/graphics/sidestage_open.svg" | ||
405 | 115 | scale: teaseAnimation.scale | ||
406 | 116 | }, | ||
407 | 117 | SideStage { | ||
408 | 118 | id: sideStage | ||
409 | 119 | height: parent.height | ||
410 | 120 | x: parent.width - width | ||
411 | 121 | showHint: false | ||
412 | 122 | enableDrag: false | ||
413 | 123 | |||
414 | 124 | Icon { | ||
415 | 125 | name: "tick" | ||
416 | 126 | anchors.verticalCenter: parent.verticalCenter | ||
417 | 127 | x: Math.max(parent.width / 2 - width / 2, 0) | ||
418 | 128 | width: units.gu(8) | ||
419 | 129 | visible: overlayFinish.shown | ||
420 | 130 | } | ||
421 | 131 | |||
422 | 132 | DropArea { | ||
423 | 133 | anchors.fill: parent | ||
424 | 134 | onDropped: { | ||
425 | 135 | root.hideError(); | ||
426 | 136 | internalState.state = "overlayFinish"; | ||
427 | 137 | } | ||
428 | 138 | } | ||
429 | 139 | }, | ||
430 | 140 | Showable { | ||
431 | 141 | id: overlayGesture | ||
432 | 142 | objectName: "overlayGesture" | ||
433 | 143 | anchors.fill: parent | ||
434 | 144 | hides: [ overlayFinish ] | ||
435 | 145 | |||
436 | 146 | opacity: 0 | ||
437 | 147 | shown: false | ||
438 | 148 | showAnimation: SequentialAnimation { | ||
439 | 149 | PropertyAction { target: overlayGesture; property: "opacity"; value: 0 } | ||
440 | 150 | ParallelAnimation { | ||
441 | 151 | PropertyAction { target: overlayGesture; property: "visible"; value: true } | ||
442 | 152 | UbuntuNumberAnimation { target: overlayGesture; property: "opacity"; to: 1 } | ||
443 | 153 | } | ||
444 | 154 | } | ||
445 | 155 | Icon { | ||
446 | 156 | width: units.gu(40) | ||
447 | 157 | anchors.centerIn: parent | ||
448 | 158 | source: "../Stages/graphics/sidestage_drag.svg" | ||
449 | 159 | scale: teaseAnimation.scale | ||
450 | 160 | } | ||
451 | 161 | }, | ||
452 | 162 | Showable { | ||
453 | 163 | id: overlayFinish | ||
454 | 164 | objectName: "overlayFinish" | ||
455 | 165 | anchors.fill: parent | ||
456 | 166 | hides: [ overlayGesture ] | ||
457 | 167 | |||
458 | 168 | opacity: 0 | ||
459 | 169 | shown: false | ||
460 | 170 | showAnimation: SequentialAnimation { | ||
461 | 171 | PropertyAction { target: overlayFinish; property: "opacity"; value: 0 } | ||
462 | 172 | ParallelAnimation { | ||
463 | 173 | PropertyAction { target: overlayFinish; property: "visible"; value: true } | ||
464 | 174 | UbuntuNumberAnimation { target: overlayFinish; property: "opacity"; to: 1 } | ||
465 | 175 | } | ||
466 | 176 | } | ||
467 | 177 | |||
468 | 178 | LocalComponents.Tick { | ||
469 | 179 | objectName: "tickTap" | ||
470 | 180 | anchors { | ||
471 | 181 | left: parent.left | ||
472 | 182 | leftMargin: root.textLeft | ||
473 | 183 | top: parent.top | ||
474 | 184 | topMargin: root.textBottom + units.gu(3) | ||
475 | 185 | } | ||
476 | 186 | onClicked: root.hide() | ||
477 | 187 | } | ||
478 | 188 | }, | ||
479 | 189 | Label { | ||
480 | 190 | anchors { | ||
481 | 191 | left: parent.left | ||
482 | 192 | leftMargin: root.textLeft | ||
483 | 193 | bottom: parent.bottom | ||
484 | 194 | bottomMargin: units.gu(3) | ||
485 | 195 | } | ||
486 | 196 | |||
487 | 197 | text: "Dismiss" | ||
488 | 198 | font.underline: true | ||
489 | 199 | fontSize: "medium" | ||
490 | 200 | |||
491 | 201 | MouseArea { | ||
492 | 202 | anchors { | ||
493 | 203 | fill: parent | ||
494 | 204 | margins: -units.gu(1) | ||
495 | 205 | } | ||
496 | 206 | onClicked: root.finished(); | ||
497 | 207 | } | ||
498 | 208 | } | ||
499 | 209 | |||
500 | 210 | ] | ||
501 | 211 | } | ||
502 | 212 | |||
503 | 213 | TabletSideStageTouchGesture { | ||
504 | 214 | id: gestureArea | ||
505 | 215 | anchors { | ||
506 | 216 | left: parent.left | ||
507 | 217 | top: parent.top | ||
508 | 218 | bottom: parent.bottom | ||
509 | 219 | } | ||
510 | 220 | width: parent.width - sideStage.width | ||
511 | 221 | |||
512 | 222 | onClicked: { | ||
513 | 223 | root.hideError(); | ||
514 | 224 | if (internalState.state !== "overlayGesture") { | ||
515 | 225 | internalState.state = "overlayGesture"; | ||
516 | 226 | } else { | ||
517 | 227 | internalState.state = "initial"; | ||
518 | 228 | } | ||
519 | 229 | } | ||
520 | 230 | |||
521 | 231 | dragComponent: overlayGesture.shown ? dragComponent : null | ||
522 | 232 | Component { | ||
523 | 233 | id: dragComponent | ||
524 | 234 | Icon { | ||
525 | 235 | width: units.gu(20) | ||
526 | 236 | source: "../Stages/graphics/sidestage_open.svg" | ||
527 | 237 | } | ||
528 | 238 | } | ||
529 | 239 | |||
530 | 240 | onDropped: { | ||
531 | 241 | // still in the gesture state after dropping? | ||
532 | 242 | if (!overlayFinish.shown) { | ||
533 | 243 | root.showError(); | ||
534 | 244 | } | ||
535 | 245 | } | ||
536 | 246 | onCancelled: { | ||
537 | 247 | root.showError(); | ||
538 | 248 | } | ||
539 | 249 | } | ||
540 | 250 | } | ||
541 | 0 | 251 | ||
542 | === modified file 'qml/Tutorial/TutorialPage.qml' | |||
543 | --- qml/Tutorial/TutorialPage.qml 2015-07-15 15:07:19 +0000 | |||
544 | +++ qml/Tutorial/TutorialPage.qml 2016-03-11 20:21:06 +0000 | |||
545 | @@ -45,6 +45,9 @@ | |||
546 | 45 | // The text label bottom, so you can position elements relative to it | 45 | // The text label bottom, so you can position elements relative to it |
547 | 46 | readonly property real textBottom: Math.max(textLabel.y + textLabel.height, errorTextLabel.y + errorTextLabel.height) | 46 | readonly property real textBottom: Math.max(textLabel.y + textLabel.height, errorTextLabel.y + errorTextLabel.height) |
548 | 47 | 47 | ||
549 | 48 | // The text label bottom, so you can position elements relative to it | ||
550 | 49 | readonly property real textLeft: Math.max(textLabel.x, errorTextLabel.x) | ||
551 | 50 | |||
552 | 48 | // The MouseArea that eats events (so you can adjust size as you will) | 51 | // The MouseArea that eats events (so you can adjust size as you will) |
553 | 49 | property alias mouseArea: mouseArea | 52 | property alias mouseArea: mouseArea |
554 | 50 | 53 | ||
555 | @@ -61,12 +64,16 @@ | |||
556 | 61 | errorTimer.start(); | 64 | errorTimer.start(); |
557 | 62 | } | 65 | } |
558 | 63 | 66 | ||
559 | 67 | function hideError() { | ||
560 | 68 | errorTimer.stop(); | ||
561 | 69 | } | ||
562 | 70 | |||
563 | 64 | //// | 71 | //// |
564 | 65 | 72 | ||
565 | 66 | visible: false | 73 | visible: false |
566 | 67 | shown: false | 74 | shown: false |
567 | 68 | 75 | ||
569 | 69 | property real _foregroundHideOpacity | 76 | property real _foregroundHideOpacity: 1.0 |
570 | 70 | 77 | ||
571 | 71 | showAnimation: StandardAnimation { | 78 | showAnimation: StandardAnimation { |
572 | 72 | property: root.backgroundFadesIn ? "opacity" : "_foregroundHideOpacity" | 79 | property: root.backgroundFadesIn ? "opacity" : "_foregroundHideOpacity" |
573 | 73 | 80 | ||
574 | === modified file 'tests/qmltests/Stages/tst_TabletStage.qml' | |||
575 | --- tests/qmltests/Stages/tst_TabletStage.qml 2016-03-11 20:21:04 +0000 | |||
576 | +++ tests/qmltests/Stages/tst_TabletStage.qml 2016-03-11 20:21:06 +0000 | |||
577 | @@ -21,6 +21,7 @@ | |||
578 | 21 | import Unity.Application 0.1 | 21 | import Unity.Application 0.1 |
579 | 22 | import Unity.Test 0.1 | 22 | import Unity.Test 0.1 |
580 | 23 | import Utils 0.1 | 23 | import Utils 0.1 |
581 | 24 | import AccountsService 0.1 | ||
582 | 24 | 25 | ||
583 | 25 | import ".." | 26 | import ".." |
584 | 26 | import "../../../qml/Stages" | 27 | import "../../../qml/Stages" |
585 | @@ -34,6 +35,11 @@ | |||
586 | 34 | 35 | ||
587 | 35 | property var greeter: { fullyShown: true } | 36 | property var greeter: { fullyShown: true } |
588 | 36 | 37 | ||
589 | 38 | Component.onCompleted: { | ||
590 | 39 | theme.name = "Ubuntu.Components.Themes.SuruGradient" | ||
591 | 40 | tabletStageLoader.active = true; | ||
592 | 41 | } | ||
593 | 42 | |||
594 | 37 | Loader { | 43 | Loader { |
595 | 38 | id: tabletStageLoader | 44 | id: tabletStageLoader |
596 | 39 | 45 | ||
597 | @@ -43,6 +49,7 @@ | |||
598 | 43 | height: units.gu(100*0.7) | 49 | height: units.gu(100*0.7) |
599 | 44 | 50 | ||
600 | 45 | focus: true | 51 | focus: true |
601 | 52 | active: false | ||
602 | 46 | 53 | ||
603 | 47 | property bool itemDestroyed: false | 54 | property bool itemDestroyed: false |
604 | 48 | sourceComponent: Component { | 55 | sourceComponent: Component { |
605 | @@ -91,6 +98,11 @@ | |||
606 | 91 | } | 98 | } |
607 | 92 | 99 | ||
608 | 93 | Button { | 100 | Button { |
609 | 101 | text: "Show Tutorial" | ||
610 | 102 | onClicked: AccountsService.demoEdges = true | ||
611 | 103 | } | ||
612 | 104 | |||
613 | 105 | Button { | ||
614 | 94 | text: testCase.sideStage ? testCase.sideStage.shown ? "Hide Side-stage" : "Show Side-stage" : "" | 106 | text: testCase.sideStage ? testCase.sideStage.shown ? "Hide Side-stage" : "Show Side-stage" : "" |
615 | 95 | enabled: testCase.sideStage | 107 | enabled: testCase.sideStage |
616 | 96 | onClicked: { | 108 | onClicked: { |
617 | 97 | 109 | ||
618 | === modified file 'tests/qmltests/Tutorial/tst_Tutorial.qml' | |||
619 | --- tests/qmltests/Tutorial/tst_Tutorial.qml 2015-09-02 07:42:27 +0000 | |||
620 | +++ tests/qmltests/Tutorial/tst_Tutorial.qml 2016-03-11 20:21:06 +0000 | |||
621 | @@ -19,31 +19,18 @@ | |||
622 | 19 | import AccountsService 0.1 | 19 | import AccountsService 0.1 |
623 | 20 | import IntegratedLightDM 0.1 as LightDM | 20 | import IntegratedLightDM 0.1 as LightDM |
624 | 21 | import Ubuntu.Components 1.3 | 21 | import Ubuntu.Components 1.3 |
625 | 22 | import Ubuntu.Components.ListItems 1.3 as ListItem | ||
626 | 22 | import Unity.Application 0.1 | 23 | import Unity.Application 0.1 |
627 | 23 | import Unity.Test 0.1 as UT | 24 | import Unity.Test 0.1 as UT |
628 | 24 | 25 | ||
629 | 25 | import "../../../qml" | 26 | import "../../../qml" |
630 | 27 | import "../../../qml/Components" | ||
631 | 26 | 28 | ||
633 | 27 | Item { | 29 | Rectangle { |
634 | 28 | id: root | 30 | id: root |
653 | 29 | width: shellLoader.width + buttons.width | 31 | color: "grey" |
654 | 30 | height: shellLoader.height | 32 | width: units.gu(100) + controlRect.width |
655 | 31 | 33 | height: units.gu(71) | |
638 | 32 | QtObject { | ||
639 | 33 | id: applicationArguments | ||
640 | 34 | |||
641 | 35 | function hasGeometry() { | ||
642 | 36 | return false; | ||
643 | 37 | } | ||
644 | 38 | |||
645 | 39 | function width() { | ||
646 | 40 | return 0; | ||
647 | 41 | } | ||
648 | 42 | |||
649 | 43 | function height() { | ||
650 | 44 | return 0; | ||
651 | 45 | } | ||
652 | 46 | } | ||
656 | 47 | 34 | ||
657 | 48 | Component.onCompleted: { | 35 | Component.onCompleted: { |
658 | 49 | // must set the mock mode before loading the Shell | 36 | // must set the mock mode before loading the Shell |
659 | @@ -52,38 +39,86 @@ | |||
660 | 52 | shellLoader.active = true; | 39 | shellLoader.active = true; |
661 | 53 | } | 40 | } |
662 | 54 | 41 | ||
667 | 55 | Row { | 42 | Item { |
668 | 56 | spacing: 0 | 43 | id: shellContainer |
669 | 57 | anchors.fill: parent | 44 | anchors.left: root.left |
670 | 58 | 45 | anchors.right: controlRect.left | |
671 | 46 | anchors.top: root.top | ||
672 | 47 | anchors.bottom: root.bottom | ||
673 | 59 | Loader { | 48 | Loader { |
674 | 60 | id: shellLoader | 49 | id: shellLoader |
675 | 50 | focus: true | ||
676 | 51 | |||
677 | 52 | anchors.centerIn: parent | ||
678 | 53 | |||
679 | 54 | property int shellOrientation: Qt.PortraitOrientation | ||
680 | 55 | property int nativeOrientation: Qt.PortraitOrientation | ||
681 | 56 | property int primaryOrientation: Qt.PortraitOrientation | ||
682 | 57 | |||
683 | 58 | state: usageScenarioSelector.model[usageScenarioSelector.selectedIndex] | ||
684 | 59 | states: [ | ||
685 | 60 | State { | ||
686 | 61 | name: "phone" | ||
687 | 62 | PropertyChanges { | ||
688 | 63 | target: shellLoader | ||
689 | 64 | width: units.gu(40) | ||
690 | 65 | height: units.gu(71) | ||
691 | 66 | } | ||
692 | 67 | }, | ||
693 | 68 | State { | ||
694 | 69 | name: "tablet" | ||
695 | 70 | PropertyChanges { | ||
696 | 71 | target: shellLoader | ||
697 | 72 | width: units.gu(100) | ||
698 | 73 | height: units.gu(71) | ||
699 | 74 | shellOrientation: Qt.LandscapeOrientation | ||
700 | 75 | nativeOrientation: Qt.LandscapeOrientation | ||
701 | 76 | primaryOrientation: Qt.LandscapeOrientation | ||
702 | 77 | } | ||
703 | 78 | } | ||
704 | 79 | ] | ||
705 | 61 | 80 | ||
706 | 62 | active: false | 81 | active: false |
707 | 63 | width: units.gu(40) | ||
708 | 64 | height: units.gu(71) | ||
709 | 65 | |||
710 | 66 | property bool itemDestroyed: false | 82 | property bool itemDestroyed: false |
711 | 67 | sourceComponent: Component { | 83 | sourceComponent: Component { |
712 | 68 | Shell { | 84 | Shell { |
713 | 85 | id: __shell | ||
714 | 69 | property string indicatorProfile: "phone" | 86 | property string indicatorProfile: "phone" |
715 | 70 | 87 | ||
716 | 88 | usageScenario: shellLoader.state | ||
717 | 89 | nativeWidth: width | ||
718 | 90 | nativeHeight: height | ||
719 | 71 | Component.onDestruction: { | 91 | Component.onDestruction: { |
720 | 72 | shellLoader.itemDestroyed = true; | 92 | shellLoader.itemDestroyed = true; |
721 | 73 | } | 93 | } |
722 | 94 | orientation: shellLoader.shellOrientation | ||
723 | 95 | orientations: Orientations { | ||
724 | 96 | native_: shellLoader.nativeOrientation | ||
725 | 97 | primary: shellLoader.primaryOrientation | ||
726 | 98 | } | ||
727 | 74 | } | 99 | } |
728 | 75 | } | 100 | } |
729 | 76 | } | 101 | } |
736 | 77 | 102 | } | |
737 | 78 | Rectangle { | 103 | |
738 | 79 | id: buttons | 104 | Rectangle { |
739 | 80 | color: "white" | 105 | id: controlRect |
740 | 81 | width: units.gu(30) | 106 | anchors.top: root.top |
741 | 82 | height: shellLoader.height | 107 | anchors.bottom: root.bottom |
742 | 108 | anchors.right: root.right | ||
743 | 109 | width: units.gu(30) | ||
744 | 110 | color: "darkgrey" | ||
745 | 111 | |||
746 | 112 | Flickable { | ||
747 | 113 | id: controls | ||
748 | 114 | contentHeight: controlCol.height | ||
749 | 115 | anchors.fill: parent | ||
750 | 83 | 116 | ||
751 | 84 | Column { | 117 | Column { |
752 | 118 | id: controlCol | ||
753 | 85 | anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) } | 119 | anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) } |
754 | 86 | spacing: units.gu(1) | 120 | spacing: units.gu(1) |
755 | 121 | |||
756 | 87 | Row { | 122 | Row { |
757 | 88 | anchors { left: parent.left; right: parent.right } | 123 | anchors { left: parent.left; right: parent.right } |
758 | 89 | Button { | 124 | Button { |
759 | @@ -97,6 +132,13 @@ | |||
760 | 97 | } | 132 | } |
761 | 98 | } | 133 | } |
762 | 99 | } | 134 | } |
763 | 135 | ListItem.ItemSelector { | ||
764 | 136 | id: usageScenarioSelector | ||
765 | 137 | anchors { left: parent.left; right: parent.right } | ||
766 | 138 | activeFocusOnPress: false | ||
767 | 139 | text: "Usage scenario" | ||
768 | 140 | model: ["phone", "tablet"] | ||
769 | 141 | } | ||
770 | 100 | } | 142 | } |
771 | 101 | } | 143 | } |
772 | 102 | } | 144 | } |
773 | 103 | 145 | ||
774 | === modified file 'tests/qmltests/tst_Shell.qml' | |||
775 | --- tests/qmltests/tst_Shell.qml 2016-03-11 20:21:04 +0000 | |||
776 | +++ tests/qmltests/tst_Shell.qml 2016-03-11 20:21:06 +0000 | |||
777 | @@ -141,11 +141,13 @@ | |||
778 | 141 | anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) } | 141 | anchors { left: parent.left; right: parent.right; top: parent.top; margins: units.gu(1) } |
779 | 142 | spacing: units.gu(1) | 142 | spacing: units.gu(1) |
780 | 143 | 143 | ||
782 | 144 | Row { | 144 | Column { |
783 | 145 | spacing: units.gu(1) | 145 | spacing: units.gu(1) |
784 | 146 | anchors { left: parent.left; right: parent.right } | ||
785 | 146 | Button { | 147 | Button { |
786 | 147 | text: "Show Greeter" | 148 | text: "Show Greeter" |
787 | 148 | activeFocusOnPress: false | 149 | activeFocusOnPress: false |
788 | 150 | anchors { left: parent.left; right: parent.right } | ||
789 | 149 | onClicked: { | 151 | onClicked: { |
790 | 150 | if (shellLoader.status !== Loader.Ready) | 152 | if (shellLoader.status !== Loader.Ready) |
791 | 151 | return; | 153 | return; |
792 | @@ -159,6 +161,7 @@ | |||
793 | 159 | Button { | 161 | Button { |
794 | 160 | text: "Hide Greeter" | 162 | text: "Hide Greeter" |
795 | 161 | activeFocusOnPress: false | 163 | activeFocusOnPress: false |
796 | 164 | anchors { left: parent.left; right: parent.right } | ||
797 | 162 | onClicked: { | 165 | onClicked: { |
798 | 163 | if (shellLoader.status !== Loader.Ready) | 166 | if (shellLoader.status !== Loader.Ready) |
799 | 164 | return; | 167 | return; |
800 | @@ -169,6 +172,17 @@ | |||
801 | 169 | } | 172 | } |
802 | 170 | } | 173 | } |
803 | 171 | } | 174 | } |
804 | 175 | Button { | ||
805 | 176 | text: "Restart Tutorial" | ||
806 | 177 | anchors { left: parent.left; right: parent.right } | ||
807 | 178 | onClicked: { | ||
808 | 179 | if (shellLoader.status !== Loader.Ready) | ||
809 | 180 | return; | ||
810 | 181 | |||
811 | 182 | AccountsService.demoEdges = false; | ||
812 | 183 | AccountsService.demoEdges = true; | ||
813 | 184 | } | ||
814 | 185 | } | ||
815 | 172 | } | 186 | } |
816 | 173 | ListItem.ItemSelector { | 187 | ListItem.ItemSelector { |
817 | 174 | anchors { left: parent.left; right: parent.right } | 188 | anchors { left: parent.left; right: parent.right } |
FAILED: Continuous integration, rev:2040 /unity8- jenkins. ubuntu. com/job/ lp-unity8- 1-ci/107/
https:/
Executed test runs:
Click here to trigger a rebuild: /unity8- jenkins. ubuntu. com/job/ lp-unity8- 1-ci/107/ rebuild
https:/