001: //** Copyright Statement ***************************************************
002: //The Salmon Open Framework for Internet Applications (SOFIA)
003: // Copyright (C) 1999 - 2002, Salmon LLC
004: //
005: // This program is free software; you can redistribute it and/or
006: // modify it under the terms of the GNU General Public License version 2
007: // as published by the Free Software Foundation;
008: //
009: // This program is distributed in the hope that it will be useful,
010: // but WITHOUT ANY WARRANTY; without even the implied warranty of
011: // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
012: // GNU General Public License for more details.
013: //
014: // You should have received a copy of the GNU General Public License
015: // along with this program; if not, write to the Free Software
016: // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
017: //
018: // For more information please visit http://www.salmonllc.com
019: //** End Copyright Statement ***************************************************
020: package com.salmonllc.swing;
021:
022: import com.salmonllc.swing.events.ValueChangedEvent;
023: import com.salmonllc.swing.events.ValueChangedListener;
024: import com.salmonllc.sql.DataStoreBuffer;
025: import com.salmonllc.sql.ModelChangedEvent;
026: import com.salmonllc.sql.ModelChangedListener;
027:
028: import javax.swing.*;
029:
030: /**
031: * SOFIA implementation of a check box. This check box can be bound to a DataStore column
032: */
033: public class SCheckBox extends JCheckBox implements SComponent,
034: ModelChangedListener {
035: SComponentHelper _helper;
036: String _trueValue = "1", _falseValue = "0";
037: private String _dsCol;
038: private DataStoreBuffer _ds;
039:
040: /**
041: * Creates an initially unselected check box button with no text, no icon.
042: */
043: public SCheckBox() {
044: _helper = new SComponentHelper(this );
045: }
046:
047: /**
048: * Creates a check box where properties are taken from the
049: * Action supplied.
050: *
051: * @since 1.3
052: */
053: public SCheckBox(Action a) {
054: super (a);
055: _helper = new SComponentHelper(this );
056: }
057:
058: /**
059: * Creates an initially unselected check box with an icon.
060: *
061: * @param icon the Icon image to display
062: */
063: public SCheckBox(Icon icon) {
064: super (icon);
065: _helper = new SComponentHelper(this );
066: if (icon instanceof SIcon)
067: ((SIcon) icon).setParent(this );
068:
069: }
070:
071: /**
072: * Creates a check box with an icon and specifies whether
073: * or not it is initially selected.
074: *
075: * @param icon the Icon image to display
076: * @param selected a boolean value indicating the initial selection
077: * state. If <code>true</code> the check box is selected
078: */
079: public SCheckBox(Icon icon, boolean selected) {
080: super (icon, selected);
081: _helper = new SComponentHelper(this );
082: if (icon instanceof SIcon)
083: ((SIcon) icon).setParent(this );
084:
085: }
086:
087: /**
088: * Creates an initially unselected check box with text.
089: *
090: * @param text the text of the check box.
091: */
092: public SCheckBox(String text) {
093: super (text);
094: _helper = new SComponentHelper(this );
095: }
096:
097: /**
098: * Creates an initially unselected check box with
099: * the specified text and icon.
100: *
101: * @param text the text of the check box.
102: * @param icon the Icon image to display
103: */
104: public SCheckBox(String text, Icon icon) {
105: super (text, icon);
106: _helper = new SComponentHelper(this );
107: if (icon instanceof SIcon)
108: ((SIcon) icon).setParent(this );
109:
110: }
111:
112: /**
113: * Creates a check box with text and icon,
114: * and specifies whether or not it is initially selected.
115: *
116: * @param text the text of the check box.
117: * @param icon the Icon image to display
118: * @param selected a boolean value indicating the initial selection
119: * state. If <code>true</code> the check box is selected
120: */
121: public SCheckBox(String text, Icon icon, boolean selected) {
122: super (text, icon, selected);
123: _helper = new SComponentHelper(this );
124: if (icon instanceof SIcon)
125: ((SIcon) icon).setParent(this );
126:
127: }
128:
129: /**
130: * Creates a check box with text and specifies whether
131: * or not it is initially selected.
132: *
133: * @param text the text of the check box.
134: * @param selected a boolean value indicating the initial selection
135: * state. If <code>true</code> the check box is selected
136: */
137: public SCheckBox(String text, boolean selected) {
138: super (text, selected);
139: _helper = new SComponentHelper(this );
140: }
141:
142: /**
143: * This method is used by the framework and should not be called directly
144: */
145: public ValueChangedEvent generateValueChangedEvent() {
146: try {
147: if (_ds == null)
148: return null;
149: else {
150: String newValue = isSelected() ? _trueValue
151: : _falseValue;
152: return new ValueChangedEvent(this , _ds
153: .getFormattedString(_dsCol), newValue, _ds, _ds
154: .getRow(), _ds.getColumnIndex(_dsCol));
155:
156: }
157: } catch (Exception e) {
158: e.printStackTrace();
159: return null;
160: }
161: }
162:
163: /**
164: * This method is used by the framework and should not be called directly
165: */
166:
167: public SComponentHelper getHelper() {
168: return _helper;
169: }
170:
171: /**
172: * This method adds a listener the will be notified when the value in this component changes.
173: * @param l The listener to add.
174: */
175: public void addValueChangedListener(ValueChangedListener l) {
176: _helper.addValueChangedListener(l);
177: }
178:
179: /**
180: * This method removes a listener from the list that will be notified if the text in the component changes.
181: * @param l The listener to remove.
182: */
183: public void removeValueChangedListener(ValueChangedListener l) {
184: _helper.removeValueChangedListener(l);
185: }
186:
187: /**
188: * Binds the component to a DataStore column
189: * @param dsb The DataStore to bind to
190: * @param column The column to bind to
191: */
192: public void setColumn(DataStoreBuffer dsb, String column) {
193: _ds = dsb;
194: _dsCol = column;
195: _ds.addModelChangedListener(this );
196: evalColumn();
197: }
198:
199: /**
200: * Binds the component to a DataStore column
201: * @param dsb The DataStore to bind to
202: * @param column The column to bind to
203: * @param trueValue The value that represents a true state for the checkbox
204: * @param falseValue The value that represents a false state for the checkbox
205: */
206: public void setColumn(DataStoreBuffer dsb, String column,
207: String trueValue, String falseValue) {
208: setColumn(dsb, column);
209: _trueValue = trueValue;
210: _falseValue = falseValue;
211: evalColumn();
212: }
213:
214: /**
215: * @see com.salmonllc.sql.ModelChangedListener#modelChanged(com.salmonllc.sql.ModelChangedEvent)
216: */
217: public void modelChanged(ModelChangedEvent evt) {
218: evalColumn();
219: }
220:
221: private void evalColumn() {
222: try {
223: if (_ds != null && _dsCol != null) {
224: _helper.setDataDirty(true);
225: String value = _ds.getFormattedString(_dsCol);
226: boolean selected = false;
227: if (value != null)
228: if (value.equals(_trueValue))
229: selected = true;
230: if (selected != isSelected())
231: setSelected(selected);
232: _helper.setDataDirty(false);
233: }
234: } catch (Exception e) {
235: setSelected(false);
236: }
237: }
238:
239: /**
240: * Returns the value representing an unchecked box
241: */
242: public String getFalseValue() {
243: return _falseValue;
244: }
245:
246: /**
247: * Sets the value representing an unchecked box
248: */
249:
250: public void setFalseValue(String falseValue) {
251: _falseValue = falseValue;
252: }
253:
254: /**
255: * Returns the value representing a checked box
256: */
257:
258: public String getTrueValue() {
259: return _trueValue;
260: }
261:
262: /**
263: * Sets the value representing a checked box
264: */
265:
266: public void setTrueValue(String trueValue) {
267: _trueValue = trueValue;
268: }
269:
270: }
|