我有一个独立的eclipse RCP应用程序。主要交互通过主工具栏进行。以下是plugin.xml的相关代码段:
<extension
point="org.eclipse.ui.menus">
<menuContribution
allPopups="false"
locationURI="toolbar:org.eclipse.ui.main.toolbar">
<toolbar
id="my.toolbar.id">
...
<command
commandId="my.command.id"
id="my.connect.id"
label="Connect"
style="pulldown">
</command>
...
</toolbar>
</menuContribution>
<menuContribution
allPopups="false"
locationURI="menu:my.connect.id">
</menuContribution>
我希望在即将显示的时候填充下拉菜单my.connect.id
,每次打开时都可以容纳不同的项目。可以使用MenuManager
为此ID添加IMenuListener
。
如何从plugin.xml获取给定id的MenuManager
实例?
非常感谢。
PS:现在还是e3。
答案 0 :(得分:2)
我花了几天时间研究这个问题。以下是我自己问题的答案:
使用处理所有贡献的类为菜单提供动态贡献。
plugin.xml中:
<menuContribution
allPopups="false"
locationURI="menu:my.connect.id">
<dynamic
class="my.ConnectMenu"
id="my.connect.menu">
</dynamic>
</menuContribution>
ConnectMenu.java:
public class ConnectMenu extends ContributionItem {
private IMenuListener menuListener = new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
fillMenu(manager);
}
};
public ConnectMenu() {
this("my.connect.menu");
}
public ConnectMenu(String id) {
super(id);
}
@Override
public void fill(Menu menu, int index) {
super.fill(menu, index);
if (getParent() instanceof MenuManager) {
((MenuManager) getParent()).setRemoveAllWhenShown(true);
((MenuManager) getParent()).addMenuListener(menuListener);
}
}
private void fillMenu(IMenuManager mgr) {
mgr.add(createContributionItem());
mgr.update();
}
private IContributionItem createContributionItem() {
// ...
}
}
希望这有帮助。
对我很有帮助:https://phisymmetry.wordpress.com/2010/01/03/eclipse-tips-how-to-create-menu-items-dynamically/