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.io.IOException;
033:
034: import com.jeta.forms.gui.beans.JETABean;
035: import com.jeta.forms.gui.effects.ImagePainter;
036: import com.jeta.forms.gui.effects.Paintable;
037: import com.jeta.forms.gui.effects.Painter;
038: import com.jeta.forms.store.JETAObjectInput;
039: import com.jeta.forms.store.JETAObjectOutput;
040: import com.jeta.forms.store.properties.effects.PaintSupport;
041: import com.jeta.open.i18n.I18N;
042:
043: /**
044: * An <code>ImageProperty</code> is used to store the settings for rendering
045: * an image as a background for a Paintable object.
046: *
047: * See: {@link com.jeta.forms.gui.effects.ImagePainter}
048: *
049: * @author Jeff Tassin
050: */
051: public class ImageProperty extends IconProperty implements PaintSupport {
052: static final long serialVersionUID = -9049185327280513748L;
053:
054: /** alignment definitions */
055: public static final int LEFT = 0;
056: public static final int CENTER = 1;
057: public static final int RIGHT = 2;
058: public static final int TOP = 3;
059: public static final int BOTTOM = 5;
060:
061: /**
062: * The version of this class.
063: */
064: public static final int VERSION = 1;
065:
066: /**
067: * The horizontal alignment of the image: LEFT, CENTER, RIGHT
068: */
069: private int m_halign;
070:
071: /**
072: * The vertical alignment of the image: TOP, CENTER, BOTTOM
073: */
074: private int m_valign;
075:
076: /**
077: * A cached painter used to render the image.
078: */
079: private transient ImagePainter m_painter;
080:
081: /**
082: * Creates an unitialized <code>ImageProperty</code> instance.
083: */
084: public ImageProperty() {
085:
086: }
087:
088: /**
089: * PaintSupport implementation.
090: */
091: public Painter createPainter() {
092: if (m_painter == null)
093: m_painter = new ImagePainter(this ,
094: getHorizontalAlignment(), getVerticalAlignment());
095:
096: return m_painter;
097: }
098:
099: /**
100: * Returns the horizontal alignment for the image.
101: *
102: * @return the horizontal alignment for the image (LEFT,CENTER,RIGHT)
103: */
104: public int getHorizontalAlignment() {
105: return m_halign;
106: }
107:
108: /**
109: * Returns the vertical alignment for the image.
110: *
111: * @return the vertical alignment for the image (TOP,CENTER,BOTTOM)
112: */
113: public int getVerticalAlignment() {
114: return m_valign;
115: }
116:
117: /**
118: * Sets the horizontal alignment for this image
119: *
120: * @param align
121: * the horizontal alignment: LEFT,CENTER,RIGHT
122: */
123: public void setHorizontalAlignment(int align) {
124: m_halign = align;
125: m_painter = null;
126: }
127:
128: /**
129: * Sets this property to that of another ImageProperty.
130: *
131: * @param prop
132: * an ImageProperty object
133: */
134: public void setValue(Object prop) {
135: super .setValue(prop);
136: if (prop instanceof ImageProperty) {
137: ImageProperty tp = (ImageProperty) prop;
138: m_halign = tp.m_halign;
139: m_valign = tp.m_valign;
140: m_painter = null;
141: } else if (!(prop instanceof IconProperty)) {
142: assert (false);
143: }
144: }
145:
146: /**
147: * Sets the vertical alignment for this image.
148: *
149: * @param align
150: * the vertical alignment: TOP, CENTER, BOTTOM
151: */
152: public void setVerticalAlignment(int align) {
153: m_valign = align;
154: m_painter = null;
155: }
156:
157: /**
158: * Updates the bean. Creates an image painter and sets it as a background
159: * effect for the Java bean. Note that the Java bean associated with this
160: * property must implement the Paintable interface. See:
161: * {@link com.jeta.forms.gui.effects.Paintable}
162: */
163: public void updateBean(JETABean jbean) {
164: super .updateBean(jbean);
165: ImagePainter painter = (ImagePainter) createPainter();
166: if (jbean != null) {
167: java.awt.Component comp = jbean.getDelegate();
168: if (comp instanceof Paintable) {
169: ((Paintable) comp).setBackgroundPainter(painter);
170: }
171: }
172: }
173:
174: /**
175: * Returns the name for this property.
176: *
177: * @return a string representation of this proprety
178: */
179: public String toString() {
180: return I18N.getLocalizedMessage("Image");
181: }
182:
183: /**
184: * JETAPersistable Implementation
185: */
186: public void read(JETAObjectInput in) throws ClassNotFoundException,
187: IOException {
188: super .read(in.getSuperClassInput());
189: int version = in.readVersion();
190: m_halign = in.readInt("halign");
191: m_valign = in.readInt("valign");
192: }
193:
194: /**
195: * JETAPersitable Implementation
196: */
197: public void write(JETAObjectOutput out) throws IOException {
198: super .write(out.getSuperClassOutput(IconProperty.class));
199: out.writeVersion(VERSION);
200: out.writeInt("halign", m_halign);
201: out.writeInt("valign", m_valign);
202: }
203:
204: }
|