package InterfGraph;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.FocusEvent;
import java.awt.event.FocusListener;
import java.awt.event.MouseWheelEvent;
import java.awt.event.MouseWheelListener;

import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JSlider;
import javax.swing.JTextField;
import javax.swing.event.CaretEvent;
import javax.swing.event.CaretListener;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;

public class ControlPanel extends JPanel
{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;

	private JSlider glissiereRouge = new JSlider(),
			glissiereVerte = new JSlider(),
			glissiereBleue = new JSlider();
	
	private JLabel labelRouge = new JLabel("Rouge"),
			labelVert = new JLabel("Vert"),
			labelBleu = new JLabel("Bleu"),
			labelTexte = new JLabel ("Taille : 0");
	
	private JTextField monTexte = new JTextField();
	
	private EcouteGlissiere monEcouteGlissiere = new EcouteGlissiere();
	private EcouteTexte monEcouteTexte = new EcouteTexte();
	private EcouteCaret monEcouteCaret = new EcouteCaret();
	private EcouteFocus monEcouteFocus = new EcouteFocus();
	private EcouteMolette monEcouteMolette = new EcouteMolette();
	
	private ColorPanel monColorPanel;
	
	public ControlPanel(ColorPanel pColorPanel)
	{
		super();
		this.monColorPanel = pColorPanel;
		glissiereRouge.addChangeListener(monEcouteGlissiere);
		glissiereRouge.addFocusListener(monEcouteFocus);
		glissiereVerte.addChangeListener(monEcouteGlissiere);
		glissiereVerte.addFocusListener(monEcouteFocus);
		glissiereBleue.addChangeListener(monEcouteGlissiere);
		glissiereBleue.addFocusListener(monEcouteFocus);
		
		glissiereRouge.setMaximum(300);
		glissiereVerte.setMaximum(255);
		glissiereBleue.setMaximum(255);
		
		glissiereRouge.setMajorTickSpacing(50);
		glissiereRouge.setMinorTickSpacing(10);
		glissiereVerte.setMajorTickSpacing(50);
		glissiereVerte.setMinorTickSpacing(10);
		glissiereBleue.setMajorTickSpacing(50);
		glissiereBleue.setMinorTickSpacing(10);
		glissiereRouge.setPaintLabels(true);
		glissiereRouge.setPaintTicks(true);
		
		glissiereVerte.setOrientation(JSlider.HORIZONTAL);
		
		monTexte.addActionListener(monEcouteTexte);
		monTexte.addCaretListener(monEcouteCaret);
		monTexte.addFocusListener(monEcouteFocus);
		monTexte.addMouseWheelListener(monEcouteMolette);
		
		//this.setPreferredSize(new Dimension(200, 150));
		this.setLayout(new GridLayout(4, 2));
		this.add(labelRouge);
		this.add(glissiereRouge);
		this.add(labelVert);
		this.add(glissiereVerte);
		this.add(labelBleu);
		this.add(glissiereBleue);
		this.add(labelTexte);
		this.add(monTexte);
	}
	
	private class EcouteGlissiere implements ChangeListener
	{
		@Override
		public void stateChanged(ChangeEvent arg0)
		{
			if (arg0.getSource() == glissiereRouge)
			{
				//System.out.println("Rouge " + glissiereRouge.getValue());
				monColorPanel.setRouge(glissiereRouge.getValue());
			}
			else if (arg0.getSource() == glissiereVerte)
			{
				monColorPanel.setVert(glissiereVerte.getValue());
				//System.out.println("Glissière verte : " + glissiereVerte.getValue());
			}
			else if (arg0.getSource() == glissiereBleue)
			{
				monColorPanel.setBleu(glissiereBleue.getValue());
			}
		}		
	}
	
	private class EcouteTexte implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent arg0)
		{
			if (arg0.getSource() == monTexte)
			{
				System.out.println("Action : " + monTexte.getText());
			}
		}
	}
	
	private class EcouteCaret implements CaretListener
	{

		@Override
		public void caretUpdate(CaretEvent e)
		{
			
			// TODO Auto-generated method stub
			if (e.getSource() == monTexte)
			{
				//System.out.println("Caret : " + monTexte.getText());
				labelTexte.setText("Taille : " + monTexte.getText().length());
			}
		}
	}
	
	private class EcouteFocus implements FocusListener	
	{

		@Override
		public void focusGained(FocusEvent arg0)
		{
			// TODO Auto-generated method stub
			if (arg0.getSource() == monTexte)
			{
				monTexte.setBackground(Color.yellow);
			}
			else if (arg0.getSource() == glissiereRouge)
			{
				glissiereRouge.setPaintLabels(true);
				glissiereRouge.setPaintTicks(true);
			}
			else if (arg0.getSource() == glissiereVerte)
			{
				glissiereVerte.setPaintLabels(true);
				glissiereVerte.setPaintTicks(true);
			}
			else if (arg0.getSource() == glissiereBleue)
			{
				glissiereBleue.setPaintLabels(true);
				glissiereBleue.setPaintTicks(true);
			}
		}

		@Override
		public void focusLost(FocusEvent arg0)
		{
			// TODO Auto-generated method stub
			if (arg0.getSource() == monTexte)
			{
				monTexte.setBackground(Color.cyan);
			}
			else if (arg0.getSource() == glissiereRouge)
			{
				glissiereRouge.setPaintLabels(false);
				glissiereRouge.setPaintTicks(false);
			}
			else if (arg0.getSource() == glissiereVerte)
			{
				glissiereVerte.setPaintLabels(false);
				glissiereVerte.setPaintTicks(false);
			}
			else if (arg0.getSource() == glissiereBleue)
			{
				glissiereBleue.setPaintLabels(false);
				glissiereBleue.setPaintTicks(false);
			}
		}
	}
	
	private class EcouteMolette implements MouseWheelListener
	{

		@Override
		public void mouseWheelMoved(MouseWheelEvent arg0)
		{
			// TODO Auto-generated method stub
			if (arg0.getSource() == monTexte)
			{
				if (arg0.getWheelRotation() > 0)
				{
					System.out.println("Molette sur texte avance de " + arg0.getScrollAmount());
				}
				else
				{
					System.out.println("Molette sur texte recule de " + arg0.getScrollAmount());
				}
			}
		}
	}
}
