Eclipse >> Dynamic menu
public class xxxPopupMenus extends
CompoundContributionItem implements IWorkbenchContribution {
private IServiceLocator serviceLocator;
@Override
public void initialize(IServiceLocator serviceLocator) {
this.serviceLocator = serviceLocator;
}
private IContributionItem[] contributionItems;
public xxxPopupMenus() {
contributionItems = new IContributionItem[0];
}
@Override
protected IContributionItem[] getContributionItems() {
contributionItems = new IContributionItem[someArrays.size() + 1];
int index = 0;
for (someObject obj : someArrays) {
addPopupMenu(this.getId() + obj.getName().toLowerCase(), obj.getName(),
index);
index = index + 1;
}
return contributionItems;
}
public void addPopupMenu(String id, String name, int index) {
Map<String, String> parameters = new HashMap<String, String>();
//Pass command parameter if necessary
parameters.put("name", name);
CommandContributionItemParameter params = new CommandContributionItemParameter(
serviceLocator,
id,
"xxx.commandID",
parameters, null, null, null, "Label: " + name, null, "Tool tip: " + name,
CommandContributionItem.STYLE_PULLDOWN,
null, true);
contributionItems[index] = new CommandContributionItem(params);
}
}
<extension point="org.eclipse.ui.menus">
<menuContribution
allPopups="true"
locationURI="popup:xxx?after=xxx.separator">
<menu
id="id" label="%menu.label"
icon="/icons/full/obj16/icon.png">
<visibleWhen
checkEnabled="false">
</visibleWhen>
<dynamic class="xxx.menus.xxxPopupMenus"
id="menu:xxx.menus.xxx.items"/>
</menu>
</menuContribution>
</extension>