KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > kawa > GuiConsole


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 /** A Frame containing a Kawa read-eval-print loop.
11   * @author Albert Ting <alt@artisan.com> (original base)
12   * @author Per Bothner (extensive changes).
13   */

14
15 public class GuiConsole extends Frame implements ActionListener {
16   private static String JavaDoc CLOSE = "Close";
17   private static String JavaDoc EXIT = "Exit";
18   private static String JavaDoc NEW = "New";
19   private static String JavaDoc NEW_SHARED = "New (Shared)";
20   private static String JavaDoc 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 JavaDoc[] 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     //pack();
63
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     // Give thread chance to finish and clean up
80
try {
81       Thread.sleep(100);
82     } catch (InterruptedException JavaDoc ex) {
83     }
84     // Thread.stop is deprecated in JDK 1.2, but I see no good
85
// alternative. (Thread.destroy is not implemented!)
86
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     // Create the menubar
104
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 JavaDoc 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