org.eclipse.ui.editors

编辑器是一个工作台部件,它允许用户编辑对象(通常是文件)。编辑器的运行方式类似于文件系统编辑工具, 只不过它们紧密集成到平台工作台 UI 中。编辑器总是与输入对象 (IEditorInput)相关联。可以将输入对象看作是要编辑的文档或文件。在用户保存在编辑器中所作的更改之前,不会提交这些更改。

只能打开一个编辑器以供工作台页面中的任何特定编辑器输入使用。例如,如果用户正在工作台中编辑 readme.txt, 则在同一透视图中再次打开它时将激活同一编辑器。(可以在不同的工作台窗口或透视图中的同一文件上来打开另一个编辑器)。然而,与视图不同,在一个工作台页面中, 可以为不同输入多次打开同一编辑器类型(例如,文本编辑器)。

插件使用工作台扩展点 org.eclipse.ui.editors 来将编辑器添加到工作台中。添加编辑器的插件必须在它们的 plugin.xml 文件中注册编辑器扩展以及编辑器的配置信息。某些编辑器信息(例如,实现以及工作台菜单和标号中使用的名称标号)类似于视图信息。另外,编辑器扩展指定编辑器理解的文件类型的文件扩展名或文件名模式。编辑器还可以定义 contributorClass 类, 当编辑器活动时,该类将操作添加到工作台菜单和工具栏中。

编辑器的接口是在 IEditorPart 中定义的, 但是插件可以选择扩展 EditorPart 类而不是根据暂存区来实现 IEditorPart

注意:还可以配置编辑器扩展来启动外部程序以便编辑文件, 或者提供用来调用预先存在的 Java 代码的启动板类来作为编辑器。在此讨论中,我们将重点放在实际上与工作台紧密集成, 并使用 IEditorPart 来实现的那些编辑器。

自述文件工具提供了定制编辑器,主要目的是将它自己的内容轮廓图页面添加到工作台轮廓视图。

编辑器扩展的配置定义为如下所示:

<extension
    point = "org.eclipse.ui.editors">
        <editor
            id = "org.eclipse.ui.examples.readmetool.ReadmeEditor"
            name="Readme File Editor"
            icon="icons/basic/obj16/editor.gif"
            class="org.eclipse.ui.examples.readmetool.ReadmeEditor"
            extensions="readme"
            contributorClass="org.eclipse.ui.examples.readmetool.ReadmeEditorActionBarContributor">
        </editor>
</extension>

我们看到了标识名称图标的熟悉配置标记。也有一些新内容 — contributorClass

编辑器操作添加程序

提供者类将与编辑器相关的操作添加到工作台菜单和工具栏中。它必须实现 IEditorActionBarContributor 接口。添加程序与编辑器本身是分开的,原因是任何给定的工作台页面都可以具有同一类型的多个编辑器。单个添加程序是由特定类型的所有编辑器共享的,而不是让一种编辑器类型的每个实例创建操作和图像。

ReadmeEditorActionBarContributor 中, 我们提供了三个操作:“Editor Action1”、“Editor Action2”和“Editor Action3”。 这些操作都是在构造器中设置的。

public ReadmeEditorActionBarContributor() {
    ...
    action1 = new EditorAction("&Editor Action1");
    action1.setToolTipText("Readme Editor Action1");
    action1.setImageDescriptor(ReadmeImages.EDITOR_ACTION1_IMAGE);
    ...
    action2 = new EditorAction("&Editor Action2");
    action2.setToolTipText("Readme Editor Action2");
    action2.setImageDescriptor(ReadmeImages.EDITOR_ACTION2_IMAGE);
    ...
    action3 = new EditorAction("&Editor Action3");
    action3.setToolTipText("Readme Editor Action3");
    action3.setImageDescriptor(ReadmeImages.EDITOR_ACTION3_IMAGE);
    ...
}

操作的名称和图标是在代码中而不是在 plugin.xml 中设置的。注意此信息与我们在视图操作的标记中看到的 viewActions 信息有多相似。这些操作是用代码设置的,原因是我们需要管理同一编辑器的不同实例之间的操作的共享。

既然它们是在构造器中创建的,所以操作与编辑器的任何特定实例无关。当编辑器变得活动,并且操作需要安装在工作台菜单和工具栏中时, 将把 setActiveEditor 消息发送至添加程序。提供者将编辑器操作与特定编辑器相连接。

public void setActiveEditor(IEditorPart editor) {
    ...
    action1.setActiveEditor(editor);
    action2.setActiveEditor(editor);
    action3.setActiveEditor(editor);
    ...
}

正如您所看到的,当自述文件编辑器活动时,操作就会显示在工作台菜单和工具栏中。

工作台菜单栏的自述文件编辑器添加项
工作台工具栏的自述文件编辑器添加项

仅当编辑器活动时,才会显示这些菜单项和工具栏项。可以象菜单和工具栏路径中描述的那样来指定菜单项和工具栏项的位置。

编辑器和内容轮廓图

自述文件编辑器本身 ReadmeEditor 并不是很复杂。它扩展 TextEditor 类, 因此,当编辑自述文件时,它可以为轮廓视图添加定制的内容轮廓图页面。它不会更改文本编辑器中的任何行为。

编辑器通常具有相应的内容轮廓图,这些轮廓图提供编辑器的内容的结构化视图, 并帮助用户浏览编辑器的内容。有关更多的详细信息,参见内容轮廓图

我们将在文本编辑器和 JFace 文本中考察文本编辑器的实现。