package target;


import java.util.*;
import javax.swing.*;
import javax.swing.event.*;
import java.awt.event.*;
import edu.csusb.danby.applet.*;
import edu.csusb.danby.stat.*;
import java.text.NumberFormat;

/**
 * TargetApplet provides a simulation of a bivariate normal distribution.
 *
 * @author    Charles S. Stanton
 * @created    Tue Jul 09 10:02:42 PDT 2002
 */
 public class TargetApplet extends DApplet  {
    private TargetPanel target;
    private HistogramPanel3 hp;
    private TargetModel tm;
    private DFrame frame;
    //private DControlPanel controlPanel;
    private int numberRepetitions=1;
    private HistogramIF hs1, hs2,hs3;
    private JSlider cvSlider;
    private JLabel xc;
    
    private JLabel yc;
    private NumberFormat nf;
    private JTextField correlationField;
    private String[] repetitionString={"1","2","10","20","100"};
    /**
    *  init method for applet
    */
    public void init () {
        //HistogramPanel hp1, hp2, hp3;
        
        tm = new TargetModel();
        target = new TargetPanel(tm);
        hs1 = tm.getXHistogramData();
        hs2 = tm.getYHistogramData();
        hs3 = tm.getXYHistogramData(); 
        
    
        hp =  new HistogramPanel3(tm);
        frame  = new DFrame("Bivariate Normal", target, hp);
        nf = NumberFormat.getNumberInstance();
        nf.setMaximumFractionDigits(3);

/* 
* We now add the controls to frame:
*/

    JMenuBar menuBar= new JMenuBar();
    frame.setJMenuBar(menuBar);
    JMenu file = new JMenu("File");
    menuBar.add(file);
    JMenuItem exit = new JMenuItem("Exit");
    file.add( exit);
    exit.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            frame.dispose();
            }
        });
    JMenu repetitions = new JMenu("Repetitions");
    menuBar.add(repetitions);
    ButtonGroup repGroup = new ButtonGroup();
    JRadioButtonMenuItem[] jmi =
                         new JRadioButtonMenuItem[repetitionString.length];
    for (int i=0; i< jmi.length; i++){
        jmi[i] = new   JRadioButtonMenuItem(repetitionString[i]);
        repetitions.add(jmi[i]);
        repGroup.add(jmi[i]);
        jmi[i].addActionListener(
        new ActionListener() {
            public void actionPerformed(ActionEvent e) {
                numberRepetitions = Integer.parseInt(e.getActionCommand());
            }
        });
    }
    jmi[0].setSelected(true);
    //now set up the control panel
    frame.setControlPanel(new JPanel());
    xc = new JLabel("X=0.0      ");
    yc = new JLabel("Y=0.0      ");
    frame.setControlPanelItem(xc);
    frame.setControlPanelItem(yc);
    JButton play = new JButton("play");
    play.addActionListener(new ActionListener(){
        public void actionPerformed(ActionEvent e){
            tm.play(numberRepetitions);
            target.update();
            hp.update();
            xc.setText("X=" + nf.format(tm.getX()));
            yc.setText("Y=" + nf.format(tm.getY()));
            }
        });
    frame.setControlPanelItem(play);
    JButton clear = new JButton("Clear");
    clear.addActionListener( new ActionListener(){
        public void actionPerformed(ActionEvent e){
            tm.reset();
            hp.update();
            target.update();
            }
        });
    frame.setControlPanelItem(clear);
    correlationField = new JTextField("Correlation = 0.0");
    frame.setControlPanelItem(correlationField);
    cvSlider = new JSlider(SwingConstants.HORIZONTAL, -40, 40, 0);
    cvSlider.addChangeListener(
            new ChangeListener() {
               public void stateChanged(ChangeEvent e) {
                    int value;
                    value = cvSlider.getValue();
                    tm.setCovariance(value / 40.0);
                    //Should be a double
                    correlationField.setText("Correlation=  " + nf.format(value / 40.0));
                    tm.reset();
                    hp.update();
                    target.update();
                }
            });
    frame.setControlPanelItem(cvSlider);
    frame.setSplitDividerLocation(0.5);
    frame.pack();
    frame.validate();    
    }

       

}



