[6380] | 1 | // License: GPL. For details, see LICENSE file.
|
---|
[71] | 2 | package org.openstreetmap.josm.tools;
|
---|
[6] | 3 |
|
---|
| 4 | import java.awt.Component;
|
---|
| 5 | import java.awt.Dimension;
|
---|
| 6 | import java.awt.GridBagConstraints;
|
---|
| 7 | import java.awt.Insets;
|
---|
| 8 |
|
---|
| 9 | import javax.swing.Box;
|
---|
| 10 |
|
---|
| 11 | /**
|
---|
| 12 | * A wrapper for GridBagConstraints which has sane default static creators and
|
---|
| 13 | * member functions to chain calling.
|
---|
[1169] | 14 | *
|
---|
[6] | 15 | * @author imi
|
---|
| 16 | */
|
---|
[6362] | 17 | public final class GBC extends GridBagConstraints {
|
---|
[6] | 18 |
|
---|
[1169] | 19 | /**
|
---|
| 20 | * Use public static creator functions to create an GBC.
|
---|
| 21 | */
|
---|
| 22 | private GBC() {}
|
---|
[117] | 23 |
|
---|
[1169] | 24 | /**
|
---|
| 25 | * Create a standard constraint (which is not the last).
|
---|
| 26 | * @return A standard constraint with no filling.
|
---|
| 27 | */
|
---|
| 28 | public static GBC std() {
|
---|
| 29 | GBC c = new GBC();
|
---|
| 30 | c.anchor = WEST;
|
---|
| 31 | return c;
|
---|
| 32 | }
|
---|
[117] | 33 |
|
---|
[1169] | 34 | /**
|
---|
| 35 | * Create the constraint for the last elements on a line.
|
---|
| 36 | * @return A constraint which indicates the last item on a line.
|
---|
| 37 | */
|
---|
| 38 | public static GBC eol() {
|
---|
| 39 | GBC c = std();
|
---|
| 40 | c.gridwidth = REMAINDER;
|
---|
| 41 | return c;
|
---|
| 42 | }
|
---|
[117] | 43 |
|
---|
[1169] | 44 | /**
|
---|
| 45 | * Create the constraint for the last elements on a line and on a paragraph.
|
---|
| 46 | * This is merely a shortcut for eol().insets(0,0,0,10)
|
---|
| 47 | * @return A constraint which indicates the last item on a line.
|
---|
| 48 | */
|
---|
| 49 | public static GBC eop() {
|
---|
| 50 | return eol().insets(0,0,0,10);
|
---|
| 51 | }
|
---|
[16] | 52 |
|
---|
[1169] | 53 | /**
|
---|
| 54 | * Try to fill both, horizontal and vertical
|
---|
| 55 | * @return This constraint for chaining.
|
---|
| 56 | */
|
---|
| 57 | public GBC fill() {
|
---|
| 58 | return fill(BOTH);
|
---|
| 59 | }
|
---|
[6] | 60 |
|
---|
[1169] | 61 | /**
|
---|
| 62 | * Set fill to the given value
|
---|
| 63 | * @param value The filling value, either NONE, HORIZONTAL, VERTICAL or BOTH
|
---|
| 64 | * @return This constraint for chaining.
|
---|
| 65 | */
|
---|
| 66 | public GBC fill(int value) {
|
---|
| 67 | fill = value;
|
---|
| 68 | if (value == HORIZONTAL || value == BOTH)
|
---|
| 69 | weightx = 1.0;
|
---|
| 70 | if (value == VERTICAL || value == BOTH)
|
---|
| 71 | weighty = 1.0;
|
---|
| 72 | return this;
|
---|
| 73 | }
|
---|
[117] | 74 |
|
---|
[1169] | 75 | /**
|
---|
| 76 | * Set the anchor of this GBC to a.
|
---|
| 77 | * @param a The new anchor, e.g. GBC.CENTER or GBC.EAST.
|
---|
| 78 | * @return This constraint for chaining.
|
---|
| 79 | */
|
---|
| 80 | public GBC anchor(int a) {
|
---|
| 81 | anchor = a;
|
---|
| 82 | return this;
|
---|
| 83 | }
|
---|
[6] | 84 |
|
---|
[1169] | 85 | /**
|
---|
| 86 | * Adds insets to this GBC.
|
---|
| 87 | * @param left The left space of the insets
|
---|
| 88 | * @param top The top space of the insets
|
---|
| 89 | * @param right The right space of the insets
|
---|
| 90 | * @param bottom The bottom space of the insets
|
---|
| 91 | * @return This constraint for chaining.
|
---|
| 92 | */
|
---|
| 93 | public GBC insets(int left, int top, int right, int bottom) {
|
---|
| 94 | insets = new Insets(top, left, bottom, right);
|
---|
| 95 | return this;
|
---|
| 96 | }
|
---|
[117] | 97 |
|
---|
[1169] | 98 | /**
|
---|
[3057] | 99 | * Specifies how to distribute extra horizontal space.
|
---|
[5275] | 100 | * @param weightx Weight in horizontal direction
|
---|
[3057] | 101 | * @param weighty Weight in vertical direction
|
---|
| 102 | * @return This constraint for chaining.
|
---|
| 103 | */
|
---|
[3338] | 104 | public GBC weight(double weightx, double weighty) {
|
---|
[3057] | 105 | this.weightx = weightx;
|
---|
| 106 | this.weighty = weighty;
|
---|
| 107 | return this;
|
---|
| 108 | }
|
---|
| 109 |
|
---|
| 110 | /**
|
---|
[1169] | 111 | * This is a helper to easily create a glue with a minimum default value.
|
---|
| 112 | * @param x If higher than 0, this will be a horizontal glue with x as minimum
|
---|
| 113 | * horizontal strut.
|
---|
| 114 | * @param y If higher than 0, this will be a vertical glue with y as minimum
|
---|
| 115 | * vertical strut.
|
---|
[5275] | 116 | * @return the glue component
|
---|
[1169] | 117 | */
|
---|
| 118 | public static Component glue(int x, int y) {
|
---|
| 119 | short maxx = x > 0 ? Short.MAX_VALUE : 0;
|
---|
| 120 | short maxy = y > 0 ? Short.MAX_VALUE : 0;
|
---|
| 121 | return new Box.Filler(new Dimension(x,y), new Dimension(x,y), new Dimension(maxx,maxy));
|
---|
| 122 | }
|
---|
[3894] | 123 |
|
---|
| 124 | public GBC grid(int x, int y) {
|
---|
| 125 | gridx = x;
|
---|
| 126 | gridy = y;
|
---|
| 127 | return this;
|
---|
| 128 | }
|
---|
| 129 |
|
---|
| 130 | public GBC span(int width, int height) {
|
---|
| 131 | gridwidth = width;
|
---|
| 132 | gridheight = height;
|
---|
| 133 | return this;
|
---|
| 134 | }
|
---|
| 135 |
|
---|
| 136 | public GBC span(int width) {
|
---|
| 137 | gridwidth = width;
|
---|
| 138 | return this;
|
---|
| 139 | }
|
---|
| 140 |
|
---|
| 141 | public static GBC std(int x, int y) {
|
---|
| 142 | GBC c = new GBC();
|
---|
| 143 | c.anchor = WEST;
|
---|
| 144 | c.gridx = x;
|
---|
| 145 | c.gridy = y;
|
---|
| 146 | return c;
|
---|
| 147 | }
|
---|
| 148 |
|
---|
[6] | 149 | }
|
---|