/*******************************************************************************
* 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.SWT;
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.custom.TableEditor;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.TableItem;
class FillLayoutTab extends Tab {
CCombo combo;
/* TableEditors and related controls */
TableEditor comboEditor;
/* The example layout instance */
FillLayout fillLayout;
/* Controls for setting layout parameters */
Button horizontal, vertical;
/**
* Creates the Tab within a given instance of LayoutExample.
*/
FillLayoutTab(LayoutExample instance) {
super(instance);
}
/**
* Creates the widgets in the "child" group.
*/
void createChildWidgets() {
/* Add common controls */
super.createChildWidgets();
/* Add TableEditors */
comboEditor = new TableEditor(table);
table.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
resetEditors();
index = table.getSelectionIndex();
if (index == -1)
return;
TableItem oldItem = comboEditor.getItem();
newItem = table.getItem(index);
if (newItem == oldItem || newItem != lastSelected) {
lastSelected = newItem;
return;
}
table.showSelection();
combo = new CCombo(table, SWT.READ_ONLY);
createComboEditor(combo, comboEditor);
}
});
/* Add listener to add an element to the table */
add.addSelectionListener(new SelectionAdapter() {
public void widgetSelected(SelectionEvent e) {
TableItem item = new TableItem(table, 0);
item.setText(0, String.valueOf(table.indexOf(item)));
item.setText(1, "Button");
data.addElement("Button");
resetEditors();
}
});
}
/**
* Creates the control widgets.
*/
void createControlWidgets() {
/* Controls the type of FillLayout */
Group typeGroup = new Group(controlGroup, SWT.NONE);
typeGroup.setText(LayoutExample.getResourceString("Type"));
typeGroup.setLayout(new GridLayout());
typeGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
horizontal = new Button(typeGroup, SWT.RADIO);
horizontal.setText("SWT.HORIZONTAL");
horizontal.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
horizontal.setSelection(true);
horizontal.addSelectionListener(selectionListener);
vertical = new Button(typeGroup, SWT.RADIO);
vertical.setText("SWT.VERTICAL");
vertical.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
vertical.addSelectionListener(selectionListener);
/* Add common controls */
super.createControlWidgets();
/* Position the sash */
sash.setWeights(new int[] { 4, 1 });
}
/**
* Creates the example layout.
*/
void createLayout() {
fillLayout = new FillLayout();
layoutComposite.setLayout(fillLayout);
}
/**
* Disposes the editors without placing their contents into the table.
*/
void disposeEditors() {
comboEditor.setEditor(null, null, -1);
combo.dispose();
}
/**
* Generates code for the example layout.
*/
StringBuffer generateLayoutCode() {
StringBuffer code = new StringBuffer();
code.append("\t\tFillLayout fillLayout = new FillLayout ();\n");
if (fillLayout.type == SWT.VERTICAL)
code.append("\t\tfillLayout.type = SWT.VERTICAL;\n");
code.append("\t\tshell.setLayout (fillLayout);\n");
for (int i = 0; i < children.length; i++) {
Control control = children[i];
code.append(getChildCode(control, i));
}
return code;
}
/**
* Returns the layout data field names.
*/
String[] getLayoutDataFieldNames() {
return new String[] { "", "Control" };
}
/**
* Gets the text for the tab folder item.
*/
String getTabText() {
return "FillLayout";
}
/**
* Takes information from TableEditors and stores it.
*/
void resetEditors() {
TableItem oldItem = comboEditor.getItem();
comboEditor.setEditor(null, null, -1);
if (oldItem != null) {
int row = table.indexOf(oldItem);
data.insertElementAt(combo.getText(), row);
oldItem.setText(1, data.elementAt(row).toString());
combo.dispose();
}
setLayoutState();
refreshLayoutComposite();
layoutComposite.layout(true);
layoutGroup.layout(true);
}
/**
* Sets the state of the layout.
*/
void setLayoutState() {
if (vertical.getSelection())
fillLayout.type = SWT.VERTICAL;
else
fillLayout.type = SWT.HORIZONTAL;
}
}