
/**
 * Make a new workspaceEditor associated with a workspace and place it on the
 * desktop.
 *
 * @method workspaceEditor( bsh.Interpreter parent, String name )
 *
 * @author Pat Niemeyer
 * @author Daniel Leuck
 */
 
import java.awt.Insets;
import bsh.Interpreter;

workspaceEditor(Interpreter parent, String name ) 
{
	
	if ( bsh.system.desktop == void ) {
		print("This only works with the bsh desktop...");
		return;
	}

	this.textarea = new JTextArea(15,40);
	textarea.setLineWrap(true);
	textarea.setWrapStyleWord(true);
	textarea.setTabSize(4);
	textarea.setMargin( new Insets(5,5,5,5) );
	textarea.font=new Font("Monospaced", 0, 12);

	// probably should overload desktop makeInternalFrame
	this.frame = 
		new JInternalFrame("Editor for: "+name, true, true, true, true );
	frame.frameIcon=bsh.system.icons.script;
	frame.getContentPane().add( new JScrollPane(textarea), "Center");
	frame.setVisible( true );

	open() 
	{
		this.chooser = new JFileChooser();
		chooser.setCurrentDirectory( pathToFile(bsh.cwd) );
		this.returnVal = chooser.showOpenDialog( bsh.system.desktop.pane );
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			this.file = chooser.getSelectedFile();
			this.reader=new FileReader( file );
			this.ca=new char [file.length()];
			reader.read(ca);
			textarea.setText( new String(ca) );
		}
	}

	save() 
	{
		this.chooser = new JFileChooser();
		chooser.setCurrentDirectory( pathToFile(bsh.cwd) );
		this.returnVal = chooser.showSaveDialog( bsh.system.desktop.pane );
		if (returnVal == JFileChooser.APPROVE_OPTION) {
			this.file = chooser.getSelectedFile();
			this.writer=new FileWriter( file );
			writer.write( textarea.getText().toCharArray() );
			writer.close();
		}
	}

	run() 
	{
		this.interpreter = makeWorkspace( "Run Output: " +name);
		// should make this new namespace... look at run() command
    	interpreter.eval( textarea.getText() );
		print("done run...");
	}

	actionPerformed(e) 
	{
		this.com = e.getActionCommand();
		if ( com.equals("Close") )
			frame.setClosed(true);
		else if ( com.equals("New") )
			textarea.setText("");
		else if ( com.equals("Open") )
			open();
		else if ( com.equals("Save") )
			save();
		else if ( com.equals("Eval in Workspace") )
			// eval in parent global namespace
    		parent.eval( textarea.getText() );
		else if ( com.equals("Run in new Workspace") )
			run();
	}

	this.menubar = new JMenuBar();
	this.menu = new JMenu("File");
	this.mi = new JMenuItem("New");
	mi.addActionListener(this);
	menu.add(mi);
	mi = new JMenuItem("Open");
	mi.addActionListener(this);
	menu.add(mi);
	mi = new JMenuItem("Save");
	mi.addActionListener(this);
	menu.add(mi);
	mi = new JMenuItem("Close");
	mi.addActionListener(this);
	menu.add(mi);
	menubar.add(menu);

	menu = new JMenu("Evaluate");
	mi = new JMenuItem("Eval in Workspace");
	mi.addActionListener(this);
	menu.add(mi);
	mi = new JMenuItem("Run in new Workspace");
	mi.addActionListener(this);
	menu.add(mi);
	menubar.add(menu);

	menu = fontMenu( textarea );
	menubar.add(menu);

	frame.setMenuBar( menubar );

	frame.pack();
	bsh.system.desktop.addInternalFrame( frame );
	frame.selected=true;
	return frame;
}
