Значки оформления

org.eclipse.ui.decorators

2.0 и выше

Эта точка расширения служит для добавления значков оформления в панели, управляемые администратором оформления. В версии 2.1 есть понятие простого значка оформления, который управляет изображением значка. Также есть возможность объявить простой значок оформления, который, будучи включен, будет просто замещать значок из модуля и для которого не нужна реализация из модуля.

Для определения подключения и/или видимости действия применяются, соответственно, элементы enablement и visibility. Два этих элемента содержат булевское выражение, которое вычисляется, чтобы определить подключение и/или видимость.

Синтаксис элементов enablement и visibility одинаков. Оба содержат только один подэлемент булевского выражения. В простейшем случае это будет элемент objectClass, objectState, pluginState или systemProperty. В более сложном случае для создания булевского выражения можно использовать сочетания элементов and, or и not. Элементы and и or должны содержать по 2 подэлемента. Элемент not должен содержать только один подэлемент.

<!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 description (#PCDATA)>

необязательный подэлемент, тело которого содержит текст краткого описания значка оформления. Это описание будет показано на странице параметров значков оформления, поэтому рекомендуется его заполнять. Значение по умолчанию - пустая строка.



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

Этот элемент позволяет определить подключение для расширения.



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

Этот элемент применяется для определения видимости расширения.



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

Это - булевская операция AND над результатами вычисления двух операндов выражения.



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

Это - булевская операция OR над результатами вычисления двух операндов выражения.



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

Это - булевская операция NOT над результатами вычисления двух операндов выражения.



<!ELEMENT objectClass EMPTY>

<!ATTLIST objectClass

name CDATA #REQUIRED>

Этот элемент позволяет проверить класс или интерфейс каждого выбранного объекта. Выражение истинно, если все выбранные объекты реализуют указанный класс или интерфейс.



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Этот элемент используется для проверки состояния атрибута каждого выбранного объекта. Выражение истинно, если для всех выбранных объектов атрибут находится в указанном состоянии. Для вычисления выражения этого типа каждый объект в выборе должен реализовывать интерфейс org.eclipse.ui.IActionFilter или адаптироваться к нему.



<!ELEMENT pluginState EMPTY>

<!ATTLIST pluginState

id    CDATA #REQUIRED

value (installed|activated) "installed">

Этот элемент позволяет проверить состояние модуля. Состояние модуля может принимать значения: installed (соответствует "resolved" в OSGi) или activated (соответствует "active" в OSGi).



<!ELEMENT systemProperty EMPTY>

<!ATTLIST systemProperty

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Этот элемент позволяет проверить состояние некоторого системного свойства. Значение свойства извлекается из java.lang.System.



Ниже приведены примеры значков оформления:

Полный значок оформления. Разработчик модуля должен реализовать обработку ресурсов изображений.

 

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

Простой значок оформления. Это действительный класс, но так как это ILightweightLabelDecorator, то для него требуется только задать текст и ImageDescriptor. Никакой обработки ресурсов не требуется.

 

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

Простой декларативный значок оформления. Он не является действительным классом, поэтому для него нужен значок и квадрант для этого значка.

 

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

Значение атрибута class должно быть полным именем класса, реализующего org.eclipse.jface.viewers.ILabelDecorator (если значение атрибута lightweight равно false), или org.eclipse.jface.viewers.ILightweightLabelDecorator. Этот класс необходимо загружать как можно позже, чтобы избежать загрузки всего модуля, до того как он потребуется в действительности. Декларативные значки оформления не активизируют модуль, и поэтому их следует применять везде, где возможно. Значки оформления, не являющиеся простыми, вскоре устареют.

Модули могут использовать эту точку расширения для добавления новых значков оформления, применяемых к панелям, которые используют в качестве значка оформления метки администратор значков оформления. Для работы с администратором значков оформления в качестве значка оформления для экземпляра DecoratingLabelProvider следует взять результат IViewPart.getDecoratorManager(). Так работает Навигатор ресурсов.