我正在编写一个插件,该插件创建一个自定义Package Explorer
,表示不同层次结构(某种虚拟文件夹)中的基础文件系统层次结构。
我设法通过实现ITreeContentProvider
来创建层次结构。最终节点应该代表一个包含其所有操作(打开,复制,重命名......)的文件,当我返回一个文件时它很有效org.eclipse.core.internal.resources.File
的实例但如果我创建一个实现delegate/proxy
接口的IFile
类,我会看到该动作,但当我点击其中一个时,Eclipse会冻结。
无论如何,我想我需要实现自己的CommonActionProvider
。我的问题是:
如何向节点添加相同的操作,代表文件中的操作,是否有一些FileActionProvider?
我遵循以下教程:tutorial
更新
我已经尝试过使用@ greg-449来修改适配器。但是他们都没有给我完整的菜单,我得到的最大菜单是实现IAdaptable
接口并委托{ {1}}到我的IFile的实例。但这样做双击打开文件是行不通的,最重要的是重命名,删除,移动都不在这里
通过委派
getAdapter()
获得的菜单
答案 0 :(得分:1)
您应该使用IFile
来提供从UI类到基础IAdapterFactory
的适配器,而不是尝试实现IFile
。
使用org.eclipse.core.runtime.adapters
扩展点声明适配器工厂:
<extension point="org.eclipse.core.runtime.adapters">
<factory
class="com.xyz.MyFileAdapterFactory"
adaptableType="com.xyz.MyFile">
<adapter type="org.eclipse.core.resources.IFile"/>
</factory>
</extension>
适配器工厂类方法看起来像:
@Override
public Object getAdapter(Object adaptableObject, Class adapterType)
{
if (adaptableObject instanceof MyFile)
{
// TODO get the IFile from MyFile
return ifile;
}
return null;
}
@Override
public Class<?> [] getAdapterList()
{
return new Class<?> [] {IFile.class};
}
您可能还需要注册IResource
以使所有菜单项都有效。
您也可以使用IAdapterManager
界面注册工厂。