/*
 * PanelPrincipal.java
 *
 */
package com.uvigo.tMaestro.SCOCreator.tool;


/**
 * Esta clase representa un panel (javax.swing.JPanel) sobre el que se anadiran las diferentes
 * capsulas (@see Capsula) que contienen a los diferentes elementos que forman parte de la plantilla.
 * Es el panel sobre el que se dibujan dichos elementos (las capsulas) y sobre el que el usuario
 * puede actuar para seleccionar elementos para ser editados, etc.
 * @author raul
 * @version 0.1
 */
public class PanelPrincipal extends javax.swing.JPanel{
    
    /**
     * Variable que representa el borde de un elemento activo.
     */
    private static BordeElemento oActiveComponentBorder = new BordeElemento(java.awt.Color.RED, 4, BordeElemento.Tipo.LINEA);
    
    /**
     * Variable que representa el borde de un elemento moviendose
     */
    private static BordeElemento oMovingComponentBorder = new BordeElemento(java.awt.Color.BLUE, 4, BordeElemento.Tipo.LINEA);
    
    /**
     * Booleana que indica si el elemento se esta moviendo
     */
    private boolean bIsMovig;
    
    /**
     *
     *
     *
     * //------------------------------------------------------------------------//
     * // METODOS
     * //------------------------------------------------------------------------//
     *
     *
     *
     * /**
     * Constructor de la clase.
     */
    public PanelPrincipal(){
        bIsMovig=false;
    };
    
    /**
     * Metodo paint del panel principal. Sobreescribe el metodo paint de JPanel.
     * Es a traves de este metodo como dibujamos los bordes del elemento activo, los movimientos de
     * los elementos, y otras cosas.
     * @param oG El objeto grafico del panel sobre el que se pinta.
     */
    public void paint(java.awt.Graphics oG) {
        super.paint(oG); //llamada al metodo paint de la clase padre (javax.swing.Jpanel)
        Capsula oActivo=MainFrame.oMainFrame.oGetCapsulaActiva();
        if (oActivo!=null) {
            // Vamos a obtener las coordenadas del elemento activo respecto al panel principal
            int x=oActivo.getX();
            int y=oActivo.getY();
            java.awt.Container oPadre=oActivo.getParent();
            while (!oPadre.equals(this)) {
                x+=oPadre.getX();
                y+=oPadre.getY();
                oPadre=oPadre.getParent();
            }
            //Dibujamos el borde sobre el elemento activo
            if (!bIsMovig) PanelPrincipal.oActiveComponentBorder.paintBorder(oG,x,y,oActivo.getWidth(),oActivo.getHeight());
            else PanelPrincipal.oMovingComponentBorder.paintBorder(oG,x,y,oActivo.getWidth(),oActivo.getHeight());
        }
        if (bIsMovig) bIsMovig=false;
    }
    
    /**
     * Devuelve el borde que se utiliza para marcar los elementos activos.
     * @return El borde de los elementos activos
     */
    public BordeElemento oGetBordeActivo() {
        return PanelPrincipal.oActiveComponentBorder;
    }
    
    /**
     * Devuelve el borde que se utiliza para marcar los elementos activos al desplazarse.
     * @return El borde de los elementos activos
     */
    public BordeElemento oGetBordeMovimiento() {
        return PanelPrincipal.oMovingComponentBorder;
    }
    
    /**
     * Cambia el borde para los elementos activos
     * @param oBorde El nuevo borde
     */
    public void vSetBorder(BordeElemento oBorde) {
        PanelPrincipal.oActiveComponentBorder=oBorde;
    }
    
    public void setMoving(boolean bIsMovig) {
        this.bIsMovig=bIsMovig;
    }
}
