我想在SourceViewer
中添加一些 SWT 控件。
目前我正在使用AnnotainerPainter
。它看起来很好,除了一件事,我不知道如何在删除注释时处理控件,因为AnnotationerPainter
没有提供任何信息至
关于它正在处理什么注释的ITextStyleStrategy
实例(在这种情况下,我可以将SWT控件添加到它,然后在注释将从AnnotationModel
中删除时将其删除)。
painter.addTextStyleStrategy("CONTROL", new AnnotationPainter.ITextStyleStrategy() {
private SourceViewer fViewer = ClassSourceViewer.this;
@Override
public void applyTextStyle(StyleRange styleRange, Color annotationColor) {
// TODO Auto-generated method stub
System.out.println(styleRange.start);
System.out.println(styleRange.length);
final Button button = new Button(fViewer.getTextWidget(), SWT.PUSH);
button.setFont(new Font(Display.getCurrent(), "Tahoma", 7, SWT.NORMAL));
button.setText("jmp to 24");
button.setBackground(fViewer.getTextWidget().getBackground());
button.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
button.dispose();
((AnnotationModel) fViewer.getAnnotationModel()).removeAllAnnotations();
}
});
button.pack();
button.setCursor(new Cursor(Display.getCurrent(), SWT.CURSOR_HAND));
Rectangle rect = button.getBounds();
int ascent = 2*rect.height/3;
int descent = rect.height - ascent;
button.setLocation(fViewer.getTextWidget().getLocationAtOffset(styleRange.start));
styleRange.metrics = new GlyphMetrics(ascent, descent,rect.width);
//styleRange.foreground = new Color(Display.getCurrent(), 0, 0, 0);
//styleRange.
//styleRange.background = new Color(Display.getCurrent(), 255, 255, 0);
}
});