E4 RCP 如何设置包含单选按钮的 ToolBarItem 的选择

E4 RCP How to set selection of ToolBarItem that contains Radio Buttons

在 Eclipse E4 (Luna) 中,使用应用程序模型创建部件、处理程序、命令、处理的菜单项等(这些不是以编程方式创建的)。我有一个工具栏。这包含一个名为 "Filter" 的子菜单项,其中包含另一个包含两个过滤器的子菜单。这两个过滤器是两个已处理的菜单项,它们被设置为 "Radio" 按钮。

当我从 selection select 我的 运行 应用程序的 UI 中选择合适的按钮时,单选按钮切换到 selected 项目。但是,我希望这个 selection 在我的 ViewPart 通过其他 UI select离子。目前我的 ViewPart 更新了,但是单选按钮通过 UI.

在同一个 selection 上

有没有一种方法可以让我在更新查看器时访问两个已处理菜单项的 ID 并设置 selection(一个为 false,另一个为 true)。

下面附上设计图:

应用模型层次结构如下:

提前致谢,

马文

您可以使用模型服务查找菜单项。使用类似:

@Inject
EModelService modelService;

@Inject
MApplication app;


List<MMenuItem> items = modelService.findElements(app, "menu item id", MMenuItem.class, Collections.emptyList(), EModelService.IN_MAIN_MENU);

获得 MMenuItem 后,您可以调用 setSelected(boolean) 方法来更改选择。

要查找部件菜单中的菜单项,请使用:

modelService.findElements(app, "menu item id", MMenuItem.class, Collections.emptyList(), EModelService.IN_PART);

(IN_PART 参数而不是 IN_MAIN_MENU).

您还可以将 MPart 而不是应用程序指定为 findElements 的第一个参数,这可能会加快搜索速度。

对于作为工具栏项子项的菜单,模型服务似乎无法直接找到它们。不过你可以找到Tool Bar Item,自己看看菜单:

List<MToolItem> items = modelService.findElements(app, "tool bar item id", MToolItem.class, Collections.emptyList(), EModelService.IN_PART);

MToolItem item = items.get(0);

MMenu menu = item.getMenu();

List<MMenuElement> children = menu.getChildren();

... search menu elements

我解决了这个问题,方法是从 MPart PartID 开始,深入到我想设置单选按钮选择的 HandledMenuItems,然后为每个单独的 HandledMenuItem 设置选择 属性。

这可能可以重构为更简洁,但我在每个步骤中都保留了代码以使解决方案更易于阅读。

顺便说一句,在 EModelService 方法的每个实例/组合中,列表返回的大小为 0。所以我不确定这是否适用于我想要实现的目标。以下确实有效,但我不确定这是最有效的方法。

我希望这对其他人有帮助。

    // Get view part
    MPart viewPart = _partService.findPart("part_id");

    //  get list of all menu items from the Part
    List<MMenu> viewPartMenu = viewPart.getMenus();

    // Get list of ViewMenus from viewPartMenu there is only one View Menu so it will be index 0
    MMenu viewMenu = viewPartMenu .get(0);

    // Get list of MMenuElements from the viewMenu - the children in the view menu
    List<MMenuElement> viewMenuElements = viewMenu.getChildren();

    // This gets me to the 2 HandledMenuItems 
    // Upper Most HandledMenuItem Radio Button is at viewMenuElements index 0.  This is cast to MHandledMenuItem
    MHandledMenuItem upperHandledMenuItem = (MHandledMenuItem) viewMenuElements.get(0);

    // Set Selection 
    upperHandledMenuItem.setSelected(false);

    // Lower Most HandledMenuItem Radio Button is at viewMenuElements index 1.  This is cast to MHandledMenuItem
    MHandledMenuItem lowerHandledMenuItem = (MHandledMenuItem) viewMenuElements.get(1);

    // Set selection 
    lowerHandledMenuItem.setSelected(true);