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

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

Например, значки оформления дополнений PDE позволяют различать двоичные и исходные проекты.

Панель Структура с значками оформления PDE

Проект com.example.helloworld  является единственным проектом с исходным кодом, показываемым в навигаторе.   Обратите внимание на то, как все остальные двоичные проекты отображают значки оформления двоичного проекта в верхнем левом углу значка проекта 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.png"
            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 позволяет описать условия применения значков оформления к объекту.    Флаг адаптируемый указывает, следует ли добавлять значки оформления к объектам, принимающим IResource.  Флаг состояние указывает, показан ли значок оформления по умолчанию.

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

Страница параметров значков оформления CVS

 

Цикл обновления значка оформления

Значок оформления инициируется путем обновления поставщиков меток, поддерживающих DecoratorManager. После обработки параметров оформления между запросом метки и выдачей события labelProviderChanged выполняются необходимые вычисления. В течение этого времени объект вычисляется только один раз. Изменение значка оформления в течение этого времени может привести к передаче устаревшего результата, поскольку второй и последующие вызовы оформления элемента игнорируются.

Дополняющие классы оформления должны избегать изменения значков оформления в процессе настройки оформления. В противном случае потребуется второй вызов для оформления элемента после обработки labelProviderChanged.