【问题标题】:Eclipse RCP: Change target of an action to another itemEclipse RCP:将操作的目标更改为另一个项目
【发布时间】:2014-07-07 17:55:47
【问题描述】:

我在使用通用导航框架构建的视图中有一个树。我有一个自定义项 MyTreeEntry,其中包含一个 IFolder 对象。

public class MyTreeEntry implements IWorkbenchAdapter {
   private IFolder iFolder;
[...]
}

我希望将 MyTreeEntry 项的所有菜单条目视为 IFolder(新建、在新窗口中打开...),并且当调用某个操作时,它必须对包含的 IFolder 进行操作。

有可能吗?如何实现?

【问题讨论】:

    标签: eclipse menu rcp cnf


    【解决方案1】:

    您应该能够使用平台适配器管理器来告诉 Eclipse 如何从您的对象中获取文件夹:

    为您的班级创建IAdapterFactory:

    class MyTreeEntryAdapterFactory implements IAdapterFactory
    {
      @Override
      public Object getAdapter(Object adaptableObject, Class adapterType)
      {
        if (!(adaptableObject instanceof MyTreeEntry))
          return null;
    
        if (adapterType == IResource.class || adapterType == IFolder.class)
          return ((MyTreeEntry)adaptableObject).getFolder();
    
        return null;
      }
    
      public Class<?> [] getAdapterList()
      {
        return new Class<?> [] {IResource.class, IFolder.class};
      }
    }
    

    向适配器管理器注册您的适配器工厂:

    Platform.getAdapterManager().registerAdapters(adapterFactory, MyTreeEntry.class);
    

    您可能需要IResource 和IFolder 的适配器。

    注意:IAdaptable 接口提供非常相似的支持,但 Eclipse 菜单系统需要IAdapterFactory。

    【讨论】:

    • 这是个好技巧。我已经尝试过了,但唯一添加的菜单是“属性”。新建、进入、刷新……还不可见。
    • 具体显示哪些菜单项取决于它们的声明方式。有些仅针对特定视图声明,对于那些您必须在视图中添加自己的声明和一些代码。
    • 您可能想在org.eclipse.ui.navigator.resources 插件中查看Project Explorer 的源代码,该插件基于Common Navigator 并具有您想要的菜单。
    • 你是对的,但我的观点扩展了 PackageExplorerPart 并拥有这些菜单。如果我尝试右键单击项目或文件夹,我将看到所有 Eclipse 标准菜单。如果我尝试右键单击 MyTreeEntry,我只会看到剪切、粘贴、导入、导出、显示、删除、构建路径以及您的代码中的属性。
    • PackageExplorerPart 位于 internal 包中,因此 should not be extended 您将不得不查看源代码以了解它的预期。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多