/* ControlPanel is the user interface for the Launcher rocket simulation  */ 

import java.awt.*; 

public class ControlPanel extends Panel 

{  Label DL,ML,CdL,ImL,ThL,DlL,ChL,StatusL,TmL,AltL,VelL,AccL; 
   TextField DT,MT,CdT,ImT,ThT,DlT,ChT,TmT,AltT,VelT,AccT; 
   Button LaunchB; 
   boolean prepped, launched; 
   Launcher L; 

   ControlPanel(Launcher parent) 

   {  L = parent; 

      setLayout(new GridLayout(6,4,5,10));

      DL = new Label("Diam (mm)", Label.RIGHT); 
      ML = new Label("Empty Mass (g)", Label.RIGHT); 
      CdL = new Label("Drag Coef", Label.RIGHT); 
      ImL = new Label("Impulse (N-s)", Label.RIGHT); 
      ThL = new Label("Thrust (N)", Label.RIGHT); 
      DlL = new Label("Chute Delay (s)", Label.RIGHT); 
      ChL = new Label("Chute Diam (mm)", Label.RIGHT); 
      DT = new TextField(10); 
      MT = new TextField(10); 
      CdT = new TextField(10); 
      ImT = new TextField(10); 
      ThT = new TextField(10); 
      DlT = new TextField(10); 
      ChT = new TextField(10); 

      add(DL); 
      add(DT); 
      add(ML); 
      add(MT); 
      add(CdL); 
      add(CdT); 
      add(ImL); 
      add(ImT); 
      add(ThL);
      add(ThT); 
      add(DlL); 
      add(DlT); 
      add(ChL); 
      add(ChT); 

      StatusL = new Label("Enter Values", Label.CENTER); 
      StatusL.setBackground(Color.red); 
      StatusL.setForeground(Color.yellow); 
      add(StatusL); 
      LaunchB = new Button("Launch"); 
      add(LaunchB); 

      TmL = new Label("Time", Label.CENTER); 
      AltL = new Label("Altitude", Label.CENTER); 
      VelL = new Label("Speed", Label.CENTER); 
      AccL = new Label("Accleration", Label.CENTER); 
      TmT = new TextField(10); 
      TmT.setEditable(false); 
      AltT = new TextField(10); 
      AltT.setEditable(false);
      VelT = new TextField(10); 
      VelT.setEditable(false);
      AccT = new TextField(10); 
      AccT.setEditable(false);
      add(TmL); 
      add(AltL);
      add(VelL);
      add(AccL);
      add(TmT); 
      add(AltT); 
      add(VelT); 
      add(AccT); 
   }  

   public boolean action(Event evt, Object arg) 
   
   {  if (evt.target == TmT) 
         L.report(launched); 
      else if ((evt.target == LaunchB) && prepped) 
         L.launch();   
      else if (evt.target instanceof TextField) 
      {  L.update((TextField)evt.target); 
         prepped = checkPrepped();  
      }  
      return(true);  
   }  

   public boolean lostFocus(Event evt, Object arg) 

   {  if (evt.target == TmT);  
      else if (evt.target instanceof TextField)  
      {  L.update((TextField)evt.target); 
         prepped = checkPrepped();  
      }
      return(true);  
   }  

   void statusPrepped() 

   {  StatusL.setBackground(Color.green); 
      StatusL.setForeground(Color.black); 
      StatusL.setText("Go For Launch");  
   }       

   void statusPrepping() 

   {  StatusL.setBackground(Color.red); 
      StatusL.setForeground(Color.yellow); 
      StatusL.setText("Prepping");  
   }  

   void statusLaunched() 

   {  StatusL.setBackground(Color.black); 
      StatusL.setForeground(Color.yellow); 
      StatusL.setText("Launched!");  
   }  

   boolean checkPrepped() 

   {  boolean p;  

      p  = DT.getText().length() > 0; 
      p &= MT.getText().length() > 0; 
      p &= CdT.getText().length() > 0; 
      p &= ImT.getText().length() > 0; 
      p &= ThT.getText().length() > 0; 
      p &= DlT.getText().length() > 0; 
      p &= ChT.getText().length() > 0; 
      if (p) statusPrepped(); 
      else statusPrepping(); 
      return(p); 
   }  


}