001 // License: GPL. Copyright 2007 by Immanuel Scholz and others
002 package org.openstreetmap.josm.tools;
003
004 import java.awt.Component;
005 import java.awt.Dimension;
006 import java.awt.GridBagConstraints;
007 import java.awt.Insets;
008
009 import javax.swing.Box;
010
011 /**
012 * A wrapper for GridBagConstraints which has sane default static creators and
013 * member functions to chain calling.
014 *
015 * @author imi
016 */
017 public class GBC extends GridBagConstraints {
018
019 /**
020 * Use public static creator functions to create an GBC.
021 */
022 private GBC() {}
023
024 /**
025 * Create a standard constraint (which is not the last).
026 * @return A standard constraint with no filling.
027 */
028 public static GBC std() {
029 GBC c = new GBC();
030 c.anchor = WEST;
031 return c;
032 }
033
034 /**
035 * Create the constraint for the last elements on a line.
036 * @return A constraint which indicates the last item on a line.
037 */
038 public static GBC eol() {
039 GBC c = std();
040 c.gridwidth = REMAINDER;
041 return c;
042 }
043
044 /**
045 * Create the constraint for the last elements on a line and on a paragraph.
046 * This is merely a shortcut for eol().insets(0,0,0,10)
047 * @return A constraint which indicates the last item on a line.
048 */
049 public static GBC eop() {
050 return eol().insets(0,0,0,10);
051 }
052
053 /**
054 * Try to fill both, horizontal and vertical
055 * @return This constraint for chaining.
056 */
057 public GBC fill() {
058 return fill(BOTH);
059 }
060
061 /**
062 * Set fill to the given value
063 * @param value The filling value, either NONE, HORIZONTAL, VERTICAL or BOTH
064 * @return This constraint for chaining.
065 */
066 public GBC fill(int value) {
067 fill = value;
068 if (value == HORIZONTAL || value == BOTH)
069 weightx = 1.0;
070 if (value == VERTICAL || value == BOTH)
071 weighty = 1.0;
072 return this;
073 }
074
075 /**
076 * Set the anchor of this GBC to a.
077 * @param a The new anchor, e.g. GBC.CENTER or GBC.EAST.
078 * @return This constraint for chaining.
079 */
080 public GBC anchor(int a) {
081 anchor = a;
082 return this;
083 }
084
085 /**
086 * Adds insets to this GBC.
087 * @param left The left space of the insets
088 * @param top The top space of the insets
089 * @param right The right space of the insets
090 * @param bottom The bottom space of the insets
091 * @return This constraint for chaining.
092 */
093 public GBC insets(int left, int top, int right, int bottom) {
094 insets = new Insets(top, left, bottom, right);
095 return this;
096 }
097
098 /**
099 * Specifies how to distribute extra horizontal space.
100 * @param weightx Weight in horizontal direction
101 * @param weighty Weight in vertical direction
102 * @return This constraint for chaining.
103 */
104 public GBC weight(double weightx, double weighty) {
105 this.weightx = weightx;
106 this.weighty = weighty;
107 return this;
108 }
109
110 /**
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.
116 * @return the glue component
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 }
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
149 }