/******************************************************************************* * Copyright (c) 2007-2011, G. Weirich and Elexis * All rights reserved. This program and the accompanying materials * are 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 * * Contributors: * G. Weirich - initial API and implementation ******************************************************************************/ package ch.elexis.core.ui.laboratory.views; import java.text.MessageFormat; import java.util.List; import java.util.Vector; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.ToolItem; import ch.elexis.core.data.activator.CoreHub; import ch.elexis.core.data.util.Extensions; import ch.elexis.core.ui.constants.ExtensionPointConstantsUi; import ch.elexis.core.ui.util.Log; public class LaborOrderPulldownMenuCreator implements IMenuCreator { private final String LAB_ORDER_SELECTED_ACTION_ID = ExtensionPointConstantsUi.LABORORDER + ".selectedId"; private static Log log = Log.get("LaborOrderPulldownMenuCreator"); //$NON-NLS-1$ List<IAction> actions = new Vector<IAction>(); Menu menu = null; IAction selectedAction = null; public LaborOrderPulldownMenuCreator(final Shell shell){ super(); init(shell); } @SuppressWarnings("unchecked") private void init(final Shell shell){ List<IAction> orderActions = Extensions.getClasses(Extensions.getExtensions(ExtensionPointConstantsUi.LABORORDER), "ToolbarAction", //$NON-NLS-1$ //$NON-NLS-2$ false); for (IAction action : orderActions) { if (action.getId() != null && action.getImageDescriptor() != null && action.getText() != null) { this.actions.add(action); } else { log.log(MessageFormat.format( "Missing #id, #imagedescriptor or #text for LaborOrder action: {0}", action.getText()), Log.WARNINGS); } } if (this.actions != null && this.actions.size() > 0) { String selectedId = CoreHub.localCfg.get(LAB_ORDER_SELECTED_ACTION_ID, null); if (selectedId != null) { for (IAction action : this.actions) { if (selectedId.equals(action.getId())) { this.selectedAction = action; } } } if (this.selectedAction == null) { this.selectedAction = this.actions.get(0); } } } public IAction getSelected(){ return this.selectedAction; } @Override public void dispose(){ if (this.menu != null) { this.menu.dispose(); } } @Override public Menu getMenu(Menu parent){ return null; } /** * Pulldown menu wird anhand selection angepasst * * @param parent * @param action * @param image */ private void select(final Control parent, final IAction action, final Image image){ if (parent instanceof ToolBar) { ToolBar toolBar = (ToolBar) parent; if (toolBar.getItemCount() > 0) { ToolItem toolItem = toolBar.getItem(0); toolItem.setImage(image); toolItem.setHotImage(image); toolItem.setToolTipText(action.getToolTipText()); this.selectedAction = action; CoreHub.localCfg.set(LAB_ORDER_SELECTED_ACTION_ID, this.selectedAction.getId()); } } } @Override public Menu getMenu(final Control parent){ if (this.menu == null) { this.menu = new Menu(parent); for (final IAction action : this.actions) { final MenuItem menuItem = new MenuItem(this.menu, SWT.PUSH); final Image image = action.getImageDescriptor().createImage(); menuItem.setImage(image); menuItem.setText(action.getText()); // Add listeners menuItem.addSelectionListener(new SelectionAdapter() { @Override public void widgetSelected(SelectionEvent e){ select(parent, action, image); action.run(); } }); } } return this.menu; } /** * Returns action to the pulldown button * * @return */ public IAction getAction(){ int buttonStyle = IAction.AS_DROP_DOWN_MENU; if (actions.size() == 1) { buttonStyle = IAction.AS_PUSH_BUTTON; } IAction dropDownAction = new Action("Dropdown", buttonStyle) { @Override public void run(){ getSelected().run(); } }; dropDownAction.setMenuCreator(this); return dropDownAction; } }