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
扩展点)。
我正在尝试使用单选菜单项动态填充 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
扩展点)。