
//Title:        Computer Graphics
//Version:      
//Copyright:    Copyright (c) 1998
//Author:       Ashish
//Company:      IITD
//Description:  

package Graphics;

import java.awt.*;
import java.awt.event.*;
import borland.jbcl.layout.*;

public class Lights extends Dialog
{
  Panel panel1 = new Panel();
  Button btnAdd = new Button();
  XYLayout xYLayout1 = new XYLayout();
  List list1 = new List();
  TextField lx = new TextField();
  TextField ly = new TextField();
  TextField lz = new TextField();
  TextField cr = new TextField();
  TextField cg = new TextField();
  TextField cb = new TextField();
  Label label1 = new Label();
  Label label2 = new Label();
  TextField al_r = new TextField();
  TextField al_g = new TextField();
  TextField al_b = new TextField();

  canvas screen;
  Button btnRemove = new Button();
  Button btnAmbient = new Button();
  Label lblColor = new Label();
  TextField txtka = new TextField();
  TextField txtkd = new TextField();
  TextField txtks = new TextField();
  TextField txtns = new TextField();
  Label label3 = new Label();
  Label label4 = new Label();
  Label label5 = new Label();
  Label label6 = new Label();
  Checkbox cbAtten = new Checkbox();
  Checkbox cbLightsEnabled = new Checkbox();
  Checkbox cbSpecularEnabled = new Checkbox();
  Checkbox cbDiffuseEnabled = new Checkbox();

  
  public Lights(Frame frame, String title, boolean modal)
  {
    super(frame, title, modal);
    enableEvents(AWTEvent.WINDOW_EVENT_MASK);
    try 
    {
      jbInit();
      add(panel1);
      pack();
    }
    catch (Exception ex)
    {
      ex.printStackTrace();
    }
  }

  
  public Lights(Frame frame)
  {
    this(frame, "", false);
  }

  
  public Lights(Frame frame, boolean modal)
  {
    this(frame, "", modal);
  }

  
  public Lights(Frame frame, String title)
  {
    this(frame, title, false);
  }

  void jbInit() throws Exception
  {
    panel1.setSize(new Dimension(309, 300));
    xYLayout1.setHeight(368);
    list1.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        list1_actionPerformed(e);
      }
    });
    lx.setText("0");
    ly.setText("0");
    xYLayout1.setWidth(342);
    btnAdd.setLabel("Add Light");
    btnAdd.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        btnAdd_actionPerformed(e);
      }
    });
    lz.setText("300");
    cr.setText("1");
    cg.setText("1");
    cg.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        cg_actionPerformed(e);
      }
    });
    cb.setText("1");
    al_r.setText("0.2");
    al_g.setText("0.2");
    al_b.setText("0.2");
    btnRemove.setLabel("Remove Light");
    btnAmbient.setLabel("Update");
    lblColor.setText("Color :");
    txtka.setText("0.5");
    txtkd.setText("0.7");
    txtks.setText("0.7");
    txtns.setText("5");
    label3.setText("K_a");
    label4.setText("K_d");
    label5.setText("K_s");
    label6.setText("n_s");
    cbAtten.setLabel("Attenuation");
    cbLightsEnabled.setState(true);
    cbLightsEnabled.setLabel("Enable Lights");
    cbSpecularEnabled.setState(true);
    cbSpecularEnabled.setLabel("Enable Specular");
    cbDiffuseEnabled.setState(true);
    cbDiffuseEnabled.setLabel("Enabled Diffused");
    btnAmbient.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        btnAmbient_actionPerformed(e);
      }
    });
    btnRemove.addActionListener(new java.awt.event.ActionListener()
    {
      public void actionPerformed(ActionEvent e)
      {
        btnRemove_actionPerformed(e);
      }
    });
    label1.setText("Position");
    label2.setText("Colour");
    panel1.setLayout(xYLayout1);
    panel1.add(btnAdd, new XYConstraints(18, 16, 90, -1));
    panel1.add(list1, new XYConstraints(18, 76, 102, 135));
    panel1.add(lx, new XYConstraints(134, 43, 45, -1));
    panel1.add(ly, new XYConstraints(132, 72, 46, -1));
    panel1.add(lz, new XYConstraints(133, 104, -1, -1));
    panel1.add(cr, new XYConstraints(210, 43, 35, -1));
    panel1.add(cg, new XYConstraints(210, 72, 35, -1));
    panel1.add(cb, new XYConstraints(209, 103, 36, -1));
    panel1.add(label1, new XYConstraints(132, 14, 60, -1));
    panel1.add(label2, new XYConstraints(208, 17, 50, -1));
    panel1.add(al_r, new XYConstraints(148, 332, 56, -1));
    panel1.add(al_g, new XYConstraints(214, 333, 51, -1));
    panel1.add(al_b, new XYConstraints(272, 334, 53, -1));
    panel1.add(btnRemove, new XYConstraints(16, 44, 95, -1));
    panel1.add(btnAmbient, new XYConstraints(11, 290, 109, -1));
    panel1.add(lblColor, new XYConstraints(23, 214, 91, -1));
    panel1.add(txtka, new XYConstraints(263, 210, 58, -1));
    panel1.add(txtkd, new XYConstraints(264, 239, 57, -1));
    panel1.add(txtks, new XYConstraints(264, 268, 58, -1));
    panel1.add(txtns, new XYConstraints(264, 297, 58, -1));
    panel1.add(label3, new XYConstraints(215, 210, 37, -1));
    panel1.add(label4, new XYConstraints(214, 241, 39, -1));
    panel1.add(label5, new XYConstraints(214, 268, -1, -1));
    panel1.add(label6, new XYConstraints(214, 295, 36, -1));
    panel1.add(cbAtten, new XYConstraints(224, 137, 93, -1));
    panel1.add(cbLightsEnabled, new XYConstraints(10, 260, 110, -1));
    panel1.add(cbSpecularEnabled, new XYConstraints(184, 159, -1, -1));
    panel1.add(cbDiffuseEnabled, new XYConstraints(183, 187, -1, -1));
  }

  protected void processWindowEvent(WindowEvent e)
  {
    if (e.getID() == WindowEvent.WINDOW_CLOSING)
    {
      cancel();
    }
    super.processWindowEvent(e);
  }

  void cancel()
  {
    dispose();
  }

  void fill_list()
  {
    list1.removeAll();
    int i;
    for(i=0;i<screen.scene.nr_lights;i++)
    {
      list1.add(screen.scene.lights[i].light.position.toString());
    }
  }

  void btnAdd_actionPerformed(ActionEvent e)
  {
       Vector pos=new Vector((Double.valueOf(lx.getText())).doubleValue(),(Double.valueOf(ly.getText())).doubleValue(),
                         (Double.valueOf(lz.getText())).doubleValue());
    Vector col=new Vector((Double.valueOf(cr.getText())).doubleValue(),(Double.valueOf(cg.getText())).doubleValue(),
                          (Double.valueOf(cb.getText())).doubleValue());

      screen.scene.lights[screen.scene.nr_lights]=new Object();
      screen.scene.lights[screen.scene.nr_lights++].setLight(pos,col);
      fill_list();
      


  }

  void cg_actionPerformed(ActionEvent e)
  {

  }

  void btnRemove_actionPerformed(ActionEvent e)
  {
    int i=list1.getSelectedIndex();

    if(i<0)
      return;
    int j;
    for(j=i;j<screen.scene.nr_lights-1;j++)
    {
      screen.scene.lights[j]=screen.scene.lights[j+1];
    }
    screen.scene.lights[--screen.scene.nr_lights]=null;

    fill_list();
    

  }

  void btnAmbient_actionPerformed(ActionEvent e)
  {
    screen.scene.ambient_light=new Vector((Double.valueOf(al_r.getText())).doubleValue(),(Double.valueOf(al_g.getText())).doubleValue(),
                         (Double.valueOf(al_b.getText())).doubleValue());

    screen.scene.k_a=(Double.valueOf(txtka.getText())).doubleValue();
    screen.scene.k_d=(Double.valueOf(txtkd.getText())).doubleValue();
    screen.scene.k_s=(Double.valueOf(txtks.getText())).doubleValue();
    screen.scene.n_s=(Double.valueOf(txtns.getText())).doubleValue();
    screen.scene.attenuation=cbAtten.getState();
    screen.scene.lights_enabled=cbLightsEnabled.getState();
    screen.scene.specular_enabled=cbSpecularEnabled.getState();
    screen.scene.diffuse_enabled=cbDiffuseEnabled.getState();
    


  }

  void list1_actionPerformed(ActionEvent e)
  {
        int i=list1.getSelectedIndex();
        lblColor.setText(screen.scene.lights[i].light.get_colour().toString());
        
  }

  void btnAtten_actionPerformed(ActionEvent e) {
    
  }
}

                                                                                       
