annotate src/remoteeditor/editors/REPTextImpl2.java @ 193:3133040ee4f4

(no commit message)
author one
date Wed, 31 Dec 2008 15:06:22 +0900
parents
children 4c6f7c6a2180
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
193
3133040ee4f4 (no commit message)
one
parents:
diff changeset
1 package remoteeditor.editors;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
2
3133040ee4f4 (no commit message)
one
parents:
diff changeset
3 import java.util.LinkedList;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
4 import java.util.List;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
5
3133040ee4f4 (no commit message)
one
parents:
diff changeset
6 import org.eclipse.jface.text.BadLocationException;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
7 import org.eclipse.jface.text.DocumentEvent;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
8 import org.eclipse.jface.text.IDocument;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
9 import org.eclipse.jface.text.IDocumentListener;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
10 import org.eclipse.swt.widgets.Display;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
11
3133040ee4f4 (no commit message)
one
parents:
diff changeset
12 public class REPTextImpl2 implements REPText, IDocumentListener {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
13
3133040ee4f4 (no commit message)
one
parents:
diff changeset
14 private IDocument document;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
15 private Display display;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
16 private String BR = System.getProperty("line.separator");
3133040ee4f4 (no commit message)
one
parents:
diff changeset
17 private List<REPTextListener> textListenerList;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
18 private boolean myInput = false;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
19
3133040ee4f4 (no commit message)
one
parents:
diff changeset
20 public REPTextImpl2(IDocument document, Display display){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
21 this.document = document;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
22 this.display = display;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
23 textListenerList = new LinkedList<REPTextListener>();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
24 document.addDocumentListener(this);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
25 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
26
3133040ee4f4 (no commit message)
one
parents:
diff changeset
27 public String delete(int lineno) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
28 int d = lineno - document.getNumberOfLines();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
29 for(int i = 0; i <= d; i++){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
30 increaseLine();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
31 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
32
3133040ee4f4 (no commit message)
one
parents:
diff changeset
33 String deleted = getLineText(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
34 try {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
35 final int length = document.getLineLength(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
36 final int offset = document.getLineOffset(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
37 edit(offset, length, "");
3133040ee4f4 (no commit message)
one
parents:
diff changeset
38 } catch (BadLocationException e) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
39 e.printStackTrace();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
40 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
41 return deleted;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
42 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
43
3133040ee4f4 (no commit message)
one
parents:
diff changeset
44 public void insert(int lineno, String text) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
45 int d = lineno - document.getNumberOfLines();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
46 for(int i = 0; i <= d; i++){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
47 increaseLine();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
48 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
49
3133040ee4f4 (no commit message)
one
parents:
diff changeset
50 try {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
51 final int offset = document.getLineOffset(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
52 final String changedText = text + BR;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
53 edit(offset, 0, changedText);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
54 } catch (BadLocationException e) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
55 e.printStackTrace();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
56 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
57 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
58
3133040ee4f4 (no commit message)
one
parents:
diff changeset
59 private void increaseLine() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
60 edit(document.getLength(), 0, BR);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
61 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
62
3133040ee4f4 (no commit message)
one
parents:
diff changeset
63 private void edit(final int offset, final int length, final String text) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
64 display.syncExec(new Runnable(){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
65 public void run(){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
66 try {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
67 myInput = true;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
68 document.replace(offset, length, text);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
69 myInput = false;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
70 } catch (BadLocationException e) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
71 e.printStackTrace();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
72 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
73 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
74 });
3133040ee4f4 (no commit message)
one
parents:
diff changeset
75 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
76
3133040ee4f4 (no commit message)
one
parents:
diff changeset
77 public List<String> list() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
78 LinkedList<String> list = new LinkedList<String>();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
79 int lines = document.getNumberOfLines();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
80 for(int i = 0; i < lines; i++){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
81 String text = getLineText(i);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
82 list.add(text);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
83 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
84 return list;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
85 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
86
3133040ee4f4 (no commit message)
one
parents:
diff changeset
87 private String getLineText(int lineno){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
88 int offset = 0;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
89 int length = 0;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
90 String text = null;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
91 try {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
92 offset = document.getLineOffset(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
93 length = document.getLineLength(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
94 String tmp = document.get(offset, length);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
95 text = tmp.replace(BR, "");
3133040ee4f4 (no commit message)
one
parents:
diff changeset
96 } catch (BadLocationException e) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
97 e.printStackTrace();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
98 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
99 return text;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
100 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
101
3133040ee4f4 (no commit message)
one
parents:
diff changeset
102 public void documentAboutToBeChanged(DocumentEvent event) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
103 if(myInput) return;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
104 int offset = event.getOffset();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
105 int length = event.getLength();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
106
3133040ee4f4 (no commit message)
one
parents:
diff changeset
107 try {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
108 int startLine = document.getLineOfOffset(offset);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
109 int endLine = document.getLineOfOffset(offset + length);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
110 for(int i = startLine; i <= endLine; i++){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
111 String text = getLineText(i);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
112 for(REPTextListener listener : textListenerList){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
113 listener.textDeleted(new REPTextEvent(i, text));
3133040ee4f4 (no commit message)
one
parents:
diff changeset
114 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
115 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
116 } catch (BadLocationException e) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
117 e.printStackTrace();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
118 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
119
3133040ee4f4 (no commit message)
one
parents:
diff changeset
120 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
121
3133040ee4f4 (no commit message)
one
parents:
diff changeset
122 public void documentChanged(DocumentEvent event) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
123 if(myInput) return;
3133040ee4f4 (no commit message)
one
parents:
diff changeset
124 int offset = event.getOffset();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
125 int length = event.getText().length();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
126
3133040ee4f4 (no commit message)
one
parents:
diff changeset
127 try {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
128 int startLine = document.getLineOfOffset(offset);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
129 int endLine = document.getLineOfOffset(offset + length);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
130 for(int i = startLine; i <= endLine; i++){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
131 String text = getLineText(i);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
132 for(REPTextListener listener : textListenerList){
3133040ee4f4 (no commit message)
one
parents:
diff changeset
133 listener.textInserted(new REPTextEvent(i, text));
3133040ee4f4 (no commit message)
one
parents:
diff changeset
134 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
135 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
136 } catch (BadLocationException e) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
137 e.printStackTrace();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
138 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
139
3133040ee4f4 (no commit message)
one
parents:
diff changeset
140 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
141
3133040ee4f4 (no commit message)
one
parents:
diff changeset
142 public synchronized void addTextListener(REPTextListener listener) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
143 Logger.print(listener);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
144 textListenerList.add(listener);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
145 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
146
3133040ee4f4 (no commit message)
one
parents:
diff changeset
147 public String get(int lineno) {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
148 return getLineText(lineno);
3133040ee4f4 (no commit message)
one
parents:
diff changeset
149 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
150
3133040ee4f4 (no commit message)
one
parents:
diff changeset
151 public int size() {
3133040ee4f4 (no commit message)
one
parents:
diff changeset
152 return document.getNumberOfLines();
3133040ee4f4 (no commit message)
one
parents:
diff changeset
153 }
3133040ee4f4 (no commit message)
one
parents:
diff changeset
154
3133040ee4f4 (no commit message)
one
parents:
diff changeset
155 }