@@ -1,253 +0,0 @@
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− */
16−
17−import AccountsService 0.1
18−import LightDM 0.1 as LightDM
19−import QtQuick 2.0
20−import Ubuntu.Components 1.1
21−
22−Item {
23− id: demo
24−
25− property Item greeter
26− property Item launcher
27− property Item panel
28− property Item stages
29−
30− property bool launcherEnabled: true
31− property bool stagesEnabled: true
32− property bool panelEnabled: true
33− property bool panelContentEnabled: true
34− property bool running: !launcherEnabled || !stagesEnabled || !panelEnabled || !panelContentEnabled
35−
36− property bool paused: false
37−
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− }
45−
46− function hideEdgeDemoInShell() {
47− AccountsService.demoEdges = false;
48− stopDemo();
49− }
50−
51− function hideEdgeDemoInGreeter() {
52− // TODO: AccountsService.demoEdges = false as lightdm user
53− }
54−
55− function hideEdgeDemos() {
56− hideEdgeDemoInGreeter();
57− hideEdgeDemoInShell();
58− }
59−
60− function stopDemo() {
61− launcherEnabled = true
62− stagesEnabled = true
63− panelEnabled = true
64− panelContentEnabled = true
65−
66− // Use a tiny delay for these destroy() calls because if a lot is
67− // happening at once (like creating and being destroyed in same event
68− // loop, as might happen when answering a call while demo is open),
69− // the destroy() call will be ignored.
70− if (d.rightEdgeDemo) d.rightEdgeDemo.destroy(1);
71− if (d.topEdgeDemo) d.topEdgeDemo.destroy(1);
72− if (d.bottomEdgeDemo) d.bottomEdgeDemo.destroy(1);
73− if (d.leftEdgeDemo) d.leftEdgeDemo.destroy(1);
74− if (d.finalEdgeDemo) d.finalEdgeDemo.destroy(1);
75− }
76−
77− function startDemo() {
78− if (!d.overlay) {
79− d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
80− }
81−
82− launcherEnabled = false;
83− stagesEnabled = false;
84− panelEnabled = false;
85− panelContentEnabled = false;
86−
87− // Begin with either greeter or top, depending on which is visible
88− if (greeter && greeter.shown) {
89− startRightEdgeDemo()
90− } else {
91− startTopEdgeDemo()
92− }
93− }
94−
95− QtObject {
96− id: d
97− property Component overlay
98− property QtObject rightEdgeDemo
99− property QtObject topEdgeDemo
100− property QtObject bottomEdgeDemo
101− property QtObject leftEdgeDemo
102− property QtObject finalEdgeDemo
103− property bool showEdgeDemo: AccountsService.demoEdges
104− property bool showEdgeDemoInGreeter: AccountsService.demoEdges // TODO: AccountsService.demoEdges as lightdm user
105−
106− function restartDemo() {
107− stopDemo()
108− if (d.showEdgeDemo) {
109− startDemo()
110− }
111− }
112−
113− onShowEdgeDemoChanged: restartDemo()
114− }
115−
116− Connections {
117− target: i18n
118− onLanguageChanged: d.restartDemo()
119− }
120−
121− function startRightEdgeDemo() {
122− if (demo.greeter) {
123− d.rightEdgeDemo = d.overlay.createObject(demo.greeter, {
124− "edge": "right",
125− "title": i18n.tr("Right edge"),
126− "text": i18n.tr("Try swiping from the right edge to unlock the phone"),
127− "anchors.fill": demo.greeter,
128− });
129− }
130− if (d.rightEdgeDemo) {
131− d.rightEdgeDemo.onSkip.connect(demo.hideEdgeDemos)
132− } else {
133− stopDemo();
134− }
135− }
136−
137− Connections {
138− target: demo.greeter
139−
140− function hide() {
141− if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
142− d.rightEdgeDemo.hide()
143− hideEdgeDemoInGreeter()
144− startTopEdgeDemo()
145− }
146− }
147−
148− onShownChanged: if (!greeter.shown) hide()
149− }
150−
151− function startTopEdgeDemo() {
152− demo.panelEnabled = true;
153− if (demo.stages) {
154− d.topEdgeDemo = d.overlay.createObject(demo.panel, {
155− "edge": "top",
156− "title": i18n.tr("Top edge"),
157− "text": i18n.tr("Try swiping from the top edge to access the indicators"),
158− "anchors.fill": demo.panel,
159− });
160− }
161− if (d.topEdgeDemo) {
162− d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
163− } else {
164− stopDemo();
165− }
166− }
167−
168− Connections {
169− target: demo.panel.indicators
170− onFullyOpenedChanged: {
171− if (d.topEdgeDemo && d.topEdgeDemo.available && demo.panel.indicators.fullyOpened) {
172− d.topEdgeDemo.hideNow()
173− startBottomEdgeDemo()
174− }
175− }
176− }
177−
178− function startBottomEdgeDemo() {
179− if (demo.panel.indicators) {
180− d.bottomEdgeDemo = d.overlay.createObject(demo.panel.indicators, {
181− "edge": "bottom",
182− "title": i18n.tr("Close"),
183− "text": i18n.tr("Swipe up again to close the settings screen"),
184− "anchors.fill": demo.panel.indicators,
185− });
186− }
187− if (d.bottomEdgeDemo) {
188− d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
189− } else {
190− stopDemo();
191− }
192− }
193−
194− Connections {
195− target: demo.panel.indicators
196− onPartiallyOpenedChanged: {
197− if (d.bottomEdgeDemo &&
198− d.bottomEdgeDemo.available &&
199− !demo.panel.indicators.partiallyOpened &&
200− !demo.panel.indicators.fullyOpened) {
201− d.bottomEdgeDemo.hideNow()
202− startLeftEdgeDemo()
203− }
204− }
205− }
206−
207− function startLeftEdgeDemo() {
208− demo.panelEnabled = false;
209− demo.launcherEnabled = true;
210− if (demo.stages) {
211− d.leftEdgeDemo = d.overlay.createObject(demo.stages, {
212− "edge": "left",
213− "title": i18n.tr("Left edge"),
214− "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
215− "anchors.fill": demo.stages,
216− });
217− }
218− if (d.leftEdgeDemo) {
219− d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
220− } else {
221− stopDemo();
222− }
223− }
224−
225− Connections {
226− target: demo.launcher
227− onStateChanged: {
228− if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
229− d.leftEdgeDemo.hide()
230− launcher.hide()
231− startFinalEdgeDemo()
232− }
233− }
234− }
235−
236− function startFinalEdgeDemo() {
237− demo.launcherEnabled = false;
238− if (demo.stages) {
239− d.finalEdgeDemo = d.overlay.createObject(demo.stages, {
240− "edge": "none",
241− "title": i18n.tr("Well done"),
242− "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap on the screen to start"),
243− "anchors.fill": demo.stages,
244− "showSkip": false,
245− });
246− }
247− if (d.finalEdgeDemo) {
248− d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
249− } else {
250− stopDemo();
251− }
252− }
253−}