Skip to main content


Eclipse Community Forums
Forum Search:

Search      Help    Register    Login    Home
Home » Eclipse Projects » Eclipse Platform » Annotation
Annotation [message #329586] Sun, 29 June 2008 16:22 Go to next message
Eclipse UserFriend
Originally posted by: fucillax.libero.it

Hi,
I've made my own text editor plug-in, but how do I add red squiggles to
some text of the document of the editor?

I try with this code:


package bgleditor.editors;

import java.io.FileOutputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IResource;
import org.eclipse.jface.action.IMenuManager;
import org.eclipse.jface.action.Separator;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.preference.IPreferenceStore;
import org.eclipse.jface.text.DefaultInformationControl;
import org.eclipse.jface.text.Document;
import org.eclipse.jface.text.IDocument;
import org.eclipse.jface.text.IInformationControl;
import org.eclipse.jface.text.IInformationControlCreator;
import org.eclipse.jface.text.IRegion;
import org.eclipse.jface.text.ITextHover;
import org.eclipse.jface.text.ITextViewer;
import org.eclipse.jface.text.ITextViewerExtension;
import org.eclipse.jface.text.Position;
import org.eclipse.jface.text.presentation.IPresentationReconciler;
import org.eclipse.jface.text.presentation.PresentationReconciler;
import org.eclipse.jface.text.source.Annotation;
import org.eclipse.jface.text.source.AnnotationBarHoverManager;
import org.eclipse.jface.text.source.AnnotationModel;
import org.eclipse.jface.text.source.AnnotationPainter;
import org.eclipse.jface.text.source.AnnotationRulerColumn;
import org.eclipse.jface.text.source.CompositeRuler;
import org.eclipse.jface.text.source.IAnnotationAccess;
import org.eclipse.jface.text.source.IAnnotationAccessExtension;
import org.eclipse.jface.text.source.IAnnotationHover;
import org.eclipse.jface.text.source.ISharedTextColors;
import org.eclipse.jface.text.source.ISourceViewer;
import org.eclipse.jface.text.source.IVerticalRuler;
import org.eclipse.jface.text.source.ImageUtilities;
import org.eclipse.jface.text.source.OverviewRuler;
import org.eclipse.jface.text.source.SourceViewer;
import org.eclipse.jface.text.source.SourceViewerConfiguration;
import org.eclipse.jface.text.source.projection.ProjectionAnnotatio nModel;
import org.eclipse.jface.text.source.projection.ProjectionSupport;
import org.eclipse.jface.text.source.projection.ProjectionViewer;
import org.eclipse.jface.util.IPropertyChangeListener;
import org.eclipse.jface.util.PropertyChangeEvent;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.GC;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Canvas;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.console.ConsolePlugin;
import org.eclipse.ui.console.IConsole;
import org.eclipse.ui.console.IConsoleManager;
import org.eclipse.ui.console.MessageConsole;
import org.eclipse.ui.console.MessageConsoleStream;
import org.eclipse.ui.editors.text.EditorsUI;
import org.eclipse.ui.editors.text.TextEditor;
import org.eclipse.ui.part.FileEditorInput;
import org.eclipse.ui.texteditor.ChainedPreferenceStore;
import org.eclipse.ui.texteditor.IDocumentProvider;
/*import org.eclipse.ui.texteditor.ITextEditorActionDefinitionIds;*/
import org.eclipse.ui.texteditor.SourceViewerDecorationSupport;
/*import org.eclipse.ui.views.contentoutline.IContentOutlinePage;*/
import bg.BGModel;
import bg.language.BGCompileOutput;
import bg.language.BGCompiler;
import bgleditor.BglPlugin;
/*import org.emonic.base.InfoStructure.CSharpEditorExamineJob;*/
/*import bgleditor.actions.DefaultBglSourceAction;
import bgleditor.actions.DefaultBglSourceDelegate;*/
import bgleditor.preferences.DefaultPrefsSetter;
/*import org.emonic.base.views.EMonoOutlinePage;*/

/**
* This class represents the CSharpEditor
*/
public class BglEditor extends TextEditor implements
ISelectionChangedListener // , IPropertyChangeListener
{
private ColorManager colorManager;
/*private EMonoCSharpFolder fFolder;*/
private ISourceViewer sourceViewer;
private IDocument document;
//private IdleTimer idleTimer;
private ProjectionSupport projectionSupport;
private BglConfiguration configuration;
/*protected EMonoOutlinePage page;*/
protected BglEditorExamineJob examinJob;
private BglBracketInserter bracketInserter;
protected BglBracketMatcher bracketMatcher = new BglBracketMatcher();
/*private TaskTracker taskTracker;*/
private ArrayList menuActionName;
private ArrayList menuActionSection;
private IWorkbenchWindow window;
private boolean compileWhenSave = false;
private String pathOfOutput = "";

/**
* ************************************************************ ****
* Modifiche 29 giugno 2008
*/
public static String ERROR_TYPE = "error.type";
public static Image ERROR_IMAGE;
public static final RGB ERROR_RGB = new RGB(255, 0, 0);
private AnnotationModel fAnnotationModel = new AnnotationModel();
private Composite parentComposite = null;

/**
* ************************************************************ ****
*/

/**
* The property change listener gets notified if the preferences for this
plug-in change
*/
private final IPropertyChangeListener prefChangeListener = new
IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(DefaultPrefsSetter.QUOTESCOMPLET ION) ||
event.getProperty().equals(DefaultPrefsSetter.BRACESCOMPLETI ONATENTER)
||
event.getProperty().equals(DefaultPrefsSetter.BRACESCOMPLETI ON) ||
event.getProperty().equals(DefaultPrefsSetter.BRACKETCOMPLET ION) ||
event.getProperty().equals(DefaultPrefsSetter.COMPILEWHENSAV E) ||
event.getProperty().equals(DefaultPrefsSetter.PATHOUTPUT)) {

// update completions of bracket inserter
bracketInserter.setCloseBracketsEnabled(getPreferenceStore() .getBoolean(
DefaultPrefsSetter.BRACKETCOMPLETION));
bracketInserter.setCloseBracesEnabled(
getPreferenceStore().getBoolean(DefaultPrefsSetter.BRACESCOM PLETION)
&& !
getPreferenceStore().getBoolean(DefaultPrefsSetter.BRACESCOM PLETIONATENTER));
bracketInserter.setCloseStringsEnabled(getPreferenceStore(). getBoolean(
DefaultPrefsSetter.QUOTESCOMPLETION));

compileWhenSave =
BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.COMPILEWHENSAVE);
pathOfOutput =
BglPlugin.getDefault().getPreferenceStore().getString(Defaul tPrefsSetter.PATHOUTPUT);

// get the BglAutoIndentStrategy via our source viewer configuration
and
// call its setBracesCompletion() method
((BglAutoIndentStrategy)configuration.getAutoEditStrategies(
sourceViewer,IDocument.DEFAULT_CONTENT_TYPE)[0]).setBracesCo mpletion(
BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.BRACESCOMPLETIONATENTER)
&&
BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.BRACESCOMPLETION)
);
}
}
};


/**
* Constructor
*/
public BglEditor() {
super();
examinJob = new BglEditorExamineJob(this,"ExamineEditor");
colorManager = new ColorManager();
configuration = new BglConfiguration(colorManager,this);
setSourceViewerConfiguration(configuration);
setDocumentProvider(new BglDocumentProvider());
IPreferenceStore generalTextStore = EditorsUI.getPreferenceStore();
ChainedPreferenceStore preferenceStore = new ChainedPreferenceStore(new
IPreferenceStore[] {BglPlugin.getDefault().getPreferenceStore(),
generalTextStore});
setPreferenceStore(preferenceStore);
compileWhenSave =
BglPlugin.getDefault().getPreferenceStore().getBoolean(Defau ltPrefsSetter.COMPILEWHENSAVE);
pathOfOutput =
BglPlugin.getDefault().getPreferenceStore().getString(Defaul tPrefsSetter.PATHOUTPUT);
}


/**
* Is called on changes in the preferences. Triggers update of editor
colors
* on changes in syntax coloring.
* @param event The event containing the preference changes
*/
protected boolean affectsTextPresentation(PropertyChangeEvent event)
{
if (event.getProperty().equals(DefaultPrefsSetter.STRINGCOLOR) ||
event.getProperty().equals(DefaultPrefsSetter.STRINGBOLD) ||
event.getProperty().equals(DefaultPrefsSetter.COMMENTBOLD) ||
event.getProperty().equals(DefaultPrefsSetter.COMMENTCOLOR) ||
event.getProperty().equals(DefaultPrefsSetter.CALCBOLD) ||
event.getProperty().equals(DefaultPrefsSetter.CALCCOLOR) ||
event.getProperty().equals(DefaultPrefsSetter.KEYWORDBOLD) ||
event.getProperty().equals(DefaultPrefsSetter.KEYWORDCOLOR)) {

// this will update the tokens of the scanners - must be done before
configuration.updateScannerColors();
// this will kick the scanner
return true;
}
return false;
}


/**
* @see org.eclipse.ui.editors.text.TextEditor#dispose()
*/
public void dispose() {
if (colorManager != null) colorManager.dispose();

if (examinJob != null) examinJob.cancel();

//actions
/*String[] actionIds = DefaultBglSourceDelegate.getEditorActions();
for (int i = 0; i < actionIds.length; i++) {
IAction action = getAction(actionIds[i]);
if (action instanceof DefaultBglSourceAction)
((DefaultBglSourceAction) action).dispose();
}*/
if (sourceViewer instanceof ITextViewerExtension)
((ITextViewerExtension)
sourceViewer).removeVerifyKeyListener(bracketInserter);
// remove property listener of preference store
getPreferenceStore().removePropertyChangeListener(prefChange Listener);
super.dispose();
}




/**
* @see
org.eclipse.ui.texteditor.AbstractTextEditor#rulerContextMen uAboutToShow(IMenuManager)
*/
public void rulerContextMenuAboutToShow(IMenuManager menu) {
super.rulerContextMenuAboutToShow(menu);
// We dont use it quite now, but may be we add some ations to the ruler
menu some time

// ViewerActionBuilder builder = new ViewerActionBuilder();
// builder.readViewerContributions("#CSharpRulerContext",
// getSelectionProvider(), this);
// builder.contribute(menu, null, true);
}


/**
* Returns the ExamineJob that is responsible for various jobs (scanning,
parsing, ...)
* @return The CSharpEditorExamineJob instance of this editor
*/
public BglEditorExamineJob getExamineJob(){
return examinJob;
}


/**
* @see org.eclipse.ui.texteditor.AbstractTextEditor#createActions()
*/
protected void createActions() {
super.createActions();
IDocumentProvider provider = getDocumentProvider();
document = provider.getDocument(getEditorInput());
sourceViewer = getSourceViewer();
sourceViewer.setDocument(document);



// create BracketInserter; do it here because we need the sourceViewer
bracketInserter = new BglBracketInserter(this, sourceViewer);
bracketInserter.setCloseBracketsEnabled(getPreferenceStore() .getBoolean(DefaultPrefsSetter.BRACKETCOMPLETION));
bracketInserter.setCloseBracesEnabled(getPreferenceStore().g etBoolean(DefaultPrefsSetter.BRACESCOMPLETION)
&&
!getPreferenceStore().getBoolean(DefaultPrefsSetter.BRACESCO MPLETIONATENTER)
);
bracketInserter.setCloseStringsEnabled(getPreferenceStore(). getBoolean(DefaultPrefsSetter.QUOTESCOMPLETION));


}

/**
* @see
org.eclipse.ui.texteditor.AbstractTextEditor#editorContextMe nuAboutToShow(IMenuManager)
*/
public void editorContextMenuAboutToShow(IMenuManager menu) {
super.editorContextMenuAboutToShow(menu);
Separator s = new Separator();
menu.appendToGroup("additions", s);
if (menuActionName != null && menuActionSection != null) {
for (int i = 0; i < menuActionName.size(); i++) {
addAction(menu, (String) menuActionSection.get(i),
(String) menuActionName.get(i));
}
}
}







/**
* @see org.eclipse.ui.editors.text.TextEditor#getAdapter(Class)
*/
public Object getAdapter(Class adapter) {

if (ProjectionAnnotationModel.class.equals(adapter)) {
if (projectionSupport != null) {
// forward request
Object result = projectionSupport.getAdapter(getSourceViewer(),
adapter);
if (result != null) {
return result;
}
}
}

// Adapter for the Outline view
/*if (adapter.equals(IContentOutlinePage.class)) {
if (page == null)
page = new EMonoOutlinePage(this, getSourceViewer());
//this.registerIdleListener(page);
//page.addSelectionChangedListener(this);
return page;
}*/
return super.getAdapter(adapter);
}


/**
* @see
org.eclipse.ui.texteditor.AbstractTextEditor#createPartContr ol(Composite)
*/
public void createPartControl(Composite parent) {

super.createPartControl(parent);
ProjectionViewer viewer = (ProjectionViewer) getSourceViewer();
projectionSupport = new ProjectionSupport(viewer,
getAnnotationAccess(), getSharedColors());
projectionSupport
.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error ");
projectionSupport
.addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.warning ");
projectionSupport.install();
viewer.doOperation(ProjectionViewer.TOGGLE);

// Verify key listener for Bracket Inserter
if (sourceViewer instanceof ITextViewerExtension) {
((ITextViewerExtension)
sourceViewer).prependVerifyKeyListener(bracketInserter);
}

// listen for property changes
getPreferenceStore().addPropertyChangeListener(prefChangeLis tener);
parentComposite = parent;
}


/**
* @see
org.eclipse.ui.texteditor.AbstractTextEditor#createSourceVie wer(Composite,
IVerticalRuler, int)
*/
protected final ISourceViewer createSourceViewer(Composite parent,
IVerticalRuler ruler, int styles) {
// fAnnotationAccess = createAnnotationAccess();
fOverviewRuler = createOverviewRuler(getSharedColors());
ISourceViewer sourceViewer = new BglSourceViewer(parent, ruler,
fOverviewRuler, isOverviewRulerVisible(), styles);
// ensure source viewer decoration support has been created and
// configured
getSourceViewerDecorationSupport(sourceViewer);
return sourceViewer;
}


protected void
configureSourceViewerDecorationSupport(SourceViewerDecoratio nSupport
support) {
support.setCharacterPairMatcher(bracketMatcher);
support.setMatchingCharacterPainterPreferenceKeys(DefaultPre fsSetter.BRACKETMATCHING,
DefaultPrefsSetter.BRACKETMATCHINGCOLOR);
super.configureSourceViewerDecorationSupport(support);
}

protected void editorSaved(){
super.editorSaved();
IResource resource = (IResource)
getEditorInput().getAdapter(IResource.class);
/*if (resource != null) {
taskTracker.checkForTasks(document, resource);
}*/

/*****************************
******* Modifiche ***********
*****************************
*/
if (compileWhenSave) {
MessageConsole console = findConsole("BusinessGame compiler");
MessageConsoleStream out = console.newMessageStream();

String s = eseguiExe();
if (s.equals("Editor nullo")) {
MessageDialog.openInformation(
window.getShell(),
"BGL Plug-in",
"Nessun modello correntemente aperto!!!");
}
else if (s.equals("Estensione non corretta")) {
MessageDialog.openInformation(
window.getShell(),
"BGL Plug-in",
"Il file che si desidera compilare non e' un \"BGL model\"!!!");
}
else {
out.println(s);
}
}
prova();
}


/**
* Returns the source viewer
* @return the source viewer
*/
public ISourceViewer getViewer(){
return sourceViewer;
}


public void selectionChanged(SelectionChangedEvent event) {
// Nothing to do there in the moment

}

private MessageConsole findConsole(String name)
{
ConsolePlugin plugin = ConsolePlugin.getDefault();
IConsoleManager conMan = plugin.getConsoleManager();
MessageConsole console = new MessageConsole(name, null);
console.activate();
conMan.addConsoles(new IConsole[]{console});
return console;
}

public String eseguiExe()
{
String s = "";
IWorkbench wb = PlatformUI.getWorkbench();
IWorkbenchWindow win = wb.getActiveWorkbenchWindow();
IWorkbenchPage page = win.getActivePage();
IEditorPart editor = page.getActiveEditor();
if (editor == null) {
return "Editor nullo";
}
else {
IFile original = ((FileEditorInput)editor.getEditorInput()).getFile();
if (!(original.getFileExtension().equals("bgl"))) return "Estensione
non corretta";
s += original.getLocation().toString();
try
{
BGCompileOutput out = BGCompiler.compile(s);
s = out.getOutput();
if (out.success()) {
// Crea il modello
BGModel modello = out.getBGModel();
// String nomeProgetto = original.getProject().getName();
if (pathOfOutput.equals("")) {
IProject progetto = original.getProject();
String percorsoProgetto = progetto.getLocation().toString();
int pos = original.getName().lastIndexOf(".");
String nome = original.getName().substring(0, pos);
String fileName = percorsoProgetto + "/"+nome+".bgm";
FileOutputStream f = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(f);
oos.writeObject(modello);
oos.flush();
oos.close();
}
else {
int pos = original.getName().lastIndexOf(".");
String nome = original.getName().substring(0, pos);
String fileName = pathOfOutput + "\\"+nome+".bgm";
FileOutputStream f = new FileOutputStream(fileName);
ObjectOutputStream oos = new ObjectOutputStream(f);
oos.writeObject(modello);
oos.flush();
oos.close();
}
}
}
catch(Throwable e)
{
e.printStackTrace();
s = "Eccezione nella compilazione";
}
return s;
}
}

/**
************************************************************ *************
********************** Modifiche 29 giugno 2008 *************************
************************************************************ *************
*/

private void prova() {
ERROR_IMAGE = new Image(Display.getDefault(), "icons\\sample.gif");

IAnnotationAccess fAnnotationAccess = new AnnotationMarkerAccess();

ColorCache cc = new ColorCache();

// rulers
CompositeRuler fCompositeRuler = new CompositeRuler();
OverviewRuler fOverviewRuler = new
OverviewRuler(fAnnotationAccess, 12, cc);
AnnotationRulerColumn annotationRuler = new
AnnotationRulerColumn(fAnnotationModel, 16, fAnnotationAccess);
fCompositeRuler.setModel(fAnnotationModel);
fOverviewRuler.setModel(fAnnotationModel);

// annotation ruler is decorating our composite ruler
fCompositeRuler.addDecorator(0, annotationRuler);

// add what types are show on the different rulers
annotationRuler.addAnnotationType(ERROR_TYPE);
fOverviewRuler.addAnnotationType(ERROR_TYPE);
fOverviewRuler.addHeaderAnnotationType(ERROR_TYPE);
// set what layer this type is on
fOverviewRuler.setAnnotationTypeLayer(ERROR_TYPE, 3);
// set what color is used on the overview ruler for the type
fOverviewRuler.setAnnotationTypeColor(ERROR_TYPE, new
Color(Display.getDefault(), ERROR_RGB));

// source viewer
SourceViewer sv = new SourceViewer(parentComposite,
fCompositeRuler, fOverviewRuler, true, SWT.MULTI | SWT.V_SCROLL |
SWT.H_SCROLL);
sv.setDocument(document, fAnnotationModel);

// hover manager that shows text when we hover
AnnotationBarHoverManager fAnnotationHoverManager = new
AnnotationBarHoverManager(fCompositeRuler, sv, new AnnotationHover(), new
AnnotationConfiguration());
fAnnotationHoverManager.install(annotationRuler.getControl() );

// to paint the annotations
AnnotationPainter ap = new AnnotationPainter(sv,
fAnnotationAccess);
ap.addAnnotationType(ERROR_TYPE);
ap.setAnnotationTypeColor(ERROR_TYPE, new
Color(Display.getDefault(), ERROR_RGB));

// this will draw the squigglies under the text
sv.addPainter(ap);

sv.configure(new CodeViewerConfiguration(cc));

// some misspelled text
document.set("Here's some texst so that we have somewhere to show
an error\ndsfdgjhhgkgkjhfdgkjhkjgfkd");

// add an annotation
ErrorAnnotation errorAnnotation = new ErrorAnnotation(1, "Learn
how to spell \"text!\"");
ErrorAnnotation errorAnnotation2 = new ErrorAnnotation(2, "Learn
how to spell \"text!\"");

// lets underline the word "texst"
fAnnotationModel.addAnnotation(errorAnnotation, new Position(5,
12));
fAnnotationModel.addAnnotation(errorAnnotation2, new Position(54,
7));
}

class AnnotationConfiguration implements IInformationControlCreator {
public IInformationControl createInformationControl(Shell shell) {
return new DefaultInformationControl(shell);
}
}

class ColorCache implements ISharedTextColors {
public Color getColor(RGB rgb) {
return new Color(Display.getDefault(), rgb);
}

public void dispose() {
}
}

// santa's little helper
class AnnotationMarkerAccess implements IAnnotationAccess,
IAnnotationAccessExtension {
public Object getType(Annotation annotation) {
return annotation.getType();
}

public boolean isMultiLine(Annotation annotation) {
return true;
}

public boolean isTemporary(Annotation annotation) {
return !annotation.isPersistent();
}

public String getTypeLabel(Annotation annotation) {
if (annotation instanceof ErrorAnnotation)
return "Errors";

return null;
}

public int getLayer(Annotation annotation) {
if (annotation instanceof ErrorAnnotation)
return ((ErrorAnnotation)annotation).getLayer();

return 0;
}

public void paint(Annotation annotation, GC gc, Canvas canvas,
Rectangle bounds) {

ImageUtilities.drawImage(((ErrorAnnotation)annotation).getIm age(), gc,
canvas, bounds, SWT.CENTER, SWT.TOP);
}

public boolean isPaintable(Annotation annotation) {
if (annotation instanceof ErrorAnnotation)
return ((ErrorAnnotation)annotation).getImage() != null;

return false;
}

public boolean isSubtype(Object annotationType, Object
potentialSupertype) {
if (annotationType.equals(potentialSupertype))
return true;

return false;

}

public Object[] getSupertypes(Object annotationType) {
return new Object[0];
}
}

// source viewer configuration
class CodeViewerConfiguration extends SourceViewerConfiguration {
private ColorCache manager;

public CodeViewerConfiguration(ColorCache manager) {
this.manager = manager;
}

public IPresentationReconciler
getPresentationReconciler(ISourceViewer sourceViewer) {
PresentationReconciler reconciler = new
PresentationReconciler();
return reconciler;
}

public IAnnotationHover getAnnotationHover(ISourceViewer
sourceViewer) {
return new AnnotationHover();
}
}

// annotation hover manager
class AnnotationHover implements IAnnotationHover, ITextHover {
public String getHoverInfo(ISourceViewer sourceViewer, int
lineNumber) {
Iterator ite = fAnnotationModel.getAnnotationIterator();

ArrayList all = new ArrayList();

while (ite.hasNext()) {
Annotation a = (Annotation) ite.next();
if (a instanceof ErrorAnnotation) {
all.add(((ErrorAnnotation)a).getText());
}
}

StringBuffer total = new StringBuffer();
for (int x = 0; x < all.size(); x++) {
String str = (String) all.get(x);
total.append(" " + str + (x == (all.size()-1) ? "" :
"\n"));
}

return total.toString();
}

public String getHoverInfo(ITextViewer textViewer, IRegion
hoverRegion) {
return null;
}

public IRegion getHoverRegion(ITextViewer textViewer, int offset) {
return null;
}
}

// one error annotation
class ErrorAnnotation extends Annotation {
private IMarker marker;
private String text;
private int line;
private Position position;

public ErrorAnnotation(IMarker marker) {
this.marker = marker;
}

public ErrorAnnotation(int line, String text) {
super(ERROR_TYPE, true, null);
this.marker = null;
this.line = line;
this.text = text;
}

public IMarker getMarker() {
return marker;
}

public int getLine() {
return line;
}

public String getText() {
return text;
}

public Image getImage() {
return ERROR_IMAGE;
}

public int getLayer() {
return 3;
}

public String getType() {
return ERROR_TYPE;
}

public Position getPosition() {
return position;
}

public void setPosition(Position position) {
this.position = position;
}
}
}



but without result....


Please, help me!!!
Thanks very much....

Marco
Re: Annotation [message #329594 is a reply to message #329586] Sun, 29 June 2008 17:37 Go to previous message
Walter Harley is currently offline Walter HarleyFriend
Messages: 847
Registered: July 2009
Senior Member
"Marco Fucilla" <fucillax@libero.it> wrote in message
news:ee13421ca8646634527340d0d438a630$1@www.eclipse.org...
> Hi,
> I've made my own text editor plug-in, but how do I add red squiggles to
> some text of the document of the editor?
>
> I try with this code:
>
> [700+ loc snipped]
> but without result....
>
>
> Please, help me!!!
> Thanks very much....


Hi, Marco.

Please read http://catb.org/~esr/faqs/smart-questions.html .
Previous Topic:Re: Eclipse for Vista 64-bit
Next Topic:Empty problems view (3.4)
Goto Forum:
  


Current Time: Thu Jul 18 01:15:43 GMT 2024

Powered by FUDForum. Page generated in 0.03399 seconds
.:: Contact :: Home ::.

Powered by: FUDforum 3.0.2.
Copyright ©2001-2010 FUDforum Bulletin Board Software

Back to the top