我需要为所有视图提供一个动态弹出菜单。我可以创建一个动态弹出菜单贡献,但我必须设置 URI 并为特定视图注册它。现在,当用户选择另一个视图时,我正在尝试动态注册菜单:
public class GlobalSelectionListener implements ISelectionListener {
HashSet<IWorkbenchPart> extended = new HashSet<IWorkbenchPart>();
@Override
public void selectionChanged(IWorkbenchPart part, ISelection selection) {
if (!extended.contains(part)) {
IWorkbenchPartSite wps = part.getSite();
if (wps == null)
return;
//creates popup menu for this part
MenuManager mgr = new MenuManager();
mgr.add(new DynamicMenu()); //DynamicMenu extends ContributionItem
wps.registerContextMenu("identifier." + mgr.hashCode(), mgr, wps.getSelectionProvider());
extended.add(part);
System.out.println(part + " menu extended");
}
}
}
但这不起作用。弹出菜单中没有任何菜单项出现。我不知道,是否有可能这样做。有什么方法可以动态添加任意视图的弹出菜单吗?看来,该registerContextMenu()
方法做了其他事情。