Как можно использовать API IDecorationContext из Eclipse JFace

StackOverflow https://stackoverflow.com/questions/2027649

Вопрос

Есть ли пример использования IDecorationContext для украшения этикеток?

Судя по всему, IDecorationContext Кажется, что класс обеспечивает некоторую поддержку контекстного оформления, но хоть убей, я не могу найти ни одного примера кода, использующего эту функцию...

Использовал ли кто-нибудь функцию контекста оформления, и если да, то какие варианты использования она решила?


ПС: Я ищу способ применить украшения изображения к меткам объектов, и в зависимости от того, где отображается объект, размер базового значка варьируется (например,традиционные «маленькие» значки в элементах таблиц и деревьев и более крупные значки для заголовков контента).

Для украшений, нанесенных на оригинальные иконы, следует выбирать соответствующие по размеру украшения.

IDecorationContext Кажется, он отвечает всем требованиям, для которых он мне нужен, но документация настолько скудна, насколько можно ожидать от незначительной функции библиотеки с открытым исходным кодом, и примеров не найти.

Поиск в Google "Идекорационконтекст" тоже не выявил ничего интересного, поэтому я обращаюсь к мудрости толпы StackOverflow в надежде, что следующий парень, получивший вопрос, сможет получить ответ быстрее;)

Это было полезно?

Решение

Я не использовал IDecorationContext, но вы можете увидеть его использование в org.eclipse.jface.viewers.LabelDecorator.

Это также обсуждается в эта тема (даже если ответа нет, это, по крайней мере, может дать вам отправную точку)

Мой текущий подход состоит в том, чтобы расширить org.eclipse.ui.decorators, используя Ilightweenlabeldecorator, чтобы добавить наложение заменить на соответствующие значки:

public class ProjectLabelDecorator extends LabelProvider 
   implements ILightweightLabelDecorator {

   ...

   public void decorate(Object element, IDecoration decoration) {
      if (element instanceof IFolder) {
         IFolder folder = (IFolder) element;
     try {
            if (folder.getProject().hasNature("rttdt.nature")) {
                if (ProjectNature.isTestcase(folder)) {
                   IDecorationContext context = 
                      decoration.getDecorationContext();
                   if (context instanceof DecorationContext) {
                      ((DecorationContext) context).putProperty(
                         IDecoration.ENABLE_REPLACE, Boolean.TRUE);
                   }
                   decoration.addOverlay(fTestcaseOverlay,
                      IDecoration.REPLACE);
                }
         } catch (CoreException e) {
         }
      }
   }

   ...
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top