我有提供的动作。在fillContextMenu中,我试图使用IMenuManager.getItems()方法迭代所有可用的菜单项。我无法获得完整的菜单列表。
例如,通过getItems()无法使用导入和导出上下文菜单。
是否隐藏通过'popupMenus'扩展添加的贡献。
有没有办法遍历与给定菜单管理器关联的所有菜单。
感谢。
Phani。
答案 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);
}
}
}