/**
 * Scott's XML Editor - Swing and JDOM XML Editor
 * @author Scott Hurring - scott at hurring dot com
 * @version beta1
 * @license GPL
 * For most recent version, go to this url:
 * http://hurring.com/code/java/xmleditor/
 */

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 JMenu for MainFrame
 */
public class MainFrameMenuBar extends JMenu
{
	private ScottEditor parent;
	private int CTRL_MASK = java.awt.event.InputEvent.CTRL_MASK;
	
	public MainFrameMenuBar(ScottEditor parent) {
		this.parent = parent;
	}
	
	public JMenuBar create() {
		return createFileJMenu();
	}
	
	private JMenuBar createFileJMenu() {
		JMenuBar mb = new JMenuBar();
		
		JMenu m = new JMenu("File");
		m.add(createFileNew());
		m.add(createFileOpen());
		m.add(createFileSave());
		m.add(createFileSaveAs());
		m.addSeparator();
		m.add(createFileExit());
		mb.add(m);
		
		JMenu t = new JMenu("Tools");
		t.add(createToolsExpandAll());
		t.add(createToolsCollapseAll());
		m.addSeparator();
		t.add(createToolsUpdateTree());
		mb.add(t);

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

	private JMenuItem createFileNew() {	
		JMenuItem mi = new JMenuItem("New");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.newFile();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control N"));
		return mi;
	}

	private JMenuItem createFileOpen() {	
		JMenuItem mi = new JMenuItem("Open");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.openFile();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control O"));
		return mi;
	}
	
	private JMenuItem createFileSave() {	
		JMenuItem mi = new JMenuItem("Save");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.saveFile();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control S"));
		return mi;
	}

	private JMenuItem createFileSaveAs() {	
		JMenuItem mi = new JMenuItem("Save As...");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.saveAs();
			}
		});
		return mi;
	}

	private JMenuItem createFileExit() {	
		JMenuItem mi = new JMenuItem("Exit");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.performExitAction();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control Q"));
		return mi;
	}

/**
 * Tools Menu
 */
	
	private JMenuItem createToolsCollapseAll() {
		JMenuItem mi = new JMenuItem("Collapse All");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.xmleditor.xmltree.collapseAll();
			}
		});
		return mi;
	}

	private JMenuItem createToolsExpandAll() {
		JMenuItem mi = new JMenuItem("Expand All");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.xmleditor.xmltree.expandAll();
			}
		});
		return mi;
	}
	
	private JMenuItem createToolsUpdateTree() {
		JMenuItem mi = new JMenuItem("Rebuild Tree");
		mi.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				parent.xmleditor.updateXMLTree();
				parent.xmleditor.xmltree.expandAll();
			}
		});
		mi.setAccelerator(KeyStroke.getKeyStroke("control R"));
		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;
	}	

}

