2012-06-18 14 views
7

Pedí un question before about VerticalRulers, con esta sugerencia agregué una segunda Columna al VerticalRuler e intenté agregarle un Marcador, pero el Marcador siempre aparece en la Columna estándar, pero no en el mío Agregué una segunda columna de número de línea para ilustrar mi problema. ¿Cómo cambio este comportamiento? Gracias por cualquier ayuda.Editor de Eclipse: mostrar marcadores en la columna personalizada de la regla vertical

@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

Avíseme, si mi respuesta no lo ayuda o si todavía tiene problemas ... –

Respuesta

3

Sólo tiene que utilizar un constructor diferente para AnnotationRulerColumn:

AnnotationRulerColumn(int width, IAnnotationAccess annotationAccess) 

Usted puede utilizar DefaultMarkerAnnotationAccess para el argumento 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; 
} 

supongo que tienes definió un tipo de anotación ingenio h el nombre "MARCADOR" para su marcador. De lo contrario, asegúrese de usar el nombre de un tipo de anotación, NO tipo de marcador, para column1.addAnnotationType("MARKER");. Puede definir su propio tipo de anotación y asignarlo a un tipo de marcador con el punto de extensión Annotation Types.

Su marcador/anotación debe mostrarse en su propia regla vertical.

+0

Lamento haber respondido tan tarde, pero estaba frustrado, así que hice diferentes trabajos las últimas 2 semanas. Hoy lo intenté de nuevo y estoy feliz de que funcione con DefaultMarkerAnnotationAccess. El problema ahora es que crea myMarker dos veces en la nueva Columna y en la original. – eactor

+0

El problema era el tipo de anotación que myMarker heredó de la super clase "org.eclipse.ui.workbench.texteditor.warning" que hizo que el marcador apareciera en la columna estándar además – eactor

Cuestiones relacionadas