navigatorContent

org.eclipse.ui.navigator.navigatorContent

3.2

内容扩展提供可由导航器内容服务使用的内容和标签提供程序。 navigatorContent 扩展定义除了扩展所了解的元素类型之外 的内容提供程序、标签提供程序和操作提供程序的特定类。

triggerPoints 表达式描述将导致对子代或表调用此扩展的元素。possibleChildren 表达式描述 扩展能为其提供父代的元素。客户机应该描述所有可以设置为选择的元素,以确保 具有编辑器支持的链接可以正确地展开到正确的节点。

<!ELEMENT extension ((navigatorContent? | actionProvider? | commonWizard? | commonFilter?))>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT navigatorContent ((enablement | (triggerPoints , possibleChildren)) , actionProvider* , commonSorter* , override? , dropAssistant* , commonWizard*)>

<!ATTLIST navigatorContent

id                CDATA #REQUIRED

name              CDATA #REQUIRED

priority          (lowest|lower|low|normal|high|higher|highest)

contentProvider   CDATA #REQUIRED

icon              CDATA #IMPLIED

activeByDefault   (true | false)

providesSaveables (true | false)

labelProvider     CDATA #REQUIRED>

导航器内容扩展定义内容提供程序和标签提供程序,每当元素与 triggerPoints 表达式匹配时可以使用它们来提供子代,每当元素匹配 possibleChildren 时还可以提供父代。

可选地,客户机还可以提供操作提供程序,当选择了扩展添加的元素时或者匹配 triggerPoints 表达式时,它能够提供菜单添加项和操作栏添加项。客户机还可以选择添加排序程序以排序由扩展添加的排序元素。



<!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

启用表达式允许客户机对triggerPointspossibleChildren 指定相同的表达式。

actionProvider 的情况下,当要调用客户机的 org.eclipse.ui.navigator.CommonActionProvider 时, 客户机必须定义指示框架的表达式。 由于 IActionBars 的添加项的原因,每当选择客户机要使用的对象时,必须调用客户机。 因此,客户机应该使用启用它们的扩展时决定的判断。



<!ELEMENT triggerPoints (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

triggerPoints 表达式定义树中应该导致为子代调用此扩展的节点。



<!ELEMENT possibleChildren (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

possibleChildren 表达式定义树中可以由此扩展添加的节点。客户机应该描述此内容扩展可以为匹配表达式的元素提供父代的时间。



<!ELEMENT actionProvider (enablement?)>

<!ATTLIST actionProvider

class     CDATA #REQUIRED

id        CDATA #IMPLIED

dependsOn CDATA #IMPLIED

overrides CDATA #IMPLIED>

提供实现org.eclipse.ui.navigator.CommonActionProvider 的类的名称。 操作提供程序有机会对导航器所在视图的 IActionBars 中定义的 上下文菜单和可重定目标的操作添加内容。客户机还可以通过 IActionBars 视图菜单直接对视图菜单添加内容。

如果顶级 actionProviderviewerActionBinding,则 该 actionProvider 是对概要查看器可视的。 对于嵌套在 navigatorContent 元素下的 actionProviders, 可视性是由 navigatorContent 扩展标识的标识控制的。子代操作提供程序将通过匹配 viewerContentBinding 自动选用。 有关可视性绑定的更多信息,请参阅 org.eclipse.ui.navigator.viewer

客户机可以在根扩展元素下提供 actionProvider(与其他 navigatorContent 等同)以便更好地控制它们的启用和查看器绑定(请参阅 veiwerActionBinding)。

对于没有标识的根 actionProviders,该标识缺省为“org.eclipse.ui.navigator.actionProvider.X”。要使这些 actionProvider 有机会添加查看器的菜单或操作栏,必须定义 viewerActionBinding(作为 org.eclipse.ui.navigator.viewer 扩展点的一部分),它声明特定查看器与缺省标识(“org.eclipse.ui.navigator.actionProvider.*”)之间的绑定。请参阅 org.eclipse.ui.navigator.viewer 的模式文档中有关 viewerActionBinding 的文档以了解更多信息。



<!ELEMENT commonWizard (enablement)>

<!ATTLIST commonWizard

type                  (import|export|new)

wizardId              CDATA #REQUIRED

menuGroupId           CDATA #IMPLIED

associatedExtensionId CDATA #IMPLIED>

扩展点提供对按类型定义的菜单添加内容的功能。



<!ELEMENT commonFilter (filterExpression?)>

<!ATTLIST commonFilter

id              CDATA #REQUIRED

name            CDATA #REQUIRED

description     CDATA #IMPLIED

class           CDATA #IMPLIED

activeByDefault (true | false) >

定义可以与特定公共查看器相关联的过滤器。 通过使用 org.eclipse.ui.navigator.viewer/viewerContentBinding 将公共过滤器绑定到查看器(如内容扩展)。



<!ELEMENT filterExpression (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

一个可选的 Eclipse 核心表达式,它定义过滤器应该隐藏的内容。

例如,客户机可以决定隐藏其名称中有特定模式(如“*.acme”)的所有资源。 当过滤器是活动(缺省情况下是打开的或者由用户决定)时, 以“acme”结速的所有资源将从用户视图中隐藏起来。

客户机可以使用filterExpression 或“class”属性,但不是两者。



<!ELEMENT commonSorter (parentExpression)>

<!ATTLIST commonSorter

id    CDATA #REQUIRED

class CDATA #REQUIRED>

commonSorter 声明org.eclipse.jface.viewers.ViewerSorter 的子类,它用来排序树中的子代。 嵌套的 parentExpression 声明使用 commonSorter 的时间。如果元素匹配 parentExpression,则将按此 commonSorter 排序其子代。



<!ELEMENT parentExpression (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

commonSorter 使用 parentExpression 来标识它何时可用。如果 commonSorterparentExpression 与给定的元素匹配,则将使用该 commonSorter 来对该元素的子代(由内容服务的内容提供程序返回)进行排序。



<!ELEMENT override EMPTY>

<!ATTLIST override

suppressedExtensionId CDATA #REQUIRED

policy                (InvokeOnlyIfSuppressedExtAlsoVisibleAndActive|InvokeAlwaysRegardlessOfSuppressedExt) "InvokeAlwaysRegardlessOfSuppressedExt">

当对给定元素同时启用所抑制的扩展和所声明的扩展的 triggerPoints 表达式 时,将调用此扩展,但不调用它的所抑制的扩展。指定了 override 元素的客户机还必须提供内容提供程序。 该内容提供程序必须实现了 org.eclipse.ui.navigator.IPipelinedTreeContentProvider,后者提供了方法来 拦截对查看器进行的子代请求、父代请求和直接更新请求。



<!ELEMENT dropAssistant (possibleDropTargets)>

<!ATTLIST dropAssistant

id    CDATA #REQUIRED

class CDATA #REQUIRED>

提供 org.eclipse.ui.navigator.CommonDropAdapterAssistant 的子类。这个子类可提供对放下操作的编程验证、请求其他传输类型和处理放下操作。

每当拖动的元素与外层 navigatorContent 扩展的 possibleChildren 表达式 匹配,并且操作的放下目标由 dropAssistant 元素的 possibleDropTargets 表达式描述时,都会调用 dropAssistant

一个扩展可以有多个具有互斥 possibleDropTargets 表达式的放下操作适配器。 第一个与给定放下目标相匹配并且对 CommonDropAdapterAssistant.validateDrop(...) 返回 OK 状态的放下操作适配器将有机会处理该放下操作。



<!ELEMENT possibleDropTargets (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

声明特定 dropAssistant 可以处理的可能放下目标。



<!ELEMENT enablement (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

通用根元素。可以在扩展点内使用该元素来定义它的支持表达式。将使用 and 运算符来组合 enablement 表达式的子代。



<!ELEMENT not (not | and | or | instanceof | test | systemTest | equals | count | with | resolve | adapt | iterate)>

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



<!ELEMENT and (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

此元素表示对其所有子元素表达式求值的结果执行 AND 操作。



<!ELEMENT or (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

此元素表示对其所有子元素表达式求值的结果执行 OR 操作。



<!ELEMENT instanceof EMPTY>

<!ATTLIST instanceof

value CDATA #REQUIRED>

此元素用来对焦点中的对象执行 instanceof 检查。如果对象的类型是由属性值指定的类型的子类型,则表达式返回 EvaluationResult.TRUE。否则,将返回 EvaluationResult.FALSE。



<!ELEMENT test EMPTY>

<!ATTLIST test

property CDATA #REQUIRED

args     CDATA #IMPLIED

value    CDATA #IMPLIED>

此元素用来对焦点中对象的属性状态进行评估。可以使用属性测试程序扩展点来扩展可测试属性的集合。如果尚未装入执行实际测试的属性测试程序,则测试表达式返回 EvaluationResult.NOT_LOADED。



<!ELEMENT systemTest EMPTY>

<!ATTLIST systemTest

property CDATA #REQUIRED

value    CDATA #REQUIRED>

通过调用 System.getProperty 方法来测试系统属性并将结果与通过值属性指定的值进行比较。



<!ELEMENT equals EMPTY>

<!ATTLIST equals

value CDATA #REQUIRED>

此元素用来对焦点中的对象执行等于检查。如果对象等于由属性值提供的值,则表达式返回 EvaluationResult.TRUE。否则,将返回 EvaluationResult.FALSE。



<!ELEMENT count EMPTY>

<!ATTLIST count

value CDATA #REQUIRED>

此元素用来测试集合中的元素数。



<!ELEMENT with (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST with

variable CDATA #REQUIRED>

此元素将把要检查以获取其所有子元素的对象更改为由给定变量引用的对象。如果不能解析变量,则表达式将在对变量求值时抛出 ExpressionException。将使用 and 运算符来组合 with 表达式的子代。



<!ELEMENT resolve (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST resolve

variable CDATA #REQUIRED

args     CDATA #IMPLIED>

此元素将把要检查以获取其所有子元素的对象更改为由给定变量引用的对象。如果不能解析变量,则表达式将在对变量求值时抛出 ExpressionException。将使用 and 运算符来组合 with 表达式的子代。



<!ELEMENT adapt (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST adapt

type CDATA #REQUIRED>

此元素用来使焦点中的对象适用于由属性类型指定的类型。如果尚未装入适配器或引用的类型,则表达式返回 not loaded。如果类型名称根本不存在,则表达式在求值期间将抛出 ExpressionException。将使用 and 运算符来组合 adapt 表达式的子代。



<!ELEMENT iterate (not , and , or , instanceof , test , systemTest , equals , count , with , resolve , adapt , iterate)*>

<!ATTLIST iterate

operator (or|and) >

此元素用来叠代类型为 java.util.Collection 的变量。如果焦点中对象的类型不是 java.util.Collection,则当对表达式求值时将抛出 ExpressionException。




添加内容

以下示例描述提供资源内容的内容扩展。triggerPoints 表达式确定初始调用此扩展的时间。如果 viewerContentBinding 与此扩展匹配并且“isRoot”属性设置为 true, 则将使用该扩展,而不考虑根元素是否与 triggerPoints 表达式匹配。

<extension point=

"org.eclipse.ui.navigator.navigatorContent"

>

<navigatorContent name=

"%resource.extension.name"

priority=

"low"

icon=

"icons/full/eview16/resource_persp.gif"

activeByDefault=

"true"

contentProvider=

"org.eclipse.ui.navigator.resources.internal.workbench.ResourceExtensionContentProvider"

labelProvider=

"org.eclipse.ui.navigator.resources.internal.workbench.ResourceExtensionLabelProvider"

sorter=

"org.eclipse.ui.navigator.resources.internal.workbench.ResourceSorter"

id=

"org.eclipse.ui.navigator.resourceContent"

>

<triggerPoints>

<or>

<instanceof value=

"org.eclipse.core.resources.IWorkspaceRoot"

/>

<instanceof value=

"org.eclipse.core.resources.IProject"

/>

<instanceof value=

"org.eclipse.core.resources.IFolder"

/>

</or>

</triggerPoints>

<possibleChildren>

<or>

<instanceof value=

"org.eclipse.core.resources.IWorkspaceRoot"

/>

<instanceof value=

"org.eclipse.core.resources.IProject"

/>

<instanceof value=

"org.eclipse.core.resources.IResource"

/>

<instanceof value=

"org.eclipse.core.resources.IFolder"

/>

<instanceof value=

"org.eclipse.core.resources.IFile"

/>

</or>

</possibleChildren>

</navigatorContent>

</extension>

Adding Actions

客户机可以使用对象或查看器添加项(请参阅 org.eclipse.ui.popupMenus)来提供视图操作。有时,客户机需要灵活性超出这些方法所允许的灵活性,因此公共导航器框架支持添加操作提供程序。“操作提供程序”创建 org.eclipse.ui.actions.ActionGroup 的子类并且有机会根据不同的事件(分别是选择和右键单击)来填充操作栏和菜单。

客户机可以使一个或多个操作提供程序与特定内容扩展相关联,也可以将操作提供程序声明为顶级添加项(不与任何特定的内容扩展相关联)。顶级操作提供程序必须使用 org.eclipse.ui.navigator.viewer/viewerActionBinding 扩展点与查看器的特定实例相关联。 嵌套的操作提供程序将根据它们的外层内容扩展是否还与查看器绑定来 自动与查看器绑定(请参阅 org.eclipse.ui.navigator/viewerContentBinding)。

以下示例演示了这两种方法。仅当“org.eclipse.ui.tests.navigator.testContent”扩展可视并且处于活动状态时,“TestNestedActionProvider”才有机会对菜单和 org.eclipse.ui.IActionBars 添加内容。如果用户从“可用的定制”对话框中将测试扩展取消激活,则嵌套的操作甲级队不再有机会添加内容。

<extension point=

"org.eclipse.ui.navigator.navigatorContent"

>

<navigatorContent id=

"org.eclipse.ui.tests.navigator.testContent"

name=

"%test.navigator.extension"

contentProvider=

"org.eclipse.ui.tests.navigator.extension.TestContentProvider"

labelProvider=

"org.eclipse.ui.tests.navigator.extension.TestLabelProvider"

activeByDefault=

"true"

priority=

"normal"

>

<triggerPoints>

<instanceof value=

"org.eclipse.core.resources.IProject"

/>

</triggerPoints>

<actionProvider class=

"org.eclipse.ui.tests.navigator.extension.TestNestedActionProvider"

id=

"org.eclipse.ui.tests.navigator.extension.TestNestedActionProvider"

>

<enablement>

<instanceof value=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</actionProvider>

</navigatorContent>

<actionProvider class=

"org.eclipse.ui.navigator.resources.internal.actions.NewActionProvider"

id=

"org.eclipse.ui.navigator.resources.NewActions"

>

<enablement>

<or>

<adapt type=

"org.eclipse.core.resources.IFile"

/>

<adapt type=

"org.eclipse.core.resources.IFolder"

/>

<adapt type=

"org.eclipse.core.resources.IProject"

/>

<adapt type=

"org.eclipse.core.resources.IWorkspaceRoot"

/>

</or>

</enablement>

</actionProvider>

</extension>

客户机可以使用 org.eclipse.jface.viewers.ViewerFilter 的子类或者 通过 Eclipse 核心表达式来定义过滤器。以下示例演示了这两种技术。客户机只能使用两个选项。 同时指定两者的扩展将导致使用核心表达式过滤器。名称和描述字段是可翻译的,在实际的环境中,应该是外部化的字符串。

<extension point=

"org.eclipse.ui.navigator.navigatorContent"

>

<commonFilter class=

"org.eclipse.ui.tests.navigator.extension.TestItemsThatEndIn3"

description=

"Hide TestItem objects that end in the number &quot;3&quot;"

id=

"org.eclipse.ui.tests.navigator.filters.TestItemsThatEndWith3"

name=

"TestItems that end with &quot;3&quot;"

activeByDefault=

"true"

/>

<commonFilter description=

"Hides all instances of Test Item"

id=

"org.eclipse.ui.tests.navigator.filters.AllTestItems"

name=

"A TestItem Exp Filter (should be sorted alphab..)"

>

<filterExpression>

<instanceof value=

"org.eclipse.ui.tests.navigator.extension.TestExtensionTreeData"

/>

</filterExpression>

</commonFilter>

公共排序程序是根据一组子代的父代确定的。排序程序类必须创建 org.eclipse.jface.viewers.ViewerSorter 的子类。


<extension point=

"org.eclipse.ui.navigator.navigatorContent"

>

<commonSorter class=

"org.eclipse.ui.navigator.resources.internal.workbench.ResourceExtensionSorter"

id=

"org.eclipse.ui.navigator.resources.sorters.defaultSorter"

>

<parentExpression>

<or>

<instanceof value=

"org.eclipse.core.resources.IWorkspaceRoot"

/>

<instanceof value=

"org.eclipse.core.resources.IProject"

/>

<instanceof value=

"org.eclipse.core.resources.IResource"

/>

<instanceof value=

"org.eclipse.core.resources.IFolder"

/>

<instanceof value=

"org.eclipse.core.resources.IFile"

/>

</or>

</parentExpression>

</commonSorter>

</extension>

以下示例演示如何添加“新建文件夹”和“新建文件”的向导快捷方式操作, 这两项操作是对 org.eclipse.core.resources.IResource 的特定子类启用的。 客户机可以使用描述菜单选项何时应该可用时所必需的 org.eclipse.core.expressions 部件。下面指定的 wizardId 必须与其中一个 org.eclipse.ui.xxxWizards 扩展点相对应。

对于绑定自己的查看器或查看部件的客户机来说, 务必使用 org.eclipse.ui.navigator.WizardActionGroup 来正确地填充菜单。请参阅该类以获取更多有关使用此功能的文档。


<extension point=

"org.eclipse.ui.navigator.navigatorContent"

>

<commonWizard type=

"new"

wizardId=

"org.eclipse.ui.wizards.new.folder"

>

<enablement>

<or>

<adapt type=

"org.eclipse.core.resources.IFile"

/>

<adapt type=

"org.eclipse.core.resources.IFolder"

/>

<adapt type=

"org.eclipse.core.resources.IProject"

/>

<adapt type=

"org.eclipse.core.resources.IWorkspaceRoot"

/>

</or>

</enablement>

</commonWizard>

<commonWizard type=

"new"

wizardId=

"org.eclipse.ui.wizards.new.file"

>

<enablement>

<or>

<adapt type=

"org.eclipse.core.resources.IFile"

/>

<adapt type=

"org.eclipse.core.resources.IFolder"

/>

<adapt type=

"org.eclipse.core.resources.IProject"

/>

<adapt type=

"org.eclipse.core.resources.IWorkspaceRoot"

/>

</or>

</enablement>

</commonWizard>

</extension>