视图菜单、工具栏与操作

org.eclipse.ui.viewActions

此扩展点用来为其它插件注册的视图将操作添加到下拉菜单和工具栏中。每个视图具有通常通过单击右上角三角形按钮激活的本地下拉菜单。其它插件可向此菜单添加子菜单和操作。插件还可将操作添加到视图工具栏。视图所有者首先有机会填充这些区域。追加了其它插件的可选附加项。

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

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

<!ELEMENT extension (viewContribution+)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


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

<!ATTLIST viewContribution

id       CDATA #REQUIRED

targetID CDATA #REQUIRED>

此元素用来定义一组视图操作和/或菜单。



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

<!ATTLIST action

id            CDATA #REQUIRED

label         CDATA #REQUIRED

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>

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



<!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.viewActions"

>

<viewContribution id=

"com.xyz.xyzViewC1"

targetID=

"org.eclipse.ui.views.navigator.ResourceNavigator"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ"

label=

"&amp;Run XYZ Tool"

menubarPath=

"com.xyz.xyzMenu/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>

</viewContribution>

</extension>

在上面的示例中,指定的操作将仅支持单个选择(enablesFor 属性)。另外,选择中的对象必须是 Java 文件资源。

下面是视图操作扩展的另一示例:

   

<extension point=

"org.eclipse.ui.viewActions"

>

<viewContribution id=

"com.xyz.xyzViewC1"

targetID=

"org.eclipse.ui.views.navigator.ResourceNavigator"

>

<menu id=

"com.xyz.xyzMenu"

label=

"XYZ Menu"

path=

"additions"

>

<separator name=

"group1"

/>

</menu>

<action id=

"com.xyz.runXYZ2"

label=

"&amp;Run XYZ2 Tool"

menubarPath=

"com.xyz.xyzMenu/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>

</viewContribution>

</extension>

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

class 属性的值必须是用来实现 org.eclipse.ui.IViewActionDelegate 的 Java 类的标准名称。装入此类的时间尽可能迟一些,以避免在真正需要整个插件之前就装入该插件。

接口 org.eclipse.ui.IViewActionDelegate 扩展了 org.eclipse.ui.IActionDelegate 并添加允许该代表与它正在进行添加的视图实例一起初始化的附加方法。

此扩展点可用来将操作添加到目标视图先前创建的菜单中。省略菜单 path 属性会导致将新菜单或操作添加到下拉菜单的末尾。

操作扩展的启用条件最初由 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>

每个视图通常都在下拉菜单和本地工具栏上提供了一些标准项。将把其它插件中的添加项追加至标准实现。