Unity 8
 All Classes Functions
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 launcher
26  property Item panel
27  property Item stages
28 
29  property bool launcherEnabled: true
30  property bool stagesEnabled: true
31  property bool panelEnabled: true
32  property bool panelContentEnabled: true
33  property bool running: !launcherEnabled || !stagesEnabled || !panelEnabled || !panelContentEnabled
34 
35  property bool paused: false
36 
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  }
44 
45  function hideEdgeDemoInShell() {
46  AccountsService.demoEdges = false;
47  stopDemo();
48  }
49 
50  function hideEdgeDemoInGreeter() {
51  // TODO: AccountsService.demoEdges = false as lightdm user
52  }
53 
54  function hideEdgeDemos() {
55  hideEdgeDemoInGreeter();
56  hideEdgeDemoInShell();
57  }
58 
59  function stopDemo() {
60  launcherEnabled = true
61  stagesEnabled = 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  }
70 
71  function startDemo() {
72  if (!d.overlay) {
73  d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
74  }
75 
76  launcherEnabled = false;
77  stagesEnabled = false;
78  panelEnabled = false;
79  panelContentEnabled = false;
80 
81  // Begin with either greeter or top, depending on which is visible
82  if (greeter && greeter.shown) {
83  startRightEdgeDemo()
84  } else {
85  startTopEdgeDemo()
86  }
87  }
88 
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
99 
100  onShowEdgeDemoChanged: {
101  stopDemo()
102  if (d.showEdgeDemo) {
103  startDemo()
104  }
105  }
106  }
107 
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  }
123 
124  Connections {
125  target: demo.greeter
126 
127  function hide() {
128  if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
129  d.rightEdgeDemo.hide()
130  hideEdgeDemoInGreeter()
131  startTopEdgeDemo()
132  }
133  }
134 
135  onUnlocked: hide()
136  onShownChanged: if (!greeter.shown) hide()
137  }
138 
139  function startTopEdgeDemo() {
140  demo.panelEnabled = true;
141  if (demo.stages) {
142  d.topEdgeDemo = d.overlay.createObject(demo.panel, {
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.panel,
147  });
148  }
149  if (d.topEdgeDemo) {
150  d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
151  } else {
152  stopDemo();
153  }
154  }
155 
156  Connections {
157  target: demo.panel.indicators
158  onFullyOpenedChanged: {
159  if (d.topEdgeDemo && d.topEdgeDemo.available && demo.panel.indicators.fullyOpened) {
160  d.topEdgeDemo.hideNow()
161  startBottomEdgeDemo()
162  }
163  }
164  }
165 
166  function startBottomEdgeDemo() {
167  if (demo.panel.indicators) {
168  d.bottomEdgeDemo = d.overlay.createObject(demo.panel.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.panel.indicators,
173  });
174  }
175  if (d.bottomEdgeDemo) {
176  d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
177  } else {
178  stopDemo();
179  }
180  }
181 
182  Connections {
183  target: demo.panel.indicators
184  onPartiallyOpenedChanged: {
185  if (d.bottomEdgeDemo &&
186  d.bottomEdgeDemo.available &&
187  !demo.panel.indicators.partiallyOpened &&
188  !demo.panel.indicators.fullyOpened) {
189  d.bottomEdgeDemo.hideNow()
190  startLeftEdgeDemo()
191  }
192  }
193  }
194 
195  function startLeftEdgeDemo() {
196  demo.panelEnabled = false;
197  demo.launcherEnabled = true;
198  if (demo.stages) {
199  d.leftEdgeDemo = d.overlay.createObject(demo.stages, {
200  "edge": "left",
201  "title": i18n.tr("Left edge"),
202  "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
203  "anchors.fill": demo.stages,
204  });
205  }
206  if (d.leftEdgeDemo) {
207  d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
208  } else {
209  stopDemo();
210  }
211  }
212 
213  Connections {
214  target: demo.launcher
215  onStateChanged: {
216  if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
217  d.leftEdgeDemo.hide()
218  launcher.hide()
219  startFinalEdgeDemo()
220  }
221  }
222  }
223 
224  function startFinalEdgeDemo() {
225  demo.launcherEnabled = false;
226  if (demo.stages) {
227  d.finalEdgeDemo = d.overlay.createObject(demo.stages, {
228  "edge": "none",
229  "title": i18n.tr("Well done"),
230  "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap on the screen to start"),
231  "anchors.fill": demo.stages,
232  "showSkip": false,
233  });
234  }
235  if (d.finalEdgeDemo) {
236  d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
237  } else {
238  stopDemo();
239  }
240  }
241 }