| /******************************************************************************* |
| * Copyright (c) 2000, 2003 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.*; |
| import org.eclipse.swt.graphics.*; |
| import org.eclipse.swt.widgets.*; |
| import org.eclipse.swt.layout.*; |
| import org.eclipse.swt.events.*; |
| import org.eclipse.swt.custom.*; |
| |
| class RowLayoutTab extends Tab { |
| /* Controls for setting layout parameters */ |
| Button horizontal, vertical; |
| Button wrap, pack, fill, justify, center; |
| Spinner marginWidth, marginHeight, marginLeft, marginRight, marginTop, marginBottom, spacing; |
| /* The example layout instance */ |
| RowLayout rowLayout; |
| /* TableEditors and related controls*/ |
| TableEditor comboEditor, widthEditor, heightEditor, nameEditor, excludeEditor; |
| CCombo combo, exclude; |
| Text nameText, widthText, heightText; |
| |
| /* Constants */ |
| final int NAME_COL = 0; |
| final int COMBO_COL = 1; |
| final int WIDTH_COL = 2; |
| final int HEIGHT_COL = 3; |
| final int EXCLUDE_COL = 4; |
| final int TOTAL_COLS = 5; |
| |
| /** |
| * Creates the Tab within a given instance of LayoutExample. |
| */ |
| RowLayoutTab(LayoutExample instance) { |
| super(instance); |
| } |
| |
| /** |
| * Creates the widgets in the "child" group. |
| */ |
| void createChildWidgets () { |
| /* Add common controls */ |
| super.createChildWidgets (); |
| |
| /* Add TableEditors */ |
| nameEditor = new TableEditor (table); |
| comboEditor = new TableEditor (table); |
| widthEditor = new TableEditor (table); |
| heightEditor = new TableEditor (table); |
| excludeEditor = 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); |
| |
| nameText = new Text(table, SWT.SINGLE); |
| nameText.setText(((String[])data.elementAt(index))[NAME_COL]); |
| createTextEditor(nameText, nameEditor, NAME_COL); |
| |
| 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); |
| |
| String [] boolValues = new String [] {"false", "true"}; |
| exclude = new CCombo (table, SWT.NONE); |
| exclude.setItems (boolValues); |
| exclude.setText (newItem.getText (EXCLUDE_COL)); |
| excludeEditor.horizontalAlignment = SWT.LEFT; |
| excludeEditor.grabHorizontal = true; |
| excludeEditor.minimumWidth = 50; |
| excludeEditor.setEditor (exclude, newItem, EXCLUDE_COL); |
| exclude.addTraverseListener (traverseListener); |
| |
| for (int i=0; i<table.getColumnCount (); i++) { |
| Rectangle rect = newItem.getBounds (i); |
| if (rect.contains (pt)) { |
| switch (i) { |
| case NAME_COL : |
| nameText.setFocus (); |
| case COMBO_COL : |
| combo.setFocus (); |
| break; |
| case WIDTH_COL : |
| widthText.setFocus (); |
| break; |
| case HEIGHT_COL : |
| heightText.setFocus (); |
| break; |
| case EXCLUDE_COL : |
| exclude.setFocus (); |
| break; |
| default : |
| resetEditors (); |
| break; |
| } |
| } |
| } |
| } |
| }); |
| } |
| |
| /** |
| * Creates the control widgets. |
| */ |
| void createControlWidgets () { |
| /* Controls the type of RowLayout */ |
| Group typeGroup = new Group (controlGroup, SWT.NONE); |
| typeGroup.setText (LayoutExample.getResourceString ("Type")); |
| typeGroup.setLayout (new GridLayout ()); |
| typeGroup.setLayoutData(new GridData (SWT.FILL, SWT.FILL, false, false)); |
| horizontal = new Button (typeGroup, SWT.RADIO); |
| horizontal.setText ("SWT.HORIZONTAL"); |
| horizontal.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); |
| horizontal.setSelection(true); |
| horizontal.addSelectionListener (selectionListener); |
| vertical = new Button (typeGroup, SWT.RADIO); |
| vertical.setText ("SWT.VERTICAL"); |
| vertical.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); |
| vertical.addSelectionListener (selectionListener); |
| |
| /* Controls the margins and spacing of the RowLayout */ |
| Group marginGroup = new Group (controlGroup, SWT.NONE); |
| marginGroup.setText (LayoutExample.getResourceString ("Margins_Spacing")); |
| marginGroup.setLayout(new GridLayout(2, false)); |
| marginGroup.setLayoutData(new GridData (SWT.FILL, SWT.FILL, false, false, 1, 2)); |
| new Label(marginGroup, SWT.NONE).setText("marginWidth"); |
| marginWidth = new Spinner(marginGroup, SWT.BORDER); |
| marginWidth.setSelection(0); |
| marginWidth.addSelectionListener(selectionListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginHeight"); |
| marginHeight = new Spinner(marginGroup, SWT.BORDER); |
| marginHeight.setSelection(0); |
| marginHeight.setLayoutData (new GridData(SWT.BEGINNING, SWT.CENTER, false, false)); |
| marginHeight.addSelectionListener (selectionListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginLeft"); |
| marginLeft = new Spinner(marginGroup, SWT.BORDER); |
| marginLeft.setSelection(3); |
| marginLeft.addSelectionListener (selectionListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginRight"); |
| marginRight = new Spinner(marginGroup, SWT.BORDER); |
| marginRight.setSelection(3); |
| marginRight.addSelectionListener(selectionListener); |
| new Label(marginGroup, SWT.NONE).setText("marginTop"); |
| marginTop = new Spinner(marginGroup, SWT.BORDER); |
| marginTop.setSelection(3); |
| marginTop.addSelectionListener(selectionListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginBottom"); |
| marginBottom = new Spinner(marginGroup, SWT.BORDER); |
| marginBottom.setSelection(3); |
| marginBottom.addSelectionListener (selectionListener); |
| new Label (marginGroup, SWT.NONE).setText ("spacing"); |
| spacing = new Spinner(marginGroup, SWT.BORDER); |
| spacing.setSelection(3); |
| spacing.addSelectionListener (selectionListener); |
| |
| /* Controls other parameters of the RowLayout */ |
| Group specGroup = new Group (controlGroup, SWT.NONE); |
| specGroup.setText (LayoutExample.getResourceString ("Properties")); |
| specGroup.setLayoutData (new GridData (SWT.FILL, SWT.FILL, false, false)); |
| specGroup.setLayout (new GridLayout ()); |
| wrap = new Button (specGroup, SWT.CHECK); |
| wrap.setText ("Wrap"); |
| wrap.setSelection (true); |
| wrap.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); |
| wrap.addSelectionListener (selectionListener); |
| pack = new Button (specGroup, SWT.CHECK); |
| pack.setText ("Pack"); |
| pack.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); |
| pack.setSelection (true); |
| pack.addSelectionListener(selectionListener); |
| fill = new Button(specGroup, SWT.CHECK); |
| fill.setText("Fill"); |
| fill.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); |
| fill.addSelectionListener(selectionListener); |
| justify = new Button (specGroup, SWT.CHECK); |
| justify.setText ("Justify"); |
| justify.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); |
| justify.addSelectionListener (selectionListener); |
| center = new Button (specGroup, SWT.CHECK); |
| center.setText ("Center"); |
| center.setLayoutData (new GridData (SWT.FILL, SWT.CENTER, true, false)); |
| center.addSelectionListener (selectionListener); |
| |
| /* Add common controls */ |
| super.createControlWidgets (); |
| } |
| |
| /** |
| * Creates the example layout. |
| */ |
| void createLayout () { |
| rowLayout = new RowLayout (); |
| layoutComposite.setLayout (rowLayout); |
| } |
| |
| /** |
| * Disposes the editors without placing their contents |
| * into the table. |
| */ |
| void disposeEditors () { |
| comboEditor.setEditor (null, null, -1); |
| combo.dispose (); |
| widthText.dispose (); |
| heightText.dispose (); |
| nameText.dispose (); |
| exclude.dispose (); |
| } |
| |
| /** |
| * Generates code for the example layout. |
| */ |
| StringBuffer generateLayoutCode () { |
| StringBuffer code = new StringBuffer (); |
| code.append ("\t\tRowLayout rowLayout = new RowLayout ();\n"); |
| if (rowLayout.type == SWT.VERTICAL) { |
| code.append ("\t\trowLayout.type = SWT.VERTICAL;\n"); |
| } |
| if (rowLayout.wrap == false) { |
| code.append ("\t\trowLayout.wrap = false;\n"); |
| } |
| if (rowLayout.pack == false) { |
| code.append ("\t\trowLayout.pack = false;\n"); |
| } |
| if (rowLayout.fill == true) { |
| code.append("\t\trowLayout.fill = true;\n"); |
| } |
| if (rowLayout.justify == true) { |
| code.append ("\t\trowLayout.justify = true;\n"); |
| } |
| if (rowLayout.center == true) { |
| code.append ("\t\trowLayout.center = true;\n"); |
| } |
| if (rowLayout.marginWidth != 0) { |
| code.append("\t\trowLayout.marginWidth = " + rowLayout.marginWidth + ";\n"); |
| } |
| if (rowLayout.marginHeight != 0) { |
| code.append("\t\trowLayout.marginHeight = " + rowLayout.marginHeight + ";\n"); |
| } |
| if (rowLayout.marginLeft != 3) { |
| code.append ("\t\trowLayout.marginLeft = " + rowLayout.marginLeft + ";\n"); |
| } |
| if (rowLayout.marginRight != 3) { |
| code.append ("\t\trowLayout.marginRight = " + rowLayout.marginRight + ";\n"); |
| } |
| if (rowLayout.marginTop != 3) { |
| code.append ("\t\trowLayout.marginTop = " + rowLayout.marginTop + ";\n"); |
| } |
| if (rowLayout.marginBottom != 3) { |
| code.append ("\t\trowLayout.marginBottom = " + rowLayout.marginBottom + ";\n"); |
| } |
| if (rowLayout.spacing != 3) { |
| code.append ("\t\trowLayout.spacing = " + rowLayout.spacing + ";\n"); |
| } |
| code.append ("\t\tshell.setLayout (rowLayout);\n"); |
| |
| boolean first = true; |
| for (int i = 0; i < children.length; i++) { |
| Control control = children [i]; |
| code.append (getChildCode (control,i)); |
| RowData rowData = (RowData) control.getLayoutData (); |
| if (rowData != null) { |
| if (rowData.width != -1 || rowData.height != -1 || rowData.exclude) { |
| code.append ("\t\t"); |
| if (first) { |
| code.append ("RowData "); |
| first = false; |
| } |
| if (rowData.width == -1 && rowData.height == -1) { |
| code.append ("rowData = new RowData ();\n"); |
| } else if (rowData.width == -1) { |
| code.append ("rowData = new RowData (SWT.DEFAULT, " + rowData.height + ");\n"); |
| } else if (rowData.height == -1) { |
| code.append ("rowData = new RowData (" + rowData.width + ", SWT.DEFAULT);\n"); |
| } else { |
| code.append ("rowData = new RowData (" + rowData.width + ", " + rowData.height + ");\n"); |
| } |
| if (rowData.exclude) { |
| code.append ("\t\trowData.exclude = true;\n"); |
| } |
| code.append ("\t\t" + names [i] + ".setLayoutData (rowData);\n"); |
| } |
| } |
| } |
| return code; |
| } |
| |
| /** |
| * Returns the string to insert when a new child control is added to the table. |
| */ |
| String[] getInsertString (String name, String controlType) { |
| return new String [] {name, controlType, "-1", "-1", "false"}; |
| } |
| |
| /** |
| * Returns the layout data field names. |
| */ |
| String [] getLayoutDataFieldNames() { |
| return new String [] { |
| "Control Name", |
| "Control Type", |
| "width", |
| "height", |
| "exclude" |
| }; |
| } |
| |
| /** |
| * Gets the text for the tab folder item. |
| */ |
| String getTabText () { |
| return "RowLayout"; |
| } |
| |
| /** |
| * Takes information from TableEditors and stores it. |
| */ |
| void resetEditors (boolean tab) { |
| TableItem oldItem = comboEditor.getItem (); |
| if (oldItem != null) { |
| int row = table.indexOf (oldItem); |
| /* Make sure user has entered valid data */ |
| try { |
| new String(nameText.getText()); |
| } catch (NumberFormatException e) { |
| nameText.setText(oldItem.getText(NAME_COL)); |
| } |
| try { |
| new Integer (widthText.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| widthText.setText (oldItem.getText (WIDTH_COL)); |
| } |
| try { |
| new Integer (heightText.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| heightText.setText (oldItem.getText (HEIGHT_COL)); |
| } |
| String [] insert = new String [] { |
| nameText.getText(), combo.getText (), widthText.getText (), heightText.getText (), exclude.getText ()}; |
| data.setElementAt (insert, row); |
| for (int i = 0 ; i < TOTAL_COLS; i++) { |
| oldItem.setText (i, ((String [])data.elementAt (row)) [i]); |
| } |
| if (!tab) disposeEditors (); |
| } |
| setLayoutState (); |
| refreshLayoutComposite (); |
| setLayoutData (); |
| layoutComposite.layout (true); |
| layoutGroup.layout (true); |
| } |
| |
| /** |
| * Sets the layout data for the children of the layout. |
| */ |
| void setLayoutData () { |
| Control [] children = layoutComposite.getChildren (); |
| TableItem [] items = table.getItems (); |
| RowData data; |
| int width, height; |
| String exclude; |
| for (int i = 0; i < children.length; i++) { |
| width = new Integer (items [i].getText (WIDTH_COL)).intValue (); |
| height = new Integer (items [i].getText (HEIGHT_COL)).intValue (); |
| data = new RowData (width, height); |
| exclude = items [i].getText (EXCLUDE_COL); |
| data.exclude = exclude.equals ("true"); |
| children [i].setLayoutData (data); |
| } |
| |
| } |
| |
| /** |
| * Sets the state of the layout. |
| */ |
| void setLayoutState () { |
| /* Set the type of layout */ |
| rowLayout.type = vertical.getSelection () ? SWT.VERTICAL : SWT.HORIZONTAL; |
| |
| /* Set the margins and spacing */ |
| rowLayout.marginWidth = marginWidth.getSelection (); |
| rowLayout.marginHeight = marginHeight.getSelection (); |
| rowLayout.marginLeft = marginLeft.getSelection (); |
| rowLayout.marginRight = marginRight.getSelection (); |
| rowLayout.marginTop = marginTop.getSelection (); |
| rowLayout.marginBottom = marginBottom.getSelection (); |
| rowLayout.spacing = spacing.getSelection (); |
| |
| /* Set the other layout properties */ |
| rowLayout.wrap = wrap.getSelection (); |
| rowLayout.pack = pack.getSelection (); |
| rowLayout.fill = fill.getSelection (); |
| rowLayout.justify = justify.getSelection (); |
| rowLayout.center = center.getSelection (); |
| } |
| } |