Mercurial > hg > mep
view ExperimentController.java @ 2:1fe7ac28a3ca
Save results after each presentation.
Ignore-this: 5f7d744b55a2f8919f7807bf69fa3d1a
author | Marcus Pearce <m.pearce@gold.ac.uk> |
---|---|
date | Mon, 14 Jun 2010 13:28:18 +0100 |
parents | 4031cbb02f08 |
children | 5080b65e6963 |
line wrap: on
line source
/*============================================================================= * File: ExperimentController.java * Author: Marcus Pearce <m.pearce@gold.ac.uk> * Created: <2007-12-14 12:06:10 marcusp> * Time-stamp: <2010-06-14 13:20:03 marcusp> *============================================================================= */ import java.awt.*; import java.awt.event.*; import javax.swing.*; public class ExperimentController implements ActionListener, KeyListener { /* variables */ ExperimentGui gui; Experiment exp; SubjectResults results; InstructionsPanel ip; StimulusPanel sp; SubjectDataPanel sdp; InterBlockPanel ibp; /* constructor */ public ExperimentController(ExperimentGui eg) { gui = eg; exp = gui.getExperiment(); results = exp.getSubjectResults(); ip = gui.getInstructionsPanel(); ibp = gui.getInterBlockPanel(); sp = gui.getStimulusPanel(); sdp = gui.getSubjectDataPanel(); ip.addNextButtonListener(this); sp.addAllListeners(this); sdp.addFinishButtonListener(this); ibp.addContinueButtonListener(this); sp.setFocusable(true); sp.addKeyListener(this); sp.addAllKeyListeners(this); gui.setFocusable(true); gui.addKeyListener(this); } /* report erroneous input */ protected void reportError (String msg) { JOptionPane.showMessageDialog (gui, msg); } /* actionPerformed */ public void actionPerformed(ActionEvent e) { long time = System.nanoTime(); Object source = e.getSource(); ip = gui.getInstructionsPanel(); ibp = gui.getInterBlockPanel(); sp = gui.getStimulusPanel(); sdp = gui.getSubjectDataPanel(); Block block = exp.getCurrentBlock(); // InstructionsPanel if (source == ip.getNextButton()) { int subjID = ip.getSubjectID(); if (subjID == ip.INVALID_SUBJECT_ID || subjID < 1) reportError("The Participant ID should be a positive integer."); // TODO: check that subjID doesn't already exist else { exp.setSubjectID(subjID); gui.showCard("stimulus"); exp.runExperiment(); } } // InterBlockPanel else if (source == ibp.getContinueButton()) { block.initialiseBlock(); sp.setSongNumberText(); sp.defaultAnswers(); gui.setAcceptingResponses(false); gui.showCard("stimulus"); exp.runExperiment(); } // SubjectDataPanel else if (e.getSource() == sdp.getFinishButton()) { if (sdp.allDataEntered()) { sdp.storeData(); results.writeSubjectData(); System.exit(0); } else reportError("You have not filled in all the information."); } // StimulusPanel else if (source == sp.getPlayButton()) { // if (!exp.isRunning() && !exp.hasRun()) // exp.runExperiment(); // else // reportError("You have already played the melody."); } else if (source == sp.getNextButton()) { if (!exp.hasRun() || exp.isRunning()) reportError("You haven't finished playing the melody yet."); else if (sp.unansweredQuestions()) reportError("There are unanswered questions."); else { // store results (and write to file) String answer1 = (String)(sp.getQ1Box().getSelectedItem()); String answer2 = (String)(sp.getQ2Box().getSelectedItem()); block.addMelodyQA("known", answer1); block.addMelodyQA("liked", answer2); block.storeMelodyResult(); results.writeResults(); // proceed to ... String nextFile = block.nextFile(); if (nextFile == null) { boolean nb = exp.nextBlock(); if (nb) { // ... next block of trials gui.getInterBlockPanel().setText(); gui.getInterBlockPanel().updateMessageDisplay(); gui.showCard("interblock"); } else { // ... write results and subject questionnaire results.writeResults(); gui.showCard("subject"); } } else { // ... next melody within block sp.setSongNumberText(); sp.defaultAnswers(); gui.setAcceptingResponses(false); block.initialiseBlock(); exp.runExperiment(); } } } else { JButton[] rButtons = sp.getResponseButtons(); for (int i = 0; i < rButtons.length; i++) { if (source == rButtons[i] && (exp.isRunning() || exp.hasRun()) && gui.getAcceptingResponses()) { block.addResponse(i+1, time); gui.setAcceptingResponses(false); } } } } public void keyPressed(KeyEvent e) { //System.out.println("Key pressed: " + e.getKeyChar()); long time = System.nanoTime(); Block block = exp.getCurrentBlock(); sp = gui.getStimulusPanel(); JButton[] rButtons = sp.getResponseButtons(); for (int i = 0; i < rButtons.length; i++) { if ((exp.isRunning() || exp.hasRun()) && gui.getAcceptingResponses()) { //System.out.println("Char = " + Character.forDigit(i+1, 10)); if (e.getKeyChar() == Character.forDigit(i+1, 10)) { //System.out.println("Got rating: " + (i + 1)); block.addResponse(i+1, time); gui.setAcceptingResponses(false); } //else // block.addResponse(0, time); } } } public void keyReleased(KeyEvent e) { // System.out.println("Key released: " + e.getKeyChar()); } public void keyTyped(KeyEvent e) { //System.out.println("Key typed: " + e.getKeyChar()); } }