Simple GUI front-end in Java.
[anag] / AnagGUI.java
1 /* -*-java-*-
2 *
3 * $Id: AnagGUI.java,v 1.1 2001/02/04 19:53:07 mdw Exp $
4 *
5 * Front-end GUI
6 *
7 * (c) 2001 Mark Wooding
8 */
9
10 /*----- Licensing notice --------------------------------------------------*
11 *
12 * This file is part of Anag: a simple wordgame helper.
13 *
14 * Anag is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License as published by
16 * the Free Software Foundation; either version 2 of the License, or
17 * (at your option) any later version.
18 *
19 * Anag is distributed in the hope that it will be useful,
20 * but WITHOUT ANY WARRANTY; without even the implied warranty of
21 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
22 * GNU General Public License for more details.
23 *
24 * You should have received a copy of the GNU General Public License
25 * along with Anag; if not, write to the Free Software Foundation,
26 * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 */
28
29 /*----- Revision history --------------------------------------------------*
30 *
31 * $Log: AnagGUI.java,v $
32 * Revision 1.1 2001/02/04 19:53:07 mdw
33 * Simple GUI front-end in Java.
34 *
35 */
36
37 /*----- Imports -----------------------------------------------------------*/
38
39 import java.lang.*;
40 import java.util.*;
41 import java.io.*;
42 import java.awt.*;
43 import java.applet.*;
44 import java.awt.event.*;
45
46 /*----- Main code ---------------------------------------------------------*/
47
48 class Whinge extends Frame {
49 public Whinge(String gripe) {
50 super("Error!");
51 GridBagLayout gb = new GridBagLayout();
52 setLayout(gb);
53
54 addWindowListener(new WindowAdapter() {
55 public void windowClosing(WindowEvent e) { dispose(); }
56 });
57
58 GridBagConstraints g = new GridBagConstraints();
59 g.gridx = g.gridy = GridBagConstraints.RELATIVE;
60 g.gridwidth = GridBagConstraints.REMAINDER; g.gridheight = 1;
61 g.weightx = g.weighty = 1;
62 g.insets = new Insets(24, 24, 8, 24);
63 Label l = new Label(gripe);
64 add(l); gb.setConstraints(l, g);
65
66 Button b = new Button("Bummer");
67 b.addActionListener(new ActionListener() {
68 public void actionPerformed(ActionEvent e) { dispose(); }
69 });
70 g.weighty = 0;
71 g.insets.top = 0; g.insets.bottom = 24;
72 add(b); gb.setConstraints(l, g);
73 pack();
74 show();
75 }
76 }
77
78 class AnagPanel extends Panel {
79 TextField word;
80 java.awt.List list;
81
82 void splat(String gripe) {
83 new Whinge(gripe);
84 }
85
86 void getlist(String tag) {
87 try {
88 Vector v = new Vector();
89 String[] vv;
90 v.addElement("anag");
91 v.addElement(tag);
92 v.addElement(word.getText());
93 vv = new String[v.size()];
94 v.copyInto(vv);
95 Process p = Runtime.getRuntime().exec(vv);
96 LineNumberReader fout =
97 new LineNumberReader(new InputStreamReader(p.getInputStream()));
98 LineNumberReader ferr =
99 new LineNumberReader(new InputStreamReader(p.getErrorStream()));
100
101 String l;
102 v = new Vector();
103 while ((l = fout.readLine()) != null)
104 v.addElement(l);
105 StringBuffer d = new StringBuffer();
106 while ((l = ferr.readLine()) != null)
107 d.append(l).append("\n");
108 l = d.toString();
109 if (l.length() > 0)
110 splat(l);
111 else {
112 list.removeAll();
113 int i;
114 vv = new String[v.size()];
115 v.copyInto(vv);
116 for (i = 0; i < vv.length; i++)
117 list.add(vv[i]);
118 }
119 } catch (IOException e) {
120 splat(e.toString());
121 }
122 }
123
124 public AnagPanel() {
125 super();
126 GridBagLayout gb = new GridBagLayout();
127 setLayout(gb);
128 Button b;
129
130 GridBagConstraints g = new GridBagConstraints();
131 g.gridx = g.gridy = GridBagConstraints.RELATIVE;
132 g.gridwidth = g.gridheight = 1;
133 g.weightx = 1; g.weighty = 0;
134
135 word = new TextField(40);
136 g.fill = GridBagConstraints.HORIZONTAL;
137 g.insets = new Insets(8, 8, 8, 8);
138 add(word); gb.setConstraints(word, g);
139
140 g.fill = GridBagConstraints.NONE;
141 g.weightx = g.weighty = 0;
142 g.insets.left = 0;
143 b = new Button("Anagram");
144 b.addActionListener(new ActionListener() {
145 public void actionPerformed(ActionEvent e) { getlist("-anagram"); }
146 });
147 add(b); gb.setConstraints(b, g);
148 b = new Button("Subgram");
149 b.addActionListener(new ActionListener() {
150 public void actionPerformed(ActionEvent e) { getlist("-subgram"); }
151 });
152 add(b); gb.setConstraints(b, g);
153 b = new Button("Wildcard");
154 b.addActionListener(new ActionListener() {
155 public void actionPerformed(ActionEvent e) { getlist("-wildcard"); }
156 });
157 add(b); gb.setConstraints(b, g);
158 b = new Button("Trackword");
159 b.addActionListener(new ActionListener() {
160 public void actionPerformed(ActionEvent e) { getlist("-trackword"); }
161 });
162 g.gridwidth = GridBagConstraints.REMAINDER;
163 add(b); gb.setConstraints(b, g);
164
165 list = new java.awt.List(20);
166 g.fill = GridBagConstraints.BOTH;
167 g.insets.left = 8; g.insets.top = 0;
168 g.gridwidth = 5;
169 g.weightx = g.weighty = 1;
170 add(list); gb.setConstraints(list, g);
171 }
172 }
173
174 /*----- Program or applet -------------------------------------------------*/
175
176 public class AnagGUI extends Applet {
177 public static void main(String[] argv) {
178 Frame f = new Frame("Anagram solver");
179 f.addWindowListener(new WindowAdapter() {
180 public void windowClosing(WindowEvent e) { System.exit(0); }
181 });
182 AnagPanel p = new AnagPanel();
183 f.add(p);
184 f.pack();
185 f.show();
186 }
187 public AnagGUI() { super(); setLayout(new BorderLayout()); }
188 public void init() { add(new AnagPanel()); }
189 public void destroy() { removeAll(); }
190 };
191
192 /*----- That's all, folks -------------------------------------------------*/