Il plug-in può utilizzare decoratori, decorators, per inserire annotazioni inerenti alle immagini relative alle risorse e agli altri oggetti mostrati nelle viste del workbench. I decoratori risultano di grande utilità quando il plug-in aggiunge nuove funzionalità per i tipi di risorse esistenti. Molte delle viste standard del workbench partecipano alla visualizzazione delle decorazioni.
Ad esempio, il PDE fornisce decoratori che consentono di effettuare distinzioni tra progetti binari e progetti di origine.
Il progetto com.example.sourceProject è il solo progetto di origine visualizzato nel pannello di selezione. Si noti come tutti gli altri progetti binari mostrino il decoratore binario nella parte superiore sinistra dell'icona del progetto Java. Questo decoratore viene fornito dal PDE mediante il punto di estensione 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>
Ci sono diversi modi di realizzare un'implementazione di decoratore. Questo tag utilizza il modo più semplice, detto decoratore dichiarativo lightweight (semplificato). Quando viene definito un decoratore dichiarativo semplificato, il tag contiene una descrizione completa dell'icona, posizione e condizioni di abilitazione del decoratore. I decoratori dichiarativi sono utili quando per decorare l'etichetta si utilizza solo un'icona. Il plug-in richiede solo la specifica di quadrant, il quadrante dove il decoratore deve essere sovrapposto all'icona normale, e di icon, l'icona da sovrapporre. Come mostrato nella figura, l'icona binaria PDE viene sovrapposta nel quadrante in alto a sinistra dell'icona.
Se il plug-in deve gestire il testo dell'etichetta oltre all'icona stessa, o se il tipo di icona viene determinato in modo dinamico, è possibile utilizzare un decoratore non-dichiarativo lightweight. In questo caso, deve essere definita una class che implementa ILightweightLabelDecorator. La classe designata provvede a fornire un prefisso, suffisso e immagine di sovrapposizione al run-time da applicare all'etichetta. Il meccanismo di concatenazione di prefisso e suffisso con il testo dell'etichetta e di gestione della sovrapposizione è gestito dal codice del workbench in un thread di background. Pertanto, qualsiasi attività svolta dal plug-in nell'implementazione ILightweightLabelDecorator deve essere a livello di sicurezza del thread UI. Per ulteriori dettagli fare riferimento a Esecuzione del codice da un thread non UI.
Il seguente tag mostra in che modo il client CVS definisce il decoratore con questa tecnica:
<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>
I decoratori sono inoltre controllati dall'utente tramite la pagina delle preferenze Decorazione etichette del workbench. I singoli decoratori possono essere attivati e disattivati. Tuttavia, si consiglia di realizzare i decoratori personalizzati in modo che non si sovrappongano o vadano in conflitto con i decoratori della piattaforma SDK esistente. Se più plug-in contribuiscono ai decoratori semplificati nello stesso quadrante, i conflitti sono risolti in modo non deterministico.
Il plug-in può anche gestire direttamente l'immagine e l'etichetta. In questo caso, l'attributo lightweight deve essere impostato a false e l'attributo class deve fare riferimento ad una classe che implementa ILabelDecorator. Questa classe consente di decorare l'immagine e il testo dell'etichetta originale con annotazioni personalizzate. Questo consente una maggiore flessibilità in quanto non si è limitati da prefissi, suffissi e sovrapposizioni di quadranti semplici.
Altri attributi del decoratore sono indipendenti dallo stile di implementazione. Gli attributi label e description individuano il testo utilizzato per assegnare un nome e una descrizione al decoratore nella finestra di dialogo delle preferenze. objectClass indica la classe di oggetti alla quale si applica il decoratore. L'attributo enablement consente di descrivere le condizione nelle quali la decorazione è attiva. L'indicatore adaptable segnala se anche gli oggetti che si adattano alla classe IResource devono essere decorati. L'indicatore state controlla se il decoratore risulta visibile per impostazione predefinita.
Se i decoratori includono informazioni che risultano dispendiose da elaborare o potenzialmente fuorvianti, specificare preferenze personalizzate consente di regolare il decoratore secondo le proprie esigenze dopo averlo attivato. Questa tecnica viene utilizzata dal client CVS.