显示自定义悬停内的链接(Eclipse插件开发)

时间:2017-10-02 11:03:53

标签: eclipse-plugin hover eclipse-rcp eclipse-cdt

我在CDT编辑器中有一个自定义悬停(请参阅链接的SO问题),现在我想在我的IAnnotationHover悬停中显示链接:

public class MyAwesomeHover implements IAnnotationHover {
    @Override
    public String getHoverInfo(ISourceViewer sw, int ln) {
        return "<a href='www.stackoverflow.com'>so</a>"
    }   
}

不幸的是链接没有显示 - 悬停窗口只显示简单的文本(即&#34; so&#34;)。我试过的其他HTML元素工作正常(ul,li,p,font ...)。有人可以帮我吗?

1 个答案:

答案 0 :(得分:1)

正如评论中所提到的,RevisionHover是一个很好的起点。神奇的是实现IAnnotationHoverExtension和创建自定义AbstractReusableInformationControlCreator。我发布了一个代码片段,其中包含适合我的解决方案。

public class MyHover implements IAnnotationHover, IAnnotationHoverExtension {
...
    @Override
    public IInformationControlCreator getHoverControlCreator() {
        return new MyCreator();
    }
...
    @Override
    public Object getHoverInfo(ISourceViewer sv, ILineRange lr, int vnl) {
        return "<a href='www.stackoverflow.com'>so</a>";
    }
...
   private final class MyCreator extends AbstractReusableInformationControlCreator {

        protected IInformationControl doCreateInformationControl(Shell parent) {

                BrowserInformationControl control = 
                                    new BrowserInformationControl(
                                        parent, 
                                        JFaceResources.DIALOG_FONT, 
                                        false);
                control.addLocationListener(
                                    new LocationAdapter() {
                                        @Override
                                        public void changing(LocationEvent ev) {
                                            if (ev.location.startsWith("file:")) {
                                                // !This opens the link!
                                                openUrl(ev.location)    
                                            }
                                        }
                                    });
                return control;
        }
    }
}