/*******************************************************************************
* 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);
}
}
}