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