on f782fac help sign in
unity8/qml/Components/EdgeDemo.qml
187 lines 5.9 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 QtQuick 2.0
20Item {
21 id: demo
23 property Item dash
24 property Item launcher
25 property Item indicators
26 property Item underlay
28 property bool launcherEnabled: true
29 property bool dashEnabled: true
30 property bool panelEnabled: true
31 property bool panelContentEnabled: true
32 property bool running: !launcherEnabled || !dashEnabled || !panelEnabled || !panelContentEnabled
34 property bool paused: false
36 onPausedChanged: {
37 if (d.topEdgeDemo) d.topEdgeDemo.paused = paused
38 if (d.bottomEdgeDemo) d.bottomEdgeDemo.paused = paused
39 if (d.leftEdgeDemo) d.leftEdgeDemo.paused = paused
40 if (d.finalEdgeDemo) d.finalEdgeDemo.paused = paused
41 }
43 function hideEdgeDemoInShell() {
44 AccountsService.demoEdges = false;
45 }
47 function stopDemo() {
48 launcherEnabled = true
49 dashEnabled = true
50 panelEnabled = true
51 panelContentEnabled = true
52 if (d.topEdgeDemo) d.topEdgeDemo.destroy()
53 if (d.bottomEdgeDemo) d.bottomEdgeDemo.destroy()
54 if (d.leftEdgeDemo) d.leftEdgeDemo.destroy()
55 if (d.finalEdgeDemo) d.finalEdgeDemo.destroy()
56 }
58 function startDemo() {
59 if (!d.overlay) {
60 d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
61 }
63 launcherEnabled = false;
64 dashEnabled = false;
65 panelEnabled = false;
66 panelContentEnabled = false;
68 startTopEdgeDemo()
69 }
71 QtObject {
72 id: d
73 property Component overlay
74 property QtObject topEdgeDemo
75 property QtObject bottomEdgeDemo
76 property QtObject leftEdgeDemo
77 property QtObject finalEdgeDemo
78 property bool showEdgeDemo: AccountsService.demoEdges
80 onShowEdgeDemoChanged: {
81 stopDemo()
82 if (d.showEdgeDemo) {
83 startDemo()
84 }
85 }
86 }
88 function startTopEdgeDemo() {
89 demo.panelEnabled = true;
90 if (demo.dash && demo.underlay) {
91 d.topEdgeDemo = d.overlay.createObject(demo.underlay, {
92 "edge": "top",
93 "title": i18n.tr("Top edge"),
94 "text": i18n.tr("Try swiping from the top edge to access the indicators"),
95 "anchors.fill": demo.dash,
96 });
97 }
98 if (d.topEdgeDemo) {
99 d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
100 } else {
101 stopDemo();
102 }
103 }
105 Connections {
106 target: demo.indicators
107 onFullyOpenedChanged: {
108 if (d.topEdgeDemo && d.topEdgeDemo.available && demo.indicators.fullyOpened) {
109 d.topEdgeDemo.hideNow()
110 startBottomEdgeDemo()
111 }
112 }
113 }
115 function startBottomEdgeDemo() {
116 if (demo.indicators) {
117 d.bottomEdgeDemo = d.overlay.createObject(demo.indicators, {
118 "edge": "bottom",
119 "title": i18n.tr("Close"),
120 "text": i18n.tr("Swipe up again to close the settings screen"),
121 "anchors.fill": demo.indicators.content,
122 });
123 }
124 if (d.bottomEdgeDemo) {
125 d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
126 } else {
127 stopDemo();
128 }
129 }
131 Connections {
132 target: demo.indicators
133 onPartiallyOpenedChanged: {
134 if (d.bottomEdgeDemo && d.bottomEdgeDemo.available && !demo.indicators.partiallyOpened && !demo.indicators.fullyOpened) {
135 d.bottomEdgeDemo.hideNow()
136 startLeftEdgeDemo()
137 }
138 }
139 }
141 function startLeftEdgeDemo() {
142 demo.panelEnabled = false;
143 demo.launcherEnabled = true;
144 if (demo.dash && demo.underlay) {
145 d.leftEdgeDemo = d.overlay.createObject(demo.underlay, {
146 "edge": "left",
147 "title": i18n.tr("Left edge"),
148 "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
149 "anchors.fill": demo.dash,
150 });
151 }
152 if (d.leftEdgeDemo) {
153 d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
154 } else {
155 stopDemo();
156 }
157 }
159 Connections {
160 target: demo.launcher
161 onStateChanged: {
162 if (d.leftEdgeDemo && d.leftEdgeDemo.available && launcher.state == "visible") {
163 d.leftEdgeDemo.hide()
164 launcher.hide()
165 startFinalEdgeDemo()
166 }
167 }
168 }
170 function startFinalEdgeDemo() {
171 demo.launcherEnabled = false;
172 if (demo.dash && demo.underlay) {
173 d.finalEdgeDemo = d.overlay.createObject(demo.underlay, {
174 "edge": "none",
175 "title": i18n.tr("Well done"),
176 "text": i18n.tr("You have now mastered the edge gestures and can start using the phone<br><br>Tap on the screen to start"),
177 "anchors.fill": demo.dash,
178 "showSkip": false,
179 });
180 }
181 if (d.finalEdgeDemo) {
182 d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
183 } else {
184 stopDemo();
185 }
186 }