/******************************************************************************* * Copyright (c) 2007-2009 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is made available under the terms of the * Eclipse Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/epl-v10.html * * Contributor: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.hibernate.ui.diagram.editors.actions; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.Separator; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; /** * Menu with list of actions. * * @author Vitali Yemialyanchyk */ public class ActionMenu extends Action implements IMenuCreator { private Action[] actions; private Menu menu; public ActionMenu(Action[] actions) { this.actions = actions; if (this.actions.length > 0) { setToolTipText(actions[0].getToolTipText()); setImageDescriptor(actions[0].getImageDescriptor()); if (actions.length > 1) { setMenuCreator(this); } } } public void run() { if (actions.length > 0) { actions[0].run(); } } public void dispose() { if (menu != null) { menu.dispose(); menu = null; } } public Menu getMenu(Control parent) { if (menu != null) { menu.dispose(); } menu = new Menu(parent); for (int i = 0; i < actions.length; i++) { addActionToMenu(menu, actions[i]); } return menu; } public Menu getMenu(Menu parent) { if (menu != null) { menu.dispose(); } menu = new Menu(parent); for (int i = 0; i < actions.length; i++) { addActionToMenu(menu, actions[i]); } return menu; } protected void addActionToMenu(Menu parent, Action action) { if (action == null) { Separator item = new Separator(); item.fill(parent, -1); } else { ActionContributionItem item = new ActionContributionItem(action); item.fill(parent, -1); } } }