
import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.util.*;

public class STapplet extends STfit{

  TextField mwField, mwerrField, sstwField, sstwerrField, 
                        gammalField, gammalerrField;
  Label mwLabel, mwerrLabel, sstwLabel, sstwerrLabel, gammalLabel, 
                         gammalerrLabel, noLabel1, noLabel2;
  static final double mw0 = 80.434;
  static final double mw0err = 0.037;
  static final double sstw0 = 0.23147;
  static final double sstw0err = 0.00018;
  static final double gammal0 = 83.984;
  static final double gammal0err = 0.086;
  double mw, mwerr, sstw, sstwerr, gammal, gammalerr;

  public void setup(){
     setLimits(-0.2, 0.3, -0.4, 0.25);
     setTicks(0.02, 0.02);
     this.setLayout(new BorderLayout());
     Panel P = new Panel();
     P.setLayout(new GridLayout(4,4));
		    //  mw value line
     mwLabel = new Label("mW:");
     P.add(mwLabel);
     mwField = new TextField(" ", 8);
     P.add(mwField);
     mwerrLabel = new Label("    pm   ");
     P.add(mwerrLabel);
     mwerrField = new TextField(" ", 8);
     P.add(mwerrField);
		    //  sstw value line
     sstwLabel = new Label("sin2theta:");
     P.add(sstwLabel);
     sstwField = new TextField(" 0.23147 ", 8);
     P.add(sstwField);
     sstwerrLabel = new Label("    pm   ");
     P.add(sstwerrLabel);
     sstwerrField = new TextField(" 0.00018 ", 8);
     P.add(sstwerrField);
		    //  gammal value line
     gammalLabel = new Label("Gamma_l(Z):");
     P.add(gammalLabel);
     gammalField = new TextField(" 83.984 ", 8);
     P.add(gammalField);
     gammalerrLabel = new Label("    pm   ");
     P.add(gammalerrLabel);
     gammalerrField = new TextField(" 0.086 ", 8);
     P.add(gammalerrField);
     noLabel1 = new Label(" ");
     P.add(noLabel1);
     Button addButton = new Button("add ellipse");
     addButton.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent e){ drawNewCurve();}
     });
     P.add(addButton);
     Button resetButton = new Button("reset");
     resetButton.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent e){ resetvalues();}
     });
     P.add(resetButton);
     Button clearButton = new Button("clear all");
     clearButton.addActionListener(new ActionListener(){
	public void actionPerformed(ActionEvent e){ resetvalues(); repaint();}
     });
     P.add(clearButton);
     this.add(P, "South");
     resetvalues();
  }
	
  public void plot(Graphics g){
     whichColor = 0;
     g.setColor(Color.black);
     horizontalAxis(g);
     verticalAxis(g);
     restorerefvalues();
     addmW(mw0,mw0err);
     addsin2theta(sstw0,sstw0err);
     addGammal(gammal0,gammal0err);
     fit();
     plotContour(g);
     drawHiggsBox(g);
  }

  void drawNewCurve(){
      boolean OK = true;
      try{
       mw  =  new Double(mwField.getText().trim()).doubleValue();
       mwerr  =  new Double(mwerrField.getText().trim()).doubleValue();
       sstw  =  new Double(sstwField.getText().trim()).doubleValue();
       sstwerr  =  new Double(sstwerrField.getText().trim()).doubleValue();
       gammal  =  new Double(gammalField.getText().trim()).doubleValue();
       gammalerr =  new Double(gammalerrField.getText().trim()).doubleValue();
     } catch (NumberFormatException e){
            Graphics g = this.getGraphics();
            g.setColor(Color.white);
            g.fillRect(plotxoffset+20,plotysize-20,plotxsize-30,25);
            g.setColor(Color.black);
            g.drawString(" Values entered in the boxes must be numbers. ", 
			 plotxoffset+25, plotysize);
            g.dispose();
            OK = false;
     }
     if (!OK) return;
     Graphics g = this.getGraphics();
     switchColor(g);
     restorerefvalues();
     addmW(mw,mwerr);
     addsin2theta(sstw,sstwerr);
     addGammal(gammal,gammalerr);
     fit();
     plotContour(g);
     if (contourOutside()){
            g.setColor(Color.white);
            g.fillRect(plotxoffset+20,plotysize-20,plotxsize-30,25);
            g.setColor(Color.black);
            g.drawString(" The new ellipse falls outside the plot. ", 
			 plotxoffset+25, plotysize);
     } else {
            g.setColor(Color.white);
            g.fillRect(plotxoffset+20,plotysize-20,plotxsize-30,25);
     }    
     g.dispose();
  }

  void resetvalues(){
     mwField.setText(" "+mw0+" ");
     mwerrField.setText(" "+mw0err+" ");
     sstwField.setText(" "+sstw0+" ");
     sstwerrField.setText(" 0.00018 ");
     gammalField.setText(" "+gammal0+" ");
     gammalerrField.setText(" "+gammal0err+" ");
  }

}

