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:
021: package com.salmonllc.swing;
022:
023: import com.salmonllc.swing.events.ValueChangedEvent;
024: import com.salmonllc.swing.events.ValueChangedListener;
025: import com.salmonllc.sql.DataStoreBuffer;
026: import com.salmonllc.sql.ModelChangedEvent;
027: import com.salmonllc.sql.ModelChangedListener;
028: import javax.swing.*;
029:
030: /**
031: * SOFIA implementation of a JSlider. This Combo Box can be bound to a DataStore column
032: */
033:
034: public class SSlider extends JSlider implements SComponent,
035: ModelChangedListener {
036: private SComponentHelper _helper;
037: private String _dsCol;
038: private DataStoreBuffer _ds;
039:
040: /**
041: * Constructs a new Slider
042: */
043: public SSlider() {
044: _helper = new SComponentHelper(this );
045: }
046:
047: /**
048: * Creates a horizontal slider using the specified
049: * BoundedRangeModel.
050: */
051: public SSlider(BoundedRangeModel brm) {
052: super (brm);
053: _helper = new SComponentHelper(this );
054:
055: }
056:
057: /**
058: * Creates a horizontal slider using the specified min and max
059: * with an initial value equal to the average of the min plus max.
060: */
061: public SSlider(int min, int max) {
062: super (min, max);
063: _helper = new SComponentHelper(this );
064:
065: }
066:
067: /**
068: * Creates a horizontal slider using the specified min, max and value.
069: */
070: public SSlider(int min, int max, int value) {
071: super (min, max, value);
072: _helper = new SComponentHelper(this );
073:
074: }
075:
076: /**
077: * Creates a slider using the specified orientation with the
078: * range 0 to 100 and an initial value of 50.
079: */
080: public SSlider(int orientation) {
081: super (orientation);
082: _helper = new SComponentHelper(this );
083:
084: }
085:
086: /**
087: * Creates a slider with the specified orientation and the
088: * specified minimum, maximum, and initial values.
089: *
090: * @exception IllegalArgumentException if orientation is not one of VERTICAL, HORIZONTAL
091: *
092: * @see #setOrientation
093: * @see #setMinimum
094: * @see #setMaximum
095: * @see #setValue
096: */
097: public SSlider(int orientation, int min, int max, int value) {
098: super (orientation, min, max, value);
099: _helper = new SComponentHelper(this );
100:
101: }
102:
103: /**
104: * Binds the component to a DataStore column
105: * @param dsb The DataStore to bind to
106: * @param column The column to bind to
107: */
108: public void setColumn(DataStoreBuffer dsb, String column) {
109: _ds = dsb;
110: _dsCol = column;
111: _ds.addModelChangedListener(this );
112: evalColumn();
113: }
114:
115: /**
116: * @see ModelChangedListener#modelChanged(ModelChangedEvent)
117: */
118: public void modelChanged(ModelChangedEvent evt) {
119: evalColumn();
120: }
121:
122: private void evalColumn() {
123: _helper.setDataDirty(true);
124: try {
125: if (_ds != null && _dsCol != null) {
126: if (_ds.getAny(_dsCol) == null)
127: throw new Exception();
128: setValue(_ds.getInt(_dsCol));
129: }
130: } catch (Exception e) {
131: _helper.setDataDirty(false);
132: setValue(getMinimum());
133: fireStateChanged();
134: }
135: _helper.setDataDirty(false);
136: }
137:
138: /**
139: * This method is used by the framework and should not be called directly
140: */
141: public ValueChangedEvent generateValueChangedEvent() {
142: try {
143: if (_ds == null)
144: return null;
145: else {
146: String val = new Integer(getValue()).toString();
147: return new ValueChangedEvent(this , _ds
148: .getFormattedString(_dsCol), val, _ds, _ds
149: .getRow(), _ds.getColumnIndex(_dsCol));
150: }
151:
152: } catch (Exception e) {
153: e.printStackTrace();
154: return null;
155: }
156: }
157:
158: /**
159: * This method is used by the framework and should not be called directly
160: */
161: public SComponentHelper getHelper() {
162: return _helper;
163: }
164:
165: /**
166: * This method adds a listener the will be notified when the value in this component changes.
167: * @param l The listener to add.
168: */
169: public void addValueChangedListener(ValueChangedListener l) {
170: _helper.addValueChangedListener(l);
171: }
172:
173: /**
174: * This method removes a listener from the list that will be notified if the text in the component changes.
175: * @param l The listener to remove.
176: */
177: public void removeValueChangedListener(ValueChangedListener l) {
178: _helper.removeValueChangedListener(l);
179: }
180:
181: }
|