0

我需要为所有视图提供一个动态弹出菜单。我可以创建一个动态弹出菜单贡献,但我必须设置 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()方法做了其他事情。

4

1 回答 1

0

问题没有解决,但是有一个解决方法。plugin.xml可以在文件中为所有需要的视图和编辑器注册弹出菜单。通常插件用例的数量是有限的。如果你正在编写一个插件,你就知道你需要这个插件做什么。使用Spy 插件(ALT+SHIFT+F1) 查看活动菜单贡献标识符并将您的贡献注册到您需要的所有视图和编辑器的弹出菜单中。

于 2012-07-09T07:57:54.143 回答