| package org.eclipse.swt.examples.layoutexample; |
| |
| /* |
| * (c) Copyright IBM Corp. 2000, 2002. |
| * All Rights Reserved |
| */ |
| |
| 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, justify; |
| Combo marginRight, marginLeft, marginTop, marginBottom, spacing; |
| /* The example layout instance */ |
| RowLayout rowLayout; |
| /* TableEditors and related controls*/ |
| TableEditor comboEditor, widthEditor, heightEditor; |
| CCombo combo; |
| Text widthText, heightText; |
| |
| /* Constants */ |
| final int COMBO_COL = 1; |
| final int WIDTH_COL = 2; |
| final int HEIGHT_COL = 3; |
| |
| final int TOTAL_COLS = 4; |
| |
| /** |
| * 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 */ |
| comboEditor = new TableEditor (table); |
| widthEditor = new TableEditor (table); |
| heightEditor = 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); |
| |
| for (int i=0; i<table.getColumnCount (); i++) { |
| Rectangle rect = newItem.getBounds (i); |
| if (rect.contains (pt)) { |
| switch (i) { |
| case COMBO_COL : |
| combo.setFocus (); |
| break; |
| case WIDTH_COL : |
| widthText.setFocus (); |
| break; |
| case HEIGHT_COL : |
| heightText.setFocus (); |
| break; |
| default : |
| resetEditors (); |
| 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"}; |
| item.setText (insert); |
| data.addElement (insert); |
| resetEditors (); |
| } |
| }); |
| } |
| |
| /** |
| * 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 ()); |
| GridData data = new GridData (GridData.FILL_HORIZONTAL); |
| typeGroup.setLayoutData (data); |
| horizontal = new Button (typeGroup, SWT.RADIO); |
| horizontal.setText ("SWT.HORIZONTAL"); |
| horizontal.setSelection(true); |
| horizontal.addSelectionListener (selectionListener); |
| vertical = new Button (typeGroup, SWT.RADIO); |
| vertical.setText ("SWT.VERTICAL"); |
| vertical.addSelectionListener (selectionListener); |
| |
| /* Controls the margins and spacing of the RowLayout */ |
| String [] marginValues = new String [] {"0","3","5","10"}; |
| Group marginGroup = new Group (controlGroup, SWT.NONE); |
| marginGroup.setText (LayoutExample.getResourceString ("Margins_Spacing")); |
| data = new GridData (GridData.FILL_HORIZONTAL); |
| data.verticalSpan = 2; |
| marginGroup.setLayoutData (data); |
| GridLayout layout = new GridLayout (); |
| layout.numColumns = 2; |
| marginGroup.setLayout (layout); |
| new Label (marginGroup, SWT.NONE).setText ("marginRight"); |
| marginRight = new Combo (marginGroup, SWT.NONE); |
| marginRight.setItems (marginValues); |
| marginRight.select (1); |
| marginRight.setLayoutData (new GridData(GridData.FILL_HORIZONTAL)); |
| marginRight.addSelectionListener (selectionListener); |
| marginRight.addTraverseListener (traverseListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginLeft"); |
| marginLeft = new Combo (marginGroup, SWT.NONE); |
| marginLeft.setItems (marginValues); |
| marginLeft.select (1); |
| marginLeft.setLayoutData (new GridData(GridData.FILL_HORIZONTAL)); |
| marginLeft.addSelectionListener (selectionListener); |
| marginLeft.addTraverseListener(traverseListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginTop"); |
| marginTop = new Combo (marginGroup, SWT.NONE); |
| marginTop.setItems (marginValues); |
| marginTop.select (1); |
| marginTop.setLayoutData (new GridData(GridData.FILL_HORIZONTAL)); |
| marginTop.addSelectionListener (selectionListener); |
| marginTop.addTraverseListener(traverseListener); |
| new Label (marginGroup, SWT.NONE).setText ("marginBottom"); |
| marginBottom = new Combo (marginGroup, SWT.NONE); |
| marginBottom.setItems (marginValues); |
| marginBottom.select (1); |
| marginBottom.setLayoutData (new GridData(GridData.FILL_HORIZONTAL)); |
| marginBottom.addSelectionListener (selectionListener); |
| marginBottom.addTraverseListener(traverseListener); |
| new Label (marginGroup, SWT.NONE).setText ("spacing"); |
| spacing = new Combo (marginGroup, SWT.NONE); |
| spacing.setItems (marginValues); |
| spacing.select (1); |
| spacing.setLayoutData (new GridData(GridData.FILL_HORIZONTAL)); |
| spacing.addSelectionListener (selectionListener); |
| spacing.addTraverseListener(traverseListener); |
| |
| /* Controls other parameters of the RowLayout */ |
| Group specGroup = new Group (controlGroup, SWT.NONE); |
| specGroup.setText (LayoutExample.getResourceString ("Properties")); |
| specGroup.setLayoutData (new GridData (GridData.FILL_HORIZONTAL | GridData.VERTICAL_ALIGN_BEGINNING)); |
| specGroup.setLayout (new GridLayout ()); |
| wrap = new Button (specGroup, SWT.CHECK); |
| wrap.setText ("wrap"); |
| wrap.setSelection (true); |
| wrap.addSelectionListener (selectionListener); |
| pack = new Button (specGroup, SWT.CHECK); |
| pack.setText ("pack"); |
| pack.setSelection (true); |
| pack.addSelectionListener (selectionListener); |
| justify = new Button (specGroup, SWT.CHECK); |
| justify.setText ("justify"); |
| justify.addSelectionListener (selectionListener); |
| |
| /* Add common controls */ |
| super.createControlWidgets (); |
| |
| /* Position the sash */ |
| sash.setWeights (new int [] {6,5}); |
| } |
| |
| /** |
| * 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 (); |
| } |
| |
| /** |
| * 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.justify == true) { |
| code.append ("\t\trowLayout.justify = true;\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 data = (RowData) control.getLayoutData (); |
| if (data != null) { |
| if (data.width != -1 || data.height != -1) { |
| code.append ("\t\t"); |
| if (first) { |
| code.append ("RowData "); |
| first = false; |
| } |
| if (data.width == -1) { |
| code.append ("data = new RowData (SWT.DEFAULT, " + data.height + ");\n"); |
| } else if (data.height == -1) { |
| code.append ("data = new RowData (" + data.width + ", SWT.DEFAULT);\n"); |
| } else { |
| code.append ("data = new RowData (" + data.width + ", " + data.height + ");\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" |
| }; |
| } |
| |
| /** |
| * Gets the text for the tab folder item. |
| */ |
| String getTabText () { |
| return "RowLayout"; |
| } |
| |
| /** |
| * 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); |
| /* Make sure user has entered valid data */ |
| 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 [] { |
| String.valueOf (row), combo.getText (), widthText.getText (), heightText.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; |
| 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); |
| children [i].setLayoutData (data); |
| } |
| |
| } |
| |
| /** |
| * Sets the state of the layout. |
| */ |
| void setLayoutState () { |
| /* Set the type of layout */ |
| if (vertical.getSelection ()) { |
| rowLayout.type = SWT.VERTICAL; |
| } else { |
| rowLayout.type = SWT.HORIZONTAL; |
| } |
| |
| /* Set the margins and spacing */ |
| try { |
| rowLayout.marginRight = new Integer (marginRight.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| rowLayout.marginRight = 3; |
| marginRight.select (1); |
| } |
| try { |
| rowLayout.marginLeft = new Integer (marginLeft.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| rowLayout.marginLeft = 3; |
| marginLeft.select (1); |
| } |
| try { |
| rowLayout.marginTop = new Integer (marginTop.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| rowLayout.marginTop = 3; |
| marginTop.select (1); |
| } |
| try { |
| rowLayout.marginBottom = new Integer (marginBottom.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| rowLayout.marginBottom = 3; |
| marginBottom.select (1); |
| } |
| try { |
| rowLayout.spacing = new Integer (spacing.getText ()).intValue (); |
| } catch (NumberFormatException e) { |
| rowLayout.spacing = 3; |
| spacing.select (1); |
| } |
| |
| /* Set the other layout properties */ |
| rowLayout.wrap = wrap.getSelection (); |
| rowLayout.pack = pack.getSelection (); |
| rowLayout.justify = justify.getSelection (); |
| } |
| } |