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.DescribableElement; import org.jbpm.gd.jpdl.model.Description; public class DescribableElementConfigurationComposite implements FocusListener { public static DescribableElementConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { DescribableElementConfigurationComposite result = new DescribableElementConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private Text descriptionText; private Label descriptionLabel; private DescribableElement describableElement; private Description description; private DescribableElementConfigurationComposite() {} public void setDescribableElement(DescribableElement describableElement) { if (this.describableElement == describableElement) return; unhookSelectionListener(); clearControls(); this.describableElement = describableElement; if (describableElement != null) { updateControls(); hookSelectionListener(); } } private void hookSelectionListener() { descriptionText.addFocusListener(this); } private void unhookSelectionListener() { descriptionText.removeFocusListener(this); } private void clearControls() { descriptionText.setText(""); } private void updateControls() { description = describableElement.getDescription(); String str = ""; if (description != null && description.getDescription() != null) { str = description.getDescription(); } descriptionText.setText(str); } private void create() { descriptionLabel = widgetFactory.createLabel(parent, "Description"); descriptionText = widgetFactory.createText(parent, "", SWT.MULTI | SWT.V_SCROLL); descriptionLabel.setLayoutData(createDescriptionLabelLayoutData()); descriptionText.setLayoutData(createDescriptionTextLayoutData()); } private FormData createDescriptionLabelLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 0); data.top = new FormAttachment(0, 2); return data; } private FormData createDescriptionTextLayoutData() { FormData data = new FormData(); data.left = new FormAttachment(0, 85); data.top = new FormAttachment(0, 0); data.right = new FormAttachment(100, 0); data.bottom = new FormAttachment(100, 0); return data; } public void focusGained(FocusEvent e) { } public void focusLost(FocusEvent e) { if (e.widget == descriptionText) { String str = descriptionText.getText(); Description description = describableElement.getDescription(); if ("".equals(str)) { describableElement.setDescription(null); } else { if (description == null) { description = (Description)describableElement.getFactory().createById("org.jbpm.gd.jpdl.description"); describableElement.setDescription(description); } description.setDescription(str); } } } }