Итак, в вашем файле 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
}
}