我有一个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);
}
}
}
是否有办法获得主要操作栏?
答案 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>