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