/**
 * JavaLife - Conway's Life Simulation
 * @author Scott Hurring - scott at hurring dot com
 * @version alpha1
 * @license GPL
 * For most recent version, go to this url:
 * http://hurring.com/code/java/javalife/
 */

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

/**
 * Build the Menu for MainFrame
 */
public class MainFrameMenuBar extends JMenu
{
	private JavaLife parent;
	private int CTRL_MASK = java.awt.event.InputEvent.CTRL_MASK;
	
	public MainFrameMenuBar(JavaLife parent) {
		this.parent = parent;
	}
	
	public JMenuBar create() {
		return createFileJMenu();
	}
	
	private JMenuBar createFileJMenu() {
		JMenuBar mb = new JMenuBar();
		
		JMenu m = new JMenu("JavaLife");
		m.add(createProgramStart());
		m.add(createProgramStop());
		m.add(createProgramNext());
		m.add(createProgramReset());
		m.add(createProgramResize());
		m.addSeparator();
		m.add(createProgramExit());
		mb.add(m);
		
		/*
		m.addMouseListener(new MouseAdapter() {
			public void mouseClicked(MouseEvent e) {
				e.consume();
				System.out.println("Clicked");
			}
			public void mouseEntered(MouseEvent e) {
				e.consume();
				System.out.println("Entered");
			}
			public void mouseExited(MouseEvent e) {
				e.consume();
				System.out.println("Exited");
			}
			public void mouseReleased(MouseEvent e) {
				e.consume();
				System.out.println("Released");
			}
			public void mousePressed(MouseEvent e) {
				e.consume();
				System.out.println("Pressed");
			}
		});
		*/
		
		JMenu d = new JMenu("Debug");
		d.add(createDebug1());
		d.add(createDebug2());
		d.add(createDebug3());
		d.add(createDebug4());
		mb.add(d);

		JMenu h = new JMenu("Help");
		h.add(createHelpAbout());
		mb.add(h);
		
		return mb;
	}
	
/**
 *  Program Menu 
 */

	private JMenuItem createProgramStart() {	
		JMenuItem mi = new JMenuItem("Start");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.start();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control S"));
		return mi;
	}
	
	private JMenuItem createProgramStop() {	
		JMenuItem mi = new JMenuItem("Stop");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.stop();
			}
		});
		// Ctrl+P for Pause
		mi.setAccelerator(KeyStroke.getKeyStroke("control P"));
		return mi;
	}

	private JMenuItem createProgramNext() {	
		JMenuItem mi = new JMenuItem("Next Generation");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.next();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control N"));
		return mi;
	}

	private JMenuItem createProgramReset() {	
		JMenuItem mi = new JMenuItem("Reset Field");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.reset();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control R"));
		return mi;
	}

	private JMenuItem createProgramResize() {	
		JMenuItem mi = new JMenuItem("Resize");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.showResizeDialog();
			}
		});
		return mi;
	}

	private JMenuItem createProgramExit() {	
		JMenuItem mi = new JMenuItem("Exit");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.performExitAction();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control Q"));
		return mi;
	}	
	
/**
 *  Help Menu 
 */
	
	private JMenuItem createHelpAbout() {	
		JMenuItem mi = new JMenuItem("About");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.showAboutDialog();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control H"));
		return mi;
	}	
	
/**
 *  Debug Menu 
 */
	
	private JMenuItem createDebug1() {
		JMenuItem mi = new JMenuItem("Resize 5x5");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.resize(5,5);
			}
		});
		return mi;
	}

	private JMenuItem createDebug2() {
		JMenuItem mi = new JMenuItem("Resize 20x20");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.resize(20,20);
			}
		});
		return mi;
	}
	
	private JMenuItem createDebug3() {
		JMenuItem mi = new JMenuItem("Toggle 1,1");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.field.get(1,1).toggle();
			}
		});
		return mi;
	}

	private JMenuItem createDebug4() {
		JMenuItem mi = new JMenuItem("Run 50 generations");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				for (int i=0; i<50; i++) {
					parent.next();
				}
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control 5"));
		return mi;
	}

}

