package com.drawbridge.syntaxtests; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Component; import java.awt.Container; import java.awt.Dimension; import java.awt.Font; import java.awt.Graphics; import java.awt.Graphics2D; import java.awt.Insets; import java.awt.Point; import java.awt.Rectangle; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.awt.image.BufferedImage; import java.util.ArrayList; import javax.swing.BorderFactory; import javax.swing.Box; import javax.swing.BoxLayout; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JPanel; import javax.swing.JProgressBar; import javax.swing.UIManager; import com.drawbridge.Main; import com.drawbridge.text.DBDocument; import com.drawbridge.utils.GraphicUtils; import com.drawbridge.utils.JSUtils; import com.drawbridge.utils.Utils; public class SyntaxTest extends JFrame { /** * */ private static final long serialVersionUID = 2447789846964509484L; public static SyntaxTest instance = null; private Container mContent; private DBDocument doc; private JProgressBar pb = null; private int numberOfPreviousQuestions = 0; private AnswerPanel ap; public static SyntaxTest getInstance(){ if(instance != null) return instance; else{ instance = new SyntaxTest(); return instance; } } private SyntaxTest(){ super("SyntaxTest"); // this.setDefaultCloseOperation(AnalyticUtils.getCloseOperation()); // this.addWindowListener(AnalyticUtils.getWindowListener()); initUI(); } private void initUI() { setName("DrawBridge SyntaxTest"); setLocation(0, 0); setPreferredSize(new Dimension(1200, 500)); try { UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName()); } catch (Exception e) { Utils.out.println(this.getClass(), "Error setting native LAF: " + e); } setLayout(new BorderLayout()); mContent = getContentPane(); BoxLayout bl = new BoxLayout(mContent, BoxLayout.Y_AXIS); mContent.setLayout(bl); mContent.add(Box.createVerticalStrut(10)); //Add Question Label JLabel question = new JLabel("Does this computer code look like it would work?"); question.setAlignmentX(Component.CENTER_ALIGNMENT); mContent.add(question); mContent.add(Box.createVerticalStrut(40)); //Add Text Label Font bigFont = Main.mainFont.deriveFont(26f); doc = new DBDocument("", bigFont, false); mContent.add(doc); moveToNextQuestion(); doc.setBorder(BorderFactory.createLineBorder(Color.black)); doc.setPreferredSize(new Dimension(1000, 50)); doc.setInsets(new Insets(10, 50, 10, 10)); doc.setLineHeight(20); mContent.add(Box.createVerticalGlue()); //Add Answer Panel ap = new AnswerPanel(); mContent.add(ap); ap.setBorder(BorderFactory.createLineBorder(Color.black)); mContent.add(Box.createVerticalGlue()); //Add Progress Bar pb = new JProgressBar(); pb.setValue(50); mContent.add(pb); mContent.setBackground(Color.white); this.pack(); mContent.setVisible(true); } public void moveToNextQuestion(){ if(ap != null) ap.repaint(); if(setOne.size() > 0){ int index = (int) Math.round(Math.random() * (setOne.size()-1)); String str = setOne.get(index); doc.setText(str); doc.setHighlightElements(JSUtils.getHighlightElements(str)); setOne.remove(index); doc.repaint(); numberOfPreviousQuestions++; System.out.println("Previous Questions:" + numberOfPreviousQuestions / (numberOfPreviousQuestions + setOne.size())); if(pb != null) pb.setValue((numberOfPreviousQuestions * 100) / (numberOfPreviousQuestions + setOne.size())); } else{ //Finished! } new Thread(new Runnable(){ @Override public void run() { try { Thread.sleep(200); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } ap.tickDrawPoint = null; ap.repaint(); } }).start(); } public enum Answer{ ANSWER_YES, ANSWER_NO, ANSWER_NOTSURE }; class AnswerPanel extends JPanel{ /** * */ private static final long serialVersionUID = 3425143070807864144L; BufferedImage answerImage; BufferedImage tickImage; Rectangle yes = new Rectangle(50, 20, 40, 40); Rectangle no = new Rectangle(165, 20, 40, 40); Rectangle notsure = new Rectangle(290, 20, 40, 40); public Point tickDrawPoint = null; public AnswerPanel(){ setLayout(new BorderLayout()); answerImage = GraphicUtils.loadImageFromResource("/Assets/syntaxtest-answers.png"); tickImage = GraphicUtils.loadImageFromResource("/Assets/answer-tick.png"); setPreferredSize(new Dimension(answerImage.getWidth(), answerImage.getHeight())); this.setMaximumSize(new Dimension(answerImage.getWidth(), answerImage.getHeight())); this.addMouseListener(new MouseAdapter(){ @Override public void mousePressed(MouseEvent e) { if(yes.contains(e.getPoint())){ tickDrawPoint = e.getPoint(); System.out.println(doc.getText() + " -> Yes"); moveToNextQuestion(); } if(no.contains(e.getPoint())){ tickDrawPoint = e.getPoint(); System.out.println(doc.getText() + " -> No"); moveToNextQuestion(); } if(notsure.contains(e.getPoint())){ tickDrawPoint = e.getPoint(); System.out.println(doc.getText() + " -> Not Sure"); moveToNextQuestion(); } } }); } @Override public void paintComponent(Graphics g){ super.paintComponent(g); Graphics2D g2 = (Graphics2D)g; g2.drawImage(answerImage, 0, 0, answerImage.getWidth(), answerImage.getHeight(), null); if(tickDrawPoint != null) g2.drawImage(tickImage, tickDrawPoint.x - (tickImage.getWidth() / 2), tickDrawPoint.y - (tickImage.getHeight() / 2), tickImage.getWidth(), tickImage.getHeight(), null); } } private static ArrayList<String> setOne = new ArrayList<String>(){/** * */ private static final long serialVersionUID = 3753001768005655162L; { add("image1.setImageSize(200,300);"); add("image1.setImageSize(200,300)"); add("image1.setImageSize(200,300 ;"); add("image1.setImageSize(200,300"); add("image1.setImageSize(200 300);"); add("image1.setImageSize(200 300)"); add("image1.setImageSize(200 300 ;"); add("image1.setImageSize(200 300"); add("image1.setImageSize 200,300);"); add("image1.setImageSize 200,300)"); add("image1.setImageSize 200,300 ;"); add("image1.setImageSize 200,300"); add("image1.setImageSize 200 300);"); add("image1.setImageSize 200 300)"); add("image1.setImageSize 200 300 ;"); add("image1.setImageSize 200 300"); add("image1setImageSize(200,300);"); add("image1setImageSize(200,300)"); add("image1setImageSize(200,300 ;"); add("image1setImageSize(200,300"); add("image1setImageSize(200 300);"); add("image1setImageSize(200 300)"); add("image1setImageSize(200 300 ;"); add("image1setImageSize(200 300"); add("image1setImageSize 200,300);"); add("image1setImageSize 200,300)"); add("image1setImageSize 200,300 ;"); add("image1setImageSize 200,300"); add("image1setImageSize 200 300);"); add("image1setImageSize 200 300)"); add("image1setImageSize 200 300 ;"); add("image1setImageSize 200 300"); add("var x=\"String\";"); add("var x=\"String\""); add("var x= String ;"); add("var x= String"); add("var x\"String\";"); add("var x\"String\""); add("var x String ;"); add("var x String"); add("var =\"String\";"); add("var =\"String\""); add("var = String ;"); add("var = String"); add("var \"String\";"); add("var \"String\""); add("var String ;"); add("var String"); add("varx=\"String\";"); add("varx=\"String\""); add("varx= String ;"); add("varx= String"); add("varx\"String\";"); add("varx\"String\""); add("varx String ;"); add("varx String"); add("var=\"String\";"); add("var=\"String\""); add("var= String ;"); add("var= String"); add("var\"String\";"); add("var\"String\""); add("var String ;"); add("var String"); add("var x;"); add("var x"); add("var ;"); add("var"); add("varx;"); add("varx"); add("var;"); add("var"); add("x =1;"); add("x =1"); add("x =;"); add("x ="); add("x 1;"); add("x 1"); add("x ;"); add("x"); add("x=1;"); add("x=1"); add("x=;"); add("x="); add("x1;"); add("x1"); add("x;"); add("x"); add("var x=1;"); add("var x=1"); add("var x=;"); add("var x="); add("var x1;"); add("var x1"); add("var x;"); add("var x"); add("var =1;"); add("var =1"); add("var =;"); add("var ="); add("var 1;"); add("var 1"); add("var ;"); add("var"); add("varx=1;"); add("varx=1"); add("varx=;"); add("varx="); add("varx1;"); add("varx1"); add("varx;"); add("varx"); add("var=1;"); add("var=1"); add("var=;"); add("var="); add("var1;"); add("var1"); add("var;"); add("var"); }}; }