001 /*
002 * Copyright 2012 GWT-Bootstrap
003 *
004 * Licensed under the Apache License, Version 2.0 (the "License");
005 * you may not use this file except in compliance with the License.
006 * You may obtain a copy of the License at
007 *
008 * http://www.apache.org/licenses/LICENSE-2.0
009 *
010 * Unless required by applicable law or agreed to in writing, software
011 * distributed under the License is distributed on an "AS IS" BASIS,
012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013 * See the License for the specific language governing permissions and
014 * limitations under the License.
015 */
016 package com.github.gwtbootstrap.client.ui;
017
018 import java.util.Iterator;
019
020 import com.github.gwtbootstrap.client.ui.base.HasIcon;
021 import com.github.gwtbootstrap.client.ui.base.HasStyle;
022 import com.github.gwtbootstrap.client.ui.base.IsResponsive;
023 import com.github.gwtbootstrap.client.ui.base.Style;
024 import com.github.gwtbootstrap.client.ui.constants.Device;
025 import com.github.gwtbootstrap.client.ui.constants.IconSize;
026 import com.github.gwtbootstrap.client.ui.constants.IconType;
027 import com.google.gwt.event.dom.client.ClickHandler;
028 import com.google.gwt.event.dom.client.HasClickHandlers;
029 import com.google.gwt.event.shared.GwtEvent;
030 import com.google.gwt.event.shared.HandlerRegistration;
031 import com.google.gwt.uibinder.client.UiChild;
032 import com.google.gwt.user.client.DOM;
033 import com.google.gwt.user.client.ui.HasWidgets;
034 import com.google.gwt.user.client.ui.IsWidget;
035 import com.google.gwt.user.client.ui.Widget;
036
037 /**
038 * The tab widget for {@link TabPanel}.
039 *
040 * <p>
041 * It's for UiBinder.
042 * Tab class provide easy syntax on UiBinder.
043 * </p>
044 * Example:
045 * <pre>
046 * {@code
047 * <b:TabPanel>
048 * <b:Tab heading="Typically">
049 * <b:Heading size="3">Typically Tab</b:Heading>
050 * <b:Paragraph>
051 * huhuhu hahha
052 * </b:Paragraph>
053 * </b:Tab>
054 * <b:Tab heading="Custom">
055 * <b:customTab>
056 * <b:Image resources="{res.logo}"/>
057 * </b:customTab>
058 * <b:Heading size="3">CustomTab Tab</b:Heading>
059 * </b:Tab>
060 * </b:TabPanel>
061 * }
062 * </pre>
063 * }
064 *
065 * </pre>
066 * @since 2.0.4.0
067 * @author ohashi keisuke
068 */
069 public class Tab implements IsWidget, HasWidgets, HasClickHandlers, HasStyle, IsResponsive,HasIcon {
070
071 TabLink link = new TabLink();
072
073 /**
074 * Create tmpy tab
075 */
076 public Tab() {
077 TabPane tabPane = new TabPane();
078
079 tabPane.setHref(DOM.createUniqueId());
080
081 link.setTablePane(tabPane);
082 }
083
084 /**
085 * Tab as a TabLink
086 */
087 @Override
088 public Widget asWidget() {
089 return link;
090 }
091
092 /**
093 * Get Container TabPane
094 * @return TabPane
095 */
096 protected TabPane getTabPane() {
097 return link.getTabPane();
098 }
099
100 /**
101 * Return TabLink
102 * @return tabLink
103 */
104 public TabLink asTabLink() {
105 return link;
106 }
107
108 /**
109 * Set tab active
110 * @param active
111 */
112 public void setActive(boolean active) {
113 link.setActive(active);
114 }
115
116 /**
117 * has active style name
118 * @return true:active false:deactive
119 */
120 public boolean isActive() {
121 return link.isActive();
122 }
123
124 /**
125 * Set tab text
126 * @param text tab text
127 */
128 public void setHeading(String text) {
129 link.setText(text);
130 }
131
132 /**
133 * Get Tab text
134 * @return tab text
135 */
136 public String getHeading() {
137 return link.getText();
138 }
139
140 /**
141 * Add widget to tab pane.
142 */
143 @Override
144 public void add(Widget w) {
145 link.getTabPane().add(w);
146 }
147
148 /**
149 * Clear tab pane children
150 */
151 @Override
152 public void clear() {
153 link.getTabPane().clear();
154 }
155
156 /**
157 * call {@link TabPane#iterator()}
158 */
159 @Override
160 public Iterator<Widget> iterator() {
161 return link.getTabPane().iterator();
162 }
163
164 /**
165 * call {@link TabPane#remove(Widget)}
166 *
167 * @return {@link TabPane#remove(Widget)} result
168 */
169 @Override
170 public boolean remove(Widget w) {
171 return link.getTabPane().remove(w);
172 }
173
174 /**
175 * add ClickEventHandler to TabLink
176 * {@inheritDoc}
177 */
178 @Override
179 public HandlerRegistration addClickHandler(ClickHandler handler) {
180 return link.addClickHandler(handler);
181 }
182
183 /**
184 * set TabLink icon type.
185 * {@inheritDoc}
186 */
187 @Override
188 public void setIcon(IconType type) {
189 link.setIcon(type);
190 }
191
192 /**
193 * Set TabLink icon size
194 * {@inheritDoc}
195 */
196 @Override
197 public void setIconSize(IconSize size) {
198 link.setIconSize(size);
199 }
200
201 /**
202 * Set TabLink and TabPane show on device.
203 * {@inheritDoc}
204 */
205 @Override
206 public void setShowOn(Device device) {
207 link.setShowOn(device);
208 link.getTabPane().setShowOn(device);
209 }
210
211 /**
212 * Set TabLink and TabPane show on device.
213 * {@inheritDoc}
214 */
215 @Override
216 public void setHideOn(Device device) {
217 link.setHideOn(device);
218 link.getTabPane().setHideOn(device);
219 }
220
221 /**
222 * set TabLink style
223 * {@inheritDoc}
224 */
225 @Override
226 public void setStyle(Style style) {
227 link.setStyle(style);
228 }
229
230 /**
231 * add TabLink style
232 * {@inheritDoc}
233 */
234 @Override
235 public void addStyle(Style style) {
236 link.addStyle(style);
237 }
238
239 /**
240 * remove TabLink style
241 * {@inheritDoc}
242 */
243 @Override
244 public void removeStyle(Style style) {
245 link.removeStyle(style);
246 }
247
248 /**
249 * fire TabLink event
250 * {@inheritDoc}
251 */
252 @Override
253 public void fireEvent(GwtEvent<?> event) {
254 link.fireEvent(event);
255 }
256
257 @UiChild(limit=1,tagname="customTab")
258 public void addDecorate(Widget w) {
259 link.add(w);
260 }
261 }