package ql.gui.content; import javax.swing.JComponent; import ql.Value; import ql.ast.Expression; 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.value.BooleanValue; public class UIConditional extends DefaultComponent { private Panel activePanel; private final Expression expression; private final ValueEnvironment valueEnvironment; private final Component ifPanel, elsePanel; public UIConditional(Expression expression, ValueEnvironment valueEnvironment, Panel ifPanel, Panel elsePanel) { this.expression = expression; this.valueEnvironment = valueEnvironment; this.ifPanel = ifPanel; this.elsePanel = elsePanel; activePanel = new Panel(this); activePanel.addComponent(this.ifPanel); activePanel.addComponent(this.elsePanel); activateElsePanel(); } public UIConditional(Expression expression, ValueEnvironment valueEnvironment, Panel ifPanel) { this(expression, valueEnvironment, ifPanel, new Panel()); } public void activateIfPanel() { ifPanel.getComponent().setVisible(true); ifPanel.updateComponent(); elsePanel.getComponent().setVisible(false); elsePanel.updateComponent(); } public void activateElsePanel() { ifPanel.getComponent().setVisible(false); ifPanel.updateComponent(); elsePanel.getComponent().setVisible(true); elsePanel.updateComponent(); } @Override public void updateComponent() { // Recalculate the value for this computedQuestion Value value = Evaluator.check(expression, valueEnvironment); if(value.isUndefined()) { activateElsePanel(); return; } if(((BooleanValue) value).getPrimitive()) { activateIfPanel(); } else { activateElsePanel(); } activePanel.updateComponent(); } @Override public JComponent getComponent() { return activePanel.getComponent(); } }