schemaSection.setClient(tree);
final Menu menu = new Menu(Display.getCurrent().getActiveShell(), SWT.POP_UP);
MenuItem itemNewContentTypeDefinition = new MenuItem(menu, SWT.PUSH);
itemNewContentTypeDefinition.setText("Content Type Definition");
itemNewContentTypeDefinition.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
WGContentTypeDefinition cType = _model.createContentTypeDefinition();
_treeViewer.expandToLevel(cType, 1);
_treeViewer.setSelection(new SingleStructuredSelection(cType));
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
MenuItem itemNewAreaDefinition = new MenuItem(menu, SWT.PUSH);
itemNewAreaDefinition.setText("Area Definition");
itemNewAreaDefinition.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
WGAreaDefinition area = _model.createAreaDefinition();
_treeViewer.expandToLevel(area, 1);
_treeViewer.setSelection(new SingleStructuredSelection(area));
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
MenuItem itemNewLanguageDefinition = new MenuItem(menu, SWT.PUSH);
itemNewLanguageDefinition.setText("Language Definition");
itemNewLanguageDefinition.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
WGLanguageDefinition lang = _model.createLanguageDefinition();
_treeViewer.expandToLevel(lang, 1);
_treeViewer.setSelection(new SingleStructuredSelection(lang));
}
public void widgetDefaultSelected(SelectionEvent e) {
}
});
final ToolBar schemaSectionToolBar = new ToolBar(schemaSection, SWT.FLAT);
final ToolItem schemaSectionItemNew = new ToolItem(schemaSectionToolBar, SWT.DROP_DOWN);
schemaSectionItemNew.setText("new");
schemaSectionItemNew.setImage(Plugin.getDefault().getImageRegistry().get(Plugin.IMAGE_SCHEMADEFINITION_ADD));
schemaSectionItemNew.addListener(SWT.Selection, new Listener() {
public void handleEvent(Event event) {
Rectangle rect = schemaSectionItemNew.getBounds();
Point pt = new Point(rect.x, rect.y + rect.height);
pt = schemaSectionToolBar.toDisplay(pt);
menu.setLocation(pt.x, pt.y);
menu.setVisible(true);
}
}
);
final ToolItem schemaSectionItemDelete = new ToolItem(schemaSectionToolBar, SWT.PUSH);
schemaSectionItemDelete.setText("delete");
schemaSectionItemDelete.setImage(Plugin.getDefault().getImageRegistry().get(Plugin.IMAGE_SCHEMADEFINITION_REMOVE));
schemaSectionItemDelete.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
ISelection selection = _treeViewer.getSelection();
if (selection instanceof TreeSelection) {
TreeSelection treeSelection = (TreeSelection) selection;
Object node = treeSelection.getFirstElement();
if (node instanceof WGSchemaDocumentDefinition) {
WGSchemaDocumentDefinition def = (WGSchemaDocumentDefinition)node;
String typeName = "Document Definition";
if (def instanceof WGContentTypeDefinition) {
typeName = "Content Type Definition";
} else if (def instanceof WGAreaDefinition) {
typeName = "Area Definition";
} else if (def instanceof WGLanguageDefinition) {
typeName = "Language Definition";
}
boolean result = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Delete " + typeName, "Delete " + typeName + " '" + def.getName() + "'?");
if (result) {
_model.removeSchemaDocumentDefintion(def);
}
} else if (node instanceof WGContentItemDefinition) {
WGContentItemDefinition def = (WGContentItemDefinition)node;
String typeName = "Item Definition";
boolean result = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Delete " + typeName, "Delete " + typeName + " '" + def.getName() + "'?");
if (result) {
_model.remove(def);
}
} else if (node instanceof WGMetaFieldDefinition) {
WGMetaFieldDefinition def = (WGMetaFieldDefinition)node;
String typeName = "Property";
boolean result = MessageDialog.openConfirm(Display.getCurrent().getActiveShell(), "Delete " + typeName, "Delete " + typeName + " '" + AddContentTypeMetaDefinitionDialog.METADATA_DEFINITION_LABELS.get(def.getName()) + "'?");
if (result) {
_model.remove(def);
}
}
}
}
public void widgetDefaultSelected(SelectionEvent e) {
// TODO Auto-generated method stub
}
});
schemaSection.setTextClient(schemaSectionToolBar);
_treeViewer = new TreeViewer(tree);
_treeViewer.setContentProvider(new WGASchemaDefinitionContentProvider());
_treeViewer.setLabelProvider(new WGASchemaDefinitionLabelProvider());
_treeViewer.setComparator(new ViewerComparator() {
@Override
public int compare(Viewer viewer, Object e1, Object e2) {
if (e1 != null && e2 != null) {
if (e1 instanceof WGMetaFieldDefinition && e2 instanceof WGMetaFieldDefinition) {
WGMetaFieldDefinition def1 = (WGMetaFieldDefinition) e1;
WGMetaFieldDefinition def2 = (WGMetaFieldDefinition) e2;
return AddContentTypeMetaDefinitionDialog.METADATA_DEFINITION_LABELS.get(def1.getName()).compareTo(AddContentTypeMetaDefinitionDialog.METADATA_DEFINITION_LABELS.get(def2.getName()));
} else if (e1 instanceof String && e2 instanceof String) {
if (e1.equals(WGASchemaDefinitionContentProvider.CONTENTTYPE_DEFINITIONS_ROOT)) {
return -1;
} else if (e1.equals(WGASchemaDefinitionContentProvider.AREA_DEFINITIONS_ROOT) && e2.equals(WGASchemaDefinitionContentProvider.LANGUAGE_DEFINITIONS_ROOT)) {
return -1;
} else {
return 1;
}
} else if (e1 instanceof WGMetaFieldDefinition && e2 instanceof WGContentItemDefinition) {
return -1;
} else if (e1 instanceof WGContentItemDefinition && e2 instanceof WGMetaFieldDefinition) {
return 1;
} else if (e1 instanceof WGContentItemDefinition && e2 instanceof WGContentItemDefinition) {
WGContentItemDefinition def1 = (WGContentItemDefinition) e1;
WGContentItemDefinition def2 = (WGContentItemDefinition) e2;
if (def1.getName().startsWith("<") && !def2.getName().startsWith("<")) {
return 1;
} else if (def2.getName().startsWith("<") && !def1.getName().startsWith("<")) {
return -1;
} else {
return def1.getName().compareTo(def2.getName());
}
} else if (e1 instanceof WGContentTypeDefinition && e2 instanceof WGContentTypeDefinition) {
WGContentTypeDefinition def1 = (WGContentTypeDefinition) e1;
WGContentTypeDefinition def2 = (WGContentTypeDefinition) e2;
if (def1.getName().startsWith("<") && !def2.getName().startsWith("<")) {
return 1;
} else if (def2.getName().startsWith("<") && !def1.getName().startsWith("<")) {
return -1;
} else {
return def1.getName().compareTo(def2.getName());
}
} else if (e1 instanceof WGAreaDefinition && e2 instanceof WGAreaDefinition) {
WGAreaDefinition def1 = (WGAreaDefinition) e1;
WGAreaDefinition def2 = (WGAreaDefinition) e2;
if (def1.getName().startsWith("<") && !def2.getName().startsWith("<")) {
return 1;
} else if (def2.getName().startsWith("<") && !def1.getName().startsWith("<")) {
return -1;
} else {
return def1.getName().compareTo(def2.getName());
}
} else if (e1 instanceof WGLanguageDefinition && e2 instanceof WGLanguageDefinition) {
WGLanguageDefinition def1 = (WGLanguageDefinition) e1;
WGLanguageDefinition def2 = (WGLanguageDefinition) e2;
if (def1.getName().startsWith("<") && !def2.getName().startsWith("<")) {
return 1;
} else if (def2.getName().startsWith("<") && !def1.getName().startsWith("<")) {
return -1;
} else {
return def1.getName().compareTo(def2.getName());
}
}
}
return super.compare(viewer, e1, e2);
}
});
_treeViewer.setInput(_model);
_treeViewer.addSelectionChangedListener(this);
// details
_detailSection = toolkit.createSection(form.getBody(), Section.DESCRIPTION | Section.TITLE_BAR | Section.TWISTIE | Section.EXPANDED);
_detailSection.setText("Details");
_detailSection.setLayoutData(new GridData(GridData.FILL_BOTH));
// content type subform
Composite subform = toolkit.createComposite(_detailSection);
GridLayout subformLayout = new GridLayout();
subformLayout.numColumns = 2;
subform.setLayout(subformLayout);
Text txtName = factory.createText(subform, "Name:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
factory.createCheckBox(subform, "Auto creation:", "Enabled", "autoCreate");
Label lblActions = new Label(subform, SWT.NONE);
lblActions.setText("Actions:");
HyperlinkGroup actionGroup = new HyperlinkGroup(Display.getCurrent());
Hyperlink defineMetas = new Hyperlink(subform, SWT.NONE);
defineMetas.setText("add properties...");
defineMetas.addHyperlinkListener(new IHyperlinkListener() {
public void linkExited(HyperlinkEvent e) {
}
public void linkEntered(HyperlinkEvent e) {
}
public void linkActivated(HyperlinkEvent e) {
handleAddMetaDataDefinition();
}
});
actionGroup.add(defineMetas);
Label lbl = new Label(subform, SWT.NONE);
Hyperlink defineItems = new Hyperlink(subform, SWT.NONE);
defineItems.setText("add item definition...");
defineItems.addHyperlinkListener(new IHyperlinkListener() {
public void linkExited(HyperlinkEvent e) {
}
public void linkEntered(HyperlinkEvent e) {
}
public void linkActivated(HyperlinkEvent e) {
handleAddItemDefinition();
}
});
actionGroup.add(defineItems);
WGContentTypeDefinitionModel contentTypeDefinitionModel = new WGContentTypeDefinitionModel();
contentTypeDefinitionModel.addListener(new BeanChangedListener<WGContentTypeDefinition>() {
public void changed(WGContentTypeDefinition bean) {
_treeViewer.refresh(bean, true);
_model.fireModelChanged();
}
});
_subforms.put(SUBFORM_CONTENT_TYPE_DEFINITION, subform);
_subformModels.put(SUBFORM_CONTENT_TYPE_DEFINITION, contentTypeDefinitionModel);
// area subform
subform = toolkit.createComposite(_detailSection);
subformLayout = new GridLayout();
subformLayout.numColumns = 2;
subform.setLayout(subformLayout);
txtName = factory.createText(subform, "Name:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
factory.createCheckBox(subform, "Auto creation:", "Enabled", "autoCreate");
WGAreaDefinitionModel areaDefintionModel = new WGAreaDefinitionModel();
areaDefintionModel.addListener(new BeanChangedListener<WGAreaDefinition>() {
public void changed(WGAreaDefinition bean) {
_treeViewer.refresh(bean, true);
_model.fireModelChanged();
}
});
_subforms.put(SUBFORM_AREA_DEFINITION, subform);
_subformModels.put(SUBFORM_AREA_DEFINITION, areaDefintionModel);
// language subform
subform = toolkit.createComposite(_detailSection);
subformLayout = new GridLayout();
subformLayout.numColumns = 2;
subform.setLayout(subformLayout);
txtName = factory.createText(subform, "Name:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
factory.createCheckBox(subform, "Auto creation:", "Enabled", "autoCreate");
WGLanguageDefinitionModel languageDefinitionModel = new WGLanguageDefinitionModel();
languageDefinitionModel.addListener(new BeanChangedListener<WGLanguageDefinition>() {
public void changed(WGLanguageDefinition bean) {
_treeViewer.refresh(bean, true);
_model.fireModelChanged();
}
});
_subforms.put(SUBFORM_LANGUAGE_DEFINITION, subform);
_subformModels.put(SUBFORM_LANGUAGE_DEFINITION, languageDefinitionModel);
// item subform
subform = toolkit.createComposite(_detailSection);
subformLayout = new GridLayout();
subformLayout.numColumns = 2;
subform.setLayout(subformLayout);
Group parentGroup = createParentInformationGroup(subform);
GridData parentInfoLayoutData = new GridData(GridData.FILL_HORIZONTAL);
parentInfoLayoutData.horizontalSpan = 2;
parentGroup.setLayoutData(parentInfoLayoutData);
txtName = factory.createText(subform, "Itemname:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
Combo itemTypeCombo = factory.createCombo(subform, "Type:", "type");
_chkItemList = factory.createCheckBox(subform, "List:", "Enabled", "list");
_lblInitialValues = new Label(subform, SWT.NONE);
_lblInitialValues.setText("Initial values:");
_lblInitialValues.setLayoutData(new GridData(SWT.NONE, SWT.BEGINNING, false, false));
_initialValuesSection = toolkit.createSection(subform, Section.EXPANDED | Section.NO_TITLE);
GridData initialValuesSectionLayoutData = new GridData(GridData.FILL_BOTH);
_initialValuesSection.setLayoutData(initialValuesSectionLayoutData);
// item subform - text values
_initialTextValuesSectionClient = toolkit.createComposite(_initialValuesSection);
_initialTextValuesSectionClient.setLayout(new FillLayout());
_tblItemTextValues = new EditableTableControl<PrimitiveTypeBean<String>>(_initialTextValuesSectionClient, SWT.NONE);
_itemTextValuesModel = new PrimitiveTypeBeanListTableModel<String>(true);
_itemTextValuesModel.addListener(new BeanListTableModelListener() {
public void update(Object bean) {
_model.fireModelChanged();
}
public void remove(Object bean) {
_model.fireModelChanged();
}
public void refresh(List beans) {
}
public void add(Object bean) {
_model.fireModelChanged();
}
});
_tblItemTextValues.init(new String[] {"#", "Value"}, _itemTextValuesModel);
CellEditor[] cellEditors = new CellEditor[2];
cellEditors[0] = null;
cellEditors[1] = new TextCellEditor(_tblItemTextValues.getTable());
_tblItemTextValues.getTableViewer().setCellEditors(cellEditors);
_tblItemTextValues.getButton(EditableTableControl.BUTTON_ADD).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
WGContentItemDefinitionModel model = (WGContentItemDefinitionModel)_subformModels.get(SUBFORM_CONTENT_ITEM_DEFINITION);
if (_itemTextValuesModel.getBeans().size() > 0) {
_chkItemList.setSelection(true);
model.setList(true);
}
handleAdd(_tblItemTextValues, "");
}
});
_tblItemTextValues.getButton(EditableTableControl.BUTTON_REMOVE).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
handleRemove(_tblItemTextValues);
}
});
// item subform - boolean values
_initialBooleanValuesSectionClient = toolkit.createComposite(_initialValuesSection);
_initialBooleanValuesSectionClient.setLayout(new FillLayout());
_tblItemBooleanValues = new EditableTableControl<PrimitiveTypeBean<Boolean>>(_initialBooleanValuesSectionClient, SWT.NONE);
_itemBooleanValuesModel = new PrimitiveTypeBeanListTableModel<Boolean>(true);
_itemBooleanValuesModel.addListener(new BeanListTableModelListener() {
public void update(Object bean) {
_model.fireModelChanged();
}
public void remove(Object bean) {
_model.fireModelChanged();
}
public void refresh(List beans) {
}
public void add(Object bean) {
_model.fireModelChanged();
}
});
_tblItemBooleanValues.init(new String[] {"#", "Value"}, _itemBooleanValuesModel);
cellEditors = new CellEditor[2];
cellEditors[0] = null;
cellEditors[1] = new CheckboxCellEditor(_tblItemBooleanValues.getTable());
_tblItemBooleanValues.getTableViewer().setCellEditors(cellEditors);
_tblItemBooleanValues.getButton(EditableTableControl.BUTTON_ADD).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
WGContentItemDefinitionModel model = (WGContentItemDefinitionModel)_subformModels.get(SUBFORM_CONTENT_ITEM_DEFINITION);
if (_itemBooleanValuesModel.getBeans().size() > 0) {
_chkItemList.setSelection(true);
model.setList(true);
}
handleAdd(_tblItemBooleanValues, false);
}
});
_tblItemBooleanValues.getButton(EditableTableControl.BUTTON_REMOVE).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
handleRemove(_tblItemBooleanValues);
}
});
// item subform - number values
_initialNumberValuesSectionClient = toolkit.createComposite(_initialValuesSection);
_initialNumberValuesSectionClient.setLayout(new FillLayout());
_tblItemNumberValues = new EditableTableControl<PrimitiveTypeBean<Number>>(_initialNumberValuesSectionClient, SWT.NONE);
_itemNumberValuesModel = new PrimitiveTypeBeanListTableModel<Number>(true);
_itemNumberValuesModel.addListener(new BeanListTableModelListener() {
public void update(Object bean) {
_model.fireModelChanged();
}
public void remove(Object bean) {
_model.fireModelChanged();
}
public void refresh(List beans) {
}
public void add(Object bean) {
_model.fireModelChanged();
}
});
_tblItemNumberValues.init(new String[] {"#", "Value"}, _itemNumberValuesModel);
cellEditors = new CellEditor[2];
cellEditors[0] = null;
cellEditors[1] = new DoubleValueCellEditor(_tblItemNumberValues.getTable());
_tblItemNumberValues.getTableViewer().setCellEditors(cellEditors);
_tblItemNumberValues.getButton(EditableTableControl.BUTTON_ADD).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
WGContentItemDefinitionModel model = (WGContentItemDefinitionModel)_subformModels.get(SUBFORM_CONTENT_ITEM_DEFINITION);
if (_itemNumberValuesModel.getBeans().size() > 0) {
_chkItemList.setSelection(true);
model.setList(true);
}
handleAdd(_tblItemNumberValues, 0);
}
});
_tblItemNumberValues.getButton(EditableTableControl.BUTTON_REMOVE).addSelectionListener(new org.eclipse.swt.events.SelectionAdapter() {
public void widgetSelected(org.eclipse.swt.events.SelectionEvent e) {
handleRemove(_tblItemNumberValues);
}
});
itemTypeCombo.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent e) {
WGContentItemDefinitionModel model = (WGContentItemDefinitionModel)_subformModels.get(SUBFORM_CONTENT_ITEM_DEFINITION);
WGContentItemDefinition.Type type = model.getType().getKey();
if (type.equals(WGContentItemDefinition.Type.TEXT)) {
_initialValuesSection.setVisible(true);
_lblInitialValues.setVisible(true);
_itemTextValuesModel.bind(model.getInitialValues());
_initialTextValuesSectionClient.setVisible(true);
_initialBooleanValuesSectionClient.setVisible(false);
_initialNumberValuesSectionClient.setVisible(false);
_initialValuesSection.setClient(_initialTextValuesSectionClient);
_initialValuesSection.layout();
} else if (type.equals(WGContentItemDefinition.Type.BOOLEAN)) {
_initialValuesSection.setVisible(true);
_lblInitialValues.setVisible(true);
_itemBooleanValuesModel.bind(model.getInitialValues());
_initialBooleanValuesSectionClient.setVisible(true);
_initialTextValuesSectionClient.setVisible(false);
_initialNumberValuesSectionClient.setVisible(false);
_initialValuesSection.setClient(_initialBooleanValuesSectionClient);
_initialValuesSection.layout();
} else if (type.equals(WGContentItemDefinition.Type.NUMBER)) {
_initialValuesSection.setVisible(true);
_lblInitialValues.setVisible(true);
_itemNumberValuesModel.bind(model.getInitialValues());
_initialNumberValuesSectionClient.setVisible(true);
_initialBooleanValuesSectionClient.setVisible(false);
_initialTextValuesSectionClient.setVisible(false);
_initialValuesSection.setClient(_initialNumberValuesSectionClient);
_initialValuesSection.layout();
} else {
_initialValuesSection.setVisible(false);
_lblInitialValues.setVisible(false);
}
}
});
WGContentItemDefinitionModel contentItemDefinitionModel = new WGContentItemDefinitionModel(_model);
contentItemDefinitionModel.addListener(new BeanChangedListener<WGContentItemDefinition>() {
public void changed(WGContentItemDefinition bean) {
_treeViewer.refresh(bean, true);
_model.fireModelChanged();
}
});
_subforms.put(SUBFORM_CONTENT_ITEM_DEFINITION, subform);
_subformModels.put(SUBFORM_CONTENT_ITEM_DEFINITION, contentItemDefinitionModel);
// content type meta data subforms
// subform for description
subform = toolkit.createComposite(_detailSection);
subformLayout = new GridLayout();
subformLayout.numColumns = 2;
subform.setLayout(subformLayout);
parentGroup = createParentInformationGroup(subform);
parentInfoLayoutData = new GridData(GridData.FILL_HORIZONTAL);
parentInfoLayoutData.horizontalSpan = 2;
parentGroup.setLayoutData(parentInfoLayoutData);
txtName = factory.createText(subform, "Property:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
txtName.setEditable(false);
Text txtValue = factory.createTextArea(subform, "Description", "description");
GridData txtValueLayoutData = new GridData(GridData.FILL_BOTH);
txtValueLayoutData.minimumHeight = 200;
txtValue.setLayoutData(txtValueLayoutData);
WGDescriptionMetaFieldDefinitionModel descriptionMetaFieldDefinitionModel = new WGDescriptionMetaFieldDefinitionModel(_model);
descriptionMetaFieldDefinitionModel.addListener(new BeanChangedListener<WGMetaFieldDefinition>() {
public void changed(WGMetaFieldDefinition bean) {
_treeViewer.refresh(bean, true);
_model.fireModelChanged();
}
});
_subforms.put(SUBFORM_META_DESCRIPTION, subform);
_subformModels.put(SUBFORM_META_DESCRIPTION, descriptionMetaFieldDefinitionModel);
// subform for event scripts
subform = toolkit.createComposite(_detailSection);
subformLayout = new GridLayout();
subformLayout.numColumns = 2;
subform.setLayout(subformLayout);
parentGroup = createParentInformationGroup(subform);
parentInfoLayoutData = new GridData(GridData.FILL_HORIZONTAL);
parentInfoLayoutData.horizontalSpan = 2;
parentGroup.setLayoutData(parentInfoLayoutData);
txtName = factory.createText(subform, "Property:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
txtName.setEditable(false);
txtValue = factory.createTextArea(subform, "Scriptcode:", "code");
txtValueLayoutData = new GridData(GridData.FILL_BOTH);
txtValueLayoutData.minimumHeight = 200;
txtValue.setLayoutData(txtValueLayoutData);
WGEventScriptMetaFieldDefinitionModel eventScriptMetaFieldDefinitionModel = new WGEventScriptMetaFieldDefinitionModel(_model);
eventScriptMetaFieldDefinitionModel.addListener(new BeanChangedListener<WGMetaFieldDefinition>() {
public void changed(WGMetaFieldDefinition bean) {
_treeViewer.refresh(bean, true);
_model.fireModelChanged();
}
});
_subforms.put(SUBFORM_META_EVENTSCRIPT, subform);
_subformModels.put(SUBFORM_META_EVENTSCRIPT, eventScriptMetaFieldDefinitionModel);
// subform for layouts
subform = toolkit.createComposite(_detailSection);
subformLayout = new GridLayout();
subformLayout.numColumns = 3;
subform.setLayout(subformLayout);
parentGroup = createParentInformationGroup(subform);
parentInfoLayoutData = new GridData(GridData.FILL_HORIZONTAL);
parentInfoLayoutData.horizontalSpan = 3;
parentGroup.setLayoutData(parentInfoLayoutData);
txtName = factory.createText(subform, "Property:", "name");
txtName.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
txtName.setEditable(false);
factory.addFiller(subform);
txtValue = factory.createText(subform, "Module:", "layout");
txtValue.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
final Text fTxtLayout = txtValue;
Button btnBrowseLayout = new Button(subform, SWT.PUSH);
btnBrowseLayout.setText("browse ...");
btnBrowseLayout.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
handleBrowserLayout(fTxtLayout);
}