/******************************************************************************* * Copyright (c) 2007 Red Hat, Inc. * Distributed under license by Red Hat, Inc. All rights reserved. * This program is 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: * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.jboss.tools.common.ui.widget.field; import java.util.List; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; /** * A group of labels and radio buttons. * @author Alexey Kazakov */ public class RadioField extends BaseField implements SelectionListener { private Composite topComposite; private Button[] radios; private Object value; public RadioField(Composite parent, List<String> labels, List<Object> values, Object defaultValue, boolean verticalLayout) { this(parent, labels, values, defaultValue, verticalLayout, null); } public RadioField(Composite parent, List<String> labels, List<Object> values, Object defaultValue, boolean verticalLayout, List<String> valueDescriptions) { topComposite = new Composite(parent, SWT.NONE); topComposite.setLayout(new GridLayout(verticalLayout ? 1 : values.size(), false)); if(verticalLayout) { topComposite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); } radios = new Button[values.size()]; if(defaultValue==null && !values.isEmpty()) { defaultValue = values.get(0); } for (int i = 0; i < radios.length; i++) { radios[i] = new Button(topComposite, SWT.RADIO); radios[i].setText(labels.get(i)); radios[i].addSelectionListener(this); radios[i].setLayoutData(new GridData(verticalLayout ? GridData.FILL_HORIZONTAL : GridData.BEGINNING)); Object value = values.get(i); radios[i].setData(value); if(value != null && value.equals(defaultValue)) { radios[i].setSelection(true); this.value = value; } if(valueDescriptions != null && valueDescriptions.size() > i) { radios[i].setToolTipText(valueDescriptions.get(i)); } } } /* (non-Javadoc) * @see org.jboss.tools.seam.ui.widget.field.BaseField#getControl() */ @Override public Control getControl() { return topComposite; } /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetDefaultSelected(SelectionEvent e) { } /* (non-Javadoc) * @see org.eclipse.swt.events.SelectionListener#widgetSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetSelected(SelectionEvent event) { value = event.widget.getData(); firePropertyChange("", value); //$NON-NLS-1$ } /** * @return Value of selected button */ public Object getValue() { return value; } /** * * @param value */ public void setValue(String value) { this.value = value; for (int i = 0; i < radios.length; i++) { if(value.equals(radios[i].getData())) { radios[i].setSelection(true); } else { radios[i].setSelection(false); } } } }