/* ControlPanel class for YHang applet */
/* Simeon Warner - 20May96 */

import java.awt.*;

public class ControlPanel extends Panel {
  int[] predefinedAngles = { 60, 90, 120, 170 };
  Button preset0, preset1, preset2, preset3;
  TextField angleField, weightField;
  Simulation simulation;

  ControlPanel() {
    int j;

    //Can set background here:
    //setBackground(Color.white);

    setLayout(new GridLayout(6,2,5,5));

    preset0 = new Button(String.valueOf(predefinedAngles[0]));
    preset1 = new Button(String.valueOf(predefinedAngles[1]));
    preset2 = new Button(String.valueOf(predefinedAngles[2]));
    preset3 = new Button(String.valueOf(predefinedAngles[3]));

    angleField = new TextField("",10);
    weightField = new TextField("",10);

    add(new Label("Presets (deg)", Label.RIGHT));
    add(preset0);
    add(new Label(""));
    add(preset1);
    add(new Label(""));
    add(preset2);
    add(new Label(""));
    add(preset3);

    add(new Label("Angle (deg)", Label.RIGHT));
    add(angleField);
    add(new Label("Weight (N)", Label.RIGHT));
    add(weightField);
  }

  public void init(Simulation s) {
    simulation = s;
  }

  public Insets insets() {
    return new Insets(10,10,0,0);
  }

  public void setWeight(float weight) {
    weightField.setText(String.valueOf(weight));
  }

  public void setAngle(float angle) {
    angleField.setText(String.valueOf(angle));
  }

  public boolean action(Event evt, Object arg) {
    float a;
    if (evt.target == angleField) {
      try {
        a=Float.valueOf(angleField.getText()).floatValue();
      } catch (NumberFormatException e) {
        a=(float)90.0;
      } 
      // clip max and min 
      if (a<(float)1.0)  a=(float)1.0;
      else if (a>(float)180.0) a=(float)180.0;
      // set in simulation and display
      simulation.setAngle(a);
      angleField.setText(String.valueOf(a));
      return true;
    } else if (evt.target == weightField) {
      try {
        a=Float.valueOf(weightField.getText()).floatValue();
      } catch (NumberFormatException e) {
        a=(float)1.0;
      } 
      // clip max and min
      if (a<(float)1.0) a=(float)1.0;
      else if (a>(float)1000000.0) a=(float)1000000.0;
      // set weight in simulation and display
      simulation.setWeight(a);
      weightField.setText(String.valueOf(a));
      return true;
    } else {
      if (evt.target instanceof Button) {
        if (evt.target == preset0) {
          this.angleField.setText(String.valueOf(predefinedAngles[0]));
          simulation.setAngle((float)predefinedAngles[0]);
        }
        if (evt.target == preset1) {
          this.angleField.setText(String.valueOf(predefinedAngles[1]));
          simulation.setAngle((float)predefinedAngles[1]);
        }
        if (evt.target == preset2) {
          this.angleField.setText(String.valueOf(predefinedAngles[2]));
          simulation.setAngle((float)predefinedAngles[2]);
        }
        if (evt.target == preset3) {
          this.angleField.setText(String.valueOf(predefinedAngles[3]));
          simulation.setAngle((float)predefinedAngles[3]);
        }
        return true;
      }
      else return false;
    }
  }
  
} /* end of Controls */











