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.sql.DataStoreBuffer;
024: import com.salmonllc.sql.DataStoreException;
025: import com.salmonllc.sql.ModelChangedEvent;
026: import com.salmonllc.sql.ModelChangedListener;
027: import com.salmonllc.swing.events.*;
028:
029: import javax.swing.*;
030:
031: /**
032: * SOFIA implementation of a JTextArea. This Text Area can be bound to a DataStore column.
033: */
034:
035: public class STextArea extends JTextArea implements
036: ModelChangedListener, SComponent {
037:
038: DataStoreBuffer _ds;
039: String _dsCol;
040: SComponentHelper _helper;
041:
042: /**
043: * Constructs a new TextArea. A default model is set, the initial string
044: * is null, and rows/columns are set to 0.
045: */
046: public STextArea() {
047: super ();
048: _helper = new SComponentHelper(this );
049: }
050:
051: /**
052: * Constructs a new empty TextArea with the specified number of
053: * rows and columns. A default model is created, and the initial
054: * string is null.
055: *
056: * @param rows the number of rows >= 0
057: * @param columns the number of columns >= 0
058: * @exception IllegalArgumentException if the rows or columns
059: * arguments are negative.
060: */
061: public STextArea(int rows, int columns) {
062: super (rows, columns);
063: _helper = new SComponentHelper(this );
064: }
065:
066: /**
067: * Constructs a new TextArea with the specified text displayed.
068: * A default model is created and rows/columns are set to 0.
069: *
070: * @param text the text to be displayed, or null
071: */
072: public STextArea(String text) {
073: super (text);
074: _helper = new SComponentHelper(this );
075: }
076:
077: /**
078: * Constructs a new TextArea with the specified text and number
079: * of rows and columns. A default model is created.
080: *
081: * @param text the text to be displayed, or null
082: * @param rows the number of rows >= 0
083: * @param columns the number of columns >= 0
084: * @exception IllegalArgumentException if the rows or columns
085: * arguments are negative.
086: */
087: public STextArea(String text, int rows, int columns) {
088: super (text, rows, columns);
089: _helper = new SComponentHelper(this );
090: }
091:
092: /**
093: * Binds the component to a DataStore column
094: * @param dsb The DataStore to bind to
095: * @param column The column to bind to
096: */
097: public void setColumn(DataStoreBuffer dsb, String column) {
098: _ds = dsb;
099: _dsCol = column;
100: _ds.addModelChangedListener(this );
101: evalColumn();
102: }
103:
104: /**
105: * @see ModelChangedListener#modelChanged(ModelChangedEvent)
106: */
107: public void modelChanged(ModelChangedEvent evt) {
108: evalColumn();
109: }
110:
111: private void evalColumn() {
112: try {
113: if (_ds != null && _dsCol != null) {
114: setText(_ds.getFormattedString(_dsCol));
115: _helper.setDataDirty(false);
116: }
117: } catch (Exception e) {
118: setText(null);
119: }
120: }
121:
122: /**
123: * Returns the value of the data in the component
124: */
125: public String getValue() {
126: try {
127: if (_ds != null) {
128: if (_helper.isDataDirty())
129: return getText();
130: else
131: return _ds.getFormattedString(_dsCol);
132: }
133: } catch (DataStoreException ex) {
134: ex.printStackTrace();
135: return null;
136: }
137: return getText();
138: }
139:
140: /**
141: * This method is used by the framework and should not be called directly
142: */
143: public ValueChangedEvent generateValueChangedEvent() {
144: try {
145: if (_ds == null)
146: return null;
147: else {
148: String newValue = getText();
149: return new ValueChangedEvent(this , _ds
150: .getFormattedString(_dsCol), newValue, _ds, _ds
151: .getRow(), _ds.getColumnIndex(_dsCol));
152:
153: }
154: } catch (Exception e) {
155: e.printStackTrace();
156: return null;
157: }
158: }
159:
160: /**
161: * This method is used by the framework and should not be called directly
162: */
163: public SComponentHelper getHelper() {
164: return _helper;
165: }
166:
167: /**
168: * This method adds a listener the will be notified when the value in this component changes.
169: * @param l The listener to add.
170: */
171: public void addValueChangedListener(ValueChangedListener l) {
172: _helper.addValueChangedListener(l);
173: }
174:
175: /**
176: * This method removes a listener from the list that will be notified if the text in the component changes.
177: * @param l The listener to remove.
178: */
179: public void removeValueChangedListener(ValueChangedListener l) {
180: _helper.removeValueChangedListener(l);
181: }
182:
183: /**
184: * Returns the maximum number of characters you are allowed to type in this box
185: */
186: public int getMaxLength() {
187: return _helper.getMaxLength();
188: }
189:
190: /**
191: * Sets the maximum number of characters you are allowed to type in this box
192: */
193: public void setMaxLength(int maxLength) {
194: _helper.setMaxLength(maxLength);
195: }
196:
197: }
|