org.gjt.sp.jedit.gui

## Class VariableGridLayout

- java.lang.Object
- - org.gjt.sp.jedit.gui.VariableGridLayout

- All Implemented Interfaces:
    java.awt.LayoutManager, java.awt.LayoutManager2, java.io.Serializable

      public class VariableGridLayout
      extends java.lang.Object
      implements java.awt.LayoutManager2, java.io.Serializable

  A rectangular grid layout manager with variable cell sizes The container is divided into rectangles, and one component is placed in each rectangle. Each row is as large as the largest component in that row, and each column is as wide as the widest component in that column.

  This behavior is basically the same as in `java.awt.GridLayout`, but with different row heights and column widths for each row/column.

  For example, the following is an applet that lays out six buttons into three rows and two columns:

  >      import java.awt.*;
  >      import java.applet.Applet;
  >      public class ButtonGrid extends Applet {
  >          public void init() {
  >              setLayout(new VariableGridLayout(VariableGridLayout.FIXED_NUM_COLUMNS, 2));
  >              add(new Button("1"));
  >              add(new Button("2"));
  >              add(new Button("3"));
  >              add(new Button("4"));
  >              add(new Button("5"));
  >              add(new Button("6"));
  >          }
  >      }

  Programmer's remark: VariableGridLayout could be faster, if it would reside in the package java.awt, because then it could access some package private fields of `Container` or `Component`. Instead, it has to call `Component.getSize()`, which allocates memory on the heap.

  Todo:

  - Ability to span components over more than one cell horizontally and vertically.
  See Also:
    `GridLayout`, Serialized Form

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `static int` | `FIXED_NUM_COLUMNS`
    `static int` | `FIXED_NUM_ROWS`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `VariableGridLayout()` Creates a variable grid layout manager with mode FIXED_NUM_ROWS, number of rows == 1, zero horizontal and vertical gap, and zero distance to borders.
    `VariableGridLayout(int mode, int size)` Creates a variable grid layout manager with the specified mode and size, zero horizontal and vertical gap, and zero distance to borders.
    `VariableGridLayout(int mode, int size, int hgap, int vgap)` Creates a variable grid layout manager with the specified mode, size, horizontal and vertical gap, and zero distance to borders.
    `VariableGridLayout(int mode, int size, int hgap, int vgap, boolean takeSizesIntoAccount)` Creates a variable grid layout manager with the specified mode, size, horizontal and vertical gap, eventually taking minimum and maximum sizes into account when distributing free space, depending on takeSizesIntoAccount and zero distance to borders.
    `VariableGridLayout(int mode, int size, int hgap, int vgap, boolean takeSizesIntoAccount, java.awt.Insets distanceToBorders)` Creates a variable grid layout manager with the specified mode, size, horizontal and vertical gap, eventually taking minimum and maximum sizes into account when distributing free space, depending on takeSizesIntoAccount and the specified distance to the borders.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `addLayoutComponent(java.awt.Component component, java.lang.Object constraints)` Not used in this class.
    `void` | `addLayoutComponent(java.lang.String name, java.awt.Component component)` Not used in this class.
    `float` | `getLayoutAlignmentX(java.awt.Container container)` Always returns 0.5.
    `float` | `getLayoutAlignmentY(java.awt.Container container)` Always returns 0.5.
    `void` | `invalidateLayout(java.awt.Container container)`
    `void` | `layoutContainer(java.awt.Container parent)`
    `java.awt.Dimension` | `maximumLayoutSize(java.awt.Container parent)`
    `java.awt.Dimension` | `minimumLayoutSize(java.awt.Container parent)`
    `java.awt.Dimension` | `preferredLayoutSize(java.awt.Container parent)`
    `void` | `removeLayoutComponent(java.awt.Component component)` Not used in this class.
    `java.lang.String` | `toString()` Returns the string representation of this variable grid layout's values.

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

- - ### Field Detail

    - #### FIXED_NUM_ROWS

          public static final int FIXED_NUM_ROWS

      See Also:
        Constant Field Values

    - #### FIXED_NUM_COLUMNS

          public static final int FIXED_NUM_COLUMNS

      See Also:
        Constant Field Values

  - ### Constructor Detail

    - #### VariableGridLayout

          public VariableGridLayout(int mode,
                            int size,
                            int hgap,
                            int vgap,
                            boolean takeSizesIntoAccount,
                            java.awt.Insets distanceToBorders)

      Creates a variable grid layout manager with the specified mode, size, horizontal and vertical gap, eventually taking minimum and maximum sizes into account when distributing free space, depending on takeSizesIntoAccount and the specified distance to the borders.
      Parameters:
        `mode` - The mode in which to operate. Either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS
        `size` - The amount of rows for mode FIXED_NUM_ROWS or the amount of columns for mode FIXED_NUM_COLUMNS (>0)
        `hgap` - The horizontal space between cells (>=0)
        `vgap` - The vertical space between cells (>=0)
        `takeSizesIntoAccount` - Whether to take minimum and maximum sizes into account when distributing free space Javier Diaz Soto (jbds) warns in #2997417 that this may cause gui freeze and provides a patch
        `distanceToBorders` - The distances to the borders
      Throws:
        `java.lang.IllegalArgumentException` - if mode is not either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS or size is <= 0 or hgap or vgap is < 0

    - #### VariableGridLayout

          public VariableGridLayout(int mode,
                            int size,
                            int hgap,
                            int vgap,
                            boolean takeSizesIntoAccount)

      Creates a variable grid layout manager with the specified mode, size, horizontal and vertical gap, eventually taking minimum and maximum sizes into account when distributing free space, depending on takeSizesIntoAccount and zero distance to borders.
      Parameters:
        `mode` - The mode in which to operate. Either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS
        `size` - The amount of rows for mode FIXED_NUM_ROWS or the amount of columns for mode FIXED_NUM_COLUMNS (>0)
        `hgap` - The horizontal space between cells (>=0)
        `vgap` - The vertical space between cells (>=0)
        `takeSizesIntoAccount` - Whether to take minimum and maximum sizes into account when distributing free space Javier Diaz Soto (jbds) warns in #2997417 that this may cause gui freeze and provides a patch
      Throws:
        `java.lang.IllegalArgumentException` - if mode is not either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS or size is <= 0 or hgap or vgap is < 0

    - #### VariableGridLayout

          public VariableGridLayout(int mode,
                            int size,
                            int hgap,
                            int vgap)

      Creates a variable grid layout manager with the specified mode, size, horizontal and vertical gap, and zero distance to borders. The minimum and maximum Component sizes are not taken into account when distributing free space.
      Parameters:
        `mode` - The mode in which to operate. Either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS
        `size` - The amount of rows for mode FIXED_NUM_ROWS or the amount of columns for mode FIXED_NUM_COLUMNS
        `hgap` - The horizontal space between cells
        `vgap` - The vertical space between cells
      Throws:
        `java.lang.IllegalArgumentException` - if mode is not either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS or size is <= 0 or hgap or vgap is < 0

    - #### VariableGridLayout

          public VariableGridLayout(int mode,
                            int size)

      Creates a variable grid layout manager with the specified mode and size, zero horizontal and vertical gap, and zero distance to borders. Does not take minimum and maximum Component sizes into account when distributing free space.
      Parameters:
        `mode` - The mode in which to operate. Either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS
        `size` - The amount of rows for mode FIXED_NUM_ROWS or the amount of columns for mode FIXED_NUM_COLUMNS
      Throws:
        `java.lang.IllegalArgumentException` - if mode is not either FIXED_NUM_ROWS or FIXED_NUM_COLUMNS or size is <= 0

    - #### VariableGridLayout

          public VariableGridLayout()

      Creates a variable grid layout manager with mode FIXED_NUM_ROWS, number of rows == 1, zero horizontal and vertical gap, and zero distance to borders. Does not take minimum and maximum Component sizes into account when distributing free space.

  - ### Method Detail

    - #### addLayoutComponent

          public void addLayoutComponent(java.lang.String name,
                                java.awt.Component component)

      Not used in this class.
      Specified by:
        `addLayoutComponent` in interface `java.awt.LayoutManager`

    - #### addLayoutComponent

          public void addLayoutComponent(java.awt.Component component,
                                java.lang.Object constraints)

      Not used in this class.
      Specified by:
        `addLayoutComponent` in interface `java.awt.LayoutManager2`

    - #### removeLayoutComponent

          public void removeLayoutComponent(java.awt.Component component)

      Not used in this class.
      Specified by:
        `removeLayoutComponent` in interface `java.awt.LayoutManager`

    - #### getLayoutAlignmentX

          public float getLayoutAlignmentX(java.awt.Container container)

      Always returns 0.5.
      Specified by:
        `getLayoutAlignmentX` in interface `java.awt.LayoutManager2`

    - #### getLayoutAlignmentY

          public float getLayoutAlignmentY(java.awt.Container container)

      Always returns 0.5.
      Specified by:
        `getLayoutAlignmentY` in interface `java.awt.LayoutManager2`

    - #### preferredLayoutSize

          public java.awt.Dimension preferredLayoutSize(java.awt.Container parent)

      Specified by:
        `preferredLayoutSize` in interface `java.awt.LayoutManager`

    - #### minimumLayoutSize

          public java.awt.Dimension minimumLayoutSize(java.awt.Container parent)

      Specified by:
        `minimumLayoutSize` in interface `java.awt.LayoutManager`

    - #### maximumLayoutSize

          public java.awt.Dimension maximumLayoutSize(java.awt.Container parent)

      Specified by:
        `maximumLayoutSize` in interface `java.awt.LayoutManager2`

    - #### layoutContainer

          public void layoutContainer(java.awt.Container parent)

      Specified by:
        `layoutContainer` in interface `java.awt.LayoutManager`

    - #### invalidateLayout

          public void invalidateLayout(java.awt.Container container)

      Specified by:
        `invalidateLayout` in interface `java.awt.LayoutManager2`

    - #### toString

          public java.lang.String toString()

      Returns the string representation of this variable grid layout's values.
      Overrides:
        `toString` in class `java.lang.Object`
      Returns:
        a string representation of this variable grid layout.