Eclipse:如何获取 plugin.xml 中定义的特定菜单 ID 的 MenuManager
Eclipse: How to get the MenuManager for a specific menu id defined in plugin.xml
我有一个独立的 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
,每次打开时可以容纳不同的项目。可以使用此 ID 的 MenuManager
并添加 IMenuListener
.
来完成
如何从plugin.xml获取给定id的MenuManager
实例?
非常感谢。
PS: 还是e3.
我花了几天时间研究才弄明白这个问题。这是我自己的问题的答案:
使用 class 处理所有贡献,为菜单提供动态贡献。
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/
我有一个独立的 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
,每次打开时可以容纳不同的项目。可以使用此 ID 的 MenuManager
并添加 IMenuListener
.
如何从plugin.xml获取给定id的MenuManager
实例?
非常感谢。
PS: 还是e3.
我花了几天时间研究才弄明白这个问题。这是我自己的问题的答案:
使用 class 处理所有贡献,为菜单提供动态贡献。
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/