Eclipse RCP 4:向MPart添加弹出菜单

时间:2017-03-09 15:42:37

标签: java eclipse user-interface rcp e4

我正在尝试在右键单击时为MPart添加弹出菜单,但我很难这样做。它应该像在Eclipse 3.x中一样运行(在视图标题附近右键单击并弹出菜单以分离视图/移动它出现)。我添加了一个带有Handled Menu Item的弹出菜单。我认为这将是允许弹出菜单出现在右键单击所需的全部内容,但是当我这样做时没有任何反应。

我确实关注过Lars Vogel的教程,但他的教程仅展示了如何将JFace查看器添加到部件,然后将弹出菜单添加到该查看器。右键单击MPart时添加弹出菜单的正确方法是什么?

What the MPart looks like in my Application Model

感谢您提供的任何帮助! :)

编辑:我想要的例子

Example

1 个答案:

答案 0 :(得分:2)

除了在Application.e4xmi(或片段)中声明弹出菜单之外,还必须使用代码中的EMenuService将菜单注册到您要右键单击的控件。

@Inject
EMenuService menuService;


menuService.registerContextMenu(control, "menu id");

更改右键单击部件选项卡时显示的菜单要复杂得多。为此,您必须使用自定义渲染器工厂为MPartStack定义自定义渲染器(有关基本详细信息,请参阅here)。

您的渲染器可以扩展标准StackRenderer类并覆盖populateTabMenu方法。

这是我使用的示例方法,它将菜单简化为只显示'关闭':

@Override
protected void populateTabMenu(final Menu menu, final MPart part)
{
  if (!isClosable(part))
    return;

  // Just add Close menu item and handle enabling it correctly

  final MenuItem menuItemClose = new MenuItem(menu, SWT.NONE);

  menuItemClose.setText(SWTRenderersMessages.menuClose);

  menuItemClose.addListener(SWT.Selection, this::closeSelected);

  menu.removeListener(SWT.Show, _menuListener);
  menu.addListener(SWT.Show, _menuListener);
}