org.eclipse.ui.decorators

Seu plug-in pode utilizar decoradores para anotar as imagens de recursos e outros objetos que aparecem nas exibições do workbench.  Os decoradores são úteis quando seu plug-in inclui funcionalidade para tipos de recursos existentes.  Muitas das exibições padrão do workbench participam na exibição de decorações.  

Por exemplo, o PDE contribui com decoradores que permitem a distinção entre projetos binários e de origem.

Exibição Package Explorer com decoradores do PDE

O projeto com.example.sourceProject  é o único projeto de origem mostrado no navegador.  Observe como todos os outros projetos binários mostram o decorador binário no lado superior esquerdo do ícone do projeto Java.  Esse decorador recebe contribuição do PDE utilizando o ponto de extensão org.eclipse.ui.decorators.

<extension
         point="org.eclipse.ui.decorators">
      <decorator
            lightweight="true"
            quadrant="TOP_LEFT"
            adaptable="true"
            label="%decorator.label"
            icon="icons/full/ovr16/binary_co.gif"
            state="false"
            id="org.eclipse.pde.ui.binaryProjectDecorator">
         <description>
            %decorator.desc
         </description>
         <enablement>
            ...
         </enablement>
      </decorator>
 </extension>

Existem várias maneiras diferentes de fornecer a implementação de um decorador.  Essa marcação utiliza a maneira mais simples, conhecida como decorador declarativo leve.  Quando um decorador declarativo leve é definido, a marcação contém uma descrição completa do ícone, posicionamento e condições de ativação do decorador.  Os decoradores declarativos são úteis apenas quando um ícone é utilizado para decorar o rótulo.  O plug-in precisa especificar apenas o quadrante em que o decorador deve ser sobreposto no ícone regular e o ícone para a sobreposição.  Como mostrado na imagem, o ícone binário do PDE é sobreposto no quadrante superior esquerdo do ícone do pacote.

Se o seu plug-in precisar manipular o texto do rótulo além do ícone, ou se o tipo do ícone for determinado dinamicamente, é possível utilizar um decorador não-declarativo leve.  Nesse caso uma classe de implementação que implemente ILightweightLabelDecorator deve ser definida.  A classe designada é responsável pelo fornecimento de um prefixo, um sufixo e uma imagem de sobreposição em tempo de execução que são aplicados ao rótulo.  A mecânica da concatenação do prefixo e do sufixo com o texto do rótulo e a execução da sobreposição são tratadas pelo código do workbench em um encadeamento de segundo plano.  Assim, qualquer trabalho realizado pelo plug-in em sua implementação de ILightweightLabelDecorator deve ser seguro de encadeamento da UI.  (Consulte Executando código de um encadeamento que não é da UI para obter detalhes adicionais.)

  A marcação a seguir mostra como o cliente do CVS define seu decorador utilizando essa técnica:

<extension
         point="org.eclipse.ui.decorators">
    <decorator
            objectClass="org.eclipse.core.resources.IResource"
            adaptable="true"
            label="%DecoratorStandard.name"
            state="false"
            lightweight= "true"
            quadrant = "BOTTOM_RIGHT"
            class="org.eclipse.team.internal.ccvs.ui.CVSLightweightDecorator"
            id="org.eclipse.team.cvs.ui.decorator">
         <description>
            %DecoratorStandard.desc
         </description>
    </decorator>
</extension>

Os decoradores são basicamente controlados pelo usuário por meio da página de preferências Decorações de Rótulo do workbench.  Os decoradores individuais podem ser ativados e desativados.  Ainda assim, é uma boa idéia fazer o design dos decoradores de forma que eles não sobreponham ou conflitem com decoradores existentes do SDK da plataforma. Se vários plug-ins contribuírem com decoradores leves no mesmo quadrante, os conflitos serão resolvidos de forma não determinística.  

Seu plug-in também pode fazer ele próprio todo o gerenciamento da imagem e do rótulo.  Nesse caso, o atributo lightweight deve ser definido como false e o atributo class deve nomear uma classe que implemente ILabelDecorator.  Essa classe permite decorar a imagem e o texto originais do rótulo com suas próprias anotações.  Ela fornece grande flexibilidade pois você não está limitado a prefixos, sufixos e sobreposições simples de quadrantes.

Outros atributos de um decorador são independentes do estilo específico de implementação.  Os atributos label e description designam o texto que é utilizado para nomear e descrever o decorador no diálogo de preferências.  O objectClass nomeia a classe de objetos para a qual o decorador deve ser aplicado.  O atributo enablement permite descrever as condições sob as quais o objeto deve ser decorado.   O sinalizador adaptable indica se objetos que se adaptam a IResource também devem ser decorados.  O sinalizador state controla se o decorador é visível por padrão.

Se seus decoradores incluírem informações que sejam caras de calcular ou muito confusas, é possível que você queira contribuir com suas próprias preferências que permitem que o usuário ajuste com precisão o decorador quando está ativo.  Esta técnica é utilizada pelo cliente CVS.

Página de preferências decoradores do CVS

 

Copyright IBM Corporation e outros 2000, 2003.