package org.uva.student.calinwouter.qlqls.ql.gui.widgets; import org.uva.student.calinwouter.qlqls.ql.model.StateWrapper; 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.StringValue; import javax.swing.*; import javax.swing.event.DocumentEvent; import javax.swing.event.DocumentListener; import javax.swing.text.Document; import java.awt.*; public class TextboxWidget implements IWidget { private final JTextField widget; private final String questionIdentifier; private final QLInterpreter qlInterpreter; private final StateWrapper stateWrapper; public Component getWidgetComponent() { return widget; } public void resetValue() { widget.setText(""); } private DocumentListener createTextboxDocumentListener() { return new DocumentListener() { public void insertUpdate(DocumentEvent e) { updateField(); } public void removeUpdate(DocumentEvent e) { updateField(); } public void changedUpdate(DocumentEvent e) { updateField(); } private void updateField() { final String textboxText = widget.getText(); final VariableTable variableTable = stateWrapper.getVariableTable(); final StringValue stringValue = new StringValue(textboxText); variableTable.setVariable(questionIdentifier, stringValue); final VariableTable newVariableTable = qlInterpreter.interpret(variableTable); stateWrapper.setVariableTable(newVariableTable); } }; } private void createUpdateTextboxListener() { final Document textboxDocument = widget.getDocument(); textboxDocument.addDocumentListener(createTextboxDocumentListener()); } public TextboxWidget(String questionIdentifier, QLInterpreter qlInterpreter, StateWrapper stateWrapper) { this.questionIdentifier = questionIdentifier; this.qlInterpreter = qlInterpreter; this.stateWrapper = stateWrapper; this.widget = new JTextField(20); createUpdateTextboxListener(); } }