编辑器通常具有相应的内容轮廓图,它提供编辑器内容的结构化视图, 并帮助用户浏览编辑器的内容。
为此,工作台提供了标准的轮廓视图。工作台用户使用透视图 -> 显示视图菜单来控制何时可以看见此视图。
由于类属 TextEditor 不知道关于它的文本的结构的任何信息,因此,它不能为所需的轮廓视图提供行为。因此,下面显示的缺省轮廓视图不会执行操作。
插件可以扩展 TextEditor, 其唯一目的是将定制内容轮廓图页面添加到轮廓视图中。 在工作台自述文件工具示例中就使用了此方法。ReadmeEditor 重设了 TextEditor 中的一些方法,以提供它自己的轮廓图。
编辑器的轮廓图是在工作台请求类型为 IContentOutlinePage 的适配器时指定的。
public Object getAdapter(Class key) {
if (key.equals(IContentOutlinePage.class)) {
IEditorInput input = getEditorInput();
if (input instanceof IFileEditorInput) {
page = new
ReadmeContentOutlinePage(
((IFileEditorInput)input).getFile());
return page;
}
}
return super.getAdapter(key);
}
打开 ReadmeEditor(在 .readme 文件上)时, 就会显示相应的自述文件轮廓图(如果工作台用户在显示轮廓视图的话)。
内容轮廓图页面必须实现 IContentOutlinePage。此接口组合了通知选择更改侦听器 (ISelectionProvider) 的功能与在视图中(IPage) 中作为页面的行为。内容轮廓图通常是使用 JFace 查看器来实现的。内容轮廓图的缺省实现(ContentOutlinePage) 使用 JFace 树形查看器来显示轮廓的分层表示法。此表示法适合许多结构化轮廓图,包括 ReadmeContentOutlinePage。
ReadmeContentOutlinePage 的外观类似于下面显示的自述文件小节视图, 当我们实现自述文件视图扩展时就可以看到它。
实际上,存在的唯一区别就是轮廓图显示各节的分层视图, 而自述文件小节视图显示各节的平面列表。轮廓图的实现与视图的实现非常相似,这没有什么奇怪的。唯一的区别就是轮廓图使用树形查看器而不是列表查看器。
如果轮廓页面是由编辑器创建的,它传送编辑器在构造器中的输入元素。通常,可以直接将此输入传送到轮廓页面的查看器中,正如下面所执行的那样。
public void createControl(Composite parent) {
...
TreeViewer viewer = getTreeViewer();
viewer.setContentProvider(new WorkbenchContentProvider());
viewer.setLabelProvider(new WorkbenchLabelProvider());
viewer.setInput(getContentOutline(input));
...
}
树形查看器创建是从 ContentOutlinePage 中继承的。此处使用了在自述文件小节视图中使用的内容和标号提供程序, 内容的轮廓是使用构造视图的各个小节的 ReadmeModelFactory 来构造的。
private IAdaptable getContentOutline(IAdaptable input) {
return
ReadmeModelFactory.getInstance().getContentOutline(input);
}
这样全都齐了!
当然,轮廓图本身不会提供任何有意义的行为。选择各节时不会浏览编辑器中的文本!此内容轮廓图到底有哪些用处?您可以提出内容轮廓图不提供我们在小节视图中尚未看到过的任何行为(在分层表示法旁边)。不能只使用小节视图中的树形查看器而不提供不执行任何操作的轮廓图吗?
这只是一个示例!实际上,提供 ReadmeContentOutlinePage 的目的是说明可以如何为文本编辑器定制内容轮廓图。这并适合内容轮廓图本身。用户期望内容轮廓图帮助他们浏览编辑器内容, 因此,如果只想要显示内容的结构,则使用小节视图会更好。
可以在何处找到更有意义的内容轮廓图?查看 ContentOutlinePage 的子类及其相应的编辑器。较常见的模式是编辑器提供轮廓页面,并在它上面登记选择事件。当在内容轮廓中选择了几项时,编辑器会相应地更新它本身。
Java 源代码编辑器(在 JDT 中提供的)说明了有意义的内容轮廓图。Java 轮廓图提供了 Java 源代码的结构化视图, 并允许用户浏览相应的编辑器中的声明、方法和字段。当轮廓图报告选择事件时,Java 编辑器将更新它的垂直标尺, 以显示轮廓图中的元素在源代码中的位置。