package org.jbpm.gd.jpdl.properties;
import org.eclipse.swt.custom.CCombo;
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.widgets.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory;
import org.jbpm.gd.jpdl.model.Event;
public class EventConfigurationComposite implements SelectionListener, FocusListener {
public static EventConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) {
EventConfigurationComposite result = new EventConfigurationComposite();
result.widgetFactory = widgetFactory;
result.parent = parent;
result.create();
return result;
}
private TabbedPropertySheetWidgetFactory widgetFactory;
private Composite parent;
private Label eventTypeLabel;
private CCombo eventTypeCombo;
private Event event;
private EventConfigurationComposite() {}
public void setEvent(Event event) {
if (this.event == event) return;
unhookListeners();
this.event = event;
if (event == null) {
clearControls();
} else {
updateControls();
hookListeners();
}
}
private void hookListeners() {
eventTypeCombo.addSelectionListener(this);
eventTypeCombo.addFocusListener(this);
}
private void unhookListeners() {
eventTypeCombo.removeSelectionListener(this);
eventTypeCombo.removeSelectionListener(this);
}
private void clearControls() {
eventTypeCombo.setText("");
}
private void updateControls() {
String type = event.getType();
if (type != null) {
eventTypeCombo.setText(type);
} else {
eventTypeCombo.setText("");
}
}
private void create() {
eventTypeLabel = widgetFactory.createLabel(parent, "Event Type");
eventTypeCombo = widgetFactory.createCCombo(parent);
eventTypeCombo.setItems(Event.PREDEFINED_EVENT_TYPES);
eventTypeCombo.setText("");
eventTypeLabel.setLayoutData(createEventTypeLabelLayoutData());
eventTypeCombo.setLayoutData(createEventTypeComboLayoutData());
}
private FormData createEventTypeComboLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(eventTypeLabel, 0);
data.top = new FormAttachment(0, 0);
return data;
}
private FormData createEventTypeLabelLayoutData() {
FormData data = new FormData();
data.left = new FormAttachment(0, 0);
data.top = new FormAttachment(0, 3);
return data;
}
public void widgetDefaultSelected(SelectionEvent e) {
if (e.widget == eventTypeCombo) {
event.setType(eventTypeCombo.getText());
}
}
public void widgetSelected(SelectionEvent e) {
if (e.widget == eventTypeCombo) {
event.setType(eventTypeCombo.getText());
}
}
public void focusGained(FocusEvent e) {
}
public void focusLost(FocusEvent e) {
if (e.widget == eventTypeCombo) {
event.setType(eventTypeCombo.getText());
}
}
}