【问题标题】:Eclipse RCP obtain toolbar contributions programmaticallyEclipse RCP 以编程方式获取工具栏贡献
【发布时间】:2012-01-26 01:36:13
【问题描述】:

我有一个 RCP 应用程序,我想在执行某些操作时禁用/启用工具栏的某些元素。我的分机:

<extension point="org.eclipse.ui.menus">
   <menuContribution locationURI="toolbar:org.eclipse.ui.main.toolbar">
      <toolbar id="vendor.toolbar1h">
         <command commandId="vendor.commands.MyCommand"
          icon="icon.png"
          id="MyButtonID1"
          style="toggle">
         </command>
      </toolbar>
   </menuContribution>
</extension>

我尝试用这段代码列举所有工具栏的贡献,但它不起作用,它只显示视图的贡献。

IViewReference[] refs = PlatformUI.getWorkbench()
   .getActiveWorkbenchWindow().getActivePage().getViewReferences();
for (IViewReference ref : refs) {
   System.err.println("ID: "+ref.getId());
   IViewPart viewPart = PlatformUI.getWorkbench()
      .getActiveWorkbenchWindow().getActivePage().findView(ref.getId());
   IActionBars bars = viewPart.getViewSite().getActionBars();
   if (bars != null) {
      IToolBarManager tbm = bars.getToolBarManager();
      if (tbm != null) {
         IContributionItem[] items = tbm.getItems();
         for (IContributionItem item : items)
            System.err.println("\t" + item);
         }
      }
}

存在获取主操作栏的方法吗?

【问题讨论】:

    标签: eclipse eclipse-rcp


    【解决方案1】:

    不,无法访问主工具栏。 IActionBars 工具栏返回视图工具栏(紧邻视图选项卡)。

    但是您根据活动处理程序的启用启用/禁用命令。您的处理程序负责确定其启用状态。

    以编程方式,如果您将org.eclipse.core.commands.AbstractHandler 子类化,您将调用setBaseEnabled(boolean state) 以确保它触发正确的事件。

    声明式地,当通过org.eclipse.ui.handlers 贡献时,它也支持enabledWhen 元素。可以访问org.eclipse.ui.ISources中列出的应用程序状态

    【讨论】:

      【解决方案2】:

      如果您想访问主工具栏上的项目,一旦 IHandler 实现接口 IElementUpdater,Eclipse 的命令框架将使用该类来更新命令的标签、工具提示甚至图像。有关详细信息,请参阅此内容:

      http://www.robertwloch.net/2011/01/eclipse-tips-tricks-label-updating-command-handler/

      【讨论】:

      • 不幸的是,该链接似乎已损坏/已过时顺便说一句:问题“此答案是否已过时?”应该包括这样一个选项(断开的链接)
      【解决方案3】:

      我刚刚发现以下活动模式删除了外部工具菜单的贡献。这个很难搞清楚。

             <activity id="org.eclipse.ui.navigator.resources.unwanted" name="unwanted"/> 
      
             <activityPatternBinding
             activityId="org.eclipse.ui.navigator.resources.unwanted"
             pattern=".*ExternalTool.*">
             </activityPatternBinding>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-18
        • 2010-11-27
        • 2012-04-13
        • 1970-01-01
        • 2011-06-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多