bsh.commands.makeWorkspace.bsh Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of bsh Show documentation
Show all versions of bsh Show documentation
BeanShell is a small, free, embeddable Java source interpreter with object scripting language features,
written in Java. BeanShell dynamically executes standard Java syntax and extends it with common scripting
conveniences such as loose types, commands, and method closures like those in Perl and JavaScript.
The newest version!
/**
* Creates a JConsole in a JInternalFrame and adds it to the desktop
*
* @return this (the workspace scripted object for allowing access to the
* frame, interpreter, etc.)
*
* @author Pat Niemeyer
* @author Daniel Leuck (bug fixes)
*/
import javax.swing.*;
import bsh.Interpreter;
import bsh.BshClassManager;
import bsh.ClassPathException;
import bsh.util.JConsole;
import bsh.util.NameCompletionTable;
makeWorkspace( String name )
{
if ( bsh.system.desktop == void ) {
print("No desktop...");
return;
}
this.console = new JConsole();
this.name="Bsh Workspace: "+name;
this.interpreter = new Interpreter( console );
// provide name completion for console, name source is global namespace
// move this into JConsole?
// Access to read classpath is protected
try {
this.nct = new NameCompletionTable();
nct.add( interpreter.getNameSpace() );
try {
this.bcm = this.caller.namespace.getClassManager();
if ( bcm != null ) {
classNamesSource = bcm.getClassPath();
nct.add( classNamesSource );
}
} catch ( ClassPathException e ) {
error("classpath exception in name compl:"+e);
}
console.setNameCompletion( nct );
// end setup name completion
} catch ( SecurityException e ) { }
// for convenience and backwards compatability
interpreter.set( "bsh.desktop", bsh.system.desktop );
this.frame = bsh.system.desktop.makeInternalFrame( name );
frame.frameIcon=bsh.system.icons.workspace;
/*
Notes: Careful not to print anything before returning sys io...
console is now gone.
*/
internalFrameClosing( e ) {
if ( haveSysIO )
returnSysIO();
}
internalFrameActivated(ife) {}
internalFrameDeactivated(ife) {}
internalFrameClosed(ife) {}
internalFrameOpened(ife) {}
internalFrameIconified(ife) {}
internalFrameDeiconified(ife) {}
frame.addInternalFrameListener(this);
actionPerformed( e )
{
this.com = e.getActionCommand();
if ( com.equals("Workspace Editor") )
workspaceEditor( interpreter, name );
else if ( com.equals("Capture System in/out/err") )
captureSysIO();
else if ( com.equals("Close") ) {
frame.setClosed(true);
}
}
this.menubar = new JMenuBar();
this.menu=new JMenu("File");
this.mi=new JMenuItem("Workspace Editor");
mi.addActionListener(this);
menu.add(mi);
mi=new JMenuItem("Capture System in/out/err");
mi.addActionListener(this);
menu.add(mi);
mi=new JMenuItem("Close");
mi.addActionListener(this);
menu.add(mi);
menubar.add(menu);
menu = fontMenu(console);
menubar.add(menu);
frame.setMenuBar(menubar);
frame.getContentPane().add("Center", console);
//frame.pack();
this.thread = new Thread( interpreter );
thread.start();
frame.setBounds(5,5,600,300);
// cascade windows?
//off=bsh.system.desktop.windowCount*10;
//frame.setLocation( off, off );
//frame.validate();
bsh.system.desktop.addInternalFrame( frame );
frame.toFront();
frame.setSelected(true);
this.haveSysIO=false;
this.sysIn = System.in;
this.sysOut = System.out;
this.sysErr = System.err;
captureSysIO() {
super.haveSysIO = true; // old scoping rules
System.setIn( console.getInputStream() );
System.setOut( console.getOut() );
System.setErr( console.getErr() );
}
returnSysIO() {
super.haveSysIO = false; // old scoping rules
System.setIn( sysIn );
System.setOut( sysOut );
System.setErr( sysErr );
}
return this;
}