我在使用通用导航框架构建的视图中有一棵树。我有一个包含 IFolder 对象的自定义项 MyTreeEntry。
public class MyTreeEntry implements IWorkbenchAdapter {
private IFolder iFolder;
[...]
}
我想将 MyTreeEntry 项的所有菜单条目视为 IFolder(新建,在新窗口中打开...),并且当调用某个操作时,它必须对包含的 IFolder 起作用。
有可能吗?怎么做?
您应该能够使用平台适配器管理器来告诉 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
.