KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > gnu > jemacs > swt > SwtBuffer


1 //This is free software; for terms and warranty disclaimer see ./COPYING.
2

3 package gnu.jemacs.swt;
4
5 import gnu.jemacs.buffer.Buffer;
6 import gnu.jemacs.buffer.Marker;
7 import gnu.lists.CharSeq;
8 import gnu.lists.FString;
9 import gnu.mapping.InPort;
10
11 import java.io.Reader JavaDoc;
12 import java.io.Writer JavaDoc;
13 import java.util.HashSet JavaDoc;
14 import java.util.Iterator JavaDoc;
15 import java.util.Set JavaDoc;
16
17 import org.eclipse.swt.custom.StyledTextContent;
18
19 /**
20  * @author Christian Surlykke
21  * 11-07-2004
22  */

23 public class SwtBuffer extends Buffer
24 {
25
26   private BufferContent bufferContent = null;
27     
28   public SwtBuffer(String JavaDoc name) {
29     this(name, new BufferContent());
30   }
31   
32   public SwtBuffer(String JavaDoc name, BufferContent content)
33   {
34     super(name);
35     this.bufferContent = content;
36
37     pointMarker = new Marker(this, 0, true);
38     markMarker = new Marker();
39     redrawModeline();
40   }
41   
42   /**
43    * @see gnu.jemacs.buffer.Buffer#redrawModeline()
44    */

45   public void redrawModeline()
46   {
47     modeline = new FString("-----JEmacs: " + getName() + " ---");
48   }
49   
50   private FString modeline = new FString("");
51   
52   public FString getModelineFormat() {
53     return modeline;
54   }
55   
56    /**
57    * @see gnu.jemacs.buffer.Buffer#getLength()
58    */

59   public int getLength()
60   {
61     return bufferContent.getCharCount();
62   }
63
64   
65   // ---------------------- The Dot ------------------------------
66
private int dot = 0;
67
68   /**
69    * @see gnu.jemacs.buffer.Buffer#getDot()
70    */

71   public int getDot()
72   {
73     return dot;
74   }
75   
76   /**
77    * @see gnu.jemacs.buffer.Buffer#setDot(int)
78    */

79   public void setDot(int dot)
80   {
81     this.dot = dot;
82   }
83   
84   /**
85    * @see gnu.jemacs.buffer.Buffer#maxDot()
86    */

87   public int maxDot()
88   {
89     return length();
90   }
91
92   // ---------------------- Insertion --------------------------
93

94   /**
95    * @see gnu.jemacs.buffer.Buffer#insert(java.lang.String, java.lang.Object, int)
96    */

97   public void insert(String JavaDoc string, Object JavaDoc style, int ipos)
98   {
99     // TODO Auto-generated method stub
100
}
101  
102   /**
103    * @see gnu.jemacs.buffer.Buffer#insert(char, int, java.lang.Object)
104    */

105   public void insert(char ch, int count, Object JavaDoc style)
106   {
107     // TODO: Handle styles !
108
char[] charr = new char[count];
109     
110     for (int i = 0; i < charr.length; i++)
111     {
112       charr[i] = ch;
113     }
114     
115     bufferContent.replaceTextRange(getDot(), 0, new String JavaDoc(charr));
116     setDot(getDot() + 1);
117   }
118
119   /**
120    * @see gnu.jemacs.buffer.Buffer#insert(char, int)
121    */

122   public void insert(char ch, int count)
123   {
124     insert(ch, count, null);
125   }
126   /**
127    * @see gnu.jemacs.buffer.Buffer#removeAll()
128    */

129   public void removeAll()
130   {
131     bufferContent.setText("");
132   }
133
134   /**
135    * @see gnu.jemacs.buffer.Buffer#insertFile(java.io.Reader)
136    */

137   public void insertFile(Reader JavaDoc in) throws Exception JavaDoc
138   {
139     bufferContent.insertFile(in, getDot());
140   }
141
142   /**
143    * @see gnu.jemacs.buffer.Buffer#save(java.io.Writer)
144    */

145   public void save(Writer JavaDoc out) throws Exception JavaDoc
146   {
147     bufferContent.save(out);
148   }
149
150   
151   
152   /**
153    * @see gnu.jemacs.buffer.Buffer#removeChar(int)
154    */

155   public void removeChar(int count)
156   {
157     int start = Math.min(getDot(), getDot() + count);
158     int end = Math.max(getDot(), getDot() + count);
159     
160     // Confine interval to be within [0; size()]
161
start = Math.max(0, Math.min(start, size()));
162     end = Math.max(0, Math.min(end, size()));
163
164     if (start != end)
165     {
166       count = Math.abs(end - start);
167       start = Math.min(start, end);
168       bufferContent.replaceTextRange(start, count, null);
169       setDot(start);
170     }
171   }
172   
173   /**
174    * @see gnu.jemacs.buffer.Buffer#lineStartOffset(int)
175    */

176   public int lineStartOffset(int offset)
177   {
178     return bufferContent.lineStartPos(offset);
179   }
180
181   /**
182    * @see gnu.jemacs.buffer.Buffer#scan(char, int, int, int, boolean)
183    */

184   public long scan(char target, int start, int end, int count, boolean allowQuit)
185   {
186     // TODO Auto-generated method stub
187
return 0;
188   }
189
190   public CharSeq getStringContent ()
191   {
192     return bufferContent;
193   }
194
195   /**
196    * @see gnu.jemacs.buffer.Buffer#openReader(int, int)
197    */

198   public InPort openReader(int start, int count)
199   {
200     return new InPort(new BufferContentReader(bufferContent, start, count));
201   }
202
203   /**
204    * @see gnu.jemacs.buffer.Buffer#savePointMark()
205    */

206   public long savePointMark()
207   {
208     // TODO Auto-generated method stub
209
return 0;
210   }
211
212   /**
213    * @see gnu.jemacs.buffer.Buffer#restorePointMark(long)
214    */

215   public void restorePointMark(long pointMark)
216   {
217     // TODO Auto-generated method stub
218

219   }
220
221   /**
222    * @see gnu.jemacs.buffer.Buffer#invoke(java.lang.Runnable)
223    */

224   public void invoke(Runnable JavaDoc doRun)
225   {
226     // TODO Auto-generated method stub
227

228   }
229
230   /**
231    * @see gnu.lists.AbstractSequence#size()
232    */

233   public int size()
234   {
235     return bufferContent.getCharCount();
236   }
237
238   /**
239    * @see gnu.lists.AbstractSequence#get(int)
240    */

241   public Object JavaDoc get(int index)
242   {
243     throw new UnsupportedOperationException JavaDoc();
244   }
245
246   /**
247    * @see gnu.lists.AbstractSequence#createPos(int, boolean)
248    */

249   public int createPos(int index, boolean isAfter)
250   {
251     // TODO Auto-generated method stub
252
return 0;
253   }
254
255   public StyledTextContent getBufferContent()
256   {
257     return bufferContent;
258   }
259   
260   /**
261    * @see gnu.jemacs.buffer.Buffer#forwardLine(int)
262    */

263   public int forwardLine(int lines)
264   {
265     int currentLine = bufferContent.getLineAtOffset(getDot());
266     int newLine = currentLine + lines;
267     if (newLine < 0)
268     {
269       setDot(bufferContent.getOffsetAtLine(0));
270       return newLine;
271     }
272     else if (newLine > bufferContent.getLineCount())
273     {
274       setDot(bufferContent.getOffsetAtLine(bufferContent.getLineCount()));
275       return newLine - bufferContent.getLineCount();
276     }
277     else
278     {
279       setDot(bufferContent.getOffsetAtLine(newLine));
280       return 0;
281     }
282   }
283 }
284
Popular Tags