如何使用来自 Eclipse JFace 的 IDecorationContext api

Posted

技术标签:

【中文标题】如何使用来自 Eclipse JFace 的 IDecorationContext api【英文标题】:How would one use IDecorationContext api from Eclipse JFace 【发布时间】:2011-01-02 21:56:58 【问题描述】:

有没有使用IDecorationContext 进行标签装饰的示例?

从外观上看,IDecorationContext 类似乎提供了某种上下文装饰支持,但对于我来说,我找不到任何使用此功能的示例代码...

是否有人实际使用过装饰上下文功能,如果有,它解决了哪些用例?


PS:我正在寻找一种将图像装饰应用于对象标签的方法,并且根据对象的显示位置,基本图标大小会有所不同(例如,表格中的传统“小”图标和树项目和内容标题的较大图标)。

应用于原图标的装饰应相应选择合适大小的装饰。

IDecorationContext 似乎符合我的需求,但文档很稀疏,正如人们对开源库的一个次要功能所期望的那样,并且找不到示例。

谷歌搜索 “IDecorationContext” 也没有发现任何有趣的东西,所以我求助于 *** 人群智慧,希望下一个得到问题的人能够更快地得到他们的答案;)

【问题讨论】:

【参考方案1】:

我没有使用 IDecorationContext,但你可以看到它在 org.eclipse.jface.viewers.LabelDecorator 中使用。

this thread也有讨论(即使没有答案,那至少能给你一个起点)

我目前的方法是使用扩展 org.eclipse.ui.decorators ILightweightLabelDecorator 将替换覆盖添加到相应的 图标:

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) 
         
      
   

   ...

【讨论】:

自我注意:这似乎是我对 SO 的第 2000 个回答。

以上是关于如何使用来自 Eclipse JFace 的 IDecorationContext api的主要内容,如果未能解决你的问题,请参考以下文章

eclipse如何设置默认字体

如何通过JFace Eclipse Wizard页面执行自定义导航?

SWT(JFace) Wizard(Eclipse插件编程必备)

导入org.eclipse.jface无法在Eclipse Luna中解析

来自eclipse项目的Boolean fun

火星org.eclipse.jface.text导出来没有代码怎么解决