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.IContributionItem;
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.TaskCreateCommand;
import org.jbpm.gd.jpdl.command.TaskDeleteCommand;
import org.jbpm.gd.jpdl.model.TaskContainer;
public class TaskContainerSectionActionBarContributor {
private TaskContainerSection tasksSection;
private ActionContributionItem addTaskToolbarContributionItem;
private ActionContributionItem removeToolbarContributionItem;
private ActionContributionItem addTaskMenuContributionItem;
private ActionContributionItem removeMenuContributionItem;
private Separator toolbarSeparator;
private Separator menuSeparator;
private Menu root;
public TaskContainerSectionActionBarContributor(TaskContainerSection tasksSection) {
setTasksSection(tasksSection);
createAddTaskContributions();
createSeparatorContributions();
createRemoveContributions();
}
private void createSeparatorContributions() {
toolbarSeparator = new Separator();
menuSeparator = new Separator();
}
private void setTasksSection(TaskContainerSection tasksSection) {
this.tasksSection = tasksSection;
}
public void activateContributions() {
addAddTaskAction();
addSeparators();
addRemoveAction();
getActionBars().updateActionBars();
}
private void addSeparators() {
getActionBars().getToolBarManager().add(toolbarSeparator);
getActionBars().getMenuManager().add(menuSeparator);
}
public void deactivateContributions() {
removeAddTaskAction();
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 addAddTaskAction() {
getActionBars().getToolBarManager().add(addTaskToolbarContributionItem);
getActionBars().getMenuManager().add(addTaskMenuContributionItem);
}
private void createAddTaskContributions() {
addTaskToolbarContributionItem = new ActionContributionItem(createAddTaskAction());
addTaskMenuContributionItem = new ActionContributionItem(createAddTaskAction());
}
private IAction createAddTaskAction() {
IAction action = new Action() {
public void run() {
addNewTask();
}
};
action.setImageDescriptor(
ImageDescriptor.createFromURL(Plugin.getDefault()
.getBundle().getEntry("/icons/full/obj16/new_task_enabled.gif")));
action.setDisabledImageDescriptor(
ImageDescriptor.createFromURL(Plugin.getDefault()
.getBundle().getEntry("/icons/full/obj16/new_task_disabled.gif")));
action.setToolTipText("Add a task");
action.setText("New Task");
return action;
}
IContributionItem item;
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 addNewTask() {
TaskContainer target = tasksSection.getTaskContainer();
TaskCreateCommand command = new TaskCreateCommand(target.getFactory());
command.setTaskContainer(target);
getCommandStack().execute(command);
}
private void removeSelectedObject() {
TaskDeleteCommand command = new TaskDeleteCommand();
command.setTaskContainer(tasksSection.getTaskContainer());
command.setTask(tasksSection.getSelectedTask());
getCommandStack().execute(command);
}
private CommandStack getCommandStack() {
return tasksSection.getCommandStack();
}
private void removeAddTaskAction() {
getActionBars().getToolBarManager().remove(addTaskToolbarContributionItem);
getActionBars().getMenuManager().remove(addTaskMenuContributionItem);
}
private void removeRemoveAction() {
getActionBars().getToolBarManager().remove(removeToolbarContributionItem);
getActionBars().getMenuManager().remove(removeMenuContributionItem);
}
private IActionBars getActionBars() {
return tasksSection.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() {
createAddTaskMenuItem();
new MenuItem(root, SWT.SEPARATOR);
createRemoveMenuItem();
}
private String getDeleteImagePath() {
String imagePath;
if (tasksSection.getSelectedTask() != null) {
imagePath = "/icons/full/obj16/delete_enabled.gif";
} else {
imagePath = "/icons/full/obj16/delete_disabled.gif";
}
return imagePath;
}
private void createAddTaskMenuItem() {
MenuItem addTaskItem = new MenuItem(root, SWT.PUSH);
addTaskItem.setText("New Task");
ImageDescriptor descriptor = ImageDescriptor.createFromURL(Plugin.getDefault()
.getBundle().getEntry("/icons/full/obj16/new_task_enabled.gif"));
addTaskItem.setImage(SharedImages.INSTANCE.getImage(descriptor));
addTaskItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
addNewTask();
}
});
}
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(tasksSection.getSelectedTask() != null);
removeItem.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
removeSelectedObject();
}
});
}
}