package com.form.language.gui.widget;
import java.util.List;
import com.form.language.ast.expression.Expression;
import com.form.language.ast.statement.question.Question;
import com.form.language.ast.values.BoolValue;
import com.form.language.ast.values.GenericValue;
import com.form.language.gui.components.ComputedQuestionComponent;
import com.form.language.gui.components.QuestionComponent;
import com.form.language.memory.Context;
public abstract class Widget {
private Question question;
private Context context;
public abstract void displayComputedValue(GenericValue value);
public Widget(Question question,Context context)
{
this.question = question;
this.context = context;
}
public void setContextValue(GenericValue value) {
context.setValue(question.getId(),value);
}
public void checkDependencyVisibility() {
for (Expression exp : context.getReferencingExpressions(question.getId())){
List<QuestionComponent> q = context.getDependantQuestions(exp);
checkVisibilities(exp, q);
}
}
public void checkComputedQuestion() {
for (ComputedQuestionComponent computed : context.getReferencingComputedExpressions(question.getId())){
computed.updateAndRedraw(context);
}
}
public void checkVisibilities(Expression exp, List<QuestionComponent> q) {
for (QuestionComponent question : q) {
question.checkVisibility(((BoolValue) exp.evaluate(context)).getValue());
}
}
}