package org.jbpm.gd.jpdl.properties; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CTabFolder; import org.eclipse.swt.custom.CTabItem; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.views.properties.tabbed.TabbedPropertySheetWidgetFactory; import org.jbpm.gd.jpdl.model.Action; public class ActionConfigurationComposite { public static ActionConfigurationComposite create(TabbedPropertySheetWidgetFactory widgetFactory, Composite parent) { ActionConfigurationComposite result = new ActionConfigurationComposite(); result.widgetFactory = widgetFactory; result.parent = parent; result.create(); return result; } private TabbedPropertySheetWidgetFactory widgetFactory; private Composite parent; private Action action; private CTabFolder actionTabFolder; private ActionNameConfigurationComposite actionNameConfigurationComposite; private ActionDetailsConfigurationComposite actionDetailsConfigurationComposite; private ActionAdvancedConfigurationComposite actionAdvancedConfigurationComposite; public void setAction(Action action) { if (this.action == action) return; unhookListeners(); clearControls(); this.action = action; if (action != null) { updateControls(); hookListeners(); } } public Action getAction() { return action; } private void unhookListeners() {} private void hookListeners() {} private void clearControls() { actionNameConfigurationComposite.setAction(null); actionDetailsConfigurationComposite.setAction(null); actionAdvancedConfigurationComposite.setAction(null); } private void updateControls() { actionNameConfigurationComposite.setAction(action); actionDetailsConfigurationComposite.setAction(action); actionAdvancedConfigurationComposite.setAction(action); } private void create() { actionTabFolder = widgetFactory.createTabFolder(parent, SWT.TOP | SWT.BORDER); actionTabFolder.setLayoutData(createActionTabFolderLayoutData()); createGeneralTabItem(); createDetailsTabItem(); createAdvancedTabItem(); actionTabFolder.setSelection(0); } private void createGeneralTabItem() { CTabItem generalTabItem = widgetFactory.createTabItem(actionTabFolder, SWT.NORMAL); generalTabItem.setText("General"); Composite generalTabControl = widgetFactory.createFlatFormComposite(actionTabFolder); actionNameConfigurationComposite = ActionNameConfigurationComposite.create(widgetFactory, generalTabControl); generalTabItem.setControl(generalTabControl); } private void createDetailsTabItem() { CTabItem detailsTabItem = widgetFactory.createTabItem(actionTabFolder, SWT.NORMAL); detailsTabItem.setText("Details"); Composite detailsTabControl = widgetFactory.createFlatFormComposite(actionTabFolder); actionDetailsConfigurationComposite = ActionDetailsConfigurationComposite.create(widgetFactory, detailsTabControl); detailsTabItem.setControl(detailsTabControl); } private void createAdvancedTabItem() { CTabItem advancedTabItem = widgetFactory.createTabItem(actionTabFolder, SWT.NORMAL); advancedTabItem.setText("Advanced"); Composite advancedTabControl = widgetFactory.createFlatFormComposite(actionTabFolder); actionAdvancedConfigurationComposite = ActionAdvancedConfigurationComposite.create(widgetFactory, advancedTabControl); advancedTabItem.setControl(advancedTabControl); } private FormData createActionTabFolderLayoutData() { FormData result = new FormData(); result.left = new FormAttachment(0, 0); result.right = new FormAttachment(100, 0); result.top = new FormAttachment(0, 0); result.bottom = new FormAttachment(100, 0); return result; } }