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)*>

enablement 表示式可讓用戶端為 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 元素之下巢狀的 actionProvider 而言,可見性由 navigatorContent 延伸規格 id 的 id 來控制。 經由比對 viewerContentBinding,可自動挑選子項動作提供者。 如需可見性連結的相關資訊,請參閱 org.eclipse.ui.navigator.viewer

用戶端可以在根 extention 元素之下提供 actionProvider(相當於其他 navigatorContent), 加強控制啟用 (enablement) 和檢視器連結(請參閱 veiwerActionBinding)。

以沒有 id 的根 actionProvider 而言,id 預設為 "org.eclipse.ui.navigator.actionProvider.X"。 為了讓這些 actionProvider 可以提供檢視器的功能表或動作列,必須定義 viewerActionBindingorg.eclipse.ui.navigator.viewer 延伸點的一部分),在特定的檢視器和預設 id 之間宣告連結 ("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)*>

一般的根元素。這個元素可用於延伸點內定義其 enablement 表示式。 enablement 表示式的子項是使用 and 運算子來組合。



<!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>

這個元素是用來評估焦點物件的內容狀態。testable 內容集可使用內容測試程式延伸點加以延伸。如果尚未載入要執行實際測試的內容測試程式, 則 test 表示式傳回 EvaluationResult.NOT_LOADED。



<!ELEMENT systemTest EMPTY>

<!ATTLIST systemTest

property CDATA #REQUIRED

value    CDATA #REQUIRED>

呼叫 System.getProperty 方法來測試系統內容,並比較其結果與透過 value 屬性指定的值。



<!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。with 表示式的子項是使用 and 運算子來組合。



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

<!ATTLIST resolve

variable CDATA #REQUIRED

args     CDATA #IMPLIED>

這個元素將要視察其所有子元素的物件變更為給定的變數所參照的物件。 如果無法解析變數,則表示式在求值時會擲出 ExpressionException。with 表示式的子項是使用 and 運算子來組合。



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

<!ATTLIST adapt

type CDATA #REQUIRED>

這個元素是用來調整焦點物件,使它成為屬性類型指定的類型。 如果配接器或參照的類型尚未載入,則表示式傳回未載入。 如果類型名稱根本不存在,它會在評估期間擲出 ExpressionException。adapt 表示式的子項是使用 and 運算子來組合。



<!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>

新增動作

用戶端可利用物件或檢視器構成要素(請參閱 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 核心表示式來定義過濾器。 下列範例示範這兩種技術。用戶端只能採用其中一種選項。 如果延伸規格同時指定兩者,則只有核心表示式過濾器有效。 name 和 description 欄位可翻譯,在實際環境下是外部化字串。

<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>