1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-04-29 19:45:01 +02:00

Initial commit of CDT code from QNX

This commit is contained in:
Sebastien Marineau 2002-06-26 21:17:46 +00:00
parent 58eca28a21
commit 3170ee99a0
6 changed files with 1022 additions and 0 deletions

View file

@ -0,0 +1,545 @@
package org.eclipse.cdt.utils.ui.controls;
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*/
import org.eclipse.swt.custom.CCombo;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.Color;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.widgets.List;
import org.eclipse.swt.widgets.TableColumn;
import org.eclipse.swt.layout.*;
import org.eclipse.jface.viewers.CellEditor;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ColumnWeightData;
import org.eclipse.jface.viewers.TableLayout;
import org.eclipse.jface.viewers.TableViewer;
import org.eclipse.ui.PlatformUI;
import org.eclipse.swt.SWT;
import java.util.StringTokenizer;
public class ControlFactory {
private static HyperlinkHandler defaultHyperlinkHandler = new HyperlinkHandler();
public static void dispose() {
defaultHyperlinkHandler.dispose();
}
public static Control setParentColors(Control control) {
Composite parent = control.getParent();
control.setBackground(parent.getBackground());
control.setForeground(parent.getForeground());
return control;
}
/**
* Creates composite control and sets the default layout data.
*
* @param parent the parent of the new composite
* @param numColumns the number of columns for the new composite
* @return the newly-created coposite
*/
public static Composite createComposite(Composite parent, int numColumns) {
Composite composite = new Composite(parent, SWT.NULL);
//GridLayout
GridLayout layout = new GridLayout();
layout.numColumns = numColumns;
layout.makeColumnsEqualWidth = true;
composite.setLayout(layout);
composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
return composite;
}
/**
* Creates thick separator.
*
* @param parent the parent of the new composite
* @param color the separator color
* @return preferedThickness - the prefered thickness of separator (or 2 if SWT.DEFAULT)
*/
public static Composite createCompositeSeparator(Composite parent, Color color, int preferedHeight) {
Composite separator = createComposite(parent, 1);
GridData gd = (GridData)separator.getLayoutData();
gd.heightHint = ((SWT.DEFAULT == preferedHeight) ? 2 : preferedHeight);
separator.setLayoutData(gd);
separator.setBackground(color);
return separator;
}
/**
* Creates thick separator.
*
* @param parent the parent of the new composite
* @param color the separator color
* @return preferedThickness - the prefered thickness of separator (or 2 if SWT.DEFAULT)
*/
public static Label createSeparator(Composite parent, int nCols) {
Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = nCols;
separator.setLayoutData(data);
return separator;
}
/**
* Utility method that creates a label instance
* and sets the default layout data.
*
* @param parent the parent for the new label
* @param text the text for the new label
* @return the new label
*/
public static Label createLabel(Composite parent, String text) {
Label label = new Label(parent, SWT.LEFT );
label.setText(text);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalSpan = 1;
label.setLayoutData(data);
return label;
}
/**
* Utility method that creates a label instance
* and sets the default layout data and sets the
* font attributes to be SWT.BOLD.
*
* @param parent the parent for the new label
* @param text the text for the new label
* @return the new label
*/
public static Label createBoldLabel(Composite parent, String text) {
Label label = createLabel( parent, text );
FontData[] fd = label.getFont().getFontData();
fd[0].setStyle( SWT.BOLD );
Font font = new Font( Display.getCurrent(), fd[0] );
label.setFont( font );
return label;
}
/**
* Creates an new Wrapped label
*
*
* @param parent parent object
* @param text the label text
* @param widthHint - recommended widget width
* @param heightHint - recommended widget height
* @return the new label
*/
public static Text createWrappedLabel(Composite parent, String text, int widthHint, int heightHint) {
Text wlabel = new Text(parent, SWT.WRAP | SWT.MULTI | SWT.READ_ONLY);
wlabel.setText(text);
GridData data = new GridData(GridData.GRAB_VERTICAL | GridData.FILL_BOTH);
data.heightHint = heightHint;
data.widthHint = widthHint;
wlabel.setLayoutData(data);
wlabel.setBackground(parent.getBackground());
wlabel.setForeground(parent.getForeground());
return wlabel;
}
/**
* Utility method that creates a HyperLinkLabel instance
* and sets the default layout data.
*
* @param parent the parent for the new label
* @param text the text for the new label
* @param TypedListener click event listener
* @return the new label
*/
public static Label createHyperlinkLabel(Composite parent, String text, IHyperlinkListener listener,
HyperlinkHandler hyperlinkHandler) {
Label label = createLabel(parent, text);
turnIntoHyperlink(label, listener,
(null == hyperlinkHandler) ? defaultHyperlinkHandler : hyperlinkHandler);
return label;
}
public static void turnIntoHyperlink(Control control, IHyperlinkListener listener,
HyperlinkHandler hyperlinkHandler) {
hyperlinkHandler.registerHyperlink(control, listener);
}
/**
* Creates an new checkbox instance and sets the default
* layout data.
*
* @param group the composite in which to create the checkbox
* @param label the string to set into the checkbox
* @return the new checkbox
*/
public static Button createCheckBox(Composite group, String label) {
Button button = new Button(group, SWT.CHECK | SWT.LEFT);
button.setText(label);
GridData data = new GridData();
button.setLayoutData(data);
button.setBackground(group.getBackground());
button.setForeground(group.getForeground());
return button;
}
/**
* Creates an new checkbox instance and sets the default
* layout data.
*
* @param group the composite in which to create the checkbox
* @param label the string to set into the checkbox
* @return the new checkbox
*/
public static Button createCheckBoxEx(Composite group, String label, int style) {
Button button = new Button(group, SWT.CHECK | style);
button.setText(label);
GridData data = new GridData();
button.setLayoutData(data);
button.setBackground(group.getBackground());
button.setForeground(group.getForeground());
return button;
}
/**
* Creates an new radiobutton instance and sets the default
* layout data.
*
* @param group the composite in which to create the radiobutton
* @param label the string to set into the radiobutton
* @param value the string to identify radiobutton
* @return the new checkbox
*/
public static Button createRadioButton(Composite group, String label, String value, SelectionListener listener) {
Button button = new Button(group, SWT.RADIO | SWT.LEFT);
button.setText(label);
button.setData((null == value) ? label : value);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
data.horizontalAlignment = GridData.FILL;
data.verticalAlignment = GridData.BEGINNING;
button.setLayoutData(data);
if(null != listener)
button.addSelectionListener(listener);
return button;
}
/**
* Utility method that creates a push button instance
* and sets the default layout data.
*
* @param parent the parent for the new button
* @param label the label for the new button
* @return the newly-created button
*/
public static Button createPushButton(Composite parent, String label) {
Button button = new Button(parent, SWT.PUSH);
button.setText(label);
// button.addSelectionListener(this);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
button.setLayoutData(data);
return button;
}
/**
* Create a text field specific for this application
*
* @param parent the parent of the new text field
* @return the new text field
*/
public static Text createTextField(Composite parent) {
return createTextField(parent, SWT.SINGLE | SWT.BORDER);
}
public static Text createTextField(Composite parent, int style) {
Text text = new Text(parent, style);
GridData data = new GridData();
data.horizontalAlignment = GridData.FILL;
data.grabExcessHorizontalSpace = true;
data.verticalAlignment = GridData.CENTER;
data.grabExcessVerticalSpace = false;
text.setLayoutData(data);
return text;
}
/**
* Create a group box
*
* @param parent the parent of the new control
* @param label the group box label
* @param nColumns - number of layout columns
* @return the new group box
*/
public static Group createGroup(Composite parent, String label, int nColumns) {
Group group = new Group(parent, SWT.NONE);
group.setText(label);
GridLayout layout = new GridLayout();
layout.numColumns = nColumns;
group.setLayout(layout);
group.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
return group;
}
/**
* Create a List box
*
* @param parent the parent of the new control
* @param label the group box label
* @param nColumns - number of layout columns
* @return the new group box
*/
public static List createList(Composite parent, String strdata, String selData) {
List list = new List(parent, SWT.SINGLE);
GridData data = new GridData();
list.setLayoutData(data);
StringTokenizer st = new StringTokenizer(strdata, ",");
while(st.hasMoreTokens())
list.add(st.nextToken());
if(selData == null) {
if(list.getItemCount() > 0)
list.select(0);
}
else
selectList(list, selData);
return list;
}
/**
* Create this group's list viewer.
*/
public static TableViewer createTableViewer(Composite parent, String[] opt_list,
int width, int height, int style) {
TableViewer listViewer = new TableViewer(parent, SWT.BORDER | style);
GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
data.widthHint = width;
data.heightHint = height;
listViewer.getTable().setLayoutData(data);
if(null != opt_list)
listViewer.add(opt_list);
return listViewer;
}
/**
* Create this group's list viewer.
*/
public static TableViewer createTableViewer(Composite parent,
int width, int height, int style, String[] columns, int[] colWidths) {
TableViewer listViewer = createTableViewer(parent, null, width, height, style);
Table table= listViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout tableLayout= new TableLayout();
/*
TableColumn column= table.getColumn(0);
column.setText(columns[0]);
tableLayout.addColumnData(new ColumnWeightData(colWidths[0], false));
*/
TableColumn column;
for(int i = 0; i < columns.length; ++i) {
column= new TableColumn(table, SWT.NULL);
column.setText(columns[i]);
tableLayout.addColumnData(new ColumnWeightData(colWidths[i], true));
}
table.setLayout(tableLayout);
return listViewer;
}
public static void deactivateCellEditor(TableViewer viewer) {
if(null == viewer)
return;
CellEditor[] es = viewer.getCellEditors();
TableItem[] items = viewer.getTable().getSelection();
if(items.length >= 0) {
for(int i = 0; i < es.length; ++i) {
CellEditor e = es[i];
if(e.isActivated()) {
if(e.isValueValid()) {
Object[] properties = viewer.getColumnProperties();
Object value = e.getValue();
viewer.cancelEditing();
viewer.getCellModifier().modify(items[0],(String)properties[i], value);
} else
viewer.cancelEditing();
break;
}
}
}
}
/**
* Create this group's list viewer.
*/
public static CheckboxTableViewer createListViewer(Composite parent, String[] opt_list,
int width, int height, int style) {
Table table = new Table(parent, SWT.BORDER);
CheckboxTableViewer listViewer = new CheckboxTableViewer(table);
GridData data = new GridData(style);
data.widthHint = width;
data.heightHint = height;
listViewer.getTable().setLayoutData(data);
if(null != opt_list)
listViewer.add(opt_list);
// listViewer.setLabelProvider(listLabelProvider);
// listViewer.addCheckStateListener(this);
return listViewer;
}
public static CheckboxTableViewer createListViewer(Composite parent,
int width, int height, int style, String[] columns, int[] colWidths) {
CheckboxTableViewer listViewer = createListViewer(parent, null,
width, height, style);
Table table= listViewer.getTable();
table.setHeaderVisible(true);
table.setLinesVisible(true);
TableLayout tableLayout= new TableLayout();
table.setLayout(tableLayout);
TableColumn column= table.getColumn(0);
column.setText(columns[0]);
tableLayout.addColumnData(new ColumnWeightData(colWidths[0], false));
for(int i = 1; i < columns.length; ++i) {
column= new TableColumn(table, SWT.NULL);
column.setText(columns[i]);
tableLayout.addColumnData(new ColumnWeightData(colWidths[i], false));
}
return listViewer;
}
/**
* Create a selection combo
*
* @param parent the parent of the new text field
* @param string of comma separated tokens to fill selection list
* @return the new combo
*/
public static CCombo createSelectCombo(Composite parent, String strdata, String selData) {
return createSelectCombo(parent, strdata, selData,
SWT.READ_ONLY | SWT.BORDER);
}
public static CCombo createSelectCombo(Composite parent, String strdata, String selData, int style) {
CCombo combo = new CCombo(parent, style);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
combo.setLayoutData(data);
StringTokenizer st = new StringTokenizer(strdata, ",");
while(st.hasMoreTokens())
combo.add(st.nextToken());
if(selData == null || selData.length() == 0) {
if(combo.getItemCount() > 0)
combo.select(0);
}
else
selectCombo(combo, selData);
return combo;
}
/**
* Create a selection combo
*
* @param parent the parent of the new text field
* @param array of elements + selected element
* @return the new combo
*/
public static CCombo createSelectCombo(Composite parent, String[] strdata, String selData) {
return createSelectCombo(parent, strdata, selData, SWT.DROP_DOWN | SWT.READ_ONLY | SWT.BORDER);
}
public static CCombo createSelectCombo(Composite parent, String[] strdata, String selData, int style) {
CCombo combo = new CCombo(parent, style);
GridData data = new GridData(GridData.FILL_HORIZONTAL);
combo.setLayoutData(data);
for(int i = 0; i < strdata.length; ++i) {
combo.add(strdata[i]);
}
if(selData == null)
combo.select(0);
else
selectCombo(combo, selData);
return combo;
}
/**
* Create a dialog shell, child to the top level workbench shell.
*
* @return The new Shell useable for a dialog.
*
*/
public static Shell createDialogShell() {
Shell parent = PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getShell();
return new Shell( parent, SWT.DIALOG_TRIM );
}
public static void selectCombo(CCombo combo, String selData) {
int n_sel = combo.indexOf(selData);
if(0 > n_sel)
n_sel = 0;
combo.select(n_sel);
}
public static void selectList(List list, String selData) {
int n_sel = list.indexOf(selData);
if(0 > n_sel)
n_sel = 0;
list.select(n_sel);
}
public static Composite insertSpace(Composite parent, int nSpan, int height) {
Composite space = ControlFactory.createCompositeSeparator(parent, parent.getBackground(),
(SWT.DEFAULT != height ? height : 5));
((GridData)space.getLayoutData()).horizontalSpan = nSpan;
return space;
}
public static MessageBox createDialog( String title, String message, int style ) {
MessageBox box = new MessageBox( createDialogShell(), style | SWT.APPLICATION_MODAL );
box.setText( title );
box.setMessage( message );
return box;
}
public static MessageBox createYesNoDialog( String title, String message ) {
return createDialog( title, message, SWT.YES | SWT.NO | SWT.ICON_QUESTION );
}
public static MessageBox createOkDialog( String title, String message ) {
return createDialog( title, message, SWT.OK | SWT.ICON_INFORMATION );
}
public static MessageBox createOkCancelDialog( String title, String message ) {
return createDialog( title, message, SWT.OK | SWT.CANCEL | SWT.ICON_INFORMATION );
}
}

View file

@ -0,0 +1,176 @@
package org.eclipse.cdt.utils.ui.controls;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.swt.widgets.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.graphics.*;
import java.util.*;
import org.eclipse.swt.*;
public class HyperlinkHandler implements MouseListener, MouseTrackListener, PaintListener {
public static final int UNDERLINE_NEVER = 1;
public static final int UNDERLINE_ROLLOVER = 2;
public static final int UNDERLINE_ALWAYS = 3;
private Cursor hyperlinkCursor;
private Cursor busyCursor;
private boolean hyperlinkCursorUsed=true;
private int hyperlinkUnderlineMode=UNDERLINE_ALWAYS;
private Color background;
private Color foreground;
private Color activeBackground;
private Color activeForeground;
private Hashtable hyperlinkListeners;
private Control lastLink;
public HyperlinkHandler() {
hyperlinkListeners = new Hashtable();
hyperlinkCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_HAND);
busyCursor = new Cursor(Display.getCurrent(), SWT.CURSOR_WAIT);
}
public void dispose() {
hyperlinkCursor.dispose();
busyCursor.dispose();
}
public org.eclipse.swt.graphics.Color getActiveBackground() {
return activeBackground;
}
public org.eclipse.swt.graphics.Color getActiveForeground() {
return activeForeground;
}
public org.eclipse.swt.graphics.Color getBackground() {
return background;
}
public org.eclipse.swt.graphics.Cursor getBusyCursor() {
return busyCursor;
}
public org.eclipse.swt.graphics.Color getForeground() {
return foreground;
}
public org.eclipse.swt.graphics.Cursor getHyperlinkCursor() {
return hyperlinkCursor;
}
public int getHyperlinkUnderlineMode() {
return hyperlinkUnderlineMode;
}
public org.eclipse.swt.widgets.Control getLastLink() {
return lastLink;
}
public boolean isHyperlinkCursorUsed() {
return hyperlinkCursorUsed;
}
public void mouseDoubleClick(MouseEvent e) {
}
public void mouseDown(MouseEvent e) {
if (e.button == 1)
return;
lastLink = (Control)e.widget;
}
public void mouseEnter(MouseEvent e) {
Control control = (Control) e.widget;
if (isHyperlinkCursorUsed())
control.setCursor(hyperlinkCursor);
if (activeBackground != null)
control.setBackground(activeBackground);
if (activeForeground != null)
control.setForeground(activeForeground);
if (hyperlinkUnderlineMode==UNDERLINE_ROLLOVER) underline(control, true);
IHyperlinkListener action =
(IHyperlinkListener) hyperlinkListeners.get(control);
if (action != null)
action.linkEntered(control);
}
public void mouseExit(MouseEvent e) {
Control control = (Control) e.widget;
if (isHyperlinkCursorUsed())
control.setCursor(null);
if (hyperlinkUnderlineMode==UNDERLINE_ROLLOVER)
underline(control, false);
if (background != null)
control.setBackground(background);
if (foreground != null)
control.setForeground(foreground);
IHyperlinkListener action =
(IHyperlinkListener) hyperlinkListeners.get(control);
if (action != null)
action.linkExited(control);
}
public void mouseHover(MouseEvent e) {
}
public void mouseUp(MouseEvent e) {
if (e.button != 1)
return;
IHyperlinkListener action =
(IHyperlinkListener) hyperlinkListeners.get(e.widget);
if (action != null) {
Control c = (Control) e.widget;
c.setCursor(busyCursor);
action.linkActivated(c);
if (!c.isDisposed())
c.setCursor(isHyperlinkCursorUsed()?hyperlinkCursor:null);
}
}
public void paintControl(PaintEvent e) {
Control label = (Control) e.widget;
if (hyperlinkUnderlineMode == UNDERLINE_ALWAYS)
HyperlinkHandler.underline(label, true);
}
public void registerHyperlink(Control control, IHyperlinkListener listener) {
if (background != null)
control.setBackground(background);
if (foreground != null)
control.setForeground(foreground);
control.addMouseListener(this);
control.addMouseTrackListener(this);
if (hyperlinkUnderlineMode == UNDERLINE_ALWAYS)
control.addPaintListener(this);
hyperlinkListeners.put(control, listener);
removeDisposedLinks();
}
private void removeDisposedLinks() {
for (Enumeration keys = hyperlinkListeners.keys(); keys.hasMoreElements();) {
Control control = (Control)keys.nextElement();
if (control.isDisposed()) {
hyperlinkListeners.remove(control);
}
}
}
public void reset() {
hyperlinkListeners.clear();
}
public void setActiveBackground(org.eclipse.swt.graphics.Color newActiveBackground) {
activeBackground = newActiveBackground;
}
public void setActiveForeground(org.eclipse.swt.graphics.Color newActiveForeground) {
activeForeground = newActiveForeground;
}
public void setBackground(org.eclipse.swt.graphics.Color newBackground) {
background = newBackground;
}
public void setForeground(org.eclipse.swt.graphics.Color newForeground) {
foreground = newForeground;
}
public void setHyperlinkCursorUsed(boolean newHyperlinkCursorUsed) {
hyperlinkCursorUsed = newHyperlinkCursorUsed;
}
public void setHyperlinkUnderlineMode(int newHyperlinkUnderlineMode) {
hyperlinkUnderlineMode = newHyperlinkUnderlineMode;
}
public static void underline(Control control, boolean inside) {
if (!(control instanceof Label))
return;
Composite parent = control.getParent();
Rectangle bounds = control.getBounds();
GC gc = new GC(parent);
Color color = inside? control.getForeground() : control.getBackground();
gc.setForeground(color);
int y = bounds.y + bounds.height;
gc.drawLine(bounds.x, y, bounds.x+bounds.width, y);
gc.dispose();
}
}

View file

@ -0,0 +1,15 @@
package org.eclipse.cdt.utils.ui.controls;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import org.eclipse.swt.widgets.*;
public interface IHyperlinkListener {
public void linkActivated(Control linkLabel);
public void linkEntered(Control linkLabel);
public void linkExited(Control linkLabel);
}

View file

@ -0,0 +1,227 @@
package org.eclipse.cdt.utils.ui.controls;
/*
* (c) Copyright IBM Corp. 2000, 2001.
* All Rights Reserved.
*/
import java.util.ArrayList;
import java.util.Iterator;
import org.eclipse.swt.*;
import org.eclipse.swt.events.*;
import org.eclipse.swt.layout.*;
import org.eclipse.swt.widgets.*;
import org.eclipse.jface.util.Assert;
/**
* A field editor for an enumeration type preference.
* The choices are presented as a list of radio buttons.
*/
public class RadioButtonsArea extends Composite {
/**
* List of radio button entries of the form [label,value].
*/
private String[][] labelsAndValues;
/**
* Number of columns into which to arrange the radio buttons.
*/
private int numColumns;
/**
* Indent used for the first column of the radion button matrix.
*/
private int indent = 0;
/**
* The current value, or <code>null</code> if none.
*/
protected String value = null;
private SelectionListener listener;
private ArrayList externalListeners = new ArrayList();
private Composite area = null;
/**
* The radio buttons, or <code>null</code> if none
* (before creation and after disposal).
*/
private Button[] radioButtons;
public RadioButtonsArea(Composite parent, String labelText, int numColumns, String[][] labelAndValues) {
super(parent, SWT.NULL);
Assert.isTrue(checkArray(labelAndValues));
this.labelsAndValues = labelAndValues;
this.numColumns = numColumns;
createControl(parent, labelText);
}
public void setEnabled(boolean enabled) {
for( int i = 0; i < radioButtons.length; i++ ) {
radioButtons[i].setEnabled(enabled);
}
}
/**
* Checks whether given <code>String[][]</code> is of "type"
* <code>String[][2]</code>.
*
* @return <code>true</code> if it is ok, and <code>false</code> otherwise
*/
private boolean checkArray(String[][] table) {
if (table == null)
return false;
for (int i = 0; i < table.length; i++) {
String[] array = table[i];
if (array == null || array.length != 2)
return false;
}
return true;
}
private void fireSelectionEvent(SelectionEvent event) {
for(Iterator i = externalListeners.iterator(); i.hasNext(); ) {
SelectionListener s = (SelectionListener)i.next();
s.widgetSelected(event);
}
}
/**
* Create control area
*
* @return nothing
*/
protected void createControl(Composite parent, String labelText) {
GridLayout gl = new GridLayout();
this.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
gl.marginWidth = 0;
gl.horizontalSpacing = 0;
this.setLayout(gl);
if(null != labelText) { // Create group box
area = ControlFactory.createGroup(this, labelText, numColumns);
} else {
area = this;
}
radioButtons = new Button[labelsAndValues.length];
listener = new SelectionAdapter() {
public void widgetSelected(SelectionEvent event) {
value = (String) (event.widget.getData());
fireSelectionEvent(event); // Infor any external listener
}
};
for (int i = 0; i < labelsAndValues.length; i++) {
radioButtons[i] = ControlFactory.createRadioButton(area,
labelsAndValues[i][0],
labelsAndValues[i][1],
listener);
}
area.addDisposeListener(new DisposeListener() {
public void widgetDisposed(DisposeEvent event) {
radioButtons = null;
}
});
}
/**
* Sets the indent used for the first column of the radion button matrix.
*
* @param indent the indent (in pixels)
*/
public void setIndent(int indent) {
if(null == area)
return;
if (indent < 0)
indent = 0;
for(int i = 0; i < radioButtons.length; ++i) {
((GridData)(radioButtons[i].getLayoutData())).horizontalIndent = indent;
}
}
/**
* Select the radio button that conforms to the given value.
*
* @param selectedValue the selected value
*/
public void setSelectValue(String selectedValue) {
this.value = selectedValue;
if (radioButtons == null)
return;
if (this.value != null) {
boolean found = false;
for (int i = 0; i < radioButtons.length; i++) {
Button radio = radioButtons[i];
boolean selection = false;
if (((String) radio.getData()).equals(this.value)) {
selection = true;
found = true;
}
radio.setSelection(selection);
}
if (found)
return;
}
// We weren't able to find the value. So we select the first
// radio button as a default.
if (radioButtons.length > 0) {
radioButtons[0].setSelection(true);
this.value = (String) radioButtons[0].getData();
}
return;
}
public void setSelectedButton(int index) {
Button b;
if((index < 0) || (index >= radioButtons.length))
return;
for(int i = 0; i < radioButtons.length; ++i) {
b = radioButtons[i];
boolean selected = b.getSelection();
if(i == index) {
if(selected)
return;
} else {
if(selected)
b.setSelection(false);
}
}
b = radioButtons[index];
b.setSelection(true);
}
public String getSelectedValue() {
return value;
}
public int getSeletedIndex() {
if (radioButtons == null)
return -1;
if (value != null) {
for (int i = 0; i < radioButtons.length; i++) {
if (((String) radioButtons[i].getData()).equals(this.value))
return i;
}
}
return -1;
}
public void addSelectionListener(SelectionListener s) {
if(externalListeners.contains(s))
return;
externalListeners.add(s);
}
}

View file

@ -0,0 +1,48 @@
package org.eclipse.cdt.utils.ui.controls;
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*/
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.graphics.Rectangle;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Layout;
public class TabFolderLayout extends Layout {
protected Point computeSize (Composite composite, int wHint, int hHint, boolean flushCache) {
if (wHint != SWT.DEFAULT && hHint != SWT.DEFAULT)
return new Point(wHint, hHint);
Control [] children = composite.getChildren ();
int count = children.length;
int maxWidth = 0, maxHeight = 0;
for (int i=0; i<count; i++) {
Control child = children [i];
Point pt = child.computeSize (SWT.DEFAULT, SWT.DEFAULT, flushCache);
maxWidth = Math.max (maxWidth, pt.x);
maxHeight = Math.max (maxHeight, pt.y);
}
if (wHint != SWT.DEFAULT)
maxWidth= wHint;
if (hHint != SWT.DEFAULT)
maxHeight= hHint;
return new Point(maxWidth, maxHeight);
}
protected void layout (Composite composite, boolean flushCache) {
Rectangle rect= composite.getClientArea();
Control[] children = composite.getChildren();
for (int i = 0; i < children.length; i++) {
children[i].setBounds(rect);
}
}
}

View file

@ -0,0 +1,11 @@
package org.eclipse.cdt.utils.ui.swt;
/*
* (c) Copyright QNX Software Systems Ltd. 2002.
* All Rights Reserved.
*/
public interface IValidation {
public void setComplete(boolean complete);
}