import java.awt.*;
import java.awt.event.*;
import WizCard;
import Util;

public class FrameFromFrame extends WizCard 
 {
  Choice frameChoice;
  TextField tText, xText, vText;
  TextField name;

  Universe u;
  
  public FrameFromFrame(Wizard w, Universe u)
   {
    super(w);
    this.u = u;
    isFinal = true;  // Done! instead of next>>

    setLayout(new GridBagLayout());

    Util.add(this,
        new Label("Please specify the following parameters for the new frame F."),
        Util.ENDL); 

    Util.add(this,
        new Label("Reference frame F0: "),
        Util.DEFAULT); 

    Util.add(this,
        frameChoice = new Choice(),
        Util.ENDL);

    Util.add(this,
        new Label("x-coordinate of F's origin in frame F0: "),
        Util.DEFAULT); 

    Util.add(this,
        xText = new TextField("0.0",10),
        Util.ENDL);

    Util.add(this,
        new Label("t-coordinate of F's origin in frame F0: "),
        Util.DEFAULT); 

    Util.add(this,
        tText = new TextField("0.0",10),
        Util.ENDL);

    Util.add(this,
        new Label("velocity of F with respect to F0: "),
        Util.DEFAULT); 

    Util.add(this,
        vText = new TextField("0.0",10),
        Util.ENDL);

    Util.add(this,
        new Label("Name of frame F: "),
        Util.DEFAULT); 

    Util.add(this,
        name = new TextField("Frame " + Integer.toString(u.frames.size()),40),
        Util.ENDL);

    int i;

    for (i = 0; i < u.frames.size(); i++) 
      frameChoice.add(u.frameAt(i).name);
   }

  public void doNext()
   {
    int i = frameChoice.getSelectedIndex();

    ReferenceFrame f = u.frameAt(i);
     
    double t = 0, x = 0, v = 0;

    try
     {
      t = Util.doubleValue(tText);
      x = Util.doubleValue(xText);
      v = Util.doubleValue(vText);
     }
    catch (NumberFormatException e)
      {
       System.out.println("Error: x,t,v must be numbers");
       return;
      }

    ReferenceFrame frame = new ReferenceFrame(f.location(x,t),f.abs_v(v));
    frame.name = name.getText();
    u.addFrame(frame);
    w.reset();
   }
 }
