内部编辑器和外部编辑器

org.eclipse.ui.editors

此扩展点用来将新编辑器添加至工作台。编辑器是工作台页面内的可视组件。它通常用来编辑或浏览文档或输入对象。要打开编辑器,用户通常将对 IFile 调用“打开”。当执行此操作时,将查阅工作台注册表以便为文件类型确定适当的编辑器,然后创建了编辑器类型的新实例。实际结果取决于编辑器的类型。工作台能够创建内部编辑器(它已紧密集成到工作台中)和外部编辑器(它是在单独的框架窗口中启动的)。这些编辑器之间还具有各种级别的集成。

在内部编辑器的情况下,可实现工作台窗口与编辑器部件之间的紧密集成。工作台菜单和工具栏预装入了许多公共操作(例如,剪切、复制和粘贴)。活动的部件(视图或编辑器)应会提供这些操作的实现。内部编辑器还可定义出现在工作台窗口中的新操作。仅当编辑器活动时,这些操作才会出现。

工作台与外部编辑器之间的集成则更为松散一些。在这种情况下,工作台可以启动编辑器但自此以后,除了通过文件系统之外它再没有任何办法确定外部编辑器的状态或与它合作。

<!ELEMENT extension (editor*)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT editor (contentTypeBinding*)>

<!ATTLIST editor

id               CDATA #REQUIRED

name             CDATA #REQUIRED

icon             CDATA #IMPLIED

extensions       CDATA #IMPLIED

class            CDATA #IMPLIED

command          CDATA #IMPLIED

launcher         CDATA #IMPLIED

contributorClass CDATA #IMPLIED

default          (true | false) "false"

filenames        CDATA #IMPLIED

symbolicFontName CDATA #IMPLIED

matchingStrategy CDATA #IMPLIED>


<!ELEMENT contentTypeBinding EMPTY>

<!ATTLIST contentTypeBinding

contentTypeId CDATA #REQUIRED>

说明包含的编辑器能理解给定的内容类型,并适合用来编辑该类型的文件。



以下是内部编辑器扩展定义的一个示例:

   

<extension point=

"org.eclipse.ui.editors"

>

<editor id=

"com.xyz.XMLEditor"

name=

"Fancy XYZ XML editor"

icon=

"./icons/XMLEditor.gif"

extensions=

"xml"

class=

"com.xyz.XMLEditor"

contributorClass=

"com.xyz.XMLEditorContributor"

symbolicFontName=

"org.eclipse.jface.textfont"

default=

"false"

>

</editor>

</extension>

如果使用 command 属性,则会将它视作将以与平台有关的方式执行的外部程序命令行。

如果使用的是 launcher 属性,则也会将编辑器视作外部程序。在这种情况下,指定的类必须实现 org.eclipse.ui.IEditorLauncher。将实例化启动程序,然后将调用 open(IFile file) 来启动编辑器。

如果使用了 class 属性,则工作台将假定它是内部编辑器,而指定的类必须实现 org.eclipse.ui.IEditorPart。最常见的做法是在定义新的编辑器类型时执行 subclass org.eclipse.ui.EditorPart。还需要定义 contributorClass 属性。指定的类必须实现 org.eclipse.ui.IEditorActionBarContributor,并且用来将新的操作添加至反映编辑器类型的功能的工作台菜单和工具栏。

在工作台中,可能具有多个特定类型的已打开的编辑器。例如,可能具有一个或多个已打开的 Java 编辑器。为了避免创建重复的操作和操作映像,编辑器概念已分成两种概念。IEditorActionBarContributor 负责创建操作。该编辑器负责操作实现。而且,添加程序供每个打开的编辑器共享。这种设计的结果是,一个或多个已打开的编辑器只具有一组操作。

添加程序将会把新的操作添加至反映编辑器类型的工作台菜单和工具栏。这些操作是共享的,且当调用它们时,它们对活动编辑器起作用。通过调用 IEditorActionBarContributor.setActiveEditor,活动编辑器被传递至添加程序。工作台窗口中的操作和主组的标识是在 org.eclipse.ui.IWorkbenchActionConstants 中定义的。这些应该用作添加新操作的参考点。顶级菜单是通过使用 path 属性的下列值来创建的:

仅当相关联的编辑器处于活动状态时,添加到这些路径中的操作和菜单才会显示出来。关闭编辑器时,将会除去菜单和操作。

工作台提供了“缺省文本编辑器”。最终用户产品可能包含其它编辑器,作为交货 bundle 的一部分。在该情况下,将使用上述语法将编辑器注册为扩展。