navigatorContent

org.eclipse.ui.navigator.navigatorContent

3.2

Rozšíření obsahu nabízí poskytovatele obsahu a štítku, který může být používán službou obsahu navigátoru. Rozšíření navigatorContent definuje specifické třídy pro poskytovatele obsahu, poskytovatele štítku a poskytovatele akcí navíc k typům prvků, které již rozšíření zná.

Výraz triggerPoints popisuje prvky, které způsobí, že bude toto rozšíření vyvoláno buďto pro podřízené prvky, nebo pro štítky. Výraz possibleChildren popisuje prvky, pro které může rozšíření poskytnout nadřízený prvek. Klienti by měli popsat všechny prvky, které by mohly být nastaveny jako výběr, aby odkaz s podporou editoru mohl být správně rozšířen do správného uzlu.

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

Rozšíření obsahu navigátoru definuje poskytovatele obsahu a poskytovatele štítku, které lze použít pro poskytnutí podřízeného prvku, kdykoli prvek odpovídá výrazu triggerPoints, a také pro poskytnutí nadřízeného prvku, kdykoli prvek odpovídá výrazu possibleChildren.

Klient může volitelně poskytnout také poskytovatele akce, který může poskytnout příspěvky do nabídky a řádky s akcemi, je-li vybrán prvek, který byl rozšířením přidán nebo který odpovídá výrazu triggerPoints. Klienti se mohou také rozhodnout přidat třídění, které třídí prvky, jenž rozšíření přidalo.



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

Výraz zpřístupnění umožňuje klientům specifikovat stejný výraz pro triggerPoints i possibleChildren.

V případě actionProvider musejí klienti definovat výraz, který bude rámcovému systému indikovat, kdy by měl být vyvolán jejich org.eclipse.ui.navigator.CommonActionProvider. Kvůli příspěvkům do IActionBars je třeba klienty vyvolat kdykoli, kdy je vybrán objekt, o nějž mají zájem. Proto mohou klienti použít vlastní uvážení při rozhodování, kdy by mělo být jejich rozšíření zpřístupněno.



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

Výraz triggerPoints definuje uzly ve stromě, které by měly způsobit vyvolání tohoto rozšíření pro podřízené prvky.



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

Výraz possibleChildren definuje uzly ve stromě, které by mohly dostat příspěvek od tohoto rozšířením. Klienti by měli popsat, kdy by mohlo toto rozšíření obsahu poskytnout nadřízený prvek pro prvky, které výrazu odpovídají.



<!ELEMENT actionProvider (enablement?)>

<!ATTLIST actionProvider

class     CDATA #REQUIRED

id        CDATA #IMPLIED

dependsOn CDATA #IMPLIED

overrides CDATA #IMPLIED>

Poskytuje název třídy, která implementuje org.eclipse.ui.navigator.CommonActionProvider. Poskytovatel akce má příležitost přispět ke kontextové nabídce a k přecílitelným akcím definovaným v IActionBars pro pohled, který navigátor obsahuje. Klienti mohou také přispívat přímo do nabídky zobrazení prostřednictvím nabídky zobrazení IActionBars.

actionProvider nejvyšší úrovně je viditelný pro abstraktní prohlížeč, pokud existuje viewerActionBinding pro tohoto actionProvider. Pro poskytovatele actionProviders, kteří jsou vnořeni pod prvek navigatorContent, bude viditelnost řízena pomocí ID rozšíření navigatorContent. Podřízení poskytovatelé akcí budou automaticky vybráni pomocí shody s viewerContentBinding. Viz org.eclipse.ui.navigator.viewer ohledně dalších informací o vazbách viditelnosti.

Klienti mohou poskytovat actionProvider pod kořenovým prvkem rozšíření (rovnocenný jinémunavigatorContent) pro lepší kontrolu jejich zpřístupnění a vazeb prohlížeče (viz veiwerActionBinding).

Pro kořenový actionProviders, který nemá žádné ID, je výchozí ID "org.eclipse.ui.navigator.actionProvider.X". Pro ty poskytovatele actionProvider, kterým má být poskytnuta možnost přispět nabídkami nebo akčními řádky prohlížeče, musí být definována viewerActionBinding (jako součást bodu rozšíření org.eclipse.ui.navigator.viewer), která deklaruje vazbu mezi konkrétním prohlížečem a výchozím ID ("org.eclipse.ui.navigator.actionProvider.*"). Další informace viz dokumentace pro viewerActionBinding pod dokumentací schématu org.eclipse.ui.navigator.viewer.



<!ELEMENT commonWizard (enablement)>

<!ATTLIST commonWizard

type                  (import|export|new)

wizardId              CDATA #REQUIRED

menuGroupId           CDATA #IMPLIED

associatedExtensionId CDATA #IMPLIED>

Bod rozšíření poskytuje schopnost přispívat k nabídce definované typem.



<!ELEMENT commonFilter (filterExpression?)>

<!ATTLIST commonFilter

id              CDATA #REQUIRED

name            CDATA #REQUIRED

description     CDATA #IMPLIED

class           CDATA #IMPLIED

activeByDefault (true | false) >

Definuje filtr, který může být asociován s konkrétním běžným prohlížečem. Běžné filtry jsou vázány k prohlížeči jako rozšíření obsahu pomocí org.eclipse.ui.navigator.viewer/viewerContentBinding.



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

Volitelný výraz Eclipse Core Expression, který definuje, co by měl filtr skrýt před konkrétním pohledem.

Klienti se mohou například rozhodnout skrýt všechny prostředky, které mají konkrétní vzor ve svém názvu (jako např. "*.acme"). Když je filtr aktivní (zapnut ve výchozím nastavení nebo zapnut uživatelem), potom budou před pohledem uživatele skryty všechny prostředky, které končí na "acme".

Klienti mohou použít buďto filterExpression, nebo atribut "class", ale nikoli oba.



<!ELEMENT commonSorter (parentExpression)>

<!ATTLIST commonSorter

id    CDATA #REQUIRED

class CDATA #REQUIRED>

commonSorter deklaruje podtřídu org.eclipse.jface.viewers.ViewerSorter, která se používá k seřazení podřízených prvků ve stromě. Vnořený parentExpression popisuje, kdy by měl být použitý commonSorter. Pokud prvek odpovídá parentExpression, potom budou jeho podřízené prvky seřazeny pomocí tohoto commonSorter.



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

parentExpression používá commonSorter pro identifikaci, je-li to zapotřebí. Pokud parentExpression pro commonSorter odpovídá danému prvku, potom se commonSorter použije k třídění podřízených prvků tohoto prvku (vrácených poskytovatelem obsahu ve službě obsahu).



<!ELEMENT override EMPTY>

<!ATTLIST override

suppressedExtensionId CDATA #REQUIRED

policy                (InvokeOnlyIfSuppressedExtAlsoVisibleAndActive|InvokeAlwaysRegardlessOfSuppressedExt) "InvokeAlwaysRegardlessOfSuppressedExt">

Když je výraz triggerPoints pro potlačené rozšíření i pro deklarované rozšíření zpřístupněn na daném prvku, toto rozšíření bude vyvoláno, ale jeho potlačené rozšíření nikoli. Klienti, kteří specifikují prvek override, musejí také poskytnout poskytovatele obsahu, který implementuje org.eclipse.ui.navigator.IPipelinedTreeContentProvider, který poskytuje metody pro zachycení žádostí pro podřízené prvky, nadřízené prvky a přímé aktualizace prohlížeče.



<!ELEMENT dropAssistant (possibleDropTargets)>

<!ATTLIST dropAssistant

id    CDATA #REQUIRED

class CDATA #REQUIRED>

Poskytuje podtřídu org.eclipse.ui.navigator.CommonDropAdapterAssistant, který může poskytnout programové ověření pro operaci umístění, požadovat další typy přenosů a ošetřovat operace umístění.

dropAssistant bude vyvolán vždy, když přetažené prvky odpovídají výrazu possibleChildren rozšíření navigatorContent, které jej obsahuje, a cíl umístění operace je popsán výrazem possibleDropTargets prvku dropAssistant.

Rozšíření může mít víc adaptérů umístění se vzájemně se vylučujícími výrazy possibleDropTargets. Prvnímu nalezenému adaptéru umístění, který odpovídá danému cíli umístění a vrátí stav OK pro CommonDropAdapterAssistant.validateDrop(...) bude poskytnuta příležitost umístění ošetřit.



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

Popište možné cíle umístění, které může zpracovat konkrétní dropAssistant.



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

Generický kořenový prvek. Tento prvek je možné použít uvnitř bodu rozšíření pro definování jeho výrazu typu enablement. Podřízené prvky výrazu enablement se kombinují pomocí operátoru and.



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

Tento prvek představuje operaci NOT nad výsledkem vyhodnocení výrazů svých dílčích prvků.



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

Tento prvek představuje operaci AND nad výsledkem vyhodnocení výrazů všech svých dílčích prvků.



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

Tento prvek představuje operaci OR nad výsledkem vyhodnocení výrazů všech svých dílčích prvků.



<!ELEMENT instanceof EMPTY>

<!ATTLIST instanceof

value CDATA #REQUIRED>

Tento prvek se používá k provádění kontroly typu instanceof nad objektem, na němž je fokus. Tento výraz vrací EvaluationResult.TRUE, pokud je typ daného objektu podtypem typu určeného hodnotou atributu. Jinak je vráceno EvaluationResult.FALSE.



<!ELEMENT test EMPTY>

<!ATTLIST test

property CDATA #REQUIRED

args     CDATA #IMPLIED

value    CDATA #IMPLIED>

Tento prvek se používá k vyhodnocení stavu vlastnosti objektu, na němž je fokus. Množinu testovatelných vlastností je možné rozšířit pomocí bodu rozšíření testeru vlastností. Pokud tester vlastností, který provádí skutečné testování, dosud není načten, vrací testovací výraz EvaluationResult.NOT_LOADED.



<!ELEMENT systemTest EMPTY>

<!ATTLIST systemTest

property CDATA #REQUIRED

value    CDATA #REQUIRED>

Testuje vlastnost systému voláním metody System.getProperty a porovnává výsledek s hodnotou stanovenou pomocí atributu value.



<!ELEMENT equals EMPTY>

<!ATTLIST equals

value CDATA #REQUIRED>

Tento prvek se používá k provádění kontroly typu equals nad objektem, na němž je fokus. Pokud se objekt rovná hodnotě dodané atributem value, vrací tento výraz EvaluationResult.TRUE. Jinak je vráceno EvaluationResult.FALSE.



<!ELEMENT count EMPTY>

<!ATTLIST count

value CDATA #REQUIRED>

Tento prvek se používá k testování počtu prvků v kolekci.



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

<!ATTLIST with

variable CDATA #REQUIRED>

Tento prvek mění pro všechny své podřízené prvky objekt, který má být kontrolován, na objekt uvedený v atributu variable. Pokud tuto proměnnou nelze vyřešit, způsobí výraz při jejím vyhodnocování ExpressionException. Podřízené prvky výrazu with se kombinují pomocí operátoru and.



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

<!ATTLIST resolve

variable CDATA #REQUIRED

args     CDATA #IMPLIED>

Tento prvek mění pro všechny své podřízené prvky objekt, který má být kontrolován, na objekt uvedený v atributu variable. Pokud tuto proměnnou nelze vyřešit, způsobí výraz při jejím vyhodnocování ExpressionException. Podřízené prvky výrazu with se kombinují pomocí operátoru and.



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

<!ATTLIST adapt

type CDATA #REQUIRED>

Tento prvek se používá k úpravě objektu, na němž je fokus, na typ určený atributem type. Pokud adaptér nebo typ, na který se odkazuje, ještě není načten, vrací tento výraz "not loaded". Pokud daný název typu vůbec neexistuje, způsobí při vyhodnocování výjimku ExpressionException. Podřízené prvky výrazu adapt se kombinují pomocí operátoru and.



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

<!ATTLIST iterate

operator (or|and) >

Tento prvek se používá k opakování nad proměnnou typu java.util.Collection. Pokud objekt, na němž je fokus, není typu java.util.Collection, způsobí při vyhodnocování výrazu výjimku ExpressionException.




Přidávání obsahu

Následující příkaz popisuje rozšíření obsahu, který popisuje obsah prostředku. Výraz triggerPoints určuje, kdy je toto rozšíření na počátku vyvoláno. Pokud viewerContentBinding odpovídá tomuto rozšíření s atributem "isRoot" nastaveným na true, pak rozšíření bude použito bez ohledu na to, zda kořenový prvek odpovídá výrazu 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>

Přidávání akcí

Klienti mohou použít objekt nebo příspěvky prohlížeče (viz org.eclipse.ui.popupMenus), aby poskytli akce pro svůj pohled. Někdy klienti vyžadují větší míru flexibility, než každý z těchto přístupů umožňuje, a proto rámcový systém Common Navigator podporuje přidávání poskytovatele akcí. "Poskytovatelé akcí" jsou podtřídou org.eclipse.ui.actions.ActionGroup a mají příležitosti plnit řádky s akcemi a nabídky založené na různých událostech (výběr resp. klepnutí pravého tlačítka myši).

Klienti mohou buďto asociovat jednoho či více poskytovatelů akcí s určitým rozšířením obsahu, nebo deklarovat poskytovatele akcí jako příspěvky nejvyšší úrovně, neasociované s žádným rozšířením obsahu. Poskytovatelé akcí nejvyšší úrovně musejí být asociováni s konkrétní instancí prohlížeče pomocí bodu rozšíření org.eclipse.ui.navigator.viewer/viewerActionBinding. Vnoření poskytovatelé akcí jsou automaticky vázání k prohlížeči na základě toho, zda je jejich obsahující rozšíření obsahu také vázáno k prohlížeči (viz org.eclipse.ui.navigator/viewerContentBinding).

Následující příklad demonstruje oba přístupy. Poskytovateli "TestNestedActionProvider" bude dána příležitost přispět k nabídce a k org.eclipse.ui.IActionBars pouze tehdy, když je rozšíření "org.eclipse.ui.tests.navigator.testContent" viditelné a aktivní. Pokud uživatel deaktivuje testovací rozšíření z dialogového okna "Dostupná vlastní nastavení", pak vnořenému poskytovateli akcí již nebude dána příležitost přispívat.

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

Klienti mohou definovat filtry buďto pomocí podtřídy org.eclipse.jface.viewers.ViewerFilter, nebo prostřednictvím výrazů jádra Eclipse. Následující příklad demonstruje obě techniky. Klienti mohou použít pouze jednu z obou možností. Rozšíření, která specifikují chybně obě, povedou pouze k tomu, že bude respektován filtr výrazu jádra. Pole název a popis jsou přeložitelné a měly by externalizovat řetězce v reálných prostředích.

<extension point=

"org.eclipse.ui.navigator.navigatorContent"

>

<commonFilter class=

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

description=

"Skryjte objekty TestItem, které končí číslem &quot;3&quot;"

id=

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

name=

"TestItems, které končí na &quot;3&quot;"

activeByDefault=

"true"

/>

<commonFilter description=

"Skryje všechny instance testovací položky Test Item"

id=

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

name=

"Filtr TestItem Exp Filter (měl by být seřazen abecedně..)"

>

<filterExpression>

<instanceof value=

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

/>

</filterExpression>

</commonFilter>

Společné seřazení je stanoveno pro množinu podřízených prvků na základě jejich nadřízených prvků. Třída seřazení musí být podtřídou 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>

Následující příklad demonstruje, jak přidat akce zástupce průvodce pro "Novou složku" a "Nový soubor", které jsou zpřístupněny v konkrétních podtřídách org.eclipse.core.resources.IResource. Klienti mohou použít libovolné části org.eclipse.core.expressions, které jsou potřebné k popisu toho, kdy by měly být volby nabídky k dispozici. Níže specifikované ID průvodce wizardId musí odpovídat jednomu z bodů rozšíření org.eclipse.ui.xxxWizards.

Klienti budující své vlastní prohlížeče nebo části pohledů, dbejte na to, abyste použili org.eclipse.ui.navigator.WizardActionGroup pro správné naplnění nabídky. Další dokumentace o použití této funkce viz tato třída.


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