Как отключить родительский вклад в динамическое меню в Eclipse 4 RCP Application - PullRequest
0 голосов
/ 07 марта 2019

Этот вопрос проистекает из Как отключить или включить MMenu (не MMenuItem) в приложении Eclipse E4

Я пытался отключить / отключить весь вклад в динамическое меню в Eclipse 4, когда в приложении выполняется условие. Вклад динамического меню находится в элементе модели файлового меню. Мой обходной путь состоял в том, чтобы удалить все опции, чтобы меню ничего не показывало, но все еще активно (не серым), когда выполняется условие с кодом ниже для очистки меню.

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

Этот код, по-видимому, не отключает вклад динамического меню, как я хочу.

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

Вот изображение модели элементов интерфейса пользователя xmi. Файл-> Подменю - это то, что я пытаюсь выделить серым цветом. Не отдельные элементы вклада в динамическое меню.

Модель XMI

Спасибо

1 Ответ

0 голосов
/ 07 марта 2019

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