package org.uva.student.calinwouter.qlqls.qls.widgets.question.boolwidgets; import org.uva.student.calinwouter.qlqls.ql.model.StateWrapper; import org.uva.student.calinwouter.qlqls.ql.gui.widgets.IWidget; import org.uva.student.calinwouter.qlqls.ql.QLInterpreter; import org.uva.student.calinwouter.qlqls.ql.model.VariableTable; import org.uva.student.calinwouter.qlqls.ql.types.BooleanValue; import javax.swing.*; import java.awt.*; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; public class RadioWidget implements IWidget { private final String questionIdentifier; private final QLInterpreter qlInterpreter; private final StateWrapper stateWrapper; private final JPanel btnPanelYesNo; private final JRadioButton yesRadioButton, noRadioButton; public Component getWidgetComponent() { return btnPanelYesNo; } public void resetValue() { yesRadioButton.setSelected(false); noRadioButton.setSelected(false); } private ItemListener createRadioSelectedEventListener(final boolean radioSelectionType) { return new ItemListener() { public void itemStateChanged(ItemEvent e) { final VariableTable variableTable = stateWrapper.getVariableTable(); final BooleanValue radioSelectionTypeValue = new BooleanValue(radioSelectionType); variableTable.setVariable(questionIdentifier, radioSelectionTypeValue); final VariableTable newVariableTable = qlInterpreter.interpret(variableTable); stateWrapper.setVariableTable(newVariableTable); } }; } private void initializeEventListeners() { yesRadioButton.addItemListener(createRadioSelectedEventListener(true)); noRadioButton.addItemListener(createRadioSelectedEventListener(false)); } private void initializeButtonGroup() { ButtonGroup btnGroupYesNo = new ButtonGroup(); btnGroupYesNo.add(yesRadioButton); btnGroupYesNo.add(noRadioButton); } private void initializeRadioButtons() { btnPanelYesNo.add(yesRadioButton); btnPanelYesNo.add(noRadioButton); } public RadioWidget(String questionIdentifier, QLInterpreter qlInterpreter, StateWrapper stateWrapper, String yesLabel, String noLabel) { this.questionIdentifier = questionIdentifier; this.qlInterpreter = qlInterpreter; this.stateWrapper = stateWrapper; this.btnPanelYesNo = new JPanel(); this.yesRadioButton = new JRadioButton(yesLabel); this.noRadioButton = new JRadioButton(noLabel); initializeButtonGroup(); initializeRadioButtons(); initializeEventListeners(); } }