1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.widget;
35
36 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.ShellAppsTransitionDelegate;
37
38 import java.util.Iterator;
39
40 import com.google.gwt.core.client.Scheduler;
41 import com.google.gwt.dom.client.Style;
42 import com.google.gwt.user.client.DOM;
43 import com.google.gwt.user.client.Element;
44 import com.google.gwt.user.client.Event;
45 import com.google.gwt.user.client.ui.Widget;
46 import com.googlecode.mgwt.dom.client.event.touch.TouchEndEvent;
47 import com.googlecode.mgwt.dom.client.event.touch.TouchEndHandler;
48 import com.googlecode.mgwt.ui.client.widget.touch.TouchDelegate;
49
50
51
52
53 public class ShellAppsViewportWidget extends ViewportWidget<ShellAppsTransitionDelegate> {
54
55 private Listener listener;
56
57 private boolean active;
58
59 public void onShellAppsHidden() {
60 listener.onShellAppsHidden();
61 }
62
63
64
65
66 public interface Listener {
67
68 void onShellAppLoaded(Widget shellAppWidget);
69
70 void outerContentClicked();
71
72 void onShellAppsHidden();
73 }
74
75 public ShellAppsViewportWidget(final Listener listener) {
76 this.listener = listener;
77 new TouchDelegate(this).addTouchEndHandler(new TouchEndHandler() {
78 @Override
79 public void onTouchEnd(TouchEndEvent event) {
80 final Element target = event.getNativeEvent().getEventTarget().cast();
81 if (target.isOrHasChild(getElement())) {
82 listener.outerContentClicked();
83 }
84 }
85 });
86
87
88
89
90
91 Scheduler.get().scheduleDeferred(new Scheduler.ScheduledCommand() {
92 @Override
93 public void execute() {
94 getElement().getStyle().setTop(-getOffsetHeight(), Style.Unit.PX);
95 }
96 });
97
98 DOM.sinkEvents(getElement(), Event.TOUCHEVENTS | Event.MOUSEEVENTS);
99 }
100
101 public boolean isActive() {
102 return active;
103 }
104
105 public void setActiveNoTransition(boolean isActive) {
106 setVisible(isActive);
107 this.active = isActive;
108 }
109
110 public void setActive(boolean active) {
111 getTransitionDelegate().setActive(active);
112 this.active = active;
113 }
114
115 public void onShellAppLoaded(Widget w) {
116 Iterator<Widget> it = iterator();
117 while (it.hasNext() && w != null) {
118 Widget curW = it.next();
119 curW.getElement().getStyle().setDisplay(w == curW ? Style.Display.BLOCK : Style.Display.NONE);
120 }
121 if (w != null) {
122 listener.onShellAppLoaded(w);
123 }
124 }
125 }