package org.jbpm.gd.jpdl.properties; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; 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.swt.widgets.Text; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.jbpm.gd.jpdl.model.Script; public class ScriptDetailsConfigurationComposite implements FocusListener { public static ScriptDetailsConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { ScriptDetailsConfigurationComposite result = new ScriptDetailsConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private Label scriptLabel; private Text scriptText; private Script script; private ScriptDetailsConfigurationComposite() {} public void setScript(Script script) { if (this.script == script) return; unhookSelectionListener(); clearControls(); this.script = script; if (script != null) { updateControls(); hookSelectionListener(); } } private void hookSelectionListener() { scriptText.addFocusListener(this); } private void unhookSelectionListener() { scriptText.removeFocusListener(this); } private void clearControls() { scriptText.setText(""); } private void updateControls() { String str = script.getScript(); scriptText.setText(str == null ? "" : str); } private void create() { scriptLabel = widgetFactory.createLabel(parent, "Script"); scriptText = widgetFactory.createText(parent, "", SWT.MULTI | SWT.V_SCROLL); scriptLabel.setLayoutData(createScriptLabelLayoutData()); scriptText.setLayoutData(createScriptTextLayoutData()); } private FormData createScriptTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 85); data.top = new FormAttachment(0, 5); data.right = new FormAttachment(100, 0); data.bottom = new FormAttachment(100, 0); return data; } private FormData createScriptLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 7); return data; } private String getScriptText() { String text = scriptText.getText(); if ("".equals(text)) { text = null; } return text; } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { if (e.widget == scriptText) { script.setScript(getScriptText()); } } }