1 /*******************************************************************************
2  * Copyright (c) 2000, 2008 IBM Corporation and others.
3  *
4  * This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License 2.0
6  * which accompanies this distribution, and is available at
7  * https://www.eclipse.org/legal/epl-2.0/
8  *
9  * SPDX-License-Identifier: EPL-2.0
10  *
11  * Contributors:
12  *     IBM Corporation - initial API and implementation
13  *******************************************************************************/
14 package org.eclipse.jface.text.tests;
15 
16 import java.util.ArrayList;
17 import java.util.Iterator;
18 import java.util.List;
19 
20 import org.eclipse.swt.custom.StyledText;
21 import org.eclipse.swt.graphics.Color;
22 import org.eclipse.swt.graphics.Point;
23 
24 import org.eclipse.jface.viewers.ISelectionProvider;
25 
26 import org.eclipse.jface.text.BadLocationException;
27 import org.eclipse.jface.text.DocumentEvent;
28 import org.eclipse.jface.text.IAutoIndentStrategy;
29 import org.eclipse.jface.text.IDocument;
30 import org.eclipse.jface.text.IDocumentListener;
31 import org.eclipse.jface.text.IEventConsumer;
32 import org.eclipse.jface.text.IFindReplaceTarget;
33 import org.eclipse.jface.text.IRegion;
34 import org.eclipse.jface.text.ITextDoubleClickStrategy;
35 import org.eclipse.jface.text.ITextHover;
36 import org.eclipse.jface.text.ITextInputListener;
37 import org.eclipse.jface.text.ITextListener;
38 import org.eclipse.jface.text.ITextOperationTarget;
39 import org.eclipse.jface.text.ITextViewer;
40 import org.eclipse.jface.text.IUndoManager;
41 import org.eclipse.jface.text.IViewportListener;
42 import org.eclipse.jface.text.TextEvent;
43 import org.eclipse.jface.text.TextPresentation;
44 import org.eclipse.jface.text.source.Annotation;
45 import org.eclipse.jface.text.source.IAnnotationHover;
46 import org.eclipse.jface.text.source.IAnnotationModel;
47 import org.eclipse.jface.text.source.ISourceViewer;
48 import org.eclipse.jface.text.source.SourceViewerConfiguration;
49 
50 
51 
52 
53 public class TestTextViewer implements ISourceViewer, IDocumentListener {
54 
55 
56 	protected IDocument fDocument;
57 	protected List<ITextInputListener> fInputListeners= new ArrayList<>();
58 	protected List<ITextListener> fTextListeners= new ArrayList<>();
59 	protected TextPresentation fTextPresentation;
60 	protected Point fSelection= new Point(-1, -1);
61 	protected String fDeletion;
62 
63 	/**
64 	 * @see ITextViewer#setDocument(IDocument, int, int)
65 	 */
66 	@Override
setDocument(IDocument document, int p1, int p2)67 	public void setDocument(IDocument document, int p1, int p2) {
68 		setDocument(document);
69 	}
70 
71 	/**
72 	 * @see ITextViewer#getDocument()
73 	 */
74 	@Override
getDocument()75 	public IDocument getDocument() {
76 		return fDocument;
77 	}
78 
79 	/**
80 	 * @see ITextViewer#setDocument(IDocument)
81 	 */
82 	@Override
setDocument(IDocument document)83 	public void setDocument(IDocument document) {
84 		IDocument oldDoc= fDocument;
85 		fireTextInputChanged(oldDoc, document, true);
86 
87 		if (oldDoc != null)
88 			oldDoc.removeDocumentListener(this);
89 
90 		fDocument= document;
91 
92 		if (fDocument != null) {
93 			fireTextChanged(new TestTextEvent(fDocument.get()));
94 			fDocument.addDocumentListener(this);
95 		}
96 
97 		fireTextInputChanged(oldDoc, document, false);
98 	}
99 
100 	/**
101 	 * @see ITextViewer#removeTextInputListener(ITextInputListener)
102 	 */
103 	@Override
removeTextInputListener(ITextInputListener listener)104 	public void removeTextInputListener(ITextInputListener listener) {
105 		fInputListeners.remove(listener);
106 	}
107 
108 	/**
109 	 * @see ITextViewer#addTextInputListener(ITextInputListener)
110 	 */
111 	@Override
addTextInputListener(ITextInputListener listener)112 	public void addTextInputListener(ITextInputListener listener) {
113 		if (!fInputListeners.contains(listener))
114 			fInputListeners.add(listener);
115 	}
116 
fireTextInputChanged(IDocument oldDoc, IDocument newDoc, boolean about)117 	protected void fireTextInputChanged(IDocument oldDoc, IDocument newDoc, boolean about) {
118 		Iterator<ITextInputListener> e= new ArrayList<>(fInputListeners).iterator();
119 		while (e.hasNext()) {
120 			ITextInputListener l= e.next();
121 			if (about)
122 				l.inputDocumentAboutToBeChanged(oldDoc, newDoc);
123 			else
124 				l.inputDocumentChanged(oldDoc, newDoc);
125 		}
126 	}
127 
128 	/**
129 	 * @see ITextViewer#changeTextPresentation(TextPresentation, boolean)
130 	 */
131 	@Override
changeTextPresentation(TextPresentation presentation, boolean p1)132 	public void changeTextPresentation(TextPresentation presentation, boolean p1) {
133 		fTextPresentation= presentation;
134 	}
135 
136 	/**
137 	 * @see ITextViewer#invalidateTextPresentation()
138 	 */
139 	@Override
invalidateTextPresentation()140 	public void invalidateTextPresentation() {
141 	}
142 
getTextPresentation()143 	public TextPresentation getTextPresentation() {
144 		return fTextPresentation;
145 	}
146 
147 	@Override
documentAboutToBeChanged(DocumentEvent event)148 	public void documentAboutToBeChanged(DocumentEvent event) {
149 		try {
150 			fDeletion= fDocument.get(event.getOffset(), event.getLength());
151 		} catch (BadLocationException x) {
152 		}
153 	}
154 
155 	@Override
documentChanged(DocumentEvent event)156 	public void documentChanged(DocumentEvent event) {
157 		fireTextChanged(new TestTextEvent(event, fDeletion));
158 	}
159 
160 	/**
161 	 * @see ITextViewer#getFindReplaceTarget()
162 	 */
163 	@Override
getFindReplaceTarget()164 	public IFindReplaceTarget getFindReplaceTarget() {
165 		return null;
166 	}
167 
168 	/**
169 	 * @see ITextViewer#getTextOperationTarget()
170 	 */
171 	@Override
getTextOperationTarget()172 	public ITextOperationTarget getTextOperationTarget() {
173 		return null;
174 	}
175 
176 	/**
177 	 * @see ITextViewer#setTextColor(Color, int, int, boolean)
178 	 */
179 	@Override
setTextColor(Color p0, int p1, int p2, boolean p3)180 	public void setTextColor(Color p0, int p1, int p2, boolean p3) {
181 	}
182 
183 	/**
184 	 * @see ITextViewer#setTextColor(Color)
185 	 */
186 	@Override
setTextColor(Color p0)187 	public void setTextColor(Color p0) {
188 	}
189 
190 	/**
191 	 * @see ITextViewer#overlapsWithVisibleRegion(int, int)
192 	 */
193 	@Override
overlapsWithVisibleRegion(int p0, int p1)194 	public boolean overlapsWithVisibleRegion(int p0, int p1) {
195 		return false;
196 	}
197 
198 	/**
199 	 * @see ITextViewer#getVisibleRegion()
200 	 */
201 	@Override
getVisibleRegion()202 	public IRegion getVisibleRegion() {
203 		return null;
204 	}
205 
206 	/**
207 	 * @see ITextViewer#resetVisibleRegion()
208 	 */
209 	@Override
resetVisibleRegion()210 	public void resetVisibleRegion() {
211 	}
212 
213 	/**
214 	 * @see ITextViewer#setVisibleRegion(int, int)
215 	 */
216 	@Override
setVisibleRegion(int p0, int p1)217 	public void setVisibleRegion(int p0, int p1) {
218 	}
219 
220 	/**
221 	 * @see ITextViewer#setIndentPrefixes(String[], String)
222 	 */
223 	@Override
setIndentPrefixes(String[] p0, String p1)224 	public void setIndentPrefixes(String[] p0, String p1) {
225 	}
226 
227 	/**
228 	 * @see ITextViewer#setDefaultPrefixes(String[], String)
229 	 */
230 	@Override
setDefaultPrefixes(String[] p0, String p1)231 	public void setDefaultPrefixes(String[] p0, String p1) {
232 	}
233 
234 	/**
235 	 * @see ITextViewer#setAutoIndentStrategy(IAutoIndentStrategy, String)
236 	 */
237 	@Override
setAutoIndentStrategy(IAutoIndentStrategy p0, String p1)238 	public void setAutoIndentStrategy(IAutoIndentStrategy p0, String p1) {
239 	}
240 
241 	/**
242 	 * @see ITextViewer#setTextDoubleClickStrategy(ITextDoubleClickStrategy, String)
243 	 */
244 	@Override
setTextDoubleClickStrategy(ITextDoubleClickStrategy p0, String p1)245 	public void setTextDoubleClickStrategy(ITextDoubleClickStrategy p0, String p1) {
246 	}
247 
248 	/**
249 	 * @see ITextViewer#setUndoManager(IUndoManager)
250 	 */
251 	@Override
setUndoManager(IUndoManager p0)252 	public void setUndoManager(IUndoManager p0) {
253 	}
254 
255 	/**
256 	 * @see ITextViewer#getTextWidget()
257 	 */
258 	@Override
getTextWidget()259 	public StyledText getTextWidget() {
260 		return null;
261 	}
262 
263 	@Override
setTextHover(ITextHover p0, String p1)264 	public void setTextHover(ITextHover p0, String p1) {
265 	}
266 
267 	/**
268 	 * @see ITextViewer#activatePlugins()
269 	 */
270 	@Override
activatePlugins()271 	public void activatePlugins() {
272 	}
273 
274 	/**
275 	 * @see ITextViewer#resetPlugins()
276 	 */
277 	@Override
resetPlugins()278 	public void resetPlugins() {
279 	}
280 
281 	/**
282 	 * @see ITextViewer#getTopInset()
283 	 */
284 	@Override
getTopInset()285 	public int getTopInset() {
286 		return 0;
287 	}
288 
289 	/**
290 	 * @see ITextViewer#getBottomIndexEndOffset()
291 	 */
292 	@Override
getBottomIndexEndOffset()293 	public int getBottomIndexEndOffset() {
294 		return 0;
295 	}
296 
297 	/**
298 	 * @see ITextViewer#getBottomIndex()
299 	 */
300 	@Override
getBottomIndex()301 	public int getBottomIndex() {
302 		return 0;
303 	}
304 
305 	/**
306 	 * @see ITextViewer#getTopIndexStartOffset()
307 	 */
308 	@Override
getTopIndexStartOffset()309 	public int getTopIndexStartOffset() {
310 		return 0;
311 	}
312 
313 	/**
314 	 * @see ITextViewer#getTopIndex()
315 	 */
316 	@Override
getTopIndex()317 	public int getTopIndex() {
318 		return 0;
319 	}
320 
321 	/**
322 	 * @see ITextViewer#setTopIndex(int)
323 	 */
324 	@Override
setTopIndex(int p0)325 	public void setTopIndex(int p0) {
326 	}
327 
328 	/**
329 	 * @see ITextViewer#revealRange(int, int)
330 	 */
331 	@Override
revealRange(int p0, int p1)332 	public void revealRange(int p0, int p1) {
333 	}
334 
335 	/**
336 	 * @see ITextViewer#getSelectedRange()
337 	 */
338 	@Override
getSelectedRange()339 	public Point getSelectedRange() {
340 		return fSelection;
341 	}
342 
343 	/**
344 	 * @see ITextViewer#setSelectedRange(int, int)
345 	 */
346 	@Override
setSelectedRange(int offset, int length)347 	public void setSelectedRange(int offset, int length) {
348 		fSelection.x= offset;
349 		fSelection.y= length;
350 	}
351 
352 	/**
353 	 * @see ITextViewer#isEditable()
354 	 */
355 	@Override
isEditable()356 	public boolean isEditable() {
357 		return true;
358 	}
359 
360 	/**
361 	 * @see ITextViewer#setEditable(boolean)
362 	 */
363 	@Override
setEditable(boolean p0)364 	public void setEditable(boolean p0) {
365 	}
366 
367 	/**
368 	 * @see ITextViewer#setEventConsumer(IEventConsumer)
369 	 */
370 	@Override
setEventConsumer(IEventConsumer p0)371 	public void setEventConsumer(IEventConsumer p0) {
372 	}
373 
374 	/**
375 	 * @see ITextViewer#removeTextListener(ITextListener)
376 	 */
377 	@Override
removeTextListener(ITextListener listener)378 	public void removeTextListener(ITextListener listener) {
379 		fTextListeners.remove(listener);
380 	}
381 
fireTextChanged(TextEvent event)382 	protected void fireTextChanged(TextEvent event) {
383 		Iterator<ITextListener> e= new ArrayList<>(fTextListeners).iterator();
384 		while (e.hasNext()) {
385 			ITextListener l= e.next();
386 			l.textChanged(event);
387 		}
388 	}
389 
390 	/**
391 	 * @see ITextViewer#addTextListener(ITextListener)
392 	 */
393 	@Override
addTextListener(ITextListener listener)394 	public void addTextListener(ITextListener listener) {
395 		if (!fTextListeners.contains(listener))
396 			fTextListeners.add(listener);
397 	}
398 
399 	/**
400 	 * @see ITextViewer#removeViewportListener(IViewportListener)
401 	 */
402 	@Override
removeViewportListener(IViewportListener p0)403 	public void removeViewportListener(IViewportListener p0) {
404 	}
405 
406 	/**
407 	 * @see ITextViewer#addViewportListener(IViewportListener)
408 	 */
409 	@Override
addViewportListener(IViewportListener p0)410 	public void addViewportListener(IViewportListener p0) {
411 	}
412 
413 	/**
414 	 * @see ISourceViewer#getSelectionProvider()
415 	 */
416 	@Override
getSelectionProvider()417 	public ISelectionProvider getSelectionProvider() {
418 		return null;
419 	}
420 
421 	/**
422 	 * @see ISourceViewer#showAnnotations(boolean)
423 	 */
424 	@Override
showAnnotations(boolean p0)425 	public void showAnnotations(boolean p0) {
426 	}
427 
428 	/**
429 	 * @see ISourceViewer#removeRangeIndication()
430 	 */
431 	@Override
removeRangeIndication()432 	public void removeRangeIndication() {
433 	}
434 
435 	/**
436 	 * @see ISourceViewer#getRangeIndication()
437 	 */
438 	@Override
getRangeIndication()439 	public IRegion getRangeIndication() {
440 		return null;
441 	}
442 
443 	/**
444 	 * @see ISourceViewer#setRangeIndication(int, int, boolean)
445 	 */
446 	@Override
setRangeIndication(int p0, int p1, boolean p2)447 	public void setRangeIndication(int p0, int p1, boolean p2) {
448 	}
449 
450 	/**
451 	 * @see ISourceViewer#setRangeIndicator(Annotation)
452 	 */
453 	@Override
setRangeIndicator(Annotation p0)454 	public void setRangeIndicator(Annotation p0) {
455 	}
456 
457 	/**
458 	 * @see ISourceViewer#getAnnotationModel()
459 	 */
460 	@Override
getAnnotationModel()461 	public IAnnotationModel getAnnotationModel() {
462 		return null;
463 	}
464 
465 	/**
466 	 * @see ISourceViewer#setDocument(IDocument, IAnnotationModel, int, int)
467 	 */
468 	@Override
setDocument(IDocument p0, IAnnotationModel p1, int p2, int p3)469 	public void setDocument(IDocument p0, IAnnotationModel p1, int p2, int p3) {
470 	}
471 
472 	/**
473 	 * @see ISourceViewer#setDocument(IDocument, IAnnotationModel)
474 	 */
475 	@Override
setDocument(IDocument p0, IAnnotationModel p1)476 	public void setDocument(IDocument p0, IAnnotationModel p1) {
477 	}
478 
479 	/**
480 	 * @see ISourceViewer#setAnnotationHover(IAnnotationHover)
481 	 */
482 	@Override
setAnnotationHover(IAnnotationHover p0)483 	public void setAnnotationHover(IAnnotationHover p0) {
484 	}
485 
486 	/**
487 	 * @see ISourceViewer#configure(SourceViewerConfiguration)
488 	 */
489 	@Override
configure(SourceViewerConfiguration p0)490 	public void configure(SourceViewerConfiguration p0) {
491 	}
492 }
493