/* * 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.layout; 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; /** * A subclass of Canvas that automatically arranges other Canvases according to a layout policy. <br><br> A Layout manages * a set of "member" Canvases initialized via the "members" property. Layouts can have both "members", which are managed * by the Layout, and normal Canvas children, which are unmanaged. <br><br> Rather than using the Layout class directly, * use the HLayout, VLayout, HStack and VStack classes, which are subclasses of Layout preconfigured for horizontal or * vertical stacking, with the "fill" (VLayout) or "none" (VStack) {@link com.smartgwt.client.types.LayoutPolicy policies} * already set. <br><br> Layouts and Stacks may be nested to create arbitrarily complex layouts. <br><br> To show a resizer * bar after (to the right or bottom of) a layout member, set showResizeBar to true on that member component (not on the * HLayout or VLayout). Resizer bars override membersMargin spacing. <br><br> Like other Canvas subclasses, Layout and * Stack components may have % width and height values. To create a dynamically-resizing layout that occupies the entire * page (or entire parent component), set width and height to "100%". * @see com.smartgwt.client.types.LayoutPolicy * @see com.smartgwt.client.widgets.layout.VLayout * @see com.smartgwt.client.widgets.layout.HLayout * @see com.smartgwt.client.widgets.layout.VStack * @see com.smartgwt.client.widgets.layout.HStack * @see com.smartgwt.client.widgets.layout.LayoutSpacer */ public class Layout extends Canvas { public static Layout getOrCreateRef(JavaScriptObject jsObj) { if(jsObj == null) return null; BaseWidget obj = BaseWidget.getRef(jsObj); if(obj != null) { return (Layout) obj; } else { return new Layout(jsObj); } } public Layout(){ scClassName = "Layout"; } public Layout(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 true when members are added / removed, they should be animated as they are shown or hidden in position * * @param animateMembers animateMembers Default value is null * @see <a href="http://www.smartclient.com/smartgwt/showcase/#effects_animation_layout" target="examples">Layout Add & Remove Example</a> */ public void setAnimateMembers(Boolean animateMembers) { setAttribute("animateMembers", animateMembers, true); } /** * If true when members are added / removed, they should be animated as they are shown or hidden in position * * * @return Boolean * @see <a href="http://www.smartclient.com/smartgwt/showcase/#effects_animation_layout" target="examples">Layout Add & Remove Example</a> */ public Boolean getAnimateMembers() { return getAttributeAsBoolean("animateMembers"); } /** * If specified this is the duration of show/hide animations when members are being shown or hidden due to being added / * removed from this layout. * <p><b>Note : </b> This is an advanced setting</p> * * @param animateMemberTime animateMemberTime Default value is null */ public void setAnimateMemberTime(Integer animateMemberTime) { setAttribute("animateMemberTime", animateMemberTime, true); } /** * If specified this is the duration of show/hide animations when members are being shown or hidden due to being added / * removed from this layout. * * * @return Integer */ public Integer getAnimateMemberTime() { return getAttributeAsInt("animateMemberTime"); } /** * Layouts provide a default implementation of a drag and drop interaction. If you set * {@link com.smartgwt.client.widgets.Canvas#getCanAcceptDrop canAcceptDrop}:true and <code>canDropComponents:true</code> * on a Layout, when a droppable Canvas ({@link com.smartgwt.client.widgets.Canvas#getCanDrop canDrop:true} is dragged over * the layout will show a dropLine (a simple insertion line) at the drop location. * <P> * When the drop occurs, the dragTarget (obtained using * {@link com.smartgwt.client.util.EventHandler#getDragTarget EventHandler.getDragTarget}) is added as a member of this * layout at the location * shown by the dropLine (calculated by {@link com.smartgwt.client.widgets.layout.Layout#getDropPosition * Layout.getDropPosition}). This default * behavior allows either members or external components that have * {@link com.smartgwt.client.widgets.Canvas#getCanDragReposition canDragReposition} (or {@link * com.smartgwt.client.widgets.Canvas#getCanDrag canDrag}) and {@link com.smartgwt.client.widgets.Canvas#getCanDrop * canDrop} set * to <code>true</code> to be added to or reordered within the Layout. * <P> * You can control the thickness of the dropLine via {@link com.smartgwt.client.widgets.layout.Layout#getDropLineThickness * dropLineThickness} and * you can customize the style using css styling in the skin file (look for .layoutDropLine in * skin_styles.css for your skin). * <P> * If you want to dynamically create a component to be added to the Layout in response to a * drop event you can do so as follows: * <pre> * isc.VLayout.create({ * ...various layout properties... * canDropComponents: true, * drop : function () { * // create the new component * var newMember = isc.Canvas.create(); * // add to the layout at the current drop position * // (the dropLine will be showing here) * this.addMember(newMember, this.getDropPosition()); * // hide the dropLine that was automatically shown * // by builtin Smart GWT methods * this.hideDropLine(); * } * }); * </pre> * If you want to completely suppress the builtin drag and drop logic, but still receive drag * and drop events for your own custom implementation, set {@link com.smartgwt.client.widgets.Canvas#getCanAcceptDrop * canAcceptDrop} to * <code>true</code> and <code>canDropComponents</code> to <code>false</code> on your Layout. * <p><b>Note : </b> This is an advanced setting</p> * * @param canDropComponents canDropComponents Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.docs.Dragdrop Dragdrop overview and related methods */ public void setCanDropComponents(Boolean canDropComponents) throws IllegalStateException { setAttribute("canDropComponents", canDropComponents, false); } /** * Layouts provide a default implementation of a drag and drop interaction. If you set * {@link com.smartgwt.client.widgets.Canvas#getCanAcceptDrop canAcceptDrop}:true and <code>canDropComponents:true</code> * on a Layout, when a droppable Canvas ({@link com.smartgwt.client.widgets.Canvas#getCanDrop canDrop:true} is dragged over * the layout will show a dropLine (a simple insertion line) at the drop location. * <P> * When the drop occurs, the dragTarget (obtained using * {@link com.smartgwt.client.util.EventHandler#getDragTarget EventHandler.getDragTarget}) is added as a member of this * layout at the location * shown by the dropLine (calculated by {@link com.smartgwt.client.widgets.layout.Layout#getDropPosition * Layout.getDropPosition}). This default * behavior allows either members or external components that have * {@link com.smartgwt.client.widgets.Canvas#getCanDragReposition canDragReposition} (or {@link * com.smartgwt.client.widgets.Canvas#getCanDrag canDrag}) and {@link com.smartgwt.client.widgets.Canvas#getCanDrop * canDrop} set * to <code>true</code> to be added to or reordered within the Layout. * <P> * You can control the thickness of the dropLine via {@link com.smartgwt.client.widgets.layout.Layout#getDropLineThickness * dropLineThickness} and * you can customize the style using css styling in the skin file (look for .layoutDropLine in * skin_styles.css for your skin). * <P> * If you want to dynamically create a component to be added to the Layout in response to a * drop event you can do so as follows: * <pre> * isc.VLayout.create({ * ...various layout properties... * canDropComponents: true, * drop : function () { * // create the new component * var newMember = isc.Canvas.create(); * // add to the layout at the current drop position * // (the dropLine will be showing here) * this.addMember(newMember, this.getDropPosition()); * // hide the dropLine that was automatically shown * // by builtin Smart GWT methods * this.hideDropLine(); * } * }); * </pre> * If you want to completely suppress the builtin drag and drop logic, but still receive drag * and drop events for your own custom implementation, set {@link com.smartgwt.client.widgets.Canvas#getCanAcceptDrop * canAcceptDrop} to * <code>true</code> and <code>canDropComponents</code> to <code>false</code> on your Layout. * * * @return Boolean * @see com.smartgwt.client.docs.Dragdrop Dragdrop overview and related methods */ public Boolean getCanDropComponents() { return getAttributeAsBoolean("canDropComponents"); } /** * Policy for whether resize bars are shown on members by default. Note that this setting changes the effect of {@link * com.smartgwt.client.widgets.Canvas#getShowResizeBar showResizeBar} for members of this layout. * * @param defaultResizeBars defaultResizeBars Default value is "marked" * @see com.smartgwt.client.widgets.Canvas#setShowResizeBar */ public void setDefaultResizeBars(LayoutResizeBarPolicy defaultResizeBars) { setAttribute("defaultResizeBars", defaultResizeBars == null ? null : defaultResizeBars.getValue(), true); } /** * Policy for whether resize bars are shown on members by default. Note that this setting changes the effect of {@link * com.smartgwt.client.widgets.Canvas#getShowResizeBar showResizeBar} for members of this layout. * * * @return LayoutResizeBarPolicy * @see com.smartgwt.client.widgets.Canvas#getShowResizeBar */ public LayoutResizeBarPolicy getDefaultResizeBars() { return EnumUtil.getEnum(LayoutResizeBarPolicy.values(), getAttribute("defaultResizeBars")); } /** * Thickness, in pixels of the dropLine shown during drag and drop when {@link * com.smartgwt.client.widgets.layout.Layout#getCanDropComponents canDropComponents} is set to <code>true</code>. See the * discussion in {@link com.smartgwt.client.widgets.layout.Layout} for more info. * <p><b>Note : </b> This is an advanced setting</p> * * @param dropLineThickness dropLineThickness Default value is 2 * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.widgets.layout.Layout * @see com.smartgwt.client.docs.Dragdrop Dragdrop overview and related methods * @see <a href="http://www.smartclient.com/smartgwt/showcase/#grid_interaction_drag_move" target="examples">Drag move Example</a> */ public void setDropLineThickness(int dropLineThickness) throws IllegalStateException { setAttribute("dropLineThickness", dropLineThickness, false); } /** * Thickness, in pixels of the dropLine shown during drag and drop when {@link * com.smartgwt.client.widgets.layout.Layout#getCanDropComponents canDropComponents} is set to <code>true</code>. See the * discussion in {@link com.smartgwt.client.widgets.layout.Layout} for more info. * * * @return int * @see com.smartgwt.client.widgets.layout.Layout * @see com.smartgwt.client.docs.Dragdrop Dragdrop overview and related methods * @see <a href="http://www.smartclient.com/smartgwt/showcase/#grid_interaction_drag_move" target="examples">Drag move Example</a> */ public int getDropLineThickness() { return getAttributeAsInt("dropLineThickness"); } /** * Whether the layout policy is continuously enforced as new members are added or removed and as members are resized. <p> * This setting implies that any member that resizes larger, or any added member, will take space from other members in * order to allow the overall layout to stay the same size. * <p><b>Note : </b> This is an advanced setting</p> * * @param enforcePolicy enforcePolicy Default value is true */ public void setEnforcePolicy(Boolean enforcePolicy) { setAttribute("enforcePolicy", enforcePolicy, true); } /** * Whether the layout policy is continuously enforced as new members are added or removed and as members are resized. <p> * This setting implies that any member that resizes larger, or any added member, will take space from other members in * order to allow the overall layout to stay the same size. * * * @return Boolean */ public Boolean getEnforcePolicy() { return getAttributeAsBoolean("enforcePolicy"); } /** * Sizing policy applied to members on horizontal axis * <p><b>Note : </b> This is an advanced setting</p> * * @param hPolicy hPolicy Default value is "fill" */ public void setHPolicy(LayoutPolicy hPolicy) { setAttribute("hPolicy", hPolicy == null ? null : hPolicy.getValue(), true); } /** * Sizing policy applied to members on horizontal axis * * * @return LayoutPolicy */ public LayoutPolicy getHPolicy() { return EnumUtil.getEnum(LayoutPolicy.values(), getAttribute("hPolicy")); } /** * Space outside of all members, on the bottom side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * @param layoutBottomMargin layoutBottomMargin Default value is null */ public void setLayoutBottomMargin(Integer layoutBottomMargin) { setAttribute("layoutBottomMargin", layoutBottomMargin, true); } /** * Space outside of all members, on the bottom side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * * @return Integer */ public Integer getLayoutBottomMargin() { return getAttributeAsInt("layoutBottomMargin"); } /** * Space outside of all members, on the left-hand side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * @param layoutLeftMargin layoutLeftMargin Default value is null */ public void setLayoutLeftMargin(Integer layoutLeftMargin) { setAttribute("layoutLeftMargin", layoutLeftMargin, true); } /** * Space outside of all members, on the left-hand side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * * @return Integer */ public Integer getLayoutLeftMargin() { return getAttributeAsInt("layoutLeftMargin"); } /** * Space outside of all members. This attribute, along with {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutLeftMargin layoutLeftMargin} and related properties does not have a * true setter method.<br> It may be assigned directly at runtime. After setting the property, {@link * com.smartgwt.client.widgets.layout.Layout#setLayoutMargin Layout.setLayoutMargin} may be called with no arguments to * reflow the layout. * * <br><br>If this method is called after the component has been drawn/initialized: * Method to force a reflow of the layout after directly assigning a value to any of the layout*Margin properties. Takes no arguments. * * @param layoutMargin optional new setting for layout.layoutMargin. Regardless of whether a new layout margin is * passed, the layout reflows according to the current settings for layoutStartMargin et al. Default value is null * @see com.smartgwt.client.widgets.layout.Layout#setLayoutLeftMargin * @see com.smartgwt.client.widgets.layout.Layout#setLayoutRightMargin * @see com.smartgwt.client.widgets.layout.Layout#setLayoutBottomMargin * @see com.smartgwt.client.widgets.layout.Layout#setLayoutTopMargin * @see com.smartgwt.client.widgets.layout.Layout#setPaddingAsLayoutMargin * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_user_sizing" target="examples">User Sizing Example</a> */ public void setLayoutMargin(Integer layoutMargin) { setAttribute("layoutMargin", layoutMargin, true); } /** * Space outside of all members. This attribute, along with {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutLeftMargin layoutLeftMargin} and related properties does not have a * true setter method.<br> It may be assigned directly at runtime. After setting the property, {@link * com.smartgwt.client.widgets.layout.Layout#setLayoutMargin Layout.setLayoutMargin} may be called with no arguments to * reflow the layout. * * * @return Integer * @see com.smartgwt.client.widgets.layout.Layout#getLayoutLeftMargin * @see com.smartgwt.client.widgets.layout.Layout#getLayoutRightMargin * @see com.smartgwt.client.widgets.layout.Layout#getLayoutBottomMargin * @see com.smartgwt.client.widgets.layout.Layout#getLayoutTopMargin * @see com.smartgwt.client.widgets.layout.Layout#getPaddingAsLayoutMargin * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_user_sizing" target="examples">User Sizing Example</a> */ public Integer getLayoutMargin() { return getAttributeAsInt("layoutMargin"); } /** * Space outside of all members, on the right-hand side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * @param layoutRightMargin layoutRightMargin Default value is null */ public void setLayoutRightMargin(Integer layoutRightMargin) { setAttribute("layoutRightMargin", layoutRightMargin, true); } /** * Space outside of all members, on the right-hand side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * * @return Integer */ public Integer getLayoutRightMargin() { return getAttributeAsInt("layoutRightMargin"); } /** * Space outside of all members, on the top side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * @param layoutTopMargin layoutTopMargin Default value is null */ public void setLayoutTopMargin(Integer layoutTopMargin) { setAttribute("layoutTopMargin", layoutTopMargin, true); } /** * Space outside of all members, on the top side. Defaults to {@link * com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. <P> Requires a manual call to * <code>setLayoutMargin()</code> if changed on the fly. * * * @return Integer */ public Integer getLayoutTopMargin() { return getAttributeAsInt("layoutTopMargin"); } /** * Whether to leave a gap for a vertical scrollbar even when one is not actually present. <P> This setting avoids the * layout resizing all members when the vertical scrollbar is introduced or removed, which can avoid unnecessary screen * shifting and improve performance. * * @param leaveScrollbarGap leaveScrollbarGap Default value is false * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setLeaveScrollbarGap(Boolean leaveScrollbarGap) throws IllegalStateException { setAttribute("leaveScrollbarGap", leaveScrollbarGap, false); } /** * Whether to leave a gap for a vertical scrollbar even when one is not actually present. <P> This setting avoids the * layout resizing all members when the vertical scrollbar is introduced or removed, which can avoid unnecessary screen * shifting and improve performance. * * * @return Boolean */ public Boolean getLeaveScrollbarGap() { return getAttributeAsBoolean("leaveScrollbarGap"); } /** * Strategy to use when locating members from within this Layout's members array. * <p><b>Note : </b> This is an advanced setting</p> * * @param locateMembersBy locateMembersBy Default value is null */ public void setLocateMembersBy(LocatorStrategy locateMembersBy) { setAttribute("locateMembersBy", locateMembersBy == null ? null : locateMembersBy.getValue(), true); } /** * Strategy to use when locating members from within this Layout's members array. * * * @return LocatorStrategy */ public LocatorStrategy getLocateMembersBy() { return EnumUtil.getEnum(LocatorStrategy.values(), getAttribute("locateMembersBy")); } /** * {@link com.smartgwt.client.types.LocatorTypeStrategy} to use when finding members within this layout. * <p><b>Note : </b> This is an advanced setting</p> * * @param locateMembersType locateMembersType Default value is null */ public void setLocateMembersType(LocatorTypeStrategy locateMembersType) { setAttribute("locateMembersType", locateMembersType == null ? null : locateMembersType.getValue(), true); } /** * {@link com.smartgwt.client.types.LocatorTypeStrategy} to use when finding members within this layout. * * * @return LocatorTypeStrategy */ public LocatorTypeStrategy getLocateMembersType() { return EnumUtil.getEnum(LocatorTypeStrategy.values(), getAttribute("locateMembersType")); } /** * If set, a Layout with breadthPolicy:"fill" will specially interpret a percentage breadth on a member as a percentage of * available space excluding the {@link com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. If false, * percentages work exactly as for a non-member, with layoutMargins, if any, ignored. * * @param managePercentBreadth managePercentBreadth Default value is true * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setManagePercentBreadth(Boolean managePercentBreadth) throws IllegalStateException { setAttribute("managePercentBreadth", managePercentBreadth, false); } /** * If set, a Layout with breadthPolicy:"fill" will specially interpret a percentage breadth on a member as a percentage of * available space excluding the {@link com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}. If false, * percentages work exactly as for a non-member, with layoutMargins, if any, ignored. * * * @return Boolean */ public Boolean getManagePercentBreadth() { return getAttributeAsBoolean("managePercentBreadth"); } /** * Number of pixels by which each member should overlap the preceding member, used for creating an "stack of cards" * appearance for the members of a Layout. <P> <code>memberOverlap</code> can be used in conjunction with {@link * com.smartgwt.client.widgets.layout.Layout#getStackZIndex stackZIndex} to create a particular visual stacking order. <P> * Note that overlap of individual members can be accomplished with a negative setting for {@link * com.smartgwt.client.widgets.Canvas#getExtraSpace extraSpace}. * * @param memberOverlap memberOverlap Default value is 0 * @throws IllegalStateException this property cannot be changed after the component has been created * @see com.smartgwt.client.docs.LayoutMember LayoutMember overview and related methods */ public void setMemberOverlap(int memberOverlap) throws IllegalStateException { setAttribute("memberOverlap", memberOverlap, false); } /** * Number of pixels by which each member should overlap the preceding member, used for creating an "stack of cards" * appearance for the members of a Layout. <P> <code>memberOverlap</code> can be used in conjunction with {@link * com.smartgwt.client.widgets.layout.Layout#getStackZIndex stackZIndex} to create a particular visual stacking order. <P> * Note that overlap of individual members can be accomplished with a negative setting for {@link * com.smartgwt.client.widgets.Canvas#getExtraSpace extraSpace}. * * * @return int * @see com.smartgwt.client.docs.LayoutMember LayoutMember overview and related methods */ public int getMemberOverlap() { return getAttributeAsInt("memberOverlap"); } /** * Space between each member of the layout. <P> Requires a manual call to <code>reflow()</code> if changed on the fly. * * @param membersMargin membersMargin Default value is 0 * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_user_sizing" target="examples">User Sizing Example</a> */ public void setMembersMargin(int membersMargin) { setAttribute("membersMargin", membersMargin, true); } /** * Space between each member of the layout. <P> Requires a manual call to <code>reflow()</code> if changed on the fly. * * * @return int * @see <a href="http://www.smartclient.com/smartgwt/showcase/#layout_user_sizing" target="examples">User Sizing Example</a> */ public int getMembersMargin() { return getAttributeAsInt("membersMargin"); } /** * Minimum size, in pixels, below which members should never be shrunk, even if this requires the Layout to overflow. * * @param minMemberSize minMemberSize Default value is 1 * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setMinMemberSize(int minMemberSize) throws IllegalStateException { setAttribute("minMemberSize", minMemberSize, false); } /** * Minimum size, in pixels, below which members should never be shrunk, even if this requires the Layout to overflow. * * * @return int */ public int getMinMemberSize() { return getAttributeAsInt("minMemberSize"); } /** * Normal {@link com.smartgwt.client.types.Overflow} settings can be used on layouts, for example, an overflow:auto Layout * will scroll if members exceed its specified size, whereas an overflow:visible Layout will grow to accommodate members. * * @param overflow overflow Default value is "visible" * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setOverflow(Overflow overflow) throws IllegalStateException { setAttribute("overflow", overflow == null ? null : overflow.getValue(), false); } /** * Normal {@link com.smartgwt.client.types.Overflow} settings can be used on layouts, for example, an overflow:auto Layout * will scroll if members exceed its specified size, whereas an overflow:visible Layout will grow to accommodate members. * * * @return Overflow */ public Overflow getOverflow() { return EnumUtil.getEnum(Overflow.values(), getAttribute("overflow")); } /** * If this widget has padding specified (as {@link com.smartgwt.client.widgets.Canvas#getPadding this.padding} or in the * CSS style applied to this layout), should it show up as space outside the members, similar to layoutMargin? <P> If this * setting is false, padding will not affect member positioning (as CSS padding normally does not affect absolutely * positioned children). Leaving this setting true allows a designer to more effectively control layout purely from CSS. * <P> Note that {@link com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin} if specified, takes * precedence over this value. * <p><b>Note : </b> This is an advanced setting</p> * * @param paddingAsLayoutMargin paddingAsLayoutMargin Default value is true */ public void setPaddingAsLayoutMargin(Boolean paddingAsLayoutMargin) { setAttribute("paddingAsLayoutMargin", paddingAsLayoutMargin, true); } /** * If this widget has padding specified (as {@link com.smartgwt.client.widgets.Canvas#getPadding this.padding} or in the * CSS style applied to this layout), should it show up as space outside the members, similar to layoutMargin? <P> If this * setting is false, padding will not affect member positioning (as CSS padding normally does not affect absolutely * positioned children). Leaving this setting true allows a designer to more effectively control layout purely from CSS. * <P> Note that {@link com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin} if specified, takes * precedence over this value. * * * @return Boolean */ public Boolean getPaddingAsLayoutMargin() { return getAttributeAsBoolean("paddingAsLayoutMargin"); } /** * Class to use for creating resizeBars. <P> A resize bar will be created for any Layout member that specifies {@link * com.smartgwt.client.widgets.Canvas#getShowResizeBar <code>showResizeBar:true</code>}. Resize bars will be instances of * the class specified by this property, and will automatically be sized to the member's breadth and to the thickness * given by {@link com.smartgwt.client.widgets.layout.Layout#getResizeBarSize resizeBarSize}.<br> Classes that are valid by * default are {@link com.smartgwt.client.widgets.Splitbar} and {@link com.smartgwt.client.widgets.ImgSplitbar}. <P> To * customize the appearance or behavior of resizeBars within some layout a custom resize bar class can be created by * subclassing {@link com.smartgwt.client.widgets.Splitbar} or {@link com.smartgwt.client.widgets.ImgSplitbar} and setting * this property on your layout to use your new class. <P> Resize bars will automatically be sized to the member's breadth * and to the thickness given by <code>layout.resizeBarSize</code>. The built-in Splitbar class supports drag resizing of * its target member, and clicking on the bar to hide the target member. * <p><b>Note : </b> This is an advanced setting</p> * * @param resizeBarClass resizeBarClass Default value is "Splitbar" * @see com.smartgwt.client.widgets.Splitbar * @see com.smartgwt.client.widgets.ImgSplitbar * @see com.smartgwt.client.widgets.layout.Layout#setResizeBarSize */ public void setResizeBarClass(String resizeBarClass) { setAttribute("resizeBarClass", resizeBarClass, true); } /** * Class to use for creating resizeBars. <P> A resize bar will be created for any Layout member that specifies {@link * com.smartgwt.client.widgets.Canvas#getShowResizeBar <code>showResizeBar:true</code>}. Resize bars will be instances of * the class specified by this property, and will automatically be sized to the member's breadth and to the thickness * given by {@link com.smartgwt.client.widgets.layout.Layout#getResizeBarSize resizeBarSize}.<br> Classes that are valid by * default are {@link com.smartgwt.client.widgets.Splitbar} and {@link com.smartgwt.client.widgets.ImgSplitbar}. <P> To * customize the appearance or behavior of resizeBars within some layout a custom resize bar class can be created by * subclassing {@link com.smartgwt.client.widgets.Splitbar} or {@link com.smartgwt.client.widgets.ImgSplitbar} and setting * this property on your layout to use your new class. <P> Resize bars will automatically be sized to the member's breadth * and to the thickness given by <code>layout.resizeBarSize</code>. The built-in Splitbar class supports drag resizing of * its target member, and clicking on the bar to hide the target member. * * * @return String * @see com.smartgwt.client.widgets.Splitbar * @see com.smartgwt.client.widgets.ImgSplitbar * @see com.smartgwt.client.widgets.layout.Layout#getResizeBarSize */ public String getResizeBarClass() { return getAttributeAsString("resizeBarClass"); } /** * Thickness of the resizeBars in pixels * <p><b>Note : </b> This is an advanced setting</p> * * @param resizeBarSize resizeBarSize Default value is 7 */ public void setResizeBarSize(int resizeBarSize) { setAttribute("resizeBarSize", resizeBarSize, true); } /** * Thickness of the resizeBars in pixels * * * @return int */ public int getResizeBarSize() { return getAttributeAsInt("resizeBarSize"); } /** * Reverse the order of stacking for this Layout, so that the last member is shown first. <P> Requires a manual call to * <code>reflow()</code> if changed on the fly. <P> In RTL mode, for horizontal Layouts the value of this flag will be * flipped during initialization. * * @param reverseOrder reverseOrder Default value is false */ public void setReverseOrder(Boolean reverseOrder) { setAttribute("reverseOrder", reverseOrder, true); } /** * Reverse the order of stacking for this Layout, so that the last member is shown first. <P> Requires a manual call to * <code>reflow()</code> if changed on the fly. <P> In RTL mode, for horizontal Layouts the value of this flag will be * flipped during initialization. * * * @return Boolean */ public Boolean getReverseOrder() { return getAttributeAsBoolean("reverseOrder"); } /** * If set to true, when a member is dragged out of layout, a visible placeholder canvas will be displayed in place of the * dragged widget for the duration of the drag and drop interaction. * * @param showDragPlaceHolder showDragPlaceHolder Default value is null * @see com.smartgwt.client.docs.Dragdrop Dragdrop overview and related methods * @see <a href="http://www.smartclient.com/smartgwt/showcase/#grid_interaction_drag_move" target="examples">Drag move Example</a> */ public void setShowDragPlaceHolder(Boolean showDragPlaceHolder) { setAttribute("showDragPlaceHolder", showDragPlaceHolder, true); } /** * If set to true, when a member is dragged out of layout, a visible placeholder canvas will be displayed in place of the * dragged widget for the duration of the drag and drop interaction. * * * @return Boolean * @see com.smartgwt.client.docs.Dragdrop Dragdrop overview and related methods * @see <a href="http://www.smartclient.com/smartgwt/showcase/#grid_interaction_drag_move" target="examples">Drag move Example</a> */ public Boolean getShowDragPlaceHolder() { return getAttributeAsBoolean("showDragPlaceHolder"); } /** * For use in conjunction with {@link com.smartgwt.client.widgets.layout.Layout#getMemberOverlap memberOverlap}, controls * the z-stacking order of members. <P> If "lastOnTop", members stack from the first member at bottom to the last member at * top. If "firstOnTop", members stack from the last member at bottom to the first member at top. * * @param stackZIndex stackZIndex Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setStackZIndex(String stackZIndex) throws IllegalStateException { setAttribute("stackZIndex", stackZIndex, false); } /** * For use in conjunction with {@link com.smartgwt.client.widgets.layout.Layout#getMemberOverlap memberOverlap}, controls * the z-stacking order of members. <P> If "lastOnTop", members stack from the first member at bottom to the last member at * top. If "firstOnTop", members stack from the last member at bottom to the first member at top. * * * @return String */ public String getStackZIndex() { return getAttributeAsString("stackZIndex"); } /** * Should this layout appear with members stacked vertically or horizontally. Defaults to <code>false</code> if * unspecified. * * @param vertical vertical Default value is null */ public void setVertical(Boolean vertical) { setAttribute("vertical", vertical, true); } /** * Should this layout appear with members stacked vertically or horizontally. Defaults to <code>false</code> if * unspecified. * * * @return Boolean */ public Boolean getVertical() { return getAttributeAsBoolean("vertical"); } /** * Sizing policy applied to members on vertical axis * <p><b>Note : </b> This is an advanced setting</p> * * @param vPolicy vPolicy Default value is "fill" */ public void setVPolicy(LayoutPolicy vPolicy) { setAttribute("vPolicy", vPolicy == null ? null : vPolicy.getValue(), true); } /** * Sizing policy applied to members on vertical axis * * * @return LayoutPolicy */ public LayoutPolicy getVPolicy() { return EnumUtil.getEnum(LayoutPolicy.values(), getAttribute("vPolicy")); } // ********************* Methods *********************** /** * Get the position a new member would be dropped. This drop position switches in the middle of each member, and both * edges (before beginning, after end) are legal drop positions <p> Use this method to obtain the drop position for e.g. a * custom drop handler. * * @return the position a new member would be dropped */ public native int getDropPosition() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); return self.getDropPosition(); }-*/; /** * Return the breadth for a member of this layout which either didn't specify a breadth or specified a percent breadth with * {@link com.smartgwt.client.widgets.layout.Layout#getManagePercentBreadth managePercentBreadth}:true. <P> Called only for * Layouts which have a {@link com.smartgwt.client.types.LayoutPolicy layout policy} for the breadth axis of "fill", since * Layouts with a breadth policy of "none" leave all member breadths alone. * @param member Component to be sized * @param defaultBreadth Value of the currently calculated member breadth. This may be returned verbatim or manipulated in this method. */ public native void getMemberDefaultBreadth(Canvas member, int defaultBreadth) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.getMemberDefaultBreadth(member.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(), defaultBreadth); }-*/; /** * Override point for changing the offset on the breadth axis for members, that is, the offset relative to the left edge * for a vertical layout, or the offset relative to the top edge for a horizontal layout. <P> The method is passed the * default offset that would be used for the member if getMemberOffset() were not implemented. This default offset already * takes into account {@link com.smartgwt.client.widgets.layout.Layout#getLayoutMargin layoutMargin}, as well as the {@link * com.smartgwt.client.widgets.layout.Layout#getDefaultLayoutAlign alignment on the breadth axis}, which is also passed to * getMemberOffset(). <P> This method is an override point only; it does not exist by default and cannot be called. * @param member Component to be positioned * @param defaultOffset Value of the currently calculated member offset. If this value is returned unchanged the layout will have its * default behavior * @param alignment alignment of the enclosing layout, on the breadth axis */ public native void getMemberOffset(Canvas member, int defaultOffset, String alignment) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.getMemberOffset(member.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(), defaultOffset, alignment); }-*/; /** * Returns true if the layout includes the specified canvas. * @param canvas the canvas to check for * * @return true if the layout includes the specified canvas */ public native Boolean hasMember(Canvas canvas) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var retVal =self.hasMember(canvas.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()()); if(retVal == null || retVal === undefined) { return null; } else { return @com.smartgwt.client.util.JSOHelper::toBoolean(Z)(retVal); } }-*/; /** * Calling this method hides the dropLine shown during a drag and drop interaction with a Layout that has {@link * com.smartgwt.client.widgets.layout.Layout#getCanDropComponents canDropComponents} set to true. This method is only * useful for custom implementations of {@link com.smartgwt.client.widgets.layout.Layout#drop Layout.drop} as the default * implementation calls this method automatically. */ public native void hideDropLine() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.hideDropLine(); }-*/; /** * Fires once at initialization if the layout has any initial members, and then fires whenever members are added, removed * or reordered. */ public native void membersChanged() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.membersChanged(); }-*/; /** * Layout members according to current settings. <P> Members will reflow automatically when the layout is resized, members * resize, the list of members changes or members change visibility. It is only necessary to manually call * <code>reflow()</code> after changing settings on the layout, for example, <code>layout.reverseOrder</code>. */ public native void reflow() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.reflow(); }-*/; /** * Layout members according to current settings. <P> Members will reflow automatically when the layout is resized, members * resize, the list of members changes or members change visibility. It is only necessary to manually call * <code>reflow()</code> after changing settings on the layout, for example, <code>layout.reverseOrder</code>. * @param reason reason reflow() had to be called (appear in logs if enabled) */ public native void reflow(String reason) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.reflow(reason); }-*/; /** * Layout members according to current settings, immediately. <br> Generally, when changes occur that require a layout to * reflow (such as members being shown or hidden), the Layout will reflow only after a delay, so that multiple changes * cause only one reflow. To remove this delay for cases where it is not helpful, reflowNow() can be called. */ public native void reflowNow() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.reflowNow(); }-*/; /** * Removes the specified member from the layout. If it has a resize bar, the bar will be destroyed. * @param member the canvas to be removed from the layout */ public native void removeMember(Canvas member) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.removeMember(member.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()()); }-*/; /** * Shift a member of the layout to a new position * @param memberNum current position of the member to move to a new position * @param newPosition new position to move the member to */ public native void reorderMember(int memberNum, int newPosition) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.reorderMember(memberNum, newPosition); }-*/; /** * Move a range of members to a new position * @param start beginning of range of members to move * @param end end of range of members to move, non-inclusive * @param newPosition new position to move the members to */ public native void reorderMembers(int start, int end, int newPosition) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.reorderMembers(start, end, newPosition); }-*/; /** * Hide all other members and make the single parameter member visible. * @param member member to show */ public native void setVisibleMember(Canvas member) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.setVisibleMember(member.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()()); }-*/; // ********************* 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 layoutProperties properties that should be used as new defaults when instances of this class are created */ public static native void setDefaultProperties(Layout layoutProperties) /*-{ var properties = $wnd.isc.addProperties({},layoutProperties.@com.smartgwt.client.widgets.BaseWidget::getConfig()()); delete properties.ID; $wnd.isc.Layout.addProperties(properties); }-*/; // *********************************************************** protected void onInit() { super.onInit(); onInit_Layout(); } protected native void onInit_Layout() /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); self.__getDropComponent = self.getDropComponent; self.getDropComponent = $entry(function(dragTarget, dropPosition) { var jObj = this.__ref; var dragTargetJ = @com.smartgwt.client.widgets.Canvas::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(dragTarget); var dragTarget2J = jObj.@com.smartgwt.client.widgets.layout.Layout::getDropComponent(Lcom/smartgwt/client/widgets/Canvas;I)(dragTargetJ, dropPosition); return dragTarget2J == null ? null : dragTarget2J.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(); }); }-*/; /* * When {@link com.smartgwt.client.widgets.layout.Layout#getCanDropComponents canDropComponents} is true, this method will * be called when a component is dropped onto the layout to determine what component to add as a new layout member. <P> By * default, the actual component being dragged (isc.EventHandler.getDragTarget()) will be added to the layout. For a * different behavior, such as wrapping dropped components in Windows, or creating components on the fly from dropped data, * override this method. <P> You can also return null to cancel the drop. * * <b>Note : </b> This is an override point * @param dragTarget current drag target * @param dropPosition index of the drop in the list of current members * * @return Returning null will cancel the drop entirely. By default the dragTarget is returned */ protected native Canvas getDropComponent(Canvas dragTarget, int dropPosition) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.__getDropComponent(dragTarget == null ? null : dragTarget.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(), dropPosition); return ret == null || ret == undefined ? null : @com.smartgwt.client.widgets.Canvas::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * An array of canvases that will be contained within this layout. You can set the following properties on these * canvases (in addition to the standard component properties): <ul> <li>layoutAlign--specifies the member's * alignment along the breadth axis; valid values are "top", "center" and "bottom" for a horizontal layout and * "left", "center" and "right" for a vertical layout (see {@link com.smartgwt.client.widgets.layout.Layout#getDefaultLayoutAlign * defaultLayoutAlign} for default implementation.) <li>showResizeBar--set to true to show a resize bar (default * is false) </ul> Height and width settings found on members are interpreted by the Layout according to the {@link * com.smartgwt.client.widgets.layout.Layout#getVPolicy vPolicy}. * * @param members members Default value is null */ public void setMembers(Canvas... members) { if(!isCreated()) { setAttribute("members", members, true); } else { Canvas[] membersToRemove = getMembers(); for(Canvas member : membersToRemove) { removeMember(member); } for(Canvas member : members) { addMember(member); } } } /** * Add a canvas to the layout, optionally at a specific position. * * @param widget the canvas object to be added to the layout */ public void addMember(Widget widget) { if (widget instanceof Canvas) { addMember((Canvas) widget); } else { addMember(new WidgetCanvas(widget)); } } /** * Add a canvas to the layout, optionally at a specific position. * * @param component the canvas object to be added to the layout */ public void addMember(Canvas component) { JavaScriptObject componentJS = component.getOrCreateJsObj(); if (isCreated()) { addMemberPostCreate(componentJS); } else { addMemberPreCreate(componentJS); } } public void addMember(Widget widget, int position) { if (widget instanceof Canvas) { addMember((Canvas) widget, position); } else { addMember(new WidgetCanvas(widget), position); } } /** * Add a canvas to the layout, optionally at a specific position. * * @param component the canvas object to be added to the layout * @param position the position in the layout to place newMember (starts with 0); * if omitted, it will be added at the last position */ public void addMember(Canvas component, int position) { JavaScriptObject componentJS = component.getOrCreateJsObj(); if (isCreated()) { addMemberPostCreate(componentJS, position); } else { addMemberPreCreate(componentJS, position); } } protected native void addMemberPreCreate(Object componentJS) /*-{ var config = this.@com.smartgwt.client.widgets.BaseWidget::config; if(!config.members) { config.members = @com.smartgwt.client.util.JSOHelper::createJavaScriptArray()(); } config.members.push(componentJS); }-*/; protected native void addMemberPostCreate(Object componentJS) /*-{ var container = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); container.addMember(componentJS); }-*/; protected native void addMemberPreCreate(Object componentJS, int position) /*-{ var config = this.@com.smartgwt.client.widgets.BaseWidget::config; if(!config.members) { config.members = @com.smartgwt.client.util.JSOHelper::createJavaScriptArray()(); } config.members.addAt(componentJS, position); }-*/; protected native void addMemberPostCreate(Object componentJS, int position) /*-{ var container = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); container.addMember(componentJS, position); }-*/; /** * If {@link com.smartgwt.client.widgets.layout.Layout#getShowDragPlaceHolder showDragPlaceHolder} is true, this * properties object can be used to customize the appearance of the placeholder displayed when the user drags a * widget out of this layout. * * @param placeHolderProperties placeHolderProperties Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setPlaceHolderProperties(Canvas placeHolderProperties) throws IllegalStateException { placeHolderProperties.setConfigOnly(true); setAttribute("placeHolderProperties", placeHolderProperties, false); } /** * If {@link com.smartgwt.client.widgets.layout.Layout#getShowDragPlaceHolder showDragPlaceHolder} is true, this * defaults object determines the default appearance of the placeholder displayed when the user drags a widget out * of this layout.<br> Default value for this property sets the placeholder {@link * com.smartgwt.client.widgets.Canvas#getStyleName styleName} to <code>"layoutPlaceHolder"</code><br> To modify this * object, use {@link com.smartgwt.client..Class#changeDefaults} * * @param placeHolderDefaults placeHolderDefaults Default value is {...} * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setPlaceHolderDefaults(Canvas placeHolderDefaults) throws IllegalStateException { placeHolderDefaults.setConfigOnly(true); setAttribute("placeHolderDefaults", placeHolderDefaults, false); } /** * Specifies the default alignment for layout members on the breadth axis. Can be overridden on a per-member basis * by setting {@link com.smartgwt.client.widgets.Canvas#getLayoutAlign layoutAlign}.<br> If unset, default member * layout alignment will be "top" for a horizontal layout, and left for a vertical layout. * * @param alignment defaultLayoutAlign Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setDefaultLayoutAlign(Alignment alignment) throws IllegalStateException { setAttribute("defaultLayoutAlign", alignment.getValue(), false); } /** * Specifies the default alignment for layout members on the breadth axis. Can be overridden on a per-member basis * by setting {@link com.smartgwt.client.widgets.Canvas#getLayoutAlign layoutAlign}.<br> If unset, default member * layout alignment will be "top" for a horizontal layout, and left for a vertical layout. * * @param alignment defaultLayoutAlign Default value is null * @throws IllegalStateException this property cannot be changed after the component has been created */ public void setDefaultLayoutAlign(VerticalAlignment alignment) throws IllegalStateException { setAttribute("defaultLayoutAlign", alignment.getValue(), false); } public void setDropLineProperties(Canvas dropLineProperties) throws IllegalStateException { dropLineProperties.setConfigOnly(true); setAttribute("dropLineProperties", dropLineProperties, false); } /** * Alignment of all members in this Layout on the length axis. Defaults to "top" for vertical Layouts, and "left" * for horizontal Layouts. * * @param alignment alignment Default value is null */ public void setAlign(Alignment alignment) { setAttribute("align", alignment.getValue(), true); } /** * Alignment of all members in this Layout on the length axis. Defaults to "top" for vertical Layouts, and "left" * for horizontal Layouts. * * @param alignment alignment Default value is null */ public void setAlign(VerticalAlignment alignment) { setAttribute("align", alignment.getValue(), true); } /** * Removes the specified members from the layout. If any of the removed members have resize bars, the bars will be * destroyed. * * @param members array of members to be removed, or reference to single * member. */ public native void removeMembers(Canvas[] members) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var membersJS = @com.smartgwt.client.util.JSOHelper::convertToJavaScriptArray([Ljava/lang/Object;)(members); self.removeMembers(membersJS); }-*/; /** * Return the members in the Layout. * * @return the members */ public Canvas[] getMembers() { return Canvas.convertToCanvasArray(getAttributeAsJavaScriptObject("members")); } /** * Show the specified member, firing the specified callback when the hide is complete. <P> Members can always be * directly shown via <code>member.show()</code>, but if {@link com.smartgwt.client.widgets.layout.Layout#getAnimateMembers * animateMembers} is enabled, animation will only occur if showMember() is called to show the member. * * @param member Member to show */ public native void showMember(Canvas member) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var memberJS = member.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(); self.showMember(memberJS); }-*/; /** * Show the specified member, firing the specified callback when the hide is complete. <P> Members can always be * directly shown via <code>member.show()</code>, but if {@link com.smartgwt.client.widgets.layout.Layout#getAnimateMembers * animateMembers} is enabled, animation will only occur if showMember() is called to show the member. * * @param member Member to show * @param callback action to fire when the member has been shown */ public native void showMember(Canvas member, Function callback) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var memberJS = member.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(); self.showMember(memberJS, $entry(function() { callback.@com.smartgwt.client.core.Function::execute()(); })); }-*/; /** * Hide the specified member, firing the specified callback when the hide is complete. <P> Members can always be * directly hidden via <code>member.hide()</code>, but if {@link com.smartgwt.client.widgets.layout.Layout#getAnimateMembers * animateMembers} is enabled, animation will only occur if hideMember() is called to hide the member. * * @param member Member to hide */ public native void hideMember(Canvas member) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var memberJS = member.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(); self.hideMember(memberJS); }-*/; /** * Hide the specified member, firing the specified callback when the hide is complete. <P> Members can always be * directly hidden via <code>member.hide()</code>, but if {@link com.smartgwt.client.widgets.layout.Layout#getAnimateMembers * animateMembers} is enabled, animation will only occur if hideMember() is called to hide the member. * * @param member Member to hide * @param callback callback to fire when the member is hidden. */ public native void hideMember(Canvas member, Function callback) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var memberJS = member.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(); self.hideMember(memberJS, $entry(function() { callback.@com.smartgwt.client.core.Function::execute()(); })); }-*/; /** * Given a numerical index or a member ID, return a pointer to the appropriate member. <p> If passed a member * Canvas, just returns it. * * @param index index for the member * @return member widget */ public native Canvas getMember(int index) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getMember(index); return ret == null ? null : @com.smartgwt.client.widgets.Canvas::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Given a numerical index or a member ID, return a pointer to the appropriate member. <p> If passed a member * Canvas, just returns it. * * @param memberID identifier for the required member * @return member widget */ public native Canvas getMember(String memberID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var ret = self.getMember(memberID); return ret == null ? null : @com.smartgwt.client.widgets.Canvas::getOrCreateRef(Lcom/google/gwt/core/client/JavaScriptObject;)(ret); }-*/; /** * Given a member Canvas or member ID, return the index of that member within this layout's members array <p> If * passed a number, just returns it. * * @param member the member * @return index of the member canvas (or -1 if not found) */ public native int getMemberNumber(Canvas member) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); var memberJS = member.@com.smartgwt.client.widgets.Canvas::getOrCreateJsObj()(); return self.getMemberNumber(memberJS); }-*/; /** * Given a member Canvas or member ID, return the index of that member within this layout's members array <p> If * passed a number, just returns it. * * @param memberID identifier for the required member * @return index of the member canvas (or -1 if not found) */ public native int getMemberNumber(String memberID) /*-{ var self = this.@com.smartgwt.client.widgets.BaseWidget::getOrCreateJsObj()(); return self.getMemberNumber(memberID); }-*/; }