JFace SourceViewer - 小部件的AnnotationPainter

时间:2014-11-07 21:59:01

标签: eclipse swt jface

我想在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);


            }
        });

0 个答案:

没有答案