【问题标题】:Eclipse Manipulating project explorer Context Menu DynamicallyEclipse 动态操作项目资源管理器上下文菜单
【发布时间】:2013-09-22 05:00:48
【问题描述】:

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

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

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

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

谢谢。

帕尼。

【问题讨论】:

    标签: eclipse eclipse-plugin eclipse-rcp


    【解决方案1】:

    您的问题是,在 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); 
                }
            }
        }
    

    【讨论】:

    • Duncan Krebs,我正在按照您的建议进行操作。即使有子菜单,我可以在弹出窗口中看到,它们在代码中是不可见的。我只通过代码而不是菜单管理器获得了一些贡献项、分隔符和组。
    猜你喜欢
    • 2014-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多