package Code.graphics.GestureProgrammer.GestureProgrammerUtils; import java.util.concurrent.TimeUnit; import java.awt.Color; import java.awt.event.ActionListener; import java.awt.event.ActionEvent; import java.lang.reflect.InvocationTargetException; import javax.swing.JFrame; import javax.swing.JButton; import javax.swing.SwingUtilities; import javax.swing.JPanel; import javax.swing.BoxLayout; import javax.swing.Box; import javax.swing.border.LineBorder; import edu.cmu.ri.createlab.userinterface.component.DatasetPlotter; import org.jdesktop.layout.GroupLayout; /** * Created by IntelliJ IDEA. * User: Styler * Date: Feb 17, 2009 * Time: 3:45:43 PM */ public class GestureProgrammerView extends JFrame { public enum State { RECORDING, PLAYING, CALIBRATING, IDLE, QUIT } //Stores the state of the programmer private static State state = State.IDLE; //Creates the accelerometer plotter final DatasetPlotter<Double> accelerometerPlotter = new DatasetPlotter<Double>(-1.5, 1.5, 300, 300, 10, TimeUnit.MILLISECONDS); final JButton playButton = new JButton("Play"); final JButton recordButton = new JButton("Record"); final JButton calibrateButton = new JButton("Calibrate"); final JButton quitButton = new JButton("Quit"); //Create the sim finch panel for displaying wheel velocities final FinchSimViewPanel viewPanel = new FinchSimViewPanel(); public GestureProgrammerView() throws InterruptedException { //Create this Jframe super("Gesture Programmer"); //Create datasets for 0,1,x,y,z accelerometerPlotter.setBackgroundColor(Color.WHITE); accelerometerPlotter.addDataset(Color.LIGHT_GRAY); accelerometerPlotter.addDataset(Color.LIGHT_GRAY); accelerometerPlotter.addDataset(Color.RED); accelerometerPlotter.addDataset(Color.GREEN); accelerometerPlotter.addDataset(Color.BLUE); try { SwingUtilities.invokeAndWait( new Runnable() { public void run() { //create main panels final JPanel mainPanel = new JPanel(); final JPanel buttonPanel = new JPanel(); //Control buttons //False until a program is recorded playButton.setEnabled(false); accelerometerPlotter.getComponent().setBorder(new LineBorder(Color.BLACK, 1)); //Add the main panel to view frame and add child components add(mainPanel); mainPanel.add(viewPanel); mainPanel.add(buttonPanel); mainPanel.add(accelerometerPlotter.getComponent()); //Layout the main frame GroupLayout layout = new GroupLayout(mainPanel); mainPanel.setLayout(layout); layout.setAutocreateGaps(true); layout.setAutocreateContainerGaps(true); GroupLayout.SequentialGroup vGroup = layout.createSequentialGroup(); vGroup.add(layout.createParallelGroup(). add(viewPanel).add(accelerometerPlotter.getComponent())); vGroup.add(buttonPanel); layout.setVerticalGroup(vGroup); GroupLayout.ParallelGroup hGroup = layout.createParallelGroup(); hGroup.add(layout.createSequentialGroup(). add(viewPanel).add(accelerometerPlotter.getComponent())); hGroup.add(buttonPanel); layout.setHorizontalGroup(hGroup); //Layout the buttons of the button panel buttonPanel.setLayout(new BoxLayout(buttonPanel, BoxLayout.X_AXIS)); buttonPanel.add(recordButton); buttonPanel.add(playButton); buttonPanel.add(Box.createGlue()); buttonPanel.add(calibrateButton); buttonPanel.add(quitButton); playButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (playButton.getText().equals("Play")) { state = State.PLAYING; updateView(); } else if (playButton.getText().equals("Stop")) { state = State.IDLE; updateView(); } } }); recordButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { if (recordButton.getText().equals("Record")) { state = State.RECORDING; updateView(); } else if (recordButton.getText().equals(" Stop ")) { state = State.IDLE; updateView(); } } }); calibrateButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { state = State.CALIBRATING; updateView(); } }); quitButton.addActionListener(new ActionListener() { public void actionPerformed(final ActionEvent e) { state = State.QUIT; } }); pack(); setVisible(true); } }); } catch (InvocationTargetException x) { System.err.println(x); state = State.QUIT; } catch (InterruptedException x) { System.err.println(x); state = State.QUIT; } } public void updateAccelerations(final double[] accelerometerState) { accelerometerPlotter.setCurrentValues(0.0, 1.0, accelerometerState[0], accelerometerState[1], accelerometerState[2]); } public State getProgrammerState() { return this.state; } public void setProgrammerState(State state) { this.state = state; updateView(); } public void updateView() { playButton.setText(state == State.PLAYING ? "Stop" : "Play"); calibrateButton.setText(state == State.CALIBRATING ? "Calibrating..." : " Calibrate "); recordButton.setText(state == State.RECORDING ? " Stop " : "Record"); playButton.setEnabled(state == State.IDLE || state == State.PLAYING); recordButton.setEnabled(state == State.IDLE || state == State.RECORDING); calibrateButton.setEnabled(state == State.IDLE); } public void updateSim(double left, double right, Color beak) { viewPanel.update(left,right,beak); } }