on xenial help sign in
Move all edge demo logic into a new component that handles the flow and creates objects dynamically
commita31fbb6ed300aac4e3cd3fac641054fb23493afd authorMichael Terry <michael.terry@canonical.com> dateThu 22 Aug 2013, 15:14 (13 years ago) parent7040db0
3 files changed+221−137
Components/EdgeDemo.qml+208 Components/DemoOverlay.qml → Components/EdgeDemoOverlay.qml Shell.qml+13−137
Components/EdgeDemo.qmlnew file+208
@@ -0,0 +1,208 @@
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 overlay
29+
30+ property bool launcherEnabled: true
31+ property bool dashEnabled: true
32+ property bool panelEnabled: true
33+
34+ property bool showEdgeDemo: false
35+ property bool showEdgeDemoInGreeter: showEdgeDemo // TODO: AccountsService.getUserProperty("lightdm", "demo-edges")
36+
37+ function hideEdgeDemoInShell() {
38+ var user = LightDM.Users.data(greeter.currentIndex, LightDM.UserRoles.NameRole);
39+ AccountsService.setUserProperty(user, "demo-edges", false);
40+ demo.showEdgeDemo = false;
41+ stopDemo();
42+ }
43+
44+ function hideEdgeDemoInGreeter() {
45+ // TODO: AccountsService.setUserProperty("lightdm", "demo-edges", false);
46+ demo.showEdgeDemoInGreeter = false;
47+ }
48+
49+ function hideEdgeDemos() {
50+ hideEdgeDemoInGreeter();
51+ hideEdgeDemoInShell();
52+ }
53+
54+ function stopDemo() {
55+ launcherEnabled = true;
56+ dashEnabled = true;
57+ panelEnabled = true;
58+ if (d.rightEdgeDemo) d.rightEdgeDemo.destroy()
59+ if (d.topEdgeDemo) d.topEdgeDemo.destroy()
60+ if (d.bottomEdgeDemo) d.bottomEdgeDemo.destroy()
61+ if (d.leftEdgeDemo) d.leftEdgeDemo.destroy()
62+ if (d.finalEdgeDemo) d.finalEdgeDemo.destroy()
63+ }
64+
65+ QtObject {
66+ id: d
67+ property Component overlay
68+ property QtObject rightEdgeDemo
69+ property QtObject topEdgeDemo
70+ property QtObject bottomEdgeDemo
71+ property QtObject leftEdgeDemo
72+ property QtObject finalEdgeDemo
73+ }
74+
75+ onShowEdgeDemoInGreeterChanged: {
76+ if (!d.overlay && showEdgeDemoInGreeter) {
77+ d.overlay = Qt.createComponent("EdgeDemoOverlay.qml")
78+ startRightEdgeDemo()
79+ }
80+ }
81+
82+ function startRightEdgeDemo() {
83+ launcherEnabled = false;
84+ demo.dashEnabled = false;
85+ demo.panelEnabled = false;
86+ if (demo.greeter) {
87+ d.rightEdgeDemo = d.overlay.createObject(demo.greeter, {
88+ "edge": "right",
89+ "title": i18n.tr("Right edge"),
90+ "text": i18n.tr("Try swiping from the right edge to unlock the phone"),
91+ "anchors.fill": demo.greeter,
92+ });
93+ d.rightEdgeDemo.onSkip.connect(demo.hideEdgeDemos)
94+ } else {
95+ stopDemo();
96+ }
97+ }
98+
99+ Connections {
100+ target: demo.greeter
101+
102+ function hide() {
103+ if (d.rightEdgeDemo) {
104+ d.rightEdgeDemo.hide()
105+ hideEdgeDemoInGreeter()
106+ startTopEdgeDemo()
107+ }
108+ }
109+
110+ onUnlocked: hide()
111+ onShownChanged: if (!greeter.shown) hide()
112+
113+ onSelected: {
114+ var user = LightDM.Users.data(uid, LightDM.UserRoles.NameRole)
115+ showEdgeDemo = true;///AccountsService.getUserProperty(user, "demo-edges")
116+ }
117+ }
118+
119+ function startTopEdgeDemo() {
120+ demo.panelEnabled = true;
121+ if (demo.dash) {
122+ d.topEdgeDemo = d.overlay.createObject(demo.dash, {
123+ "edge": "top",
124+ "title": i18n.tr("Top edge"),
125+ "text": i18n.tr("Try swiping from the top edge to access the indicators"),
126+ "anchors.fill": demo.dash,
127+ });
128+ d.topEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
129+ } else {
130+ stopDemo();
131+ }
132+ }
133+
134+ Connections {
135+ target: demo.indicators
136+ onFullyOpenedChanged: {
137+ if (d.topEdgeDemo && demo.indicators.fullyOpened) {
138+ d.topEdgeDemo.hideNow()
139+ startBottomEdgeDemo()
140+ }
141+ }
142+ }
143+
144+ function startBottomEdgeDemo() {
145+ if (demo.indicators) {
146+ d.bottomEdgeDemo = d.overlay.createObject(demo.indicators, {
147+ "edge": "bottom",
148+ "title": i18n.tr("Close"),
149+ "text": i18n.tr("Swipe up again to close the settings screen"),
150+ "anchors.fill": demo.indicators,
151+ });
152+ d.bottomEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
153+ } else {
154+ stopDemo();
155+ }
156+ }
157+
158+ Connections {
159+ target: demo.indicators
160+ onPartiallyOpenedChanged: {
161+ if (d.bottomEdgeDemo && !demo.indicators.partiallyOpened && !demo.indicators.fullyOpened) {
162+ d.bottomEdgeDemo.hideNow()
163+ startLeftEdgeDemo()
164+ }
165+ }
166+ }
167+
168+ function startLeftEdgeDemo() {
169+ demo.panelEnabled = false;
170+ demo.launcherEnabled = true;
171+ if (demo.dash) {
172+ d.leftEdgeDemo = d.overlay.createObject(demo.dash, {
173+ "edge": "left",
174+ "title": i18n.tr("Left edge"),
175+ "text": i18n.tr("Swipe from the left to reveal the launcher for quick access to apps"),
176+ "anchors.fill": demo.dash,
177+ });
178+ d.leftEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
179+ } else {
180+ stopDemo();
181+ }
182+ }
183+
184+ Connections {
185+ target: demo.launcher
186+ onStateChanged: {
187+ if (d.leftEdgeDemo && launcher.state == "visible") {
188+ d.leftEdgeDemo.hide()
189+ startFinalEdgeDemo()
190+ }
191+ }
192+ }
193+
194+ function startFinalEdgeDemo() {
195+ demo.launcherEnabled = false;
196+ if (demo.dash) {
197+ d.finalEdgeDemo = d.overlay.createObject(demo.overlay, {
198+ "edge": "none",
199+ "title": i18n.tr("Well done"),
200+ "text": i18n.tr("You have now mastered the edge gestures and can start using the phone"),
201+ "anchors.fill": demo.overlay,
202+ });
203+ d.finalEdgeDemo.onSkip.connect(demo.hideEdgeDemoInShell)
204+ } else {
205+ stopDemo();
206+ }
207+ }
208+}
Components/DemoOverlay.qml → Components/EdgeDemoOverlay.qmlrenamed

The content is the same.

Shell.qml+13−137
@@ -20,7 +20,6 @@ import Ubuntu.Application 0.1
2020import Ubuntu.Components 0.1
2121import Ubuntu.Gestures 0.1
2222import LightDM 0.1 as LightDM
23−import AccountsService 0.1
2423import Powerd 0.1
2524import "Dash"
2625import "Greeter"
@@ -60,20 +59,6 @@ FocusScope {
6059 }
6160 }
6261
63− property bool showEdgeDemo: false
64− property bool showEdgeDemoInGreeter: showEdgeDemo // TODO: AccountsService.getUserProperty("lightdm", "demo-edges")
65−
66− function hideEdgeDemo() {
67− var user = LightDM.Users.data(greeter.currentIndex, LightDM.UserRoles.NameRole);
68− AccountsService.setUserProperty(user, "demo-edges", false);
69− shell.showEdgeDemo = false;
70− }
71−
72− function hideEdgeDemoInGreeter() {
73− // TODO: AccountsService.setUserProperty("lightdm", "demo-edges", false);
74− shell.showEdgeDemoInGreeter = false;
75− }
76−
7762 property ListModel searchHistory: SearchHistoryModel {}
7863
7964 property var applicationManager: ApplicationManagerWrapper {}
@@ -206,7 +191,7 @@ FocusScope {
206191 available: !greeter.shown && !lockscreen.shown
207192 hides: [stages, launcher, panel.indicators]
208193 shown: disappearingAnimationProgress !== 1.0
209− enabled: disappearingAnimationProgress === 0.0 && !leftEdgeDemo.active && !topEdgeDemo.active && !finalEdgeDemo.active
194+ enabled: disappearingAnimationProgress === 0.0 && edgeDemo.dashEnabled
210195 // FIXME: unfocus all applications when going back to the dash
211196 onEnabledChanged: {
212197 if (enabled) {
@@ -233,50 +218,6 @@ FocusScope {
233218 // greeterRevealer.animatedProgress are not animated
234219 Behavior on disappearingAnimationProgress { SmoothedAnimation { velocity: 5 }}
235220 }
236−
237− DemoOverlay {
238− id: topEdgeDemo
239−
240− edge: "top"
241− title: i18n.tr("Top edge")
242− text: i18n.tr("Try swiping from the top edge to access the indicators")
243− anchors.fill: dash
244− visible: false
245− available: shell.showEdgeDemo
246− onSkip: shell.hideEdgeDemo()
247−
248− Connections {
249− target: greeter
250− onShownChanged: if (!greeter.shown) topEdgeDemo.show()
251− }
252−
253− Connections {
254− target: panel.indicators
255− onFullyOpenedChanged: if (panel.indicators.fullyOpened) topEdgeDemo.hideNow()
256− }
257− }
258−
259− DemoOverlay {
260− id: leftEdgeDemo
261−
262− edge: "left"
263− title: i18n.tr("Left edge")
264− text: i18n.tr("Swipe from the left to reveal the launcher for quick access to apps")
265− anchors.fill: dash
266− visible: false
267− available: shell.showEdgeDemo
268− onSkip: shell.hideEdgeDemo()
269−
270− Connections {
271− target: bottomEdgeDemo
272− onActiveChanged: if (!bottomEdgeDemo.active) leftEdgeDemo.show()
273− }
274−
275− Connections {
276− target: launcher
277− onStateChanged: if (launcher.state == "visible") leftEdgeDemo.hide()
278− }
279− }
280221 }
281222
282223 Item {
@@ -519,45 +460,12 @@ FocusScope {
519460 }
520461
521462 onUnlocked: greeter.hide()
522− onSelected: {
523− // Update edge demo hint
524− var user = LightDM.Users.data(uid, LightDM.UserRoles.NameRole)
525− shell.showEdgeDemo = AccountsService.getUserProperty(user, "demo-edges")
526− }
527463
528464 onLeftTeaserPressedChanged: {
529465 if (leftTeaserPressed) {
530466 launcher.tease();
531467 }
532468 }
533−
534− DemoOverlay {
535− id: rightEdgeDemo
536−
537− edge: "right"
538− title: i18n.tr("Right edge")
539− text: i18n.tr("Try swiping from the right edge to unlock the phone")
540− anchors.fill: parent
541− visible: shell.showEdgeDemoInGreeter
542− onSkip: {
543− shell.hideEdgeDemoInGreeter()
544− shell.hideEdgeDemo()
545− }
546−
547− Connections {
548− target: greeter
549−
550− function hide() {
551− if (rightEdgeDemo.active) {
552− rightEdgeDemo.hide()
553− shell.hideEdgeDemoInGreeter()
554− }
555− }
556−
557− onUnlocked: hide()
558− onShownChanged: if (!greeter.shown) hide()
559− }
560− }
561469 }
562470
563471 InputFilterArea {
@@ -614,7 +522,7 @@ FocusScope {
614522 indicatorsMenuWidth: parent.width > units.gu(60) ? units.gu(40) : parent.width
615523 indicators {
616524 hides: [launcher]
617− available: !rightEdgeDemo.active && !leftEdgeDemo.active && !finalEdgeDemo.active
525+ available: edgeDemo.panelEnabled
618526 }
619527 fullscreenMode: shell.fullscreenMode
620528 searchVisible: !greeter.shown && !lockscreen.shown
@@ -623,24 +531,6 @@ FocusScope {
623531 anchors.fill: parent
624532 blockInput: panel.indicators.shown
625533 }
626−
627− DemoOverlay {
628− id: bottomEdgeDemo
629−
630− edge: "bottom"
631− title: i18n.tr("Close")
632− text: i18n.tr("Swipe up again to close the settings screen")
633− anchors.fill: panel.indicators
634− visible: false
635− available: shell.showEdgeDemo
636− onSkip: shell.hideEdgeDemo()
637−
638− Connections {
639− target: panel.indicators
640− onFullyOpenedChanged: if (panel.indicators.fullyOpened) bottomEdgeDemo.show()
641− onPartiallyOpenedChanged: if (!panel.indicators.partiallyOpened && !panel.indicators.fullyOpened) bottomEdgeDemo.hideNow()
642− }
643− }
644534 }
645535
646536 Hud {
@@ -649,7 +539,7 @@ FocusScope {
649539 width: parent.width > units.gu(60) ? units.gu(40) : parent.width
650540 height: parent.height
651541
652− available: !greeter.shown && !panel.indicators.shown && !lockscreen.shown && !topEdgeDemo.active
542+ available: !greeter.shown && !panel.indicators.shown && !lockscreen.shown && edgeDemo.dashEnabled
653543 shown: false
654544 showAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: 0; easing.type: Easing.Linear }
655545 hideAnimation: StandardAnimation { property: "y"; duration: hud.showableAnimationDuration; to: hudRevealer.closedValue; easing.type: Easing.Linear }
@@ -707,7 +597,7 @@ FocusScope {
707597 anchors.bottom: parent.bottom
708598 width: parent.width
709599 dragAreaWidth: shell.edgeSize
710− available: (!greeter.shown || greeter.narrowMode) && !rightEdgeDemo.active && !topEdgeDemo.active && !bottomEdgeDemo.active && !finalEdgeDemo.active
600+ available: (!greeter.shown || greeter.narrowMode) && edgeDemo.launcherEnabled
711601 onDashItemSelected: {
712602 greeter.hide()
713603 // Animate if moving between application and dash
@@ -765,29 +655,6 @@ FocusScope {
765655 }
766656 }
767657
768− DemoOverlay {
769− id: finalEdgeDemo
770−
771− edge: "none"
772− title: i18n.tr("Well done")
773− text: i18n.tr("You have now mastered the edge gestures and can start using the phone")
774− skipText: i18n.tr("Finish")
775− anchors.fill: overlay
776− visible: false
777− available: shell.showEdgeDemo
778− onSkip: shell.hideEdgeDemo()
779−
780− Connections {
781− target: leftEdgeDemo
782− onShownChanged: {
783− if (leftEdgeDemo.active && !leftEdgeDemo.shown) {
784− finalEdgeDemo.show();
785− launcher.hide();
786− }
787− }
788− }
789− }
790−
791658 focus: true
792659
793660 InputFilterArea {
@@ -839,4 +706,13 @@ FocusScope {
839706 rotation: -45
840707 scale: Math.min(parent.width, parent.height) / width
841708 }
709+
710+ EdgeDemo {
711+ id: edgeDemo
712+ greeter: greeter
713+ launcher: launcher
714+ dash: dash
715+ indicators: panel.indicators
716+ overlay: overlay
717+ }
842718}