/*
 * Javier Abellán. 27 de Abril de 2003
 * 
 * Juego del puzzle. Clase JuegoPuzzle. Clase visual que contiene el tablero
 * y los botones de ordenar y desordenar puzzle.
 */
import javax.swing.JPanel;
import javax.swing.JLabel;
import javax.swing.ImageIcon;
import java.awt.Image;
import javax.swing.BoxLayout;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;
import javax.swing.JButton;

/**
 * Interface gráfica del juego del puzzle. Contiene el tablero en pantalla y
 * los botones de ordenar y desordenar puzzle.
 * Utiliza Puzzle, que es la clase donde está almacenado el tablero y Ordenador,
 * que es la clase que sabe ordenar y desordenar el puzzle.
 */
public class GuiTableroBotones extends JPanel{
    /**
     * Constructor. Recibe
     * - Una instancia de Ordenador, para ordenar y desordenar el puzzle cuando
     * se pulsen los botones de "Ordenar" y "Desordenar".
     * - Un array de nombres de ficheros .gif. El primero es la imagen del hueco
     * y los demás las piezas del puzzle. Se supone que son imágenes de 32x32.
     * - Una instancia de Puzzle, que es donde está el juego.
     *
     * Instancia un GuiTablero y los botones de "Ordenar" y "Desordenar", 
     * poniendoles los ActionListener correspondientes.
     */
    public GuiTableroBotones(Ordenador nuevoOrdenador, Image[] imagenes, 
        Puzzle unPuzzle) 
    {
        /* Almacena los parámetros recibidos */
        this.unOrdenador = nuevoOrdenador;
        this.unPuzzle = unPuzzle;
        
        /* Crea un tablero visual y lo dibuja junto con los botones de 
         * "Ordenar" y "Desordenar" */
        tablero = new GuiTablero (imagenes, unPuzzle);
        this.setLayout(new BoxLayout(this, BoxLayout.Y_AXIS));
        this.add (tablero);
        this.add (botonOrdenar);
        this.add (botonDesordenar);
        
        /* Añade un ActionListener al botón de "Desordenar", que llama al metodo
         * desordena() de Ordenador */
        botonDesordenar.addActionListener(new ActionListener () {
            public void actionPerformed (ActionEvent e)
            {
                if (unOrdenador != null)
                    unOrdenador.desordena();
            }
        });
        
        /* Añade un ActionListener al botón de "Ordenar", que llama al metodo
         * ordena() de Ordenador */
        botonOrdenar.addActionListener(new ActionListener () {
            public void actionPerformed (ActionEvent e)
            {
                if (unOrdenador != null)
                    unOrdenador.ordena();
            }
        });
      
    }
                
    /** Tablero visual donde se representan las piezas */
    GuiTablero tablero;
    
    /** Botón de "Ordenar" puzzle */
    JButton botonOrdenar = new JButton("Ordenar");
    
    /** Botón de "Desordenar" puzzle */
    JButton botonDesordenar = new JButton ("Desordenar");
    
    /** Para ordenar y desordenar el puzzle */
    Ordenador unOrdenador;
    
    /** El juego del puzzle */
    Puzzle unPuzzle;
    
}
