package org.jbpm.gd.jpdl.properties; import org.eclipse.gef.commands.CommandStack; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.Separator; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.MenuAdapter; import org.eclipse.swt.events.MenuEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.MenuItem; import org.eclipse.ui.IActionBars; import org.jbpm.gd.common.util.SharedImages; import org.jbpm.gd.jpdl.Plugin; import org.jbpm.gd.jpdl.command.TimerCreateCommand; import org.jbpm.gd.jpdl.command.TimerDeleteCommand; import org.jbpm.gd.jpdl.model.TimerContainer; public class TimerContainerSectionActionBarContributor { private TimerContainerSection timersSection; private ActionContributionItem addTimerToolbarContributionItem; private ActionContributionItem removeToolbarContributionItem; private ActionContributionItem addTimerMenuContributionItem; private ActionContributionItem removeMenuContributionItem; private Separator toolbarSeparator; private Separator menuSeparator; private Menu root; public TimerContainerSectionActionBarContributor(TimerContainerSection timersSection) { setTimersSection(timersSection); createAddTimerContributions(); createSeparatorContributions(); createRemoveContributions(); } private void createSeparatorContributions() { toolbarSeparator = new Separator(); menuSeparator = new Separator(); } private void setTimersSection(TimerContainerSection timersSection) { this.timersSection = timersSection; } public void activateContributions() { addAddTimerAction(); addSeparators(); addRemoveAction(); getActionBars().updateActionBars(); } private void addSeparators() { getActionBars().getToolBarManager().add(toolbarSeparator); getActionBars().getMenuManager().add(menuSeparator); } public void deactivateContributions() { removeAddTimerAction(); removeSeparators(); removeRemoveAction(); getActionBars().updateActionBars(); } private void removeSeparators() { getActionBars().getToolBarManager().remove(toolbarSeparator); getActionBars().getMenuManager().remove(menuSeparator); } public void setRemoveEnabled(boolean enabled) { removeMenuContributionItem.getAction().setEnabled(enabled); removeToolbarContributionItem.getAction().setEnabled(enabled); } private void addAddTimerAction() { getActionBars().getToolBarManager().add(addTimerToolbarContributionItem); getActionBars().getMenuManager().add(addTimerMenuContributionItem); } private void createAddTimerContributions() { addTimerToolbarContributionItem = new ActionContributionItem(createAddTimerAction()); addTimerMenuContributionItem = new ActionContributionItem(createAddTimerAction()); } private IAction createAddTimerAction() { IAction action = new Action() { public void run() { addNewTimer(); } }; action.setImageDescriptor( ImageDescriptor.createFromURL(Plugin.getDefault() .getBundle().getEntry("/icons/full/obj16/new_timer_enabled.gif"))); action.setDisabledImageDescriptor( ImageDescriptor.createFromURL(Plugin.getDefault() .getBundle().getEntry("/icons/full/obj16/new_timer_disabled.gif"))); action.setToolTipText("Add a timer"); action.setText("New Timer"); return action; } private void addRemoveAction() { getActionBars().getToolBarManager().add(removeToolbarContributionItem); getActionBars().getMenuManager().add(removeMenuContributionItem); } private void createRemoveContributions() { removeToolbarContributionItem = new ActionContributionItem(createRemoveAction()); removeMenuContributionItem = new ActionContributionItem(createRemoveAction()); } private IAction createRemoveAction() { IAction action = new Action() { public void run() { removeSelectedObject(); } }; action.setImageDescriptor( ImageDescriptor.createFromURL(Plugin.getDefault() .getBundle().getEntry("/icons/full/obj16/delete_enabled.gif"))); action.setDisabledImageDescriptor( ImageDescriptor.createFromURL(Plugin.getDefault() .getBundle().getEntry("/icons/full/obj16/delete_disabled.gif"))); action.setToolTipText("Remove the selection"); action.setText("Delete"); action.setEnabled(false); return action; } private void addNewTimer() { TimerContainer target = timersSection.getTimerContainer(); TimerCreateCommand command = new TimerCreateCommand(target.getFactory()); command.setTimerContainer(target); getCommandStack().execute(command); } private void removeSelectedObject() { TimerDeleteCommand command = new TimerDeleteCommand(); command.setTimerContainer(timersSection.getTimerContainer()); command.setTimer(timersSection.getSelectedTimer()); getCommandStack().execute(command); } private CommandStack getCommandStack() { return timersSection.getCommandStack(); } private void removeAddTimerAction() { getActionBars().getToolBarManager().remove(addTimerToolbarContributionItem); getActionBars().getMenuManager().remove(addTimerMenuContributionItem); } private void removeRemoveAction() { getActionBars().getToolBarManager().remove(removeToolbarContributionItem); getActionBars().getMenuManager().remove(removeMenuContributionItem); } private IActionBars getActionBars() { return timersSection.getTabbedPropertySheetPage().getSite().getActionBars(); } public void createPopupMenu(Composite composite) { root = new Menu(composite); composite.setMenu(root); root.addMenuListener(new MenuAdapter() { public void menuShown(MenuEvent e) { disposePopupMenu(); createPopupMenu(); } }); } private void disposePopupMenu() { MenuItem[] menuItems = root.getItems(); for (int i = 0; i < menuItems.length; i++) { menuItems[i].dispose(); } } private void createPopupMenu() { createAddTimerMenuItem(); new MenuItem(root, SWT.SEPARATOR); createRemoveMenuItem(); } private String getDeleteImagePath() { String imagePath; if (timersSection.getSelectedTimer() != null) { imagePath = "/icons/full/obj16/delete_enabled.gif"; } else { imagePath = "/icons/full/obj16/delete_disabled.gif"; } return imagePath; } private void createAddTimerMenuItem() { MenuItem addTimerItem = new MenuItem(root, SWT.PUSH); addTimerItem.setText("New Timer"); ImageDescriptor descriptor = ImageDescriptor.createFromURL(Plugin.getDefault() .getBundle().getEntry("/icons/full/obj16/new_timer_enabled.gif")); addTimerItem.setImage(SharedImages.INSTANCE.getImage(descriptor)); addTimerItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addNewTimer(); } }); } private void createRemoveMenuItem() { MenuItem removeItem = new MenuItem(root, SWT.PUSH); removeItem.setText("Delete"); ImageDescriptor descriptor = ImageDescriptor.createFromURL(Plugin.getDefault() .getBundle().getEntry(getDeleteImagePath())); removeItem.setImage(SharedImages.INSTANCE.getImage(descriptor)); removeItem.setEnabled(timersSection.getSelectedTimer() != null); removeItem.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { removeSelectedObject(); } }); } }