我在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 ...)。有人可以帮我吗?
答案 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;
}
}
}