001: /*=============================================================================
002: * Copyright Texas Instruments, Inc., 2002. All Rights Reserved.
003: *
004: * This program is free software; you can redistribute it and/or modify
005: * it under the terms of the GNU General Public License as published by
006: * the Free Software Foundation; either version 2 of the License, or
007: * (at your option) any later version.
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:
019: package ti.swing.console;
020:
021: /**
022: * An {@link InputHandler} adapter, provides default methods that just fwd the
023: * request to the parent. A subclass can just override the methods it cares
024: * about.
025: *
026: * @author Rob Clark
027: * @version 0.0
028: */
029: public abstract class InputAdapter implements InputHandler {
030: private InputHandler parent;
031:
032: /**
033: * Class Constructor.
034: *
035: * @param parent the parent of this input adapter
036: */
037: public InputAdapter(InputHandler parent) {
038: this .parent = parent;
039: }
040:
041: /**
042: * Append characters to the end of the character stream.
043: *
044: * @param cbuf the character buffer
045: * @param off the offset into cbuf to first character to append
046: * @param len the number of characters to append
047: */
048: public void append(char[] cbuf, int off, int len) {
049: parent.append(cbuf, off, len);
050: }
051:
052: /**
053: * Delete characters from end of character stream.
054: *
055: * @param num the number of characters to delete
056: */
057: public void zap(int num) {
058: parent.zap(num);
059: }
060:
061: /**
062: * Get the current offset of the last character in the character stream.
063: *
064: * @return an offset
065: */
066: public int getOffset() {
067: return parent.getOffset();
068: }
069:
070: /**
071: * Get the data within the specified region. If the requested region has
072: * scrolled past the top of the buffer, the returned data may be truncated.
073: *
074: * @param offset the begining of the range
075: * @param len the length of the range in characters
076: * @return the data
077: */
078: public char[] getData(int offset, int len) {
079: return parent.getData(offset, len);
080: }
081:
082: /**
083: * Add a region mapped over a section of character stream. If the section
084: * of the character stream over which the region is mapped has scrolled off
085: * the top of the fixed size row buffer, the region will be automatically
086: * removed.
087: *
088: * @param r region to add
089: * @see #removeRegion
090: */
091: public void addRegion(Region r) {
092: parent.addRegion(r);
093: }
094:
095: /**
096: * Remove a region.
097: *
098: * @param r region to remove
099: * @see #addRegion
100: */
101: public void removeRegion(Region r) {
102: parent.removeRegion(r);
103: }
104:
105: /**
106: * Get an iterator of the regions containing the specified range. Access
107: * to the iterator must be synchronized on the buffer-lock, to* prevent
108: * concurrent modification problems. For example:
109: * <pre>
110: * synchronized( ih.getBufferLock() )
111: * {
112: * for( Iterator itr=ih.getRegions( off, len ); itr.hasNext(); )
113: * {
114: * ...
115: * }
116: * }
117: * </pre>
118: *
119: * @param offset the begining of the range
120: * @param len the length of the range in characters
121: * @return an iterator of {@link Region}
122: * @see #getBufferLock
123: */
124: public java.util.Iterator getRegions(int offset, int len) {
125: return parent.getRegions(offset, len);
126: }
127:
128: /**
129: * Get an object on which to synchronize access to a region iterator.
130: *
131: * @return an object suitable for synchronizing region iterator access
132: * @see #getRegions
133: */
134: public Object getBufferLock() {
135: return parent.getBufferLock();
136: }
137:
138: /**
139: * Lock the console from repaints. This can be used to batch multiple
140: * updates ({@link #append}, {@link #zap}, {@link #addRegion},
141: * {@link #removeRegion}) and only trigger a single repaint at the end.
142: *
143: * @see #unlock
144: */
145: public void lock() {
146: parent.lock();
147: }
148:
149: /**
150: * Unlock the console, rerendering if needed.
151: *
152: * @see #lock
153: */
154: public void unlock() {
155: parent.unlock();
156: }
157:
158: /**
159: * Close method for doing any cleanup.
160: *
161: */
162: public void close() {
163: parent.close();
164: }
165: }
166:
167: /*
168: * Local Variables:
169: * tab-width: 2
170: * indent-tabs-mode: nil
171: * mode: java
172: * c-indentation-style: java
173: * c-basic-offset: 2
174: * eval: (c-set-offset 'substatement-open '0)
175: * eval: (c-set-offset 'case-label '+)
176: * eval: (c-set-offset 'inclass '+)
177: * eval: (c-set-offset 'inline-open '0)
178: * End:
179: */
|