如何通过actionSet扩展点向Workbenchwindow提供菜单?

时间:2012-09-19 10:25:39

标签: java eclipse rcp

在我的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扩展点中指定的视图关闭后,菜单还在那里。 我希望当与之关联的视图关闭时,菜单会消失。 我的课程有什么问题?

2 个答案:

答案 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()方法。他们在那里创建了一个子菜单。它会帮助你理解。