Dekorátory

org.eclipse.ui.decorators

Verze 2.0

Tento bod rozšíření se používá k přidání dekorátorů do pohledů, zapsaných ve správci dekorátorů. Od verze 2.1 existuje koncept odlehčeného dekorátoru, který bude ošetřovat správu obrázků pro dekorátor. Je také možné deklarovat odlehčený dekorátor, který, když je aktivní, jednoduše překrývá ikonu a nevyžaduje žádnou implementaci od modulu plug-in.

Zpřístupnění nebo viditelnost zvolené akce lze nastavit pomocí příslušného prvku enablement nebo visibility. Tyto dva prvky obsahují logický výraz, který je vyhodnocen pro stanovení zpřístupnění (enablement) anebo viditelnosti (visibility).

Syntaxe je stejná jak pro prvek enablement, tak i pro prvek visibility. Oba obsahují pouze jeden dílčí prvek logického výrazu. V nejjednodušším případě to bude prvek objectClass, objectState, pluginState nebo systemProperty. V komplexnějších případech mohou být kombinovány prvky and, or a not pro vytvoření logického výrazu. Prvky and a or musí obsahovat 2 dílčí prvky. Prvek not musí obsahovat pouze 1 dílčí prvek.

<!ELEMENT extension (decorator*)>

<!ATTLIST extension

point CDATA #REQUIRED

id    CDATA #IMPLIED

name  CDATA #IMPLIED>


<!ELEMENT decorator (description? , enablement?)>

<!ATTLIST decorator

id          CDATA #REQUIRED

label       CDATA #REQUIRED

class       CDATA #IMPLIED

objectClass CDATA #IMPLIED

adaptable   (true | false)

state       (true | false)

lightweight (true|false)

icon        CDATA #IMPLIED

location    (TOP_LEFT|TOP_RIGHT|BOTTOM_LEFT|BOTTOM_RIGHT|UNDERLAY) >


<!ELEMENT description (#PCDATA)>

Volitelný podřízený prvek, jehož tělo by mělo obsahovat text poskytující krátký popis dekorátoru. Ten se zobrazí na stránce předvoleb dekorátorů, takže se doporučuje, aby byl zahrnut. Výchozí hodnota je prázdný řetězec.



<!ELEMENT enablement (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Tento prvek se používá k definování zpřístupnění pro rozšíření.



<!ELEMENT visibility (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Tento prvek se používá k definování viditelnosti pro rozšíření.



<!ELEMENT and (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Tento prvek představuje logickou operaci AND na výsledku vyhodnocení dvou výrazů jeho dílčích prvků.



<!ELEMENT or (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Tento prvek představuje logickou operaci OR na výsledku vyhodnocení dvou výrazů jeho dílčích prvků.



<!ELEMENT not (and | or | not | objectClass | objectState | pluginState | systemProperty)>

Tento prvek představuje logickou operaci NOT na výsledku vyhodnocení výrazů jeho dílčích prvků.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Tento prvek se používá pro vyhodnocení třídy nebo rozhraní každého objektu v aktuálním výběru. Pokud každý objekt ve výběru implementuje zadanou třídu nebo rozhraní, je výraz vyhodnocen jako true.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Tento prvek se používá pro vyhodnocení stavu atributu každého objektu v aktuálním výběru. Pokud má každý objekt ve výběru zadaný stav atributu, je výraz vyhodnocen jako pravdivý (true). Aby bylo možné vyhodnotit tento typ výrazu, musí se každý objekt ve výběru implementovat nebo přizpůsobit rozhraní org.eclipse.ui.IActionFilter.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Tento prvek se používá pro vyhodnocení stavu modulu plug-in. Stav modulu plug-in může být jeden z následujících: instalován (ekvivalentní stavu "vyřešený" v rámci konceptu OSGi) nebo aktivován (ekvivalentní stavu "aktivní" v rámci konceptu OSGi).



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Tento prvek se používá pro vyhodnocení stavu některé vlastnosti systému. Hodnota vlastnosti je získána z java.lang.System.



V následujícím jsou uvedeny příklady dekorátorů:

Úplný dekorátor. Vývojář modulu plug-in musí ošetřit svou vlastní podporu obrázků.

 

<extension point=

"org.eclipse.ui.decorators"

>

<decorator id=

"com.xyz.decorator"

label=

"XYZ Decorator"

state=

"true"

class=

"com.xyz.DecoratorContributor"

>

<enablement>

<objectClass name=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</decorator>

</extension>

Odlehčená verze dekorátoru. Existuje konkrétní třída, ale protože se jedná o ILightweightLabelDecorator, potřebuje jen dodat text a ImageDescriptor, a proto nepotřebuje žádné ošetření prostředků.

 

<extension point=

"org.eclipse.ui.decorators"

>

<decorator id=

"com.xyz.lightweight.decorator"

label=

"XYZ Lightweight Decorator"

state=

"false"

class=

"com.xyz.LightweightDecoratorContributor"

lightweight=

"true"

>

<enablement>

<objectClass name=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</decorator>

</extension>

Deklarativní odlehčená verze dekorátoru. Konkrétní třída neexistuje, takže pro použití ikony dodává ikonu a kvadrant.

 

<extension point=

"org.eclipse.ui.decorators"

>

<decorator id=

"com.xyz.lightweight.declarative.decorator"

label=

"XYZ Lightweight Declarative Decorator"

state=

"false"

lightweight=

"true"

icon=

"icons/full/declarative.gif"

location=

"TOP_LEFT"

>

<enablement>

<objectClass name=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</decorator>

</extension>

Hodnota atributu class musí být plně kvalifikovaný název třídy, která implementuje org.eclipse.jface.viewers.ILabelDecorator (pokud je odlehčená verze false) nebo org.eclipse.jface.viewers.ILightweightLabelDecorator. Tato třída bude načtena co možná nejpozději, aby se zabránilo načtení celého modulu plug-in, dokud není skutečně potřebný. Deklarativní dekorátory neobsahují žádnou aktivaci modulu plug-in a měly by být použity vždy, když je to možné. Neodlehčené verze dekorátorů se postupně stanou nepřípustnými.

Moduly plug-in mohou použít tento bod rozšíření k přidání nových dekorátorů, které mají být použity pro pohledy používající správce dekorátorů jako svůj štítkový dekorátor. Chcete-li použít správce dekorátorů, použijte výsledek IViewPart.getDecoratorManager() jako dekorátor pro instanci DecoratingLabelProvider. Tu v současné době používá navigátor prostředků.