Eclipse RCP 4:向 MPart 添加弹出菜单
Eclipse RCP 4: Adding a Popup Menu to an MPart
我试图在右键单击 MPart 时为它添加一个弹出菜单,但我很难这样做。它的功能应该与 Eclipse 3.x 中的功能相同(右键单击视图标题附近的弹出菜单以分离它出现的 view/move)。我添加了一个带有 Handled Menu Item 的弹出式菜单。我以为这就是允许弹出菜单在右键单击时出现所需的全部内容,但是当我这样做时没有任何反应。
我确实遵循了 Lars Vogel 的教程,但他的教程只展示了如何将 JFace 查看器添加到部件,然后将弹出菜单添加到该查看器。右键单击 MPart 时添加弹出菜单的正确方法是什么?
感谢您提供的任何帮助! :)
编辑:我想要的例子
除了在 Application.e4xmi(或片段)中声明弹出菜单外,您还必须在代码中使用 EMenuService
来向要右键单击的控件注册菜单。
@Inject
EMenuService menuService;
menuService.registerContextMenu(control, "menu id");
更改右键单击部件选项卡时显示的菜单要复杂得多。为此,您必须使用自定义渲染器工厂为 MPartStack
定义自定义渲染器(有关基本详细信息,请参阅 here)。
您的渲染器可以扩展标准 StackRenderer
class 并覆盖 populateTabMenu
方法。
这是我使用的示例方法,它将菜单缩减为仅显示 'Close':
@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);
}
我试图在右键单击 MPart 时为它添加一个弹出菜单,但我很难这样做。它的功能应该与 Eclipse 3.x 中的功能相同(右键单击视图标题附近的弹出菜单以分离它出现的 view/move)。我添加了一个带有 Handled Menu Item 的弹出式菜单。我以为这就是允许弹出菜单在右键单击时出现所需的全部内容,但是当我这样做时没有任何反应。
我确实遵循了 Lars Vogel 的教程,但他的教程只展示了如何将 JFace 查看器添加到部件,然后将弹出菜单添加到该查看器。右键单击 MPart 时添加弹出菜单的正确方法是什么?
感谢您提供的任何帮助! :)
编辑:我想要的例子
除了在 Application.e4xmi(或片段)中声明弹出菜单外,您还必须在代码中使用 EMenuService
来向要右键单击的控件注册菜单。
@Inject
EMenuService menuService;
menuService.registerContextMenu(control, "menu id");
更改右键单击部件选项卡时显示的菜单要复杂得多。为此,您必须使用自定义渲染器工厂为 MPartStack
定义自定义渲染器(有关基本详细信息,请参阅 here)。
您的渲染器可以扩展标准 StackRenderer
class 并覆盖 populateTabMenu
方法。
这是我使用的示例方法,它将菜单缩减为仅显示 'Close':
@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);
}