在我的RCP程序中,我在workbenchwindow中添加了一个菜单“Demo”,在“Demo”下面添加了一个“添加”分隔符。代码如下,
public class ApplicationActionBarAdvisor extends ActionBarAdvisor {
private ExampleAction exampleAction;
@Override
protected void makeActions(IWorkbenchWindow window) {
// TODO Auto-generated method stub
super.makeActions(window);
exampleAction = new ExampleAction(window);
}
@Override
protected void fillMenuBar(IMenuManager menuBar) {
// TODO Auto-generated method stub
super.fillMenuBar(menuBar);
MenuManager demoMenu = new MenuManager("&Demo", "demo");
demoMenu.add(exampleAction);
demoMenu.add(new GroupMarker(IWorkbenchActionConstants.MB_ADDITIONS));
menuBar.add(demoMenu);
}
..............
}
现在我想为“演示/添加”这个位置贡献一个子菜单。我声明了一个actionSet扩展点,如下所示,
<extension
point="org.eclipse.ui.actionSets">
<actionSet
id="RCP-View-Example.actionSet"
label="actionSet">
<menu
id="RCP-View-Example.menu"
label="ActionSetMenu"
path="demo/additions">
<groupMarker
name="menuItem">
</groupMarker>
</menu>
<action
class="Action1"
id="RCP-View-Example.action"
label="Action"
menubarPath="RCP-View-Example.menu/menuItem"
style="push"
toolbarPath="main/additions">
</action>
</actionSet>
</extension>
<extension
point="org.eclipse.ui.actionSetPartAssociations">
<actionSetPartAssociation
targetID="RCP-View-Example.actionSet">
<part
id="my.view">
</part>
</actionSetPartAssociation>
</extension>
我没有看到菜单已经提供并显示在“演示”菜单下。 我将菜单路径从“path =”demo / additions“修改为”path =“org.eclipse.ui.main.menu/demo/additions”,我仍然没有看到它。
有人可以帮我看看我的节目中有什么问题吗?
我修改了从path =“demo / additions到path =”additions“的菜单路径。当打开视图时,我看到”Demo“之后的菜单。但是,在actionSetPartAssociations扩展点中指定的视图关闭后,菜单还在那里。 我希望当与之关联的视图关闭时,菜单会消失。 我的课程有什么问题?
答案 0 :(得分:1)
我认为documentation中的这个说明可能适用于此处:
目前存在影响操作集的实现限制。定义要在操作集中引用的整个菜单结构非常重要。因此,例如,如果另一个动作集定义了一个名为“example”的菜单,则不可能依赖于“example”存在。有必要在每个希望使用它的动作集中重新定义“示例”菜单。
所以问题可能在你的子菜单路径=“demo / additions”中,它应包括子菜单的完整路径。如果您已经拥有该子菜单,则可以在该菜单内的操作上尝试Alt + Shift + F2,以查找该菜单的ID并从那里开始工作。
但是,如果您刚开始使用菜单,我建议您立即使用命令框架。即使您使用的是已经建立的Rich Client,也可以轻松地将命令放在任何您喜欢的位置,并且Eclipse Juno和更新版本中不再使用actionSets ExtensionPoint。可以找到一个好的命令教程here。
答案 1 :(得分:0)
请参阅org.eclipse.ui.internal.navigator.resources.actions.NewActionProvider.java
请参阅fillContextMenu()方法。他们在那里创建了一个子菜单。它会帮助你理解。