繁体   English   中英

Eclipse插件开发人员-如何在非文本自定义编辑器中显示默认的IResource上下文菜单?

[英]Eclipse plugin dev - How to show default IResource context menu in non-text custom editor?

我正在编写一个Eclipse插件,以在自己的自定义编辑器中显示自己文件类型的内容。 该文件基本上由Project Explorer中的1..n IFile组成,这些文件显示在SWT TreeView中。 这个TreeView中的条目是一些以平面列表组织的Bean,但是我提供了一个适配器将它们转换为IFile。

  <extension
        point="org.eclipse.core.runtime.adapters">
      <factory
            adaptableType="de.dstg.delta.collections.model.Collection$Member"
            class="de.dstg.delta.collections.CollectionMemberAdapterFactory">
         <adapter
               type="org.eclipse.ui.views.properties.IPropertySource2">
         </adapter>
         <adapter
               type="org.eclipse.core.resources.IFile">
         </adapter>
      </factory>
  </extension>

Eclipse屏幕截图

显示自定义SWT菜单没问题,但是我认为正确的方法是使用Eclipse菜单结构,尤其是通过为Resources提供默认行为。 如何在我的SWT TableView中显示默认上下文弹出菜单,通过右键单击Project Explorer中的资源可以使用该菜单?

编辑第二个问题已删除

EDIT2根据greg-449的回答,问题仍然存在,上下文菜单显示没有我想要这种选择类型的条目。 如果我需要删除使用 “文件基础”之类的文件来打开文件,而无需自己实施。

我们还从其他插件中提供了一些其他菜单,当选择了适当的文件类型时,这些菜单应该在此处可见。 这在Project Explorer中有效,但在我的表格视图中无效。

我认为问题是所选元素的类型。 插件间谍在我的表格视图中显示以下内容:所选元素的类型: Collection$Member ,对所选元素有效的接口: IAdaptable而Project Explorer分别显示FileIFile

我的适配器可以正常工作,并在从未知的Eclipse源触发时提供相关的IFile 我想我必须明确地说,上下文菜单应该使用IFile类型来获取正确的菜单项,但是我不知道如何。 还是我错过了什么?

确实没有“默认”菜单。 某些菜单项被定义为添加到定义特定占位符的所有弹出菜单中。

要使用占位符,必须在Eclipse中注册上下文菜单,例如:

private void createContextMenu(Viewer viewer) {
    Control menuControl = viewer.getControl();
    MenuManager menuMgr = new MenuManager("#PopUp"); 
    menuMgr.setRemoveAllWhenShown(true);
    menuMgr.addMenuListener(new IMenuListener() {
        @Override
        public void menuAboutToShow(IMenuManager mgr) {
            fillContextMenu(mgr);
        }
    });
    Menu menu = menuMgr.createContextMenu(menuControl);
    menuControl.setMenu(menu);

    // register the context menu such that other plugins may contribute to it
    getSite().registerContextMenu(menuMgr, viewer);
}

private void fillContextMenu(IMenuManager menu) {
    // TODO add your actions

    // Standard additions
    menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
}

您可能还需要将查看器设置为“选择提供者”:

getSite().setSelectionProvider(viewer);

许多菜单项都会对此进行检查,以查看当前选择的类型。

没有什么可以自动为您提供“打开方式”或“删除”之类的功能,您必须在“ fillContextMenu”部分中自行添加这些内容。

您可以将org.eclipse.ui.actions.OpenWithMenu用于“打开方式”。

IFile file = ... currently selected file

IMenuManager submenu = new MenuManager("Open With...");
submenu.add(new OpenWithMenu(getSite().getPage(), file);
menu.append(submenu);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM