capint
6/26/2016 - 3:08 PM

Eclipse >> Dynamic menu

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>