2012-06-18 1 views
7

Ich fragte eine question before about VerticalRulers, mit diesem Hinweis habe ich eine zweite Spalte zum VerticalRuler hinzugefügt und versucht, einen Marker hinzufügen, aber der Marker erscheint immer auf der Standard-Spalte, aber nicht auf meiner. Ich fügte eine zweite Zeilennummernspalte hinzu, um mein Problem zu veranschaulichen. Wie ändere ich dieses Verhalten? Danke für jede Hilfe.Eclipse-Editor: Markierungen auf benutzerdefinierte Spalte der vertikalen Lineal

@Override 
protected IVerticalRuler createVerticalRuler(){ 
    IVerticalRuler ruler = super.createVerticalRuler(); 
    ruler2 = (CompositeRuler) ruler; 
    column1 = new AnnotationRulerColumn(100); 
    ruler2.addDecorator(0, column1); 
    ruler2.addDecorator(2, createLineNumberRulerColumn()); 
    column1.addAnnotationType("MARKER"); 
    return ruler; 
} 
public String check_line(){ 
    IEditorPart editor = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getActiveEditor(); 
    IFileEditorInput input = (IFileEditorInput)editor.getEditorInput() ; 
    IFile file = input.getFile(); 
    IResource res = (IResource) file; 
    try{ 
     IMarker m = res.createMarker(IMarker.MARKER); 
     m.setAttribute(IMarker.LINE_NUMBER,2); 
     m.setAttribute(IMarker.MESSAGE, "lala"); 
     m.setAttribute(IMarker.TEXT, "test"); 
     m.setAttribute(IMarker.PRIORITY, IMarker.PRIORITY_HIGH); 
     m.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_INFO); 
    } catch (CoreException e) { ... } 
    return "marker created"; 
} 

enter image description here

+0

Lassen Sie mich wissen, ob meine Antwort Ihnen nicht hilft oder Sie immer noch Probleme haben ... –

Antwort

3

Sie müssen nur einen anderen Konstruktor für AnnotationRulerColumn verwenden:

AnnotationRulerColumn(int width, IAnnotationAccess annotationAccess) 

Sie DefaultMarkerAnnotationAccess für das Argument verwenden können IAnnotationAccess:

protected IVerticalRuler createVerticalRuler(){ 
    IVerticalRuler ruler = super.createVerticalRuler(); 
    CompositeRuler ruler2 = (CompositeRuler) ruler; 
    column1 = new AnnotationRulerColumn(100, new DefaultMarkerAnnotationAccess()); 
    ruler2.addDecorator(0, column1); 
    ruler2.addDecorator(2, createLineNumberRulerColumn()); 
    column1.addAnnotationType("MARKER"); 
    return ruler; 
} 

Ich nehme an, Sie haben einen Annotationstyp wit definiert h den Namen "MARKER" für Ihren Marker. Wenn nicht, vergewissern Sie sich, dass Sie den Namen eines Anmerkungstyps, NICHT den Markierungstyp, für column1.addAnnotationType("MARKER"); verwenden. Sie können einen eigenen Anmerkungstyp definieren und ihn einem Markierertyp mit dem Erweiterungspunkt Annotation Types zuordnen.

Ihr Marker/Anmerkung sollte dann auf Ihrem eigenen vertikalen Lineal angezeigt werden.

+0

Sorry für die Antwort, dass spät, aber ich war nur frustriert, so habe ich verschiedene Arbeit letzte 2 Wochen. Heute habe ich es erneut versucht und ich bin froh, dass es mit dem DefaultMarkerAnnotationAccess funktioniert. Das Problem besteht jetzt darin, dass es myMarker zweimal in der neuen Spalte und in der ursprünglichen Spalte erstellt. – eactor

+0

Das Problem war der Annotation-Typ myMarker, der von der Super-Klasse "org.eclipse.ui.workbench.textetion.warning" geerbt wurde und dazu führte, dass der Marker zusätzlich in der Standart-Spalte erschien – eactor