API Reference 0.3.24dart_web_toolkit_uiTabBar

TabBar class

A horizontal bar of folder-style tabs, most commonly used as part of a {@link com.google.dwt.user.client.ui.TabPanel}. <p> <img class='gallery' src='doc-files/TabBar.png'/> </p> <h3>CSS Style Rules</h3> <ul class='css'> <li>.dwt-TabBar { the tab bar itself }</li> <li>.dwt-TabBar .dwt-TabBarFirst { the left edge of the bar }</li> <li>.dwt-TabBar .dwt-TabBarFirst-wrapper { table cell around the left edge } </li> <li>.dwt-TabBar .dwt-TabBarRest { the right edge of the bar }</li> <li>.dwt-TabBar .dwt-TabBarRest-wrapper { table cell around the right edge } </li> <li>.dwt-TabBar .dwt-TabBarItem { unselected tabs }</li> <li>.dwt-TabBar .dwt-TabBarItem-wrapper { table cell around tab }</li> <li>.dwt-TabBar .dwt-TabBarItem-selected { additional style for selected <p> <h3>Example</h3> {@example com.google.dwt.examples.TabBarExample} </p>

class TabBar extends Composite implements HasBeforeSelectionHandlers<int>, HasSelectionHandlers<int> {

   static final String STYLENAME_DEFAULT = "dwt-TabBarItem";
   HorizontalPanel panel = new HorizontalPanel();
   Widget selectedTab;

   /**
    * Creates an empty tab bar.
    */
   TabBar() {
     initWidget(panel);
     sinkEvents(IEvent.ONCLICK);
     clearAndSetStyleName("dwt-TabBar");

     // Add a11y role "tablist"
     //Roles.getTablistRole().set(panel.getElement());

     panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);

     Html first = new Html("&nbsp;", true);
     Html rest = new Html("&nbsp;", true);
     first.clearAndSetStyleName("dwt-TabBarFirst");
     rest.clearAndSetStyleName("dwt-TabBarRest");
     first.setHeight("100%");
     rest.setHeight("100%");

     panel.add(first);
     panel.add(rest);
     first.setHeight("100%");
     panel.setWidgetCellHeight(first, "100%");
     panel.setWidgetCellWidth(rest, "100%");
     UiObject.setElementStyleName(first.getElement().parent, "dwt-TabBarFirst-wrapper");
     UiObject.setElementStyleName(rest.getElement().parent, "dwt-TabBarRest-wrapper");
   }


   HandlerRegistration addBeforeSelectionHandler(BeforeSelectionHandler handler) {
     return addHandler(handler, BeforeSelectionEvent.TYPE);
   }


   HandlerRegistration addSelectionHandler(SelectionHandler handler) {
     return addHandler(handler, SelectionEvent.TYPE);
   }

//    /**
//     * Adds a new tab with the specified text.
//    *
//     * @param html the new tab's html
//     */
//    void addTab(SafeHtml html) {
//      addTab(html.asString(), true);
//    }

//    /**
//     * Adds a new tab with the specified text.
//    *
//     * @param text the new tab's text
//     */
//    void addTab(String text) {
//      insertTab(text, getTabCount());
//    }

   /**
    * Adds a new tab with the specified text.
   *
    * @param text the new tab's text
    * @param asHtml <code>true</code> to treat the specified text as html
    */
   void addTabText(String text, [bool asHtml = false]) {
     insertTabText(text, getTabCount(), asHtml);
   }

   /**
    * Adds a new tab with the specified widget.
   *
    * @param widget the new tab's widget
    */
   void addTabWidget(Widget widget) {
     insertTabWidget(widget, getTabCount());
   }

//    /**
//     * @deprecated Use {@link #addBeforeSelectionHandler(BeforeSelectionHandler)}
//     * and {@link #addSelectionHandler(SelectionHandler)} instead
//     */
//    @Deprecated
//    void addTabListener(TabListener listener) {
//      ListenerWrapper.WrappedTabListener.add(this, listener);
//    }

   /**
    * Gets the tab that is currently selected.
   *
    * @return the selected tab
    */
   int getSelectedTab() {
     if (selectedTab == null) {
       return -1;
     }
     return panel.getWidgetIndex(selectedTab) - 1;
   }

   /**
    * Gets the given tab.
   *
    * This method is final because the Tab interface will expand. Therefore
    * it is highly likely that subclasses which implemented this method would end up
    * breaking.
   *
    * @param index the tab's index
    * @return the tab wrapper
    */
   Tab getTab(int index) {
     if (index >= getTabCount()) {
       return null;
     }
     _ClickDelegatePanel p = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
     return p;
   }

   /**
    * Gets the number of tabs present.
   *
    * @return the tab count
    */
   int getTabCount() {
     return panel.getWidgetCount() - 2;
   }

   /**
    * Gets the specified tab's Html.
   *
    * @param index the index of the tab whose Html is to be retrieved
    * @return the tab's Html
    */
   String getTabHTML(int index) {
     if (index >= getTabCount()) {
       return null;
     }
     _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
     SimplePanel focusablePanel = delPanel.getFocusablePanel();
     Widget widget = focusablePanel.getWidget();
     if (widget is Html) {
       return (widget as Html).html;
     } else if (widget is Label) {
       return (widget as Label).text;
     } else {
       // This will be a focusable panel holding a user-supplied widget.
       return focusablePanel.getElement().parent.innerHtml;
     }
   }

   /**
    * Inserts a new tab at the specified index.
   *
    * @param html the new tab's html
    * @param beforeIndex the index before which this tab will be inserted
    */
//    void insertTab(SafeHtml html, int beforeIndex) {
//      insertTab(html.asString(), true, beforeIndex);
//    }

   /**
    * Inserts a new tab at the specified index.
   *
    * @param text the new tab's text
    * @param asHtml <code>true</code> to treat the specified text as Html
    * @param beforeIndex the index before which this tab will be inserted
    */
   void insertTabText(String text, int beforeIndex, [bool asHtml = false]) {
     checkInsertBeforeTabIndex(beforeIndex);

     Label item;
     if (asHtml) {
       item = new Html(text);
     } else {
       item = new Label(text);
     }

     item.wordWrap = false;
     _insertTabWidget(item, beforeIndex);
   }

//    /**
//     * Inserts a new tab at the specified index.
//    *
//     * @param text the new tab's text
//     * @param beforeIndex the index before which this tab will be inserted
//     */
//    void insertTab(String text, int beforeIndex) {
//      insertTab(text, false, beforeIndex);
//    }

   /**
    * Inserts a new tab at the specified index.
   *
    * @param widget widget to be used in the new tab
    * @param beforeIndex the index before which this tab will be inserted
    */
   void insertTabWidget(Widget widget, int beforeIndex) {
     _insertTabWidget(widget, beforeIndex);
   }

   /**
    * Check if a tab is enabled or disabled. If disabled, the user cannot select
    * the tab.
   *
    * @param index the index of the tab
    * @return true if the tab is enabled, false if disabled
    */
   bool isTabEnabled(int index) {
     assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";
     _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
     return delPanel.enabled;
   }

//    /**
//     * @deprecated add a {@link BeforeSelectionHandler} instead. Alternatively, if
//     * you need to access to the individual tabs, add a click handler to each
//     * {@link Tab} element instead.
//     */
//
//    @Deprecated
//    void onClick(Widget sender) {
//    }
//
//    /**
//     * @deprecated add a key down handler to the individual {@link Tab} objects
//     *  instead.
//     */
//
//    @Deprecated
//    void onKeyDown(Widget sender, char keyCode, int modifiers) {
//    }
//
//    /**
//     * @deprecated this method has been doing nothing for the entire last release,
//     * if what you wanted to do was to listen to key press events on tabs, add the
//     * key press handler to the individual tab wrappers instead.
//     */
//
//    @Deprecated
//    void onKeyPress(Widget sender, char keyCode, int modifiers) {
//    }
//
//    /**
//     * @deprecated this method has been doing nothing for the entire last release,
//     * if what you wanted to do was to listen to key up events on tabs, add the
//     * key up handler to the individual tab wrappers instead.
//    *
//     */
//
//    @Deprecated
//    void onKeyUp(Widget sender, char keyCode, int modifiers) {
//    }

   /**
    * Removes the tab at the specified index.
   *
    * @param index the index of the tab to be removed
    */
   void removeTab(int index) {
     checkTabIndex(index);

     // (index + 1) to account for 'first' placeholder widget.
     Widget toRemove = panel.getWidgetAt(index + 1);
     if (toRemove == selectedTab) {
       selectedTab = null;
     }
     panel.remove(toRemove);
   }

//    /**
//     * @deprecated Instead use the {@link HandlerRegistration#removeHandler}
//     * call on the object returned by an add*Handler method
//     */
//
//    @Deprecated
//    void removeTabListener(TabListener listener) {
//      ListenerWrapper.WrappedTabListener.remove(this, listener);
//    }

//    /**
//     * Programmatically selects the specified tab and fires events. Use index -1
//     * to specify that no tab should be selected.
//    *
//     * @param index the index of the tab to be selected
//     * @return <code>true</code> if successful, <code>false</code> if the change
//     * is denied by the {@link BeforeSelectionHandler}.
//     */
//    bool selectTab(int index) {
//      return selectTab(index, true);
//    }

   /**
    * Programmatically selects the specified tab. Use index -1 to specify that no
    * tab should be selected.
   *
    * @param index the index of the tab to be selected
    * @param fireEvents true to fire events, false not to
    * @return <code>true</code> if successful, <code>false</code> if the change
    * is denied by the {@link BeforeSelectionHandler}.
    */
   bool selectTab(int index, [bool fireEvents = true]) {
     checkTabIndex(index);

     if (fireEvents) {
       BeforeSelectionEvent event = BeforeSelectionEvent.fire(this, index);
       if (event != null && event.isCanceled()) {
         return false;
       }
     }

     // Check for -1.
     setSelectionStyle(selectedTab, false);
     if (index == -1) {
       selectedTab = null;
       return true;
     }

     selectedTab = panel.getWidgetAt(index + 1);
     setSelectionStyle(selectedTab, true);
     if (fireEvents) {
       SelectionEvent.fire(this, index);
     }
     return true;
   }

   /**
    * Enable or disable a tab. When disabled, users cannot select the tab.
   *
    * @param index the index of the tab to enable or disable
    * @param enabled true to enable, false to disable
    */
   void setTabEnabled(int index, bool enabled) {
     assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";

     // Style the wrapper
     _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
     delPanel.setEnabled(enabled);
     UiObject.manageElementStyleName(delPanel.getElement(), "dwt-TabBarItem-disabled", !enabled);
     UiObject.manageElementStyleName(delPanel.getElement().parent, "dwt-TabBarItem-wrapper-disabled", !enabled);
   }

   /**
    * Sets a tab's contents via Html.
   *
    * Use care when setting an object's Html; it is an easy way to expose
    * script-based security problems. Consider using
    * {@link #setTabText(int, String)} or {@link #setTabHTML(int, SafeHtml)}
    * whenever possible.
   *
    * @param index the index of the tab whose Html is to be set
    * @param html the tab new Html
    */
   void setTabHtml(int index, String html) {
     assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";

     _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
     SimplePanel focusablePanel = delPanel.getFocusablePanel();
     focusablePanel.setWidget(new Html(html, false));
   }

//    /**
//     * Sets a tab's contents via safe html.
//    *
//     * @param index the index of the tab whose Html is to be set
//     * @param html the tab new Html
//     */
//    void setTabHTML(int index, SafeHtml html) {
//      setTabHTML(index, html.asString());
//    }

   /**
    * Sets a tab's text contents.
   *
    * @param index the index of the tab whose text is to be set
    * @param text the object's new text
    */
   void setTabText(int index, String text) {
     assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";

     _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
     SimplePanel focusablePanel = delPanel.getFocusablePanel();

     // It is not safe to check if the current widget is an instanceof Label and
     // reuse it here because Html is an instanceof Label. Leaving an Html would
     // throw off the results of getTabHTML(int).
     focusablePanel.setWidget(new Label(text, false));
   }

   /**
    * Create a {@link SimplePanel} that will wrap the contents in a tab.
    * Subclasses can use this method to wrap tabs in decorator panels.
   *
    * @return a {@link SimplePanel} to wrap the tab contents, or null to leave
    * tabs unwrapped
    */
   SimplePanel createTabTextWrapper() {
     return null;
   }

   /**
    * Inserts a new tab at the specified index.
   *
    * @param widget widget to be used in the new tab
    * @param beforeIndex the index before which this tab will be inserted
    */
   void _insertTabWidget(Widget widget, int beforeIndex) {
     checkInsertBeforeTabIndex(beforeIndex);

     _ClickDelegatePanel delWidget = new _ClickDelegatePanel(this, widget);
     delWidget.clearAndSetStyleName(STYLENAME_DEFAULT);

     // Add a11y role "tab"
     SimplePanel focusablePanel = delWidget.getFocusablePanel();
//      Roles.getTabRole().set(focusablePanel.getElement());

     panel.insertAt(delWidget, beforeIndex + 1);

     UiObject.manageElementStyleName(delWidget.getElement().parent, STYLENAME_DEFAULT + "-wrapper", true);
   }

   /**
    * <b>Affected Elements:</b>
    * <ul>
    * <li>-tab# = The element containing the contents of the tab.</li>
    * <li>-tab-wrapper# = The cell containing the tab at the index.</li>
    * </ul>
   *
    * @see UIObject#onEnsureDebugId(String)
    */

   void onEnsureDebugId(String baseID) {

     int numTabs = getTabCount();
     for (int i = 0; i < numTabs; i++) {
       _ClickDelegatePanel delPanel = panel.getWidgetAt(i + 1) as _ClickDelegatePanel;
       SimplePanel focusablePanel = delPanel.getFocusablePanel();
     }
   }

   void checkInsertBeforeTabIndex(int beforeIndex) {
     if ((beforeIndex < 0) || (beforeIndex > getTabCount())) {
       throw new Exception("IndexOutOfBounds");
     }
   }

   void checkTabIndex(int index) {
     if ((index < -1) || (index >= getTabCount())) {
       throw new Exception("IndexOutOfBounds");
     }
   }

   /**
    * Selects the tab corresponding to the widget for the tab. To be clear the
    * widget for the tab is not the widget INSIDE of the tab; it is the widget
    * used to represent the tab itself.
   *
    * @param tabWidget The widget for the tab to be selected
    * @return true if the tab corresponding to the widget for the tab could
    * located and selected, false otherwise
    */
   bool selectTabByTabWidget(Widget tabWidget) {
     int numTabs = panel.getWidgetCount() - 1;

     for (int i = 1; i < numTabs; ++i) {
       if (panel.getWidgetAt(i) == tabWidget) {
         return selectTab(i - 1);
       }
     }

     return false;
   }

   void setSelectionStyle(Widget item, bool selected) {
     if (item != null) {
       if (selected) {
         item.addStyleName("dwt-TabBarItem-selected");
         UiObject.manageElementStyleName(item.getElement().parent, "dwt-TabBarItem-wrapper-selected", true);
       } else {
         item.removeStyleName("dwt-TabBarItem-selected");
         UiObject.manageElementStyleName(item.getElement().parent, "dwt-TabBarItem-wrapper-selected", false);
       }
     }
   }
}

Extends

UiObject > Widget > Composite > TabBar

Implements

HasSelectionHandlers<int>, HasBeforeSelectionHandlers<int>

Static Properties

final String STYLENAME_DEFAULT #

static final String STYLENAME_DEFAULT = "dwt-TabBarItem"

Constructors

new TabBar() #

Creates an empty tab bar.

TabBar() {
 initWidget(panel);
 sinkEvents(IEvent.ONCLICK);
 clearAndSetStyleName("dwt-TabBar");

 // Add a11y role "tablist"
 //Roles.getTablistRole().set(panel.getElement());

 panel.setVerticalAlignment(HasVerticalAlignment.ALIGN_BOTTOM);

 Html first = new Html("&nbsp;", true);
 Html rest = new Html("&nbsp;", true);
 first.clearAndSetStyleName("dwt-TabBarFirst");
 rest.clearAndSetStyleName("dwt-TabBarRest");
 first.setHeight("100%");
 rest.setHeight("100%");

 panel.add(first);
 panel.add(rest);
 first.setHeight("100%");
 panel.setWidgetCellHeight(first, "100%");
 panel.setWidgetCellWidth(rest, "100%");
 UiObject.setElementStyleName(first.getElement().parent, "dwt-TabBarFirst-wrapper");
 UiObject.setElementStyleName(rest.getElement().parent, "dwt-TabBarRest-wrapper");
}

Properties

int eventsToSink #

inherited from Widget

A set og events that should be sunk when the widget is attached to the DOM. (We delay the sinking of events to improve startup performance.) When the widget is attached, this is set is empty

Package protected to allow Composite to see it.

int eventsToSink = 0

HorizontalPanel panel #

HorizontalPanel panel = new HorizontalPanel()

Widget selectedTab #

Widget selectedTab

String get title #

inherited from UiObject

Gets the title associated with this object. The title is the 'tool-tip' displayed to users when they hover over the object.

@return the object's title

String get title => getElement().title;

void set title(String value) #

inherited from UiObject

Sets the element's title.

void set title(String value) {
 getElement().title = value;
}

bool get visible #

inherited from UiObject

Determines whether or not this object is visible. Note that this does not necessarily take into account whether or not the receiver's parent is visible, or even if it is attached to the Document. The default implementation of this trait in UIObject is based on the value of a dom element's style object's display attribute.

@return <code>true</code> if the object is visible

bool get visible => isVisible(getElement());

void set visible(bool visible) #

inherited from UiObject

Sets whether this object is visible.

@param visible <code>true</code> to show the object, <code>false</code> to

     hide it
void set visible(bool visible) {
 setVisible(getElement(), visible);
}

Methods

HandlerRegistration addAttachHandler(AttachEventHandler handler) #

inherited from Widget

Adds an AttachEvent handler.

@param handler the handler @return the handler registration

HandlerRegistration addAttachHandler(AttachEventHandler handler) {
 return addHandler(handler, AttachEvent.TYPE);
}

HandlerRegistration addBeforeSelectionHandler(BeforeSelectionHandler handler) #

Adds a {@link BeforeSelectionEvent} handler.

@param handler the handler @return the registration for the event

docs inherited from HasBeforeSelectionHandlers<int>
HandlerRegistration addBeforeSelectionHandler(BeforeSelectionHandler handler) {
 return addHandler(handler, BeforeSelectionEvent.TYPE);
}

HandlerRegistration addBitlessDomHandler(EventHandler handler, DomEventType type) #

inherited from Widget

For <a href= "http://code.google.com/p/google-web-toolkit/wiki/UnderstandingMemoryLeaks"

browsers which do not leak</a>, adds a native event handler to the widget.

Note that, unlike the {@link #addDomHandler(EventHandler, com.google.gwt.event.dom.client.DomEvent.Type)} implementation, there is no need to attach the widget to the DOM in order to cause the event handlers to be attached.

@param <H> the type of handler to add @param type the event key @param handler the handler @return {@link HandlerRegistration} used to remove the handler

HandlerRegistration addBitlessDomHandler(EventHandler handler, DomEventType type) {
 assert (handler != null);; // : "handler must not be null";
 assert (type != null); // : "type must not be null";
 sinkBitlessEvent(type.eventName);
 return ensureHandlers().addHandler(type, handler);
}

HandlerRegistration addDomHandler(EventHandler handler, DomEventType type) #

inherited from Widget

Adds a native event handler to the widget and sinks the corresponding native event. If you do not want to sink the native event, use the generic addHandler method instead.

@param <H> the type of handler to add @param type the event key @param handler the handler @return {@link HandlerRegistration} used to remove the handler

HandlerRegistration addDomHandler(EventHandler handler, DomEventType type) {
 assert (handler != null); // : "handler must not be null";
 assert (type != null); // : "type must not be null";
 int typeInt = IEvent.getTypeInt(type.eventName);
 if (typeInt == -1) {
   sinkBitlessEvent(type.eventName);
 } else {
   sinkEvents(typeInt);
 }
 return ensureHandlers().addHandler(type, handler);
}

HandlerRegistration addHandler(EventHandler handler, EventType<EventHandler> type) #

inherited from Widget

Adds this handler to the widget.

@param <H> the type of handler to add @param type the event type @param handler the handler @return {@link HandlerRegistration} used to remove the handler

HandlerRegistration addHandler(EventHandler handler, EventType<EventHandler> type) {
 return ensureHandlers().addHandler(type, handler);
}

HandlerRegistration addSelectionHandler(SelectionHandler handler) #

Adds a {@link SelectionEvent} handler.

@param handler the handler @return the registration for the event

docs inherited from HasSelectionHandlers<int>
HandlerRegistration addSelectionHandler(SelectionHandler handler) {
 return addHandler(handler, SelectionEvent.TYPE);
}

void addStyleDependentName(String styleSuffix) #

inherited from UiObject

Adds a dependent style name by specifying the style name's suffix. The actual form of the style name that is added is:

getStylePrimaryName() + '-' + styleSuffix

@param styleSuffix the suffix of the dependent style to be added. @see #setStylePrimaryName(String) @see #removeStyleDependentName(String) @see #setStyleDependentName(String, boolean) @see #addStyleName(String)

void addStyleDependentName(String styleSuffix) {
 setStyleDependentName(styleSuffix, true);
}

void addStyleName(String style) #

inherited from UiObject

Adds a secondary or dependent style name to this object. A secondary style name is an additional style name that is, in HTML/CSS terms, included as a space-separated token in the value of the CSS <code>class</code> attribute for this object's root element.

The most important use for this method is to add a special kind of secondary style name called a dependent style name. To add a dependent style name, use {@link #addStyleDependentName(String)}, which will prefix the 'style' argument with the result of {@link #k()} (followed by a '-'). For example, suppose the primary style name is gwt-TextBox. If the following method is called as obj.setReadOnly(true):

public void setReadOnly(boolean readOnly) {
  isReadOnlyMode = readOnly;

// Create a dependent style name. String readOnlyStyle = "readonly";

if (readOnly) {

addStyleDependentName(readOnlyStyle);

} else {

removeStyleDependentName(readOnlyStyle);

} }</pre>

then both of the CSS style rules below will be applied:

// This rule is based on the primary style name and is always active. .gwt-TextBox { font-size: 12pt; }

// This rule is based on a dependent style name that is only active // when the widget has called addStyleName(getStylePrimaryName() + // "-readonly"). .gwt-TextBox-readonly { background-color: lightgrey; border: none; }</pre>

The code can also be simplified with {@link #setStyleDependentName(String, boolean)}:

public void setReadOnly(boolean readOnly) {
  isReadOnlyMode = readOnly;
  setStyleDependentName("readonly", readOnly);
}

Dependent style names are powerful because they are automatically updated whenever the primary style name changes. Continuing with the example above, if the primary style name changed due to the following call:

setStylePrimaryName("my-TextThingy");

then the object would be re-associated with following style rules, removing those that were shown above.

.my-TextThingy {
  font-size: 20pt;
}

.my-TextThingy-readonly { background-color: red; border: 2px solid yellow; }</pre>

Secondary style names that are not dependent style names are not automatically updated when the primary style name changes.

@param style the secondary style name to be added @see UIObject @see #removeStyleName(String)

void addStyleName(String style) {
 setStyleName(style, true);
}

void addTabText(String text, [bool asHtml = false]) #

Adds a new tab with the specified text.

@param text the new tab's text @param asHtml <code>true</code> to treat the specified text as html

void addTabText(String text, [bool asHtml = false]) {
 insertTabText(text, getTabCount(), asHtml);
}

void addTabWidget(Widget widget) #

Adds a new tab with the specified widget.

@param widget the new tab's widget

void addTabWidget(Widget widget) {
 insertTabWidget(widget, getTabCount());
}

Widget asWidget() #

inherited from Widget

Returns the Widget aspect of the receiver.

Widget asWidget() {
 return this;
}

void checkInsertBeforeTabIndex(int beforeIndex) #

void checkInsertBeforeTabIndex(int beforeIndex) {
 if ((beforeIndex < 0) || (beforeIndex > getTabCount())) {
   throw new Exception("IndexOutOfBounds");
 }
}

void checkTabIndex(int index) #

void checkTabIndex(int index) {
 if ((index < -1) || (index >= getTabCount())) {
   throw new Exception("IndexOutOfBounds");
 }
}

void clearAndSetStyleName(String style) #

inherited from UiObject

Clears all of the object's style names and sets it to the given style. You should normally use {@link #setStylePrimaryName(String)} unless you wish to explicitly remove all existing styles.

@param style the new style name @see #setStylePrimaryName(String)

void clearAndSetStyleName(String style) {
 setElementStyleName(getStyleElement(), style);
}

EventBus createEventBus() #

inherited from Widget

Creates the SimpleEventBus used by this Widget. You can override this method to create a custom EventBus.

@return the EventBus you want to use.

EventBus createEventBus() {
 return new SimpleEventBus();
}

SimplePanel createTabTextWrapper() #

Create a {@link SimplePanel} that will wrap the contents in a tab. Subclasses can use this method to wrap tabs in decorator panels.

@return a {@link SimplePanel} to wrap the tab contents, or null to leave tabs unwrapped

SimplePanel createTabTextWrapper() {
 return null;
}

void delegateEvent(Widget target, DwtEvent event) #

inherited from Widget

Fires an event on a child widget. Used to delegate the handling of an event from one widget to another.

@param event the event @param target fire the event on the given target

void delegateEvent(Widget target, DwtEvent event) {
 target.fireEvent(event);
}

void doAttachChildren() #

inherited from Widget

If a widget contains one or more child widgets that are not in the logical widget hierarchy (the child is physically connected only on the DOM level), it must override this method and call {@link #onAttach()} for each of its child widgets.

@see #onAttach()

void doAttachChildren() {
}

void doDetachChildren() #

inherited from Widget

If a widget contains one or more child widgets that are not in the logical widget hierarchy (the child is physically connected only on the DOM level), it must override this method and call {@link #onDetach()} for each of its child widgets.

@see #onDetach()

void doDetachChildren() {
}

EventBus ensureHandlers() #

inherited from Widget

Ensures the existence of the event bus.

@return the EventBus.

EventBus ensureHandlers() {
 return _eventBus == null ? _eventBus = createEventBus() : _eventBus;
}

double extractLengthValue(String s) #

inherited from UiObject

Intended to be used to pull the value out of a CSS length. If the value is "auto" or "inherit", 0 will be returned.

@param s The CSS length string to extract @return The leading numeric portion of <code>s</code>, or 0 if "auto" or

    "inherit" are passed in.
double extractLengthValue(String s) {
 if (s == "auto" || s == "inherit" || s == "") {
   return 0.0;
 } else {
   // numberRegex divides the string into a leading numeric portion
   // followed by an arbitrary portion.
   if(numberRegex.hasMatch(s)) {
     // Extract the leading numeric portion of string
     s = numberRegex.firstMatch(s)[0];
   }
   return double.parse(s);
 }
}

void fireEvent(DwtEvent event) #

inherited from Widget

Fires the given event to the handlers listening to the event's type.

Any exceptions thrown by handlers will be bundled into a UmbrellaException and then re-thrown after all handlers have completed. An exception thrown by a handler will not prevent other handlers from executing.

@param event the event

void fireEvent(DwtEvent event) {
//    if (_eventBus != null) {
//      _eventBus.fireEvent(event);
//    }
 if (_eventBus != null) {
   // If it not live we should revive it.
   if (!event.isLive()) {
     event.revive();
   }
   Object oldSource = event.getSource();
   event.overrideSource(getElement());
   try {

     // May throw an UmbrellaException.
     _eventBus.fireEventFromSource(event, getElement());
   } on UmbrellaException catch (e) {
     throw new UmbrellaException(e.causes);
   } finally {
     if (oldSource == null) {
       // This was my event, so I should kill it now that I'm done.
       event.kill();
     } else {
       // Restoring the source for the next handler to use.
       event.overrideSource(oldSource);
     }
   }
 }
}

int getAbsoluteLeft() #

inherited from UiObject

Gets the object's absolute left position in pixels, as measured from the browser window's client area.

@return the object's absolute left position

int getAbsoluteLeft() {
 return Dom.getAbsoluteLeft(getElement());
}

int getAbsoluteTop() #

inherited from UiObject

Gets the object's absolute top position in pixels, as measured from the browser window's client area.

@return the object's absolute top position

int getAbsoluteTop() {
 return Dom.getAbsoluteTop(getElement());
}

Element getElement() #

inherited from UiObject

Gets this object's browser element.

dart_html.Element getElement() {
 assert (_element != null); // : MISSING_ELEMENT_ERROR;
 return _element;
}

EventBus getEventBus() #

inherited from Widget

Return EventBus.

EventBus getEventBus() {
 return _eventBus;
}

Object getLayoutData() #

inherited from Widget

Gets the panel-defined layout data associated with this widget.

@return the widget's layout data @see #setLayoutData

Object getLayoutData() {
 return _layoutData;
}

int getOffsetHeight() #

inherited from UiObject

Gets the object's offset height in pixels. This is the total height of the object, including decorations such as border and padding, but not margin.

@return the object's offset height

int getOffsetHeight() {
 return getElement().offset.height; // Dom.getElementPropertyInt(getElement(), "offsetHeight");
}

int getOffsetWidth() #

inherited from UiObject

Gets the object's offset width in pixels. This is the total width of the object, including decorations such as border and padding, but not margin.

@return the object's offset width

int getOffsetWidth() {
 return getElement().offset.width; // Dom.getElementPropertyInt(getElement(), "offsetWidth");
}

Widget getParent() #

inherited from Widget

Gets this widget's parent panel.

@return the widget's parent panel

Widget getParent() {
 return _parent;
}

int getSelectedTab() #

Gets the tab that is currently selected.

@return the selected tab

int getSelectedTab() {
 if (selectedTab == null) {
   return -1;
 }
 return panel.getWidgetIndex(selectedTab) - 1;
}

Element getStyleElement() #

inherited from UiObject

Template method that returns the element to which style names will be applied. By default it returns the root element, but this method may be overridden to apply styles to a child element.

@return the element to which style names will be applied

dart_html.Element getStyleElement() {
 return getElement();
}

String getStyleName() #

inherited from UiObject

Gets all of the object's style names, as a space-separated list. If you wish to retrieve only the primary style name, call {@link #getStylePrimaryName()}.

@return the objects's space-separated style names @see #getStylePrimaryName()

String getStyleName() {
 return getElementStyleName(getStyleElement());
}

String getStylePrimaryName() #

inherited from UiObject

Gets the primary style name associated with the object.

@return the object's primary style name @see #setStyleName(String) @see #addStyleName(String) @see #removeStyleName(String)

String getStylePrimaryName() {
 return getElementStylePrimaryName(getStyleElement());
}

Tab getTab(int index) #

Gets the given tab.

This method is final because the Tab interface will expand. Therefore it is highly likely that subclasses which implemented this method would end up breaking.

@param index the tab's index @return the tab wrapper

Tab getTab(int index) {
 if (index >= getTabCount()) {
   return null;
 }
 _ClickDelegatePanel p = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
 return p;
}

int getTabCount() #

Gets the number of tabs present.

@return the tab count

int getTabCount() {
 return panel.getWidgetCount() - 2;
}

String getTabHTML(int index) #

Gets the specified tab's Html.

@param index the index of the tab whose Html is to be retrieved @return the tab's Html

String getTabHTML(int index) {
 if (index >= getTabCount()) {
   return null;
 }
 _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
 SimplePanel focusablePanel = delPanel.getFocusablePanel();
 Widget widget = focusablePanel.getWidget();
 if (widget is Html) {
   return (widget as Html).html;
 } else if (widget is Label) {
   return (widget as Label).text;
 } else {
   // This will be a focusable panel holding a user-supplied widget.
   return focusablePanel.getElement().parent.innerHtml;
 }
}

Widget getWidget() #

inherited from Composite

Provides subclasses access to the topmost widget that defines this composite.

@return the widget

Widget getWidget() {
 return _widget;
}

void initWidget(Widget widget) #

inherited from Composite

Sets the widget to be wrapped by the composite. The wrapped widget must be set before calling any {@link Widget} methods on this object, or adding it to a panel. This method may only be called once for a given composite.

@param widget the widget to be wrapped

void initWidget(Widget widget) {
 // Validate. Make sure the widget is not being set twice.
 if (this._widget != null) {
   throw new Exception("Composite.initWidget() may only be called once.");
 }

 if (widget is IsRenderable) {
   // In case the Widget being wrapped is an IsRenderable, we save that fact.
   this._renderable = widget as IsRenderable;
 }

 // Detach the new child.
 widget.removeFromParent();

 // Use the contained widget's element as the composite's element,
 // effectively merging them within the DOM.
 dart_html.Element elem = widget.getElement();
 setElement(elem);

//    if (PotentialElement.isPotential(elem)) {
//      PotentialElement.as(elem).setResolver(this);
//    }

 // Logical attach.
 this._widget = widget;

 // Adopt.
 widget.setParent(this);
}

void insertTabText(String text, int beforeIndex, [bool asHtml = false]) #

Inserts a new tab at the specified index.

@param html the new tab's html @param beforeIndex the index before which this tab will be inserted

Inserts a new tab at the specified index.

@param text the new tab's text @param asHtml <code>true</code> to treat the specified text as Html @param beforeIndex the index before which this tab will be inserted

void insertTabText(String text, int beforeIndex, [bool asHtml = false]) {
 checkInsertBeforeTabIndex(beforeIndex);

 Label item;
 if (asHtml) {
   item = new Html(text);
 } else {
   item = new Label(text);
 }

 item.wordWrap = false;
 _insertTabWidget(item, beforeIndex);
}

void insertTabWidget(Widget widget, int beforeIndex) #

Inserts a new tab at the specified index.

@param widget widget to be used in the new tab @param beforeIndex the index before which this tab will be inserted

void insertTabWidget(Widget widget, int beforeIndex) {
 _insertTabWidget(widget, beforeIndex);
}

bool isAttached() #

inherited from Composite

Returns whether or not the receiver is attached to the {@link com.google.gwt.dom.client.Document Document}'s {@link com.google.gwt.dom.client.BodyElement BodyElement}.

@return true if attached, false otherwise

bool isAttached() {
 if (_widget != null) {
   return _widget.isAttached();
 }
 return false;
}

bool isOrWasAttached() #

inherited from Widget

Has this widget ever been attached?

@return true if this widget ever been attached to the DOM, false otherwise

bool isOrWasAttached() {
 return eventsToSink == -1;
}

bool isTabEnabled(int index) #

Check if a tab is enabled or disabled. If disabled, the user cannot select the tab.

@param index the index of the tab @return true if the tab is enabled, false if disabled

bool isTabEnabled(int index) {
 assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";
 _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
 return delPanel.enabled;
}

void onAttach() #

inherited from Composite

This method is called when a widget is attached to the browser's document. To receive notification after a Widget has been added to the document, override the {@link #onLoad} method or use {@link #addAttachHandler}.

It is strongly recommended that you override {@link #onLoad()} or {@link #doAttachChildren()} instead of this method to avoid inconsistencies between logical and physical attachment states.

Subclasses that override this method must call super.onAttach() to ensure that the Widget has been attached to its underlying Element.

@throws IllegalStateException if this widget is already attached @see #onLoad() @see #doAttachChildren()

void onAttach() {
 if (!isOrWasAttached()) {
   _widget.sinkEvents(eventsToSink);
   eventsToSink = -1;
 }

 _widget.onAttach();

 // Clobber the widget's call to setEventListener(), causing all events to
 // be routed to this composite, which will delegate back to the widget by
 // default (note: it's not necessary to clear this in onDetach(), because
 // the widget's onDetach will do so).
 Dom.setEventListener(getElement(), this);

 // Call onLoad() directly, because we're not calling super.onAttach().
 onLoad();
 AttachEvent.fire(this, true);
}

void onBrowserEvent(Event event) #

inherited from Composite

Fired whenever a browser event is received.

@param event the event received

TODO

void onBrowserEvent(dart_html.Event event) {
 // Fire any handler added to the composite itself.
 super.onBrowserEvent(event);

 // Delegate events to the widget.
 _widget.onBrowserEvent(event);
}

void onDetach() #

inherited from Composite

This method is called when a widget is detached from the browser's document. To receive notification before a Widget is removed from the document, override the {@link #onUnload} method or use {@link #addAttachHandler}.

It is strongly recommended that you override {@link #onUnload()} or {@link #doDetachChildren()} instead of this method to avoid inconsistencies between logical and physical attachment states.

Subclasses that override this method must call super.onDetach() to ensure that the Widget has been detached from the underlying Element. Failure to do so will result in application memory leaks due to circular references between DOM Elements and JavaScript objects.

@throws IllegalStateException if this widget is already detached @see #onUnload() @see #doDetachChildren()

void onDetach() {
 try {
   onUnload();
   AttachEvent.fire(this, false);
 } finally {
   // We don't want an exception in user code to keep us from calling the
   // super implementation (or event listeners won't get cleaned up and
   // the attached flag will be wrong).
   _widget.onDetach();
 }
}

void onEnsureDebugId(String baseID) #

Affected Elements:
  • -tab# = The element containing the contents of the tab.
  • -tab-wrapper# = The cell containing the tab at the index.

@see UIObject#onEnsureDebugId(String)

void onEnsureDebugId(String baseID) {

 int numTabs = getTabCount();
 for (int i = 0; i < numTabs; i++) {
   _ClickDelegatePanel delPanel = panel.getWidgetAt(i + 1) as _ClickDelegatePanel;
   SimplePanel focusablePanel = delPanel.getFocusablePanel();
 }
}

void onLoad() #

inherited from Widget

This method is called immediately after a widget becomes attached to the browser's document.

void onLoad() {
}

void onUnload() #

inherited from Widget

This method is called immediately before a widget will be detached from the browser's document.

void onUnload() {
}

void removeFromParent() #

inherited from Widget

Removes this widget from its parent widget, if one exists.

If it has no parent, this method does nothing. If it is a "root" widget (meaning it's been added to the detach list via {@link RootPanel#detachOnWindowClose(Widget)}), it will be removed from the detached immediately. This makes it possible for Composites and Panels to adopt root widgets.

@throws IllegalStateException if this widget's parent does not support

      removal (e.g. {@link Composite})
void removeFromParent() {
 if (_parent == null) {
   // If the widget had no parent, check to see if it was in the detach list
   // and remove it if necessary.
   if (RootPanel.isInDetachList(this)) {
     RootPanel.detachNow(this);
   }
 } else if (_parent is HasWidgets) {
   (_parent as HasWidgets).remove(this);
 } else if (_parent != null) {
   throw new Exception("This widget's parent does not implement HasWidgets");
 }
}

void removeStyleDependentName(String styleSuffix) #

inherited from UiObject

Removes a dependent style name by specifying the style name's suffix.

@param styleSuffix the suffix of the dependent style to be removed @see #setStylePrimaryName(Element, String) @see #addStyleDependentName(String) @see #setStyleDependentName(String, boolean)

void removeStyleDependentName(String styleSuffix) {
 setStyleDependentName(styleSuffix, false);
}

void removeStyleName(String style) #

inherited from UiObject

Removes a style name. This method is typically used to remove secondary style names, but it can be used to remove primary stylenames as well. That use is not recommended.

@param style the secondary style name to be removed @see #addStyleName(String) @see #setStyleName(String, boolean)

void removeStyleName(String style) {
 setStyleName(style, false);
}

void removeTab(int index) #

Removes the tab at the specified index.

@param index the index of the tab to be removed

void removeTab(int index) {
 checkTabIndex(index);

 // (index + 1) to account for 'first' placeholder widget.
 Widget toRemove = panel.getWidgetAt(index + 1);
 if (toRemove == selectedTab) {
   selectedTab = null;
 }
 panel.remove(toRemove);
}

void replaceElement(Element elem) #

inherited from Widget

Replaces this object's browser element.

This method exists only to support a specific use-case in Image, and should not be used by other classes.

@param elem the object's new element

void replaceElement(dart_html.Element elem) {
 if (isAttached()) {
   // Remove old event listener to avoid leaking. onDetach will not do this
   // for us, because it is only called when the widget itself is detached
   // from the document.
   Dom.setEventListener(getElement(), null);
 }

 super.replaceElement(elem);

 if (isAttached()) {
   // Hook the event listener back up on the new element. onAttach will not
   // do this for us, because it is only called when the widget itself is
   // attached to the document.
   Dom.setEventListener(getElement(), this);
 }
}

bool selectTab(int index, [bool fireEvents = true]) #

Programmatically selects the specified tab. Use index -1 to specify that no tab should be selected.

@param index the index of the tab to be selected @param fireEvents true to fire events, false not to @return <code>true</code> if successful, <code>false</code> if the change is denied by the {@link BeforeSelectionHandler}.

bool selectTab(int index, [bool fireEvents = true]) {
 checkTabIndex(index);

 if (fireEvents) {
   BeforeSelectionEvent event = BeforeSelectionEvent.fire(this, index);
   if (event != null && event.isCanceled()) {
     return false;
   }
 }

 // Check for -1.
 setSelectionStyle(selectedTab, false);
 if (index == -1) {
   selectedTab = null;
   return true;
 }

 selectedTab = panel.getWidgetAt(index + 1);
 setSelectionStyle(selectedTab, true);
 if (fireEvents) {
   SelectionEvent.fire(this, index);
 }
 return true;
}

bool selectTabByTabWidget(Widget tabWidget) #

Selects the tab corresponding to the widget for the tab. To be clear the widget for the tab is not the widget INSIDE of the tab; it is the widget used to represent the tab itself.

@param tabWidget The widget for the tab to be selected @return true if the tab corresponding to the widget for the tab could located and selected, false otherwise

bool selectTabByTabWidget(Widget tabWidget) {
 int numTabs = panel.getWidgetCount() - 1;

 for (int i = 1; i < numTabs; ++i) {
   if (panel.getWidgetAt(i) == tabWidget) {
     return selectTab(i - 1);
   }
 }

 return false;
}

void setElement(Element elem) #

inherited from UiObject

Sets this object's browser element. UIObject subclasses must call this method before attempting to call any other methods, and it may only be called once.

@param elem the object's element

void setElement(dart_html.Element elem) {
 assert (_element == null);
 this._element = elem;
}

void setHeight(String height) #

inherited from UiObject

Sets the object's height. This height does not include decorations such as border, margin, and padding.

@param height the object's new height, in CSS units (e.g. "10px", "1em")

void setHeight(String height) {
 // This exists to deal with an inconsistency in IE's implementation where
 // it won't accept negative numbers in length measurements
 assert (extractLengthValue(height.trim().toLowerCase()) >= 0); // : "CSS heights should not be negative";
 Dom.setStyleAttribute(getElement(), "height", height);
}

void setLayoutData(Object value) #

inherited from Widget

Sets the panel-defined layout data associated with this widget. Only the panel that currently contains a widget should ever set this value. It serves as a place to store layout bookkeeping data associated with a widget.

@param layoutData the widget's layout data

void setLayoutData(Object value) {
 this._layoutData = value;
}

void setParent(Widget parent) #

inherited from Widget

Sets this widget's parent. This method should only be called by {@link Panel} and {@link Composite}.

@param parent the widget's new parent @throws IllegalStateException if <code>parent</code> is non-null and the

      widget already has a parent
void setParent(Widget parent) {
 Widget oldParent = this._parent;
 if (parent == null) {
   try {
     if (oldParent != null && oldParent.isAttached()) {
       onDetach();
       assert (!isAttached()); // : "Failure of " + this.getClass().getName() + " to call super.onDetach()";
     }
   } finally {
     // Put this in a finally in case onDetach throws an exception.
     this._parent = null;
   }
 } else {
   if (oldParent != null) {
     throw new Exception("Cannot set a new parent without first clearing the old parent");
   }
   this._parent = parent;
   if (parent.isAttached()) {
     onAttach();
     assert (isAttached()); // : "Failure of " + this.getClass().getName() + " to call super.onAttach()";
   }
 }
}

void setPixelSize(int width, int height) #

inherited from UiObject

Sets the object's size, in pixels, not including decorations such as border, margin, and padding.

@param width the object's new width, in pixels @param height the object's new height, in pixels

void setPixelSize(int width, int height) {
 if (width >= 0) {
   setWidth(width.toString() + "px");
 }
 if (height >= 0) {
   setHeight(height.toString() + "px");
 }
}

void setSelectionStyle(Widget item, bool selected) #

void setSelectionStyle(Widget item, bool selected) {
 if (item != null) {
   if (selected) {
     item.addStyleName("dwt-TabBarItem-selected");
     UiObject.manageElementStyleName(item.getElement().parent, "dwt-TabBarItem-wrapper-selected", true);
   } else {
     item.removeStyleName("dwt-TabBarItem-selected");
     UiObject.manageElementStyleName(item.getElement().parent, "dwt-TabBarItem-wrapper-selected", false);
   }
 }
}

void setSize(String width, String height) #

inherited from UiObject

Sets the object's size. This size does not include decorations such as border, margin, and padding.

@param width the object's new width, in CSS units (e.g. "10px", "1em") @param height the object's new height, in CSS units (e.g. "10px", "1em")

void setSize(String width, String height) {
 setWidth(width);
 setHeight(height);
}

void setStyleDependentName(String styleSuffix, bool add) #

inherited from UiObject

Adds or removes a dependent style name by specifying the style name's suffix. The actual form of the style name that is added is:

getStylePrimaryName() + '-' + styleSuffix

@param styleSuffix the suffix of the dependent style to be added or removed @param add <code>true</code> to add the given style, <code>false</code> to

     remove it

@see #setStylePrimaryName(Element, String) @see #addStyleDependentName(String) @see #setStyleName(String, boolean) @see #removeStyleDependentName(String)

void setStyleDependentName(String styleSuffix, bool add) {
 setStyleName(getStylePrimaryName() + '-' + styleSuffix, add);
}

void setStyleName(String style, bool add) #

inherited from UiObject

Adds or removes a style name. This method is typically used to remove secondary style names, but it can be used to remove primary stylenames as well. That use is not recommended.

@param style the style name to be added or removed @param add <code>true</code> to add the given style, <code>false</code> to

     remove it

@see #addStyleName(String) @see #removeStyleName(String)

void setStyleName(String style, bool add) {
 manageElementStyleName(getStyleElement(), style, add);
}

void setStylePrimaryName(String style) #

inherited from UiObject

Sets the object's primary style name and updates all dependent style names.

@param style the new primary style name @see #addStyleName(String) @see #removeStyleName(String)

void setStylePrimaryName(String style) {
 setElementStylePrimaryName(getStyleElement(), style);
}

void setTabEnabled(int index, bool enabled) #

Enable or disable a tab. When disabled, users cannot select the tab.

@param index the index of the tab to enable or disable @param enabled true to enable, false to disable

void setTabEnabled(int index, bool enabled) {
 assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";

 // Style the wrapper
 _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
 delPanel.setEnabled(enabled);
 UiObject.manageElementStyleName(delPanel.getElement(), "dwt-TabBarItem-disabled", !enabled);
 UiObject.manageElementStyleName(delPanel.getElement().parent, "dwt-TabBarItem-wrapper-disabled", !enabled);
}

void setTabHtml(int index, String html) #

Sets a tab's contents via Html.

Use care when setting an object's Html; it is an easy way to expose script-based security problems. Consider using {@link #setTabText(int, String)} or {@link #setTabHTML(int, SafeHtml)} whenever possible.

@param index the index of the tab whose Html is to be set @param html the tab new Html

void setTabHtml(int index, String html) {
 assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";

 _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
 SimplePanel focusablePanel = delPanel.getFocusablePanel();
 focusablePanel.setWidget(new Html(html, false));
}

void setTabText(int index, String text) #

Sets a tab's text contents.

@param index the index of the tab whose text is to be set @param text the object's new text

void setTabText(int index, String text) {
 assert ((index >= 0) && (index < getTabCount())); // : "Tab index out of bounds";

 _ClickDelegatePanel delPanel = panel.getWidgetAt(index + 1) as _ClickDelegatePanel;
 SimplePanel focusablePanel = delPanel.getFocusablePanel();

 // It is not safe to check if the current widget is an instanceof Label and
 // reuse it here because Html is an instanceof Label. Leaving an Html would
 // throw off the results of getTabHTML(int).
 focusablePanel.setWidget(new Label(text, false));
}

void setWidth(String width) #

inherited from UiObject

Sets the object's width. This width does not include decorations such as border, margin, and padding.

@param width the object's new width, in CSS units (e.g. "10px", "1em")

void setWidth(String width) {
 // This exists to deal with an inconsistency in IE's implementation where
 // it won't accept negative numbers in length measurements
 assert (extractLengthValue(width.trim().toLowerCase()) >= 0); // : "CSS widths should not be negative";
 Dom.setStyleAttribute(getElement(), "width", width);
}

void sinkBitlessEvent(String eventTypeName) #

inherited from UiObject

Sinks a named event. Note that only {@link Widget widgets} may actually receive events, but can receive events from all objects contained within them.

@param eventTypeName name of the event to sink on this element @see com.google.gwt.user.client.Event

void sinkBitlessEvent(String eventTypeName) {
 Dom.sinkBitlessEvent(getElement(), eventTypeName);
}

void sinkEvents(int eventBitsToAdd) #

inherited from Widget

Overridden to defer the call to super.sinkEvents until the first time this widget is attached to the dom, as a performance enhancement. Subclasses wishing to customize sinkEvents can preserve this deferred sink behavior by putting their implementation behind a check of <code>isOrWasAttached()</code>:

{@literal @}Override
public void sinkEvents(int eventBitsToAdd) {
  if (isOrWasAttached()) {
    /{@literal *} customized sink code goes here {@literal *}/
  } else {
    super.sinkEvents(eventBitsToAdd);
 }
} 
void sinkEvents(int eventBitsToAdd) {
 if (isOrWasAttached()) {
   super.sinkEvents(eventsToSink);
 } else {
   eventsToSink |= eventBitsToAdd;
 }
}

String toString() #

inherited from UiObject

This method is overridden so that any object can be viewed in the debugger as an HTML snippet.

@return a string representation of the object

String toString() {
 if (_element == null) {
   return "(null handle)";
 }
 return getElement().toString();
}

void unsinkEvents(int eventBitsToRemove) #

inherited from UiObject

Removes a set of events from this object's event list.

@param eventBitsToRemove a bitfield representing the set of events to be

     removed from this element's event set

@see #sinkEvents @see com.google.gwt.user.client.Event

void unsinkEvents(int eventBitsToRemove) {
 Dom.sinkEvents(getElement(), Dom.getEventsSunk(getElement()) & (~eventBitsToRemove));
}