/*
 * ContentEditorDialog.java
 *
 */
package com.uvigo.tMaestro.SCOCreator.tool.properties.cellEditors.contentEditors;

import com.uvigo.tMaestro.SCOCreator.tool.MainFrame;

/**
 * Di�logo que contiene los diferentes ContentEditorPanel.
 * @author  raul
 */
public class ContentEditorDialog extends javax.swing.JDialog {

    /**
     * Clase contenida del tipo enumerado empleado para diferenciar diferentes paneles
     * (diferentes ContentEditorPanels)
     */
    public enum Type {

        /**
         * Indica el panel WidgetContentEditorPanel
         */
        WIDGET,
        /**
         * Indica el panel MediaPlayerContentEditorPanel
         */
        MEDIAPLAYER,
        /**
         * Indica el panel ActiveImageContentEditorPanel
         */
        ACTIVEIMAGE,
        /**
         * Indica el panel MediaPlayerContentEditorPanel
         */
        MHPMEDIAPLAYER,
        /**
         * Indica el panel AnimatedContentEditorPanel
         */
        ANIMATED,
        /**
         * Indica el panel TextPanelContentEditorPanel
         */
        TEXTPANEL,
        /**
         * Indica el panel MenuContentEditorPanel
         */
        MENU,
        /**
         * Indica el panel MultiPanelContentEditorPanel
         */
        MULTIPANEL
    };
    /**
     * Para indicar que el usuario ha cancelado el di�logo
     */
    public static final int CANCEL = -1;
    /**
     * Para indicar que el usuario ha aceptado el di�logo.
     */
    public static final int OK = 1;
    /**
     * un -1 si el usuario ha cancelado el di�logo, un 1 si lo ha aceptado, 0 en otro caso
     */
    private int iAction = 0;
    /**
     * Ruta al nuevo fichero .xml surgido de la correcta edici�n de la propiedad.
     */
    private String sNewFilePath;
    /** 
     * El panel contenido en el di�logo. 
     */
    private javax.swing.JPanel oPanel;

    /**
     * Crea una nueva instancia
     */
    public ContentEditorDialog(java.awt.Frame oParent, String sFile, Type oType) {
        super(oParent, true);
        //System.out.println("oParent: "+oParent.getTitle()+" sFile: "+sFile+" oType: "+oType.toString());
        initComponents();
        oPanel = null;
        switch (oType) {
            case WIDGET:
                oPanel = new WidgetContentEditorPanel(sFile, this);
                break;
            case MEDIAPLAYER:
                oPanel = new MediaPlayerContentEditorPanel(sFile, this, 0);
                break;
            //SSSS
            case MHPMEDIAPLAYER:
                oPanel = new MediaPlayerContentEditorPanel(sFile, this, 1);
                break;
            case ACTIVEIMAGE:
                oPanel = new ActiveImageContentEditorPanel(sFile, this);
                break;
            case ANIMATED:
                oPanel = new AnimatedContentEditorPanel(sFile, this);
                break;
            case TEXTPANEL:
                oPanel = new TextPanelContentEditorPanel(sFile, this);
                break;
            case MENU:
                oPanel = new MenuContentEditorPanel(sFile, this);
                break;
            case MULTIPANEL:
                oPanel = new MultiPanelContentEditorPanel(sFile, this);
        }
        this.add(oPanel);
        this.addWindowListener(new java.awt.event.WindowAdapter() {

            public void windowClosing(java.awt.event.WindowEvent oEvent) {
                close(oEvent);
            }
        });


    }

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    // <editor-fold defaultstate="collapsed" desc=" Generated Code ">
    private void initComponents() {

        getContentPane().setLayout(new java.awt.GridLayout(1, 0));

        setDefaultCloseOperation(javax.swing.WindowConstants.DO_NOTHING_ON_CLOSE);
        pack();
    }
    // </editor-fold>

    /**
     * Establece la acci�n realizada por el usuario sobre el
     * di�logo. Toda esta forma de proceder es debida a que los
     * botones de OK y Cancelar est�n situados en un panel contenido
     * en el di�logo.
     * @param iAction La acci�n realizada por el usuario.
     * @param sNewFilePath Si la acci�n es OK la ruta al nuevo fichero .xml
     */
    protected void setAction(int iAction, String sNewFilePath) {
        //System.out.println("sNewFilePath: "+sNewFilePath);
        this.iAction = iAction;
        this.sNewFilePath = sNewFilePath;
        deleteFiles();
    }

    /**
     * Esta funci�n consulta al panel
     * los ficheros que se a�adieron en alg�n momento mientras
     * el di�ologo estaba abierto. Aquellos que no se hayan mantenido (se averigua mediante consulta al MainFrame)
     * se eliminan.
     */
    private void deleteFiles() {
        java.util.ArrayList<java.io.File> oFiles = ((ContentEditorPanel) oPanel).getFiles();
        if (oFiles == null) {
            return;
        }
        for (int i = 0; i < oFiles.size(); i++) {
            if (MainFrame.oMainFrame.getUses(oFiles.get(i).getName()) == 0) {
                oFiles.get(i).delete();
            }
        }
    }

    /**
     * Devuelve la acci�n realizada por el usuario sobre el di�logo
     * @return El entero que describe la acci�n realizada por
     * el usuario sobre el panel. 1 si ha aceptado, -1 si ha cancelado.
     */
    public int getAction() {
        return iAction;
    }

    /**
     * Devuelve la ruta al nuevo fichero .xml resultante de la edici�n de la propiedad
     * @return La ruta al fichero .xml
     */
    public String getNewFilePath() {
        return this.sNewFilePath;
    }

    /**
     * Funci�n llamada cuando el usuario pulsa sobre la aspa de cerrar
     * el di�logo.
     */
    private void close(java.awt.event.WindowEvent oEvent) {
        iAction = ContentEditorDialog.CANCEL;
        deleteFiles();
        this.dispose();
    }
    // Variables declaration - do not modify
    // End of variables declaration
}
