package ql.ast.form.answer;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.ButtonGroup;
import javax.swing.JComponent;
import javax.swing.JPanel;
import javax.swing.JRadioButton;
import net.miginfocom.swing.MigLayout;
import ql.ast.environment.Environment;
import ql.ast.expr.exprType.Ident;
import ql.ast.form.Form;
import ql.ast.value.Bool;
import ql.ast.value.Value;
public class BoolComponent extends AnswerComponent{
private JPanel panel;
private JRadioButton buttonTrue, buttonFalse;
@Override
public JComponent getAnswerField(boolean enabled, final Environment environment,
final Form form, final Ident id) {
panel = new JPanel(new MigLayout("ins 1"));
ButtonGroup buttons = new ButtonGroup();
buttonTrue = new JRadioButton("Yes");
buttonFalse = new JRadioButton("No");
buttonTrue.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
environment.addValue(id, new Bool(true));
form.eval();
}
});
buttonFalse.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
environment.addValue(id, new Bool(false));
form.eval();
}
});
buttonTrue.setEnabled(enabled);
buttonFalse.setEnabled(enabled);
buttons.add(buttonTrue);
buttons.add(buttonFalse);
panel.add(buttonTrue);
panel.add(buttonFalse);
return panel;
}
@Override
public boolean hasValue() {
return buttonTrue.isSelected();
}
@Override
public Value getAnswerValue() {
return new Bool(buttonTrue.isSelected());
}
@Override
public void setAnswerValue(Value value) {
if (value.getClass().equals(Bool.class)) {
if (((Bool)value).getValue()) {
buttonTrue.setSelected(true);
}
else {
buttonFalse.setSelected(true);
}
}
else {
throw new IllegalArgumentException("The given value should be a Boolean type");
}
}
@Override
public void setVisible(boolean visible) {
panel.setVisible(visible);
}
}