WEB开发网
开发学院软件开发Java 基于 JFace Text Framework 构建全功能代码编辑器... 阅读

基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding

 2010-03-18 00:00:00 来源:WEB开发网   
核心提示: ProjectionSupportProjectionSupport 是用来管理文本折叠的一些可配置功能的,比如哪些标注是 Summarizable 的,基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding(3),它必须安装到 Proj

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 中:

上一页  1 2 3 4 5 6  下一页

Tags:基于 JFace Text

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接