我正在寻找一种方法来强制Eclipse以编程方式刷新/重建自己的主菜单甚至是运行时的整个视图。
我之所以需要这种方式是因为我有一个插件可以遍历项目,并且根据所选项目的配置,它在运行时加载一个项目特定的插件:
FrameworkUtil.getBundle(this.getClass()).getBundleContext().installBundle(String).start()
现在加载的插件有助于org.eclipse.ui.main.menu
扩展点,即使安装了插件,我也看不到新的菜单项。
仅供参考:我正在使用Eclipse 3.x和E4工具
现在我的问题是:
menu
并以编程方式添加menu items
。
但我无法相信没有办法刷新视图所以我问这个问题。我检查了MMenu是否有自己的刷新方法,所以我可以获取对象并只调用刷新方法。
但最终我找不到办法做到这一点。
P.S。我对插件开发和RCP很新,所以如果解决方案很明显但我没有意识到,请不要责怪我
答案 0 :(得分:0)
简短回答:否
在许多地方加载了Eclipse扩展点,信息存储在静态字段中(通常在Singleton中)。 plugin.xml数据在应用程序的生命周期内不会重新加载,当然这些bundle不会监听允许它们检测此类更改的bundle事件。
因此,即使有一些方法在整个UI上调用刷新,至少一些(大多数?)代码处理扩展点也不会看到新plugin.xmls的效果。
要回答你想要做的事情,"正常"要做的就是让每个菜单贡献的可见性取决于某些表达,例如如果当前选择适应MySpecialProject,您可以将其显示。
当你以正常的方式执行它,并且你把所有东西都延迟加载时,在第一次实际调用这些命令之前,不会加载所有这些项目类型插件的java代码。
要进行下一步,您可能会有一个主ui插件,它定义了一堆命令(例如构建项目,flash指示灯,格式文件等),但没有在该主插件中关联的命令处理程序 - 在。在每个项目类型插件中,具有仅在正确的项目类型处于活动状态时启用的命令处理程序。
假设您已经在Eclipse中使用basic tutorial命令,vogella.com上有一个很好的高级命令,它涵盖了许多有用的功能,可以保持正常动态。