RCP 中的动态单选菜单项

Dynamic radio menu items in RCP

我正在尝试使用单选菜单项动态填充 RCP 应用程序中的菜单。目的是让这些菜单项对应于应用程序的不同 "modes"。

我正在通过动态贡献创建菜单:

@AboutToShow
public void aboutToShow(
        final List<MMenuElement> items,
        final EModelService modelService) {

    // Code to get list of modes

    for (Mode m : modeList) {
        final MDirectMenuItem menuItem;
        menuItem = modelService.createModelElement(MDirectMenuItem.class);
        menuItem.setType(ItemType.RADIO);
        menuItem.setLabel(m.getName());

        /* Set the "handler" instance */
        menuItem.setObject(new ModeMenuHandler(m));
        items.add(menuItem);
    }

当我单击各个菜单项时,会正确调用相应的处理程序。但是,菜单项的行为与 Radio 项不同。

如何使动态创建的单选菜单项成为单个 radio-item-group 的一部分?

这里的问题是每次显示菜单时,旧的菜单项都会被销毁,并且会再次调用 @AboutToShow 方法来重新创建菜单。所以任何旧的无线电选择都会丢失。

因此您需要在每次更改时保存当前选择,并在再次创建菜单时在相应的菜单项上调用 setSelected(true)

或者,如果菜单中的项目数量不变(您的 modeList 是固定大小),您可以使用处理器创建一次菜单(processor 元素 org.eclipse.e4.workbench.model扩展点)。