// License: GPL. For details, see LICENSE file. package org.openstreetmap.josm.tools; import java.awt.Component; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.Insets; import javax.swing.Box; /** * A wrapper for GridBagConstraints which has sane default static creators and * member functions to chain calling. * * @author imi */ public final class GBC extends GridBagConstraints { /** * Use public static creator functions to create an GBC. */ private GBC() {} /** * Create a standard constraint (which is not the last). * @return A standard constraint with no filling. */ public static GBC std() { GBC c = new GBC(); c.anchor = WEST; return c; } /** * Create the constraint for the last elements on a line. * @return A constraint which indicates the last item on a line. */ public static GBC eol() { GBC c = std(); c.gridwidth = REMAINDER; return c; } /** * Create the constraint for the last elements on a line and on a paragraph. * This is merely a shortcut for eol().insets(0,0,0,10) * @return A constraint which indicates the last item on a line. */ public static GBC eop() { return eol().insets(0, 0, 0, 10); } /** * Try to fill both, horizontal and vertical * @return This constraint for chaining. */ public GBC fill() { return fill(BOTH); } /** * Set fill to the given value * @param value The filling value, either NONE, HORIZONTAL, VERTICAL or BOTH * @return This constraint for chaining. */ public GBC fill(int value) { fill = value; if (value == HORIZONTAL || value == BOTH) weightx = 1.0; if (value == VERTICAL || value == BOTH) weighty = 1.0; return this; } /** * Set the anchor of this GBC to a. * @param a The new anchor, e.g. GBC.CENTER or GBC.EAST. * @return This constraint for chaining. */ public GBC anchor(int a) { anchor = a; return this; } /** * Adds insets to this GBC. * @param left The left space of the insets * @param top The top space of the insets * @param right The right space of the insets * @param bottom The bottom space of the insets * @return This constraint for chaining. */ public GBC insets(int left, int top, int right, int bottom) { insets = new Insets(top, left, bottom, right); return this; } /** * Adds insets to this GBC. * @param insets The insets in all directions. * @return This constraint for chaining. * @since 10649 */ public GBC insets(int insets) { insets(insets, insets, insets, insets); return this; } /** * Specifies how to distribute extra horizontal space. * @param weightx Weight in horizontal direction * @param weighty Weight in vertical direction * @return This constraint for chaining. */ public GBC weight(double weightx, double weighty) { this.weightx = weightx; this.weighty = weighty; return this; } /** * This is a helper to easily create a glue with a minimum default value. * @param x If higher than 0, this will be a horizontal glue with x as minimum * horizontal strut. * @param y If higher than 0, this will be a vertical glue with y as minimum * vertical strut. * @return the glue component */ public static Component glue(int x, int y) { short maxx = x > 0 ? Short.MAX_VALUE : 0; short maxy = y > 0 ? Short.MAX_VALUE : 0; return new Box.Filler(new Dimension(x, y), new Dimension(x, y), new Dimension(maxx, maxy)); } /** * Sets the constraint's {@code gridx}, {@code gridy}. * @param gridx cell containing the leading edge of the component's display area * @param gridy cell at the top of the component's display area * @return This constraint for chaining. * @see #gridx * @see #gridy */ public GBC grid(int gridx, int gridy) { this.gridx = gridx; this.gridy = gridy; return this; } /** * Sets the constraint's {@code gridwidth}, {@code gridheight}. * @param gridwidth number of cells in a row for the component's display area * @param gridheight number of cells in a column for the component's display area * @return This constraint for chaining. * @see #gridwidth * @see #gridheight */ public GBC span(int gridwidth, int gridheight) { this.gridwidth = gridwidth; this.gridheight = gridheight; return this; } /** * Sets the constraint's {@code gridwidth}. * @param gridwidth number of cells in a row for the component's display area * @return This constraint for chaining. * @see #gridwidth */ public GBC span(int gridwidth) { this.gridwidth = gridwidth; return this; } /** * Create a standard constraint with the {@code gridx}, {@code gridy} set. * * Is equivalent to {@code std().grid(gridx, gridy)} * @param gridx cell containing the leading edge of the component's display area * @param gridy cell at the top of the component's display area * @return A standard constraint. * @see #std() * @see #grid(int, int) * @see #gridx * @see #gridy */ public static GBC std(int gridx, int gridy) { return std().grid(gridx, gridy); } }