diff ExperimentController.java @ 0:4031cbb02f08

Initial import. Ignore-this: 87317e384f22bde48db996355191fa5f
author Marcus Pearce <m.pearce@gold.ac.uk>
date Tue, 18 May 2010 11:37:10 +0100
parents
children 1fe7ac28a3ca
line wrap: on
line diff
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/ExperimentController.java	Tue May 18 11:37:10 2010 +0100
@@ -0,0 +1,179 @@
+/*=============================================================================
+ * File:       ExperimentController.java
+ * Author:     Marcus Pearce <m.pearce@gold.ac.uk>
+ * Created:    <2007-12-14 12:06:10 marcusp>
+ * Time-stamp: <2010-05-18 10:51:31 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 
+                String answer1 = (String)(sp.getQ1Box().getSelectedItem()); 
+                String answer2 = (String)(sp.getQ2Box().getSelectedItem()); 
+                block.addMelodyQA("known", answer1); 
+                block.addMelodyQA("liked", answer2); 
+                block.storeMelodyResult(); 
+                // 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());
+    }
+}