package org.eclipse.ui.views.file;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.ActionContributionItem;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.action.IMenuCreator;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Menu;
// from https://www.eclipse.org/forums/index.php/t/144833/
public class ToolbarSubmenuAction extends Action implements IMenuCreator {
private Menu fMenu;
private List<IAction> actions=new ArrayList<IAction>();
public ToolbarSubmenuAction(String name, ImageDescriptor imageDescriptor) {
setText(name);
setImageDescriptor(imageDescriptor);
setMenuCreator(this);
}
public void addAction(IAction action){
actions.add(action);
}
List<IAction> getActions() {
return actions;
}
@Override
public void dispose() {
if (fMenu != null) {
fMenu.dispose();
fMenu = null;
}
}
@Override
public Menu getMenu(Control parent) {
if (fMenu != null){
fMenu.dispose();
}
fMenu = new Menu(parent);
for (IAction action : getActions()) {
addActionToMenu(fMenu, action);
}
return fMenu;
}
@Override
public Menu getMenu(Menu parent) {
return null;
}
private void addActionToMenu(Menu parent, IAction action) {
ActionContributionItem item = new ActionContributionItem(action);
item.fill(parent, -1);
}
}