如何在运行时以编程方式刷新 Eclipse 主菜单
How to refresh the Eclipse main menu programmatically on runtime
我正在寻找一种方法来以编程方式强制 Eclipse refresh/rebuild 它自己的主菜单甚至运行时的整个视图。
我需要这种方式的原因是,因为我有一个迭代项目的插件,并且根据所选项目的配置,它在运行时加载项目特定的插件:
FrameworkUtil.getBundle(this.getClass()).getBundleContext().installBundle(String).start()
现在加载的插件有助于 org.eclipse.ui.main.menu
扩展点,即使安装了插件,我也看不到新的菜单项。
仅供参考:我正在使用 Eclipse 3.x 和 E4 工具
现在我的问题是:
- 有没有办法 refresh/rebuild 部分 Eclipse ui 甚至整个 ui?
- 如果没有,有人能想到另一种方法吗?我想到了一个插件,它只提供
menu
并以编程方式添加 menu items
。
但是我不敢相信没有办法刷新视图所以我问这个问题。
我检查了 MMenu 本身是否有刷新方法,所以我可以获取对象并调用刷新方法。
但是最后没找到办法。
P.S。我是插件开发和 RCP 的新手,所以如果解决方案很明显但我没有意识到,请不要怪我
Refresh/Rebuild UI
简答:否
在很多地方都加载了 Eclipse 扩展点,信息存储在静态字段中(通常在 Singleton 中)。 plugin.xml 数据在应用程序的生命周期内不会重新加载,当然这些包不会监听允许它们检测此类更改的包事件。
因此,即使整体上有一些调用刷新的方法UI,至少一些(大多数?)代码处理扩展点不会看到新的效果plugin.xmls.
另一种方法
要回答您正在尝试做的事情,"normal" 要做的是让每个菜单贡献的可见性都取决于某些表达式,例如如果当前选择适应 MySpecialProject,您可以让它可见。
当您以正常方式执行此操作并让所有内容延迟加载时,所有这些项目类型插件的 java 代码将不会加载,直到第一次实际调用命令时间.
要进行下一步,您可能会有一个主要的 ui 插件,它定义了一堆命令(例如 build 项目、闪光灯、格式文件等) ,但在该主插件中没有关联的命令处理程序。在每个项目类型插件中,只有正确的项目类型处于活动状态时才会启用命令处理程序。
假设您已经学习了 basic tutorial on commands in Eclipse, there is a good advanced one on vogella.com,其中涵盖了很多有用的功能以实现适当的动态化。
我正在寻找一种方法来以编程方式强制 Eclipse refresh/rebuild 它自己的主菜单甚至运行时的整个视图。
我需要这种方式的原因是,因为我有一个迭代项目的插件,并且根据所选项目的配置,它在运行时加载项目特定的插件:
FrameworkUtil.getBundle(this.getClass()).getBundleContext().installBundle(String).start()
现在加载的插件有助于 org.eclipse.ui.main.menu
扩展点,即使安装了插件,我也看不到新的菜单项。
仅供参考:我正在使用 Eclipse 3.x 和 E4 工具
现在我的问题是:
- 有没有办法 refresh/rebuild 部分 Eclipse ui 甚至整个 ui?
- 如果没有,有人能想到另一种方法吗?我想到了一个插件,它只提供
menu
并以编程方式添加menu items
。 但是我不敢相信没有办法刷新视图所以我问这个问题。
我检查了 MMenu 本身是否有刷新方法,所以我可以获取对象并调用刷新方法。
但是最后没找到办法。
P.S。我是插件开发和 RCP 的新手,所以如果解决方案很明显但我没有意识到,请不要怪我
Refresh/Rebuild UI
简答:否
在很多地方都加载了 Eclipse 扩展点,信息存储在静态字段中(通常在 Singleton 中)。 plugin.xml 数据在应用程序的生命周期内不会重新加载,当然这些包不会监听允许它们检测此类更改的包事件。
因此,即使整体上有一些调用刷新的方法UI,至少一些(大多数?)代码处理扩展点不会看到新的效果plugin.xmls.
另一种方法
要回答您正在尝试做的事情,"normal" 要做的是让每个菜单贡献的可见性都取决于某些表达式,例如如果当前选择适应 MySpecialProject,您可以让它可见。
当您以正常方式执行此操作并让所有内容延迟加载时,所有这些项目类型插件的 java 代码将不会加载,直到第一次实际调用命令时间.
要进行下一步,您可能会有一个主要的 ui 插件,它定义了一堆命令(例如 build 项目、闪光灯、格式文件等) ,但在该主插件中没有关联的命令处理程序。在每个项目类型插件中,只有正确的项目类型处于活动状态时才会启用命令处理程序。
假设您已经学习了 basic tutorial on commands in Eclipse, there is a good advanced one on vogella.com,其中涵盖了很多有用的功能以实现适当的动态化。