编辑器菜单、工具栏和操作

org.eclipse.ui.editorActions

此扩展点用来将操作添加到其它插件注册的编辑器的菜单和工具栏中。

编辑器的初始添加项集是由另一扩展点(org.eclipse.ui.editors)定义的。同一编辑器类型的所有实例创建并共享一组操作。当调用它时,这些操作就在活动编辑器上起作用。此扩展点沿用同一模式。每个操作扩展都由同一编辑器类型的所有实例创建并共享。要求操作类实现 org.eclipse.ui.IEditorActionDelegate。通过调用 IEditorActionDelegate.setActiveEditor 将活动编辑器传递至代表。

操作的启用和/或可视性分别可使用元素 enablementvisibility 定义。这两个元素包含进行求值来确定启用和/或可视性的布尔表达式。

enablementvisibility 元素的语法相同。两者都只包含一个布尔表达式子元素。在最简单的情况下,这将是 objectClassobjectStatepluginStatesystemProperty 元素。在更复杂的情况下,可复合 andornot 元素来组成布尔表达式。andor 元素必须包含 2 个子元素。not 元素一定只能包含 1 个子元素。

<!ELEMENT extension (editorContribution+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT editorContribution (menu* , action*)>

<!ATTLIST editorContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

此元素用来定义一组编辑器操作和/或菜单。



<!ELEMENT action (selection* | enablement?)>

<!ATTLIST action

id            CDATA #REQUIRED

label         CDATA #REQUIRED

accelerator   CDATA #IMPLIED

definitionId  CDATA #IMPLIED

menubarPath   CDATA #IMPLIED

toolbarPath   CDATA #IMPLIED

icon          CDATA #IMPLIED

disabledIcon  CDATA #IMPLIED

hoverIcon     CDATA #IMPLIED

tooltip       CDATA #IMPLIED

helpContextId CDATA #IMPLIED

style         (push|radio|toggle) "push"

state         (true | false)

class         CDATA #REQUIRED

enablesFor    CDATA #IMPLIED

actionID      CDATA #IMPLIED>

此元素定义用户可在用户界面中调用的操作。



<!ELEMENT menu (separator+ , groupMarker*)>

<!ATTLIST menu

id    CDATA #REQUIRED

label CDATA #REQUIRED

path  CDATA #IMPLIED>

此元素用来定义新菜单。



<!ELEMENT separator EMPTY>

<!ATTLIST separator

name CDATA #REQUIRED>

此元素用于在新菜单中创建菜单分隔符。



<!ELEMENT groupMarker EMPTY>

<!ATTLIST groupMarker

name CDATA #REQUIRED>

此元素用来在新菜单中创建已命名组。它在新菜单中没有可视表示,这与 separator 元素不同。



<!ELEMENT selection EMPTY>

<!ATTLIST selection

class CDATA #REQUIRED

name  CDATA #IMPLIED>

此元素用来帮助确定根据当前选择是否启用操作。如果指定了 enablement 元素,则忽略它。



<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>

此元素用来定义扩展的启用。



<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>

此元素用来定义扩展的可视性。



<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>

此元素表示对其两个子元素表达式求值的结果的布尔 AND 操作。



<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>

此元素表示对其两个子元素表达式求值的结果的布尔 OR 操作。



<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>

此元素表示对其子元素表达式求值的结果的布尔 NOT 操作。



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

此元素用来对当前选择中的每个对象的类或接口进行求值。如果选择中的每个对象都实现指定的类或接口,则表达式求值为 true。



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

此元素用来对当前选择中的每个对象的属性状态求值。如果选择中的每个对象都具有指定的属性状态,则表达式求值为 true。要对此类型的表达式进行求值,选择中的每个对象都必须实现或适用于 org.eclipse.ui.IActionFilter 接口。



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

此元素用来对插件的状态进行求值。插件的状态可以是下列其中一项:installed(相当于 OSGi 概念中的“resolved”)或者 activated(相当于 OSGi 概念中的“active”)。



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

此元素用来对某些系统属性的状态进行求值。属性值是从 java.lang.System 中检索的。



以下是编辑器操作扩展的一个示例:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyzContribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ"

label=

"&amp;XYZ Menu"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

menubarPath=

"XYZ/group1"

toolbarPath=

"Normal/additions"

style=

"toggle"

state=

"true"

icon=

"icons/runXYZ.gif"

tooltip=

"Run XYZ Tool"

helpContextId=

"com.xyz.run_action_context"

class=

"com.xyz.actions.RunXYZ"

>

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

/>

</action>

</editorContribution>

</extension>

在上面的示例中,指定的操作将在名为“XYZ Menu”的新的顶级菜单中作为复选框项出现,而在工具栏中作为切换按钮出现。如果选择只包含 Java 文件资源,则启用操作。

下面是编辑器操作扩展的另一个示例:

   

<extension point=

"org.eclipse.ui.editorActions"

>

<editorContribution id=

"com.xyz.xyz2Contribution"

targetID=

"com.ibm.XMLEditor"

>

<menu id=

"XYZ2"

label=

"&amp;XYZ2 Menu"

path=

"edit/additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp;Run XYZ2 Tool"

menubarPath=

"edit/XYZ2/group1"

style=

"push"

icon=

"icons/runXYZ2.gif"

tooltip=

"Run XYZ2 Tool"

helpContextId=

"com.xyz.run_action_context2"

class=

"com.xyz.actions.RunXYZ2"

>

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<not>

<objectState name=

"extension"

value=

"java"

/>

</not>

</and>

</enablement>

</action>

</editorContribution>

</extension>

在上面的示例中,指定的操作将作为顶级“Edit”菜单中名为“XYZ2 Menu”的子菜单中的菜单项出现。如果选择不包含任何 Java 文件资源,则启用操作。

class 属性的值必须是用来实现 org.eclipse.ui.IEditorActionDelegate 的 Java 类的标准名称。装入此类的时间尽可能迟一些,以避免在真正需要整个插件之前就装入该插件。每次激活指定类型的编辑器时,都将调用 setActiveEditor 方法。将为指定编辑器类型的所有实例仅创建一组操作和菜单,而不必理会当前在“工作台”中打开了多少个编辑器实例。

此扩展点可用来将操作添加到目标编辑器先前创建的菜单中。另外,可向“工作台”窗口添加菜单和操作。“工作台”窗口中操作和主组的标识是在 org.eclipse.ui.IWorkbenchActionConstants 中定义的。这些应该用作添加新操作的参考点。顶级菜单是通过使用 path 属性的下列值来创建的:

省略 path 属性将会导致将新菜单添加到 additions 菜单栏组中。

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

操作扩展的启用条件最初由 enablesFor 定义,也可以是 selectionenablement。但是,一旦将操作代表实例化,它就可以直接在它的 selectionChanged 方法中控制操作启用状态。

操作和菜单标签可包含使用以下规则编码助记符的特殊字符:

  1. 在翻译的文本中,是在所选字符前面加“与”符号(“&”)字符来指定助记符的。由于 XML 字符串中不允许有“与”符号,所以使用 &amp; 字符实体。
如果通过单个扩展将两个或多个操作添加到了菜单或工具栏中,则这些操作出现的顺序将与 plugin.xml 文件中列示它们的顺序相反。此行为很明显是不直观的。但是,这是在冻结“Eclipse 平台 API”之后才发现的。现在更改该行为将破坏依赖于现有行为的每个插件。

selectionenablement 元素是互斥的。enablement 元素可以使用子元素 objectClassobjectState 替换 selection 元素。例如,下面内容:

 

<selection class=

"org.eclipse.core.resources.IFile"

name=

"*.java"

>

</selection>

可使用以下内容表示:
 

<enablement>

<and>

<objectClass name=

"org.eclipse.core.resources.IFile"

/>

<objectState name=

"extension"

value=

"java"

/>

</and>

</enablement>

“工作台”提供了内置“缺省文本编辑器”。插件可向此缺省编辑器或其它插件提供的编辑器作添加。