source: josm/trunk/src/org/openstreetmap/josm/tools/GBC.java@ 7100

Last change on this file since 7100 was 6380, checked in by Don-vip, 10 years ago

update license/copyright information

  • Property svn:eol-style set to native
File size: 4.0 KB
Line 
1// License: GPL. For details, see LICENSE file.
2package org.openstreetmap.josm.tools;
3
4import java.awt.Component;
5import java.awt.Dimension;
6import java.awt.GridBagConstraints;
7import java.awt.Insets;
8
9import javax.swing.Box;
10
11/**
12 * A wrapper for GridBagConstraints which has sane default static creators and
13 * member functions to chain calling.
14 *
15 * @author imi
16 */
17public final class GBC extends GridBagConstraints {
18
19 /**
20 * Use public static creator functions to create an GBC.
21 */
22 private GBC() {}
23
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 }
33
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 }
43
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 }
52
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 }
60
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 }
74
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 }
84
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 }
97
98 /**
99 * 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}
Note: See TracBrowser for help on using the repository browser.