package org.jbpm.gd.jpdl.properties; import org.eclipse.swt.SWT; 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.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.jbpm.gd.jpdl.model.Action; import org.jbpm.gd.jpdl.util.BooleanTypeHelper; public class ActionAdvancedConfigurationComposite implements SelectionListener { public static ActionAdvancedConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { ActionAdvancedConfigurationComposite result = new ActionAdvancedConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private Button asyncButton; private Button acceptPropagatedEventsButton; private Action action; private ActionAdvancedConfigurationComposite() {} public void setAction(Action action) { if (this.action == action) return; unhookSelectionListener(); clearControls(); this.action = action; if (action != null) { updateControls(); hookSelectionListener(); } } private void hookSelectionListener() { asyncButton.addSelectionListener(this); acceptPropagatedEventsButton.addSelectionListener(this); } private void unhookSelectionListener() { asyncButton.removeSelectionListener(this); acceptPropagatedEventsButton.removeSelectionListener(this); } private void clearControls() { acceptPropagatedEventsButton.setSelection(false); asyncButton.setSelection(false); } private void updateControls() { acceptPropagatedEventsButton.setSelection(BooleanTypeHelper.booleanValue(action.getAcceptPropagatedEvents())); asyncButton.setSelection(BooleanTypeHelper.booleanValue(action.getAsync())); } private void create() { asyncButton = widgetFactory.createButton(parent, "Asynchronous", SWT.CHECK); acceptPropagatedEventsButton = widgetFactory.createButton(parent, "Accept Propagated Events", SWT.CHECK); asyncButton.setLayoutData(createAsyncButtonLayoutData()); acceptPropagatedEventsButton.setLayoutData(createAcceptPropagatedEventsButtonLayoutData()); } private FormData createAcceptPropagatedEventsButtonLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 0); return data; } private FormData createAsyncButtonLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(acceptPropagatedEventsButton, 0); return data; } public void widgetDefaultSelected(SelectionEvent e) { } public void widgetSelected(SelectionEvent e) { if (e.widget == asyncButton) { action.setAsync(asyncButton.getSelection() ? "true" : "false"); } else if (e.widget == acceptPropagatedEventsButton) { action.setAcceptPropagatedEvents(acceptPropagatedEventsButton.getSelection() ? "true" : "false"); } } }