描述:此扩展点用来将新操作添加到其他插件拥有的弹出菜单中。可针对特定对象类型(objectContribution)或针对特定弹出菜单进行操作添加。当为对象类型注册时,添加项会出现在选择了指定类型的对象的所有查看器中。相反,对弹出菜单的注册将仅出现在指定的菜单中,而不必考虑选择情况。
当选择是异机种选择时,若有可能,将应用添加项(如果是针对公共选择类型注册的话)。如果不可能直接进行匹配,则会尝试针对超类和超接口进行匹配。
可通过使用名称过滤器进一步限制选择。如果使用了名称过滤器,则选择中的所有对象必须与过滤器匹配才可以应用添加项。
对象添加项中的个别的操作可使用属性 enablesFor 来指定它是应仅应用于单个选择类型、多个选择类型还是应该应用于任何其他选择类型。
如果这些过滤机制不足够,则操作添加项可使用过滤器机制。在这种情况下,将在一系列键值对中描述目标对象的属性。适用于选择的属性是特定于类型的,且超出了工作台本身的域,因此工作台将代理在此级别上过滤为实际选择的操作。
配置标记:
<!ELEMENT objectContribution (filter | menu | action)*>
<!ATTLIST objectContribution
id
CDATA #REQUIRED
objectClass CDATA #REQUIRED
nameFilter CDATA #IMPLIED
>
<!ELEMENT action EMPTY>name — 可在以后作为操作路径中的最后一个标记引用的分隔符的名称。因此,分隔符充当可将操作添加到其中的命名组。
操作和菜单标号可包含使用以下规则编码助记符和加速键的特殊字符:
下面是弹出菜单扩展点的一个示例:
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.xyz.C1"
objectClass="org.eclipse.core.resources.IFile"
nameFilter="*.java">
<menu id="com.xyz.xyzMenu"
path="additions"
label="&XYZ Java Tools">
<separator name="group1"/>
</menu>
<action id="com.xyz.runXYZ"
label="&Run XYZ Tool"
menubarPath="com.xyz.xyzMenu/group1"
icon="icons/runXYZ.gif"
helpContextId="com.xyz.run_action_context"
class="com.xyz.actions.XYZToolActionDelegate"
enablesFor="1">
</action>
</objectContribution>
<viewerContribution
id="com.xyz.C2"
targetID="org.eclipse.ui.views.TaskList">
<action
id="com.xyz.showXYZ"
label="&Show XYZ"
menubarPath="additions"
icon="icons/showXYZ.gif"
helpContextId="com.xyz.show_action_context"
class="com.xyz.actions.XYZShowActionDelegate">
</action>
</viewerContribution>
</extension>
在上面的示例中,指定的操作将仅支持单个选择(enablesFor 属性)。另外,选择中的每个对象还必须实现指定的接口(IFile)且必须是 Java 文件。将把此操作添加到先前创建的子菜单中。此添加项将在具有所需选择的任何视图中生效。
相反,上述查看器添加项将仅出现在“任务”视图中,且不会受视图中的选择影响。
下面是过滤器机制的一个示例。在这种情况下,操作将仅对已完成且具有高优先级的 IMarkers 出现。
<extension point="org.eclipse.ui.popupMenus">
<objectContribution
id="com.xyz.C1"
objectClass="org.eclipse.core.resources.IMarker">
<filter name="done"
value="true"/>
<filter name="priority"
value="2"/>
<action id="com.xyz.runXYZ"
label="High Priority Completed Action Tool"
icon="icons/runXYZ.gif"
class="com.xyz.actions.MarkerActionDelegate">
</action>
</objectContribution>
</extension>
API 信息:操作属性 class 的值必须是实现 org.eclipse.ui.IObjectActionDelegate(适用于操作添加项情况)、org.eclipse.ui.IViewActionDelegate(适用于属于视图的查看器添加项情况)或 org.eclipse.ui.IEditorActionDelegate(适用于属于编辑器的查看器添加项情况)的 Java 类的全限定类名。在所有情况下,尽可能迟地装入实现的类以避免在真正需要整个插件之前就装入该插件。
注意:对于向后兼容,可为对象添加项实现 org.eclipse.ui.IActionDelegate。
仅当目标部件发布了用于扩展的菜单时,部件内的弹出菜单扩展才有可能实现。我们很鼓励这种做法,因为它改善了产品的可扩展性。 要实现这一点,每个部件都应发布通过调用 IWorkbenchPartSite#registerContextMenu 定义的任何弹出菜单。一旦完成了这些操作,工作台就会自动插入存在的任何操作扩展。
必须为每个已注册的菜单提供菜单标识。为获得各部件的一致性,所有部件实现者都应采用下列策略。
工作台中作为上下文菜单中的选择的对象可定义 org.eclipse.ui.IActionFilter。这是一个过滤策略,它可执行类型特定的过滤。 工作台将通过测试检查用于选择的过滤器是否实现 IActionFilter 来检索该过滤器。如果检索失败,则工作台将通过 IAdaptable 机制来请求过滤器。
提供的实现:工作台视图具有内置弹出菜单,该弹出菜单已随许多操作装入。插件可向这些菜单进行添加。如果查看器为这些添加项保留了槽且它们是公共的,则槽名可用作路径。否则,会将操作和子菜单添加到弹出菜单的末尾。