/jEdit/tags/jedit-4-1-pre5/bsh/commands/makeWorkspace.bsh

# · Unknown · 129 lines · 103 code · 26 blank · 0 comment · 0 complexity · c3d503398f6047057edae2aef5e31b19 MD5 · raw file

  1. /**
  2. Open a new workspace (shell) in the GUI.
  3. */
  4. import javax.swing.*;
  5. import bsh.Interpreter;
  6. import bsh.BshClassManager;
  7. import bsh.util.JConsole;
  8. import bsh.util.NameCompletionTable;
  9. makeWorkspace( String name ) {
  10. if ( bsh.system.desktop == void ) {
  11. print("No desktop...");
  12. return;
  13. }
  14. console = new JConsole();
  15. name="Bsh Workspace: "+name;
  16. interpreter = new Interpreter( console );
  17. // provide name completion for console, name source is global namespace
  18. // move this into JConsole?
  19. nct = new NameCompletionTable();
  20. nct.add( interpreter.getNameSpace() );
  21. try {
  22. bcm = BshClassManager.getClassManager();
  23. if ( bcm != null ) {
  24. classNamesSource = bcm.getClassPath();
  25. nct.add( classNamesSource );
  26. }
  27. } catch ( ClassPathException e ) {
  28. error("classpath exception in name compl:"+e);
  29. }
  30. console.setNameCompletion( nct );
  31. // end setup name completion
  32. // for convenience and backwards compatability
  33. interpreter.set( "bsh.desktop", bsh.system.desktop );
  34. frame = bsh.system.desktop.makeInternalFrame( name );
  35. frame.setDefaultCloseOperation( frame.DO_NOTHING_ON_CLOSE );
  36. internalFrameClosing( e ) {
  37. close();
  38. }
  39. frame.addInternalFrameListener(this);
  40. actionPerformed( e ) {
  41. com = e.getActionCommand();
  42. if ( com.equals("Workspace Editor") )
  43. workspaceEditor( interpreter, name );
  44. else if ( com.equals("Capture System in/out/err") )
  45. captureSysIO();
  46. else if ( com.equals("Close") ) {
  47. close();
  48. }
  49. }
  50. /*
  51. Notes: Careful not to print anything before returning sys io...
  52. console is now gone.
  53. */
  54. close() {
  55. frame.dispose();
  56. if ( haveSysIO )
  57. returnSysIO();
  58. }
  59. menubar = new JMenuBar();
  60. menu=new JMenu("File");
  61. mi=new JMenuItem("Workspace Editor");
  62. mi.addActionListener(this);
  63. menu.add(mi);
  64. mi=new JMenuItem("Capture System in/out/err");
  65. mi.addActionListener(this);
  66. menu.add(mi);
  67. mi=new JMenuItem("Close");
  68. mi.addActionListener(this);
  69. menu.add(mi);
  70. menubar.add(menu);
  71. menu = bsh.system.desktop.makeFontMenu( console );
  72. menubar.add(menu);
  73. frame.setMenuBar(menubar);
  74. frame.getContentPane().add("Center", console);
  75. //frame.pack();
  76. thread = new Thread( interpreter );
  77. thread.start();
  78. frame.setBounds(5,5,600,300);
  79. // cascade windows?
  80. //off=bsh.system.desktop.windowCount*10;
  81. //frame.setLocation( off, off );
  82. //frame.validate();
  83. bsh.system.desktop.addInternalFrame( frame );
  84. frame.toFront();
  85. frame.setSelected(true);
  86. haveSysIO=false;
  87. sysIn = System.in;
  88. sysOut = System.out;
  89. sysErr = System.err;
  90. captureSysIO() {
  91. super.haveSysIO = true;
  92. System.setIn( console.getInputStream() );
  93. System.setOut( console.getOut() );
  94. System.setErr( console.getErr() );
  95. }
  96. returnSysIO() {
  97. super.haveSysIO = false;
  98. System.setIn( sysIn );
  99. System.setOut( sysOut );
  100. System.setErr( sysErr );
  101. }
  102. return interpreter;
  103. }