on 2139c25 help sign in
unity8/Components/EdgeDemo.qml
232 lines 7.5 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 var user = LightDM.Users.data(greeter.currentIndex, LightDM.UserRoles.NameRole);
47 AccountsService.setUserProperty(user, "demo-edges", false);
48 d.showEdgeDemo = false;
49 stopDemo();
50 }
52 function hideEdgeDemoInGreeter() {
53 // TODO: AccountsService.setUserProperty("lightdm", "demo-edges", false);
54 d.showEdgeDemoInGreeter = false;
55 }
57 function hideEdgeDemos() {
58 hideEdgeDemoInGreeter();
59 hideEdgeDemoInShell();
60 }
62 function stopDemo() {
63 launcherEnabled = true
64 dashEnabled = true
65 panelEnabled = true
66 panelContentEnabled = true
67 if (d.rightEdgeDemo) d.rightEdgeDemo.destroy()
68 if (d.topEdgeDemo) d.topEdgeDemo.destroy()
69 if (d.bottomEdgeDemo) d.bottomEdgeDemo.destroy()
70 if (d.leftEdgeDemo) d.leftEdgeDemo.destroy()
71 if (d.finalEdgeDemo) d.finalEdgeDemo.destroy()
72 }
74 QtObject {
75 id: d
76 property Component overlay
77 property QtObject rightEdgeDemo
78 property QtObject topEdgeDemo
79 property QtObject bottomEdgeDemo
80 property QtObject leftEdgeDemo
81 property QtObject finalEdgeDemo
82 property bool showEdgeDemo: false
83 property bool showEdgeDemoInGreeter: d.showEdgeDemo // TODO: AccountsService.getUserProperty("lightdm", "demo-edges")
85 onShowEdgeDemoInGreeterChanged: {
86 if (!d.overlay && d.showEdgeDemoInGreeter) {
87 d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
88 startRightEdgeDemo()
89 }
90 }
91 }
93 function startRightEdgeDemo() {
94 launcherEnabled = false;
95 demo.dashEnabled = false;
96 demo.panelEnabled = false;
97 demo.panelContentEnabled = false;
98 if (demo.greeter) {
99 d.rightEdgeDemo = d.overlay.createObject(demo.greeter, {
100 "edge": "right",
101 "title": i18n.tr("Right edge"),
102 "text": i18n.tr("Try swiping from the right edge to unlock the phone"),
103 "anchors.fill": demo.greeter,
104 });
105 }
106 if (d.rightEdgeDemo) {
107 d.rightEdgeDemo.onSkip.connect(demo.hideEdgeDemos)
108 } else {
109 stopDemo();
110 }
111 }
113 Connections {
114 target: demo.greeter
116 function hide() {
117 if (d.rightEdgeDemo && d.rightEdgeDemo.available) {
118 d.rightEdgeDemo.hide()
119 hideEdgeDemoInGreeter()
120 startTopEdgeDemo()
121 }
122 }
124 onUnlocked: hide()
125 onShownChanged: if (!greeter.shown) hide()
127 onSelected: {
128 var user = LightDM.Users.data(uid, LightDM.UserRoles.NameRole)
129 d.showEdgeDemo = AccountsService.getUserProperty(user, "demo-edges")
130 }
131 }
133 function startTopEdgeDemo() {
134 demo.panelEnabled = true;
135 if (demo.dash && demo.underlay) {
136 d.topEdgeDemo = d.overlay.createObject(demo.underlay, {
137 "edge": "top",
138 "title": i18n.tr("Top edge"),
139 "text": i18n.tr("Try swiping from the top edge to access the indicators"),
140 "anchors.fill": demo.dash,
141 });
142 }
143 if (d.topEdgeDemo) {
144 d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
145 } else {
146 stopDemo();
147 }
148 }
150 Connections {
151 target: demo.indicators
152 onFullyOpenedChanged: {
153 if (d.topEdgeDemo && d.topEdgeDemo.available && demo.indicators.fullyOpened) {
154 d.topEdgeDemo.hideNow()
155 startBottomEdgeDemo()
156 }
157 }
158 }
160 function startBottomEdgeDemo() {
161 if (demo.indicators) {
162 d.bottomEdgeDemo = d.overlay.createObject(demo.indicators, {
163 "edge": "bottom",
164 "title": i18n.tr("Close"),
165 "text": i18n.tr("Swipe up again to close the settings screen"),
166 "anchors.fill": demo.indicators,
167 });
168 }
169 if (d.bottomEdgeDemo) {
170 d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
171 } else {
172 stopDemo();
173 }
174 }
176 Connections {
177 target: demo.indicators
178 onPartiallyOpenedChanged: {
179 if (d.bottomEdgeDemo && d.bottomEdgeDemo.available && !demo.indicators.partiallyOpened && !demo.indicators.fullyOpened) {
180 d.bottomEdgeDemo.hideNow()
181 startLeftEdgeDemo()
182 }
183 }
184 }
186 function startLeftEdgeDemo() {
187 demo.panelEnabled = false;
188 demo.launcherEnabled = true;
189 if (demo.dash && demo.underlay) {
190 d.leftEdgeDemo = d.overlay.createObject(demo.underlay, {
191 "edge": "left",
192 "title": i18n.tr("Left edge"),
193 "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
194 "anchors.fill": demo.dash,
195 });
196 }
197 if (d.leftEdgeDemo) {
198 d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
199 } else {
200 stopDemo();
201 }
202 }
204 Connections {
205 target: demo.launcher
206 onStateChanged: {
207 if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
208 d.leftEdgeDemo.hide()
209 launcher.hide()
210 startFinalEdgeDemo()
211 }
212 }
213 }
215 function startFinalEdgeDemo() {
216 demo.launcherEnabled = false;
217 if (demo.dash && demo.underlay) {
218 d.finalEdgeDemo = d.overlay.createObject(demo.underlay, {
219 "edge": "none",
220 "title": i18n.tr("Well done"),
221 "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap anywhere to start"),
222 "anchors.fill": demo.dash,
223 "showSkip": false,
224 });
225 }
226 if (d.finalEdgeDemo) {
227 d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
228 } else {
229 stopDemo();
230 }
231 }