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 }