/* * Smart GWT (GWT for SmartClient) * Copyright 2008 and beyond, Isomorphic Software, Inc. * * Smart GWT is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License version 3 * as published by the Free Software Foundation. Smart GWT is also * available under typical commercial license terms - see * http://smartclient.com/license * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. */ package com.smartgwt.client.widgets.tab; import com.smartgwt.client.event.*; import com.smartgwt.client.core.*; import com.smartgwt.client.types.*; import com.smartgwt.client.data.*; import com.smartgwt.client.data.events.*; import com.smartgwt.client.rpc.*; import com.smartgwt.client.widgets.*; import com.smartgwt.client.widgets.events.*; import com.smartgwt.client.widgets.form.*; import com.smartgwt.client.widgets.form.validator.*; import com.smartgwt.client.widgets.form.fields.*; import com.smartgwt.client.widgets.tile.*; import com.smartgwt.client.widgets.tile.events.*; import com.smartgwt.client.widgets.grid.*; import com.smartgwt.client.widgets.grid.events.*; import com.smartgwt.client.widgets.chart.*; import com.smartgwt.client.widgets.layout.*; import com.smartgwt.client.widgets.layout.events.*; import com.smartgwt.client.widgets.menu.*; import com.smartgwt.client.widgets.tab.*; import com.smartgwt.client.widgets.toolbar.*; import com.smartgwt.client.widgets.tree.*; import com.smartgwt.client.widgets.tree.events.*; import com.smartgwt.client.widgets.viewer.*; import com.smartgwt.client.widgets.calendar.*; import com.smartgwt.client.widgets.calendar.events.*; import com.smartgwt.client.widgets.cube.*; import java.util.Date; import java.util.List; import java.util.Map; import java.util.HashMap; import com.google.gwt.user.client.ui.Widget; import com.google.gwt.core.client.JavaScriptObject; import com.google.gwt.user.client.Element; import com.smartgwt.client.util.*; import com.google.gwt.event.shared.*; import com.google.gwt.event.shared.HasHandlers; /** * The TabSet class allows components on several panes to share the same space. The tabs at the top can be selected by the * user to show each pane. <P> Tabs are configured via the <code>tabs</code> property, each of which has a * <code>pane</code> property which will be displayed in the main pane when that tab is selected. */ public class TabSet extends Canvas implements com.smartgwt.client.widgets.tab.events.HasCloseClickHandlers, com.smartgwt.client.widgets.tab.events.HasTabContextMenuHandlers, com.smartgwt.client.widgets.tab.events.HasTabSelectedHandlers, com.smartgwt.client.widgets.tab.events.HasTabDeselectedHandlers { public static TabSet getOrCreateRef(JavaScriptObject jsObj) { if(jsObj == null) return null; BaseWidget obj = BaseWidget.getRef(jsObj); if(obj != null) { return (TabSet) obj; } else { return new TabSet(jsObj); } } public TabSet(){ scClassName = "TabSet"; } public TabSet(JavaScriptObject jsObj){ super(jsObj); } protected native JavaScriptObject create()/*-{ var config = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); var scClassName = this.@com.smartgwt.client.widgets.BaseWidget::scClassName; var widget = $wnd.isc[scClassName].create(config); this.@com.smartgwt.client.widgets.BaseWidget::doInit()(); return widget; }-*/; // ********************* Properties / Attributes *********************** /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller showTabScroller} is true, should tabs be scrolled * into view via an animation when the user interacts with the scroller buttons? * * @param animateTabScrolling animateTabScrolling Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setAnimateTabScrolling(Boolean animateTabScrolling) throws IllegalStateException { setAttribute("animateTabScrolling", animateTabScrolling, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller showTabScroller} is true, should tabs be scrolled * into view via an animation when the user interacts with the scroller buttons? * * * @return Boolean */ public Boolean getAnimateTabScrolling() { return getAttributeAsBoolean("animateTabScrolling"); } /** * Should tabs in this tabSet show an icon allowing the user to dismiss the tab by * clicking on it directly. May be overridden for individual tabs by setting * {@link com.smartgwt.client.widgets.tab.Tab#getCanClose canClose}. * <P> * The URL for this icon's image will be derived from {@link com.smartgwt.client.widgets.tab.TabSet#getCloseTabIcon * closeTabIcon} by * default, but may be overridden by explicitly specifying {@link com.smartgwt.client.widgets.tab.Tab#getCloseIcon * closeIcon}. * <P> * <b>Note</b>: Currently, tabs can only show a single icon, so a closable tab will show * the close icon only even if {@link com.smartgwt.client.widgets.tab.Tab#getIcon icon} is set. To work around this, add * the icon * as an HTML <img> tag to the {@link com.smartgwt.client.widgets.tab.Tab#getTitle title} property, for example: * <pre> * title : "<span>" + isc.Canvas.imgHTML("myIcon.png") + " Tab Title</span>" * </pre> * * @param canCloseTabs canCloseTabs Default value is null * @see com.smartgwt.client.widgets.tab.TabSet#closeClick */ public void setCanCloseTabs(Boolean canCloseTabs) { setAttribute("canCloseTabs", canCloseTabs, true); } /** * Should tabs in this tabSet show an icon allowing the user to dismiss the tab by * clicking on it directly. May be overridden for individual tabs by setting * {@link com.smartgwt.client.widgets.tab.Tab#getCanClose canClose}. * <P> * The URL for this icon's image will be derived from {@link com.smartgwt.client.widgets.tab.TabSet#getCloseTabIcon * closeTabIcon} by * default, but may be overridden by explicitly specifying {@link com.smartgwt.client.widgets.tab.Tab#getCloseIcon * closeIcon}. * <P> * <b>Note</b>: Currently, tabs can only show a single icon, so a closable tab will show * the close icon only even if {@link com.smartgwt.client.widgets.tab.Tab#getIcon icon} is set. To work around this, add * the icon * as an HTML <img> tag to the {@link com.smartgwt.client.widgets.tab.Tab#getTitle title} property, for example: * <pre> * title : "<span>" + isc.Canvas.imgHTML("myIcon.png") + " Tab Title</span>" * </pre> * * * @return Boolean * @see com.smartgwt.client.widgets.tab.TabSet#closeClick */ public Boolean getCanCloseTabs() { return getAttributeAsBoolean("canCloseTabs"); } /** * If true, users can edit the titles of tabs in this TabSet when the {@link * com.smartgwt.client.widgets.tab.TabSet#getTitleEditEvent titleEditEvent} fires. You can override this behavior per tab * with the {@link com.smartgwt.client.widgets.tab.Tab#getCanEditTitle canEditTitle} property. * * @param canEditTabTitles canEditTabTitles Default value is false */ public void setCanEditTabTitles(Boolean canEditTabTitles) { setAttribute("canEditTabTitles", canEditTabTitles, true); } /** * If true, users can edit the titles of tabs in this TabSet when the {@link * com.smartgwt.client.widgets.tab.TabSet#getTitleEditEvent titleEditEvent} fires. You can override this behavior per tab * with the {@link com.smartgwt.client.widgets.tab.Tab#getCanEditTitle canEditTitle} property. * * * @return Boolean */ public Boolean getCanEditTabTitles() { return getAttributeAsBoolean("canEditTabTitles"); } /** * Default src for the close icon for tabs to display if {@link com.smartgwt.client.widgets.tab.TabSet#getCanCloseTabs * canCloseTabs} is true. * * @param closeTabIcon closeTabIcon Default value is [SKIN]/TabSet/close.png * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setCloseTabIcon(String closeTabIcon) throws IllegalStateException { setAttribute("closeTabIcon", closeTabIcon, false); } /** * Default src for the close icon for tabs to display if {@link com.smartgwt.client.widgets.tab.TabSet#getCanCloseTabs * canCloseTabs} is true. * * * @return String */ public String getCloseTabIcon() { return getAttributeAsString("closeTabIcon"); } /** * Size in pixels of the icon for closing tabs, displayed when {@link * com.smartgwt.client.widgets.tab.TabSet#getCanCloseTabs canCloseTabs} is true. * * @param closeTabIconSize closeTabIconSize Default value is 16 * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setCloseTabIconSize(int closeTabIconSize) throws IllegalStateException { setAttribute("closeTabIconSize", closeTabIconSize, false); } /** * Size in pixels of the icon for closing tabs, displayed when {@link * com.smartgwt.client.widgets.tab.TabSet#getCanCloseTabs canCloseTabs} is true. * * * @return int */ public int getCloseTabIconSize() { return getAttributeAsInt("closeTabIconSize"); } /** * Whether {@link com.smartgwt.client.widgets.Canvas#destroy destroy()} should be called on {@link * com.smartgwt.client.widgets.tab.Tab#getPane pane} when it a tab is removed via {@link * com.smartgwt.client.widgets.tab.TabSet#removeTab TabSet.removeTab}}. <P> An application might set this to false in * order to re-use panes in different tabs or in different parts of the application. * * @param destroyPanes destroyPanes Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setDestroyPanes(Boolean destroyPanes) throws IllegalStateException { setAttribute("destroyPanes", destroyPanes, false); } /** * Whether {@link com.smartgwt.client.widgets.Canvas#destroy destroy()} should be called on {@link * com.smartgwt.client.widgets.tab.Tab#getPane pane} when it a tab is removed via {@link * com.smartgwt.client.widgets.tab.TabSet#removeTab TabSet.removeTab}}. <P> An application might set this to false in * order to re-use panes in different tabs or in different parts of the application. * * * @return Boolean */ public Boolean getDestroyPanes() { return getAttributeAsBoolean("destroyPanes"); } /** * When AutoTest.getElement is used to parse locator strings generated by link{isc.AutoTest.getLocator()}, how should tabs * within this tabset be identified? By default if tab has a specified {@link com.smartgwt.client.widgets.tab.Tab#getID ID} * this will always be used. For tabs with no ID, the following options are available: <ul> <li><code>"title"</code> use * the title as an identifier</li> <li><code>"index"</code> use the index of the tab in the tabset as an identifier</li> * </ul> If unset, and the tab has no specified ID, default behavior is to identify by title (if available), otherwise by * index. * <p><b>Note : </b> This is an advanced setting</p> * * @param locateTabsBy locateTabsBy Default value is null */ public void setLocateTabsBy(String locateTabsBy) { setAttribute("locateTabsBy", locateTabsBy, true); } /** * When AutoTest.getElement is used to parse locator strings generated by link{isc.AutoTest.getLocator()}, how should tabs * within this tabset be identified? By default if tab has a specified {@link com.smartgwt.client.widgets.tab.Tab#getID ID} * this will always be used. For tabs with no ID, the following options are available: <ul> <li><code>"title"</code> use * the title as an identifier</li> <li><code>"index"</code> use the index of the tab in the tabset as an identifier</li> * </ul> If unset, and the tab has no specified ID, default behavior is to identify by title (if available), otherwise by * index. * * * @return String */ public String getLocateTabsBy() { return getAttributeAsString("locateTabsBy"); } /** * This property defines the number tab buttons that should be shown before automatically adding a "more" button to handle * the remaining tabs. This property is only used when {@link com.smartgwt.client.widgets.tab.TabSet#getShowMoreTab * showMoreTab} is enabled. * * @param moreTabCount moreTabCount Default value is 5 * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMoreTabCount(int moreTabCount) throws IllegalStateException { setAttribute("moreTabCount", moreTabCount, false); } /** * This property defines the number tab buttons that should be shown before automatically adding a "more" button to handle * the remaining tabs. This property is only used when {@link com.smartgwt.client.widgets.tab.TabSet#getShowMoreTab * showMoreTab} is enabled. * * * @return int */ public int getMoreTabCount() { return getAttributeAsInt("moreTabCount"); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowMoreTab showMoreTab} is enabled this property determines the * image to display on the "More" tab button. * * @param moreTabImage moreTabImage Default value is "[SKINIMG]/iOS/more.png" * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMoreTabImage(String moreTabImage) throws IllegalStateException { setAttribute("moreTabImage", moreTabImage, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowMoreTab showMoreTab} is enabled this property determines the * image to display on the "More" tab button. * * * @return String */ public String getMoreTabImage() { return getAttributeAsString("moreTabImage"); } /** * Default properties for the "more" tab's pane. <p> Currently constructs a VLayout with a {@link * com.smartgwt.client.widgets.layout.NavigationBar} and {@link com.smartgwt.client.widgets.tableview.TableView}. * * @param moreTabPaneDefaults moreTabPaneDefaults Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMoreTabPaneDefaults(Canvas moreTabPaneDefaults) throws IllegalStateException { setAttribute("moreTabPaneDefaults", moreTabPaneDefaults == null ? null : moreTabPaneDefaults.getOrCreateJsObj(), false); } /** * Default properties for the "more" tab's pane. <p> Currently constructs a VLayout with a {@link * com.smartgwt.client.widgets.layout.NavigationBar} and {@link com.smartgwt.client.widgets.tableview.TableView}. * * * @return Canvas */ public Canvas getMoreTabPaneDefaults() { return Canvas.getOrCreateRef(getAttributeAsJavaScriptObject("moreTabPaneDefaults")); } /** * Properties to apply to the "more" tab's pane created by this TabSet. * * @param moreTabPaneProperties moreTabPaneProperties Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMoreTabPaneProperties(Canvas moreTabPaneProperties) throws IllegalStateException { setAttribute("moreTabPaneProperties", moreTabPaneProperties == null ? null : moreTabPaneProperties.getOrCreateJsObj(), false); } /** * Properties to apply to the "more" tab's pane created by this TabSet. * * * @return Canvas */ public Canvas getMoreTabPaneProperties() { return Canvas.getOrCreateRef(getAttributeAsJavaScriptObject("moreTabPaneProperties")); } /** * Properties to apply to the "more" tab created by this TabSet. * * @param moreTabProperties moreTabProperties Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMoreTabProperties(Tab moreTabProperties) throws IllegalStateException { setAttribute("moreTabProperties", moreTabProperties.getJsObj(), false); } /** * Properties to apply to the "more" tab created by this TabSet. * * * @return Tab */ public Tab getMoreTabProperties() { return Tab.getOrCreateRef(getAttributeAsJavaScriptObject("moreTabProperties")); } /** * Title for the "More" tab. * * @param moreTabTitle moreTabTitle Default value is "More" * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMoreTabTitle(String moreTabTitle) throws IllegalStateException { setAttribute("moreTabTitle", moreTabTitle, false); } /** * Title for the "More" tab. * * * @return String */ public String getMoreTabTitle() { return getAttributeAsString("moreTabTitle"); } /** * CSS style used for the paneContainer. * * @param paneContainerClassName paneContainerClassName Default value is null */ public void setPaneContainerClassName(String paneContainerClassName) { setAttribute("paneContainerClassName", paneContainerClassName, true); } /** * CSS style used for the paneContainer. * * * @return String */ public String getPaneContainerClassName() { return getAttributeAsString("paneContainerClassName"); } /** * Specifies the overflow of the pane container (the component that holds the pane contents for all tabs). By default this * is set to "auto", meaning the pane container will automatically introduce scrolling when the pane contents exceed the * TabSet's specified size. <p> For other values and their meaning, see {@link com.smartgwt.client.types.Overflow} * * <br><br>If this method is called after the component has been drawn/initialized: * Update {@link com.smartgwt.client.widgets.tab.TabSet#getPaneContainerOverflow paneContainerOverflow} after creation. * <p><b>Note : </b> This is an advanced setting</p> * * @param paneContainerOverflow new overflow setting. Default value is Canvas.AUTO */ public void setPaneContainerOverflow(Overflow paneContainerOverflow) { setAttribute("paneContainerOverflow", paneContainerOverflow == null ? null : paneContainerOverflow.getValue(), true); } /** * Specifies the overflow of the pane container (the component that holds the pane contents for all tabs). By default this * is set to "auto", meaning the pane container will automatically introduce scrolling when the pane contents exceed the * TabSet's specified size. <p> For other values and their meaning, see {@link com.smartgwt.client.types.Overflow} * * * @return Overflow */ public Overflow getPaneContainerOverflow() { return EnumUtil.getEnum(Overflow.values(), getAttribute("paneContainerOverflow")); } /** * Space to leave around the panes in our paneContainer * * @param paneMargin paneMargin Default value is 0 * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setPaneMargin(int paneMargin) throws IllegalStateException { setAttribute("paneMargin", paneMargin, false); } /** * Space to leave around the panes in our paneContainer * * * @return int */ public int getPaneMargin() { return getAttributeAsInt("paneMargin"); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, and {@link * com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton symmetricPickerButton} is set to true, this property * governs the base URL for the picker button image, when displayed in a horizontal tab-bar [IE {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} is set to <code>"top"</code> or * <code>"bottom"</code>]. <P> Note that if <code>symmetricPickerButton</code> is false, the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonSrc pickerButtonSrc} property will be used instead. <P> This base * URL will have a suffix of <code>"Down"</code> appended when the user holds the mouse down over the button, and * <code>"Disabled"</code> if the tabset as a whole is disabled. * * @param pickerButtonHSrc pickerButtonHSrc Default value is "[SKIN]hpicker.gif" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setSymmetricPickerButton */ public void setPickerButtonHSrc(String pickerButtonHSrc) throws IllegalStateException { setAttribute("pickerButtonHSrc", pickerButtonHSrc, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, and {@link * com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton symmetricPickerButton} is set to true, this property * governs the base URL for the picker button image, when displayed in a horizontal tab-bar [IE {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} is set to <code>"top"</code> or * <code>"bottom"</code>]. <P> Note that if <code>symmetricPickerButton</code> is false, the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonSrc pickerButtonSrc} property will be used instead. <P> This base * URL will have a suffix of <code>"Down"</code> appended when the user holds the mouse down over the button, and * <code>"Disabled"</code> if the tabset as a whole is disabled. * * * @return String * @see com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton */ public String getPickerButtonHSrc() { return getAttributeAsString("pickerButtonHSrc"); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, this property governs the size * of tab-picker button. Applied as the width of buttons if the tabBar is horizontal, or the height if tabBar is vertical. * Note that the other dimension is determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness * this.tabBarThickness} * * @param pickerButtonSize pickerButtonSize Default value is 16 * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setPickerButtonSize(int pickerButtonSize) throws IllegalStateException { setAttribute("pickerButtonSize", pickerButtonSize, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, this property governs the size * of tab-picker button. Applied as the width of buttons if the tabBar is horizontal, or the height if tabBar is vertical. * Note that the other dimension is determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness * this.tabBarThickness} * * * @return int */ public int getPickerButtonSize() { return getAttributeAsInt("pickerButtonSize"); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, this property governs the base * URL for the picker button image, when {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton * symmetricPickerButton} is set to false <P> Note that if <code>symmetricPickerButton</code> is true, the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonHSrc pickerButtonHSrc} and {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonVSrc pickerButtonVSrc} properties will be used instead. <P> To get * the path to the image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>The {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} for this tabSet will be appended.</li> </ul> * * @param pickerButtonSrc pickerButtonSrc Default value is "[SKIN]/picker.gif" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setSymmetricPickerButton */ public void setPickerButtonSrc(String pickerButtonSrc) throws IllegalStateException { setAttribute("pickerButtonSrc", pickerButtonSrc, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, this property governs the base * URL for the picker button image, when {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton * symmetricPickerButton} is set to false <P> Note that if <code>symmetricPickerButton</code> is true, the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonHSrc pickerButtonHSrc} and {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonVSrc pickerButtonVSrc} properties will be used instead. <P> To get * the path to the image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>The {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} for this tabSet will be appended.</li> </ul> * * * @return String * @see com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton */ public String getPickerButtonSrc() { return getAttributeAsString("pickerButtonSrc"); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, and {@link * com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton symmetricPickerButton} is set to true, this property * governs the base URL for the picker button image, when displayed in a verricaL tab-bar [IE {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} is set to <code>"LEFT"</code> or * <code>"right"</code>]. <P> Note that if <code>symmetricPickerButton</code> is false, the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonSrc pickerButtonSrc} property will be used instead. <P> This base * URL will have a suffix of <code>"Down"</code> appended when the user holds the mouse down over the button, and * <code>"Disabled"</code> if the tabset as a whole is disabled. * * @param pickerButtonVSrc pickerButtonVSrc Default value is "[SKIN]vpicker.gif" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setSymmetricPickerButton */ public void setPickerButtonVSrc(String pickerButtonVSrc) throws IllegalStateException { setAttribute("pickerButtonVSrc", pickerButtonVSrc, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true, and {@link * com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton symmetricPickerButton} is set to true, this property * governs the base URL for the picker button image, when displayed in a verricaL tab-bar [IE {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} is set to <code>"LEFT"</code> or * <code>"right"</code>]. <P> Note that if <code>symmetricPickerButton</code> is false, the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonSrc pickerButtonSrc} property will be used instead. <P> This base * URL will have a suffix of <code>"Down"</code> appended when the user holds the mouse down over the button, and * <code>"Disabled"</code> if the tabset as a whole is disabled. * * * @return String * @see com.smartgwt.client.widgets.tab.TabSet#getSymmetricPickerButton */ public String getPickerButtonVSrc() { return getAttributeAsString("pickerButtonVSrc"); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller showTabScroller} is true, this property governs the * size of scroller buttons. Applied as the width of buttons if the tabBar is horizontal, or the height if tabBar is * vertical. Note that the other dimension is determined by {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness this.tabBarThickness} * * @param scrollerButtonSize scrollerButtonSize Default value is 16 * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setScrollerButtonSize(int scrollerButtonSize) throws IllegalStateException { setAttribute("scrollerButtonSize", scrollerButtonSize, false); } /** * If {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller showTabScroller} is true, this property governs the * size of scroller buttons. Applied as the width of buttons if the tabBar is horizontal, or the height if tabBar is * vertical. Note that the other dimension is determined by {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness this.tabBarThickness} * * * @return int */ public int getScrollerButtonSize() { return getAttributeAsInt("scrollerButtonSize"); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, and * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is true, this property governs the * base URL for the tab bar back and forward scroller button images for horizontal tab bars [IE for tab sets with {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} set to "top" or "bottom"]. <P> Note that if * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is false, {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerSrc scrollerSrc} will be used instead. <P> To get the path to the * image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>A suffix of <code>"forward"</code> or * <code>"back"</code> will be appended for the forward or backward scrolling button.</li> </ul> For example - if the * scrollerHSrc is set to <code>"[SKIN]hscroll.gif"</code>, the image displayed for the back-scroller button on a tabSet * with <code>tabBarPosition</code> set to "top" and <code>symmetricScroller</code> set to true would be one of * <code>"[SKIN]hscroll_back.gif"</code>, <code>"[SKIN]hscroll_Down_back.gif"</code>, and * <code>"[SKIN]hscroll_Disabled_back.gif"</code>. <P> Note that for best results the media should be sized to match the * scroller button sizes, determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness tabBarThickness} * and {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerButtonSize scrollerButtonSize}. * * @param scrollerHSrc scrollerHSrc Default value is "[SKIN]hscroll.gif" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setSymmetricScroller */ public void setScrollerHSrc(String scrollerHSrc) throws IllegalStateException { setAttribute("scrollerHSrc", scrollerHSrc, false); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, and * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is true, this property governs the * base URL for the tab bar back and forward scroller button images for horizontal tab bars [IE for tab sets with {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} set to "top" or "bottom"]. <P> Note that if * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is false, {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerSrc scrollerSrc} will be used instead. <P> To get the path to the * image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>A suffix of <code>"forward"</code> or * <code>"back"</code> will be appended for the forward or backward scrolling button.</li> </ul> For example - if the * scrollerHSrc is set to <code>"[SKIN]hscroll.gif"</code>, the image displayed for the back-scroller button on a tabSet * with <code>tabBarPosition</code> set to "top" and <code>symmetricScroller</code> set to true would be one of * <code>"[SKIN]hscroll_back.gif"</code>, <code>"[SKIN]hscroll_Down_back.gif"</code>, and * <code>"[SKIN]hscroll_Disabled_back.gif"</code>. <P> Note that for best results the media should be sized to match the * scroller button sizes, determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness tabBarThickness} * and {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerButtonSize scrollerButtonSize}. * * * @return String * @see com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller */ public String getScrollerHSrc() { return getAttributeAsString("scrollerHSrc"); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, and * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is false, this property governs * the base URL for the tab bar back and forward scroller button images. <P> Note that if {@link * com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is true, {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerHSrc scrollerHSrc} and {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerVSrc scrollerVSrc} will be used instead. <P> To get the path to the * image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>The {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} for this tabSet will be appended.</li> <li>A * suffix of <code>"forward"</code> or <code>"back"</code> will be appended for the forward or backward scrolling * button.</li> </ul> For example - if the scrollerSrc is set to <code>"[SKIN]scroll.gif"</code>, the image displayed for * the back-scroller button on a tabSet with <code>tabBarPosition</code> set to "top" and <code>symmetricScroller</code> * set to false would be one of <code>"[SKIN]scroll_top_back.gif"</code>, <code>"[SKIN]scroll_Down_top_back.gif"</code>, * and <code>"[SKIN]scroll_Disabled_top_back.gif"</code>. <P> Note that for best results the media should be sized to match * the scroller button sizes, determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness * tabBarThickness} and {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerButtonSize scrollerButtonSize}. * * @param scrollerSrc scrollerSrc Default value is "[SKIN]/scroll.gif" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setSymmetricScroller */ public void setScrollerSrc(String scrollerSrc) throws IllegalStateException { setAttribute("scrollerSrc", scrollerSrc, false); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, and * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is false, this property governs * the base URL for the tab bar back and forward scroller button images. <P> Note that if {@link * com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is true, {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerHSrc scrollerHSrc} and {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerVSrc scrollerVSrc} will be used instead. <P> To get the path to the * image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>The {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} for this tabSet will be appended.</li> <li>A * suffix of <code>"forward"</code> or <code>"back"</code> will be appended for the forward or backward scrolling * button.</li> </ul> For example - if the scrollerSrc is set to <code>"[SKIN]scroll.gif"</code>, the image displayed for * the back-scroller button on a tabSet with <code>tabBarPosition</code> set to "top" and <code>symmetricScroller</code> * set to false would be one of <code>"[SKIN]scroll_top_back.gif"</code>, <code>"[SKIN]scroll_Down_top_back.gif"</code>, * and <code>"[SKIN]scroll_Disabled_top_back.gif"</code>. <P> Note that for best results the media should be sized to match * the scroller button sizes, determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness * tabBarThickness} and {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerButtonSize scrollerButtonSize}. * * * @return String * @see com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller */ public String getScrollerSrc() { return getAttributeAsString("scrollerSrc"); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, and * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is true, this property governs the * base URL for the tab bar back and forward scroller button images for vertical tab bars [IE for tab sets with {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} set to "left" or "right"]. <P> Note that if * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is false, {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerSrc scrollerSrc} will be used instead. <P> To get the path to the * image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>A suffix of <code>"forward"</code> or * <code>"back"</code> will be appended for the forward or backward scrolling button.</li> </ul> For example - if the * scrollerVSrc is set to <code>"[SKIN]vscroll.gif"</code>, the image displayed for the back-scroller button on a tabSet * with <code>tabBarPosition</code> set to "left" and <code>symmetricScroller</code> set to true would be one of * <code>"[SKIN]vscroll_back.gif"</code>, <code>"[SKIN]vscroll_Down_back.gif"</code>, and * <code>"[SKIN]vscroll_Disabled_back.gif"</code>. <P> Note that for best results the media should be sized to match the * scroller button sizes, determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness tabBarThickness} * and {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerButtonSize scrollerButtonSize}. * * @param scrollerVSrc scrollerVSrc Default value is "[SKIN]vscroll.gif" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setSymmetricScroller */ public void setScrollerVSrc(String scrollerVSrc) throws IllegalStateException { setAttribute("scrollerVSrc", scrollerVSrc, false); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, and * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is true, this property governs the * base URL for the tab bar back and forward scroller button images for vertical tab bars [IE for tab sets with {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} set to "left" or "right"]. <P> Note that if * {@link com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller symmetricScroller} is false, {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerSrc scrollerSrc} will be used instead. <P> To get the path to the * image to display, this base URL will be modified as follows: <ul> <li>If appropriate a state suffix of * <code>"Down"</code> or <code>"Disabled"</code> will be appended.</li> <li>A suffix of <code>"forward"</code> or * <code>"back"</code> will be appended for the forward or backward scrolling button.</li> </ul> For example - if the * scrollerVSrc is set to <code>"[SKIN]vscroll.gif"</code>, the image displayed for the back-scroller button on a tabSet * with <code>tabBarPosition</code> set to "left" and <code>symmetricScroller</code> set to true would be one of * <code>"[SKIN]vscroll_back.gif"</code>, <code>"[SKIN]vscroll_Down_back.gif"</code>, and * <code>"[SKIN]vscroll_Disabled_back.gif"</code>. <P> Note that for best results the media should be sized to match the * scroller button sizes, determined by {@link com.smartgwt.client.widgets.tab.TabSet#getTabBarThickness tabBarThickness} * and {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerButtonSize scrollerButtonSize}. * * * @return String * @see com.smartgwt.client.widgets.tab.TabSet#getSymmetricScroller */ public String getScrollerVSrc() { return getAttributeAsString("scrollerVSrc"); } /** * Should tabs exceeding {@link com.smartgwt.client.widgets.tab.TabSet#getMoreTabCount moreTabCount} be shown on a "more" * tab? <p> This setting is used to emulate an iPhone-style tab bar "more" button. * * @param showMoreTab showMoreTab Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setShowMoreTab(Boolean showMoreTab) throws IllegalStateException { setAttribute("showMoreTab", showMoreTab, false); } /** * Should tabs exceeding {@link com.smartgwt.client.widgets.tab.TabSet#getMoreTabCount moreTabCount} be shown on a "more" * tab? <p> This setting is used to emulate an iPhone-style tab bar "more" button. * * * @return Boolean */ public Boolean getShowMoreTab() { return getAttributeAsBoolean("showMoreTab"); } /** * Should the paneContainer for this tabset show {@link com.smartgwt.client.widgets.Canvas#getShowEdges edges}. * <p><b>Note : </b> This is an advanced setting</p> * * @param showPaneContainerEdges showPaneContainerEdges Default value is null */ public void setShowPaneContainerEdges(Boolean showPaneContainerEdges) { setAttribute("showPaneContainerEdges", showPaneContainerEdges, true); } /** * Should the paneContainer for this tabset show {@link com.smartgwt.client.widgets.Canvas#getShowEdges edges}. * * * @return Boolean */ public Boolean getShowPaneContainerEdges() { return getAttributeAsBoolean("showPaneContainerEdges"); } /** * If the paneContainer for this tab set is showing {@link com.smartgwt.client.widgets.Canvas#getShowEdges edges}, setting * this attribute to <code>true</code> will set the paneContainer to show {@link * com.smartgwt.client.widgets.Canvas#getCustomEdges customEdges} for the three sides opposing the tabBarPosition. * <p><b>Note : </b> This is an advanced setting</p> * * @param showPartialEdges showPartialEdges Default value is false * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setShowPartialEdges(Boolean showPartialEdges) throws IllegalStateException { setAttribute("showPartialEdges", showPartialEdges, false); } /** * If the paneContainer for this tab set is showing {@link com.smartgwt.client.widgets.Canvas#getShowEdges edges}, setting * this attribute to <code>true</code> will set the paneContainer to show {@link * com.smartgwt.client.widgets.Canvas#getCustomEdges customEdges} for the three sides opposing the tabBarPosition. * * * @return Boolean */ public Boolean getShowPartialEdges() { return getAttributeAsBoolean("showPartialEdges"); } /** * If there is not enough space to display all the tab-buttons in this tabSet, should a drop-down "picker" be displayed to * allow selection of tabs that are clipped? * * @param showTabPicker showTabPicker Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setShowTabPicker(Boolean showTabPicker) throws IllegalStateException { setAttribute("showTabPicker", showTabPicker, false); } /** * If there is not enough space to display all the tab-buttons in this tabSet, should a drop-down "picker" be displayed to * allow selection of tabs that are clipped? * * * @return Boolean */ public Boolean getShowTabPicker() { return getAttributeAsBoolean("showTabPicker"); } /** * If there is not enough space to display all the tab-buttons in this tabSet, should scroller buttons be displayed to * allow access to tabs that are clipped? * * @param showTabScroller showTabScroller Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setShowTabScroller(Boolean showTabScroller) throws IllegalStateException { setAttribute("showTabScroller", showTabScroller, false); } /** * If there is not enough space to display all the tab-buttons in this tabSet, should scroller buttons be displayed to * allow access to tabs that are clipped? * * * @return Boolean */ public Boolean getShowTabScroller() { return getAttributeAsBoolean("showTabScroller"); } /** * If this.useSimpleTabs is true, simpleTabBaseClass will be the base style used to determine the css style to apply to * the tabs.<br> This property will be suffixed with the side on which the tab-bar will appear, followed by with the * tab's state (selected, over, etc), resolving to a className like "tabButtonTopOver" * * @param simpleTabBaseStyle simpleTabBaseStyle Default value is "tabButton" */ public void setSimpleTabBaseStyle(String simpleTabBaseStyle) { setAttribute("simpleTabBaseStyle", simpleTabBaseStyle, true); } /** * If this.useSimpleTabs is true, simpleTabBaseClass will be the base style used to determine the css style to apply to * the tabs.<br> This property will be suffixed with the side on which the tab-bar will appear, followed by with the * tab's state (selected, over, etc), resolving to a className like "tabButtonTopOver" * * * @return String */ public String getSimpleTabBaseStyle() { return getAttributeAsString("simpleTabBaseStyle"); } /** * Default directory for skin images (those defined by the class), relative to the Page-wide {@link * com.smartgwt.client.util.Page#getSkinDir skinDir}. * * @param skinImgDir skinImgDir Default value is "images/TabSet/" * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.docs.Images Images overview and related methods */ public void setSkinImgDir(String skinImgDir) throws IllegalStateException { setAttribute("skinImgDir", skinImgDir, false); } /** * Default directory for skin images (those defined by the class), relative to the Page-wide {@link * com.smartgwt.client.util.Page#getSkinDir skinDir}. * * * @return String * @see com.smartgwt.client.docs.Images Images overview and related methods */ public String getSkinImgDir() { return getAttributeAsString("skinImgDir"); } /** * If this tabSet will {@link com.smartgwt.client.widgets.tab.TabSet#getShowPaneContainerEdges show edges} for the * paneContainer, this property determines whether the same edge media will be used regardless of the tab bar position, or * whether different media should be used (necessary if the edge appearance is not symmetrical on all sides). <P> If this * property is set to false the paneContainer edge image URLs will be prefixed with the tabBarPosition of the tabSet - for * example <code>"[SKIN]edge_top_T.gif"</code> rather than just <code>"[SKIN]edge_T.gif"</code>. <P> When * <code>symmetricEdges</code> is false, custom edge sizes for the pane container may be specified via {@link * com.smartgwt.client.widgets.tab.TabSet#getTopEdgeSizes topEdgeSizes} et al, and custom edge offsets via {@link * com.smartgwt.client.widgets.tab.TabSet#getTopEdgeOffsets topEdgeOffsets} et al. * * @param symmetricEdges symmetricEdges Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setSymmetricEdges(Boolean symmetricEdges) throws IllegalStateException { setAttribute("symmetricEdges", symmetricEdges, false); } /** * If this tabSet will {@link com.smartgwt.client.widgets.tab.TabSet#getShowPaneContainerEdges show edges} for the * paneContainer, this property determines whether the same edge media will be used regardless of the tab bar position, or * whether different media should be used (necessary if the edge appearance is not symmetrical on all sides). <P> If this * property is set to false the paneContainer edge image URLs will be prefixed with the tabBarPosition of the tabSet - for * example <code>"[SKIN]edge_top_T.gif"</code> rather than just <code>"[SKIN]edge_T.gif"</code>. <P> When * <code>symmetricEdges</code> is false, custom edge sizes for the pane container may be specified via {@link * com.smartgwt.client.widgets.tab.TabSet#getTopEdgeSizes topEdgeSizes} et al, and custom edge offsets via {@link * com.smartgwt.client.widgets.tab.TabSet#getTopEdgeOffsets topEdgeOffsets} et al. * * * @return Boolean */ public Boolean getSymmetricEdges() { return getAttributeAsBoolean("symmetricEdges"); } /** * If this TabSet is showing a {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker tab picker button}, this * property determines whether the {@link com.smartgwt.client.widgets.tab.TabSet#getPickerButtonHSrc pickerButtonHSrc} and * {@link com.smartgwt.client.widgets.tab.TabSet#getPickerButtonVSrc pickerButtonVSrc} media will be used for vertical and * horizontal tab-bar picker buttons, or whether separate media should be used for each possible {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} based on the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonSrc pickerButtonSrc} property for this tabSet. * * @param symmetricPickerButton symmetricPickerButton Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setSymmetricPickerButton(Boolean symmetricPickerButton) throws IllegalStateException { setAttribute("symmetricPickerButton", symmetricPickerButton, false); } /** * If this TabSet is showing a {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker tab picker button}, this * property determines whether the {@link com.smartgwt.client.widgets.tab.TabSet#getPickerButtonHSrc pickerButtonHSrc} and * {@link com.smartgwt.client.widgets.tab.TabSet#getPickerButtonVSrc pickerButtonVSrc} media will be used for vertical and * horizontal tab-bar picker buttons, or whether separate media should be used for each possible {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} based on the {@link * com.smartgwt.client.widgets.tab.TabSet#getPickerButtonSrc pickerButtonSrc} property for this tabSet. * * * @return Boolean */ public Boolean getSymmetricPickerButton() { return getAttributeAsBoolean("symmetricPickerButton"); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, this * property determines whether the {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerHSrc scrollerHSrc} and {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerVSrc scrollerVSrc} media will be used for vertical and horizontal * tab-bar scroller buttons, or whether separate media should be used for each possible {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} based on the {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerSrc scrollerSrc} property for this tabSet. * * @param symmetricScroller symmetricScroller Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setSymmetricScroller(Boolean symmetricScroller) throws IllegalStateException { setAttribute("symmetricScroller", symmetricScroller, false); } /** * If this TabSet is showing {@link com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller tab scroller buttons}, this * property determines whether the {@link com.smartgwt.client.widgets.tab.TabSet#getScrollerHSrc scrollerHSrc} and {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerVSrc scrollerVSrc} media will be used for vertical and horizontal * tab-bar scroller buttons, or whether separate media should be used for each possible {@link * com.smartgwt.client.widgets.tab.TabSet#getTabBarPosition tabBarPosition} based on the {@link * com.smartgwt.client.widgets.tab.TabSet#getScrollerSrc scrollerSrc} property for this tabSet. * * * @return Boolean */ public Boolean getSymmetricScroller() { return getAttributeAsBoolean("symmetricScroller"); } /** * Alignment of the tabBar. <P> If the position of the tabBar is "top" or "bottom", then alignment must be "left" or * "right" and defaults to "left". <P> If the position of the tabBar is "left" or "right", then the alignment must be "top" * or "bottom" and defaults to "top". * * @param tabBarAlign tabBarAlign Default value is see below * @throws IllegalStateException this property cannot be changed after the component has been created * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_tabs_align" target="examples">Align Example</a> */ public void setTabBarAlign(Side tabBarAlign) throws IllegalStateException { setAttribute("tabBarAlign", tabBarAlign == null ? null : tabBarAlign.getValue(), false); } /** * Alignment of the tabBar. <P> If the position of the tabBar is "top" or "bottom", then alignment must be "left" or * "right" and defaults to "left". <P> If the position of the tabBar is "left" or "right", then the alignment must be "top" * or "bottom" and defaults to "top". * * * @return Side * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_tabs_align" target="examples">Align Example</a> */ public Side getTabBarAlign() { return EnumUtil.getEnum(Side.values(), getAttribute("tabBarAlign")); } /** * Which side of the TabSet the TabBar should appear on. * * @param tabBarPosition tabBarPosition Default value is Canvas.TOP * @throws IllegalStateException this property cannot be changed after the component has been created * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_tabs_orientation" target="examples">Orientation Example</a> */ public void setTabBarPosition(Side tabBarPosition) throws IllegalStateException { setAttribute("tabBarPosition", tabBarPosition == null ? null : tabBarPosition.getValue(), false); } /** * Which side of the TabSet the TabBar should appear on. * * * @return Side * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_tabs_orientation" target="examples">Orientation Example</a> */ public Side getTabBarPosition() { return EnumUtil.getEnum(Side.values(), getAttribute("tabBarPosition")); } /** * Thickness of tabBar, applies to either orientation (specifies height for horizontal, width for vertical orientation). * Note that overriding this value for TabSets that are skinned with images generally means providing new media for the * borders. * * @param tabBarThickness tabBarThickness Default value is 21 */ public void setTabBarThickness(int tabBarThickness) { setAttribute("tabBarThickness", tabBarThickness, true); } /** * Thickness of tabBar, applies to either orientation (specifies height for horizontal, width for vertical orientation). * Note that overriding this value for TabSets that are skinned with images generally means providing new media for the * borders. * * * @return int */ public int getTabBarThickness() { return getAttributeAsInt("tabBarThickness"); } /** * If set, offsets the tab title editor further in from the left-hand edge of the tab, by the number of pixels set in this * property. Note that the editor is always offset to avoid overlapping the endcaps of the tab; this property is applied * on top of that default offset. * * @param titleEditorLeftOffset titleEditorLeftOffset Default value is null * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditorRightOffset * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditorTopOffset */ public void setTitleEditorLeftOffset(Integer titleEditorLeftOffset) { setAttribute("titleEditorLeftOffset", titleEditorLeftOffset, true); } /** * If set, offsets the tab title editor further in from the left-hand edge of the tab, by the number of pixels set in this * property. Note that the editor is always offset to avoid overlapping the endcaps of the tab; this property is applied * on top of that default offset. * * * @return Integer * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditorRightOffset * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditorTopOffset */ public Integer getTitleEditorLeftOffset() { return getAttributeAsInt("titleEditorLeftOffset"); } /** * Properties for the auto-generated {@link com.smartgwt.client.widgets.tab.TabSet#getTitleEditor titleEditor}. This is the * text item we use to edit tab titles in this tabSet. * * @param titleEditorProperties titleEditorProperties Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditor * @see com.smartgwt.client.widgets.tab.TabSet#setCanEditTabTitles */ public void setTitleEditorProperties(TextItem titleEditorProperties) throws IllegalStateException { setAttribute("titleEditorProperties", titleEditorProperties.getJsObj(), false); } /** * Properties for the auto-generated {@link com.smartgwt.client.widgets.tab.TabSet#getTitleEditor titleEditor}. This is the * text item we use to edit tab titles in this tabSet. * * * @return TextItem * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditor * @see com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles */ public TextItem getTitleEditorProperties() { return TextItem.getOrCreateRef(getAttributeAsJavaScriptObject("titleEditorProperties")); } /** * If set, offsets the tab title editor further in from the right-hand edge of the tab, by the number of pixels set in this * property. Note that the editor is always offset to avoid overlapping the endcaps of the tab; this property is applied * on top of that default offset. * * @param titleEditorRightOffset titleEditorRightOffset Default value is null * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditorLeftOffset * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditorTopOffset */ public void setTitleEditorRightOffset(Integer titleEditorRightOffset) { setAttribute("titleEditorRightOffset", titleEditorRightOffset, true); } /** * If set, offsets the tab title editor further in from the right-hand edge of the tab, by the number of pixels set in this * property. Note that the editor is always offset to avoid overlapping the endcaps of the tab; this property is applied * on top of that default offset. * * * @return Integer * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditorLeftOffset * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditorTopOffset */ public Integer getTitleEditorRightOffset() { return getAttributeAsInt("titleEditorRightOffset"); } /** * If set, offsets the tab title editor further down from the top edge of the tab, by the number of pixels set in this * property. You can use this property, together with the left and right offset properties, to fine tune positioning of * the editor within or around the tab button.<p> <b>Note:</b> The height of the editor is an attribute of the editor * itself, and can be set by specifying a "height" property in {@link com.smartgwt.client.widgets.tab.TabSet#getTitleEditor * titleEditorDefaults}. * * @param titleEditorTopOffset titleEditorTopOffset Default value is null * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditorLeftOffset * @see com.smartgwt.client.widgets.tab.TabSet#setTitleEditorRightOffset */ public void setTitleEditorTopOffset(Integer titleEditorTopOffset) { setAttribute("titleEditorTopOffset", titleEditorTopOffset, true); } /** * If set, offsets the tab title editor further down from the top edge of the tab, by the number of pixels set in this * property. You can use this property, together with the left and right offset properties, to fine tune positioning of * the editor within or around the tab button.<p> <b>Note:</b> The height of the editor is an attribute of the editor * itself, and can be set by specifying a "height" property in {@link com.smartgwt.client.widgets.tab.TabSet#getTitleEditor * titleEditorDefaults}. * * * @return Integer * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditorLeftOffset * @see com.smartgwt.client.widgets.tab.TabSet#getTitleEditorRightOffset */ public Integer getTitleEditorTopOffset() { return getAttributeAsInt("titleEditorTopOffset"); } /** * Should we use simple button based tabs styled with CSS rather than image based {@link * com.smartgwt.client.widgets.tab.ImgTab} tabs? <P> If set to true tabs will instances of {@link * com.smartgwt.client.widgets.Button}, styled according to the {@link * com.smartgwt.client.widgets.tab.TabSet#getSimpleTabBaseStyle simpleTabBaseStyle}. * <p><b>Note : </b> This is an advanced setting</p> * * @param useSimpleTabs useSimpleTabs Default value is false * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setUseSimpleTabs(Boolean useSimpleTabs) throws IllegalStateException { setAttribute("useSimpleTabs", useSimpleTabs, false); } /** * Should we use simple button based tabs styled with CSS rather than image based {@link * com.smartgwt.client.widgets.tab.ImgTab} tabs? <P> If set to true tabs will instances of {@link * com.smartgwt.client.widgets.Button}, styled according to the {@link * com.smartgwt.client.widgets.tab.TabSet#getSimpleTabBaseStyle simpleTabBaseStyle}. * * * @return Boolean */ public Boolean getUseSimpleTabs() { return getAttributeAsBoolean("useSimpleTabs"); } // ********************* Methods *********************** /** * If the user is currently editing a tab title (see {@link com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles * canEditTabTitles}), dismiss the editor and discard the edit value entered by the user. */ public native void cancelTabTitleEditing() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.cancelTabTitleEditing(); }-*/; /** * Returns the index of the currently selected tab object. * * @return the index of the currently selected tab object */ public native int getSelectedTabNumber() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); return self.getSelectedTabNumber(); }-*/; /** * If the user is currently editing a tab title (see {@link com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles * canEditTabTitles}), save the edited tab title and hide the editor. */ public native void saveTabTitle() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.saveTabTitle(); }-*/; /** * If there is not enough space to display all the tabs in this tabSet, this method will scroll the previous tab (that * first tab that is clipped at the beginning of the tab-bar) into view. */ public native void scrollBack() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.scrollBack(); }-*/; /** * If there is not enough space to display all the tabs in this tabSet, this method will scroll the next tab (that first * tab that is clipped at the end of the tab-bar) into view. */ public native void scrollForward() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.scrollForward(); }-*/; /** * Add a tabContextMenu handler. * <p> * Notification fired when the user right-clicks on a tab. Event may be cancelled by returning false * * @param handler the tabContextMenu handler * @return {@link HandlerRegistration} used to remove this handler */ public HandlerRegistration addTabContextMenuHandler(com.smartgwt.client.widgets.tab.events.TabContextMenuHandler handler) { if(getHandlerCount(com.smartgwt.client.widgets.tab.events.TabContextMenuEvent.getType()) == 0) setupTabContextMenuEvent(); return doAddHandler(handler, com.smartgwt.client.widgets.tab.events.TabContextMenuEvent.getType()); } private native void setupTabContextMenuEvent() /*-{ var obj = null; var selfJ = this; if(this.@com.smartgwt.client.widgets.BaseWidget::isCreated()()) { obj = this.@com.smartgwt.client.widgets.BaseWidget::getJsObj()(); obj.addProperties({showTabContextMenu:$debox($entry(function(){ var param = {"tabSet" : arguments[0], "tab" : arguments[1]}; var event = @com.smartgwt.client.widgets.tab.events.TabContextMenuEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })) }); } else { obj = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); obj.showTabContextMenu = $debox($entry(function(){ var param = {"tabSet" : arguments[0], "tab" : arguments[1]}; var event = @com.smartgwt.client.widgets.tab.events.TabContextMenuEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })); } }-*/; /** * Add a tabDeselected handler. * <p> * Notification fired when a tab is deselected. * * @param handler the tabDeselected handler * @return {@link HandlerRegistration} used to remove this handler */ public HandlerRegistration addTabDeselectedHandler(com.smartgwt.client.widgets.tab.events.TabDeselectedHandler handler) { if(getHandlerCount(com.smartgwt.client.widgets.tab.events.TabDeselectedEvent.getType()) == 0) setupTabDeselectedEvent(); return doAddHandler(handler, com.smartgwt.client.widgets.tab.events.TabDeselectedEvent.getType()); } private native void setupTabDeselectedEvent() /*-{ var obj = null; var selfJ = this; if(this.@com.smartgwt.client.widgets.BaseWidget::isCreated()()) { obj = this.@com.smartgwt.client.widgets.BaseWidget::getJsObj()(); obj.addProperties({tabDeselected:$debox($entry(function(){ var param = {"tabNum" : arguments[0], "tabPane" : arguments[1], "ID" : arguments[2], "tab" : arguments[3], "newTab" : arguments[4]}; var event = @com.smartgwt.client.widgets.tab.events.TabDeselectedEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })) }); } else { obj = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); obj.tabDeselected = $debox($entry(function(){ var param = {"tabNum" : arguments[0], "tabPane" : arguments[1], "ID" : arguments[2], "tab" : arguments[3], "newTab" : arguments[4]}; var event = @com.smartgwt.client.widgets.tab.events.TabDeselectedEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })); } }-*/; /** * Search for a tab that contains a pane. * @param pane pane to show * * @return tab that contains passed pane */ public native Tab tabForPane(Canvas pane) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.tabForPane(pane.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()()); if(ret == null || ret === undefined) return null; var retVal = @com.smartgwt.client.core.RefDataClass::getRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); if(retVal == null) { retVal = @com.smartgwt.client.widgets.tab.Tab::new(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); } return retVal; }-*/; /** * Add a tabSelected handler. * <p> * Notification fired when a tab is selected. Note that this will only fire if this tabSet is drawn. If a tab is selected * before <code>TabSet.draw()</code> is called, the <code>tabSelected()</code> notification will fire on * <code>draw()</code> * * @param handler the tabSelected handler * @return {@link HandlerRegistration} used to remove this handler */ public HandlerRegistration addTabSelectedHandler(com.smartgwt.client.widgets.tab.events.TabSelectedHandler handler) { if(getHandlerCount(com.smartgwt.client.widgets.tab.events.TabSelectedEvent.getType()) == 0) setupTabSelectedEvent(); return doAddHandler(handler, com.smartgwt.client.widgets.tab.events.TabSelectedEvent.getType()); } private native void setupTabSelectedEvent() /*-{ var obj = null; var selfJ = this; if(this.@com.smartgwt.client.widgets.BaseWidget::isCreated()()) { obj = this.@com.smartgwt.client.widgets.BaseWidget::getJsObj()(); obj.addProperties({tabSelected:$entry(function(){ var param = {"tabNum" : arguments[0], "tabPane" : arguments[1], "ID" : arguments[2], "tab" : arguments[3]}; var event = @com.smartgwt.client.widgets.tab.events.TabSelectedEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); }) }); } else { obj = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); obj.tabSelected = $entry(function(){ var param = {"tabNum" : arguments[0], "tabPane" : arguments[1], "ID" : arguments[2], "tab" : arguments[3]}; var event = @com.smartgwt.client.widgets.tab.events.TabSelectedEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); }); } }-*/; // ********************* Static Methods *********************** /** * Class level method to set the default properties of this class. If set, then all subsequent instances of this * class will automatically have the default properties that were set when this method was called. This is a powerful * feature that eliminates the need for users to create a separate hierarchy of subclasses that only alter the default * properties of this class. Can also be used for skinning / styling purposes. * <P> * <b>Note:</b> This method is intended for setting default attributes only and will effect all instances of the * underlying class (including those automatically generated in JavaScript). * This method should not be used to apply standard EventHandlers or override methods for * a class - use a custom subclass instead. * * @param tabSetProperties properties that should be used as new defaults when instances of this class are created */ public static native void setDefaultProperties(TabSet tabSetProperties) /*-{ var properties = $wnd.isc.addProperties({},tabSetProperties.@com.smartgwt.client.widgets.BaseWidget::getConfig()()); delete properties.ID; $wnd.isc.TabSet.addProperties(properties); }-*/; // *********************************************************** /** * Specifies the index of the initially selected tab. * * @param selectedTab selectedTab Default value is 0 */ public void setSelectedTab(int selectedTab) { setAttribute("selectedTab", selectedTab, true); } public void setTabs(Tab... tabs) { for (Tab tab : tabs) { addTab(tab); } } /** * Properties of the container where the component specified by Tab.pane is shown. * * @param paneContainerProperties the pane container properties * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setPaneContainerProperties(Canvas paneContainerProperties) { setAttribute("paneContainerProperties", paneContainerProperties.getConfig(), false); } /** * Select a tab. * * @param tabIndex the tab index */ public native void selectTab(int tabIndex) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.selectTab(tabIndex); }-*/; /** * Select a tab. * * @param ID the tab ID */ public native void selectTab(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.selectTab(ID); }-*/; /** * Select a tab. * * @param tab the tab */ public native void selectTab(Tab tab) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); self.selectTab(tabJS); }-*/; /** * Changes the title of a tab * * @param tabIndex the tab index * @param title new title */ public native void setTabTitle(int tabIndex, String title) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setTabTitle(tabIndex, title); }-*/; /** * Changes the title of a tab * * @param ID the tab ID * @param title new title */ public native void setTabTitle(String ID, String title) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setTabTitle(ID, title); }-*/; /** * Changes the title of a tab * * @param tab the tab * @param title new title */ public native void setTabTitle(Tab tab, String title) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); self.setTabTitle(tabJS, title); }-*/; /** * Changes the icon of a tab * * @param tabIndex the tab index * @param iconURL new icon */ public native void setTabIcon(int tabIndex, String iconURL) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setTabIcon(tabIndex, iconURL); }-*/; /** * Changes the icon of a tab * * @param ID the tab ID * @param iconURL new icon */ public native void setTabIcon(String ID, String iconURL) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setTabIcon(ID, iconURL); }-*/; /** * Changes the icon of a tab * * @param tab the tab * @param iconURL new icon */ public native void setTabIcon(Tab tab, String iconURL) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); self.setTabIcon(tabJS, iconURL); }-*/; /** * If the specified tab is disabled, enable it now. * * @param tabIndex the tab index */ public native void enableTab(int tabIndex) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.enableTab(tabIndex); }-*/; /** * If the specified tab is disabled, enable it now. * * @param ID the tab id */ public native void enableTab(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.enableTab(ID); }-*/; /** * If the specified tab is disabled, enable it now. * * @param tab the tab */ public native void enableTab(Tab tab) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); self.enableTab(tabJS); }-*/; /** * Set the pane for a tab. NOTE: the old pane for the tab is not destroy()d * * @param tabIndex the tab index * @param pane the new pane for the tab */ public native void updateTab(int tabIndex, Canvas pane) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var paneJS = pane == null ? null : pane.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.updateTab(tabIndex, paneJS); }-*/; /** * Set the pane for a tab. NOTE: the old pane for the tab is not destroy()d * * @param tab the tab * @param pane the new pane for the tab */ public native void updateTab(Tab tab, Canvas pane) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); var paneJS = pane == null ? null : pane.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.updateTab(tabJS, paneJS); }-*/; /** * If the specified tab is enabled, disable it now. * * @param tabIndex the tab index */ public native void disableTab(int tabIndex) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.disableTab(tabIndex); }-*/; /** * If the specified tab is enabled, disable it now. * * @param ID the tab id */ public native void disableTab(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.disableTab(ID); }-*/; /** * If the specified tab is enabled, disable it now. * * @param tab the tab */ public native void disableTab(Tab tab) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); self.disableTab(tabJS); }-*/; /** * Remove a tab. <P> The pane associated with the removed tab is automatically destroyed when you call this method. * To avoid this, call {@link com.smartgwt.client.widgets.tab.TabSet#updateTab} with <code>null</code> as the new * pane immediately before removing the tab. * * @param tabIndex the tab index */ public native void removeTab(int tabIndex) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.removeTab(tabIndex); }-*/; /** * Remove a tab. <P> The pane associated with the removed tab is automatically destroyed when you call this method. * To avoid this, call {@link com.smartgwt.client.widgets.tab.TabSet#updateTab} with <code>null</code> as the new * pane immediately before removing the tab. * * @param ID the tabID */ public native void removeTab(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.removeTab(ID); }-*/; /** * Remove a tab. <P> The pane associated with the removed tab is automatically destroyed when you call this method. * To avoid this, call {@link com.smartgwt.client.widgets.tab.TabSet#updateTab} with <code>null</code> as the new * pane immediately before removing the tab. * * @param tab the tab */ public native void removeTab(Tab tab) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabJS = tab.@com.smartgwt.client.widgets.tab.Tab::getJsObj()(); self.removeTab(tabJS); }-*/; /** * Remove one or more tabs. The pane(s) associated with the removed tab(s) is automatically destroyed when you call * this method. * * @param tabIndexes the tab indexes */ public native void removeTabs(int[] tabIndexes) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabs = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptArray([I)(tabIndexes); self.removeTab(tabs); }-*/; /** * Remove one or more tabs. The pane(s) associated with the removed tab(s) is automatically destroyed when you call * this method. * * @param ids the tabIDs */ public native void removeTabs(String[] ids) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var tabs = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptArray([Ljava/lang/Object;)(ids); self.removeTab(tabs); }-*/; /** * The currently selected tab. * * @return the currently selected Tab */ public native Tab getSelectedTab() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getSelectedTab(); return ret == null ? null : @com.smartgwt.client.core.RefDataClass::getRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Get the live Canvas representing a tab by index. * * The underlying SmartClient class of the returned canvas depends on {@link #getUseSimpleTabs}. * If this property is false, the returned canvas will be a {@link com.smartgwt.client.widgets.tab.ImgTab} * instance. If true the canvas will be a {@link com.smartgwt.client.widgets.tab.Button} instance. * Note that you can make use of ImgTab APIs by using the <code>getJsObj()</code> and <code>create()</code> * APIs to "cast" to the appropriate type - for example:<br> * <code>ImgTab liveTab = ImgTab.create(myTabSet.getTabCanvas(2).getJsObj());</code> * <P> * Note that live Tab instances are not available until {@link com.smartgwt.client.widgets.Canvas#draw}. * <P> * <b>Note that this is an advanced method.</b> The returned Tab is considered an internal component of * the TabSet. In order to maximize forward compatibility, wherever possible manipulate tabs * through TabSet APIs such as a {@link com.smartgwt.client.widgets.tab.TabSet#setTabTitle} instead of * modifying them directly. * * @param tab * @return the tab Canvas, or null if not found or TabSet not drawn yet */ public native StatefulCanvas getTabCanvas(int tabIndex) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getTab(tabIndex); return ret == null ? null : @com.smartgwt.client.widgets.StatefulCanvas::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Get the live Canvas representing a tab by index. * The underlying SmartClient class of the returned canvas depends on {@link #getUseSimpleTabs}. * If this property is false, the returned canvas will be a {@link com.smartgwt.client.widgets.tab.ImgTab} * instance. If true the canvas will be a {@link com.smartgwt.client.widgets.tab.Button} instance. * Note that you can make use of ImgTab APIs by using the <code>getJsObj()</code> and <code>create()</code> * APIs to "cast" to the appropriate type - for example:<br> * <code>ImgTab liveTab = ImgTab.create(myTabSet.getTabCanvas(2).getJsObj());</code> * <P> * Note that live Tab instances are not available until {@link com.smartgwt.client.widgets.Canvas#draw}. * <P> * <b>Note that this is an advanced method.</b> The returned Tab is considered an internal component of * the TabSet. In order to maximize forward compatibility, wherever possible manipulate tabs * through TabSet APIs such as a {@link com.smartgwt.client.widgets.tab.TabSet#setTabTitle} instead of * modifying them directly. * * @param tab * @return the tab Canvas, or null if not found or TabSet not drawn yet */ public native StatefulCanvas getTabCanvas(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getTab(ID); return ret == null ? null : @com.smartgwt.client.widgets.StatefulCanvas::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Retrieves a Tab definition from within this tabSet by index. * * @param index of tab to retrieve * @return the tab definition */ public native Tab getTab(int tabIndex) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getTabObject(tabIndex); return ret == null ? null : @com.smartgwt.client.core.RefDataClass::getRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Retrieves a Tab definition from within this tabSet by ID. * * @param ID of tab to retrieve * @return the tab definition */ public native Tab getTab(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getTabObject(ID); return ret == null ? null : @com.smartgwt.client.core.RefDataClass::getRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Get the index of a tab from the tabID. * * @param ID the tab ID * @return the index of the tab, or -1 if not found */ public native int getTabNumber(String ID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); return self.getTabNumber(ID); }-*/; /** * Add a tab * * @param tab new tab */ public void addTab(Tab tab) { tab.setTabSet(this); JavaScriptObject tabJS = tab.getJsObj(); if (isCreated()) { addTabPostCreate(tabJS); } else { addTabPreCreate(tabJS); } } private native void addTabPreCreate(JavaScriptObject tabJS) /*-{ var config = this.@com.smartgwt.client.widgets.BaseWidget::config; if(!config.tabs) { config.tabs = @com.smartgwt.client.util.JSOHelper::createJavaScriptArray()(); } config.tabs.push(tabJS); }-*/; private native void addTabPostCreate(JavaScriptObject tabJS) /*-{ var container = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); container.addTab(tabJS); }-*/; /** * Add a tab * * @param tab new tab * @param position the position where tab should be added */ public void addTab(Tab tab, int position) { JavaScriptObject tabJS = tab.getJsObj(); if (isCreated()) { addTabPostCreate(tabJS, position); } else { addTabPreCreate(tabJS, position); } } private native void addTabPreCreate(JavaScriptObject tabJS, int position) /*-{ var config = this.@com.smartgwt.client.widgets.BaseWidget::config; if(!config.tabs) { config.tabs = @com.smartgwt.client.util.JSOHelper::createJavaScriptArray()(); } config.tabs.splice(position, 0, tabJS); }-*/; private native void addTabPostCreate(JavaScriptObject tabJS, int position) /*-{ var container = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); container.addTab(tabJS, position); }-*/; /** * The number of tabs * * @return the number of tabs */ public native int getNumTabs()/*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); return self.tabs.length; }-*/; /** * The event that triggers title editing on this TabSet. * * @param titleEditEvent titleEditEvent Default value is "doubleClick" * @see com.smartgwt.client.widgets.tab.TabSet#setCanEditTabTitles * @see com.smartgwt.client.widgets.tab.Tab#setCanEditTitle */ public void setTitleEditEvent(TabTitleEditEvent titleEditEvent) { setAttribute("titleEditEvent", titleEditEvent.getValue(), true); } /** * The event that triggers title editing on this TabSet. * * * @return TabTitleEditEvent * @see com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles * @see com.smartgwt.client.widgets.tab.Tab#getCanEditTitle */ public TabTitleEditEvent getTitleEditEvent() { String event = getAttribute("titleEditEvent"); return event == "click" ? TabTitleEditEvent.CLICK : TabTitleEditEvent.DOUBLECLICK; } /** * Places an editor in the title of the parameter tab and allows the user to edit the title. Note that this programmatic * method will <b.always</b> allow editing of the specified tab's title, regardless of the settings of {@link * com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles canEditTabTitles} or {@link * com.smartgwt.client.widgets.tab.Tab#getCanEditTitle canEditTitle}. * @param tab The tab whose title should be edited (may be specified by ID or index) */ public native void editTabTitle(String tab) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.editTabTitle(tab); }-*/; /** * Places an editor in the title of the parameter tab and allows the user to edit the title. Note that this programmatic * method will <b.always</b> allow editing of the specified tab's title, regardless of the settings of {@link * com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles canEditTabTitles} or {@link * com.smartgwt.client.widgets.tab.Tab#getCanEditTitle canEditTitle}. * @param tab The tab whose title should be edited (may be specified by ID or index) */ public native void editTabTitle(int tab) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.editTabTitle(tab); }-*/; /** * The tabs * * @return the tabs */ public Tab[] getTabs() { return convertToTabArray(getAttributeAsJavaScriptObject("tabs")); } private static Tab[] convertToTabArray(JavaScriptObject nativeArray) { if (nativeArray == null) { return new Tab[]{}; } JavaScriptObject[] componentsj = JSOHelper.toArray(nativeArray); Tab[] objects = new Tab[componentsj.length]; for (int i = 0; i < componentsj.length; i++) { JavaScriptObject componentJS = componentsj[i]; Tab obj = (Tab) RefDataClass.getRef(componentJS); objects[i] = obj; } return objects; } /** * This property determines what controls should show up after the tabBar for this tabSet. Standard controls can be * included using the strings <code>"tabScroller"</code> and <code>"tabPicker"</code>. These show the standard * controls to scroll to clipped tabs, or pick them directly from a menu, and show up only if {@link * com.smartgwt.client.widgets.tab.TabSet#getShowTabScroller showTabScroller} or {@link * com.smartgwt.client.widgets.tab.TabSet#getShowTabPicker showTabPicker} is true and there is not enough space * available to show all the tabs in the tab-bar. <P> Additional controls can be included by adding any widget to * this array. Controls will show up in the order in which they are specified. For example, the following code * would add a button in the tabBar area, while preserving the normal behavior of the tabScroller and tabPicker: * <pre> isc.TabSet.create({ width:300, tabs : [ { title: "Tab one" } ], tabBarControls : [ * isc.ImgButton.create({ src:"[SKINIMG]/actions/add.png", width:16, height:16, * layoutAlign:"center" }), "tabScroller", "tabPicker" ] }); </pre> * <p><b>Note : </b> This is an advanced setting</p> * * @param tabBarControls tabBarControls Default value is ["tabScroller", "tabPicker"] * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.types.TabBarControls */ public void setTabBarControls(Object... tabBarControls) throws IllegalStateException { setAttribute("tabBarControls", tabBarControls, false); } /** * Apply a new {@link com.smartgwt.client.widgets.tab.Tab#getPane pane} to an existing tab in this tabSet * @param tabIndex Tab to update * @param pane new Pane for the tab. pass null to drop existing pane */ public native void setTabPane(int tabIndex, Canvas pane) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setTabPane(tabIndex, pane == null ? null : pane.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()()); }-*/; /** * Apply a new {@link com.smartgwt.client.widgets.tab.Tab#getPane pane} to an existing tab in this tabSet * @param tabID Tab to update * @param pane new Pane for the tab. pass null to drop existing pane */ public native void setTabPane(String tabID, Canvas pane) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setTabPane(tabID, pane == null ? null : pane.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()()); }-*/; /** * Add a onCloseClick handler. * <p> * When {@link com.smartgwt.client.widgets.tab.TabSet#getCanCloseTabs canCloseTabs} is set, this notification method fired when the user clicks the "close" icon for a tab. Return false to cancel default behavior of removing the tab from the TabSet * * @param handler the onCloseClick handler * @return {@link com.google.gwt.event.shared.HandlerRegistration} used to remove this handler */ public HandlerRegistration addCloseClickHandler(com.smartgwt.client.widgets.tab.events.CloseClickHandler handler) { if(getHandlerCount(com.smartgwt.client.widgets.tab.events.TabCloseClickEvent.getType()) == 0) setupCloseClickEvent(); return doAddHandler(handler, com.smartgwt.client.widgets.tab.events.TabCloseClickEvent.getType()); } private native void setupCloseClickEvent() /*-{ var obj = null; var selfJ = this; if(this.@com.smartgwt.client.widgets.BaseWidget::isCreated()()) { obj = this.@com.smartgwt.client.widgets.BaseWidget::getJsObj()(); obj.addProperties({onCloseClick:$debox($entry(function(){ var liveTab = arguments[0]; var tabObj = this.getTabObject(liveTab); var param = {"tab" : tabObj}; var event = @com.smartgwt.client.widgets.tab.events.TabCloseClickEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })) }); } else { obj = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); obj.onCloseClick = $debox($entry(function(){ var liveTab = arguments[0]; var tabObj = this.getTabObject(liveTab); var param = {"tab" : tabObj}; var event = @com.smartgwt.client.widgets.tab.events.TabCloseClickEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })); } }-*/; /** * Add a tabTitleChanged handler. * <p> * This notification method fired when the user changes the title of a tab in this TabSet. This can happen either through * user interaction with the UI if {@link com.smartgwt.client.widgets.tab.TabSet#getCanEditTabTitles canEditTabTitles} is * set, or programmatically if application code calls {@link com.smartgwt.client.widgets.tab.TabSet#editTabTitle * editTabTitle}.<p> Return false from this method to cancel the change. * * @param handler the tabTitleChanged handler * @return {@link HandlerRegistration} used to remove this handler */ public HandlerRegistration addTabTitleChangedHandler(com.smartgwt.client.widgets.tab.events.TabTitleChangedHandler handler) { if(getHandlerCount(com.smartgwt.client.widgets.tab.events.TabTitleChangedEvent.getType()) == 0) setupTabTitleChangedEvent(); return doAddHandler(handler, com.smartgwt.client.widgets.tab.events.TabTitleChangedEvent.getType()); } private native void setupTabTitleChangedEvent() /*-{ var obj = null; var selfJ = this; if(this.@com.smartgwt.client.widgets.BaseWidget::isCreated()()) { obj = this.@com.smartgwt.client.widgets.BaseWidget::getJsObj()(); obj.addProperties({titleChanged:$debox($entry(function(){ var liveTab = arguments[2]; var tabObj = this.getTabObject(liveTab); var param = {"newTitle" : arguments[0], "oldTitle" : arguments[1], "tab" : tabObj}; var event = @com.smartgwt.client.widgets.tab.events.TabTitleChangedEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })) }); } else { obj = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); obj.titleChanged = $debox($entry(function(){ var liveTab = arguments[2]; var tabObj = this.getTabObject(liveTab); var param = {"newTitle" : arguments[0], "oldTitle" : arguments[1], "tab" : tabObj}; var event = @com.smartgwt.client.widgets.tab.events.TabTitleChangedEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); var ret = event.@com.smartgwt.client.event.Cancellable::isCancelled()(); return !ret; })); } }-*/; /** * Add a tabIconClick handler. * <p> * Method fired when the user clicks the icon for a tab, as specified via {@link * com.smartgwt.client.widgets.tab.Tab#getIcon icon}. <P> Default behavior will fire <code>icon.click()</code> if * specified, with two parameters <code>tab</code> (a pointer to the tab object and <code>tabSet</code> a pointer to the * tabSet instance. * * @param handler the tabIconClick handler * @return {@link HandlerRegistration} used to remove this handler */ public HandlerRegistration addTabIconClickHandler(com.smartgwt.client.widgets.tab.events.TabIconClickHandler handler) { if(getHandlerCount(com.smartgwt.client.widgets.tab.events.TabClickEvent.getType()) == 0) setupTabIconClickEvent(); return doAddHandler(handler, com.smartgwt.client.widgets.tab.events.TabClickEvent.getType()); } private native void setupTabIconClickEvent() /*-{ var obj = null; var selfJ = this; if(this.@com.smartgwt.client.widgets.BaseWidget::isCreated()()) { obj = this.@com.smartgwt.client.widgets.BaseWidget::getJsObj()(); obj.addProperties({tabIconClick:$entry(function(){ var liveTab = arguments[0]; var tabObj = this.getTabObject(liveTab); var param = {"tab" : tabObj}; var event = @com.smartgwt.client.widgets.tab.events.TabClickEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); }) }); } else { obj = this.@com.smartgwt.client.widgets.BaseWidget::getConfig()(); obj.tabIconClick = $entry(function(){ var liveTab = arguments[0]; var tabObj = this.getTabObject(liveTab); var param = {"tab" : tabObj}; var event = @com.smartgwt.client.widgets.tab.events.TabClickEvent::new(Lcom/google/gwt/core/client/JavaScriptObject;)(param); selfJ.@com.smartgwt.client.widgets.BaseWidget::fireEvent(Lcom/google/gwt/event/shared/GwtEvent;)(event); }); } }-*/; /** * Preload primary tab skin images. */ public static native void preloadImages() /*-{ var imgTabSkinImgDir = $wnd.isc.ImgTab.getInstanceProperty('skinImgDir') + 'top/'; if($wnd.isc.ImgTab.getInstanceProperty('src')) { var src = $wnd.isc.ImgTab.getInstanceProperty('src'); @com.smartgwt.client.util.FileLoader::cacheStretchImgStates(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)(imgTabSkinImgDir, src, "Selected,Over"); } }-*/; }