001: /*
002: * MyGWT Widget Library
003: * Copyright(c) 2007, MyGWT.
004: * licensing@mygwt.net
005: *
006: * http://mygwt.net/license
007: */
008: package net.mygwt.ui.client.widget;
009:
010: import net.mygwt.ui.client.Events;
011: import net.mygwt.ui.client.MyDOM;
012: import net.mygwt.ui.client.Style;
013: import net.mygwt.ui.client.event.BaseEvent;
014: import net.mygwt.ui.client.event.Listener;
015:
016: import com.google.gwt.user.client.Event;
017: import com.google.gwt.user.client.ui.Frame;
018:
019: /**
020: * A selectable user interface object corresponding to a tab for a page in a
021: * <code>TabFolder</code>.
022: *
023: * <dl>
024: * <dt><b>Styles:</b></dt>
025: * <dd>CLOSE</dd>
026: *
027: * <dt><b>Events:</b></dt>
028: * <dd><b>Close</b> : (widget)<br>
029: * <div>Fires after a item is closed.</div>
030: * <ul>
031: * <li>widget : this</li>
032: * </ul>
033: * </dd>
034: *
035: * <dt><b>CSS:</b></dt>
036: * <dd>.my-tabitem (the tab item)</dd>
037: * <dd>.my-tabitem .my-tabitem-text</dd>
038: * </dl>
039: */
040: public class TabItem extends Item {
041:
042: /**
043: * The item's close button.
044: */
045: protected IconButton closeBtn;
046:
047: TabFolder tabFolder;
048: WidgetContainer container;
049:
050: /**
051: * Creates a new tab item.
052: */
053: public TabItem() {
054: this (Style.NONE);
055: }
056:
057: /**
058: * Creates a new tab item.
059: *
060: * @param style the widget style
061: */
062: public TabItem(int style) {
063: super (style, "my-tabitem");
064: if ((style & Style.CLOSE) != 0) {
065: closeBtn = new IconButton("my-tab-close");
066: closeBtn.addStyleName("my-tool-btn");
067: addStyleName("my-tabitem-close");
068: closeBtn.addListener(Events.Click, new Listener() {
069: public void handleEvent(BaseEvent be) {
070: close();
071: }
072: });
073: addWidget(closeBtn);
074: }
075: container = new WidgetContainer();
076: }
077:
078: /**
079: * Closes the tab item.
080: */
081: public void close() {
082: tabFolder.onClose(this );
083: }
084:
085: /**
086: * Returns the tab item's content cotainer.
087: *
088: * @return the container
089: */
090: public WidgetContainer getContainer() {
091: return container;
092: }
093:
094: /**
095: * Returns the item's parent tab folder.
096: *
097: * @return the tab folder
098: */
099: public TabFolder getTabFolder() {
100: return tabFolder;
101: }
102:
103: /**
104: * Sets the item's icon style.
105: *
106: * @param style the icon style
107: */
108: public void setIconStyle(String style) {
109: addStyleName("my-tabitem-icon");
110: super .setIconStyle(style);
111: }
112:
113: /**
114: * Sets a url for the content area of the item.
115: *
116: * @param url the url
117: */
118: public void setURL(String url) {
119: Frame f = new Frame(url);
120: MyDOM.setStyleAttribute(f.getElement(), "frameborder", "0");
121: f.setSize("100%", "100%");
122: container.layout = null;
123: container.removeAll();
124: container.add(f);
125: }
126:
127: protected void onClick(BaseEvent be) {
128: tabFolder.setSelection(this );
129: }
130:
131: protected void onRender() {
132: super .onRender();
133: sinkEvents(Event.ONCLICK);
134: }
135:
136: void onSelectedChange(boolean select) {
137:
138: }
139:
140: }
|