Dekoracje

org.eclipse.ui.decorators

2.0

Ten punkt rozszerzenia umożliwia dodawanie dekoracji do widoków, które subskrybują menedżera dekoracji. W wersji 2.1 istnieje pojęcie prostej dekoracji, która obsługuje zarządzanie obrazami na potrzeby dekoracji. Można także zadeklarować prostą dekorację, która w przypadku włączenia po prostu nakłada ikonę bez potrzeby implementacji ze strony modułu dodatkowego.

Dostępność i widoczność akcji można odpowiednio zdefiniować przy użyciu elementów enablement oraz visibility. Te dwa elementy zawierają wyrażenie boolowskie, od którego wartości zależy dostępność i/lub widoczność.

Składnia dla elementów enablement oraz visibility jest taka sama. Oba zawierają tylko jeden podelement w formie wyrażenia boolowskiego. W najprostszym przypadku będzie to element objectClass, objectState, pluginState lub systemProperty. W bardziej złożonych przypadkach można łączyć elementy and, or oraz not w celu utworzenia wyrażenia boolowskiego. Element and i element or muszą zawierać dwa podelementy. Element not musi zawierać tylko jeden podelement.

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

Opcjonalny podelement, którego treść powinien stanowić tekst z krótkim opisem dekoracji. Będzie on wyświetlany na stronie preferencji Dekoracje, a więc zalecane jest jego uwzględnienie. Wartość domyślna to pusty łańcuch.



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

Ten element służy do definiowania włączenia rozszerzenia.



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

Ten element służy do definiowania widoczności rozszerzenia.



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

Ten element reprezentuje boolowską operację AND wykonywaną na wyniku wartościowania wyrażeń stanowiących jego dwa podelementy.



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

Ten element reprezentuje boolowską operację OR wykonywaną na wyniku wartościowania wyrażeń stanowiących jego dwa podelementy.



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

Ten element reprezentuje boolowską operację NOT wykonywaną na wyniku wartościowania wyrażeń stanowiących jego podelementy.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Ten element służy do wartościowania klasy lub interfejsu każdego obiektu w bieżącym wyborze. Jeśli każdy obiekt w wyborze implementuje określoną klasę lub interfejs, wyrażenie otrzyma wartość true.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Ten element służy do wartościowania stanu atrybutu każdego obiektu w bieżącym wyborze. Jeśli każdy obiekt w wyborze ma określony stan atrybutu, wyrażenie otrzyma wartość true. Aby można było przeprowadzić wartościowanie tego typu wyrażenia, każdy obiekt w wyborze musi implementować interfejs org.eclipse.ui.IActionFilter lub dostosować się do niego.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Ten element służy do wartościowania stanu modułu dodatkowego. Stan modułu dodatkowego może mieć jedną z następujących wartości: installed (odpowiednik "resolved" w środowisku OSGi) lub activated (odpowiednik "active" w środowisku OSGi).



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Ten element służy do wartościowania stanu wybranej właściwości systemowej. Wartość właściwości jest pobierana z obiektu typu java.lang.System.



Poniżej przedstawiono przykłady dekoracji:

Dekoracja pełna. Programista modułu dodatkowego musi opracować własną procedurę obsługi obrazów.

 

<extension point=

"org.eclipse.ui.decorators"

>

<decorator id=

"com.xyz.decorator"

label=

"Dekoracja XYZ"

state=

"true"

class=

"com.xyz.DecoratorContributor"

>

<enablement>

<objectClass name=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</decorator>

</extension>

Dekoracja prosta. Występuje klasa konkretna, ale ponieważ jest to klasa ILightweightLabelDecorator, konieczne jest dostarczenie tylko tekstu oraz elementu ImageDescriptor, a zatem nie jest wymagana obsługa zasobów.

 

<extension point=

"org.eclipse.ui.decorators"

>

<decorator id=

"com.xyz.lightweight.decorator"

label=

"Dekoracja prosta XYZ"

state=

"false"

class=

"com.xyz.LightweightDecoratorContributor"

lightweight=

"true"

>

<enablement>

<objectClass name=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</decorator>

</extension>

Deklaratywna dekoracja prosta. Nie występuje klasa konkretna, a więc dostarczana jest ikona oraz kwadrant do zastosowania tej ikony.

 

<extension point=

"org.eclipse.ui.decorators"

>

<decorator id=

"com.xyz.lightweight.declarative.decorator"

label=

"Prosta dekoracja deklaratywna XYZ"

state=

"false"

lightweight=

"true"

icon=

"icons/full/declarative.gif"

location=

"TOP_LEFT"

>

<enablement>

<objectClass name=

"org.eclipse.core.resources.IResource"

/>

</enablement>

</decorator>

</extension>

Wartość atrybutu class musi być pełną nazwą klasy implementującej interfejs org.eclipse.jface.viewers.ILabelDecorator (jeśli element lightweight ma wartość false) lub interfejs org.eclipse.jface.viewers.ILightweightLabelDecorator. Klasa ta jest ładowana możliwie najpóźniej, co pozwala uniknąć ładowania całego modułu dodatkowego, zanim będzie naprawdę potrzebny. Dekoracje deklaratywne nie wymagają aktywowania modułów dodatkowych i powinny być stosowane możliwie najczęściej. Dekoracje inne niż proste zostaną ostatecznie wycofane.

Moduły dodatkowe mogą korzystać z tego punktu rozszerzenia, aby dodawać nowe dekoracje, które mają być zastosowane w widokach używających menedżera dekoracji jako dekoracji etykiet. Aby użyć menedżera dekoracji, należy zastosować wynik metody IViewPart.getDecoratorManager() jako dekorację dla instancji klasy DecoratingLabelProvider. Sposób ten jest aktualnie stosowany w nawigatorze zasobów.