如何在Eclipse 4 RCP应用程序中禁用Dynamic Menu Contribution父级

时间:2019-03-06 22:01:07

标签: eclipse eclipse-rcp rcp e4

这个问题源于 How to disable or enable a MMenu (not MMenuItem) in an Eclipse E4 application

当应用程序中满足条件时,我一直试图在Eclipse 4中灰显/禁用整个Dynamic Menu Contribution。动态菜单贡献本身位于文件菜单模型元素中。我的解决方法是删除所有选项,以使菜单不显示任何内容,但是当满足以下清除菜单代码的条件时,菜单仍然处于活动状态(非灰色)。

    items.clear();
    if (checkMenuEnabled()) {
        Fillthemenu();
    }

下面的这段代码似乎并没有像我希望的那样禁用动态菜单功能。

    MenuImpl menu = (MenuImpl) modelService.find("menuID", application.getChildren().get(0).getMainMenu());
    menu.setEnabled(checkMenuEnabled());

这是模型xmi UI项的图像。我正在尝试使用File-> Submenu变灰。不是单个动态菜单贡献项。

Model XMI

谢谢

1 个答案:

答案 0 :(得分:0)

因此,在您的e4xmi文件中,您有一个带有“动态菜单贡献”的“菜单”,并且您希望在某些应用程序条件下将菜单中的某些项目涂成灰色,对吗?

“动态菜单内容”附加到某些“类”上,对吧?

在此类中,当您生成禁用的“菜单”时:

public class <the class referenced in e4xml> {
   @Inject private EModelService modelService;

   @AboutToShow
   public void aboutToShow(List<MMenuElement> items, {...}) {
      MDirectMenuItem dynamicItem = modelService.createModelElement(MDirectMenuItem.class);
      dynamicItem.setLabel(<some label>);
      dynamicItem.setIconURI(<some icon URI>);
      dynamicItem.setContributorURI("platform:/plugin/platform:/plugin/<nom plugin>");
      dynamicItem.setContributionURI(<menu item handler> "bundleclass://<plugin name>/<menu item handler class>");
  --> dynamicItem.setEnabled(true/false); to enable/grey out the menu
  --> dynamicItem.setvisible(true/false); to show/hide the menu

      // add one or many MDirectMenuItems ...
      items.add(dynamicItem);
   }
}

在实现菜单项逻辑的菜单项处理程序(“ setContributionURI”类)中,还可以显示/隐藏/启用/禁用菜单项:

public class <menu item handler class> {
   @Execute
   public void execute({...}) {
      <code linked to the menu item selection here>
   }

   @CanExecute
   public boolean canExecute(@Optional MMenuItem menuItem, {...}) {
      // implement the logic to show/hide, enable/disable the menu item
      menuItem.setVisible(true/false); // show/hide the menu item
      return true/false; // enable/grey out the menu item
   }
}