on 551c708 help sign in
unity8/qml/Components/EdgeDemo.qml
239 lines 7.5 kB history raw
1/*
2 * Copyright (C) 2013 Canonical, Ltd.
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; version 3.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
17import AccountsService 0.1
18import LightDM 0.1 as LightDM
19import QtQuick 2.0
21Item {
22 id: demo
24 property Item greeter
25 property Item dash
26 property Item launcher
27 property Item indicators
28 property Item underlay
30 property bool launcherEnabled: true
31 property bool dashEnabled: true
32 property bool panelEnabled: true
33 property bool panelContentEnabled: true
34 property bool running: !launcherEnabled || !dashEnabled || !panelEnabled || !panelContentEnabled
36 property bool paused: false
38 onPausedChanged: {
39 if (d.rightEdgeDemo) d.rightEdgeDemo.paused = paused
40 if (d.topEdgeDemo) d.topEdgeDemo.paused = paused
41 if (d.bottomEdgeDemo) d.bottomEdgeDemo.paused = paused
42 if (d.leftEdgeDemo) d.leftEdgeDemo.paused = paused
43 if (d.finalEdgeDemo) d.finalEdgeDemo.paused = paused
44 }
46 function hideEdgeDemoInShell() {
47 AccountsService.demoEdges = false;
48 stopDemo();
49 }
51 function hideEdgeDemoInGreeter() {
52 // TODO: AccountsService.demoEdges = false as lightdm user
53 }
55 function hideEdgeDemos() {
56 hideEdgeDemoInGreeter();
57 hideEdgeDemoInShell();
58 }
60 function stopDemo() {
61 launcherEnabled = true
62 dashEnabled = true
63 panelEnabled = true
64 panelContentEnabled = true
65 if (d.rightEdgeDemo) d.rightEdgeDemo.destroy()
66 if (d.topEdgeDemo) d.topEdgeDemo.destroy()
67 if (d.bottomEdgeDemo) d.bottomEdgeDemo.destroy()
68 if (d.leftEdgeDemo) d.leftEdgeDemo.destroy()
69 if (d.finalEdgeDemo) d.finalEdgeDemo.destroy()
70 }
72 function startDemo() {
73 if (!d.overlay) {
74 d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
75 }
77 launcherEnabled = false;
78 dashEnabled = false;
79 panelEnabled = false;
80 panelContentEnabled = false;
82 // Begin with either greeter or dash, depending on which is visible
83 if (greeter && greeter.shown) {
84 startRightEdgeDemo()
85 } else {
86 startTopEdgeDemo()
87 }
88 }
90 QtObject {
91 id: d
92 property Component overlay
93 property QtObject rightEdgeDemo
94 property QtObject topEdgeDemo
95 property QtObject bottomEdgeDemo
96 property QtObject leftEdgeDemo
97 property QtObject finalEdgeDemo
98 property bool showEdgeDemo: AccountsService.demoEdges
99 property bool showEdgeDemoInGreeter: AccountsService.demoEdges // TODO: AccountsService.demoEdges as lightdm user
101 onShowEdgeDemoChanged: {
102 stopDemo()
103 if (d.showEdgeDemo) {
104 startDemo()
105 }
106 }
107 }
109 function startRightEdgeDemo() {
110 if (demo.greeter) {
111 d.rightEdgeDemo = d.overlay.createObject(demo.greeter, {
112 "edge": "right",
113 "title": i18n.tr("Right edge"),
114 "text": i18n.tr("Try swiping from the right edge to unlock the phone"),
115 "anchors.fill": demo.greeter,
116 });
117 }
118 if (d.rightEdgeDemo) {
119 d.rightEdgeDemo.onSkip.connect(demo.hideEdgeDemos)
120 } else {
121 stopDemo();
122 }
123 }
125 Connections {
126 target: demo.greeter
128 function hide() {
129 if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
130 d.rightEdgeDemo.hide()
131 hideEdgeDemoInGreeter()
132 startTopEdgeDemo()
133 }
134 }
136 onUnlocked: hide()
137 onShownChanged: if (!greeter.shown) hide()
138 }
140 function startTopEdgeDemo() {
141 demo.panelEnabled = true;
142 if (demo.dash && demo.underlay) {
143 d.topEdgeDemo = d.overlay.createObject(demo.underlay, {
144 "edge": "top",
145 "title": i18n.tr("Top edge"),
146 "text": i18n.tr("Try swiping from the top edge to access the indicators"),
147 "anchors.fill": demo.dash,
148 });
149 }
150 if (d.topEdgeDemo) {
151 d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
152 } else {
153 stopDemo();
154 }
155 }
157 Connections {
158 target: demo.indicators
159 onFullyOpenedChanged: {
160 if (d.topEdgeDemo && d.topEdgeDemo.available && demo.indicators.fullyOpened) {
161 d.topEdgeDemo.hideNow()
162 startBottomEdgeDemo()
163 }
164 }
165 }
167 function startBottomEdgeDemo() {
168 if (demo.indicators) {
169 d.bottomEdgeDemo = d.overlay.createObject(demo.indicators, {
170 "edge": "bottom",
171 "title": i18n.tr("Close"),
172 "text": i18n.tr("Swipe up again to close the settings screen"),
173 "anchors.fill": demo.indicators.content,
174 });
175 }
176 if (d.bottomEdgeDemo) {
177 d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
178 } else {
179 stopDemo();
180 }
181 }
183 Connections {
184 target: demo.indicators
185 onPartiallyOpenedChanged: {
186 if (d.bottomEdgeDemo && d.bottomEdgeDemo.available && !demo.indicators.partiallyOpened && !demo.indicators.fullyOpened) {
187 d.bottomEdgeDemo.hideNow()
188 startLeftEdgeDemo()
189 }
190 }
191 }
193 function startLeftEdgeDemo() {
194 demo.panelEnabled = false;
195 demo.launcherEnabled = true;
196 if (demo.dash && demo.underlay) {
197 d.leftEdgeDemo = d.overlay.createObject(demo.underlay, {
198 "edge": "left",
199 "title": i18n.tr("Left edge"),
200 "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
201 "anchors.fill": demo.dash,
202 });
203 }
204 if (d.leftEdgeDemo) {
205 d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
206 } else {
207 stopDemo();
208 }
209 }
211 Connections {
212 target: demo.launcher
213 onStateChanged: {
214 if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
215 d.leftEdgeDemo.hide()
216 launcher.hide()
217 startFinalEdgeDemo()
218 }
219 }
220 }
222 function startFinalEdgeDemo() {
223 demo.launcherEnabled = false;
224 if (demo.dash && demo.underlay) {
225 d.finalEdgeDemo = d.overlay.createObject(demo.underlay, {
226 "edge": "none",
227 "title": i18n.tr("Well done"),
228 "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap anywhere to start"),
229 "anchors.fill": demo.dash,
230 "showSkip": false,
231 });
232 }
233 if (d.finalEdgeDemo) {
234 d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
235 } else {
236 stopDemo();
237 }
238 }