package deploy.common;
import deploy.JND.GUIGlobals;
import deploy.JND.SimpleHtmlHelpFrame;
import experiment.Experiment;
import java.awt.Graphics;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import javax.imageio.ImageIO;
import javax.swing.JFrame;
import javax.swing.text.html.HTMLEditorKit;
public abstract class AbstractMainMenuFrame extends javax.swing.JFrame {
/**
* Subclasses should call this method from within their main methods.
*
*
* Example:
* public static void main(String[] args){
* new ClassConstant().execute();
* }
*
*/
public void execute(){
final AbstractMainMenuFrame frm = this;
java.awt.EventQueue.invokeLater(new Runnable() {
public void run() {
frm.setExperiment(frm.constructExperiment());
frm.setVisible(true);
}
});
}
SimpleHtmlHelpFrame helpFrame = new SimpleHtmlHelpFrame();
protected Experiment myExperiment = null;
/**
* Function to populate myExperiment with an Experiment to run.
* @return
*/
protected abstract Experiment constructExperiment();
protected Experiment getExperiment(){
return myExperiment;
}
/** Creates new form MainMenu */
public AbstractMainMenuFrame() {
GUIGlobals.setLookAndFeel();
initComponents();
this.setLocationRelativeTo(null);
htmlPane.setEditorKit(new HTMLEditorKit());
try {
String filename = "./html/Welcome.html";
FileReader reader = new FileReader(filename);
htmlPane.read(reader, filename);
} catch (IOException ex) {
System.err.println("Could not open welcome page.");
ex.printStackTrace();
}
helpFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
}
/** This method is called from within the constructor to
* initialize the form.
* WARNING: Do NOT modify this code. The content of this method is
* always regenerated by the Form Editor.
*/
// <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
private void initComponents() {
testButton = new javax.swing.JButton();
jScrollPane1 = new javax.swing.JScrollPane();
htmlPane = new javax.swing.JEditorPane();
quitButton = new javax.swing.JButton();
jPanel1 = new javax.swing.JPanel(){
BufferedImage bi;
boolean isLoadFailed = false;
public void paintComponent(Graphics g){
if(bi == null && isLoadFailed == false){
try{
bi = ImageIO.read(new File("./img/header.png"));
}catch(Exception e){
isLoadFailed = true;
}
}
if(bi != null){
g.drawImage(bi, 0, 0, null);
}
}
};
runButton = new javax.swing.JButton();
configureButton = new javax.swing.JButton();
helpButton = new javax.swing.JButton();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
testButton.setText("Test Experiment");
testButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
testButtonActionPerformed(evt);
}
});
htmlPane.setEditable(false);
jScrollPane1.setViewportView(htmlPane);
quitButton.setText("Quit");
quitButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
quitButtonActionPerformed(evt);
}
});
jPanel1.setBackground(new java.awt.Color(255, 255, 255));
org.jdesktop.layout.GroupLayout jPanel1Layout = new org.jdesktop.layout.GroupLayout(jPanel1);
jPanel1.setLayout(jPanel1Layout);
jPanel1Layout.setHorizontalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 165, Short.MAX_VALUE)
);
jPanel1Layout.setVerticalGroup(
jPanel1Layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 54, Short.MAX_VALUE)
);
runButton.setText("Run Experiment");
runButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
runButtonActionPerformed(evt);
}
});
configureButton.setText("Configure Experiment");
configureButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
configureButtonActionPerformed(evt);
}
});
helpButton.setText("Help");
helpButton.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
helpButtonActionPerformed(evt);
}
});
org.jdesktop.layout.GroupLayout layout = new org.jdesktop.layout.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 510, Short.MAX_VALUE)
.add(layout.createSequentialGroup()
.add(layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING, false)
.add(runButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(testButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(configureButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(jPanel1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(helpButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.add(quitButton, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 82, Short.MAX_VALUE))
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(jScrollPane1))
);
layout.setVerticalGroup(
layout.createParallelGroup(org.jdesktop.layout.GroupLayout.LEADING)
.add(0, 300, Short.MAX_VALUE)
.add(layout.createSequentialGroup()
.add(jPanel1, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, org.jdesktop.layout.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.UNRELATED)
.add(configureButton)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(testButton)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(runButton)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED, 80, Short.MAX_VALUE)
.add(helpButton)
.addPreferredGap(org.jdesktop.layout.LayoutStyle.RELATED)
.add(quitButton))
.add(jScrollPane1, org.jdesktop.layout.GroupLayout.DEFAULT_SIZE, 300, Short.MAX_VALUE)
);
pack();
}// </editor-fold>//GEN-END:initComponents
private void runButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_runButtonActionPerformed
//Get subject number and initials for next subject
StringBuffer initials = new StringBuffer(ExperimentStartDialogue.MAX_CHARS);
StringBuffer subjectNumber = new StringBuffer(ExperimentStartDialogue.MAX_DIGITS);
boolean isStart = ExperimentStartDialogue.showDialogue(this, initials, subjectNumber);
// don't start experiment if we hit 'cancel'
if (isStart == false) {
return;
}
initials.trimToSize();
subjectNumber.trimToSize();
getExperiment().run(Integer.parseInt(subjectNumber.toString()),initials.toString());
this.setVisible(false);
}//GEN-LAST:event_runButtonActionPerformed
private void quitButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_quitButtonActionPerformed
System.exit(0);
}//GEN-LAST:event_quitButtonActionPerformed
private void configureButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_configureButtonActionPerformed
getExperiment().showConfigureFrame(true);
}//GEN-LAST:event_configureButtonActionPerformed
private void testButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_testButtonActionPerformed
getExperiment().test();
this.setVisible(false);
}//GEN-LAST:event_testButtonActionPerformed
private void helpButtonActionPerformed(java.awt.event.ActionEvent evt) {//GEN-FIRST:event_helpButtonActionPerformed
helpFrame.setVisible(true);
}//GEN-LAST:event_helpButtonActionPerformed
// Variables declaration - do not modify//GEN-BEGIN:variables
private javax.swing.JButton configureButton;
private javax.swing.JButton helpButton;
private javax.swing.JEditorPane htmlPane;
private javax.swing.JPanel jPanel1;
private javax.swing.JScrollPane jScrollPane1;
private javax.swing.JButton quitButton;
private javax.swing.JButton runButton;
private javax.swing.JButton testButton;
// End of variables declaration//GEN-END:variables
private void setExperiment(Experiment constructExperiment) {
this.myExperiment = constructExperiment;
}
}