View Javadoc

1   /*
2    * Copyright (c) 2002-2007, Marc Prud'hommeaux. All rights reserved.
3    *
4    * This software is distributable under the BSD license. See the terms of the
5    * BSD license in the documentation provided with this software.
6    */
7   package jline;
8   
9   /***
10   * A CursorBuffer is a holder for a {@link StringBuffer} that also contains the
11   * current cursor position.
12   *
13   * @author <a href="mailto:mwp1@cornell.edu">Marc Prud'hommeaux</a>
14   */
15  public class CursorBuffer {
16      public int cursor = 0;
17  
18      StringBuffer buffer = new StringBuffer();
19  
20      private boolean overtyping = false;
21  
22      public int length() {
23          return buffer.length();
24      }
25  
26      public char current() {
27          if (cursor <= 0) {
28              return 0;
29          }
30  
31          return buffer.charAt(cursor - 1);
32      }
33  
34      public boolean clearBuffer() {
35          if (buffer.length() == 0) {
36              return false;
37          }
38  
39          buffer.delete(0, buffer.length());
40          cursor = 0;
41          return true;
42      }
43  
44      /***
45       * Write the specific character into the buffer, setting the cursor position
46       * ahead one. The text may overwrite or insert based on the current setting
47       * of isOvertyping().
48       *
49       * @param c
50       *            the character to insert
51       */
52      public void write(final char c) {
53          buffer.insert(cursor++, c);
54          if (isOvertyping() && cursor < buffer.length()) {
55              buffer.deleteCharAt(cursor);
56          }
57      }
58  
59      /***
60       * Insert the specified {@link String} into the buffer, setting the cursor
61       * to the end of the insertion point.
62       *
63       * @param str
64       *            the String to insert. Must not be null.
65       */
66      public void write(final String str) {
67          if (buffer.length() == 0) {
68              buffer.append(str);
69          } else {
70              buffer.insert(cursor, str);
71          }
72  
73          cursor += str.length();
74  
75          if (isOvertyping() && cursor < buffer.length()) {
76              buffer.delete(cursor, (cursor + str.length()));
77          }
78      }
79  
80      public String toString() {
81          return buffer.toString();
82      }
83  
84      public boolean isOvertyping() {
85          return overtyping;
86      }
87  
88      public void setOvertyping(boolean b) {
89          overtyping = b;
90      }
91  
92  	public StringBuffer getBuffer() {
93  		return buffer;
94  	}
95  
96  	public void setBuffer(StringBuffer buffer) {
97  		buffer.setLength(0);
98  		buffer.append(this.buffer.toString());
99  		
100 		this.buffer = buffer;
101 	}
102     
103     
104 }