Eclipse RCP:如何获取“显示视图”菜单而不是对话框

时间:2011-07-30 06:38:19

标签: eclipse eclipse-plugin eclipse-rcp

我已添加到我的观点org.eclipse.ui.menus

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

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

2 个答案:

答案 0 :(得分:1)

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

public class MyShowViewContributionItem extends org.eclipse.ui.internal.ShowViewMenu {
    public MyShowViewContributionItem() {
        this("om.myplugin.myShowViewId");
    }
    public MyShowViewContributionItem(String id) {
        super(org.eclipse.ui.PlatformUI.getWorkbench().getActiveWorkbenchWindow(), id);
    }
}

然后在你的plugin.xml org.eclipse.ui.menus扩展名中:

    <menu
          label="My Show View">
       <dynamic
             class="com.myplugin.MyShowViewContributionItem"
             id="com.myplugin.myShowViewId">
       </dynamic>
    </menu>

干杯, 最大

答案 1 :(得分:1)

只是为了分享我最近尝试做同样事情的实验,Max在他的answer中建议会有效,但会让你使用内部代码(导致'Discouraged Access'警告)。

另一种方法是通过应用程序操作栏顾问构建菜单。虽然,这种方法将使您不得不编写代码(反对使用在插件XML定义中提供菜单贡献)。请考虑以下示例:

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);
        ...
    } 
}

此方法的一个可能的缺点是顾问程序中创建的菜单与菜单贡献创建的菜单之间的交互。从advisor menu items are created before menu contributions开始,您只需处理在菜单贡献中添加更多排序逻辑。对于大多数人来说这可能没什么问题,但是,你会失去org.eclipse.ui.menus的集中式菜单结构的“感觉”(即使当其他插件使用他们自己的菜单贡献时这种感觉是幻觉)。

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