插件可以使用修饰符来注释出现在工作台视图中的资源和其它对象的图像。 当插件添加现有资源类型的功能时,修饰符会很有用。许多标准工作台视图参与显示修饰。
例如,PDE 添加使您能够区分二进制和源项目的修饰符。
com.example.sourceProject 项目是唯一显示在导航器中的源项目。 注意所有其它二进制项目如何在 Java 项目图标的左上方显示二进制修饰符。此修饰符是 PDE 使用 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>
有几种提供修饰符实现的不同方法。此标记使用最简单的方法(称为声明性轻量级修饰符)。当定义声明性轻量级修饰符时,该标记包含修饰符的图标、放置和启用条件的完整描述。仅当一个图标用来修饰标号时,声明性修饰符就会很有用。插件只需要指定应该在常规图标上覆盖修饰符的象限和覆盖层的图标。如图所示,在包图标的左上角象限中覆盖了 PDE 二进制图标。
如果插件除了处理图标之外还需要处理标号文本,或者如果动态确定了图标的类型,则您可以使用非声明性轻量级修饰符。在这种情况下,必须定义实现 ILightweightLabelDecorator 的实现类。指定的类负责在运行时提供应用于标号的前缀、后缀和覆盖层图像。将前缀和后缀与标号文本并置并执行覆盖层的机制由后台线程中的工作台代码处理。因此,由插件在其 ILightweightLabelDecorator 实现中执行的任何工作都必须是用户界面线程安全的。(有关更多详细信息,参见从非用户界面线程执行代码。)
以下标记显示 CVS 客户机如何使用此技术定义其修饰符:
<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>
修饰符最终由用户通过工作台标号修饰首选项页面控制。可以打开和关闭各个修饰符。即使情况如此,设计您的修饰符以使它们不覆盖现有平台 SDK 修饰符或不与这些现有修饰符冲突是一个很好的主意。如果多个插件向同一象限添加轻量级修饰符,则会以非决定性的方式解决冲突。
插件本身还可进行所有图像和标号管理。在这种情况下,lightweight 属性应该设置为 false,而 class 属性应该对一个实现 ILabelDecorator 的类进行命名。此类允许您使用自己的注释修饰原始标号的图像和文本。这就向您提供了更大的灵活性,因为您不再限于只能使用前缀、后缀和简单象限覆盖层。
修饰符的其它属性与特定实现样式无关。label 和 description 属性指定用来在首选项对话框中命名和描述修饰符的文本。objectClass 命名修饰符应当应用于的对象的类。enablement 属性允许您描述应该修饰对象的条件。adaptable 标志指示是否还应修饰适用于 IResource 的对象。state 标志控制在缺省情况下修饰符是否可视。
如果修饰符包括很难去计算或可能会混淆的信息,您可能想要添加自已的首选项,这些首选项允许用户在修饰符打开的情况下对其进行进一步的微调。此技术由 CVS 客户机使用。