package ql.gui.content; import javax.swing.JComponent; import ql.Value; import ql.ast.Expression; import ql.ast.expression.Identifier; import ql.ast.visitor.evaluator.Evaluator; import ql.ast.visitor.evaluator.ValueEnvironment; import ql.gui.DefaultComponent; import ql.gui.Component; import ql.gui.structure.Panel; import ql.gui.widget.InputWidget; public class UIComputedQuestion extends DefaultComponent { private final Identifier identifier; private final Panel questionPanel; private final Expression expression; private final ValueEnvironment valueEnvironment; private final Component questionText; private final InputWidget<Value> inputWidget; @SuppressWarnings("unchecked") public UIComputedQuestion(Identifier identifier, Component questionText, InputWidget<?> inputWidget, Expression expression, ValueEnvironment valueEnvironment) { this.identifier = identifier; this.expression = expression; this.questionText = questionText; this.valueEnvironment = valueEnvironment; this.inputWidget = (InputWidget<Value>) inputWidget; this.inputWidget.disable(); questionPanel = new Panel(this); questionPanel.addComponent(this.questionText); questionPanel.addComponent(this.inputWidget); } public Expression getExpression() { return expression; } @Override public void handleChange(Value changedValue, Component source) { valueEnvironment.store(identifier, changedValue); super.handleChange(changedValue, this); } @Override public void updateComponent() { Value expressionValue = Evaluator.check(expression, valueEnvironment); if(expressionValue.isUndefined()) { return; } inputWidget.setValue(expressionValue); inputWidget.updateComponent(); } @Override public JComponent getComponent() { return questionPanel.getComponent(); } }