package org.uva.student.calinwouter.qlqls.qls.widgets.question.intwidgets;
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.IntegerValue;
import javax.swing.*;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import java.awt.*;
public class SpinboxWidget implements IWidget {
private final JSpinner spinner;
private final String questionIdentifier;
private final QLInterpreter qlInterpreter;
private final StateWrapper stateWrapper;
public Component getWidgetComponent() {
return spinner;
}
public void resetValue() {
spinner.setValue(0);
}
private ChangeListener createChangeListener() {
return new ChangeListener() {
public void stateChanged(ChangeEvent e) {
final VariableTable variableTable = stateWrapper.getVariableTable();
final Integer integer = (Integer) spinner.getValue();
final IntegerValue integerValue = new IntegerValue(integer);
variableTable.setVariable(questionIdentifier, integerValue);
VariableTable newVariableTable = qlInterpreter.interpret(variableTable);
stateWrapper.setVariableTable(newVariableTable);
}
};
}
private JSpinner createSpinnerUI() {
JSpinner spinner = new JSpinner(new SpinnerNumberModel());
spinner.addChangeListener(createChangeListener());
return spinner;
}
public SpinboxWidget(String questionIdentifier, QLInterpreter qlInterpreter, StateWrapper stateWrapper) {
this.questionIdentifier = questionIdentifier;
this.qlInterpreter = qlInterpreter;
this.stateWrapper = stateWrapper;
this.spinner = createSpinnerUI();
}
}