001: /*
002: * Copyright (c) 2002-2007 JGoodies Karsten Lentzsch. All Rights Reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without
005: * modification, are permitted provided that the following conditions are met:
006: *
007: * o Redistributions of source code must retain the above copyright notice,
008: * this list of conditions and the following disclaimer.
009: *
010: * o Redistributions in binary form must reproduce the above copyright notice,
011: * this list of conditions and the following disclaimer in the documentation
012: * and/or other materials provided with the distribution.
013: *
014: * o Neither the name of JGoodies Karsten Lentzsch nor the names of
015: * its contributors may be used to endorse or promote products derived
016: * from this software without specific prior written permission.
017: *
018: * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
019: * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
020: * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
021: * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
022: * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
023: * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
024: * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
025: * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
026: * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
027: * OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE,
028: * EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
029: */
030:
031: package com.jgoodies.forms.layout;
032:
033: import java.util.StringTokenizer;
034:
035: /**
036: * Specifies columns in FormLayout by their default orientation,
037: * start size and resizing behavior.<p>
038: *
039: * <strong>Examples:</strong><br>
040: * The following examples specify a column with FILL alignment, a size of
041: * 10 dlu that won't grow.
042: * <pre>
043: * new ColumnSpec(Sizes.dluX(10));
044: * new ColumnSpec(ColumnSpec.FILL, Sizes.dluX(10), 0.0);
045: * new ColumnSpec(ColumnSpec.FILL, Sizes.dluX(10), ColumnSpec.NO_GROW);
046: * new ColumnSpec("10dlu");
047: * new ColumnSpec("10dlu:0");
048: * new ColumnSpec("fill:10dlu:0");
049: * </pre><p>
050: *
051: * The {@link com.jgoodies.forms.factories.FormFactory} provides
052: * predefined frequently used ColumnSpec instances.
053: *
054: * @author Karsten Lentzsch
055: * @version $Revision: 1.2 $
056: *
057: * @see com.jgoodies.forms.factories.FormFactory
058: */
059:
060: public final class ColumnSpec extends FormSpec {
061:
062: // Horizontal Orientations *********************************************
063:
064: /**
065: * By default put components in the left.
066: */
067: public static final DefaultAlignment LEFT = FormSpec.LEFT_ALIGN;
068:
069: /**
070: * By default put the components in the center.
071: */
072: public static final DefaultAlignment CENTER = FormSpec.CENTER_ALIGN;
073:
074: /**
075: * By default put components in the middle.
076: */
077: public static final DefaultAlignment MIDDLE = CENTER;
078:
079: /**
080: * By default put components in the right.
081: */
082: public static final DefaultAlignment RIGHT = FormSpec.RIGHT_ALIGN;
083:
084: /**
085: * By default fill the component into the column.
086: */
087: public static final DefaultAlignment FILL = FormSpec.FILL_ALIGN;
088:
089: /**
090: * Unless overridden the default alignment for a column is FILL.
091: */
092: public static final DefaultAlignment DEFAULT = FILL;
093:
094: // Instance Creation ****************************************************
095:
096: /**
097: * Constructs a ColumnSpec for the given default alignment,
098: * size and resize weight.<p>
099: *
100: * The resize weight must be a non-negative double; you can use
101: * <code>NO_GROW</code> as a convenience value for no resize.
102: *
103: * @param defaultAlignment the column's default alignment
104: * @param size constant, component size or bounded size
105: * @param resizeWeight the column's non-negative resize weight
106: * @throws IllegalArgumentException if the size is invalid or
107: * the resize weight is negative
108: */
109: public ColumnSpec(DefaultAlignment defaultAlignment, Size size,
110: double resizeWeight) {
111: super (defaultAlignment, size, resizeWeight);
112: }
113:
114: /**
115: * Constructs a ColumnSpec for the given size using the
116: * default alignment, and no resizing.
117: *
118: * @param size constant size, component size, or bounded size
119: * @throws IllegalArgumentException if the size is invalid
120: */
121: public ColumnSpec(Size size) {
122: super (DEFAULT, size, NO_GROW);
123: }
124:
125: /**
126: * Constructs a ColumnSpec from the specified encoded description.
127: * The description will be parsed to set initial values.
128: *
129: * @param encodedDescription the encoded description
130: */
131: public ColumnSpec(String encodedDescription) {
132: super (DEFAULT, encodedDescription);
133: }
134:
135: // Implementing Abstract Behavior ***************************************
136:
137: /**
138: * Returns if this is a horizontal specification (vs. vertical).
139: * Used to distinct between horizontal and vertical dialog units,
140: * which have different conversion factors.
141: *
142: * @return always true (for horizontal)
143: */
144: protected final boolean isHorizontal() {
145: return true;
146: }
147:
148: // Parsing and Decoding of Column Descriptions **************************
149:
150: /**
151: * Parses and splits encoded column specifications and returns
152: * an array of ColumnSpec objects.
153: *
154: * @param encodedColumnSpecs comma separated encoded column specifications
155: * @return an array of decoded column specifications
156: * @throws NullPointerException if the encoded column specifications string
157: * is <code>null</code>
158: *
159: * @see ColumnSpec#ColumnSpec(String)
160: */
161: public static ColumnSpec[] decodeSpecs(String encodedColumnSpecs) {
162: if (encodedColumnSpecs == null)
163: throw new NullPointerException(
164: "The column specification must not be null.");
165:
166: StringTokenizer tokenizer = new StringTokenizer(
167: encodedColumnSpecs, ", ");
168: int columnCount = tokenizer.countTokens();
169: ColumnSpec[] columnSpecs = new ColumnSpec[columnCount];
170: for (int i = 0; i < columnCount; i++) {
171: columnSpecs[i] = new ColumnSpec(tokenizer.nextToken());
172: }
173: return columnSpecs;
174: }
175:
176: }
|