package org.uva.ql.view; import java.awt.Component; import java.awt.Dimension; import java.util.ArrayList; import java.util.List; import javax.swing.JButton; import javax.swing.JFrame; import net.miginfocom.swing.MigLayout; import org.uva.ql.ast.expression.literal.Identifier; import org.uva.ql.evaluation.Evaluator; import org.uva.ql.view.component.ExprQuestionItem; import org.uva.ql.view.panel.IfQuestionPanel; import org.uva.ql.view.panel.Panel; public class FormFrame { private List<IfQuestionPanel> exprPanels; private List<ExprQuestionItem> exprItems; private final JFrame frame; public FormFrame() { frame = new JFrame("QL Form"); frame.setMinimumSize(new Dimension(400, 400)); frame.setLayout(new MigLayout("", "[grow, push, fill]", "")); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); this.exprPanels = new ArrayList<IfQuestionPanel>(); this.exprItems = new ArrayList<ExprQuestionItem>(); } private void addWithConstraints(Component component) { frame.add(component, "span,growx, hidemode 1"); frame.pack(); } public void addQuestionPanel(Panel panel) { addWithConstraints(panel.getPanel()); } public void addIfQuestionPanel(IfQuestionPanel panel) { addWithConstraints(panel.getPanel()); exprPanels.add(panel); } public void addExprQuestionItem(ExprQuestionItem panel) { addWithConstraints(panel.getPanel()); exprItems.add(panel); } public void addDoneButton(JButton button) { addWithConstraints(button); } public void notifyPanels(Evaluator evaluator, Identifier identifier) { for (ExprQuestionItem item : exprItems) { // This if statement is there to prevent it from updating itself. if (!item.getIdentifier().equals(identifier)) { item.evaluateAndChange(evaluator); } } for (IfQuestionPanel panel : exprPanels) { panel.evaluateAndShow(evaluator); } frame.pack(); } public void setFrameVisible(boolean show) { frame.setVisible(show); } }