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.connector;
35
36 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.event.AppRequestedEvent;
37 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.event.CurrentAppCloseEvent;
38 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.event.FullScreenEvent;
39 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.event.HideShellAppsEvent;
40 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.event.ActivateAppEvent;
41 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.event.ShellAppStartingEvent;
42 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.AppsTransitionDelegate;
43 import info.magnolia.ui.vaadin.gwt.client.magnoliashell.viewport.widget.AppsViewportWidget;
44 import info.magnolia.ui.vaadin.magnoliashell.viewport.AppsViewport;
45
46 import com.google.gwt.dom.client.Element;
47 import com.google.gwt.user.client.Timer;
48 import com.google.web.bindery.event.shared.EventBus;
49 import com.vaadin.client.ComponentConnector;
50 import com.vaadin.client.ConnectorHierarchyChangeEvent;
51 import com.vaadin.client.LayoutManager;
52 import com.vaadin.client.communication.StateChangeEvent;
53 import com.vaadin.shared.ui.Connect;
54
55
56
57
58 @Connect(AppsViewport.class)
59 public class AppsViewportConnector extends ViewportConnector implements AppsViewportWidget.Listener {
60
61 @Override
62 protected void init() {
63 super.init();
64 getWidget().setTransitionDelegate(new AppsTransitionDelegate(getWidget()));
65 addStateChangeHandler("activeComponent", new StateChangeEvent.StateChangeHandler() {
66 @Override
67 public void onStateChanged(StateChangeEvent event) {
68 final ComponentConnector newActiveComponent = (ComponentConnector) getState().activeComponent;
69 if (newActiveComponent != null && getWidget().getVisibleChild() != newActiveComponent) {
70 getWidget().showChild(newActiveComponent.getWidget());
71 newActiveComponent.getWidget().getElement().getStyle().clearOpacity();
72 }
73 }
74 });
75 }
76
77 private boolean isAppRunning(String appName) {
78 return getState().runningAppNames.contains(appName);
79 }
80
81 private boolean isAppRegistered(String appName) {
82 return getState().registeredAppNames.contains(appName);
83 }
84
85 @Override
86 public void setEventBus(EventBus eventBus) {
87 super.setEventBus(eventBus);
88 eventBus.addHandler(AppRequestedEvent.TYPE, new AppRequestedEvent.Handler() {
89 @Override
90 public void onAppRequested(AppRequestedEvent event) {
91 getWidget().setCurtainVisible(false);
92 final String appName = event.getAppName();
93 if (isAppRegistered(appName)) {
94 if (!isAppRunning(appName)) {
95 getWidget().showAppPreloader(appName);
96 }
97 }
98 }
99 });
100
101 eventBus.addHandler(ShellAppStartingEvent.TYPE, new ShellAppStartingEvent.Handler() {
102 @Override
103 public void onShellAppStarting(ShellAppStartingEvent event) {
104 int widgetCount = getWidget().getWidgetCount();
105 if (getWidget().isAppClosing()) {
106 --widgetCount;
107 }
108 getWidget().setCurtainVisible(widgetCount > 0);
109 }
110 });
111
112 eventBus.addHandler(HideShellAppsEvent.TYPE, new HideShellAppsEvent.Handler() {
113 @Override
114 public void onHideShellApps(HideShellAppsEvent event) {
115 getWidget().setCurtainVisible(false);
116 }
117 });
118
119 eventBus.addHandler(FullScreenEvent.TYPE, new FullScreenEvent.Handler() {
120 @Override
121 public void onChangeFullScreen(FullScreenEvent event) {
122 getWidget().setFullScreen(event.getIsFullScreen());
123 }
124 });
125 }
126
127 @Override
128 public AppViewportState getState() {
129 return (AppViewportState)super.getState();
130 }
131
132 @Override
133 public void onConnectorHierarchyChange(final ConnectorHierarchyChangeEvent event) {
134 if (getWidget().hasPreloader()) {
135 new Timer() {
136 @Override
137 public void run() {
138 getWidget().removePreloader();
139 }
140 }.schedule(500);
141 }
142 AppsViewportConnector.super.onConnectorHierarchyChange(event);
143 }
144
145 @Override
146 public AppsViewportWidget getWidget() {
147 return (AppsViewportWidget) super.getWidget();
148 }
149
150 @Override
151 protected AppsViewportWidget createWidget() {
152 return new AppsViewportWidget(this);
153 }
154
155
156
157
158 @Override
159 protected void alignContent(Element e, LayoutManager layoutManager) {}
160
161 @Override
162 public void closeCurrentApp() {
163 eventBus.fireEvent(new CurrentAppCloseEvent());
164 }
165
166 @Override
167 public void setCurrentApp(String name) {
168 eventBus.fireEvent(new ActivateAppEvent(name));
169 }
170
171 }