EclipseRCP:如何获得显示视图菜单而不是对话框

EclipseRCP:如何获得显示视图菜单而不是对话框,eclipse,eclipse-plugin,eclipse-rcp,Eclipse,Eclipse Plugin,Eclipse Rcp,我已经添加到透视图的org.eclipse.ui.menu <command commandId="org.eclipse.ui.views.showView" style="pulldown"> </command> 这会将Show View项添加到主菜单中,但该项不是菜单(与Eclipse窗口菜单中的一样)。相反,按下它会显示一个对话框,我可以在其中选择一个视图。如何获得菜单?您必须创建如下所示的ContributionItem类: 公共

我已经添加到透视图的
org.eclipse.ui.menu

<command
      commandId="org.eclipse.ui.views.showView"
      style="pulldown">
</command>


这会将
Show View
项添加到主菜单中,但该项不是菜单(与Eclipse窗口菜单中的一样)。相反,按下它会显示一个对话框,我可以在其中选择一个视图。如何获得菜单?

您必须创建如下所示的ContributionItem类:

公共类MyShowViewContributionItem扩展org.eclipse.ui.internal.ShowViewMenu{
公共MyShowViewContributionItem(){
这个(“om.myplugin.myShowViewId”);
}
公共MyShowViewContributionItem(字符串id){
super(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow(),id);
}
}
然后在plugin.xml
org.eclipse.ui.menu
扩展中:


干杯,
Max

我想分享一下我最近尝试做同样事情的实验,Max在遗嘱中的建议是可行的,但让您使用内部代码(导致一个“”警告)

另一种方法是通过应用程序操作栏advisor构建菜单。尽管如此,这种方法将使您不得不编写代码(反对在插件XML定义中使用提供菜单贡献)。考虑下面的例子:

这种方法的一个可能的缺点是在advisor中创建的菜单与菜单贡献创建的菜单之间的交互。因为,您需要在菜单贡献中添加更多排序逻辑。这对大多数人来说可能是好的,但是,您失去了
org.eclipse.ui.menus
中集中式菜单结构的“感觉”(即使当其他插件使用自己的菜单贡献时,这种感觉只是一种错觉)


我还包括了透视菜单的构建;完整选项,但如果有人试图使用透视图执行相同的菜单构建,我会添加它。

完成此操作后,我会在菜单中看到
,尽管在透视图扩展中添加了
并清除了工作区数据。你知道怎么解决这个问题吗?
public class ApplicationActionBarAdvisor extends ActionBarAdvisor
{
    private IContributionItem contributionOpenPerspective;
    private IContributionItem contributionShowView; 

    ...

    protected void makeActions(IWorkbenchWindow window)
    {
        ...
        contributionOpenPerspective = ContributionItemFactory.
           PERSPECTIVES_SHORTLIST.create(window);
        contributionShowView = ContributionItemFactory.
           VIEWS_SHORTLIST.create(window);
        ...
    }

    protected void fillMenuBar(IMenuManager menuBar)
    {
        ...
        MenuManager windowMenu = new MenuManager("&Window", 
           IWorkbenchActionConstants.M_WINDOW);
        menuBar.add(windowMenu);

        MenuManager openPerspectiveMenu = new MenuManager("&Open Perspective");
        openPerspectiveMenu.add(perspectivesContribution);
        windowMenu.add(openPerspectiveMenu);

        MenuManager showViewMenu = new MenuManager("Show &View");
        showViewMenu.add(viewsContribution);
        windowMenu.add(showViewMenu);
        ...
    } 
}