/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.swt.examples.layoutexample; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CCombo; import org.eclipse.swt.custom.TableEditor; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.layout.FormAttachment; import org.eclipse.swt.layout.FormData; import org.eclipse.swt.layout.FormLayout; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Dialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; class FormLayoutTab extends Tab { /** * <code>AttachDialog</code> is the class that creates a dialog specific for this example. It creates a dialog * with controls to set the values in a FormAttachment. */ public class AttachDialog extends Dialog { int col = 0; String controlInput, positionInput, alignmentInput, offsetInput; String result = ""; public AttachDialog(Shell parent) { this(parent, 0); } public AttachDialog(Shell parent, int style) { super(parent, style); } public String open() { Shell parent = getParent(); final Shell shell = new Shell(parent, SWT.DIALOG_TRIM | SWT.APPLICATION_MODAL); shell.setText(getText()); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.makeColumnsEqualWidth = true; shell.setLayout(layout); /* Find out what was previously set as an attachment */ TableItem newItem = leftEditor.getItem(); result = newItem.getText(col); String oldAttach = result; String oldPos = "0", oldControl = "", oldAlign = "DEFAULT", oldOffset = "0"; boolean isControl = false; if (oldAttach.length() != 0) { char first = oldAttach.charAt(0); if (Character.isLetter(first)) { /* We have a control */ isControl = true; oldControl = oldAttach.substring(0, oldAttach.indexOf(',')); oldAlign = oldAttach.substring(oldAttach.indexOf(':') + 1); oldOffset = oldAttach.substring(oldAttach.indexOf(',') + 1, oldAttach.indexOf(':')); } else { /* We have a position */ oldPos = oldAttach.substring(0, oldAttach.indexOf(',')); oldOffset = oldAttach.substring(oldAttach.indexOf(',') + 1); if (oldOffset.endsWith(")")) oldOffset = oldOffset.substring(0, oldOffset.indexOf(' ')); } } /* Add position field */ final Button posButton = new Button(shell, SWT.RADIO); posButton.setText(LayoutExample.getResourceString("Position")); posButton.setSelection(!isControl); final Combo position = new Combo(shell, SWT.NONE); position.setItems(new String[] { "0", "25", "50", "75", "100" }); position.setText(oldPos); position.setEnabled(!isControl); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; position.setLayoutData(data); /* Add control field */ final Button contButton = new Button(shell, SWT.RADIO); contButton.setText(LayoutExample.getResourceString("Control")); contButton.setSelection(isControl); final Combo control = new Combo(shell, SWT.READ_ONLY); TableItem[] items = table.getItems(); TableItem currentItem = leftEditor.getItem(); for (int i = 0; i < table.getItemCount(); i++) if (items[i].getText(0).length() > 0) if (items[i] != currentItem) control.add(items[i].getText(COMBO_COL) + i); if (oldControl.length() != 0) control.setText(oldControl); else control.select(0); control.setEnabled(isControl); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; control.setLayoutData(data); /* Add alignment field */ new Label(shell, SWT.NONE).setText(LayoutExample.getResourceString("Alignment")); final Combo alignment = new Combo(shell, SWT.NONE); String[] alignmentValues; if (col == LEFT_COL || col == RIGHT_COL) alignmentValues = new String[] { "SWT.LEFT", "SWT.RIGHT", "SWT.CENTER", "SWT.DEFAULT" }; else // col == TOP_COL || col == BOTTOM_COL alignmentValues = new String[] { "SWT.TOP", "SWT.BOTTOM", "SWT.CENTER", "SWT.DEFAULT" }; alignment.setItems(alignmentValues); alignment.setText("SWT." + oldAlign); alignment.setEnabled(isControl); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; alignment.setLayoutData(data); /* Add offset field */ new Label(shell, SWT.NONE).setText(LayoutExample.getResourceString("Offset")); final Text offset = new Text(shell, SWT.SINGLE | SWT.BORDER); offset.setText(oldOffset); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; offset.setLayoutData(data); /* Add listeners for choosing between position and control */ posButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { position.setEnabled(true); control.setEnabled(false); alignment.setEnabled(false); } }); contButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { position.setEnabled(false); control.setEnabled(true); alignment.setEnabled(true); } }); Button clear = new Button(shell, SWT.PUSH); clear.setText(LayoutExample.getResourceString("Clear")); clear.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_END)); clear.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { result = ""; shell.close(); } }); /* OK button sets data into table */ Button ok = new Button(shell, SWT.PUSH); ok.setText(LayoutExample.getResourceString("OK")); ok.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_CENTER)); ok.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { controlInput = control.getText(); alignmentInput = alignment.getText().substring(4); positionInput = position.getText(); if (positionInput.length() == 0) positionInput = "0"; try { Integer.parseInt(positionInput); } catch (NumberFormatException except) { positionInput = "0"; } offsetInput = offset.getText(); if (offsetInput.length() == 0) offsetInput = "0"; try { Integer.parseInt(offsetInput); } catch (NumberFormatException except) { offsetInput = "0"; } if (posButton.getSelection() || controlInput.length() == 0) result = positionInput + "," + offsetInput; else result = controlInput + "," + offsetInput + ":" + alignmentInput; shell.close(); } }); Button cancel = new Button(shell, SWT.PUSH); cancel.setText(LayoutExample.getResourceString("Cancel")); cancel.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); cancel.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { shell.close(); } }); shell.setDefaultButton(ok); shell.pack(); /* Center the dialog */ Point center = parent.getLocation(); center.x = center.x + parent.getBounds().width / 2 - shell.getBounds().width / 2; center.y = center.y + parent.getBounds().height / 2 - shell.getBounds().height / 2; shell.setLocation(center); shell.open(); Display display = shell.getDisplay(); while (!shell.isDisposed()) if (display.readAndDispatch()) display.sleep(); return result; } public void setColumn(int col) { this.col = col; } } final int BOTTOM_COL = 7; CCombo combo; /* Constants */ final int COMBO_COL = 1; /* TableEditors and related controls */ TableEditor comboEditor, widthEditor, heightEditor; /* The example layout instance */ FormLayout formLayout; final int HEIGHT_COL = 3; final int LEFT_COL = 4; Button leftAttach, rightAttach, topAttach, bottomAttach; TableEditor leftEditor, rightEditor, topEditor, bottomEditor; /* Controls for setting layout parameters */ Combo marginHeight, marginWidth; final int MODIFY_COLS = 4; // The number of columns with combo or text editors final int RIGHT_COL = 5; final int TOP_COL = 6; final int TOTAL_COLS = 8; final int WIDTH_COL = 2; Text widthText, heightText; /** * Creates the Tab within a given instance of LayoutExample. */ FormLayoutTab(LayoutExample instance) { super(instance); } /** * Returns the constant for the alignment for an attachment given a string. */ int alignmentConstant(String align) { if (align.equals("LEFT")) return SWT.LEFT; if (align.equals("RIGHT")) return SWT.RIGHT; if (align.equals("TOP")) return SWT.TOP; if (align.equals("BOTTOM")) return SWT.BOTTOM; if (align.equals("CENTER")) return SWT.CENTER; return SWT.DEFAULT; } /** * Returns a string representing the alignment for an attachment given a constant. */ String alignmentString(int align) { switch (align) { case SWT.LEFT: return "LEFT"; case SWT.RIGHT: return "RIGHT"; case SWT.TOP: return "TOP"; case SWT.BOTTOM: return "BOTTOM"; case SWT.CENTER: return "CENTER"; } return "DEFAULT"; } /** * Update the attachment field in case the type of control has changed. */ String checkAttachment(String oldAttach, FormAttachment newAttach) { String controlClass = newAttach.control.getClass().toString(); String controlType = controlClass.substring(controlClass.lastIndexOf('.') + 1); int i = 0; while (i < oldAttach.length() && !Character.isDigit(oldAttach.charAt(i))) i++; String index = oldAttach.substring(i, oldAttach.indexOf(',')); return controlType + index + "," + newAttach.offset + ":" + alignmentString(newAttach.alignment); } /** * Creates the widgets in the "child" group. */ void createChildWidgets() { /* Add common controls */ super.createChildWidgets(); /* Resize the columns */ table.getColumn(LEFT_COL).setWidth(100); table.getColumn(RIGHT_COL).setWidth(100); table.getColumn(TOP_COL).setWidth(100); table.getColumn(BOTTOM_COL).setWidth(100); /* Add TableEditors */ comboEditor = new TableEditor(table); widthEditor = new TableEditor(table); heightEditor = new TableEditor(table); leftEditor = new TableEditor(table); rightEditor = new TableEditor(table); topEditor = new TableEditor(table); bottomEditor = new TableEditor(table); table.addMouseListener(new MouseAdapter() { public void mouseDown(MouseEvent e) { resetEditors(); index = table.getSelectionIndex(); Point pt = new Point(e.x, e.y); newItem = table.getItem(pt); if (newItem == null) return; TableItem oldItem = comboEditor.getItem(); if (newItem == oldItem || newItem != lastSelected) { lastSelected = newItem; return; } table.showSelection(); combo = new CCombo(table, SWT.READ_ONLY); createComboEditor(combo, comboEditor); widthText = new Text(table, SWT.SINGLE); widthText.setText(((String[]) data.elementAt(index))[WIDTH_COL]); createTextEditor(widthText, widthEditor, WIDTH_COL); heightText = new Text(table, SWT.SINGLE); heightText.setText(((String[]) data.elementAt(index))[HEIGHT_COL]); createTextEditor(heightText, heightEditor, HEIGHT_COL); leftAttach = new Button(table, SWT.PUSH); leftAttach.setText(LayoutExample.getResourceString("Attach_Edit")); leftEditor.horizontalAlignment = SWT.LEFT; leftEditor.grabHorizontal = true; leftEditor.minimumWidth = leftAttach.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; leftEditor.setEditor(leftAttach, newItem, LEFT_COL); leftAttach.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Shell shell = tabFolderPage.getShell(); AttachDialog dialog = new AttachDialog(shell); dialog.setText(LayoutExample.getResourceString("Left_Attachment")); dialog.setColumn(LEFT_COL); String attach = dialog.open(); newItem.setText(LEFT_COL, attach); resetEditors(); } }); rightAttach = new Button(table, SWT.PUSH); rightAttach.setText(LayoutExample.getResourceString("Attach_Edit")); rightEditor.horizontalAlignment = SWT.LEFT; rightEditor.grabHorizontal = true; rightEditor.minimumWidth = rightAttach.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; rightEditor.setEditor(rightAttach, newItem, RIGHT_COL); rightAttach.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Shell shell = tabFolderPage.getShell(); AttachDialog dialog = new AttachDialog(shell); dialog.setText(LayoutExample.getResourceString("Right_Attachment")); dialog.setColumn(RIGHT_COL); String attach = dialog.open(); newItem.setText(RIGHT_COL, attach); if (newItem.getText(LEFT_COL).endsWith(")")) newItem.setText(LEFT_COL, ""); resetEditors(); } }); topAttach = new Button(table, SWT.PUSH); topAttach.setText(LayoutExample.getResourceString("Attach_Edit")); topEditor.horizontalAlignment = SWT.LEFT; topEditor.grabHorizontal = true; topEditor.minimumWidth = topAttach.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; topEditor.setEditor(topAttach, newItem, TOP_COL); topAttach.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Shell shell = tabFolderPage.getShell(); AttachDialog dialog = new AttachDialog(shell); dialog.setText(LayoutExample.getResourceString("Top_Attachment")); dialog.setColumn(TOP_COL); String attach = dialog.open(); newItem.setText(TOP_COL, attach); resetEditors(); } }); bottomAttach = new Button(table, SWT.PUSH); bottomAttach.setText(LayoutExample.getResourceString("Attach_Edit")); bottomEditor.horizontalAlignment = SWT.LEFT; bottomEditor.grabHorizontal = true; bottomEditor.minimumWidth = bottomAttach.computeSize(SWT.DEFAULT, SWT.DEFAULT).x; bottomEditor.setEditor(bottomAttach, newItem, BOTTOM_COL); bottomAttach.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Shell shell = tabFolderPage.getShell(); AttachDialog dialog = new AttachDialog(shell); dialog.setText(LayoutExample.getResourceString("Bottom_Attachment")); dialog.setColumn(BOTTOM_COL); String attach = dialog.open(); newItem.setText(BOTTOM_COL, attach); if (newItem.getText(TOP_COL).endsWith(")")) newItem.setText(TOP_COL, ""); resetEditors(); } }); for (int i = 0; i < table.getColumnCount(); i++) { Rectangle rect = newItem.getBounds(i); if (rect.contains(pt)) switch (i) { case 0: resetEditors(); break; case COMBO_COL: combo.setFocus(); break; case WIDTH_COL: widthText.setFocus(); break; case HEIGHT_COL: heightText.setFocus(); break; default: break; } } } }); /* Add listener to add an element to the table */ add.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { TableItem item = new TableItem(table, 0); String[] insert = new String[] { String.valueOf(table.indexOf(item)), "Button", "-1", "-1", "0,0 (" + LayoutExample.getResourceString("Default") + ")", "", "0,0 (" + LayoutExample.getResourceString("Default") + ")", "" }; item.setText(insert); data.addElement(insert); resetEditors(); } }); } /** * Creates the control widgets. */ void createControlWidgets() { /* Controls the margins and spacing of the FormLayout */ String[] marginValues = new String[] { "0", "3", "5", "10" }; Group marginGroup = new Group(controlGroup, SWT.NONE); marginGroup.setText(LayoutExample.getResourceString("Margins")); GridLayout layout = new GridLayout(); layout.numColumns = 2; marginGroup.setLayout(layout); marginGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); new Label(marginGroup, SWT.NONE).setText("marginHeight"); marginHeight = new Combo(marginGroup, SWT.NONE); marginHeight.setItems(marginValues); marginHeight.select(0); marginHeight.addSelectionListener(selectionListener); marginHeight.addTraverseListener(traverseListener); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 60; marginHeight.setLayoutData(data); new Label(marginGroup, SWT.NONE).setText("marginWidth"); marginWidth = new Combo(marginGroup, SWT.NONE); marginWidth.setItems(marginValues); marginWidth.select(0); marginWidth.addSelectionListener(selectionListener); marginWidth.addTraverseListener(traverseListener); data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 60; marginWidth.setLayoutData(data); /* Add common controls */ super.createControlWidgets(); /* Position the sash */ sash.setWeights(new int[] { 6, 4 }); } /** * Creates the example layout. */ void createLayout() { formLayout = new FormLayout(); layoutComposite.setLayout(formLayout); } /** * Disposes the editors without placing their contents into the table. */ void disposeEditors() { comboEditor.setEditor(null, null, -1); combo.dispose(); widthText.dispose(); heightText.dispose(); leftAttach.dispose(); rightAttach.dispose(); topAttach.dispose(); bottomAttach.dispose(); } /** * Generates code for the example layout. */ StringBuffer generateLayoutCode() { StringBuffer code = new StringBuffer(); code.append("\t\tFormLayout formLayout = new FormLayout ();\n"); if (formLayout.marginHeight != 0) code.append("\t\tformLayout.marginHeight = " + formLayout.marginHeight + ";\n"); if (formLayout.marginWidth != 0) code.append("\t\tformLayout.marginWidth = " + formLayout.marginWidth + ";\n"); code.append("\t\tshell.setLayout (formLayout);\n"); boolean first = true; for (int i = 0; i < children.length; i++) { Control control = children[i]; code.append(getChildCode(control, i)); FormData data = (FormData) control.getLayoutData(); if (data != null) { code.append("\t\t"); if (first) { code.append("FormData "); first = false; } code.append("data = new FormData ();\n"); if (data.width != SWT.DEFAULT) code.append("\t\tdata.width = " + data.width + ";\n"); if (data.height != SWT.DEFAULT) code.append("\t\tdata.height = " + data.height + ";\n"); if (data.left != null) if (data.left.control != null) { TableItem item = table.getItem(i); String controlString = item.getText(LEFT_COL); int index = Integer.parseInt( controlString.substring(controlString.indexOf(',') - 1, controlString.indexOf(','))); code.append("\t\tdata.left = new FormAttachment (" + names[index] + ", " + data.left.offset + ", SWT." + alignmentString(data.left.alignment) + ");\n"); } else if (data.right != null || data.left.numerator != 0 || data.left.offset != 0) code.append("\t\tdata.left = new FormAttachment (" + data.left.numerator + ", " + data.left.offset + ");\n"); if (data.right != null) if (data.right.control != null) { TableItem item = table.getItem(i); String controlString = item.getText(RIGHT_COL); int index = Integer.parseInt( controlString.substring(controlString.indexOf(',') - 1, controlString.indexOf(','))); code.append("\t\tdata.right = new FormAttachment (" + names[index] + ", " + data.right.offset + ", SWT." + alignmentString(data.right.alignment) + ");\n"); } else code.append("\t\tdata.right = new FormAttachment (" + data.right.numerator + ", " + data.right.offset + ");\n"); if (data.top != null) if (data.top.control != null) { TableItem item = table.getItem(i); String controlString = item.getText(TOP_COL); int index = Integer.parseInt( controlString.substring(controlString.indexOf(',') - 1, controlString.indexOf(','))); code.append("\t\tdata.top = new FormAttachment (" + names[index] + ", " + data.top.offset + ", SWT." + alignmentString(data.top.alignment) + ");\n"); } else if (data.bottom != null || data.top.numerator != 0 || data.top.offset != 0) code.append("\t\tdata.top = new FormAttachment (" + data.top.numerator + ", " + data.top.offset + ");\n"); if (data.bottom != null) if (data.bottom.control != null) { TableItem item = table.getItem(i); String controlString = item.getText(BOTTOM_COL); int index = Integer.parseInt( controlString.substring(controlString.indexOf(',') - 1, controlString.indexOf(','))); code.append("\t\tdata.bottom = new FormAttachment (" + names[index] + ", " + data.bottom.offset + ", SWT." + alignmentString(data.bottom.alignment) + ");\n"); } else code.append("\t\tdata.bottom = new FormAttachment (" + data.bottom.numerator + ", " + data.bottom.offset + ");\n"); code.append("\t\t" + names[i] + ".setLayoutData (data);\n"); } } return code; } /** * Returns the layout data field names. */ String[] getLayoutDataFieldNames() { return new String[] { "", "Control", "width", "height", "left", "right", "top", "bottom" }; } /** * Gets the text for the tab folder item. */ String getTabText() { return "FormLayout"; } /** * Takes information from TableEditors and stores it. */ void resetEditors() { resetEditors(false); } void resetEditors(boolean tab) { TableItem oldItem = comboEditor.getItem(); if (oldItem != null) { int row = table.indexOf(oldItem); try { Integer.parseInt(widthText.getText()); } catch (NumberFormatException e) { widthText.setText(oldItem.getText(WIDTH_COL)); } try { Integer.parseInt(heightText.getText()); } catch (NumberFormatException e) { heightText.setText(oldItem.getText(HEIGHT_COL)); } String[] insert = new String[] { String.valueOf(row), combo.getText(), widthText.getText(), heightText.getText() }; data.setElementAt(insert, row); for (int i = 0; i < MODIFY_COLS; i++) oldItem.setText(i, ((String[]) data.elementAt(row))[i]); if (!tab) disposeEditors(); } setLayoutState(); refreshLayoutComposite(); setLayoutData(); layoutComposite.layout(true); layoutGroup.layout(true); } /** * Sets an attachment to the edge of a widget using the information in the table. */ FormAttachment setAttachment(String attachment) { String control, align; int position, offset; int comma = attachment.indexOf(','); char first = attachment.charAt(0); if (Character.isLetter(first)) { /* Case where there is a control */ control = attachment.substring(0, comma); int i = 0; while (i < control.length() && !Character.isDigit(control.charAt(i))) i++; String end = control.substring(i); int index = Integer.parseInt(end); Control attachControl = children[index]; int colon = attachment.indexOf(':'); try { offset = Integer.parseInt(attachment.substring(comma + 1, colon)); } catch (NumberFormatException e) { offset = 0; } align = attachment.substring(colon + 1); return new FormAttachment(attachControl, offset, alignmentConstant(align)); } /* Case where there is a position */ try { position = Integer.parseInt(attachment.substring(0, comma)); } catch (NumberFormatException e) { position = 0; } try { offset = Integer.parseInt(attachment.substring(comma + 1)); } catch (NumberFormatException e) { offset = 0; } return new FormAttachment(position, offset); } /** * Sets the layout data for the children of the layout. */ void setLayoutData() { Control[] children = layoutComposite.getChildren(); TableItem[] items = table.getItems(); FormData data; int width, height; String left, right, top, bottom; for (int i = 0; i < children.length; i++) { width = Integer.parseInt(items[i].getText(WIDTH_COL)); height = Integer.parseInt(items[i].getText(HEIGHT_COL)); data = new FormData(); if (width > 0) data.width = width; if (height > 0) data.height = height; left = items[i].getText(LEFT_COL); if (left.length() > 0) { data.left = setAttachment(left); if (data.left.control != null) { String attachment = checkAttachment(left, data.left); items[i].setText(LEFT_COL, attachment); } } right = items[i].getText(RIGHT_COL); if (right.length() > 0) { data.right = setAttachment(right); if (data.right.control != null) { String attachment = checkAttachment(right, data.right); items[i].setText(RIGHT_COL, attachment); } } top = items[i].getText(TOP_COL); if (top.length() > 0) { data.top = setAttachment(top); if (data.top.control != null) { String attachment = checkAttachment(top, data.top); items[i].setText(TOP_COL, attachment); } } bottom = items[i].getText(BOTTOM_COL); if (bottom.length() > 0) { data.bottom = setAttachment(bottom); if (data.bottom.control != null) { String attachment = checkAttachment(bottom, data.bottom); items[i].setText(BOTTOM_COL, attachment); } } children[i].setLayoutData(data); } } /** * Sets the state of the layout. */ void setLayoutState() { /* Set the margins and spacing */ try { formLayout.marginHeight = Integer.parseInt(marginHeight.getText()); } catch (NumberFormatException e) { formLayout.marginHeight = 0; marginHeight.select(0); } try { formLayout.marginWidth = Integer.parseInt(marginWidth.getText()); } catch (NumberFormatException e) { formLayout.marginWidth = 0; marginWidth.select(0); } } }