import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;
import java.awt.event.*;

/**
 * Panneau de selection des données 
 * modifiables du calcul du CCD
 * @author Delphine Dard
 */
public class SelectionPanel extends JPanel {
    /** L'appleet contenant ce panneau */
    public CCDApplet ccdApplet;
    
    /** Champ de la magnitude */
    public JTextField magnitudeField;
    /** Champ du seeing */
    public JTextField seeingField;
    /** Champ du diametre */
    public JTextField diametreField;
    /** Champ du temps d'integration */
    public JTextField integrationField;
    /** Champ de la focale */
    public JTextField focaleField;
    /** Champ du gain */
    public JTextField gainField;
    /** Champ du nombre de jours */
    public JComboBox jourBox;
    /** Bouton pour voir le resultat */
    public JButton okButton;

    /** Ecouteur du bouton */
    public SelectionListener selectionListener;

    /** Tableau du combobox */
    public String[] jourTab = {"0","3","7","10","14"};

    /**
     * Constructeur
     * @param ccdApplet l'applet parente
     */
    public SelectionPanel(CCDApplet ccdApplet) {
	super();
	this.ccdApplet = ccdApplet;
  
	installComponents();
    }
    
    /**
     * place les composants dans le panneau
     */
    public void installComponents(){
	Border etched = BorderFactory.createEtchedBorder();
	Border titledBorder = BorderFactory.createTitledBorder(etched, "Sélection");
	setBorder(titledBorder);

	GridBagLayout gridBag = new GridBagLayout();
	setLayout(gridBag);
	setBackground(Color.white);
	GridBagConstraints contraintes = new GridBagConstraints();

	contraintes.fill = GridBagConstraints.VERTICAL; 

	selectionListener = new SelectionListener(this);

	//magnitude
	JLabel magnitudeLabel = new JLabel("Magnitude : ");
	contraintes.gridx = 0;
	contraintes.gridy = 1;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(magnitudeLabel, contraintes);
	add(magnitudeLabel);

	magnitudeField = new JTextField(4);
	magnitudeField.setHorizontalAlignment(JTextField.RIGHT); 
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(magnitudeField, contraintes);
	add(magnitudeField);


	//seeing
	JLabel seeingLabel = new JLabel("Seeing (\") : ");
	contraintes.weightx = 0.5;
	contraintes.gridx = 0;
	contraintes.gridy = 2;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(seeingLabel, contraintes);
	add(seeingLabel);

	seeingField = new JTextField(4);
	seeingField.setHorizontalAlignment(JTextField.RIGHT); 
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(seeingField, contraintes);
	add(seeingField);

	//diametre
	JLabel diametreLabel = new JLabel("Diamètre du télescope (m) : ");
	contraintes.weightx = 0.5;
	contraintes.gridx = 0;
	contraintes.gridy = 3;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(diametreLabel, contraintes);
	add(diametreLabel);

	diametreField = new JTextField(4);
	diametreField.setHorizontalAlignment(JTextField.RIGHT); 
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(diametreField, contraintes);
	add(diametreField);

	//Focale
	JLabel focaleLabel = new JLabel("Focale du télescope (m) : ");
	contraintes.weightx = 0.5;
	contraintes.gridx = 0;
	contraintes.gridy = 4;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(focaleLabel, contraintes);
	add(focaleLabel);

	focaleField = new JTextField(4);
	focaleField.setHorizontalAlignment(JTextField.RIGHT); 
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(focaleField, contraintes);
	add(focaleField);

	//Gain
	JLabel gainLabel = new JLabel("Gain (électron/ADU) : ");
	contraintes.weightx = 0.5;
	contraintes.gridx = 0;
	contraintes.gridy = 5;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(gainLabel, contraintes);
	add(gainLabel);

	gainField = new JTextField(4);
	gainField.setHorizontalAlignment(JTextField.RIGHT); 
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(gainField, contraintes);
	add(gainField);

	//Integration
	JLabel integrationLabel = new JLabel("Temps d'intégration (s) : ");
	contraintes.weightx = 0.5;
	contraintes.gridx = 0;
	contraintes.gridy = 6;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(integrationLabel, contraintes);
	add(integrationLabel);

	integrationField = new JTextField(4);
	integrationField.setHorizontalAlignment(JTextField.RIGHT); 
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(integrationField, contraintes);
	add(integrationField);
	

	//Jours
	JLabel jourLabel = new JLabel("Nombre de jours par rapport ");
	JLabel jourLabel2 = new JLabel("à la nouvelle lune : "); 
	contraintes.weightx = 0.5;
	contraintes.gridx = 0;
	contraintes.gridy = 7;
	contraintes.anchor = GridBagConstraints.EAST;
	gridBag.setConstraints(jourLabel, contraintes);
	contraintes.gridy = 8;
	gridBag.setConstraints(jourLabel2, contraintes);
	add(jourLabel);
	add(jourLabel2);

	jourBox = new JComboBox(jourTab);
	jourBox.setSelectedIndex(2);
	contraintes.gridx = 1;
	contraintes.anchor = GridBagConstraints.WEST;
	gridBag.setConstraints(jourBox, contraintes);
	add(jourBox);


	//Ok button
	okButton = new JButton("OK");
	okButton.setMnemonic(KeyEvent.VK_O);
	okButton.addActionListener(selectionListener);
	contraintes.gridx = 0;
	contraintes.gridy = 9;
	contraintes.gridwidth = 2;
	contraintes.anchor = GridBagConstraints.CENTER;
	gridBag.setConstraints(okButton, contraintes);
	add(okButton);
    }

    /**
     * Mets des valeurs dans les champs
     * @param magnitude la magnitude
     * @param seeing le seeing
     * @param diametre le diametre
     * @param integration le temps d'integration
     * @param focale la focale
     * @param gain le gain
     * @param lune le nombre de jours depuis la nouvelle lune
     */
    public void setValeur(float magnitude,
			  float seeing,
			  float diametre,
			  float integration,
			  float focale,
			  float gain,
			  int lune){
	magnitudeField.setText(new Float(magnitude).toString());
	seeingField.setText(new Float(seeing).toString());
	diametreField.setText(new Float(diametre).toString());
	integrationField.setText(new Float(integration).toString());
	focaleField.setText(new Float(focale).toString());
	gainField.setText(new Float(gain).toString());
	boolean ok = false;
	int i = 0;
	while ((!ok) && (i<jourTab.length)) {
	    if (lune == Integer.valueOf(jourTab[i]).intValue()) {
		jourBox.setSelectedIndex(i);
		ok = true;
	    }
	    else {
		i++;
	    }
	}
    }

    /**
     * Transmets les valeurs entrées dans les différents champs
     * (avec verifications)
     */
    public void newValeur(){
	boolean ok = true;
	try{
	    float magnitude = Float.valueOf(magnitudeField.getText()).floatValue();
	    float seeing = Float.valueOf(seeingField.getText()).floatValue();
	    float diametre = Float.valueOf(diametreField.getText()).floatValue();
	    float integration = Float.valueOf(integrationField.getText()).floatValue();
	    float focale = Float.valueOf(focaleField.getText()).floatValue();
	    float gain = Float.valueOf(gainField.getText()).floatValue();
	    
	    if (magnitude < 0) {
		ccdApplet.erreurMessage(CCDApplet.magnitudeMessage);
		ok = false;
	    }
	    if ((seeing < 0.3) || (seeing > 3)) {
		ccdApplet.erreurMessage(CCDApplet.seeingMessage);
		ok = false;
	    }
	    if (diametre < 0) {
		ccdApplet.erreurMessage(CCDApplet.diametreMessage);
		ok = false;
	    }
	    if (integration < 0) {
		ccdApplet.erreurMessage(CCDApplet.integrationMessage);
		ok = false;
	    }
	    if (focale < 0) {
		ccdApplet.erreurMessage(CCDApplet.focaleMessage);
		ok = false;
	    }
	    if (gain < 0) {
		ccdApplet.erreurMessage(CCDApplet.gainMessage);
		ok = false;
	    }
	    if (ok)
		ccdApplet.newValeur(magnitude,
					     seeing,
					     diametre,
					     integration,
					     focale,
					     gain,
					     Integer.valueOf(jourBox.getSelectedItem().toString()).intValue());
	    else
		ccdApplet.setDefaultValeur();
	}
	catch(java.lang.NumberFormatException exception) {
	    JOptionPane.showMessageDialog((Component)ccdApplet, "Ne saisir que des chiffres");
	}
    }
	

}

