如何隐藏其子项隐藏的菜单?

时间:2015-07-14 11:14:17

标签: eclipse menu eclipse-luna e4

我在Eclipse 4应用程序项目的主菜单上有一些菜单,其子项是在不同插件的片段的帮助下提供的。我已根据登录用户对子菜单应用了权限。 我的问题是,即使菜单的子菜单没有权限,也没有任何一个可见,但仍然可以看到菜单。我想隐藏那个菜单。任何建议。

更新:我的模型处理器和plugin.xml的类

public class MenuProcessor {
  public MenuProcessor(){}
  @Execute
  public void execute(@Named("application_luna.menu.contract(fo)") MMenu menu)
  {
     if(menu.getChildren().isEmpty())
         menu.setVisible(false);
  }
}
 <extension
     id="com.swte.approval.ui.fragment"
     point="org.eclipse.e4.workbench.model">
  <fragment
        uri="fragment.e4xmi">
  </fragment>
  <processor
        apply="always"
        beforefragment="false"
        class="com.swte.approval.ui.MenuProcessor1">
  <element
    id="application_luna.menu.contract(fo)">
    </element>
 </processor>

`

1 个答案:

答案 0 :(得分:0)

您可以使用菜单上的processor执行此操作。

您将plugin.xml中的处理器声明为&#39; org.eclipse.e4.workbench.model&#39;的一部分。延伸点。

<extension
     id="playerFragment"
     point="org.eclipse.e4.workbench.model">
  ... other elmeents
  <processor
        beforefragment="false"
        class="package.MenuProcessor">
     <element
           id="menu.id">
     </element>
  </processor>
</extension>

声明命名要运行的类及其应用的模型元素。

然后处理器代码可以注入命名菜单,如果没有子节点则使其不可见。像(未经测试)的东西:

public class MenuProcessor
{
  @Inject @Named("menu.id")
  private MMenu menu;

  @Execute
  public void execute()
  {
    if (menu.getChildren().isEmpty())
      menu.setVisible(false);
  }

注意:您必须将菜单元素作为字段注入类中,将其指定为execute方法上的参数将不起作用。这是因为元素仅在构造类时可用于注入。