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

public class FrameFromVariable extends WizCard 
 {
  Choice objectChoice;
  TextField tText;
  TextField name;

  Universe u;
  
  public FrameFromVariable(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."),
        Util.ENDL); 

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

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

    Util.add(this,
        new Label("Proper time at frame origin: "),
        Util.DEFAULT); 

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

    Util.add(this,
        new Label("Frame name: "),
        Util.DEFAULT); 

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

    int i;

    for (i = 0; i < u.variableObjects.size(); i++) 
      objectChoice.add(u.variableAt(i).name);
   }

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

    PhysicalObject obj = u.variableAt(i);
     
    double t;

    try
     {
      t = Util.doubleValue(tText);
     }
    catch (NumberFormatException e)
      {
       System.out.println("Error: proper time must be a number");
       return;
      }

    if (!obj.existsAt(t))
     {
      System.out.println("Error: object does not exist at this time!");
      return;
     } 

    ReferenceFrame frame = new ReferenceFrame(obj.location(t),obj.velocity(t));
    frame.name = name.getText();
    u.addFrame(frame);
    w.reset();
   }
 }
