Decoradores

org.eclipse.ui.decorators

Release 2.0

Este ponto de extensão é utilizado para incluir decoradores em visualizações que se associam a um gerenciador de decorador. A partir de 2.1, existe o conceito de decorador reduzido que manipulará o gerenciamento de imagens para o decorador. Também possível declarar um decorador lightweight que simplesmente substituirá um ícone, quando ativado, que não requer nenhuma implementação do plug-in.

A ativação e/ou visibilidade de uma ação pode ser definida utilizando os elementos enablement e visibility respectivamente. Esses dois elementos contêm uma expressão booleana que é avaliada para determinar a ativação e/ou visibilidade de uma ação.

A sintaxe dos elementos enablement e visibility é a mesma. Ambos contêm apenas um subelemento de expressão booleana. No caso mais simples, esse subelemento será um elemento objectClass, objectState, pluginState ou systemProperty. No caso mais complexo, os elementos and, or e not poderão ser combinados para formar uma expressão booleana. Os elementos and e or devem conter 2 subelementos. O elemento not deve conter apenas 1 subelemento.

<!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 descrição (#PCDATA)>

Um subelemento opcional cujo corpo deve conter um texto, fornecendo uma breve descrição do decorador. Isso será mostrado na página Preferência de decoradores, portanto, recomenda-se que esteja incluído. O valor padrão é uma Cadeia vazia.



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

Esse elemento é utilizado para definir a ativação para a extensão.



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

Esse elemento é utilizado para definir a visibilidade para a extensão.



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

Esse elemento representa uma operação booleana AND como resultado da avaliação de duas expressões de subelementos.



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

Esse elemento representa uma operação booleana OR como resultado da avaliação de duas expressões de subelementos.



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

Esse elemento representa uma operação booleana NOT no resultado da avaliação de expressões de subelementos.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Esse elemento é utilizado para avaliar a classe ou interface de cada objeto na seleção atual. Se cada objeto na seleção implementar a classe ou a interface especificada, a expressão será avaliada como true.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Esse elemento é utilizado para avaliar o estado de atributo de cada objeto na seleção atual. Se cada objeto na seleção tiver o estado de atributo especificado, a expressão será avaliada como true. Para avaliar esse tipo de expressão, cada objeto na seleção deve implementar ou adaptar-se à interface org.eclipse.ui.IActionFilter.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Esse elemento é utilizado para avaliar o estado de um plug-in. O estado do plug-in pode ser um dos seguintes: installed (equivalente ao conceito OSGi de "resolved") ou activated (equivalente ao conceito OSGi de "active").



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Esse elemento é utilizado para avaliar o estado de alguma propriedade do sistema. O valor da propriedade é recuperado de java.lang.System.



A seguir estão exemplos de decoradores:

Um decorador completo. O desenvolvedor de plug-ins deve identificar seu próprio suporte de imagens.

 

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

Um decorador lightweight. Há uma classe concreta, mas como ele está em um ILightweightLabelDecorator, só precisa fornecer texto e um ImageDescriptor, não precisando de nenhuma identificação de recurso.

 

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

Um decorador lightweight informativo. Não há nenhuma classe concreta, portanto, ele fornece um ícone e um quadrante para aplicar esse ícone.

 

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

O valor do atributo class deve ser o nome completo de uma classe que implementa org.eclipse.jface.viewers.ILabelDecorator (se lightweight for false) ou org.eclipse.jface.viewers.ILightweightLabelDecorator. Essa classe é carregada o mais tarde possível para evitar o carregamento de todo o plug-in antes que isso seja realmente necessário. Decoradores informativos não exigem a ativação de plug-ins e devem ser utilizados sempre que possível. Decoradores não-lightweight serão eventualmente recusados.

Os plug-ins podem utilizar este ponto de extensão para incluir novos decoradores para serem aplicados em visualizações que utilizam o gerenciador de decoradores como seus decoradores de rótulo. Para utilizar o gerenciador de decoradores, utilize o resultado de IViewPart.getDecoratorManager() como decorador de uma instância de DecoratingLabelProvider. Atualmente, isso está sendo utilizado pelo Navegador de Recursos.