这个问题来自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项目的图像。文件 - >子菜单是我想要变灰的东西。不是单独的动态菜单贡献项目。
谢谢
因此,在您的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
}
}