2 * Copyright (C) 2013 Canonical, Ltd.
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.
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.
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/>.
17import AccountsService 0.1
18import LightDM 0.1 as LightDM
20import Ubuntu.Components 1.1
26 property Item launcher
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
36 property bool paused: false
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
46 function hideEdgeDemoInShell() {
47 AccountsService.demoEdges = false;
51 function hideEdgeDemoInGreeter() {
52 // TODO: AccountsService.demoEdges = false as lightdm user
55 function hideEdgeDemos() {
56 hideEdgeDemoInGreeter();
57 hideEdgeDemoInShell();
61 launcherEnabled = true
64 panelContentEnabled = true
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);
77 function startDemo() {
79 d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
82 launcherEnabled = false;
83 stagesEnabled = false;
85 panelContentEnabled = false;
87 // Begin with either greeter or top, depending on which is visible
88 if (greeter && greeter.shown) {
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
106 function restartDemo() {
108 if (d.showEdgeDemo) {
113 onShowEdgeDemoChanged: restartDemo()
118 onLanguageChanged: d.restartDemo()
121 function startRightEdgeDemo() {
123 d.rightEdgeDemo = d.overlay.createObject(demo.greeter, {
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,
130 if (d.rightEdgeDemo) {
131 d.rightEdgeDemo.onSkip.connect(demo.hideEdgeDemos)
141 if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
142 d.rightEdgeDemo.hide()
143 hideEdgeDemoInGreeter()
149 onShownChanged: if (!greeter.shown) hide()
152 function startTopEdgeDemo() {
153 demo.panelEnabled = true;
155 d.topEdgeDemo = d.overlay.createObject(demo.panel, {
157 "title": i18n.tr("Top edge"),
158 "text": i18n.tr("Try swiping from the top edge to access the indicators"),
159 "anchors.fill": demo.panel,
163 d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
170 target: demo.panel.indicators
171 onFullyOpenedChanged: {
172 if (d.topEdgeDemo && d.topEdgeDemo.available && demo.panel.indicators.fullyOpened) {
173 d.topEdgeDemo.hideNow()
174 startBottomEdgeDemo()
179 function startBottomEdgeDemo() {
180 if (demo.panel.indicators) {
181 d.bottomEdgeDemo = d.overlay.createObject(demo.panel.indicators, {
183 "title": i18n.tr("Close"),
184 "text": i18n.tr("Swipe up again to close the settings screen"),
185 "anchors.fill": demo.panel.indicators,
188 if (d.bottomEdgeDemo) {
189 d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
196 target: demo.panel.indicators
197 onPartiallyOpenedChanged: {
198 if (d.bottomEdgeDemo &&
199 d.bottomEdgeDemo.available &&
200 !demo.panel.indicators.partiallyOpened &&
201 !demo.panel.indicators.fullyOpened) {
202 d.bottomEdgeDemo.hideNow()
208 function startLeftEdgeDemo() {
209 demo.panelEnabled = false;
210 demo.launcherEnabled = true;
212 d.leftEdgeDemo = d.overlay.createObject(demo.stages, {
214 "title": i18n.tr("Left edge"),
215 "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
216 "anchors.fill": demo.stages,
219 if (d.leftEdgeDemo) {
220 d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
227 target: demo.launcher
229 if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
230 d.leftEdgeDemo.hide()
237 function startFinalEdgeDemo() {
238 demo.launcherEnabled = false;
240 d.finalEdgeDemo = d.overlay.createObject(demo.stages, {
242 "title": i18n.tr("Well done"),
243 "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap on the screen to start"),
244 "anchors.fill": demo.stages,
248 if (d.finalEdgeDemo) {
249 d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list