001: /*
002: * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved.
003: *
004: * This software is distributable under the BSD license. See the terms of the
005: * BSD license in the documentation provided with this software.
006: */
007: package jline;
008:
009: /**
010: * A CursorBuffer is a holder for a {@link StringBuffer} that also contains the
011: * current cursor position.
012: *
013: * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
014: */
015: public class CursorBuffer {
016: public int cursor = 0;
017:
018: StringBuffer buffer = new StringBuffer();
019:
020: private boolean overtyping = false;
021:
022: public int length() {
023: return buffer.length();
024: }
025:
026: public char current() {
027: if (cursor <= 0) {
028: return 0;
029: }
030:
031: return buffer.charAt(cursor - 1);
032: }
033:
034: public boolean clearBuffer() {
035: if (buffer.length() == 0) {
036: return false;
037: }
038:
039: buffer.delete(0, buffer.length());
040: cursor = 0;
041: return true;
042: }
043:
044: /**
045: * Write the specific character into the buffer, setting the cursor position
046: * ahead one. The text may overwrite or insert based on the current setting
047: * of isOvertyping().
048: *
049: * @param c
050: * the character to insert
051: */
052: public void write(final char c) {
053: buffer.insert(cursor++, c);
054: if (isOvertyping() && cursor < buffer.length()) {
055: buffer.deleteCharAt(cursor);
056: }
057: }
058:
059: /**
060: * Insert the specified {@link String} into the buffer, setting the cursor
061: * to the end of the insertion point.
062: *
063: * @param str
064: * the String to insert. Must not be null.
065: */
066: public void write(final String str) {
067: if (buffer.length() == 0) {
068: buffer.append(str);
069: } else {
070: buffer.insert(cursor, str);
071: }
072:
073: cursor += str.length();
074:
075: if (isOvertyping() && cursor < buffer.length()) {
076: buffer.delete(cursor, (cursor + str.length()));
077: }
078: }
079:
080: public String toString() {
081: return buffer.toString();
082: }
083:
084: public boolean isOvertyping() {
085: return overtyping;
086: }
087:
088: public void setOvertyping(boolean b) {
089: overtyping = b;
090: }
091:
092: public StringBuffer getBuffer() {
093: return buffer;
094: }
095:
096: public void setBuffer(StringBuffer buffer) {
097: buffer.setLength(0);
098: buffer.append(this.buffer.toString());
099:
100: this.buffer = buffer;
101: }
102:
103: }
|