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

org.eclipse.ui.decorators

Выпуск 2.0

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

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

Синтаксис элементов enablement и visibility одинаков. В оба эти элемента входит только один дочерний элемент - булевское выражение. В простейшем случае это будет элемент objectClass, objectState, pluginState или systemProperty. В более сложных - булевское выражение формируется с помощью элементов И, ИЛИ и НЕ. В элементах И и ИЛИ должно быть по два дочерних элемента. В элементе НЕ - только один.

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

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



<!ELEMENT objectState EMPTY>

<!ATTLIST objectState

name  CDATA #REQUIRED

value CDATA #REQUIRED>

Этот элемент служит для вычисления состояния атрибутов каждого объекта в текущем выбранном элементе. Если состояние атрибутов для всех объектов в текущем выбранном элементе равно заданному, то возвращается значение true. Для вычисления выражений такого типа каждый объект должен реализовывать или применять интерфейс 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(). Так работает Навигатор ресурсов.