import javax.swing.JDialog;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.JLabel;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JRadioButton;
import javax.swing.ButtonGroup;

import java.awt.event.ActionListener;
import java.awt.event.ItemListener;
import java.awt.event.ActionEvent;
import java.awt.GridLayout;
import java.awt.event.WindowAdapter;
import java.awt.event.ItemEvent;
import java.awt.event.WindowEvent;

public class TransDialog extends JDialog  {
  JButton apply;
  final SimpleGeometry callback;
  JRadioButton rdRot;
  //JRadioButton rdEuler;
  JRadioButton rdCenter;
  JCheckBox chkInc;
  int transID = 0;
  JTextField tfXrot;
  JTextField tfYrot;
  JTextField tfZrot;
  JTextField tfXtransl;
  JTextField tfYtransl;
  JTextField tfZtransl;
  boolean bIncremental;

  public TransDialog (SimpleGeometry simpleGeom) {
    super();
    this.callback = simpleGeom;
    this.getContentPane().setLayout(new GridLayout(1, 1, 2, 2));
    this.setVisible(false);
    this.addWindowListener(new WindowAdapter() {
      public void windowClosing(WindowEvent evt) {
        TransDialog.this.setVisible(false);
      }
    });

    apply = new JButton("Apply");

    ActionListener actListener = new ActionListener() {
      public void actionPerformed(ActionEvent evt) {
         JButton button = (JButton) evt.getSource();
         if (button == apply) {
            double xRot = getTextFieldValue(tfXrot);
            double yRot = getTextFieldValue(tfYrot);
            double zRot = getTextFieldValue(tfZrot);
            double xTransl = getTextFieldValue(tfXtransl);
            double yTransl = getTextFieldValue(tfYtransl);
            double zTransl = getTextFieldValue(tfZtransl);
            callback.doTransforms(transID,xRot,yRot,zRot,xTransl,yTransl,zTransl,bIncremental);
         } else {

         }
       }
    };

    ItemListener lstCheckBox = new ItemListener() {
      public void itemStateChanged(ItemEvent evt) {

       if(evt.getSource() == rdRot) {
              if(rdRot.isSelected()) transID = SimpleGeometry.LOCALROTATION;
       } else
       if(evt.getSource() == chkInc) {
          if(chkInc.isSelected()) bIncremental = true;
            else bIncremental = false;
       } else if(evt.getSource() == rdCenter) {
           transID = SimpleGeometry.GLOBALROTATION;
       }
     }

    };

    rdRot = new JRadioButton();
    rdCenter = new JRadioButton();
    ButtonGroup transGrp = new ButtonGroup();
    transGrp.add(rdRot);
    transGrp.add(rdCenter);

    chkInc = new JCheckBox();

    rdRot.addItemListener(lstCheckBox);
    chkInc.addItemListener(lstCheckBox);
    rdCenter.addItemListener(lstCheckBox);

    rdRot.setSelected(false);
    chkInc.setSelected(true);
    rdCenter.setSelected(true);

    JPanel panel = new JPanel();
    panel.setLayout(new GridLayout(ROWS, COLUMNS, 2, 2));
    apply.addActionListener(actListener);
    JLabel label1 = new JLabel("Local");
    JLabel label2 = new JLabel("Global ");
    JLabel label3 = new JLabel("Incremental");

    panel.add(label1);
    panel.add(label2);
    panel.add(label3);

    panel.add(rdRot);
    panel.add(rdCenter);
    panel.add(chkInc);

    JLabel labelRX = new JLabel("rotX");
    JLabel labelRY = new JLabel("rotY");
    JLabel labelRZ = new JLabel("rotZ");

    JLabel labelTX = new JLabel("translX");
    JLabel labelTY = new JLabel("translY");
    JLabel labelTZ = new JLabel("translZ");

    tfXrot = new JTextField();
    tfYrot = new JTextField();
    tfZrot = new JTextField();

    tfXtransl = new JTextField();
    tfYtransl = new JTextField();
    tfZtransl = new JTextField();

    JPanel panelInput = new JPanel();
    panelInput.setLayout(new GridLayout(4, 3, 2, 2));
    panelInput.add(labelRX);
    panelInput.add(labelRY);
    panelInput.add(labelRZ);

    panelInput.add(tfXrot);
    panelInput.add(tfYrot);
    panelInput.add(tfZrot);

    panelInput.add(labelTX);
    panelInput.add(labelTY);
    panelInput.add(labelTZ);

    panelInput.add(tfXtransl);
    panelInput.add(tfYtransl);
    panelInput.add(tfZtransl);
   
    //panel.add(apply);
    JPanel mainPanel = new JPanel ();
    mainPanel.setLayout(new GridLayout(3, 1, 2, 2));
    mainPanel.add(panel);
    mainPanel.add(panelInput);
    mainPanel.add(apply);
    this.getContentPane().add (mainPanel);
    this.pack();
  }

  double getTextFieldValue(JTextField tf) {
    String str = tf.getText();
    if(str.length() == 0) return 0.0;
    Double val = Double.valueOf(str);
    return val.doubleValue();
  }

  protected static final int ROWS = 2;
  protected static final int COLUMNS = 3;
}

