001: /*
002: * Copyright (c) 2004 JETA Software, Inc. All rights reserved.
003: *
004: * Redistribution and use in source and binary forms, with or without modification,
005: * 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 JETA Software nor the names of its contributors may
015: * be used to endorse or promote products derived from this software without
016: * 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, THE
020: * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
021: * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR
022: * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
023: * INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
024: * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
025: * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
026: * INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
027: * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
028: */
029:
030: package com.jeta.forms.store.properties;
031:
032: import java.awt.Component;
033: import java.io.IOException;
034:
035: import javax.swing.border.Border;
036:
037: import com.jeta.forms.components.border.ShadowBorder;
038: import com.jeta.forms.store.JETAObjectInput;
039: import com.jeta.forms.store.JETAObjectOutput;
040:
041: /**
042: * A <code>ShadowBorderProperty</code> defines the attributes needed to define
043: * a shadow border for a component. The Swing library does not define a shadow
044: * border, so one is defined in the forms code. See:
045: * {@link com.jeta.forms.components.border.ShadowBorder}
046: *
047: * @author Jeff Tassin
048: */
049: public class ShadowBorderProperty extends BorderProperty {
050: static final long serialVersionUID = -1317321607073605569L;
051:
052: /**
053: * The version for this class.
054: */
055: public static final int VERSION = 2;
056:
057: public static final int SOLID = 0;
058:
059: public static final int GRADIENT = 1;
060:
061: /**
062: * The type of border SOLID or GRADIENT
063: */
064: private int m_type = SOLID;
065:
066: /**
067: * The start color for a gradient or the background color for a solid
068: */
069: private ColorProperty m_start_color = new ColorProperty();
070:
071: /**
072: * The end color for a gradient. Ignored if a solid color
073: */
074: private ColorProperty m_end_color = new ColorProperty();
075:
076: /**
077: * The thickness for the border
078: */
079: private int m_thickness = 1;
080:
081: /**
082: * Flag that indicates if the border takes up the same space on the top/left
083: * as the bottom/right. If set to false, the border has zero padding on the
084: * top and left sides.
085: */
086: private boolean m_symmetric = true;
087:
088: /**
089: * Creates an unitialized <code>ShadowBorderProperty</code>
090: */
091: public ShadowBorderProperty() {
092: }
093:
094: /**
095: * Creates a <code>ShadowBorderProperty</code> with the specified type,
096: * thickness and colors.
097: *
098: * @param type
099: * the type of shadow: SOLID or GRADIENT
100: * @param thickness
101: * the thickness of the border
102: * @param startColor
103: * the start color
104: * @param endColor
105: * the end color
106: * @param symmetric
107: * flag that indicates if the border is symmetric.
108: */
109: public ShadowBorderProperty(int type, int thickness,
110: ColorProperty startColor, ColorProperty endColor,
111: boolean symmetric) {
112: m_type = type;
113: m_thickness = thickness;
114: m_start_color = startColor;
115: m_end_color = endColor;
116: m_symmetric = symmetric;
117: }
118:
119: /**
120: * BorderProperty implementation. Creates a ShadowBorder instance with the
121: * attributes of this object.
122: *
123: * @return a border instance that can be applied to any Swing component.
124: */
125: public Border createBorder(Component comp) {
126: Border b = new ShadowBorder(getType(), getThickness(),
127: getStartColor(), getEndColor(), isSymmetric());
128: return b;
129: }
130:
131: /**
132: * Returns the type of shadow: SOLID or GRADIENT
133: *
134: * @return the type of shadow.
135: */
136: public int getType() {
137: return m_type;
138: }
139:
140: /**
141: * Returns the start color property for the border
142: *
143: * @return the start color property
144: */
145: public ColorProperty getStartColor() {
146: return m_start_color;
147: }
148:
149: /**
150: * Returns the end color property for the border
151: *
152: * @return the end color property
153: */
154: public ColorProperty getEndColor() {
155: return m_end_color;
156: }
157:
158: /**
159: * Returns the thickness of the border.
160: *
161: * @return the border thickness.
162: */
163: public int getThickness() {
164: return m_thickness;
165: }
166:
167: /**
168: * Returns the flag that indicates if the border takes up the same space on
169: * the top/left as the bottom/right. If false, the border has zero padding
170: * on the top and left sides.
171: *
172: * @return the symmetric flag for this border.
173: */
174: public boolean isSymmetric() {
175: return m_symmetric;
176: }
177:
178: /**
179: * Sets the type of shadow for this border. Either SOLID or GRADIENT.
180: *
181: * @param type
182: * the type of shadow
183: */
184: public void setType(int type) {
185: m_type = type;
186: }
187:
188: /**
189: * Sets the start color for the border.
190: *
191: * @param c
192: * the start color for the border
193: */
194: public void setStartColor(ColorProperty c) {
195: m_start_color = c;
196: }
197:
198: /**
199: * Sets the end color for the border. This only has an effect for GRADIENT
200: * shadows.
201: *
202: * @param c
203: * the end color for the border.
204: */
205: public void setEndColor(ColorProperty c) {
206: m_end_color = c;
207: }
208:
209: /**
210: * Sets the flag that controls the border symmetry.
211: *
212: * @param symmetric
213: * if true the border will have equal padding on the top/bottom
214: * and left/right
215: */
216: public void setSymmetric(boolean symmetric) {
217: m_symmetric = symmetric;
218: }
219:
220: /**
221: * Sets the border thickness
222: *
223: * @param t
224: * the border thickness
225: */
226: public void setThickness(int t) {
227: m_thickness = t;
228: }
229:
230: /**
231: * Sets this property to that of another ShadowBorderProperty
232: *
233: * @param prop
234: * a ShadowBorderProperty instance.
235: */
236: public void setValue(Object prop) {
237: super .setValue(prop);
238: if (prop instanceof ShadowBorderProperty) {
239: ShadowBorderProperty bp = (ShadowBorderProperty) prop;
240: m_type = bp.m_type;
241: if (m_start_color == null)
242: m_start_color = new ColorProperty();
243: if (m_end_color == null)
244: m_end_color = new ColorProperty();
245:
246: m_start_color.setValue(bp.m_start_color);
247: m_end_color.setValue(bp.m_end_color);
248: m_thickness = bp.m_thickness;
249: m_symmetric = bp.m_symmetric;
250: } else {
251: assert (false);
252: }
253: }
254:
255: /**
256: * JETAPersistable Implementation
257: */
258: public void read(JETAObjectInput in) throws ClassNotFoundException,
259: IOException {
260: super .read(in.getSuperClassInput());
261:
262: int version = in.readVersion();
263: m_type = in.readInt("type");
264: m_start_color = (ColorProperty) in.readObject("startcolor");
265: m_end_color = (ColorProperty) in.readObject("endcolor");
266: m_thickness = in.readInt("thickness");
267: if (version > 1)
268: m_symmetric = in.readBoolean("symmetric");
269: }
270:
271: /**
272: * JETAPersistable Implementation
273: */
274: public void write(JETAObjectOutput out) throws IOException {
275: super .write(out.getSuperClassOutput(BorderProperty.class));
276: out.writeVersion(VERSION);
277: out.writeInt("type", m_type);
278: out.writeObject("startcolor", m_start_color);
279: out.writeObject("endcolor", m_end_color);
280: out.writeInt("thickness", m_thickness);
281: out.writeBoolean("symmetric", m_symmetric);
282: }
283:
284: public String toString() {
285: return "SHADOW";
286: }
287: }
|