0

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

例如,通过 getItems() 无法使用 Import 和 Export 上下文菜单。

它是否隐藏通过“popupMenus”扩展添加的贡献。

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

谢谢。

帕尼。

4

1 回答 1

0

您的问题是,在 IMenuManager 上调用 getItems() 时,它只会返回其子项,而不是添加到根 IMenuManager 的其他 IMenuManager 的子项。如果您想获取所有项目和子 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); 
            }
        }
    }
于 2013-09-21T21:00:48.000 回答