/* File: BeliefMenuBar.java
 * Author: Jason Gookins
 * Description: This class builds the menu bar used in the Belief window.
 */

import java.awt.event.ActionEvent;
import java.awt.event.KeyEvent;
import javax.swing.JMenu;
import javax.swing.JMenuBar;
import javax.swing.JMenuItem;
import javax.swing.KeyStroke;

public class BeliefMenuBar extends JMenuBar
{
	/************************
	 ** Instance Variables **
	 ************************/

	private JMenuItem saveNetworkMenuItem;
	private JMenuItem runNetworkMenuItem;
	private JMenuItem resetNetworkMenuItem;



	/**********************
	 ** Main Constructor **
	 **********************/

	public BeliefMenuBar(BeliefListener beliefListener)
	{
		this.add(fileMenu(beliefListener));
		this.add(runMenu(beliefListener));
		this.add(helpMenu());		
	}



	/***************
	 ** Accessors **
	 ***************/

	public JMenuItem getSaveNetworkMenuItem()
	{
		return this.saveNetworkMenuItem;
	}

	public JMenuItem getRunNetworkMenuItem()
	{
		return this.runNetworkMenuItem;
	}

	public JMenuItem getResetNetworkMenuItem()
	{
		return this.resetNetworkMenuItem;
	}



	/***************
	 ** File Menu **
	 ***************/

	public JMenu fileMenu(BeliefListener beliefListener)
	{
		JMenu fileMenu = new JMenu("File");

		fileMenu.setMnemonic(KeyEvent.VK_F);

		fileMenu.add(newNetworkMenuItem(beliefListener));
		fileMenu.add(openNetworkMenuItem(beliefListener));
		fileMenu.add(saveNetworkMenuItem(beliefListener));
		fileMenu.addSeparator();
		fileMenu.add(exitBeliefMenuItem(beliefListener));

		return fileMenu;
	}

	public JMenuItem newNetworkMenuItem(BeliefListener beliefListener)
	{
		JMenuItem newNetworkMenuItem = new JMenuItem("New Network");

		newNetworkMenuItem.setMnemonic(KeyEvent.VK_N);
		newNetworkMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
		newNetworkMenuItem.setActionCommand("newNetworkMenuItem");
		newNetworkMenuItem.addActionListener(beliefListener);

		return newNetworkMenuItem;
	}

	public JMenuItem openNetworkMenuItem(BeliefListener beliefListener)
	{
		JMenuItem openNetworkMenuItem = new JMenuItem("Open Network");

		openNetworkMenuItem.setMnemonic(KeyEvent.VK_O);
		openNetworkMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
		openNetworkMenuItem.setActionCommand("openNetworkMenuItem");
		openNetworkMenuItem.addActionListener(beliefListener);

		return openNetworkMenuItem;
	}

	public JMenuItem saveNetworkMenuItem(BeliefListener beliefListener)
	{
		saveNetworkMenuItem = new JMenuItem("Save Network");

		saveNetworkMenuItem.setMnemonic(KeyEvent.VK_S);
		saveNetworkMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
		saveNetworkMenuItem.setEnabled(false);
		saveNetworkMenuItem.setActionCommand("saveNetworkMenuItem");
		saveNetworkMenuItem.addActionListener(beliefListener);

		return saveNetworkMenuItem;
	}

	public JMenuItem exitBeliefMenuItem(BeliefListener beliefListener)
	{
		JMenuItem exitBeliefMenuItem = new JMenuItem("Exit Belief");

		exitBeliefMenuItem.setMnemonic(KeyEvent.VK_X);
		exitBeliefMenuItem.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_X, ActionEvent.CTRL_MASK));
		exitBeliefMenuItem.setActionCommand("exitBeliefMenuItem");
		exitBeliefMenuItem.addActionListener(beliefListener);

		return exitBeliefMenuItem;
	}



	/**************
	 ** Run Menu **
	 **************/

	public JMenu runMenu(BeliefListener beliefListener)
	{
		JMenu runMenu = new JMenu("Run");

		runMenu.setMnemonic(KeyEvent.VK_R);

		runMenu.add(runNetworkMenuItem(beliefListener));
		runMenu.addSeparator();
		runMenu.add(resetNetworkMenuItem(beliefListener));

		return runMenu;
	}

	public JMenuItem runNetworkMenuItem(BeliefListener beliefListener)
	{
		runNetworkMenuItem = new JMenuItem("Run Network");

		runNetworkMenuItem.setMnemonic(KeyEvent.VK_U);
		runNetworkMenuItem.setEnabled(false);
		runNetworkMenuItem.setActionCommand("runNetworkMenuItem");
		runNetworkMenuItem.addActionListener(beliefListener);

		return runNetworkMenuItem;
	}

	public JMenuItem resetNetworkMenuItem(BeliefListener beliefListener)
	{
		resetNetworkMenuItem = new JMenuItem("Reset Network");

		resetNetworkMenuItem.setMnemonic(KeyEvent.VK_E);
		resetNetworkMenuItem.setEnabled(false);
		resetNetworkMenuItem.setActionCommand("resetNetworkMenuItem");
		resetNetworkMenuItem.addActionListener(beliefListener);

		return resetNetworkMenuItem;
	}



	/***************
	 ** Help Menu **
	 ***************/

	public JMenu helpMenu()
	{
		JMenu helpMenu = new JMenu("Help");

		helpMenu.setMnemonic(KeyEvent.VK_H);

		helpMenu.add(helpTopicsMenuItem());
		helpMenu.addSeparator();
		helpMenu.add(aboutBeliefMenuItem());

		return helpMenu;
	}

	public JMenuItem helpTopicsMenuItem()
	{
		JMenuItem helpTopicsMenuItem = new JMenuItem("Help Topics");

		helpTopicsMenuItem.setMnemonic(KeyEvent.VK_T);

		return helpTopicsMenuItem;
	}

	public JMenuItem aboutBeliefMenuItem()
	{
		JMenuItem aboutBeliefMenuItem = new JMenuItem("About Belief");

		aboutBeliefMenuItem.setMnemonic(KeyEvent.VK_A);

		return aboutBeliefMenuItem;
	}
}