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.Color;
033: import java.awt.Component;
034: import java.io.IOException;
035:
036: import javax.swing.border.Border;
037: import javax.swing.border.EtchedBorder;
038:
039: import com.jeta.forms.store.JETAObjectInput;
040: import com.jeta.forms.store.JETAObjectOutput;
041:
042: /**
043: * A set of attributes that define an <code>EtchedBorder</code>. See:
044: * {@link javax.swing.EtchedBorder}
045: *
046: * @author Jeff Tassin
047: */
048: public class EtchedBorderProperty extends BorderProperty {
049: static final long serialVersionUID = -8742021440405641715L;
050:
051: /**
052: * The version for this class.
053: */
054: public static final int VERSION = 2;
055:
056: /**
057: * The type of etch: EtchedBorder.RAISED, LOWERED
058: */
059: private int m_type;
060:
061: /**
062: * The highlight color for the border.
063: */
064: private ColorProperty m_highlightColor = new ColorProperty(
065: ColorProperty.DEFAULT_COLOR);
066:
067: /**
068: * The shadow color for the border.
069: */
070: private ColorProperty m_shadowColor = new ColorProperty(
071: ColorProperty.DEFAULT_COLOR);
072:
073: /**
074: * Creates a raised <code>EtchedBorderProperty</code> with default colors.
075: */
076: public EtchedBorderProperty() {
077: setBorder(new EtchedBorder(EtchedBorder.RAISED));
078: }
079:
080: /**
081: * Creates an <code>EtchedBorderProperty</code> with the specified etch
082: * type.
083: *
084: * @param etchType
085: * the etch type for the border. Either: EtchedBorder.RAISED or
086: * LOWERED.
087: */
088: public EtchedBorderProperty(int etchType) {
089: setBorder(new EtchedBorder(etchType));
090: }
091:
092: /**
093: * BorderProperty implementation. Creates an <code>EtchedBorder</code>
094: * instance with the attributes specified by this property.
095: *
096: * @return an EtchedBorder instance.
097: */
098: public Border createBorder(Component comp) {
099:
100: Color h = null;
101: Color s = null;
102:
103: ColorProperty cprop = getHighlightColorProperty();
104: if (!cprop.getColorKey().equals(ColorProperty.DEFAULT_COLOR)
105: && cprop.getColor() != null) {
106: /**
107: * a color proxy is a Color that can change depending on the current
108: * look and feel
109: */
110: h = new ColorProxy(cprop);
111: }
112:
113: cprop = getShadowColorProperty();
114: if (!cprop.getColorKey().equals(ColorProperty.DEFAULT_COLOR)
115: && cprop.getColor() != null) {
116: s = new ColorProxy(cprop);
117: }
118:
119: Border b = new EtchedBorder(getEtchType(), h, s);
120: return createTitle(b);
121: }
122:
123: /**
124: * Returns the type of etched border: EtchedBorder.RAISED, LOWERED
125: *
126: * @return the etch type
127: */
128: public int getEtchType() {
129: return m_type;
130: }
131:
132: /**
133: * Returns the border highlight color
134: */
135: public Color getHighlightColor() {
136: return m_highlightColor.getColor();
137: }
138:
139: /**
140: * Returns the border shadow color
141: */
142: public Color getShadowColor() {
143: return m_shadowColor.getColor();
144: }
145:
146: /**
147: * Returns the border highlight color property
148: */
149: public ColorProperty getHighlightColorProperty() {
150: return m_highlightColor;
151: }
152:
153: /**
154: * Returns the border shadow color property
155: */
156: public ColorProperty getShadowColorProperty() {
157: return m_shadowColor;
158: }
159:
160: /**
161: * Sets the attributes of this property to that of the specified
162: * EtchedBorder.
163: *
164: * @param bb
165: * the etched border whose attributes to get.
166: */
167: public void setBorder(EtchedBorder bb) {
168: m_type = bb.getEtchType();
169: }
170:
171: /**
172: * Sets the type of etched border: EtchedBorder.RAISED, LOWERED
173: *
174: * @param type
175: * the etch type
176: */
177: public void setEtchType(int type) {
178: m_type = type;
179: }
180:
181: /**
182: * Sets the border highlight color property
183: */
184: public void setHighlightColorProperty(ColorProperty c) {
185: m_highlightColor = c;
186: }
187:
188: /**
189: * Sets the border shadown color property
190: */
191: public void setShadowColorProperty(ColorProperty c) {
192: m_shadowColor = c;
193: }
194:
195: /**
196: * Sets this property to that of another EtchedBorderProperty.
197: *
198: * @param prop
199: * an EtchedBorderProperty instance.
200: */
201: public void setValue(Object prop) {
202: super .setValue(prop);
203: if (prop instanceof EtchedBorderProperty) {
204: EtchedBorderProperty bp = (EtchedBorderProperty) prop;
205: m_type = bp.m_type;
206: m_highlightColor = bp.m_highlightColor;
207: m_shadowColor = bp.m_shadowColor;
208: } else {
209: assert (false);
210: }
211: }
212:
213: /**
214: * JETAPersistable Implementation
215: */
216: public void read(JETAObjectInput in) throws ClassNotFoundException,
217: IOException {
218: super .read(in.getSuperClassInput());
219: int version = in.readVersion();
220: m_type = in.readInt("type");
221: if (version == 1) {
222: m_highlightColor.setConstantColor((Color) in
223: .readObject("highlightclor"));
224: m_shadowColor.setConstantColor((Color) in
225: .readObject("shadowcolor"));
226: } else {
227: m_highlightColor.setValue((ColorProperty) in
228: .readObject("highlightcolor"));
229: m_shadowColor.setValue((ColorProperty) in
230: .readObject("shadowcolor"));
231: }
232: }
233:
234: /**
235: * JETAPersistable Implementation
236: */
237: public void write(JETAObjectOutput out) throws IOException {
238: super .write(out.getSuperClassOutput(BorderProperty.class));
239: out.writeVersion(VERSION);
240: out.writeInt("type", m_type);
241: out.writeObject("highlightcolor", m_highlightColor);
242: out.writeObject("shadowcolor", m_shadowColor);
243: }
244:
245: public String toString() {
246: return "ETCHED";
247: }
248: }
|