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,

Другие вопросы по тегам