package org.jbpm.gd.jpdl.properties; 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.MailElement; public class MailElementTemplateConfigurationComposite implements FocusListener { public static MailElementTemplateConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { MailElementTemplateConfigurationComposite result = new MailElementTemplateConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private MailElement mailElement; private Label templateLabel; private Text templateText; public void setMailElement(MailElement mailElement) { if (this.mailElement == mailElement) return; unhookSelectionListener(); clearControls(); this.mailElement = mailElement; if (mailElement != null) { updateControls(); hookSelectionListener(); } } private void hookSelectionListener() { templateText.addFocusListener(this); } private void unhookSelectionListener() { templateText.removeFocusListener(this); } private void clearControls() { templateText.setText(""); } private void updateControls() { templateText.setText(mailElement.getTemplate() == null ? "" : mailElement.getTemplate()); } private void create() { templateLabel = widgetFactory.createLabel(parent, "Template"); templateText = widgetFactory.createText(parent, ""); templateLabel.setLayoutData(createTemplateLabelLayoutData()); templateText.setLayoutData(createTemplateTextLayoutData()); } private FormData createTemplateLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 2); return data; } private FormData createTemplateTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 85); data.right = new FormAttachment(100, 0); data.top = new FormAttachment(0, 0); return data; } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { if (e.widget == templateText) { mailElement.setTemplate("".equals(templateText.getText()) ? null : templateText.getText()); } } }