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.dialog.connector;
35
36 import info.magnolia.ui.vaadin.gwt.client.dialog.rpc.OverlayClientRpc;
37 import info.magnolia.ui.vaadin.gwt.client.dialog.rpc.OverlayServerRpc;
38 import info.magnolia.ui.vaadin.gwt.client.dialog.widget.OverlayWidget;
39 import info.magnolia.ui.vaadin.overlay.Overlay;
40
41 import com.google.gwt.core.client.Scheduler;
42 import com.google.gwt.user.client.Timer;
43 import com.google.gwt.user.client.ui.Widget;
44 import com.vaadin.client.ComponentConnector;
45 import com.vaadin.client.ConnectorHierarchyChangeEvent;
46 import com.vaadin.client.communication.RpcProxy;
47 import com.vaadin.client.communication.StateChangeEvent;
48 import com.vaadin.client.ui.AbstractSingleComponentContainerConnector;
49 import com.vaadin.shared.ui.Connect;
50
51
52
53
54 @Connect(Overlay.class)
55 public class OverlayConnector extends AbstractSingleComponentContainerConnector {
56
57 public static final int OVERLAY_CLOSE_ANIMATION_DURATION_MSEC = 500;
58
59 private OverlayServerRpc rpc = RpcProxy.create(OverlayServerRpc.class, this);
60
61 private Timer automaticRemovalTimer = new Timer() {
62 @Override
63 public void run() {
64 removeSelf();
65 }
66 };
67
68 @Override
69 protected void init() {
70 super.init();
71 registerRpc(OverlayClientRpc.class, new OverlayClientRpc() {
72 @Override
73 public void close() {
74 removeSelf();
75 }
76 });
77 }
78
79 public void removeSelf() {
80 final Object lock = new Object();
81 getWidget().addStyleName("close");
82 getConnection().getMessageHandler().suspendReponseHandling(lock);
83 final Widget w = getWidget();
84 Scheduler.get().scheduleFixedDelay(new Scheduler.RepeatingCommand() {
85 @Override
86 public boolean execute() {
87 getConnection().getMessageHandler().resumeResponseHandling(lock);
88 w.removeFromParent();
89 rpc.onClosed();
90 return false;
91 }
92 }, OVERLAY_CLOSE_ANIMATION_DURATION_MSEC);
93 }
94
95 @Override
96 public void onStateChanged(StateChangeEvent event) {
97 super.onStateChanged(event);
98 if (event.hasPropertyChanged("closeTimeout")) {
99 int timeout = getState().closeTimeout;
100 if (timeout < 0) {
101 automaticRemovalTimer.cancel();
102 } else {
103 automaticRemovalTimer.schedule(timeout * 1000);
104 }
105 }
106 }
107
108 @Override
109 public void updateCaption(ComponentConnector connector) {
110 }
111
112 @Override
113 public OverlayWidget getWidget() {
114 return (OverlayWidget) super.getWidget();
115 }
116
117 @Override
118 public void onConnectorHierarchyChange(final ConnectorHierarchyChangeEvent e) {
119 if (getContent() != null) {
120 getWidget().setWidget(getContent().getWidget());
121 }
122 }
123
124 @Override
125 public OverlayState getState() {
126 return (OverlayState) super.getState();
127 }
128 }