import java.awt.Color;
import java.awt.event.*;
import javax.swing.*;

/**
 * MiniDraw_Menu
 * <p>
 *   <b>History</b> :
 *   <ul>
 *     <li>Version 0.2 : Migration to Java 1.5 : replace JDialog.show to JDialog.setVisible(true)
 *     <li>Version 0.1 : Initial version</li>
 *   </ul>
 * </p>
 * @author Pierrick Calvet & Florian Delclaux
 */
public class MiniDraw_Menu extends JMenuBar implements ActionListener{

  private MiniDraw minidraw;
  private ButtonGroup btnGroup;

/**
 * Build MiniDraw_Menu's object
 * @param minidraw Reference of MiniDraw's object
 */
  public MiniDraw_Menu(MiniDraw minidraw){
    this.minidraw = minidraw;

    /* Menu File */
    JMenu menuFile = new JMenu("File");
    
    /* File -> New */
    JMenuItem itemNew = new JMenuItem("New");
    itemNew.addActionListener(this);
    menuFile.add(itemNew);

    menuFile.add(new JSeparator());

    /* File -> Load */
    JMenuItem itemLoad = new JMenuItem("Load");
    itemLoad.addActionListener(this);
    menuFile.add(itemLoad);
    
    /* File -> Save */
    JMenuItem itemSave = new JMenuItem("Save");
    itemSave.addActionListener(this);
    menuFile.add(itemSave);
    
    menuFile.add(new JSeparator());
    
    /* File -> Exit */
    JMenuItem itemExit = new JMenuItem("Exit");
    itemExit.addActionListener(this);
    menuFile.add(itemExit);
    
    add(menuFile);

    /* Menu Color */
    JMenu menuColor = new JMenu("Color");
    btnGroup = new ButtonGroup();

    /* Color -> Black */
    JRadioButtonMenuItem itemBlack = new JRadioButtonMenuItem("Black");
    itemBlack.addActionListener(this);
    btnGroup.add(itemBlack);
    menuColor.add(itemBlack);
    
    /* Color -> Blue */
    JRadioButtonMenuItem itemBlue = new JRadioButtonMenuItem("Blue", true);
    itemBlue.addActionListener(this);
    btnGroup.add(itemBlue);
    menuColor.add(itemBlue);
    
    /* Color -> Red */
    JRadioButtonMenuItem itemRed = new JRadioButtonMenuItem("Red");
    itemRed.addActionListener(this);
    btnGroup.add(itemRed);
    menuColor.add(itemRed);
    
    /* Color -> Green */
    JRadioButtonMenuItem itemGreen = new JRadioButtonMenuItem("Green");
    itemGreen.addActionListener(this);
    btnGroup.add(itemGreen);
    menuColor.add(itemGreen);
    
    /* Color -> Other */
    JRadioButtonMenuItem itemOther = new JRadioButtonMenuItem("Other");
    itemOther.addActionListener(this);
    btnGroup.add(itemOther);
    menuColor.add(itemOther);
    add(menuColor);
    
    /* Menu Help */
    JMenu menuHelp = new JMenu("Help");

    /* Help -> About */
    JMenuItem itemAbout = new JMenuItem("About MiniDraw ...");
    itemAbout.setActionCommand("About");
    itemAbout.addActionListener(this);
    menuHelp.add(itemAbout);

    add(menuHelp);
  }

/**
 * Manage all menu's action
 */
  public void actionPerformed(ActionEvent event){
  
    /* File -> New */
    if(event.getActionCommand().equals("New")){
      if(minidraw.toSave){
        int ans = JOptionPane.showConfirmDialog(minidraw, "Save your design ?", "Warning", JOptionPane.YES_NO_CANCEL_OPTION);

        if(ans == JOptionPane.CANCEL_OPTION)
          return;

        if(ans == JOptionPane.YES_OPTION)
          if(!minidraw.saveFile())                                          /* Save operation abort */
            return;
      }
      minidraw.display.clear();                                             /* Clear display */
      minidraw.toSave = false;                                              /* Needn't to save */
      minidraw.setTitle("MiniDraw - Untitled");                             /* Change title */
      return;
    }

    /* File -> Load */
    if(event.getActionCommand().equals("Load")){
      if(minidraw.toSave){
        int ans = JOptionPane.showConfirmDialog(minidraw, "Save your design ?", "Warning", JOptionPane.YES_NO_CANCEL_OPTION);

        if(ans == JOptionPane.CANCEL_OPTION)
          return;

        if(ans == JOptionPane.YES_OPTION)
          if(!minidraw.saveFile())                                             /* Save operation abort */
            return;
      }
      minidraw.display.clear();
      if(!minidraw.loadFile())                              /* Error while loading file */
        minidraw.display.clear();
      minidraw.toSave = false;
      return;
    }
    
    /* File -> Save */
    if(event.getActionCommand().equals("Save")) {
      minidraw.saveFile();
      minidraw.toSave = false;
      return;
    }
    
    /* File -> Exit */
    if(event.getActionCommand().equals("Exit")){
      if(minidraw.toSave){
        int ans = JOptionPane.showConfirmDialog(minidraw, "Save your design ?", "Warning", JOptionPane.YES_NO_CANCEL_OPTION);

        if(ans == JOptionPane.CANCEL_OPTION)                         /* Abort closing operation */
          return;

        if(ans == JOptionPane.YES_OPTION)
          if(!minidraw.saveFile())                                   /* Save operation abort */
            return;
      }
      System.exit(0);
    }
    
    /* Color -> Black */
    if(event.getActionCommand().equals("Black")) {
      minidraw.statebar.refresh(minidraw.display.colorSelected = Color.black);
      return;
    }

    /* Color -> Blue */
    if(event.getActionCommand().equals("Blue")){
      minidraw.statebar.refresh(minidraw.display.colorSelected = Color.blue);
      return;
    }
    
    /* Color -> Red */
    if(event.getActionCommand().equals("Red")){
      minidraw.statebar.refresh(minidraw.display.colorSelected = Color.red);
      return;
    }

    /* Color -> Green */
    if(event.getActionCommand().equals("Green")){
      minidraw.statebar.refresh(minidraw.display.colorSelected = Color.green);
      return;
    }

    /* Color -> Other */
    if(event.getActionCommand().equals("Other")){
      JColorChooser chooser = new JColorChooser();
      Color retColor = chooser.showDialog(minidraw, "Choose a color for OurShape", minidraw.display.colorSelected);
      if (retColor == null)
        return;

      minidraw.display.colorSelected = retColor;
      minidraw.statebar.refresh(minidraw.display.colorSelected);
      return;
    }

    /* Help -> About */
    if(event.getActionCommand().equals("About"))
      minidraw.about.setVisible(true);
  }
}
