基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding
2010-03-18 00:00:00 来源:WEB开发网ProjectionSupport
ProjectionSupport 是用来管理文本折叠的一些可配置功能的,比如哪些标注是 Summarizable 的。它必须安装到 ProjectionViewer 或者子类上,才能真正的提供文本折叠的支持。
实现文本折叠
本文计划为每条超过一行的语句加上文本折叠功能,经过了上面基本概念的介绍之后,让我们看看如何一步步的达到预定的目标。
底层支持
既然我要为每个超过一行的语句提供文本折叠功能,在底层我必须能够得到每一条语句的范围。方法很多,我采用的是遍历符号列表,相应的方法已经加入到了 TokenList 中,方法名叫 getLineRanges。
使用 ProjectionViewer
接着,要让 ExprViewer 从 ProjectionViewer 继承,而不是 SourceViewer,同时,需要安装 ProjectionSupport。在 ExprViewer 的 configure 方法中,我创建了 ProjectionSupport 并安装:
清单 1. 在 ExprViewer 中使用 ProjectionSupport
// projection support
ProjectionSupport projectionSupport = new ProjectionSupport(
this, new DefaultMarkerAnnotationAccess(), ColorManager.getInstance());
projectionSupport.
addSummarizableAnnotationType("org.eclipse.ui.workbench.texteditor.error");
projectionSupport.
addSummarizableAnnotationType("jtf.tutorial.annotation.undeclared.variable");
projectionSupport.install();
因为我的例子中有两种标注,因此我把它们都指定为 Summarizable 的。
标尺的变化
之前已经指出,文本折叠的标注是显示在另外一个标尺上的。所以至少需要两个标尺,一个显示错误标注,一个显示文本折叠标注。VerticalRuler 本身并不具备嵌套另一个标尺的能力,我们需要换用 CompositeRuler。CompositeRuler 中可以包含多列,这样就可以支持多个标尺了。修改的代码位于 JTFDialog 中:
更多精彩
赞助商链接