Eclipse RCP以编程方式获取工具栏贡献

时间:2011-12-22 11:43:18

标签: eclipse eclipse-rcp

我有一个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);
         }
      }
}

是否有办法获得主要操作栏?

3 个答案:

答案 0 :(得分:2)

不,没有办法访问主工具栏。 IActionBars工具栏返回视图工具栏(视图选项卡旁边)。

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

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

声明性地,当通过org.eclipse.ui.handlers提供时,它也支持enabledWhen元素。这可以访问org.eclipse.ui.ISources

中列出的应用程序状态

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

       <activity id="org.eclipse.ui.navigator.resources.unwanted" name="unwanted"/> 

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