Package com.sencha.gxt.widget.core.client.container

Source Code of com.sencha.gxt.widget.core.client.container.BoxLayoutContainer$BoxLayoutData

/**
* Sencha GXT 3.1.0-beta - Sencha for GWT
* Copyright(c) 2007-2014, Sencha, Inc.
* licensing@sencha.com
*
* http://www.sencha.com/products/gxt/license/
*/
package com.sencha.gxt.widget.core.client.container;

import com.google.gwt.core.client.GWT;
import com.google.gwt.dom.client.Element;
import com.google.gwt.safehtml.shared.SafeHtmlBuilder;
import com.google.gwt.uibinder.client.UiChild;
import com.google.gwt.user.client.ui.IsWidget;
import com.google.gwt.user.client.ui.Widget;
import com.sencha.gxt.core.client.dom.XDOM;
import com.sencha.gxt.core.client.dom.XElement;
import com.sencha.gxt.core.client.resources.CommonStyles;
import com.sencha.gxt.core.client.util.Margins;
import com.sencha.gxt.core.client.util.Padding;

/**
* A base class for box layout containers. Provides behavior common to all box
* layout containers, including packing, padding and the action to take on
* insert and remove.
*/
public abstract class BoxLayoutContainer extends InsertResizeContainer {

  @SuppressWarnings("javadoc")
  public interface BoxLayoutContainerAppearance {

    public void render(SafeHtmlBuilder sb);

  }

  /**
   * Specifies box layout parameters which control the minimum and maximum size,
   * as well as the "flex" value.
   */
  public static class BoxLayoutData extends MarginData implements LayoutData {

    private double flex;

    private int maxSize = Integer.MAX_VALUE;

    private int minSize;

    /**
     * Creates a box layout data with default values for <code>margins</code>
     * (0), <code>minSize</code> (0), <code>maxSize</code> (unlimited) and
     * <code>flex</code> (unflexed).
     */
    public BoxLayoutData() {
    }

    /**
     * Creates a box layout data with the specified margins.
     *
     * @param margins the margins for the box layout data
     */
    public BoxLayoutData(Margins margins) {
      super(margins);
    }

    /**
     * Returns the flex value which is a weight used by the layout for sizing
     * calculations.
     *
     * @return the flex
     */
    public double getFlex() {
      return flex;
    }

    /**
     * Returns the maximum size to which widgets will be constrained (defaults
     * to unlimited).
     *
     * @return the maximum allowable size when resizing widgets
     */
    public int getMaxSize() {
      return maxSize;
    }

    /**
     * Returns the minimum size to which widgets will be constrained (defaults
     * to 0)
     *
     * @return the minimum allowable size when resizing widgets
     */
    public int getMinSize() {
      return minSize;
    }

    /**
     * Sets the weighted flex value. Each child item with a <tt>flex</tt> value
     * will be flexed <b>horizontally</b> according to each item's
     * <b>relative</b> <tt>flex</tt> value compared to the sum of all items with
     * a <tt>flex</tt> value specified. Values of 0 (default) will cause the
     * child to not be 'flexed' with the initial width not being changed.
     *
     * @param flex the flex value
     */
    public void setFlex(double flex) {
      this.flex = flex;
    }

    /**
     * Sets the maximum size to which widgets will be constrained.
     *
     * @param maxSize the maximum allowable size when resizing widgets
     */
    public void setMaxSize(int maxSize) {
      this.maxSize = maxSize;
    }

    /**
     * Sets the minimum size to which widgets will be constrained.
     *
     * @param minSize the minimum allowable size when resizing widgets
     */
    public void setMinSize(int minSize) {
      this.minSize = minSize;
    }

  }
  /**
   * BoxLayoutPack enumeration. Box Layout can have three states:
   */
  public enum BoxLayoutPack {
    /**
     * Children are packed together at <b>mid-height</b> of container.
     */
    CENTER,
    /**
     * Children are packed together at <b>bottom</b> side of container.
     */
    END,
    /**
     * Children are packed together at <b>top</b> side of container.
     */
    START
  }

  private boolean adjustForFlexRemainder;
  private BoxLayoutPack pack = BoxLayoutPack.START;
  private Padding padding;
  private int scrollOffset = 0;

  /**
   * Creates a box layout container with the default appearance.
   */
  public BoxLayoutContainer() {
    this(GWT.<BoxLayoutContainerAppearance> create(BoxLayoutContainerAppearance.class));
  }

  /**
   * Creates a box layout container with the specified appearance.
   *
   * @param appearance the box layout container appearance
   */
  public BoxLayoutContainer(BoxLayoutContainerAppearance appearance) {
    SafeHtmlBuilder sb = new SafeHtmlBuilder();
    appearance.render(sb);
    setElement((Element) XDOM.create(sb.toSafeHtml()));
  }

  /**
   * Adds a widget to this box layout container with the specified layout
   * parameters.
   *
   * @param child the widget to add
   * @param layoutData the layout parameters
   */
  @UiChild(tagname = "child")
  public void add(IsWidget child, BoxLayoutData layoutData) {
    if (child != null) {
      child.asWidget().setLayoutData(layoutData);
    }
    super.add(child);
  }

  /**
   * Returns the layout's pack value.
   *
   * @return the pack value
   */
  public BoxLayoutPack getPack() {
    return pack;
  }

  /**
   * Returns the padding between widgets.
   *
   * @return the padding between widgets.
   */
  public Padding getPadding() {
    return padding;
  }

  /**
   * Returns the scroll offset.
   *
   * @return the scroll offset
   */
  public int getScrollOffset() {
    return scrollOffset;
  }

  /**
   * Inserts a widget into the box layout container.
   *
   * @param w the widget
   * @param beforeIndex the insert index
   * @param layoutData the layout parameters
   */
  public void insert(IsWidget w, int beforeIndex, BoxLayoutData layoutData) {
    if (w != null) {
      w.asWidget().setLayoutData(layoutData);
    }
    super.insert(w, beforeIndex);
  }

  /**
   * Returns true if the remaining space after flex calculation is applied to
   * the last widget being flexed.
   *
   * @return true if adjusting for flex remainder
   */
  public boolean isAdjustForFlexRemainder() {
    return adjustForFlexRemainder;
  }

  /**
   * Set to true if the remaining space after flex calculation should be applied
   * to the last widget being flexed.
   *
   * @param adjustForFlexRemainder true to add the space
   */
  public void setAdjustForFlexRemainder(boolean adjustForFlexRemainder) {
    this.adjustForFlexRemainder = adjustForFlexRemainder;
  }

  /**
   * Sets how the child items of the container are packed together.
   *
   * @param pack the pack value
   */
  public void setPack(BoxLayoutPack pack) {
    this.pack = pack;
  }

  /**
   * Sets the padding to use for the box layout container (i.e. the container
   * itself, independent of any contained widgets).
   *
   * @param padding the padding
   */
  public void setPadding(Padding padding) {
    this.padding = padding;
  }

  /**
   * Sets the scroll offset (defaults to 0).
   *
   * @param scrollOffset the scroll offset
   */
  public void setScrollOffset(int scrollOffset) {
    this.scrollOffset = scrollOffset;
  }

  @Override
  protected XElement getContainerTarget() {
    return (XElement) getElement().getFirstChildElement();
  }

  @Override
  protected void onRemove(Widget child) {
    super.onRemove(child);
    child.removeStyleName(CommonStyles.get().positionable());
  }

}
TOP

Related Classes of com.sencha.gxt.widget.core.client.container.BoxLayoutContainer$BoxLayoutData

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.