/**
 * 
 */
package normeDeCodage.vue.swing;

import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JTextField;

import tool.regEx.DataNormalizer;
import view.Vue;

/**
 * @author alexis
 *
 */
public class GridBagNorme extends Vue implements ActionListener{

	private static final long serialVersionUID = -229283031693878697L;
	private GridBagConstraints contraint;
	private JPanel panelTop;
	private JPanel panelBottom;
	private JLabel labelDuField;
	private JTextField field;
	private JButton button;
	
	/**
	 * constructeur
	 */
	public GridBagNorme() {
		super(new GridBagLayout());
		initVariable();
		initComponents();
		initListener();
		setMnemonic();
	}
	
	/**
	 * initialise tout les variable
	 */
	private void initVariable(){
		contraint = new GridBagConstraints();
		labelDuField = new JLabel("Label:");
		field = new JTextField();
				//JValidTextField.JValidTextFieldAllowCertainCharacter(new String[]{"A","B","C","D","E"});

		button = new JButton("Ok");
		
		panelTop = new JPanel(new GridBagLayout());
		panelBottom = new JPanel(new GridBagLayout());
	}
	
	/**
	 * initialise tout les components
	 */
	private void initComponents(){
		contraint.fill = GridBagConstraints.HORIZONTAL;
		contraint.weightx = 1.0;
		contraint.weighty = 0.0;
		contraint.gridx = 0;
		contraint.gridy = 0;
		panelTop.add(labelDuField,contraint);
		
		contraint.fill = GridBagConstraints.HORIZONTAL;
		contraint.weightx = 2.0;
		contraint.weighty = 0.0;
		contraint.gridx = 1;
		contraint.gridy = 0;
		panelTop.add(field,contraint);
		
		
		contraint.fill = GridBagConstraints.HORIZONTAL;
		contraint.weightx = 1.0;
		contraint.weighty = 0.0;
		contraint.gridx = 0;
		contraint.gridy = 0;
		panelBottom.add(button,contraint);
		
		
		contraint.fill = GridBagConstraints.HORIZONTAL;
		contraint.weightx = 1.0;
		contraint.weighty = 1.0;
		contraint.gridx = 0;
		contraint.gridy = 0;
		add(panelTop,contraint);
		
		contraint.fill = GridBagConstraints.HORIZONTAL;
		contraint.weightx = 1.0;
		contraint.weighty = 1.0;
		contraint.gridx = 0;
		contraint.gridy = 1;
		add(panelBottom,contraint);
	}
	
	/**
	 * initialise tout les listener
	 */
	private void initListener(){
		button.addActionListener(this);
	}
	
	private void setMnemonic(){
		labelDuField.setDisplayedMnemonic('L');	//rend le label sensible au ALT+L
		labelDuField.setLabelFor(field);		//fais que label va mettre le focuse sur le field au ALT+L
		button.setMnemonic('O');				//rend le button sensible au ALT+O
	}
	
	/* getter */
	
	/**
	 * @return text
	 */
	public String getText(){
		return DataNormalizer.normalize(field.getText());
	}
	
	/* setter */
	
	/**
	 * @param text
	 */
	public void setText(String text){
		field.setText(DataNormalizer.normalize(text));
	}
	
	@Override
	public void actionPerformed(ActionEvent arg0) {
		this.getObservable().notifyObservers(this);
	}

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		JFrame a = new JFrame("window");
		GridBagNorme norme = new GridBagNorme();
		//norme.getObservable().addObserver(new Controleur());
		a.add(norme);
		a.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE);
		a.pack();
		a.setVisible(true);
	}
}