我有两个视图 View1 和 View2 set1 工具栏项目对于视图来说是通用的,set2 工具栏项目应该仅与 set1 一起显示在 view2 中。
我正在使用 Eclipse 的菜单贡献功能。我创建了两个位置 URI 工具栏:com.omg.views.Objects.custom --> 其中有常用项目 toolbar:com.omg.views.Objects.custom1 --> 仅 View2 需要。
我尝试了以下方法:
CoolBar coolBar = new CoolBar(toolBarComposite, SWT.NONE);
GridData gridData1 = new GridData(GridData.FILL_BOTH);
coolBar.setLayoutData(gridData1);
CoolBarManager coolManager = new CoolBarManager(SWT.DEFAULT);
IMenuService menuService = (IMenuService)
PlatformUI.getWorkbench().getActiveWorkbenchWindow()
.getService(IMenuService.class);
manager = new ToolBarManager(SWT.FLAT);
menuService.populateContributionManager(manager,
"toolbar:com.omg.views.Objects.custom"); //$NON-NLS-1$
manager.createControl(coolBar);
manager.getControl().setLayoutData(new GridData(SWT.END, SWT.CENTER,
true, false));
manager1 = new ToolBarManager(SWT.FLAT);
menuService.populateContributionManager(manager1,
"toolbar:com.omg.views.Objects.custom1"); //$NON-NLS-1$
manager1.createControl(coolBar);
manager1.getControl().setLayoutData(new GridData(SWT.END,
SWT.CENTER, true, false));
coolManager.add(manager);
coolManager.add(manager1);
coolManager.createControl(toolBarComposite);
coolManager.getControl().setLayoutData(new GridData(SWT.END,
SWT.CENTER, true, false));
不幸的是上面的代码对我不起作用,如果我得到一些建议那就太好了。
我的应用程序中曾经有类似的东西,但是当我必须从 3.8.2 更新到 Eclipse 4.27 时,我没有找到任何通过 CoolBarManager 以编程方式配置工具栏项的方法,旧的方法不再有效。
通过在plugin.xml 中使用actionSets 和viewActions 配置这些工具栏项,我设法获得了相同的结果。第一个工具栏 (toolbar:com.omg.views.Objects.custom) 可以使用 actionSet 配置,因为您希望它全局显示,第二个工具栏 (toolbar:com.omg.views.Objects.custom1) 可以配置为viewAction,因此仅当 View1 可见时才启用它。您将需要具有实现 IWorkbenchWindowActionDelegate 的类来执行操作。这些插件项并不完整,可能需要填写一些额外的字段。
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="com.package.actions"
label="Label1"
visible="true">
<menu
id="com.package.menu1"
label="Label2"
path="additions">
</menu>
<action
class="class implementing the action"
id="com.package.id.Class1"
label="some label"
state="false"
style="push"
toolbarPath="com.omg.views.Objects.custom"
tooltip="some label">
<enablement>
<systemProperty
name="someProperty"
value="1"/>
</enablement>
</action>
</actionSet>
</extension>
<extension
point="org.eclipse.ui.viewActions">
<viewContribution
targetID="The id for View1"
id="com.package.id.ViewContribution">
<menu
id="com.package.menu2"
label="Label3"
</menu>
<action
class="class implementing the action"
enablesFor="1"
icon="icon.gif"
id="com.package.id.Class2"
label="some label"
style="push"
toolbarPath="com.omg.views.Objects.custom1"
tooltip="some label">
<enablement>
<systemProperty
name="someProperty"
value="1"/>
</enablement>
</action>
</actionSet>
</extension>