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: * The way data gets input to the {@link Console} is via an input handler. The
023: * input handlers can be chained together to handle more sophisticated input
024: * (for example embedded HTML or ANSI escape codes).
025: *
026: * @author Rob Clark
027: * @version 0.0
028: */
029: public interface InputHandler {
030: /**
031: * Append characters to the end of the character stream.
032: *
033: * @param cbuf the character buffer
034: * @param off the offset into cbuf to first character to append
035: * @param len the number of characters to append
036: */
037: public void append(char[] cbuf, int off, int len);
038:
039: /**
040: * Delete characters from end of character stream.
041: *
042: * @param num the number of characters to delete
043: */
044: public void zap(int num);
045:
046: /**
047: * Get the current offset of the last character in the character stream.
048: *
049: * @return an offset
050: */
051: public int getOffset();
052:
053: /**
054: * Get the data within the specified region. If the requested region has
055: * scrolled past the top of the buffer, the returned data may be truncated.
056: *
057: * @param offset the begining of the range
058: * @param len the length of the range in characters
059: * @return the data
060: */
061: public char[] getData(int offset, int len);
062:
063: /**
064: * Add a region mapped over a section of character stream. If the section
065: * of the character stream over which the region is mapped has scrolled off
066: * the top of the fixed size row buffer, the region will be automatically
067: * removed.
068: *
069: * @param r region to add
070: * @see #removeRegion
071: */
072: public void addRegion(Region r);
073:
074: /**
075: * Remove a region.
076: *
077: * @param r region to remove
078: * @see #addRegion
079: */
080: public void removeRegion(Region r);
081:
082: /**
083: * Get an iterator of the regions containing the specified range. Access
084: * to the iterator must be synchronized on thebuffer-lock, to prevent
085: * concurrent modification problems. For example:
086: * <pre>
087: * synchronized( ih.getBufferLock() )
088: * {
089: * for( Iterator itr=ih.getRegions( off, len ); itr.hasNext(); )
090: * {
091: * ...
092: * }
093: * }
094: * </pre>
095: *
096: * @param offset the begining of the range
097: * @param len the length of the range in characters
098: * @return an iterator of {@link Region}
099: * @see #getBufferLock
100: */
101: public java.util.Iterator getRegions(int offset, int len);
102:
103: /**
104: * Get an object on which to synchronize access to a buffer.
105: *
106: * @return an object suitable for synchronizing access
107: * @see #getRegions
108: */
109: public Object getBufferLock();
110:
111: /**
112: * Lock the console from repaints. This can be used to batch multiple
113: * updates ({@link #append}, {@link #zap}, {@link #addRegion},
114: * {@link #removeRegion}) and only trigger a single repaint at the end.
115: *
116: * @see #unlock
117: */
118: public void lock();
119:
120: /**
121: * Unlock the console, rerendering if needed.
122: *
123: * @see #lock
124: */
125: public void unlock();
126:
127: /**
128: * Close method to do any cleanup.
129: *
130: */
131: public void close();
132: }
133:
134: /*
135: * Local Variables:
136: * tab-width: 2
137: * indent-tabs-mode: nil
138: * mode: java
139: * c-indentation-style: java
140: * c-basic-offset: 2
141: * eval: (c-set-offset 'substatement-open '0)
142: * eval: (c-set-offset 'case-label '+)
143: * eval: (c-set-offset 'inclass '+)
144: * eval: (c-set-offset 'inline-open '0)
145: * End:
146: */
|