Eclipse RCP: изменить цель действия на другой предмет
У меня есть дерево в представлении, построенном с помощью Common Navigation Framework. У меня есть пользовательский элемент MyTreeEntry, который содержит объект IFolder.
public class MyTreeEntry implements IWorkbenchAdapter {
private IFolder iFolder;
[...]
}
Я хочу видеть для элемента MyTreeEntry все пункты меню как IFolder (New, Open in new window...), и когда вызывается действие, оно должно действовать на содержащемся IFolder.
Возможно ли это и как?
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
,