package gui; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.LinkedHashMap; import java.util.Set; import javax.swing.JButton; import javax.swing.JOptionPane; import javax.swing.JPanel; import net.miginfocom.swing.MigLayout; import ast.form.Form; import ast.form.IFormVisitor; import ast.question.Question; import evaluator.ValueRepository; import gui.listeners.SaveButtonListener; import gui.questions.SimpleQuestionUI; public class GUIRenderer implements IFormVisitor<JPanel> { private final JPanel panel; private final ValueRepository valueRepository; private final LinkedHashMap<String, SimpleQuestionUI> widgetsRepository; private final JButton saveData; private GUIRenderer() { this.panel = new JPanel(); this.panel.setLayout(new MigLayout( "wrap 2, hidemode 3")); this.saveData = new JButton("Save questionnaire"); this.valueRepository = new ValueRepository(); this.widgetsRepository = new LinkedHashMap<String, SimpleQuestionUI>(); } public static JPanel make(Form form) { GUIRenderer visitor = new GUIRenderer(); form.accept(visitor); return visitor.getPanel(); } public JPanel getPanel() { return panel; } public void addToPanel() { Set<String> keys = widgetsRepository.keySet(); for(String k:keys){ this.panel.add(widgetsRepository.get(k).getLabel()); this.panel.add(widgetsRepository.get(k).getWc().getWidget(), "wrap"); } addSaveButton(); } public void addSaveButton() { saveData.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent evt) { int selectedOption = JOptionPane.showConfirmDialog(null, "Do you want to save changes made to the form?", "Save form", JOptionPane.YES_NO_OPTION); if (selectedOption == JOptionPane.YES_OPTION) { new SaveButtonListener(valueRepository); } } }); this.panel.add(saveData, "span 2, align center"); } public Set<String> getIDkeys() { Set<String> keys = widgetsRepository.keySet(); return keys; } public void putWidgetRepository(String id, SimpleQuestionUI widgets) { this.widgetsRepository.put(id, widgets); } public SimpleQuestionUI getIDSimpleQuestionUI(String id) { return this.widgetsRepository.get(id); } public boolean containsSimpleQuestionUI(String id) { return this.widgetsRepository.containsKey(id); } @Override public JPanel visit(Form form) { for(Question q : form.getQuestionText()){ q.accept(new GUIVisitor(this, valueRepository)); } addToPanel(); return panel; } }