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");
}};
}