描述:此扩展点用来为其它插件注册的视图将操作添加到菜单和工具栏中。每个视图具有通常通过单击右上区域激活的本地下拉菜单。其它插件可向此菜单添加子菜单和操作。插件还可将操作添加到视图工具栏。视图所有者首先有机会填充这些区域。追加了其它插件的可选附加项。
配置标记:
<!ELEMENT viewContribution (menu | action)*>
<!ATTLIST viewContribution
id
CDATA #REQUIRED
targetID CDATA #REQUIRED
>
<!ELEMENT menu (separator)+>id — 可用来引用此添加项的唯一标识符。 targetID — 在其中进行添加的视图的唯一标识符(如在注册表中指定的那样)。
<!ELEMENT action (selection)* (enablement)?>name — 可在以后作为操作路径中的最后一个标记引用的分隔符的名称。因此,分隔符充当可将操作添加到其中的命名组。
在 Eclipse 的版本 2.0 中,enablement 元素可用来定义操作的启用。有关使用 enablement 元素的更多信息,参考 actionExpressions.html。操作扩展的启用标准最初是由 enablesFor,selection 和 enablement 定义的。然而,一旦将操作代理实例化,它就可以直接在它的 selectionChanged 方法中控制操作启用状态。
在可转换文本中,操作和菜单标号可包含特殊字符,这些特殊字符对助记符进行编码,这些助记符是在所选字符前面用和号(“&”)字符指定的。由于 XML 字符串中不允许有和号,所以使用 & 字符实体。
如果通过单个扩展将两个或多个操作添加到了菜单或工具栏中,则这些操作出现的次序将与 plugin.xml 文件中列示它们的次序相反。此行为很明显不是直观的。然而,在冻结“Eclipse 平台 API”之后可以发现它。现在更改该行为将破坏依赖于现有行为的每个插件。
示例:
下面是视图操作扩展点的一个示例(注意子元素以及使用属性的方式):
<extension point="org.eclipse.ui.viewActions">
<viewContribution
id="com.xyz.xyzViewC1"
targetID="org.eclipse.ui.views.ResourceNavigator">
<menu id="com.xyz.xyzMenu"
label="XYZ Menu"
path="additions">
<separator name="group1"/>
</menu>
<action id="com.xyz.runXYZ"
label="&Run XYZ Tool"
menubarPath="com.xyz.xyzMenu/group1"
toolbarPath="Normal/XYZ"
icon="icons/runXYZ.gif"
tooltip="Run XYZ Tool"
helpContextId="com.xyz.run_action_context"
class="com.xyz.actions.RunXYZ"
enablesFor="1"/>
<selection class="org.eclipse.core.resources.IFile" name="*.java">
</action>
</viewContribution>
</extension>
在上面的示例中,指定的操作将仅支持单个选择(enablesFor 属性)。另外,此选择中的每个对象还必须实现指定的接口(IFile)且必须是 Java 文件。可指定多个 selection 元素,表示“其中之一”。
API 信息:class 属性的值必须是实现 org.eclipse.ui.IViewActionDelegate 的 Java 类的全限定名。尽可能迟地装入此接口以避免在真正需要整个插件之前就装入该插件。它扩展了 org.eclipse.ui.IActionDelegate 并添加允许代理与该代理添加到的视图实例一起初始化的附加方法。
提供的实现:每个视图一般是随下拉菜单和本地工具栏上的许多标准项一起提供的。将其它插件中的附加项追加到标准补码中。为 public 接口内的视图发布操作标识符是很有帮助的。例如,将在 org.eclipse.ui.IWorkbenchActionConstants 中定义工作台窗口的操作和主组。