2017-03-09 103 views
0

我想为MPart添加一个弹出菜单,当它被右键单击时,但我遇到了困难。它应该像在Eclipse 3.x中一样工作(右键单击视图的标题和弹出菜单以分离视图/移动它的显示)。我已经添加了处理菜单项的弹出式菜单。我认为这将是允许弹出式菜单出现在右键单击所需的全部内容,但是当我这样做时没有任何反应。Eclipse RCP 4:向MPart添加弹出式菜单

我确实遵循了Lars Vogel的教程,但他的教程仅显示如何将JFace查看器添加到零件,然后向该查看器添加弹出式菜单。当您右键点击MPart时,添加弹出式菜单的正确方法是什么?

What the MPart looks like in my Application Model

感谢所有帮助您可以提供! :)

编辑:什么我想

Example

回答

1

除了宣布弹出菜单中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); 
} 
+0

嗨格雷格,我这样做是在拉斯沃格尔的教程,但我得到了我创建了一个JFace的浏览器的控制在MPart内部并使用它。我试图设置弹出菜单,当你右键点击MPart本身。有没有办法获得对MPart的控制,或者另一种方式将弹出菜单添加到MPart本身? – 0Calories

+0

'点击MPart'是什么意思? MPart的主体只是您的控件,或者您是否在问工具栏或选项卡? –

+0

是的,我的意思是当你在MPart的实际标题附近右击时,MPart的标签。例如,在Eclipse IDE中,右键单击Call Hierarchy选项卡时,它将显示多个选项。我希望能够以相同的方式右键点击我的MPart并显示弹出式菜单。 (在我的问题中添加了一个示例图片) – 0Calories