package qlProject.gui; import qlProject.ast.Questionnaire; import qlProject.ast.value.Value; import qlProject.gui.gui_building_visitors.QuestionWidget; import qlProject.gui.gui_building_visitors.WidgetsCreationVisitor; import qlProject.gui.input_response_visitors.TrackChangesVisitor; import qlProject.util.QuestionDetails; import java.awt.*; import javax.swing.*; import java.util.Map; import java.util.Set; public class GuiManager { private final Map<String, QuestionDetails> questionsDetails;; private final Map<String, Value> valuesEnvironment; private final Map<String,Set<String>> deps; private final Map<String,Set<String>> awaitingCalculationIds; public GuiManager(Map<String, QuestionDetails> questionsDetails, Map<String, Value> valuesEnvironment, Map<String,Set<String>> deps, Map<String,Set<String>> awaitingCalculationIds) { this.questionsDetails = questionsDetails; this.valuesEnvironment = valuesEnvironment; this.deps = deps; this.awaitingCalculationIds = awaitingCalculationIds; } public GridBagConstraints initializeGridBagConstraints(){ GridBagConstraints gbc = new GridBagConstraints(); gbc.anchor = GridBagConstraints.WEST; gbc.gridx = 0; gbc.gridy = 0; return gbc; } public Map<String, QuestionWidget> createWidgets(Questionnaire q){ WidgetsCreationVisitor visitor = new WidgetsCreationVisitor (valuesEnvironment); q.accept(visitor); return visitor.getQuestionWidgets(); } public JFrame initiateAFrame (){ JFrame frame = new JFrame(); frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); frame.setSize(300, 200); return frame; } public JPanel buildPanel(Map<String, QuestionWidget> questionWidgetsMap, GridBagConstraints gbc){ JPanel panel = new JPanel(new GridBagLayout()); for (String id : questionWidgetsMap.keySet()){ addWidgetToPanel(panel, questionWidgetsMap, id, gbc); } return panel; } public void addWidgetToPanel(JPanel p, Map<String, QuestionWidget> questionWidgetsMap, String id, GridBagConstraints gbc){ QuestionWidget questionWidget = questionWidgetsMap.get(id); gbc.gridx++; p.add(questionWidget.getComponent(), gbc); gbc.gridx--; p.add(questionWidget.getLabel(), gbc); gbc.gridy++; } public void manageGUI(Questionnaire q) { JFrame frame = initiateAFrame(); GridBagConstraints gbc = initializeGridBagConstraints(); Map<String, QuestionWidget> questionWidgetsMap = createWidgets(q); q.accept(new TrackChangesVisitor(questionsDetails, valuesEnvironment, deps, questionWidgetsMap, awaitingCalculationIds)); JPanel panel = buildPanel(questionWidgetsMap, gbc); frame.add(panel); frame.setVisible(true); } }