如何在Eclipse 4 RCP应用程序中禁用动态菜单贡献父级

问题描述 投票:0回答:1

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

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

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

下面的代码似乎没有像我想要的那样禁用动态菜单贡献。

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

这是模型xmi UI项目的图像。文件 - >子菜单是我想要变灰的东西。不是单独的动态菜单贡献项目。

Model XMI

谢谢

eclipse eclipse-rcp rcp e4
1个回答
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
   }
}
© www.soinside.com 2019 - 2024. All rights reserved.