这个问题源于 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变灰。不是单个动态菜单贡献项。
谢谢
答案 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
}
}