1
2
3
4
5
6
7
8
9 package org.kuali.student.common.ui.client.widgets.tabs.impl;
10
11 import java.util.ArrayList;
12 import java.util.HashMap;
13 import java.util.List;
14 import java.util.Map;
15
16 import org.kuali.student.common.ui.client.mvc.Callback;
17 import org.kuali.student.common.ui.client.mvc.history.HistoryManager;
18 import org.kuali.student.common.ui.client.widgets.ClickablePanel;
19 import org.kuali.student.common.ui.client.widgets.KSLabel;
20 import org.kuali.student.common.ui.client.widgets.layout.VerticalFlowPanel;
21 import org.kuali.student.common.ui.client.widgets.menus.KSListPanel;
22 import org.kuali.student.common.ui.client.widgets.tabs.KSTabPanelAbstract;
23 import org.kuali.student.common.ui.client.widgets.tabs.KSTabPanel.TabPanelStyle;
24 import org.kuali.student.common.ui.client.widgets.tabs.KSTabPanel.TabPosition;
25
26 import com.google.gwt.event.dom.client.ClickEvent;
27 import com.google.gwt.event.dom.client.ClickHandler;
28 import com.google.gwt.event.dom.client.MouseOutEvent;
29 import com.google.gwt.event.dom.client.MouseOutHandler;
30 import com.google.gwt.event.dom.client.MouseOverEvent;
31 import com.google.gwt.event.dom.client.MouseOverHandler;
32 import com.google.gwt.user.client.ui.ComplexPanel;
33 import com.google.gwt.user.client.ui.Composite;
34 import com.google.gwt.user.client.ui.FlowPanel;
35 import com.google.gwt.user.client.ui.HasText;
36 import com.google.gwt.user.client.ui.HorizontalPanel;
37 import com.google.gwt.user.client.ui.Image;
38 import com.google.gwt.user.client.ui.Label;
39 import com.google.gwt.user.client.ui.SimplePanel;
40 import com.google.gwt.user.client.ui.Widget;
41
42 @Deprecated
43 public class KSTabPanelImpl extends KSTabPanelAbstract {
44
45 private VerticalFlowPanel container = new VerticalFlowPanel();
46 private FlowPanel tabRow = new FlowPanel();
47
48
49 private KSListPanel left = new KSListPanel();
50 private KSListPanel right = new KSListPanel();
51 private SimplePanel content = new SimplePanel();
52 private Tab selectedTab;
53 private Map<String, Tab> tabMap = new HashMap<String, Tab>();
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71 protected class Tab extends Composite {
72 private boolean selected = false;
73 private Widget tab;
74 private ClickablePanel tabPanel = new ClickablePanel();
75 private Widget displayContent;
76 private int labelIndex = -1;
77 private String tabKey = "";
78 private List<Callback<String>> callbacks = new ArrayList<Callback<String>>();
79
80 public Tab(String key, String label, Image image, Widget displayContent) {
81 tabKey = key;
82 HorizontalPanel tabContent = new HorizontalPanel();
83 tabContent.add(image);
84 KSLabel labelWidget = new KSLabel(label);
85 tabContent.add(labelWidget);
86 labelIndex = tabContent.getWidgetIndex(labelWidget);
87 init(tabContent, displayContent);
88
89 }
90
91 public Tab(String key, String label, Widget displayContent) {
92 tabKey = key;
93 KSLabel labelWidget = new KSLabel(label);
94 init(labelWidget, displayContent);
95 }
96
97 public Tab(String key, Widget tab, Widget displayContent) {
98 tabKey = key;
99 init(tab, displayContent);
100 }
101
102 public void addCallback(Callback<String> callback) {
103 callbacks.add(callback);
104 }
105
106 public void emptyCallbacks() {
107 callbacks = new ArrayList<Callback<String>>();
108 }
109
110 public String getTabKey() {
111 return tabKey;
112 }
113
114 public void init(Widget tab, Widget displayContent) {
115 this.tab = tab;
116 this.tabPanel.setWidget(tab);
117 tabPanel.addMouseOverHandler(new MouseOverHandler() {
118
119 @Override
120 public void onMouseOver(MouseOverEvent event) {
121 Tab.this.onMouseOver();
122
123 }
124 });
125 tabPanel.addClickHandler(new ClickHandler() {
126
127 @Override
128 public void onClick(ClickEvent event) {
129 Tab.this.onSelect();
130 if (!callbacks.isEmpty()) {
131 for (Callback<String> callback : callbacks) {
132 callback.exec(tabKey);
133 }
134
135
136
137
138 HistoryManager.logHistoryChange();
139 }
140 }
141 });
142 tabPanel.addMouseOutHandler(new MouseOutHandler() {
143
144 @Override
145 public void onMouseOut(MouseOutEvent event) {
146 Tab.this.onMouseOut();
147
148 }
149 });
150 tabPanel.addStyleName("KS-TabPanel-Tab");
151 this.initWidget(tabPanel);
152 this.displayContent = displayContent;
153 }
154
155 public void addTabStyleName(String style) {
156 tabPanel.addStyleName(style);
157 }
158
159 public void onSelect() {
160 KSTabPanelImpl.this.deselectCurrentTab();
161 KSTabPanelImpl.this.selectedTab = Tab.this;
162 selected = true;
163 this.onMouseOut();
164 tabPanel.addStyleName("KS-TabPanel-Tab-Selected");
165 if (tab instanceof Label || tab instanceof KSLabel) {
166 tab.addStyleName("KS-TabPanel-Tab-Label-Selected");
167 } else if (tab instanceof ComplexPanel) {
168 if (labelIndex != -1) {
169 Widget w = ((ComplexPanel) tab).getWidget(labelIndex);
170 w.addStyleName("KS-TabPanel-Tab-Label-Selected");
171 }
172 }
173 KSTabPanelImpl.this.content.clear();
174 KSTabPanelImpl.this.content.setWidget(displayContent);
175
176 }
177
178 public void onDeselect() {
179 selected = false;
180 tabPanel.removeStyleName("KS-TabPanel-Tab-Selected");
181 if (tab instanceof Label || tab instanceof KSLabel) {
182 tab.removeStyleName("KS-TabPanel-Tab-Label-Selected");
183 } else if (tab instanceof ComplexPanel) {
184 if (labelIndex != -1) {
185 Widget w = ((ComplexPanel) tab).getWidget(labelIndex);
186 w.removeStyleName("KS-TabPanel-Tab-Label-Selected");
187 }
188 }
189 }
190
191 public void onMouseOver() {
192 if (!selected) {
193 tabPanel.addStyleName("KS-TabPanel-Tab-Hover");
194 if (tab instanceof Label || tab instanceof KSLabel) {
195 tab.addStyleName("KS-TabPanel-Tab-Label-Hover");
196 } else if (tab instanceof ComplexPanel) {
197 if (labelIndex != -1) {
198 Widget w = ((ComplexPanel) tab).getWidget(labelIndex);
199 w.addStyleName("KS-TabPanel-Tab-Label-Hover");
200 }
201 }
202 }
203 }
204
205 public void onMouseOut() {
206 tabPanel.removeStyleName("KS-TabPanel-Tab-Hover");
207 if (tab instanceof Label || tab instanceof KSLabel) {
208 tab.removeStyleName("KS-TabPanel-Tab-Label-Hover");
209 } else if (tab instanceof ComplexPanel) {
210 if (labelIndex != -1) {
211 Widget w = ((ComplexPanel) tab).getWidget(labelIndex);
212 w.removeStyleName("KS-TabPanel-Tab-Label-Hover");
213 }
214 }
215 }
216 }
217
218 public KSTabPanelImpl() {
219
220
221
222 tabRow.add(left);
223 tabRow.add(right);
224 tabRow.addStyleName("KS-TabPanel-TabRow");
225 left.addStyleName("KS-TabPanel-Left-Panel");
226 right.addStyleName("KS-TabPanel-Right-Panel");
227 container.addStyleName("KS-TabPanel-Full");
228 content.addStyleName("KS-TabPanel-Content");
229 container.add(tabRow);
230 container.add(content);
231 this.initWidget(container);
232 }
233
234 public KSTabPanelImpl(TabPanelStyle style) {
235
236
237
238 tabRow.add(left);
239 tabRow.add(right);
240 tabRow.addStyleName("KS-TabPanel-TabRow");
241 left.addStyleName("KS-TabPanel-Left-Panel");
242 right.addStyleName("KS-TabPanel-Right-Panel");
243
244 container.addStyleName("KS-TabPanel");
245 content.addStyleName("KS-TabPanel-Content");
246 container.add(tabRow);
247 container.add(content);
248 this.initWidget(container);
249 }
250
251 public void setTabPanelStyle(TabPanelStyle style) {
252 if (style == TabPanelStyle.FULL_PAGE) {
253 container.setStyleName("KS-TabPanel-Full");
254 } else if (style == TabPanelStyle.SMALL) {
255 container.setStyleName("KS-TabPanel-Small");
256 }
257 }
258
259 private void deselectCurrentTab() {
260 if (selectedTab != null) {
261 selectedTab.onDeselect();
262 }
263 }
264
265 @Override
266 public void selectTab(String key) {
267 Tab tab = tabMap.get(key);
268 tab.onSelect();
269 }
270
271 @Override
272 public void removeTab(String key) {
273 Tab tab = tabMap.get(key);
274 tab.removeFromParent();
275 }
276
277 private void positionTab(Tab tab, TabPosition position) {
278 if (position == TabPosition.LEFT) {
279 tab.addStyleName("KS-TabPanel-Tab-Left");
280 left.add(tab);
281 } else {
282 tab.addStyleName("KS-TabPanel-Tab-Right");
283 right.add(tab);
284 }
285 }
286
287 @Override
288 public void addTab(String key, Widget tabWidget, Widget content, TabPosition position) {
289 Tab tab = new Tab(key, tabWidget, content);
290 tabMap.put(key, tab);
291 positionTab(tab, position);
292 }
293
294 @Override
295 public void addTab(String key, String label, Widget content, TabPosition position) {
296 Tab tab = new Tab(key, label, content);
297 tabMap.put(key, tab);
298 positionTab(tab, position);
299 }
300
301 @Override
302 public void addTab(String key, String label, Image image, Widget content, TabPosition position) {
303 Tab tab = new Tab(key, label, image, content);
304 tabMap.put(key, tab);
305 positionTab(tab, position);
306 }
307
308 @Override
309 public void addTab(String key, String label, Image image, Widget content) {
310 Tab tab = new Tab(key, label, image, content);
311 tabMap.put(key, tab);
312 positionTab(tab, TabPosition.LEFT);
313 }
314
315 @Override
316 public void addTab(String key, String label, Widget content) {
317 Tab tab = new Tab(key, label, content);
318 tabMap.put(key, tab);
319 positionTab(tab, TabPosition.LEFT);
320 }
321
322 @Override
323 public void addTab(String key, Widget tabWidget, Widget content) {
324 Tab tab = new Tab(key, tabWidget, content);
325 tabMap.put(key, tab);
326 positionTab(tab, TabPosition.LEFT);
327 }
328
329 @Override
330 public void addStyleName(String style) {
331 container.addStyleName(style);
332 }
333
334 @Override
335 public void addTabCustomCallback(final String key, final Callback<String> callback) {
336 Tab tab = tabMap.get(key);
337 if (tab != null) {
338 tab.addCallback(callback);
339 }
340
341 }
342
343 @Override
344 public String getSelectedTabKey() {
345 if (selectedTab != null) {
346 return selectedTab.getTabKey();
347 } else {
348 return "";
349 }
350
351 }
352
353 @Override
354 public Widget getSelectedTab() {
355 return selectedTab.displayContent;
356 }
357
358 @Override
359 public String getSelectedTabName() {
360 Widget widget = selectedTab.tab;
361 if (widget instanceof HasText) {
362 return ((HasText) widget).getText();
363 }
364 return "";
365 }
366
367 @Override
368 public int getTabCount() {
369 return tabMap.size();
370 }
371
372 @Override
373 public void removeTabCustomCallbacks(String key) {
374 Tab tab = tabMap.get(key);
375 if (tab != null) {
376 tab.emptyCallbacks();
377 }
378
379 }
380
381 @Override
382 public boolean hasTabKey(String key) {
383 return tabMap.containsKey(key);
384 }
385
386 }