Ihr Plug-in kann Dekorationen verwenden, um die Images für Ressourcen und andere Objekte in Workbench-Sichten durch Anmerkungen zu ergänzen. Dekorationen sind nützlich, wenn das Plug-in Funktionskomponenten für vorhandene Ressourcentypen hinzufügt. Viele der standardmäßigen Workbench-Sichten unterstützen die Anzeige von Dekorationen.
PDE ergänzt z. B. Dekorationen, mit denen eine Unterscheidung nach Binär- und Quellenprojekten getroffen werden kann.
Das Projekt com.example.sourceProject ist das einzige Quellenprojekt, das im Navigator angezeigt wird. Beachten Sie hierbei, dass alle anderen binären Projekte die binären Dekorationen oben links im Java-Projektsymbol anzeigen. Diese Dekoration wird durch PDE mit Hilfe des Erweiterungspunktes org.eclipse.ui.decorators ergänzt.
<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>
Für die Bereitstellung einer Dekoratorimplementierung gibt es mehrere Möglichkeiten. Die dargestellten Konfigurationsbefehle verwenden die einfachste Methode, die auch als deklarativer einfacher Dekorator bezeichnet wird. Wenn ein deklarativer einfacher Dekorator definiert ist, enthalten die Konfigurationsbefehle eine komplette Beschreibung für das Symbol und die Position des Dekorator sowie seiner Aktivierungsbedingungen. Deklarative Dekoratoren sind hilfreich, wenn als Dekoration für die Bezeichnung lediglich ein Symbol verwendet wird. Das Plug-in muss nur den Quadranten angeben, in dem der Dekorator das übliche Symbol überlagern sollte, sowie das Symbol für die Überlagerung. Wie in der Abbildung dargestellt ist, wird das PDE-Binärsymbol im oberen linken Quadranten des Paketsymbols überlagert.
Falls Ihr Plug-in zusätzlich zum Symbol den Bezeichnungstext bearbeiten können muss oder falls der Typ des Symbols dynamisch ermittelt wird, können Sie hierzu einen nicht-deklarativen einfachen Dekorator verwenden. In diesem Fall muss eine Implementierungsklasse definiert werden, die ILightweightLabelDecorator implementiert. Die designierte Klasse ist für die Bereitstellung eines Präfixes, eines Suffixes und eines Überlagerungsimages zuständig, die zur Laufzeit auf die Bezeichnung angewendet werden. Die Mechanismen, mit denen das Präfix und das Suffix mit dem Bezeichnungstext verknüpft und die Überlagerung ausgeführt werden, werden vom Workbench-Code in einem Hintergrundthread verarbeitet. Daher müssen alle vom Plug-in in seiner Implementierung vonILightweightLabelDecorator ausgeführten Aktionen für Benutzerschnittstellenthreads sicher sein. (Weitere Details finden Sie unter Code aus Nicht-UI-Thread ausführen.)
Die folgenden Befehle zeigen, wie der CVS-Client seine Dekoratoren unter Verwendung dieses Verfahrens definiert:
<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>
Dekoratoren werden vom Benutzer über die Benutzervorgabenseite Dekorationen für Bezeichnungen der Workbench gesteuert. Einzelne Dekoratoren können ein- und ausgeschaltet werden. Trotzdem sollte beim Entwurf von Dekoratoren darauf geachtet werden, dass diese sich nicht mit Dekoratoren der SDK-Plattform überschneiden oder mit diesen in Konflikt stehen. Wenn mehrere Plug-ins einfache Dekoratoren für den gleichen Quadranten bereitstellen, werden die Konflikte auf nicht deterministische Weise aufgelöst.
Ihre Plug-in kann aber auch die gesamte Image- und Bezeichnungsverwaltung selbst übernehmen. In diesem Fall sollte das Attribut lightweight auf "false" gesetzt werden, und das Attribut class sollte eine Klasse benennen, die ILabelDecorator implementiert. Dank dieser Klasse können Sie das Image und den Text der ursprünglichen Bezeichnung mit ihren eigenen Anmerkungen versehen. Sie sind somit flexibler, denn Sie sind nicht auf Präfixe, Suffixe und einfache Quadrantenüberlagerungen beschränkt.
Andere Attribute eines Dekorators sind von der jeweiligen Implementierungsdarstellung unabhängig. Die Attribute label und description geben den Text an, der für die Benennung und Beschreibung des Dekorators im Benutzervorgabendialog verwendet werden sollen. Das Attribut objectClass benennt die Klasse von Objekten, bei denen der Dekorator angewendet werden soll. Mit dem Attribut enablement können Sie beschreiben, unter welchen Bedingungen das Objekt mit dem Dekorator versehen werden soll. Die Markierung adaptable gibt an, ob Objekte, die IResource zugeordnet sind, ebenfalls mit dem Dekorator versehen werden sollen. Die Markierung state steuert, ob der Dekorator standardmäßig sichtbar ist.
Wenn Ihre Dekoratoren Informationen enthalten, deren Berechnung sehr aufwendig ist oder zu unerwünschten Nebeneffekten führen kann, ist es möglicherweise sinnvoll, eigene Benutzervorgaben zu ergänzen, mit denen der Benutzer einen aktivierten Dekorator weiter anpassen kann. Dieses Verfahren wird vom CVS-Client eingesetzt.