
// SketcherFrame.java

import java.awt.*;
import java.awt.event.*;

import javax.swing.JMenu;
import javax.swing.JButton;

import javax.swing.JMenuItem;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JRadioButtonMenuItem;
import javax.swing.ButtonGroup;
import javax.swing.JMenuBar;
import javax.swing.KeyStroke;
import javax.swing.ImageIcon;
import javax.swing.Box;

import javax.swing.JFrame;
import javax.swing.JToolBar;

public class SketcherFrame extends JFrame 
                      implements Constants {
                      
    private JMenuBar menuBar; // la barre de menu
    
    private Color elementColor = DEFAULT_ELEMENT_COLOR; // couleur de l'element courant
    private int elementType = DEFAULT_ELEMENT_TYPE;	// type de l'element courant
    private Sketcher theApp;	// l'objet Application
        
    public SketcherFrame(String titre, Sketcher theApp) {

        JMenu menu, submenu; // pour definir les menus
        JMenuItem menuItem;
        JRadioButtonMenuItem rbMenuItem;
        JCheckBoxMenuItem cbMenuItem;

        setTitle(titre);
        this.theApp = theApp;
        setDefaultCloseOperation(EXIT_ON_CLOSE);
        //Crer la toolbar.
        JToolBar toolBar = new JToolBar();
        // Pour que la toolbar ne puisse pas etre deplacee
        toolBar.setFloatable(false);
        addButtons(toolBar);
        
        //Ajoute des composants  la fentre en utilisant le defaut BorderLayout.
        Container contentPane = getContentPane();
        contentPane.add(toolBar, BorderLayout.NORTH);

        //Crer la barre de menu
        menuBar = new JMenuBar();
        setJMenuBar(menuBar);

        //Construire le premier menu.
        menu = new JMenu("Fichiers");
        menu.setMnemonic(KeyEvent.VK_F);
        menu.getAccessibleContext().setAccessibleDescription(
                "Un menu Essai qui a des menu items");
        menuBar.add(menu);

        //un groupe de JMenuItems
        menuItem = new JMenuItem("Ouvrir",
                                 KeyEvent.VK_O);
        //menuItem.setMnemonic(KeyEvent.VK_O); //utiliser plutt le constructeur
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_1, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription(
                "Cela ne fait rien reellement");
        menu.add(menuItem);

        menuItem = new JMenuItem("A la fois texte et icone", 
                                 new ImageIcon("images/middle.gif"));
        menuItem.setMnemonic(KeyEvent.VK_A);
        menu.add(menuItem);

        menuItem = new JMenuItem(new ImageIcon("images/middle.gif"));
        menuItem.setMnemonic(KeyEvent.VK_B);
        menu.add(menuItem);

        menu.addSeparator();
        menuItem = new JMenuItem("Enregistrer",
                                 KeyEvent.VK_E);
        //menuItem.setMnemonic(KeyEvent.VK_E); //utiliser plutt le constructeur
        menuItem.setAccelerator(KeyStroke.getKeyStroke(
                KeyEvent.VK_2, ActionEvent.ALT_MASK));
        menuItem.getAccessibleContext().setAccessibleDescription(
                "Cela ne fait rien reellement");
        menu.add(menuItem);
        
        // Construire le second menu dans la barre de menus
        menu = new JMenu("Elements");
        menu.setMnemonic(KeyEvent.VK_E); // Le M ne marche pas car java croit le clavier qwerty
        menu.getAccessibleContext().setAccessibleDescription(
                "Ce menu montre des radio buttons et un sous menu");
        menuBar.add(menu);

        //un groupe de radio button menu items

        ButtonGroup group = new ButtonGroup();
        rbMenuItem = new JRadioButtonMenuItem("Ligne", elementType ==LIGNE);
        rbMenuItem.setMnemonic(KeyEvent.VK_L);
        group.add(rbMenuItem);
        rbMenuItem.addActionListener(new TypeListener(LIGNE));
        menu.add(rbMenuItem);
        rbMenuItem = new JRadioButtonMenuItem("Rectangle", elementType == RECTANGLE);
        rbMenuItem.setMnemonic(KeyEvent.VK_R);
        group.add(rbMenuItem);
        rbMenuItem.addActionListener(new TypeListener(RECTANGLE));
        menu.add(rbMenuItem);
        rbMenuItem = new JRadioButtonMenuItem("Cercle", elementType == CERCLE);
        rbMenuItem.setMnemonic(KeyEvent.VK_C);
        group.add(rbMenuItem);
        rbMenuItem.addActionListener(new TypeListener(CERCLE));
        menu.add(rbMenuItem);
        rbMenuItem = new JRadioButtonMenuItem("Courbe", elementType == COURBE);
        rbMenuItem.setMnemonic(KeyEvent.VK_O);
        group.add(rbMenuItem);
        rbMenuItem.addActionListener(new TypeListener(COURBE));
        menu.add(rbMenuItem);

        // un sous menu
        menu.addSeparator();
        submenu = new JMenu("Couleur");
        submenu.setMnemonic(KeyEvent.VK_C);
        // un groupe de check box menu items
        ButtonGroup group2 = new ButtonGroup();
        cbMenuItem = new JCheckBoxMenuItem("Rouge", elementColor.equals(Color.red));
        cbMenuItem.setMnemonic(KeyEvent.VK_R);
        group2.add(cbMenuItem);
        cbMenuItem.addActionListener(new ColorListener(Color.red));
        submenu.add(cbMenuItem);
        cbMenuItem = new JCheckBoxMenuItem("Bleu", elementColor.equals(Color.blue));
        cbMenuItem.setMnemonic(KeyEvent.VK_B);
        group2.add(cbMenuItem);
        cbMenuItem.addActionListener(new ColorListener(Color.blue));
        submenu.add(cbMenuItem);
        cbMenuItem = new JCheckBoxMenuItem("Vert", elementColor.equals(Color.green));
        cbMenuItem.setMnemonic(KeyEvent.VK_V);
        group2.add(cbMenuItem);
        cbMenuItem.addActionListener(new ColorListener(Color.green));
        submenu.add(cbMenuItem);
        menu.add(submenu);
        
         //Construire le dernier menu.
        menu = new JMenu("Aide");
        menu.setMnemonic(KeyEvent.VK_A); // meme probleme de clavier qwerty
        menu.getAccessibleContext().setAccessibleDescription(
                "Ce menu ne fait rien mais est a droite");
        menuBar.add(Box.createHorizontalGlue());
        menuBar.add(menu);
    
    }

    class TypeListener implements ActionListener {
        private int type;
        
        TypeListener(int type) {
            this.type = type;
        }
        
        public void actionPerformed(ActionEvent e) {
        
            elementType = type;
            
        }
    }

    class ColorListener implements ActionListener {
        private Color color;
        
        ColorListener(Color color) {
            this.color = color;
        }
        
        public void actionPerformed(ActionEvent e) {
        
            elementColor = color;
            
        }
    }


    protected void addButtons(JToolBar toolBar) {
        JButton button = null;

        // premier bouton
        button = new JButton(new ImageIcon("images/left.gif"));
        button.setToolTipText("Ceci est le bouton de gauche");
        toolBar.add(button);

        // deuxieme bouton
        button = new JButton(new ImageIcon("images/middle.gif"));
        button.setToolTipText("Ceci est le bouton du milieu");

        toolBar.add(button);

        // troisieme bouton
        button = new JButton(new ImageIcon("images/right.gif"));
        button.setToolTipText("Ceci est le bouton droit");
        toolBar.add(button);
    }
    
    public Color getElementColor() {
        return elementColor;
    }
    public int getElementType() {
        return elementType;
    }

}
