Eclipse动态操作项目资源管理器上下文菜单

时间:2013-09-21 18:26:16

标签: eclipse eclipse-plugin eclipse-rcp

我有提供的动作。在fillContextMenu中,我试图使用IMenuManager.getItems()方法迭代所有可用的菜单项。我无法获得完整的菜单列表。

例如,通过getItems()无法使用导入和导出上下文菜单。

是否隐藏通过'popupMenus'扩展添加的贡献。

有没有办法遍历与给定菜单管理器关联的所有菜单。

感谢。

Phani。

1 个答案:

答案 0 :(得分:0)

您的问题是,在IMenuManager上调用getItems()时,它只会返回其子项,而不会返回添加到根IMenuManager的其他IMenuManage的子项。如果你想获得所有项目和子IMenuManager项目在这里是一个功能,将这样做。虽然如果你这样做是为了添加IContributionItems,你可以简单地使用.addItem(item itemPath),它将在内部遍历图形并在正确的位置添加你的贡献。如果要删除现有的贡献,首先需要在菜单树中获取所有贡献项,然后使用要删除的ContributionItem实例调用IMenuManager上的remove()。尝试此功能,您将在根管理器中看到导入和导出项以及其他子菜单项。希望有所帮助,如果你仍然卡住请回复。 - 邓肯克雷布斯

    private IContributionItem[] getMenuTreeItems(IMenuManager rootManager) {
        List<IContributionItem> items = new ArrayList<IContributionItem>();
        addMenuManagerItems(rootManager, items);
        return items.toArray(new IContributionItem[items.size()]);

    }

    private void addMenuManagerItems(IMenuManager manager, List<IContributionItem> items ) { 
        for (IContributionItem item : manager.getItems()) {
            if (item instanceof IMenuManager) {
                IMenuManager childManager = (IMenuManager) item;
                addMenuManagerItems(childManager, items);
            } else { 
                items.add(item); 
            }
        }
    }