基于 JFace Text Framework 构建全功能代码编辑器: 第 11 部分:Text Folding
2010-03-18 00:00:00 来源:WEB开发网Text Folding
Text Folding(文本折叠)其实在 Eclipse 2.1 的时候就已经出现了苗头,在 Eclipse 3.0 之后,文本折叠的架构被重新设计了,开始逐渐变的实用。我们先来了解一下JTF为了文本折叠做了哪些工作。
ProjectionViewer
SourceViewer 本身不支持文本折叠,所以 JTF 添加了一个 ProjectionViewer 专门支持文本折叠,它是 SourceViewer 的子类。
主从文档结构
JTF 是不可能神奇的知道哪些文本是可以折叠的,这些事情都得有人告诉它。在有文本折叠的情况下,我们能看到的只是一部分文字,但是创建的 IDocument 实例里面是包含了所有文字的,怎么才能知道哪些不该显示?所以 JTF 引入了一个 Master/Slave(主/从)文档架构,主文档就是包含了所有内容的文档,而从文档则只包含用户能看得见的内容,从文档的实现类是 ProjectionDocument。既然存在两个文档,那么就带了同步的问题,所以又引入了 ProjectionDocumentManager 来维护主从文档的同步。需要注意的是,ProjectionDocument 不能直接创建,必须通过 ProjectionDocumentManager 的 createSlaveDocument 方法来创建。
好消息是:我们在实现文本折叠时不用关心什么主从文档架构,因为这些都被JTF包装好了,在上层,我们看到的只有一个文档。
ProjectionAnnotation
在 Java 编辑器中可以看到,可以折叠的地方旁边都有个小图标,它显示了当前的折叠状态,并且可以点击它改变折叠状态。从界面上看,你应该能想到:这不就是标注吗?没错,确实是标注,只不过这个标注是显示在另外一条标尺上的,和显示错误标注的标尺不同罢了。文本折叠标注的实现类是 ProjectionAnnotation,在实现文本折叠的过程中,很重要的一部分工作就是及时刷新 ProjectionAnnotation。
更多精彩
赞助商链接