基于 JFace Text Framework 构建全功能代码编辑器: 第 5 部分:Text Decoration
2010-03-18 00:00:00 来源:WEB开发网AnnotationPreference
不要以为什么样的标注画成什么样子是规定死了的,实际上它们都是通过 Eclipse 的 Preference 系统来控制的。请打开 Eclipse 的 Preference 设置,找到 General->Editors->Text Editors->Annotations,你会发现原来这里都可以控制。而这些选项就被包装在了 AnnotationPreference 中。如果你想添加一种标注的配置信息,可以通过程序方式,也可以通过 org.eclipse.ui.editors.markerAnnotationSpecification 扩展点。
MarkerAnnotationPreferences
AnnotationPreference 包装的只是一种标注的配置信息,要得到全部的信息,可以通过 MarkerAnnotationPreferences 类。
实现文本装饰功能
我打算实现一个语法错误检查的功能,如果用户输入的源代码有问题,则把它标记出来。让我们一步步开始这个过程。
SourceViewerDecorationSupport
不得不说和文本装饰相关的概念、接口非常的多,而我列举的只是一些最重要的,还不是全部。这么复杂的功能,要直接写到 SourceViewer 里面去不免显的臃肿,所以 SourceViewer 通过 SourceViewerDecorationSupport 来支持文本装饰功能,避免了把所有代码都塞到一个类里面去。
我在本系列第一部分提过,之所以没有用 Eclipse 标准 editors 扩展点来做演示,是因为 Editor 本身为我们隐藏了一些东西,文本装饰的支持就是其中之一。现在我们手动添加文本装饰的支持,在 ExprViewer 中增加一个 configureDecorationSupport 方法并在 configure 方法中调用它。代码如下:
清单 1. 在 ExprViewer 中使用 SourceViewerDecorationSupport
protected void configureDecorationSupport()
{
// create support object
decorationSupport = new SourceViewerDecorationSupport(
this, null, new DefaultMarkerAnnotationAccess(), ColorManager.getInstance());
// add other annotation preference
MarkerAnnotationPreferences prefs = new MarkerAnnotationPreferences();
MarkerAnnotationPreferences.initializeDefaultValues(
Activator.getDefault().getPreferenceStore());
Iterator<Object> e = prefs.getAnnotationPreferences().iterator();
while(e.hasNext()) {
// add to support
decorationSupport.setAnnotationPreference((AnnotationPreference)e.next());
}
// install support
decorationSupport.install(Activator.getDefault().getPreferenceStore());
}
更多精彩
赞助商链接