import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.beans.*;

import java.util.ArrayList;
import java.awt.geom.*;


/**
 * Clase MenuLateralYsuperior
 * Clase que permite implementar el menu a la izquierda de la zona de trabajo.
 * @author Patricio A. Castillo Pizarro - Eric C. Maldonado Olguin
 * @version 1.2 - Jun 26th, 2007
 */
public class MenuLateralYsuperior {
    private EditorPanel panel;
    private JTextArea textArea1;
    private JTextArea textArea2;
    private JEPdividedPanel splitPane;
    private String texto;
    
    public MenuLateralYsuperior() {
        
    }
    
    public JMenuBar createMenuBar(EditorPanel panel,JTextArea A1,JTextArea A2) {
        textArea1=A1;
        textArea2=A2;
        
        JMenuBar menuBar = new JMenuBar();
        menuBar.setLayout(new BoxLayout(menuBar, BoxLayout.PAGE_AXIS));
        
        //Items del menu Eventos
        JMenu TrasladarMostrar = new HorizontalMenu("Trasladar Mostrar");
        JMenuItem TrasladarFiguras = new JMenuItem("Trasladar Codigo");
        JMenuItem TrasladarMostrarI = new JMenuItem("Trasladar / Mostrar");
        JMenu AccionBasica = new HorizontalMenu("Acciones Basicas");
        //JMenu AccionBasica = new JMenu("Acciones Basicas");
        JMenuItem Avanzar = new JMenuItem("Avanzar");
        JMenuItem Retroceder = new JMenuItem("Retroceder");
        JMenuItem CambiarDireccion = new JMenuItem("Cambiar Direccion");
        JMenuItem EventoDetener = new JMenuItem("Detener");
        JMenuItem Esperar = new JMenuItem("Esperar");
        JMenu AccionAvanzada = new HorizontalMenu("Acciones Avanzadas");
        //JMenu AccionAvanzada = new JMenu("Acciones Avanzadas");
        JMenuItem PotenciaMotores = new JMenuItem("Potencia Motores");
        JMenuItem EnviarMSG = new JMenuItem("Enviar MSG");
        JMenuItem LimpiarMSG = new JMenuItem("Limpiar MSG");
        JMenuItem NQCPersonal = new JMenuItem("NQC Personal");
        JMenu Sonidos = new HorizontalMenu("Sonidos");
        //JMenu Sonidos = new JMenu("Sonidos");
        JMenuItem EmitirSonido = new JMenuItem("Emitir Sonido");
        JMenuItem EmitirTono = new JMenuItem("Emitir Tono");
        JMenu Variables = new HorizontalMenu("Variables");
        //JMenu Variables = new JMenu("Variables");
        JMenuItem NuevaVariable = new JMenuItem("Nueva Variable");
        JMenuItem ModificarVariable = new JMenuItem("Modificar Variable");
        JMenu Ciclos = new HorizontalMenu("Ciclos");
        //JMenu Ciclos = new JMenu("Ciclos");
        JMenuItem RepetirN = new JMenuItem("Repetir n veces");
        JMenuItem RepetirMientras = new JMenuItem("Repetir Mientras");
        JMenuItem RepetirSiempre = new JMenuItem("Repetir Siempre");
        JMenu Condicional = new HorizontalMenu("Condicional");
        //JMenu Condicional = new JMenu("Condicional");
        JMenuItem SiNo = new JMenuItem("Si - No");
        
        JMenu Eliminar =new HorizontalMenu("Eliminar");
        JMenuItem EliminarI = new JMenuItem("Eliminar");
        
        
        //Action Listeners
        TrasladarMostrarI.addActionListener(new HandlerTrasladarMostrar(panel));
        TrasladarFiguras.addActionListener(new TrasladarFiguras(panel));
        Avanzar.setActionCommand("Avanzar");
        Avanzar.addActionListener(new HandlerObjetoEvento(panel));
        Avanzar.addActionListener(new HandlerTrasladarMostrar(panel));
        Retroceder.setActionCommand("Retroceder");
        Retroceder.addActionListener(new HandlerObjetoEvento(panel));
        Retroceder.addActionListener(new HandlerTrasladarMostrar(panel));
        CambiarDireccion.setActionCommand("CambiarDireccion");
        CambiarDireccion.addActionListener(new HandlerObjetoEvento(panel));
        CambiarDireccion.addActionListener(new HandlerTrasladarMostrar(panel));
        EventoDetener.setActionCommand("Detener");
        EventoDetener.addActionListener(new HandlerObjetoEvento(panel));
        EventoDetener.addActionListener(new HandlerTrasladarMostrar(panel));
        Esperar.setActionCommand("Esperar");
        Esperar.addActionListener(new HandlerObjetoEvento(panel));
        Esperar.addActionListener(new HandlerTrasladarMostrar(panel));
        PotenciaMotores.setActionCommand("PotenciaMotores");
        PotenciaMotores.addActionListener(new HandlerObjetoEvento(panel));
        PotenciaMotores.addActionListener(new HandlerTrasladarMostrar(panel));
        EnviarMSG.setActionCommand("EnviarMSG");
        EnviarMSG.addActionListener(new HandlerObjetoEvento(panel));
        EnviarMSG.addActionListener(new HandlerTrasladarMostrar(panel));
        LimpiarMSG.setActionCommand("LimpiarMSG");
        LimpiarMSG.addActionListener(new HandlerObjetoEvento(panel));
        LimpiarMSG.addActionListener(new HandlerTrasladarMostrar(panel));
        NQCPersonal.setActionCommand("NQCPersonal");
        NQCPersonal.addActionListener(new HandlerObjetoEvento(panel));
        NQCPersonal.addActionListener(new HandlerTrasladarMostrar(panel));
        EmitirSonido.setActionCommand("EmitirSonido");
        EmitirSonido.addActionListener(new HandlerObjetoEvento(panel));
        EmitirSonido.addActionListener(new HandlerTrasladarMostrar(panel));
        EmitirTono.setActionCommand("EmitirTono");
        EmitirTono.addActionListener(new HandlerObjetoEvento(panel));
        EmitirTono.addActionListener(new HandlerTrasladarMostrar(panel));
        NuevaVariable.setActionCommand("NuevaVariable");
        NuevaVariable.addActionListener(new HandlerObjetoEvento(panel));
        NuevaVariable.addActionListener(new HandlerTrasladarMostrar(panel));
        ModificarVariable.setActionCommand("ModificarVariable");
        ModificarVariable.addActionListener(new HandlerObjetoEvento(panel));
        ModificarVariable.addActionListener(new HandlerTrasladarMostrar(panel));
        RepetirN.setActionCommand("RepetirN");
        RepetirN.addActionListener(new HandlerObjetoCondicion(panel));
        RepetirN.addActionListener(new HandlerTrasladarMostrar(panel));
        RepetirMientras.setActionCommand("RepetirMientras");
        RepetirMientras.addActionListener(new HandlerObjetoCondicion(panel));
        RepetirMientras.addActionListener(new HandlerTrasladarMostrar(panel));
        RepetirSiempre.setActionCommand("RepetirSiempre");
        RepetirSiempre.addActionListener(new HandlerObjetoCondicion(panel));
        RepetirSiempre.addActionListener(new HandlerTrasladarMostrar(panel));
        SiNo.setActionCommand("SiNo");
        SiNo.addActionListener(new HandlerObjetoCondicion(panel));
        SiNo.addActionListener(new HandlerTrasladarMostrar(panel));
        EliminarI.addActionListener(new EliminarHandler(panel));
        
        
        TrasladarMostrar.add(TrasladarFiguras);
        TrasladarMostrar.add(TrasladarMostrarI);
        AccionBasica.add(Avanzar);
        AccionBasica.add(Retroceder);
        AccionBasica.add(CambiarDireccion);
        AccionBasica.add(EventoDetener);
        AccionBasica.add(Esperar);
        menuBar.add(AccionBasica);
        AccionAvanzada.add(PotenciaMotores);
        AccionAvanzada.add(EnviarMSG);
        AccionAvanzada.add(LimpiarMSG);
        AccionAvanzada.add(NQCPersonal);
        menuBar.add(AccionAvanzada);
        
        Sonidos.add(EmitirSonido);
        Sonidos.add(EmitirTono);
        menuBar.add(Sonidos);
        Variables.add(NuevaVariable);
        Variables.add(ModificarVariable);
        menuBar.add(Variables);
        Ciclos.add(RepetirN);
        Ciclos.add(RepetirMientras);
        Ciclos.add(RepetirSiempre);
        menuBar.add(Ciclos);
        Condicional.add(SiNo);
        Eliminar.add(EliminarI);
        menuBar.add(Condicional);
        menuBar.add(TrasladarMostrar);
        menuBar.add(Eliminar);
        
        menuBar.setBorder(BorderFactory.createMatteBorder(0,0,0,1,
                Color.BLACK));
        return menuBar;
    }
    
    public JMenuBar createControlPanel(EditorPanel panel, JTextArea A1,JTextArea A2) {
        textArea1=A1;
        textArea2=A2;
        
        JMenuBar menuBar = new JMenuBar();
        JMenuBar menuBar2 = new JMenuBar();
        JMenuBar menuBar3 = new JMenuBar();
        
        
        
        
        //Menus que aparecen en la barra
        JMenu Archivo	= new JMenu("Archivo");
        JMenu Robot	= new JMenu("Robot");
        JMenu Programa	= new JMenu("Programa");
        JMenu Eventos = new JMenu("Eventos");
        
        
        //Items del menu Archivo
        JMenuItem Nuevo = new JMenuItem("Nuevo");
        JMenuItem Abrir = new JMenuItem("Abrir...");
        JMenuItem Guardar = new JMenuItem("Guardar...");
        JMenuItem Importar = new JMenuItem("Importar...");
        
        //Items del menu Robot
        JMenu Tipo = new JMenu("Tipo");
        ButtonGroup TipoGroup = new ButtonGroup();
        JRadioButton RCX = new JRadioButton("RCX");
        JRadioButton RCX2 = new JRadioButton("RCX2");
        JRadioButton Scout = new JRadioButton("Scout");
        JRadioButton CM = new JRadioButton("CyberMaster");
        JRadioButton Spy = new JRadioButton("Spybotics");
        JRadioButton Swan = new JRadioButton("Swan");
        JMenu Slot = new JMenu("Slot");
        ButtonGroup SlotGroup = new ButtonGroup();
        JRadioButton n1 = new JRadioButton("1");
        JRadioButton n2 = new JRadioButton("2");
        JRadioButton n3 = new JRadioButton("3");
        JRadioButton n4 = new JRadioButton("4");
        JRadioButton n5 = new JRadioButton("5");
        JMenu Puerto = new JMenu("Puerto");
        ButtonGroup PuertoGroup = new ButtonGroup();
        JRadioButton USB = new JRadioButton("USB");
        JRadioButton COM1 = new JRadioButton("COM1");
        JRadioButton COM2 = new JRadioButton("COM2");
        JRadioButton COM3 = new JRadioButton("COM3");
        JRadioButton COM4 = new JRadioButton("COM4");
        JRadioButton COM5 = new JRadioButton("COM5");
        JRadioButton COM6 = new JRadioButton("COM6");
        JRadioButton COM7 = new JRadioButton("COM7");
        JRadioButton COM8 = new JRadioButton("COM8");
        JRadioButton COM9 = new JRadioButton("COM9");
        JRadioButton COM10 = new JRadioButton("COM10");
        JMenuItem Firmware = new JMenuItem("Firmware...");
        JMenuItem Reloj = new JMenuItem("Reloj");
        JMenuItem Prueba = new JMenuItem("Prueba");
        
        //Items del menu Programa
        JMenuItem Compilar = new JMenuItem("Compilar...");
        JMenuItem Cargar = new JMenuItem("Cargar");
        JMenuItem Correr = new JMenuItem("Correr");
        JMenuItem Detener = new JMenuItem("Detener");
        
        Nuevo.addMouseListener(new MenuArchivoNuevo(panel));
        Abrir.addMouseListener(new MenuArchivoAbrir(panel));
        Guardar.addMouseListener(new MenuArchivoGuardar(panel));
        Importar.addMouseListener(new MenuArchivoImportar(panel));
        
        RCX.setActionCommand("RCX");
        RCX.addActionListener(new MenuRobotTipo(panel));
        RCX.setSelected(true);
        RCX2.setActionCommand("RCX2");
        RCX2.addActionListener(new MenuRobotTipo(panel));
        Scout.setActionCommand("Scout");
        Scout.addActionListener(new MenuRobotTipo(panel));
        CM.setActionCommand("CM");
        CM.addActionListener(new MenuRobotTipo(panel));
        Spy.setActionCommand("Spy");
        Spy.addActionListener(new MenuRobotTipo(panel));
        Swan.setActionCommand("Swan");
        Swan.addActionListener(new MenuRobotTipo(panel));
        n1.setActionCommand("1");
        n1.addActionListener(new MenuRobotSlot(panel));
        n1.setSelected(true);
        n2.setActionCommand("2");
        n2.addActionListener(new MenuRobotSlot(panel));
        n3.setActionCommand("3");
        n3.addActionListener(new MenuRobotSlot(panel));
        n4.setActionCommand("4");
        n4.addActionListener(new MenuRobotSlot(panel));
        n5.setActionCommand("5");
        n5.addActionListener(new MenuRobotSlot(panel));
        USB.setActionCommand("usb");
        USB.addActionListener(new MenuRobotPuerto(panel));
        USB.setSelected(true);
        COM1.setActionCommand("COM1");
        COM1.addActionListener(new MenuRobotPuerto(panel));
        COM2.setActionCommand("COM2");
        COM2.addActionListener(new MenuRobotPuerto(panel));
        COM3.setActionCommand("COM3");
        COM3.addActionListener(new MenuRobotPuerto(panel));
        COM4.setActionCommand("COM4");
        COM4.addActionListener(new MenuRobotPuerto(panel));
        COM5.setActionCommand("COM5");
        COM5.addActionListener(new MenuRobotPuerto(panel));
        COM6.setActionCommand("COM6");
        COM6.addActionListener(new MenuRobotPuerto(panel));
        COM7.setActionCommand("COM7");
        COM7.addActionListener(new MenuRobotPuerto(panel));
        COM8.setActionCommand("COM8");
        COM8.addActionListener(new MenuRobotPuerto(panel));
        COM9.setActionCommand("COM9");
        COM9.addActionListener(new MenuRobotPuerto(panel));
        COM10.setActionCommand("COM10");
        COM10.addActionListener(new MenuRobotPuerto(panel));
        Firmware.addMouseListener(new MenuRobotFirmware(panel));
        Reloj.addMouseListener(new MenuRobotReloj(panel));
        Prueba.addMouseListener(new MenuRobotPrueba(panel));
        
        Compilar.addMouseListener(new MenuProgramaCompilar(panel,textArea1,textArea2));
        Cargar.addMouseListener(new MenuProgramaCargar(panel));
        Correr.addMouseListener(new MenuProgramaCorrer(panel));
        Detener.addMouseListener(new MenuProgramaDetener(panel));
        
        Archivo.add(Nuevo);
        Archivo.add(new JSeparator());
        Archivo.add(Abrir);
        Archivo.add(Guardar);
        Archivo.add(new JSeparator());
        Archivo.add(Importar);
        
        TipoGroup.add(RCX);
        TipoGroup.add(RCX2);
        TipoGroup.add(Scout);
        TipoGroup.add(CM);
        TipoGroup.add(Spy);
        TipoGroup.add(Swan);
        Tipo.add(RCX);
        Tipo.add(RCX2);
        Tipo.add(Scout);
        Tipo.add(CM);
        Tipo.add(Spy);
        Tipo.add(Swan);
        Robot.add(Tipo);
        SlotGroup.add(n1);
        SlotGroup.add(n2);
        SlotGroup.add(n3);
        SlotGroup.add(n4);
        SlotGroup.add(n5);
        Slot.add(n1);
        Slot.add(n2);
        Slot.add(n3);
        Slot.add(n4);
        Slot.add(n5);
        Robot.add(Slot);
        PuertoGroup.add(USB);
        PuertoGroup.add(COM1);
        PuertoGroup.add(COM2);
        PuertoGroup.add(COM3);
        PuertoGroup.add(COM4);
        PuertoGroup.add(COM5);
        PuertoGroup.add(COM6);
        PuertoGroup.add(COM7);
        PuertoGroup.add(COM8);
        PuertoGroup.add(COM9);
        PuertoGroup.add(COM10);
        Puerto.add(USB);
        Puerto.add(COM1);
        Puerto.add(COM2);
        Puerto.add(COM3);
        Puerto.add(COM4);
        Puerto.add(COM5);
        Puerto.add(COM6);
        Puerto.add(COM7);
        Puerto.add(COM8);
        Puerto.add(COM9);
        Puerto.add(COM10);
        Robot.add(Puerto);
        Robot.add(new JSeparator());
        Robot.add(Firmware);
        Robot.add(new JSeparator());
        Robot.add(Reloj);
        Robot.add(Prueba);
        
        Programa.add(Compilar);
        Programa.add(Cargar);
        Programa.add(new JSeparator());
        Programa.add(Correr);
        Programa.add(Detener);
        
        menuBar.add(Archivo);
        menuBar.add(Robot);
        menuBar.add(Programa);
        
        
        
        
        return menuBar;
    }
    
    
    class HorizontalMenu extends JMenu {
        HorizontalMenu(String label) {
            super(label);
            JPopupMenu pm = getPopupMenu();
            pm.setLayout(new BoxLayout(pm, BoxLayout.PAGE_AXIS));
            
            
        }
        
        public Dimension getMinimumSize() {
            return getPreferredSize();
        }
        
        public Dimension getMaximumSize() {
            return getPreferredSize();
        }
        
        public void setPopupMenuVisible(boolean b) {
            boolean isVisible = isPopupMenuVisible();
            if (b != isVisible) {
                if ((b==true) && isShowing()) {
                    int x = 0;
                    int y = 0;
                    Container parent = getParent();
                    if (parent instanceof JPopupMenu) {
                        x = 0;
                        y = getHeight();
                    } else {
                        x = getWidth();
                        y = 0;
                    }
                    getPopupMenu().show(this, x, y);
                } else {
                    getPopupMenu().setVisible(false);
                }
            }
        }
    }
}
//Fin clase MenuLateralYsuperior

