import javax.swing.JFrame;
import javax.swing.JFileChooser;
import java.io.*;
import javax.swing.JTextArea;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JDialog;
import javax.swing.JLabel;

/*
 * Created on Jan 19, 2006
 *
 * 
 */

/**
 * @author jzimmerm
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class simpl extends JFrame {

	private javax.swing.JPanel jContentPane = null;
	private javax.swing.JMenuBar jJMenuBar = null;
	private javax.swing.JMenu fileMenu = null;
	private javax.swing.JMenu editMenu = null;
	private javax.swing.JMenu helpMenu = null;
	private javax.swing.JMenuItem exitMenuItem = null;
	private javax.swing.JMenuItem aboutMenuItem = null;
	private javax.swing.JMenuItem cutMenuItem = null;
	private javax.swing.JMenuItem copyMenuItem = null;
	private javax.swing.JMenuItem pasteMenuItem = null;
	private javax.swing.JMenuItem openMenuItem = null;
	private JFrame myself;
	private JTextArea jTextArea = null;
	private JMenu simplMenu = null;
	private JMenuItem compileMenuItem = null;
	private String fileName = null;
	private String path = null;
	private JMenuItem runMenuItem = null;
	private JMenuItem saveMenuItem = null;
	/**
	 * This method initializes jTextArea	
	 * 	
	 * @return javax.swing.JTextArea	
	 */    
	private JTextArea getJTextArea() {
		if (jTextArea == null) {
			jTextArea = new JTextArea();
		}
		return jTextArea;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */    
	private JMenu getSimplMenu() {
		if (simplMenu == null) {
			simplMenu = new JMenu();
			simplMenu.setText("Simpl");
			simplMenu.add(getCompileMenuItem());
			simplMenu.add(getRunMenuItem());
			path = System.getProperty("user.dir");
		}
		return simplMenu;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private JMenuItem getCompileMenuItem() {
		if (compileMenuItem == null) {
			compileMenuItem = new JMenuItem();
			compileMenuItem.setText("Compile");
			compileMenuItem.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					try {
						if (fileName != null){
							FileWriter fw = new FileWriter(fileName + ".sim");
				            fw.write(jTextArea.getText());
				            fw.close();
							Process p = Runtime.getRuntime().exec("simpl.bat" + " " + fileName);
						}
					}
					catch (Exception ex){System.out.println(ex);}
				}});
			}
		return compileMenuItem;
		
	}

	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private JMenuItem getRunMenuItem() {
		if (runMenuItem == null) {
			runMenuItem = new JMenuItem();
			runMenuItem.setText("Run");
			runMenuItem.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					try {
						if (fileName != null){
						Process p = Runtime.getRuntime().exec("run.bat" + " " + fileName);
						}
					}catch (Exception ex){System.out.println(ex);}
				}
			});
		}
		return runMenuItem;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private JMenuItem getSaveMenuItem() {
		if (saveMenuItem == null) {
			saveMenuItem = new JMenuItem();
			saveMenuItem.setText("Save As...");
			saveMenuItem.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
			        JFileChooser chooser;
			        if (path == null) chooser = new JFileChooser();
			        else {chooser = new JFileChooser(path); chooser.setSelectedFile(new File(path)); }

			        ExtensionFileFilter filter = new ExtensionFileFilter();
			        filter.addExtension("sim");
			        filter.setDescription("SIMPL programs");
			        chooser.setFileFilter(filter);
			        int returnVal = chooser.showSaveDialog(myself);
			        if (returnVal == JFileChooser.APPROVE_OPTION) {
			            path = chooser.getSelectedFile().getPath();
			            if (!path.endsWith(".sim"))path = path + ".sim";
			            try{
			            FileWriter fw = new FileWriter(path);
			            fw.write(jTextArea.getText());
			            fw.close();
			            }catch(Exception ex){System.out.println(ex);}
			  
			         }
				}
			});
			
		}
		return saveMenuItem;
	}
         	public static void main(String[] args) {
		simpl application = new simpl();
		application.show();
		
	}

	/**
	 * This is the default constructor
	 */
	public simpl() {
		super();
		initialize();
		myself = this;
	}
	/**
	 * This method initializes this
	 * 
	 * @return void
	 */
	private void initialize() {
		this.setDefaultCloseOperation(javax.swing.JFrame.EXIT_ON_CLOSE);
		this.setJMenuBar(getJJMenuBar());
		this.setSize(600, 700);
		this.setContentPane(getJContentPane());  
		this.setTitle("SIMPL Compiler");

	}
	/**
	 * This method initializes jContentPane
	 * 
	 * @return javax.swing.JPanel
	 */
	private javax.swing.JPanel getJContentPane() {
		if(jContentPane == null) {
			jContentPane = new javax.swing.JPanel();
			jContentPane.setLayout(new java.awt.BorderLayout());
			jContentPane.setBackground(java.awt.Color.white);
			jContentPane.add(getJTextArea(), java.awt.BorderLayout.CENTER);
		}
		return jContentPane;
	}
	/**
	 * This method initializes jJMenuBar	
	 * 	
	 * @return javax.swing.JMenuBar	
	 */    
	private javax.swing.JMenuBar getJJMenuBar() {
		if (jJMenuBar == null) {
			jJMenuBar = new javax.swing.JMenuBar();
			jJMenuBar.add(getFileMenu());
			//jJMenuBar.add(getEditMenu());
			jJMenuBar.add(getSimplMenu());
			jJMenuBar.add(getHelpMenu());
		}
		return jJMenuBar;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */    
	private javax.swing.JMenu getFileMenu() {
		if (fileMenu == null) {
			fileMenu = new javax.swing.JMenu();
			fileMenu.setText("File");
			fileMenu.add(getOpenMenuItem());
			fileMenu.add(getSaveMenuItem());
			fileMenu.add(getExitMenuItem());
		}
		return fileMenu;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */    
	private javax.swing.JMenu getEditMenu() {
		if (editMenu == null) {
			editMenu = new javax.swing.JMenu();
			editMenu.setText("Edit");
			editMenu.add(getCutMenuItem());
			editMenu.add(getCopyMenuItem());
			editMenu.add(getPasteMenuItem());
		}
		return editMenu;
	}
	/**
	 * This method initializes jMenu	
	 * 	
	 * @return javax.swing.JMenu	
	 */    
	private javax.swing.JMenu getHelpMenu() {
		if (helpMenu == null) {
			helpMenu = new javax.swing.JMenu();
			helpMenu.setText("Help");
			helpMenu.add(getAboutMenuItem());
		}
		return helpMenu;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private javax.swing.JMenuItem getExitMenuItem() {
		if (exitMenuItem == null) {
			exitMenuItem = new javax.swing.JMenuItem();
			exitMenuItem.setText("Exit");
			exitMenuItem.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {  
					try {
						if (fileName != null){
							FileWriter fw = new FileWriter(fileName + ".sim");
				            fw.write(jTextArea.getText());
				            fw.close();
						}
					}
					catch (Exception ex){System.out.println(ex);}
					System.exit(0);
				}
			});
		}
		return exitMenuItem;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private javax.swing.JMenuItem getAboutMenuItem() {
		if (aboutMenuItem == null) {
			aboutMenuItem = new javax.swing.JMenuItem();
			aboutMenuItem.setText("About");
			aboutMenuItem.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					JDialog about = new javax.swing.JDialog(simpl.this, "About", true);
					about.getContentPane().add(new JLabel("SIMPL IDE version 0.1"));
					about.getContentPane().setBackground(java.awt.Color.white);
					about.setSize(150,100);
					about.show();
				}
			});
		}
		return aboutMenuItem;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private javax.swing.JMenuItem getCutMenuItem() {
		if (cutMenuItem == null) {
			cutMenuItem = new javax.swing.JMenuItem();
			cutMenuItem.setText("Cut");
			cutMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_X, java.awt.Event.CTRL_MASK, true));
		}
		return cutMenuItem;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private javax.swing.JMenuItem getCopyMenuItem() {
		if (copyMenuItem == null) {
			copyMenuItem = new javax.swing.JMenuItem();
			copyMenuItem.setText("Copy");
			copyMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_C, java.awt.Event.CTRL_MASK, true));
		}
		return copyMenuItem;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private javax.swing.JMenuItem getPasteMenuItem() {
		if (pasteMenuItem == null) {
			pasteMenuItem = new javax.swing.JMenuItem();
			pasteMenuItem.setText("Paste");
			pasteMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_V, java.awt.Event.CTRL_MASK, true));
		}
		return pasteMenuItem;
	}
	/**
	 * This method initializes jMenuItem	
	 * 	
	 * @return javax.swing.JMenuItem	
	 */    
	private javax.swing.JMenuItem getOpenMenuItem() {
		if (openMenuItem == null) {
			openMenuItem = new javax.swing.JMenuItem();
			openMenuItem.setText("Open");
			//openMenuItem.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_O, java.awt.Event.CTRL_MASK, true));
			openMenuItem.addActionListener(new java.awt.event.ActionListener() { 
				public void actionPerformed(java.awt.event.ActionEvent e) {    
					
			        JFileChooser chooser;
			        if (path == null) chooser = new JFileChooser();
			        else chooser = new JFileChooser(path);
			        ExtensionFileFilter filter = new ExtensionFileFilter();
			        filter.addExtension("sim");
			        filter.setDescription("SIMPL programs");
			        chooser.setFileFilter(filter);
			        int returnVal = chooser.showOpenDialog(myself);
			        if (returnVal == JFileChooser.APPROVE_OPTION) {
			            path = chooser.getSelectedFile().getPath();
			            String name = chooser.getSelectedFile().getName();
			            if (name.endsWith(".sim")){
			            	fileName = name.substring(0,name.length()-4);
			            	try {
			                BufferedReader in = new BufferedReader(new FileReader(path));  
			                jTextArea.setText("");
			                jTextArea.repaint();
			                String s = in.readLine();
			   
			   
			                while(s != null) {
			                    jTextArea.append(s + '\n');
			                    s = in.readLine();
			                }
			            	}
			            	catch(IOException ex){System.out.println(ex);}
			            }
			         }
			}
		});
		
	}
		return openMenuItem;
}
}
