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.tabsheet.connector;
35
36 import info.magnolia.ui.vaadin.gwt.client.tabsheet.event.ActiveTabChangedEvent;
37 import info.magnolia.ui.vaadin.gwt.client.tabsheet.event.ShowAllTabsEvent;
38 import info.magnolia.ui.vaadin.gwt.client.tabsheet.event.ShowAllTabsHandler;
39 import info.magnolia.ui.vaadin.gwt.client.tabsheet.event.TabCloseEvent;
40 import info.magnolia.ui.vaadin.gwt.client.tabsheet.event.TabCloseEventHandler;
41 import info.magnolia.ui.vaadin.gwt.client.tabsheet.rpc.MagnoliaTabSheetClientRpc;
42 import info.magnolia.ui.vaadin.gwt.client.tabsheet.rpc.MagnoliaTabSheetServerRpc;
43 import info.magnolia.ui.vaadin.gwt.client.tabsheet.tab.connector.MagnoliaTabConnector;
44 import info.magnolia.ui.vaadin.gwt.client.tabsheet.tab.widget.MagnoliaTabWidget;
45 import info.magnolia.ui.vaadin.gwt.client.tabsheet.widget.MagnoliaTabSheetView;
46 import info.magnolia.ui.vaadin.gwt.client.tabsheet.widget.MagnoliaTabSheetViewImpl;
47 import info.magnolia.ui.vaadin.tabsheet.MagnoliaTabSheet;
48
49 import java.util.List;
50
51 import com.google.gwt.dom.client.Style;
52 import com.google.gwt.user.client.ui.Widget;
53 import com.google.web.bindery.event.shared.EventBus;
54 import com.google.web.bindery.event.shared.SimpleEventBus;
55 import com.vaadin.client.ComponentConnector;
56 import com.vaadin.client.ConnectorHierarchyChangeEvent;
57 import com.vaadin.client.Util;
58 import com.vaadin.client.communication.RpcProxy;
59 import com.vaadin.client.communication.StateChangeEvent;
60 import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler;
61 import com.vaadin.client.ui.AbstractComponentContainerConnector;
62 import com.vaadin.client.ui.PostLayoutListener;
63 import com.vaadin.client.ui.layout.ElementResizeEvent;
64 import com.vaadin.client.ui.layout.ElementResizeListener;
65 import com.vaadin.shared.Connector;
66 import com.vaadin.shared.ui.Connect;
67
68
69
70
71
72
73 @Deprecated
74
75 @Connect(MagnoliaTabSheet.class)
76 public class MagnoliaTabSheetConnector extends AbstractComponentContainerConnector implements PostLayoutListener {
77
78 private final MagnoliaTabSheetServerRpc rpc = RpcProxy.create(MagnoliaTabSheetServerRpc.class, this);
79
80 private MagnoliaTabSheetView view;
81
82 private final EventBus eventBus = new SimpleEventBus();
83
84 @Override
85 public MagnoliaTabSheetState getState() {
86 return (MagnoliaTabSheetState) super.getState();
87 }
88
89 @Override
90 protected Widget createWidget() {
91 this.view = new MagnoliaTabSheetViewImpl(eventBus);
92 return view.asWidget();
93 }
94
95 @Override
96 protected void init() {
97 super.init();
98
99 addStateChangeHandler("activeTab", new StateChangeHandler() {
100 @Override
101 public void onStateChanged(StateChangeEvent event) {
102 final MagnoliaTabConnector/../info/magnolia/ui/vaadin/gwt/client/tabsheet/tab/connector/MagnoliaTabConnector.html#MagnoliaTabConnector">MagnoliaTabConnector tabConnector = (MagnoliaTabConnector) getState().activeTab;
103 if (tabConnector != null) {
104 view.setActiveTab(tabConnector.getWidget());
105 eventBus.fireEvent(new ActiveTabChangedEvent(tabConnector.getWidget(), false));
106 }
107 }
108 });
109
110 addStateChangeHandler(new StateChangeHandler() {
111 @Override
112 public void onStateChanged(StateChangeEvent event) {
113 if (event.hasPropertyChanged("showAllEnabled")) {
114 view.getTabContainer().addShowAllTab(getState().showAllEnabled, getState().showAllLabel);
115 }
116
117 if (getState().logo != null && getState().logoBgColor != null) {
118 view.setLogo(getState().logo, getState().logoBgColor);
119 }
120 }
121 });
122
123 registerRpc(MagnoliaTabSheetClientRpc.class, new MagnoliaTabSheetClientRpc() {
124
125 @Override
126 public void closeTab(Connector tabConnector) {
127 eventBus.fireEvent(new TabCloseEvent(((MagnoliaTabConnector) tabConnector).getWidget()));
128 }
129 });
130
131 eventBus.addHandler(TabCloseEvent.TYPE, new TabCloseEventHandler() {
132 @Override
133 public void onTabClosed(TabCloseEvent event) {
134 MagnoliaTabWidget tab = event.getTab();
135 if (tab == view.getActiveTab()) {
136 view.showPreloader();
137 tab.getWidget().getElement().getStyle().setDisplay(Style.Display.NONE);
138 }
139 rpc.closeTab(Util.findConnectorFor(tab));
140 }
141 });
142
143 eventBus.addHandler(ActiveTabChangedEvent.TYPE, new ActiveTabChangedEvent.Handler() {
144 @Override
145 public void onActiveTabChanged(final ActiveTabChangedEvent event) {
146 MagnoliaTabWidget tab = event.getTab();
147 if (view.isShowingAllTabs()) {
148 view.setActiveTab(tab);
149 tab = null;
150 }
151 if (tab != view.getActiveTab() && event.isNotifyServer()) {
152 view.showPreloader();
153 view.clearTabs();
154 rpc.setActiveTab(Util.findConnectorFor(event.getTab()));
155 }
156 }
157 });
158
159 eventBus.addHandler(ShowAllTabsEvent.TYPE, new ShowAllTabsHandler() {
160 @Override
161 public void onShowAllTabs(ShowAllTabsEvent event) {
162 rpc.setShowAll();
163 view.showAllTabContents(true);
164 view.getTabContainer().showAll(true);
165 fireEvent(new ActiveTabChangedEvent(true, false));
166 }
167
168 });
169
170 getLayoutManager().addElementResizeListener(view.getTabContainer().getElement(), listener);
171 }
172
173 private final ElementResizeListener listener = new ElementResizeListener() {
174 @Override
175 public void onElementResize(ElementResizeEvent e) {
176 view.onResize();
177 }
178 };
179
180 @Override
181 public void updateCaption(ComponentConnector connector) {
182 final String caption = connector.getState().caption;
183 if (connector.getWidget() instanceof MagnoliaTabWidget) {
184 MagnoliaTabWidget/../../../../../info/magnolia/ui/vaadin/gwt/client/tabsheet/tab/widget/MagnoliaTabWidget.html#MagnoliaTabWidget">MagnoliaTabWidget tab = (MagnoliaTabWidget) connector.getWidget();
185 tab.getLabel().updateCaption(caption);
186
187 view.getTabContainer().reArrangeTabVisibility();
188 }
189 }
190
191 @Override
192 public void onConnectorHierarchyChange(ConnectorHierarchyChangeEvent event) {
193 final List<ComponentConnector> childConnectors = getChildComponents();
194 final List<ComponentConnector> oldChildren = event.getOldChildren();
195
196 oldChildren.removeAll(childConnectors);
197 for (final ComponentConnector cc : oldChildren) {
198 view.removeTab((MagnoliaTabWidget) cc.getWidget());
199 }
200
201 for (final ComponentConnector cc : childConnectors) {
202 view.updateTab((MagnoliaTabWidget) cc.getWidget());
203 }
204 }
205
206 @Override
207 public void onUnregister() {
208 getLayoutManager().removeElementResizeListener(view.getTabContainer().getElement(), listener);
209 }
210
211 @Override
212 public void postLayout() {
213 view.removePreloader();
214 }
215 }