001: /*
002: * Copyright (c) 2002-2004 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 rows in in {@link FormLayout} by their default orientation, start
037: * size and resizing behavior.
038: * <p>
039: *
040: * <strong>Examples:</strong><br>
041: * The following examples specify a centered row with a size of 14 dlu that
042: * won't grow.
043: *
044: * <pre>
045: * new RowSpec(Sizes.dluX(14));
046: * new RowSpec(RowSpec.CENTER, Sizes.dluX(14), 0.0);
047: * new RowSpec(rowSpec.CENTER, Sizes.dluX(14), RowSpec.NO_GROW);
048: * new RowSpec("14dlu");
049: * new RowSpec("14dlu:0");
050: * new RowSpec("center:14dlu:0");
051: * </pre>
052: *
053: * <p>
054: *
055: * The {@link com.jgoodies.forms.factories.FormFactory} provides predefined
056: * frequently used <code>RowSpec</code> instances.
057: *
058: * @author Karsten Lentzsch
059: * @version $Revision: 1.2 $
060: *
061: * @see com.jgoodies.forms.factories.FormFactory
062: */
063:
064: public final class RowSpec extends FormSpec {
065:
066: // Vertical Orientations ************************************************
067:
068: /**
069: * By default put the components in the top.
070: */
071: public static final DefaultAlignment TOP = FormSpec.TOP_ALIGN;
072:
073: /**
074: * By default put the components in the center.
075: */
076: public static final DefaultAlignment CENTER = FormSpec.CENTER_ALIGN;
077:
078: /**
079: * By default put the components in the bottom.
080: */
081: public static final DefaultAlignment BOTTOM = FormSpec.BOTTOM_ALIGN;
082:
083: /**
084: * By default fill the component into the row.
085: */
086: public static final DefaultAlignment FILL = FormSpec.FILL_ALIGN;
087:
088: /**
089: * Unless overridden the default alignment for a row is CENTER.
090: */
091: public static final DefaultAlignment DEFAULT = CENTER;
092:
093: // Instance Creation ****************************************************
094:
095: /**
096: * Constructs a <code>RowSpec</code> from the given default orientation,
097: * size, and resize weight.
098: * <p>
099: * The resize weight must be a non-negative double; you can use
100: * <code>NO_FILL</code> as a convenience value for no resize.
101: *
102: * @param defaultAlignment
103: * the row's default alignment
104: * @param size
105: * the row's size as value with unit
106: * @param resizeWeight
107: * the row's resize weight
108: */
109: public RowSpec(DefaultAlignment defaultAlignment, Size size,
110: double resizeWeight) {
111: super (defaultAlignment, size, resizeWeight);
112: }
113:
114: /**
115: * Constructs a <code>RowSpec</code> for the given size using the default
116: * alignment, and no resizing.
117: *
118: * @param size
119: * constant size, component size, or bounded size
120: * @throws IllegalArgumentException
121: * if the pixel size is invalid or the resize weight is negative
122: */
123: public RowSpec(Size size) {
124: super (DEFAULT, size, NO_GROW);
125: }
126:
127: /**
128: * Constructs a <code>RowSpec</code> from the specified encoded
129: * description. The description will be parsed to set initial values.
130: *
131: * @param encodedDescription
132: * the encoded description
133: */
134: public RowSpec(String encodedDescription) {
135: super (DEFAULT, encodedDescription);
136: }
137:
138: // Implementing Abstract Behavior ***************************************
139:
140: /**
141: * Returns if this is a horizontal specification (vs. vertical). Used to
142: * distinct between horizontal and vertical dialog units, which have
143: * different conversion factors.
144: *
145: * @return true for horizontal, false for vertical
146: */
147: protected final boolean isHorizontal() {
148: return false;
149: }
150:
151: // Parsing and Decoding of Row Descriptions *****************************
152:
153: /**
154: * Parses and splits encoded row specifications and returns an array of
155: * <code>RowSpec</code> objects.
156: *
157: * @param encodedRowSpecs
158: * comma separated encoded row specifications
159: * @return an array of decoded row specifications
160: * @throws NullPointerException
161: * if the encoded row specifications string is <code>null</code>
162: *
163: * @see RowSpec#RowSpec(String)
164: */
165: public static RowSpec[] decodeSpecs(String encodedRowSpecs) {
166: if (encodedRowSpecs == null)
167: throw new NullPointerException(
168: "The row description must not be null.");
169:
170: StringTokenizer tokenizer = new StringTokenizer(
171: encodedRowSpecs, ", ");
172: int rowCount = tokenizer.countTokens();
173: RowSpec[] rowSpecs = new RowSpec[rowCount];
174: for (int i = 0; i < rowCount; i++) {
175: rowSpecs[i] = new RowSpec(tokenizer.nextToken());
176: }
177: return rowSpecs;
178: }
179:
180: }
|