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 javax.swing.Icon;
035:
036: import com.jeta.forms.gui.beans.JETABean;
037: import com.jeta.forms.store.JETAObjectInput;
038: import com.jeta.forms.store.JETAObjectOutput;
039:
040: /**
041: * This property represents a single item in a JComboBox or JList. Its primary
042: * purpose is to allow a user to specify an icon and text for an item in a list
043: * in the forms designer.
044: *
045: * @author Jeff Tassin
046: */
047: public class ListItemProperty extends JETAProperty {
048: static final long serialVersionUID = -6728088256939060742L;
049:
050: /**
051: * The current version number of this class
052: */
053: public static final int VERSION = 1;
054:
055: /**
056: * The item label
057: */
058: private String m_label;
059:
060: /**
061: * The item icon.
062: */
063: private IconProperty m_icon_property;
064:
065: /**
066: * The name of this property
067: */
068: public static final String PROPERTY_ID = "listitem";
069:
070: /**
071: * Creates an unitialized <code>ListItemProperty</code> instance.
072: */
073: public ListItemProperty() {
074: super (PROPERTY_ID);
075: }
076:
077: /**
078: * Creates a <code>ListItemProperty</code> instance with the specified
079: * label and no icon.
080: *
081: * @param label
082: * the label for this list item.
083: */
084: public ListItemProperty(String label) {
085: this (label, null);
086: }
087:
088: /**
089: * Creates a <code>ListItemProperty</code> instance with the specified
090: * label and icon
091: *
092: * @param label
093: * the label for this list item.
094: * @param icon
095: * the icon for this list item.
096: */
097: public ListItemProperty(String label, IconProperty iprop) {
098: super (PROPERTY_ID);
099: m_label = label;
100: setIconProperty(iprop);
101: }
102:
103: /**
104: * Returns true if this property equals the given object.
105: */
106: public boolean equals(Object obj) {
107: if (obj == this )
108: return true;
109:
110: if (obj instanceof ListItemProperty) {
111: ListItemProperty prop = (ListItemProperty) obj;
112: if (m_label == null)
113: return false;
114: else
115: return m_label.equals(prop.m_label);
116: } else
117: return false;
118: }
119:
120: /**
121: * Returns the label for this list item
122: */
123: public String getLabel() {
124: return m_label;
125: }
126:
127: /**
128: * Returns the icon for this list item. Can be null.
129: */
130: public IconProperty getIconProperty() {
131: return m_icon_property;
132: }
133:
134: /**
135: * Return the underlying icon that is specified by the IconProperty. This
136: * value can be null if no icon is specified.
137: *
138: * @return the underlying icon.
139: */
140: public Icon icon() {
141: return m_icon_property;
142: }
143:
144: /**
145: * Sets the icon property for this list item.
146: */
147: public void setIconProperty(IconProperty iprop) {
148: if (m_icon_property == null)
149: m_icon_property = new IconProperty();
150: m_icon_property.setValue(iprop);
151: }
152:
153: /**
154: * Sets this property to that of another ListItemProperty or String object.
155: *
156: * @param prop
157: * a ListItemProperty instance. This can also be a String.
158: */
159: public void setValue(Object prop) {
160: if (prop instanceof ListItemProperty) {
161: ListItemProperty lip = (ListItemProperty) prop;
162: m_label = lip.m_label;
163:
164: if (m_icon_property == null)
165: m_icon_property = new IconProperty();
166: m_icon_property.setValue(lip.m_icon_property);
167: } else if (prop instanceof String) {
168: m_icon_property.setValue(null);
169: m_label = (String) prop;
170: }
171: }
172:
173: /**
174: * Sets the label for this list item.
175: */
176: public void setLabel(String label) {
177: m_label = label;
178: }
179:
180: /**
181: * Updates the bean with the current value of this property
182: */
183: public void updateBean(JETABean jbean) {
184:
185: }
186:
187: /**
188: * JETAPersistable Implementation
189: */
190: public void read(JETAObjectInput in) throws ClassNotFoundException,
191: IOException {
192: super .read(in.getSuperClassInput());
193:
194: int version = in.readVersion();
195: m_label = (String) in.readObject("label");
196: m_icon_property = (IconProperty) in.readObject("icon");
197: }
198:
199: /**
200: * JETAPersistable Implementation
201: */
202: public void write(JETAObjectOutput out) throws IOException {
203: super .write(out.getSuperClassOutput(JETAProperty.class));
204: out.writeVersion(VERSION);
205: out.writeObject("label", m_label);
206: out.writeObject("icon", m_icon_property);
207: }
208:
209: public String toString() {
210: return m_label;
211: }
212: }
|