package nl.uva.softwcons.qls.ui.widget; import javafx.scene.Node; import javafx.scene.control.RadioButton; import javafx.scene.control.ToggleGroup; import javafx.scene.layout.HBox; import nl.uva.softwcons.ql.eval.ValueChangeListener; import nl.uva.softwcons.ql.eval.value.Value; import nl.uva.softwcons.ql.ui.converter.ValueConverter; import nl.uva.softwcons.ql.ui.widget.Widget; public class RadioButtonWidget extends Widget { private final RadioButton yesButton; private final RadioButton noButton; private final HBox hbox; private final ToggleGroup group; private ValueConverter<Boolean> converter; public RadioButtonWidget(final String yesString, final String noString) { this.yesButton = new RadioButton(yesString); this.noButton = new RadioButton(noString); this.hbox = new HBox(); this.hbox.getChildren().addAll(yesButton, noButton); this.group = new ToggleGroup(); this.yesButton.setToggleGroup(group); this.noButton.setToggleGroup(group); } public RadioButtonWidget(final String yesString, final String noString, final ValueConverter<Boolean> converter) { this(yesString, noString); this.converter = converter; } @Override public Node getWidget() { return hbox; } @Override public void setValue(final Value value) { if (value.inConditionalContext()) { group.selectToggle(yesButton); return; } group.selectToggle(noButton); } @Override public void setEditable(final boolean editable) { this.hbox.setDisable(!editable); } @Override public void addListener(final ValueChangeListener<Value> listener) { yesButton.selectedProperty().addListener((observable, oldValue, newValue) -> { listener.processValueChange(converter.toValue(newValue)); }); } @SuppressWarnings({ "unchecked", "rawtypes" }) @Override public void setConverter(final ValueConverter converter) { this.converter = converter; } }