/*
* SoapUI, Copyright (C) 2004-2016 SmartBear Software
*
* Licensed under the EUPL, Version 1.1 or - as soon as they will be approved by the European Commission - subsequent
* versions of the EUPL (the "Licence");
* You may not use this work except in compliance with the Licence.
* You may obtain a copy of the Licence at:
*
* http://ec.europa.eu/idabc/eupl
*
* Unless required by applicable law or agreed to in writing, software distributed under the Licence is
* distributed on an "AS IS" basis, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either
* express or implied. See the Licence for the specific language governing permissions and limitations
* under the Licence.
*/
package com.eviware.x.form.support;
import com.eviware.x.form.XFormOptionsField;
import com.eviware.x.impl.swing.AbstractSwingXFormField;
import javax.swing.AbstractButton;
import javax.swing.BoxLayout;
import javax.swing.ButtonGroup;
import javax.swing.ButtonModel;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* Swing-specific RadioGroup
*
* @author ole.matzura
*/
public class XFormRadioGroup extends AbstractSwingXFormField<JPanel> implements XFormOptionsField {
protected ButtonGroup buttonGroup;
protected Map<String, ButtonModel> models = new HashMap<String, ButtonModel>();
protected List<Object> items = new ArrayList<Object>();
public XFormRadioGroup(String[] values) {
super(new JPanel());
buttonGroup = new ButtonGroup();
getComponent().setLayout(new BoxLayout(getComponent(), BoxLayout.Y_AXIS));
for (String value : values) {
addItem(value);
}
}
public String getValue() {
ButtonModel selection = buttonGroup.getSelection();
return selection == null ? null : selection.getActionCommand();
}
public void setValue(String value) {
buttonGroup.setSelected(models.get(value), true);
}
public void addItem(Object value) {
JRadioButton button;
if (value instanceof Enum) {
button = new JRadioButton(value.toString());
button.setActionCommand(((Enum) value).name());
models.put(((Enum) value).name(), button.getModel());
} else {
button = new JRadioButton(String.valueOf(value));
button.setActionCommand(String.valueOf(value));
models.put(String.valueOf(value), button.getModel());
}
button.setName(String.valueOf(value));
button.setFocusPainted(false);
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
fireValueChanged(e.getActionCommand(), null);
}
});
getComponent().add(button);
buttonGroup.add(button);
items.add(value);
}
public Object[] getOptions() {
return items.toArray();
}
public Object[] getSelectedOptions() {
return new String[]{getValue()};
}
public void setOptions(Object[] values) {
while (buttonGroup.getButtonCount() > 0) {
buttonGroup.remove(buttonGroup.getElements().nextElement());
}
models.clear();
items.clear();
getComponent().removeAll();
for (Object value : values) {
addItem(value);
}
}
public void setSelectedOptions(Object[] options) {
}
public int[] getSelectedIndexes() {
return new int[]{items.indexOf(getValue())};
}
public void setDisabled() {
for (Enumeration<AbstractButton> buttons = buttonGroup.getElements(); buttons.hasMoreElements(); ) {
buttons.nextElement().setEnabled(false);
}
}
}