/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Capitulo_6.Dibujo;

/**
 *
 * @author felix
 */

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.Graphics;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.awt.event.MouseMotionListener;
import java.util.ArrayList;
import java.util.List;
import javax.swing.BorderFactory;
import javax.swing.ButtonGroup;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JRadioButton;

public class Dibujo extends JFrame{
    private Botones misBotones;
    private SeleccionPanel miSeleccion;
    private Lienzo miLienzo;
    public int botonPrecionado;
    public int seleccion;
    public Color uncolor;
    
    private List <Figura> misFiguras;
    private Figura unaFigura = null;

    public Dibujo () {
        JPanel AreaControl = new JPanel(new GridLayout(2, 1));
        misBotones = new Botones("Figuras", 
                new String[] {"Linea", "Cuadro", "Rectangulo", "Circulo", "Elipse"}, 5);
        miSeleccion = new SeleccionPanel("Colores",
                new String[] {"Negro", "Rojo", "Azul", "verde", "Gris"}, 5);
        seleccion = 0;
        botonPrecionado = 0;
        
        AreaControl.add(misBotones);
        AreaControl.add(miSeleccion);
        
        miLienzo = new Lienzo();
        this.add(AreaControl, BorderLayout.WEST);    
        this.add(miLienzo,BorderLayout.EAST);

       setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
       misFiguras = new ArrayList();
       pack();
       setVisible(true);
    }
    
    static public void main(String args[]) {
        new Dibujo();
    }
    
    private class Botones extends JPanel implements ActionListener {
        private String nombres[];

        public Botones(String unTitulo, String unNombre[], int N) {
            super(new GridLayout(N/2, 2));
            int i;

            nombres = new String[N];
            for(i=0; i<N; i++)
                nombres[i] = unNombre[i];

            setBackground(Color.lightGray);
            setBorder(BorderFactory.createTitledBorder(unTitulo));    
            JButton b;

            for(i=0; i<N; i++ ) {
                b = new JButton(unNombre[i]);
                b.addActionListener(this);
                this.add(b);

            }      
        }

        public void actionPerformed(ActionEvent arg0) {
            int i;

            for(i=0; i<nombres.length; i++)
                if(nombres[i].equals(arg0.getActionCommand())) {
                    botonPrecionado = i;
                    break;
                }
            System.out.println(nombres[botonPrecionado]);
        }
    }
    
    public class SeleccionPanel extends JPanel implements ActionListener{
        private String nombres[];

        public SeleccionPanel(String Nombre, String[] opciones, int N){
            super(new GridLayout(N/2, 2));
            int i;

            nombres = new String[N];
            for(i=0; i<N; i++)
                nombres[i] = opciones[i];

            setBackground(Color.lightGray);
            setBorder(BorderFactory.createTitledBorder(Nombre));
            ButtonGroup group = new ButtonGroup();
            JRadioButton option;

            for(i=0; i<N; i++) {
              option = new JRadioButton(opciones[i]);
              option.addActionListener(this);
              group.add(option);
              add(option);  
          }
        }

        public void actionPerformed(ActionEvent arg0) {
            int i;

            for(i=0; i<nombres.length; i++)
                if(nombres[i].equals(arg0.getActionCommand())) {
                    seleccion= i;
                    break;
                }
            System.out.println(nombres[seleccion]);
        }
    }   
    
    private class Lienzo extends JPanel implements MouseMotionListener, MouseListener {
        private int x0, y0, x1, y1;

        public Lienzo(){
            // Pone un color de fondo
            this.setBackground(Color.WHITE);
            // Tama√±o del lienzo
            this.setPreferredSize(new Dimension(400, 400));
            this.addMouseMotionListener(this);
            this.addMouseListener(this);
        }

        @Override
        public void paint(Graphics g){
            super.paint(g);
            if(unaFigura != null) unaFigura.dibuja(g);
            
            for(Figura a : misFiguras) {
                a.dibuja(g);
            }
        }

        public void mouseDragged(MouseEvent arg0) {
            x1 = arg0.getX();
            y1 = arg0.getY();
            unaFigura.set(x0, y0, x1, y1, uncolor);
            repaint();
        }

        public void mouseMoved(MouseEvent arg0) {
        }

        public void mouseClicked(MouseEvent arg0) {
            System.out.println(botonPrecionado + " " + seleccion);
        }

        public void mousePressed(MouseEvent arg0) {
            switch(seleccion) {
                case 0: uncolor = Color.BLACK;  break;
                case 1: uncolor = Color.RED;    break;
                case 2: uncolor = Color.BLUE;   break;
                case 3: uncolor = Color.GREEN;  break;
                case 4: uncolor = Color.GRAY;   break;
                default: uncolor = Color.MAGENTA;
            }
            switch(botonPrecionado) {
                case 0: unaFigura = new linea();   break;
                case 1: unaFigura = new Cuadro();  break;
                case 2: unaFigura = new Rectangulo(); break;
                default : unaFigura = new linea();
            }     
            
            x0 = arg0.getX();
            y0 = arg0.getY();
        }

        public void mouseReleased(MouseEvent arg0) {
            misFiguras.add(unaFigura);
            repaint();
        }

        public void mouseEntered(MouseEvent arg0) {
        }

        public void mouseExited(MouseEvent arg0) {
        }

    }
}
