RCP中的动态广播菜单项

时间:2017-06-01 06:35:05

标签: eclipse-rcp e4

我尝试使用广播菜单项动态填充RCP应用程序中的菜单。目的是这些菜单项对应于不同的"模式"为申请。

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

@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 项目。

如何将动态创建的广播菜单项作为单个广播项目组 的一部分?

1 个答案:

答案 0 :(得分:1)

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

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

或者,如果菜单中的项目数量没有变化(您的modeList是固定大小),您可以使用处理器创建菜单一次(processor元素{ {1}}扩展点)。