package org.jbpm.gd.jpdl.properties;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.CTabItem;
import org.eclipse.swt.events.ControlEvent;
import org.eclipse.swt.events.ControlListener;
import org.eclipse.swt.events.DisposeEvent;
import org.eclipse.swt.events.DisposeListener;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.events.FocusListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.layout.FormAttachment;
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.layout.FormLayout;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.jbpm.gd.common.properties.NamedElementConfigurationComposite;
import org.jbpm.gd.jpdl.model.Task;
public class TaskConfigurationComposite implements SelectionListener, FocusListener, ControlListener, DisposeListener {
public static TaskConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) {
TaskConfigurationComposite result = new TaskConfigurationComposite();
result.widgetFactory = widgetFactory;
result.parent = parent;
result.create();
return result;
}
CTabFolder taskInfoTabFolder;
Composite namedElementComposite;
Composite describableElementComposite;
NamedElementConfigurationComposite namedElementConfigurationComposite;
DescribableElementConfigurationComposite describableElementConfigurationComposite;
TaskDetailsConfigurationComposite detailsConfigurationComposite;
AssignmentConfigurationComposite assignmentConfigurationComposite;
ControllerConfigurationComposite controllerConfigurationComposite;
TaskReminderConfigurationComposite taskReminderConfigurationComposite;
private TabbedPropertySheetWidgetFactory widgetFactory;
private Composite parent;
private Task task;
private TaskConfigurationComposite() {}
public void setTask(Task task) {
if (this.task == task) return;
unhookListeners();
this.task = task;
clearControls();
if (task != null) {
updateControls();
hookListeners();
}
}
private void hookListeners() {
}
private void unhookListeners() {
}
private void clearControls() {
namedElementConfigurationComposite.setNamedElement(null);
describableElementConfigurationComposite.setDescribableElement(null);
detailsConfigurationComposite.setTask(null);
assignmentConfigurationComposite.setAssignable(null);
controllerConfigurationComposite.setTask(null);
taskReminderConfigurationComposite.setTask(null);
}
private void updateControls() {
namedElementConfigurationComposite.setNamedElement(task);
describableElementConfigurationComposite.setDescribableElement(task);
detailsConfigurationComposite.setTask(task);
assignmentConfigurationComposite.setAssignable(task);
controllerConfigurationComposite.setTask(task);
taskReminderConfigurationComposite.setTask(task);
}
private void create() {
taskInfoTabFolder = widgetFactory.createTabFolder(parent, SWT.TOP | SWT.BORDER);
taskInfoTabFolder.setLayoutData(createTaskInfoTabFolderLayoutData());
createGeneralTabItem();
createDetailsTabItem();
createAssignmentTabItem();
createControllerTabItem();
createReminderTabItem();
taskInfoTabFolder.setSelection(0);
taskInfoTabFolder.addControlListener(this);
taskInfoTabFolder.addDisposeListener(this);
}
private void createGeneralTabItem() {
CTabItem generalTabItem = widgetFactory.createTabItem(taskInfoTabFolder, SWT.NORMAL);
generalTabItem.setText("General");
Composite generalTabControl = widgetFactory.createComposite(taskInfoTabFolder);
generalTabControl.setLayout(new FormLayout());
namedElementComposite = widgetFactory.createFlatFormComposite(generalTabControl);
namedElementComposite.setLayoutData(createNamedElementCompositeLayoutData());
namedElementConfigurationComposite = NamedElementConfigurationComposite.create(widgetFactory, namedElementComposite);
describableElementComposite = widgetFactory.createFlatFormComposite(generalTabControl);
describableElementComposite.setLayoutData(createDescribableElementCompositeLayoutData());
describableElementConfigurationComposite = DescribableElementConfigurationComposite.create(widgetFactory, describableElementComposite);
generalTabItem.setControl(generalTabControl);
}
private void createControllerTabItem() {
CTabItem controllerTabItem = widgetFactory.createTabItem(taskInfoTabFolder, SWT.NORMAL);
controllerTabItem.setText("Controller");
Composite controllerTabControl = widgetFactory.createFlatFormComposite(taskInfoTabFolder);
controllerConfigurationComposite = ControllerConfigurationComposite.create(widgetFactory, controllerTabControl);
controllerTabItem.setControl(controllerTabControl);
}
private void createAssignmentTabItem() {
CTabItem assignmentTabItem = widgetFactory.createTabItem(taskInfoTabFolder, SWT.NORMAL);
assignmentTabItem.setText("Assignment");
Composite assignmentTabControl = widgetFactory.createFlatFormComposite(taskInfoTabFolder);
assignmentConfigurationComposite =
AssignmentConfigurationComposite.create(widgetFactory, assignmentTabControl);
assignmentTabItem.setControl(assignmentTabControl);
}
private void createDetailsTabItem() {
CTabItem detailsTabItem = widgetFactory.createTabItem(taskInfoTabFolder, SWT.NORMAL);
detailsTabItem.setText("Details");
Composite detailsTabControl = widgetFactory.createFlatFormComposite(taskInfoTabFolder);
detailsConfigurationComposite =
TaskDetailsConfigurationComposite.create(widgetFactory, detailsTabControl);
detailsTabItem.setControl(detailsTabControl);
}
private void createReminderTabItem() {
CTabItem reminderTabItem = widgetFactory.createTabItem(taskInfoTabFolder, SWT.NORMAL);
reminderTabItem.setText("Reminder");
Composite reminderTabControl = widgetFactory.createFlatFormComposite(taskInfoTabFolder);
taskReminderConfigurationComposite = TaskReminderConfigurationComposite.create(widgetFactory, reminderTabControl);
reminderTabItem.setControl(reminderTabControl);
}
private FormData createTaskInfoTabFolderLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(0, 0);
result.right = new FormAttachment(100, 0);
result.top = new FormAttachment(0, 0);
result.bottom = new FormAttachment(100, 0);
return result;
}
private FormData createNamedElementCompositeLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(0, 0);
result.top = new FormAttachment(0, 0);
result.right = new FormAttachment(100, 0);
return result;
}
private FormData createDescribableElementCompositeLayoutData() {
FormData result = new FormData();
result.left = new FormAttachment(0, 0);
result.top = new FormAttachment(namedElementComposite, 0);
result.right = new FormAttachment(100, 0);
result.bottom = new FormAttachment(100, 0);
return result;
}
public void widgetDefaultSelected(SelectionEvent e) {
}
public void widgetSelected(SelectionEvent e) {
}
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
}
public void controlMoved(ControlEvent e) {
}
public void controlResized(ControlEvent e) {
taskInfoTabFolder.layout(true, true);
}
public void widgetDisposed(DisposeEvent e) {
taskInfoTabFolder.removeControlListener(this);
}
}