import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.KeyEvent;
import java.awt.print.PageFormat;
import java.awt.print.PrinterException;
import java.awt.print.PrinterJob;
import javax.swing.JButton;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.JOptionPane;
import javax.swing.JSeparator;
import javax.swing.KeyStroke;
/**
 * Projet: PaintRevolution
 * <p>Title: MenuBar.java </p>
 * <p>Description:Classe représentant un JMenuBar </p>
 * <p>Copyright: Copyright (c) 2005</p>
 * <p>Societe: IUT NANCY CHARLEMAGNE II</p>
 * @author VIGNERON GEOFFROY && GANGANELLI DORIAN
 * @version 3.0
 */
public class MenuBar extends JMenuBar implements ActionListener {
    /**
     * Fenetre principale
     */
    private JFramePrincipale frame;
    
    /**
     * Panel de la fenetre principale
     */
    private PanelJFramePrincipale panel;
    
    /**
     * Booléen déterminant la création du panel
     */
    boolean creation,chargement,ouverture;
    
    /**
     * JMenu contenu dans la fenetre 
     */
    private JMenu affichage,fichier,apropos;
    
    /**
     * Un Panel demandant la creation du panel principal
     * en fonction des couleurs
     */
    private DialogueNouveauPanel nouv;
    
    /**
     * Item du JMenu
     */
    private JMenuItem mi_nouveau, mi_ouvrir,mi_ouvrir1, mi_sauve, mi_sauvea, mi_imprimer,
    mi_quitter, mi_apropos, mi_aide,mi_affichage;
    private JCheckBoxMenuItem mi_affichage1;
    
    /**
     * Compteur definissant la creation ou non du panel principale
     * ou compteur definissant l'affichage d'un menu
     */
    int compteur=0,compteur1=0,compteur2=0;
    
    
    /**
     * Constructeur du menubar attaché à la fenetre principale 
     * @param fenetre la fenetre principale où est rattaché le menu
     */
    public MenuBar(JFramePrincipale fenetre) {
        super();
        creation=false;
        chargement=false;
        ouverture=false;
        frame = fenetre;
        
        //creation du menu fichier
        fichier = new JMenu("Fichier");
        add(fichier);
        affichage = new JMenu("Affichage");
        add(affichage);
        apropos=new JMenu("A propos");
        add(apropos);
        
        /** item affichage **/
        //affichage barre operations
        mi_affichage = new JCheckBoxMenuItem("Affichage barre opérations");
        mi_affichage.setToolTipText("Affichage de la barre opération");
        mi_affichage.setHorizontalTextPosition(JButton.RIGHT);
        mi_affichage.addActionListener(this);
        mi_affichage.setSelected(true);
        mi_affichage.setEnabled(false);
        affichage.add(mi_affichage);
        //affichage barre outils
        mi_affichage1 = new JCheckBoxMenuItem("Affichage barre outils");
        mi_affichage1.setToolTipText("Affichage de la barre outil");
        mi_affichage1.setHorizontalTextPosition(JButton.RIGHT);
        mi_affichage1.addActionListener(this);
        mi_affichage1.setSelected(true);
        mi_affichage1.setEnabled(false);
        affichage.add(mi_affichage1);
        
        /** item apropos **/
        //apropos
        mi_apropos = new JMenuItem("A propos...");
        mi_apropos.setToolTipText("Auteurs");
        mi_apropos.setHorizontalTextPosition(JButton.RIGHT);
        mi_apropos.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_A,KeyEvent.CTRL_MASK));
        mi_apropos.addActionListener(this);
        apropos.add(mi_apropos);
        
        /**  item fichier **/
        // nouveau
        mi_nouveau = new JMenuItem("Nouveau");
        mi_nouveau.setToolTipText("Créer un nouveau document");
        mi_nouveau.setHorizontalTextPosition(JButton.RIGHT);
        mi_nouveau.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N,KeyEvent.CTRL_MASK));
        mi_nouveau.addActionListener(this);
        fichier.add(mi_nouveau);
        fichier.add(new JSeparator());
        
        // ouvrir une image
        mi_ouvrir = new JMenuItem("Ouvrir une image...");
        mi_ouvrir.setToolTipText("Ouvrir une image existant");
        mi_ouvrir.setHorizontalTextPosition(JButton.RIGHT);
        mi_ouvrir.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O,KeyEvent.CTRL_MASK));
        fichier.add(mi_ouvrir);
        mi_ouvrir.addActionListener(this);
        
        //Chargement dessin
        mi_ouvrir1 = new JMenuItem("Charger un dessin...");
        mi_ouvrir1.setToolTipText("Charger un objet crée");
        mi_ouvrir1.setHorizontalTextPosition(JButton.RIGHT);
        mi_ouvrir1.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_I,KeyEvent.CTRL_MASK));
        fichier.add(mi_ouvrir1);
        fichier.add(new JSeparator());
        mi_ouvrir1.addActionListener(this);
        
        // enregistrer en dessin
        mi_sauve = new JMenuItem("Sauvegarder");
        mi_sauve.setToolTipText("Sauvegarder le document en dessin");
        mi_sauve.setHorizontalTextPosition(JButton.RIGHT);
        mi_sauve.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,KeyEvent.CTRL_MASK));
        mi_sauve.addActionListener(this);
        fichier.add(mi_sauve);
        
        // enregistrer en photo
        mi_sauvea = new JMenuItem("Enregistrer en photo ...");
        mi_sauvea.setToolTipText("Enregistrer le document en photo");
        mi_sauvea.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S,KeyEvent.SHIFT_MASK + KeyEvent.CTRL_MASK));
        fichier.add(mi_sauvea);
        mi_sauvea.addActionListener(this);
        fichier.add(new JSeparator());
        
        // imprimer
        mi_imprimer = new JMenuItem("Imprimer");
        mi_imprimer.setToolTipText("Imprimer le dessin courant");
        mi_imprimer.setHorizontalTextPosition(JButton.RIGHT);
        mi_imprimer.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_P,KeyEvent.CTRL_MASK));
        mi_imprimer.addActionListener(this);
        fichier.add(mi_imprimer);
        fichier.add(new JSeparator());
        
        // quitter
        mi_quitter = new JMenuItem("Quitter");
        mi_quitter.setToolTipText("Quitter");
        mi_quitter.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_F4,KeyEvent.ALT_MASK));
        mi_quitter.addActionListener(this);
        fichier.add(mi_quitter);
        fichier.add(new JSeparator());
        
        //ajout de la barre menu à la fenetre
        frame.setJMenuBar(this);
    }
    
    /**
     * Methode effectuant les operations du menu
     * @param e ActionEvent definissant l'action en fonction
     * du choix de l'utilisateur
     */
    public void actionPerformed(ActionEvent e) {
        Object source = e.getSource();
        
        /** MENU FICHIER **/
        //creer un nouveau document
        if (source == mi_nouveau) {
                nouv = new DialogueNouveauPanel(frame);
                creation=true;
                ouverture=false;
                frame.setTitle("PaintRevolution");
        }
        //ouvrir une photo
        if(source== mi_ouvrir){
            creation=true;
            Ouvrir fichier = new Ouvrir(frame);
            ouverture=true;
        }
        //ouvrir un dessin
        if(source== mi_ouvrir1){
            Chargement charge=new Chargement(frame);
            creation=true;
            ouverture=false;
            
        }
        //enregistrer une image en dessin
        if (source==mi_sauve){
            if(creation && !ouverture){
                Sauvegarder s= new Sauvegarder(frame,frame.getPanel());
            }else{
                if(!ouverture){
                    JOptionPane.showMessageDialog(frame,"On ne peut pas enregistre une photo en dessin pour le moment");
                }else{
                    JOptionPane.showMessageDialog(frame,"Aucun dessin à enregistré","Enregistrement",JOptionPane.WARNING_MESSAGE);
                }
            }
        }
        //enregistrer une image en photo
        if(source==mi_sauvea){
            if(creation){
                JpegEnregistreur enr = new JpegEnregistreur(frame,frame.getPanel());
            }else{
                JOptionPane.showMessageDialog(frame,"Aucun document à enregistrer en photo","Enregistrement",JOptionPane.WARNING_MESSAGE);
            }
        }
        //imprimer
        if (source==mi_imprimer){
            JOptionPane.showMessageDialog(frame,"Fonctionne pas encore parfaitement","Impression",JOptionPane.WARNING_MESSAGE);
            if (chargement){
                PrinterJob imprimante = PrinterJob.getPrinterJob();
                PageFormat landscape = imprimante.defaultPage();
                imprimante.setPrintable(new Imprimante(frame), landscape);
                try {
                    if (imprimante.printDialog()) {
                        imprimante.print();
                    } 
                    else {
                        JOptionPane.showMessageDialog(frame,"Impression impossible","Impression",JOptionPane.WARNING_MESSAGE);
                        System.out.println("Impression impossible !");
                    }
                }catch (PrinterException e_print) {
                    JOptionPane.showMessageDialog(frame,"Probleme Printer","Impression",JOptionPane.WARNING_MESSAGE);
                }
            }else{
                JOptionPane.showMessageDialog(frame,"Pas de dessin à imprimer","Impression",JOptionPane.WARNING_MESSAGE);
            }
        }
        //quitter le programme
        if (source == mi_quitter) {
            System.exit(0);
        }
        
        
        /** MENU AFFICHAGE **/
        //affichage de la barre operations
        if (source==mi_affichage){
            if (creation){
                
                compteur1++;
                if(compteur1%2==0)
                    frame.getPanel().setVisibleBarreOperations(true);
                else frame.getPanel().setVisibleBarreOperations(false);
            }else{
                JOptionPane.showMessageDialog(frame,"Aucune barre outils");
            }
        }
        //affichage de la barre outils
        if (source==mi_affichage1){
            if(creation){
                
                compteur2++;
                if(compteur2%2==0)frame.getPanel().setVisibleBarreOutils(true);
                else frame.getPanel().setVisibleBarreOutils(false);
            }else{
                JOptionPane.showMessageDialog(frame,"Aucune barre operations");
            }
        }
        
        
        /** MENU APROPOS **/
        //A propos
        if (source==mi_apropos){
            APropos a=new APropos(frame);
        }
    }
    
    /**
     * Methode modifiant le booleen creation
     * @param booleen à vrai si le panel principale est crée
     */
    public void setCreation(boolean booleen){
        creation=booleen;
    }
    /**
     * Methode modifiant le booleen ouverture
     * @param booleen à vrai si le panel principale est crée
     */
    public void setOuverture(boolean booleen){
        creation=booleen;
    }
    /**
     * Methode permettant de selectionner les barre outils 
     * et barre operations
     * @param visible à vrai si selection des barres à faux sinon
     */
    public void setEnabledBarre(boolean visible){
        mi_affichage.setEnabled(visible);
        mi_affichage1.setEnabled(visible);
    }
}
