on 5b03213 help sign in
unity8/Components/EdgeDemo.qml
238 lines 7.4 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
35 property bool paused: false
37 onPausedChanged: {
38 if (d.rightEdgeDemo) d.rightEdgeDemo.paused = paused
39 if (d.topEdgeDemo) d.topEdgeDemo.paused = paused
40 if (d.bottomEdgeDemo) d.bottomEdgeDemo.paused = paused
41 if (d.leftEdgeDemo) d.leftEdgeDemo.paused = paused
42 if (d.finalEdgeDemo) d.finalEdgeDemo.paused = paused
43 }
45 function hideEdgeDemoInShell() {
46 AccountsService.demoEdges = false;
47 stopDemo();
48 }
50 function hideEdgeDemoInGreeter() {
51 // TODO: AccountsService.demoEdges = false as lightdm user
52 }
54 function hideEdgeDemos() {
55 hideEdgeDemoInGreeter();
56 hideEdgeDemoInShell();
57 }
59 function stopDemo() {
60 launcherEnabled = true
61 dashEnabled = true
62 panelEnabled = true
63 panelContentEnabled = true
64 if (d.rightEdgeDemo) d.rightEdgeDemo.destroy()
65 if (d.topEdgeDemo) d.topEdgeDemo.destroy()
66 if (d.bottomEdgeDemo) d.bottomEdgeDemo.destroy()
67 if (d.leftEdgeDemo) d.leftEdgeDemo.destroy()
68 if (d.finalEdgeDemo) d.finalEdgeDemo.destroy()
69 }
71 function startDemo() {
72 if (!d.overlay) {
73 d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
74 }
76 launcherEnabled = false;
77 dashEnabled = false;
78 panelEnabled = false;
79 panelContentEnabled = false;
81 // Begin with either greeter or dash, depending on which is visible
82 if (greeter && greeter.shown) {
83 startRightEdgeDemo()
84 } else {
85 startTopEdgeDemo()
86 }
87 }
89 QtObject {
90 id: d
91 property Component overlay
92 property QtObject rightEdgeDemo
93 property QtObject topEdgeDemo
94 property QtObject bottomEdgeDemo
95 property QtObject leftEdgeDemo
96 property QtObject finalEdgeDemo
97 property bool showEdgeDemo: AccountsService.demoEdges
98 property bool showEdgeDemoInGreeter: AccountsService.demoEdges // TODO: AccountsService.demoEdges as lightdm user
100 onShowEdgeDemoChanged: {
101 stopDemo()
102 if (d.showEdgeDemo) {
103 startDemo()
104 }
105 }
106 }
108 function startRightEdgeDemo() {
109 if (demo.greeter) {
110 d.rightEdgeDemo = d.overlay.createObject(demo.greeter, {
111 "edge": "right",
112 "title": i18n.tr("Right edge"),
113 "text": i18n.tr("Try swiping from the right edge to unlock the phone"),
114 "anchors.fill": demo.greeter,
115 });
116 }
117 if (d.rightEdgeDemo) {
118 d.rightEdgeDemo.onSkip.connect(demo.hideEdgeDemos)
119 } else {
120 stopDemo();
121 }
122 }
124 Connections {
125 target: demo.greeter
127 function hide() {
128 if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
129 d.rightEdgeDemo.hide()
130 hideEdgeDemoInGreeter()
131 startTopEdgeDemo()
132 }
133 }
135 onUnlocked: hide()
136 onShownChanged: if (!greeter.shown) hide()
137 }
139 function startTopEdgeDemo() {
140 demo.panelEnabled = true;
141 if (demo.dash && demo.underlay) {
142 d.topEdgeDemo = d.overlay.createObject(demo.underlay, {
143 "edge": "top",
144 "title": i18n.tr("Top edge"),
145 "text": i18n.tr("Try swiping from the top edge to access the indicators"),
146 "anchors.fill": demo.dash,
147 });
148 }
149 if (d.topEdgeDemo) {
150 d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
151 } else {
152 stopDemo();
153 }
154 }
156 Connections {
157 target: demo.indicators
158 onFullyOpenedChanged: {
159 if (d.topEdgeDemo && d.topEdgeDemo.available && demo.indicators.fullyOpened) {
160 d.topEdgeDemo.hideNow()
161 startBottomEdgeDemo()
162 }
163 }
164 }
166 function startBottomEdgeDemo() {
167 if (demo.indicators) {
168 d.bottomEdgeDemo = d.overlay.createObject(demo.indicators, {
169 "edge": "bottom",
170 "title": i18n.tr("Close"),
171 "text": i18n.tr("Swipe up again to close the settings screen"),
172 "anchors.fill": demo.indicators.content,
173 });
174 }
175 if (d.bottomEdgeDemo) {
176 d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
177 } else {
178 stopDemo();
179 }
180 }
182 Connections {
183 target: demo.indicators
184 onPartiallyOpenedChanged: {
185 if (d.bottomEdgeDemo && d.bottomEdgeDemo.available && !demo.indicators.partiallyOpened && !demo.indicators.fullyOpened) {
186 d.bottomEdgeDemo.hideNow()
187 startLeftEdgeDemo()
188 }
189 }
190 }
192 function startLeftEdgeDemo() {
193 demo.panelEnabled = false;
194 demo.launcherEnabled = true;
195 if (demo.dash && demo.underlay) {
196 d.leftEdgeDemo = d.overlay.createObject(demo.underlay, {
197 "edge": "left",
198 "title": i18n.tr("Left edge"),
199 "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
200 "anchors.fill": demo.dash,
201 });
202 }
203 if (d.leftEdgeDemo) {
204 d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
205 } else {
206 stopDemo();
207 }
208 }
210 Connections {
211 target: demo.launcher
212 onStateChanged: {
213 if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
214 d.leftEdgeDemo.hide()
215 launcher.hide()
216 startFinalEdgeDemo()
217 }
218 }
219 }
221 function startFinalEdgeDemo() {
222 demo.launcherEnabled = false;
223 if (demo.dash && demo.underlay) {
224 d.finalEdgeDemo = d.overlay.createObject(demo.underlay, {
225 "edge": "none",
226 "title": i18n.tr("Well done"),
227 "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap anywhere to start"),
228 "anchors.fill": demo.dash,
229 "showSkip": false,
230 });
231 }
232 if (d.finalEdgeDemo) {
233 d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
234 } else {
235 stopDemo();
236 }
237 }