0

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

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

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

有可能吗?怎么做?

4

1 回答 1

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.

于 2014-07-07T09:55:47.737 回答