如何为 eclipse 插件项目中的自定义视图提供上下文菜单?

How to contribute a context menu to a custom view in an eclipse plug-in project?

在一个eclipse插件项目中,我贡献了一个名为Favorites,id为com.qualityeclipse.favorites.views.FavoritesView的视图。

然后我想通过使用 popup:com.qualityeclipse.favorites.views.FavoritesView?after=additionsFavorites 视图贡献一个上下文菜单。
但是,在 Favorites 视图中右键单击时不会显示上下文菜单。

为了测试我改成了popup:org.eclipse.ui.popup.any?after=additions。这一次上下文菜单在其他视图(例如 ProblemsConsoleDeclaration)中出现,而不是我自己的 Favorites 视图。

How to contribute a context menu to a custom view?

您需要使用:

popup:org.eclipse.ui.popup.any?after=additions

然后,为每个命令添加一些条件(使用 right click > New > Visible When :

当活动部分是您的视图时,这个可以使其可见

     <visibleWhen
        checkEnabled="false">
     <with
           variable="activePartId">
        <equals
              value="com.qualityeclipse.favorites.views.FavoritesView">
        </equals>
     </with>
  </visibleWhen>

您必须在视图代码中创建上下文菜单并将其注册到视图站点。类似于:

ISelectionProvider provider = ... a selection provider such as a TreeViewer or TableViewer

Control control = control to own the menu - usually the TreeViewer or TableViewer control

MenuManager menuMgr = new MenuManager("#PopUp");
menuMgr.setRemoveAllWhenShown(true);

menuMgr.addMenuListener(new IMenuListener() {
    @Override
    public void menuAboutToShow(IMenuManager manager) {
       // Additions placeholder
       manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));

       // Note: you can add other menu items directly here
    }
});

Menu menu = menuMgr.createContextMenu(control);
control.setMenu(menu);

// register the context menu such that other plug-ins may contribute to it
getSite().registerContextMenu(menuMgr, provider);