所有视图的动态弹出菜单

时间:2012-04-10 10:33:19

标签: eclipse-plugin

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

1 个答案:

答案 0 :(得分:0)

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