1 /*
2 * Copyright (c) 2003-2008 by Cosylab d. d.
3 *
4 * This file is part of CosyBeans-Common.
5 *
6 * CosyBeans-Common is free software: you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation, either version 3 of the License, or
9 * (at your option) any later version.
10 *
11 * CosyBeans-Common is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with CosyBeans-Common. If not, see <http://www.gnu.org/licenses/>.
18 */
19
20 package com.cosylab.gui.property.editors;
21
22 import java.awt.event.ItemEvent;
23 import java.awt.event.ItemListener;
24
25 import javax.swing.JCheckBox;
26
27
28
29 /**
30 * JBooleanCheckBox is a component which serves as an editor for boolean
31 * values. It displays a checkBox and a string representation of the value,
32 * i.e. either "true" or "false". It can also display an arbitrary user text
33 * which labels the checkBox.
34 *
35 * @author <a href="mailto:miha.kadunc@cosylab.com">Miha Kadunc</a>
36 * @version $id$
37 */
38 public class BooleanEditor extends JCheckBox implements PropertyEditor
39 {
40 private String description=null;
41 /**
42 * Constructor for JBooleanCheckBox. Constructs a check box with default
43 * value set to false.
44 */
45 public BooleanEditor()
46 {
47 this(false);
48 }
49
50 /**
51 * Constructor for JBooleanCheckBox. Constructs a check box with default
52 * value set to <code>value</code>.
53 *
54 * @param value the value to set.
55 */
56 public BooleanEditor(boolean value)
57 {
58 super();
59 setSelected(value);
60 super.setText(Boolean.toString(value));
61 init();
62 }
63
64 /**
65 * Constructor for JBooleanCheckBox. Constructs a check box with default
66 * value set to <code>value</code>.
67 *
68 * @param description desription of edited value
69 * @param value the value to set.
70 */
71 public BooleanEditor(String description, boolean value)
72 {
73 this(value);
74 setDescription(description);
75 }
76
77 /**
78 * returns a <code>Boolean</code> object with the value set. To retrieve a
79 * primitive <code>boolean</code>, use isSelected() method
80 *
81 * @return Object a Boolean containing the selected value.
82 */
83 public Object getPropertyValue()
84 {
85 return new Boolean(isSelected());
86 }
87
88 /**
89 * If and only if the text is "true" this checkbox is selected.
90 *
91 * @param text the text to be set as boolean
92 *
93 * @see Boolean#getBoolean(java.lang.String)
94 * @see #setValue(boolean)
95 */
96 public void setText(String text)
97 {
98 if ("true".equalsIgnoreCase(text)) {
99 setSelected(true);
100 } else if ("false".equalsIgnoreCase(text)) {
101 setSelected(false);
102 }
103 super.setText(text);
104 }
105
106 /**
107 * DOCUMENT ME!
108 *
109 * @param sel the value to be set
110 *
111 * @see setValue
112 */
113 public void setSelected(boolean sel)
114 {
115 boolean oldValue = isSelected();
116
117 if (oldValue != sel) {
118 super.setSelected(sel);
119 //super.setText(Boolean.toString(sel));
120 firePropertyChange(PROPERTY_VALUE_NAME, oldValue, sel);
121 firePropertyChange("value", oldValue, sel);
122 }
123 }
124
125
126 private void init()
127 {
128 addItemListener(new ItemListener() {
129 public void itemStateChanged(ItemEvent e) {
130 if (description==null) {
131 BooleanEditor.super.setText(Boolean.toString(isSelected()));
132 }
133 firePropertyChange(PROPERTY_VALUE_NAME,!isSelected(),isSelected());
134 }
135 });
136 }
137
138 /**
139 * Sets the displayed value. Should be java.lang.Boolean
140 *
141 * @param value the value to be set.
142 *
143 * @return DOCUMENT ME!
144 *
145 * @see ValueEditor#setValue(Object)
146 */
147 public boolean setPropertyValue(Object value)
148 {
149 if (value == null) {
150 setSelected(false);
151 } else if (value instanceof Boolean) {
152 setSelected(((Boolean)value).booleanValue());
153
154 return true;
155 }
156
157 return false;
158 }
159
160 /**
161 * @see com.cosylab.gui.property.editors.PropertyEditor#getDescription()
162 */
163 public String getDescription()
164 {
165 return description;
166 }
167
168 /**
169 * @see com.cosylab.gui.property.editors.PropertyEditor#getEditor()
170 */
171 public PropertyEditor getEditor()
172 {
173 return this;
174 }
175
176 /**
177 * @see com.cosylab.gui.property.editors.PropertyEditor#setDescription(String)
178 */
179 public void setDescription(String description)
180 {
181 this.description= description;
182 setText(description);
183 }
184 }
185
186 /* __oOo__ */