| 1 package kawa; 2 3 import java.awt.*; 4 import java.awt.event.*; 5 import gnu.mapping.*; 6 7 import gnu.expr.Language; 8 import kawa.standard.Scheme; 9 10 14 15 public class GuiConsole extends Frame implements ActionListener { 16 private static String CLOSE = "Close"; 17 private static String EXIT = "Exit"; 18 private static String NEW = "New"; 19 private static String NEW_SHARED = "New (Shared)"; 20 private static String PURGE_MESSAGE = "Purge Buffer"; 21 22 static int window_number = 0; 23 24 Language language; 25 Environment environment; 26 Future thread; 27 28 gnu.text.QueueReader in_r; 29 OutPort out_p, err_p; 30 31 MessageArea message = null; 32 33 public static void main(String [] args) { 34 Language language = Scheme.getInstance(); 35 new GuiConsole(); 36 } 37 38 public GuiConsole() 39 { 40 this(Language.getDefaultLanguage(), Environment.getCurrent(), false); 41 } 42 43 public GuiConsole(Language language, Environment penvironment, boolean shared) 44 { 45 super("Kawa"); 46 this.language = language; 47 48 in_r = new gnu.text.QueueReader (); 49 message = new MessageArea(in_r); 50 window_number++; 51 kawa.repl.exitIncrement(); 52 53 out_p = new OutPort(message.getStdout(), true, "<msg_stdout>"); 54 err_p = new OutPort(message.getStderr(), true, "<msg_stderr>"); 55 InPort in_p = new GuiInPort(in_r, "<msg_stdin>", out_p, message); 56 57 this.setLayout(new BorderLayout(0,0)); 58 59 this.add("Center",message); 60 61 setupMenus(); 62 setLocation(100 * window_number, 50 * window_number); 64 setSize(700,500); 65 setVisible(true); 66 67 thread = new Future (new kawa.repl(language), 68 penvironment, in_p, out_p, err_p); 69 Environment env = thread.getEnvironment(); 70 if (shared) 71 env.setIndirectDefines(); 72 this.environment = env; 73 thread.start(); 74 } 75 76 void close () { 77 in_r.appendEOF(); 78 dispose(); 79 try { 81 Thread.sleep(100); 82 } catch (InterruptedException ex) { 83 } 84 thread.stop(); 87 kawa.repl.exitDecrement(); 88 } 89 90 private void setupMenus() { 91 MenuBar menubar; 92 Menu fileMenu; 93 Menu utilitiesMenu; 94 95 MenuItem menuItem; 96 97 WindowListener windowExitCmd = new WindowAdapter() { 98 public void windowClosing(WindowEvent e) { 99 close(); 100 } 101 }; 102 103 menubar = new MenuBar(); 105 fileMenu = new Menu("File"); 106 utilitiesMenu = new Menu("Utilities"); 107 108 menubar.add(fileMenu); 109 menubar.add(utilitiesMenu); 110 111 menuItem = new MenuItem(NEW); 112 menuItem.addActionListener(this); 113 fileMenu.add(menuItem); 114 115 menuItem = new MenuItem(NEW_SHARED); 116 menuItem.addActionListener(this); 117 fileMenu.add(menuItem); 118 119 menuItem = new MenuItem(CLOSE); 120 menuItem.addActionListener(this); 121 fileMenu.add(menuItem); 122 123 menuItem = new MenuItem(EXIT); 124 menuItem.addActionListener(this); 125 this.addWindowListener(windowExitCmd); 126 fileMenu.add(menuItem); 127 128 menuItem = new MenuItem(PURGE_MESSAGE); 129 menuItem.addActionListener(this); 130 utilitiesMenu.add(menuItem); 131 132 this.setMenuBar(menubar); 133 } 134 135 public void actionPerformed(ActionEvent e) { 136 String cmd = e.getActionCommand(); 137 138 if (cmd.equals(NEW)) 139 new GuiConsole(language, Environment.getGlobal(), false); 140 else if (cmd.equals(NEW_SHARED)) 141 new GuiConsole(language, environment, true); 142 else if (cmd.equals(EXIT)) 143 System.exit(0); 144 else if (cmd.equals(CLOSE)) 145 close(); 146 else if (cmd.equals(PURGE_MESSAGE)) { 147 message.deleteOldText(); 148 } 149 else 150 OutPort.outDefault().println("Unknown menu action: "+cmd); 151 } 152 } 153 | Popular Tags |