package edu.calpoly.csc480.Entomo.Main;

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

import com.bcurry.www.swing.*;
import com.bcurry.www.swing.filechooser.*;
import com.bcurry.www.swing.dialog.*;

public class FileMenu extends BasicMenu {
	public FileMenu() {
		super("File", 'f');
	}
	
	final public String getFileName() {
		return (file != null ? file.getAbsolutePath() : "Unnamed");
	}

	public void setOwner(Main owner) {
		this.main = owner;

		add(openItem  = new JMenuItem("Open...", 'o'));
		add(closeItem = new JMenuItem("Close", 'c'));
		addSeparator();
		add(exitItem  = new JMenuItem("Exit", 'x'));
		
		openItem.addActionListener(new OpenItemListener());
		closeItem.addActionListener(new CloseItemListener());
		exitItem.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent event) {main.exit();}
		});
 
		closeItem.setEnabled(false);
	}

	protected Main main;

	protected JMenuItem openItem, closeItem, exitItem;
	
	protected File file;

	protected class OpenItemListener implements ActionListener {
		final protected BasicFileFilter filters[] = {
			new BasicFileFilter("Area Files", ".area"),
			new BasicFileFilter("All Files", ".*")
		};
		
		public OpenItemListener() {
			chooser = new BasicFileChooser();
			chooser.setText("Open", "Open an existing area");
			chooser.addChoosableFileFilters(filters);
		}
			
		public void actionPerformed(ActionEvent event) {
			int result;
			
			result = chooser.showDialog(main);
			file = chooser.getSelectedFile();

			if (result == JFileChooser.APPROVE_OPTION && file != null) {
				try {
					main.fileOpened(file);
					openItem.setEnabled(false);
					closeItem.setEnabled(true);
				}
				catch (IOException err) {
					BasicOptionPane.showError("Open Error",
					 "Error reading " + file + ": " + err.getMessage());
				}
			}
      }
		
		protected BasicFileChooser chooser;
	}	
	
	protected class CloseItemListener implements ActionListener {
		public CloseItemListener() {
		}
			
		public void actionPerformed(ActionEvent event) {
			file = null;
			
			openItem.setEnabled(true);
			closeItem.setEnabled(false);
			main.fileClosed();
		}
	}
}