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 ComboWidget implements IWidget { private final String questionIdentifier; private final QLInterpreter qlInterpreter; private final StateWrapper stateWrapper; private final JComboBox yesNoComboBox; public Component getWidgetComponent() { return yesNoComboBox; } public void resetValue() { yesNoComboBox.setSelectedIndex(-1); } private JComboBox createYesNoCombo(String[] comboValues) { return new JComboBox<String>(comboValues); } private void setComboValue(VariableTable variableTable) { final boolean isFirstSelected = yesNoComboBox.getSelectedIndex() == 0; final BooleanValue selectionBasedValue = new BooleanValue(isFirstSelected); variableTable.setVariable(questionIdentifier, selectionBasedValue); } private ItemListener createComboChangeListener() { return new ItemListener() { public void itemStateChanged(ItemEvent e) { VariableTable currentVariableTable = stateWrapper.getVariableTable(); setComboValue(currentVariableTable); VariableTable newVariableTable = qlInterpreter.interpret(currentVariableTable); stateWrapper.setVariableTable(newVariableTable); } }; } public ComboWidget(String questionIdentifier, QLInterpreter qlInterpreter, StateWrapper stateWrapper, String yesLabel, String noLabel) { this.questionIdentifier = questionIdentifier; this.qlInterpreter = qlInterpreter; this.stateWrapper = stateWrapper; this.yesNoComboBox = createYesNoCombo(new String[] { yesLabel, noLabel }); resetValue(); yesNoComboBox.addItemListener(createComboChangeListener()); } }