View Javadoc

1   /**
2    * Copyright 2010 The Kuali Foundation Licensed under the Educational Community License, Version 2.0 (the "License"); you may
3    * not use this file except in compliance with the License. You may obtain a copy of the License at
4    * http://www.osedu.org/licenses/ECL-2.0 Unless required by applicable law or agreed to in writing, software distributed
5    * under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
6    * implied. See the License for the specific language governing permissions and limitations under the License.
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      // private HorizontalPanel left = new HorizontalPanel();
48      // private HorizontalPanel right = new HorizontalPanel();
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       * protected class TabPanel extends SimplePanel implements HasAllMouseHandlers{
57       * @Override public HandlerRegistration addMouseDownHandler(MouseDownHandler handler) { // TODO Auto-generated method
58       * stub return null; }
59       * @Override public HandlerRegistration addMouseUpHandler(MouseUpHandler handler) { // TODO Auto-generated method stub
60       * return null; }
61       * @Override public HandlerRegistration addMouseOutHandler(MouseOutHandler handler) { // TODO Auto-generated method stub
62       * return null; }
63       * @Override public HandlerRegistration addMouseOverHandler(MouseOverHandler handler) { // TODO Auto-generated method
64       * stub return null; }
65       * @Override public HandlerRegistration addMouseMoveHandler(MouseMoveHandler handler) { // TODO Auto-generated method
66       * stub return null; }
67       * @Override public HandlerRegistration addMouseWheelHandler( MouseWheelHandler handler) { // TODO Auto-generated method
68       * stub return null; } }
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                         // adds the url of the current page onto the
135                         // history stack so it can be navigated back to
136                         // However, hitting the back button will only
137                         // navigate the history stack in url and not change tabs
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         // left.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
220         // right.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
221         // tabRow.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
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         // left.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_LEFT);
236         // right.setHorizontalAlignment(HasHorizontalAlignment.ALIGN_RIGHT);
237         // tabRow.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);
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 }