Как можно использовать API IDecorationContext из Eclipse JFace
Вопрос
Есть ли пример использования 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) {
}
}
}
...
}