【问题标题】:How to disable a Dynamic Menu Contribution parent in Eclipse 4 RCP Application如何在 Eclipse 4 RCP 应用程序中禁用动态菜单贡献父级
【发布时间】:2019-03-06 22:01:07
【问题描述】:

这个问题源于 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 项目的图像。 File->Submenu 是我想要灰显的。不是单个动态菜单贡献项。

Model XMI

谢谢

【问题讨论】:

    标签: eclipse eclipse-rcp rcp e4


    【解决方案1】:

    因此,在您的 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
       }
    }
    

    【讨论】:

    • 我应该更清楚。我正在尝试将动态菜单贡献作为一个整体禁用。如果文件下拉结构如下,我希望动态菜单变灰。文件 -> 动态菜单 动态项目
    • 这里是 XMI 模型图像的链接,以帮助可视化应该禁用哪个菜单。 Model XMI
    猜你喜欢
    • 2010-11-27
    • 2013-11-08
    • 2011-06-12
    • 2012-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多