【问题标题】:Eclipse RCP: how to get Show View menu instead of a dialogEclipse RCP:如何获取显示视图菜单而不是对话框
【发布时间】:2014-03-11 18:38:51
【问题描述】:

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

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

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

【问题讨论】:

    标签: eclipse eclipse-plugin eclipse-rcp


    【解决方案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>
    

    干杯, 最大

    【讨论】:

    • 执行此操作后,我在菜单中看到&lt;No Applicable Views&gt;,尽管在透视扩展中添加了&lt;viewShortcut&gt;s 并清除了工作区数据。知道如何解决这个问题吗?
    【解决方案2】:

    只是为了分享我最近尝试做同样事情的实验,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 中失去集中式菜单结构的“感觉”(即使当其他插件使用它们自己的菜单贡献时这种感觉是一种错觉)。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-12-12
      • 1970-01-01
      • 1970-01-01
      • 2014-11-25
      • 2023-04-08
      • 2011-07-17
      • 2013-06-14
      • 1970-01-01
      相关资源
      最近更新 更多