Unity 8
 All Classes Functions Properties
EdgeDemo.qml
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 
21 Item {
22  id: demo
23 
24  property Item greeter
25  property Item dash
26  property Item launcher
27  property Item indicators
28  property Item underlay
29 
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
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  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  }
71 
72  function startDemo() {
73  if (!d.overlay) {
74  d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
75  }
76 
77  launcherEnabled = false;
78  dashEnabled = false;
79  panelEnabled = false;
80  panelContentEnabled = false;
81 
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  }
89 
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
100 
101  onShowEdgeDemoChanged: {
102  stopDemo()
103  if (d.showEdgeDemo) {
104  startDemo()
105  }
106  }
107  }
108 
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  }
124 
125  Connections {
126  target: demo.greeter
127 
128  function hide() {
129  if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
130  d.rightEdgeDemo.hide()
131  hideEdgeDemoInGreeter()
132  startTopEdgeDemo()
133  }
134  }
135 
136  onUnlocked: hide()
137  onShownChanged: if (!greeter.shown) hide()
138  }
139 
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  }
156 
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  }
166 
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  }
182 
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  }
192 
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  }
210 
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  }
221 
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 on the screen 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  }
239 }