1 package fr.ove.openmath.mfd2.frames;
2
3 import java.awt.*;
4 import java.util.*;
5 import java.awt.event.*;
6 import fr.ove.openmath.mfd2.*;
7 import fr.ove.openmath.mfd2.events.*;
8 import fr.ove.openmath.jome.Jome;
9 import fr.ove.openmath.exceptions.*;
10
11 /***
12 * The frame for entering the elements of the request of type containing.
13 *
14 * @author © 1999 DIRAT Laurent
15 * @version 1.0 27/10/1999
16 */
17 public final class RequestContaining extends Frame implements OpenMathResultSetable {
18 Panel panelContaining;
19 Panel panelContainingRequest;
20 Panel panelChecboxes;
21 Panel panelOperators;
22 Label labelOperators;
23 Panel panelCheckboxOperators;
24 Checkbox checkboxPlus;
25 Checkbox checkboxMult;
26 Checkbox checkboxMinus;
27 Checkbox checkboxDivide;
28 Checkbox checkboxPower;
29 Panel panelRelations;
30 Label labelRelations;
31 Panel panelCheckboxRelational;
32 Checkbox checkboxEq;
33 Checkbox checkboxNeq;
34 Checkbox checkboxLt;
35 Checkbox checkboxLeq;
36 Checkbox checkboxGt;
37 Checkbox checkboxGeq;
38 Panel panelFunctions;
39 Label labelFuntions;
40 Panel panelCheckboxFunctions;
41 Checkbox checkboxLog;
42 Checkbox checkboxLn;
43 Checkbox checkboxExp;
44 Checkbox checkboxSin;
45 Checkbox checkboxCos;
46 Checkbox checkboxTan;
47 Checkbox checkboxArcsin;
48 Checkbox checkboxArccos;
49 Checkbox checkboxArctan;
50 Panel panelButtons;
51 Button buttonSendRequest;
52 ScrollPane panelResultRequest;
53
54 Jome jomeResult;
55
56 PanelMfd2 panelMfd2;
57
58 String containing;
59
60
61 private Vector listeners = new Vector();
62
63 public RequestContaining(Frame parent, PanelMfd2 thePanelMfd2) {
64 super("Looking for Data...");
65 panelMfd2 = thePanelMfd2;
66 setLayout(new BorderLayout());
67 setBackground(Color.lightGray);
68
69 setSize(510,340);
70
71 panelContaining = new Panel();
72 panelContaining.setLayout(new FlowLayout());
73 panelContaining.setFont(new Font("Dialog", Font.PLAIN, 16));
74 add("West", panelContaining);
75
76 panelContainingRequest = new Panel();
77 panelContainingRequest.setLayout(new BorderLayout(0,2));
78 panelContaining.add("West", panelContainingRequest);
79
80 panelChecboxes = new Panel();
81 panelChecboxes.setLayout(new BorderLayout(0,5));
82 panelContainingRequest.add("West", panelChecboxes);
83
84 panelOperators = new Panel();
85 panelOperators.setLayout(new BorderLayout(0,0));
86 panelChecboxes.add("North", panelOperators);
87 labelOperators = new Label("Basic Operators");
88 panelOperators.add("North", labelOperators);
89
90 panelCheckboxOperators = new Panel();
91 panelCheckboxOperators.setLayout(new GridLayout(2,3,0,0));
92 panelCheckboxOperators.setFont(new Font("Dialog", Font.PLAIN, 14));
93 panelOperators.add("Center", panelCheckboxOperators);
94 checkboxPlus = new Checkbox("plus");
95 panelCheckboxOperators.add(checkboxPlus);
96 checkboxMult = new Checkbox("mult");
97 panelCheckboxOperators.add(checkboxMult);
98 checkboxMinus = new Checkbox("minus");
99 panelCheckboxOperators.add(checkboxMinus);
100 checkboxDivide = new Checkbox("divide");
101 panelCheckboxOperators.add(checkboxDivide);
102 checkboxPower = new Checkbox("power");
103 panelCheckboxOperators.add(checkboxPower);
104
105 panelRelations = new Panel();
106 panelRelations.setLayout(new BorderLayout(0,0));
107 panelChecboxes.add("Center", panelRelations);
108 labelRelations = new Label("Relational Operators");
109 panelRelations.add("North", labelRelations);
110
111 panelCheckboxRelational = new Panel();
112 panelCheckboxRelational.setLayout(new GridLayout(2,4,0,0));
113 panelCheckboxRelational.setFont(new Font("Dialog", Font.PLAIN, 14));
114 panelRelations.add("Center", panelCheckboxRelational);
115 checkboxEq = new Checkbox("eq");
116 panelCheckboxRelational.add(checkboxEq);
117 checkboxNeq = new Checkbox("neq");
118 panelCheckboxRelational.add(checkboxNeq);
119 checkboxLt = new Checkbox("lt");
120 panelCheckboxRelational.add(checkboxLt);
121 checkboxLeq = new Checkbox("leq");
122 panelCheckboxRelational.add(checkboxLeq);
123 checkboxGt = new Checkbox("gt");
124 panelCheckboxRelational.add(checkboxGt);
125 checkboxGeq = new Checkbox("geq");
126 panelCheckboxRelational.add(checkboxGeq);
127
128 panelFunctions = new Panel();
129 panelFunctions.setLayout(new BorderLayout(0,0));
130 panelChecboxes.add("South", panelFunctions);
131 labelFuntions = new Label("Transcendantal Functions");
132 panelFunctions.add("North", labelFuntions);
133
134 panelCheckboxFunctions = new Panel();
135 panelCheckboxFunctions.setLayout(new GridLayout(3,3,0,0));
136 panelCheckboxFunctions.setFont(new Font("Dialog", Font.PLAIN, 14));
137 panelFunctions.add("Center", panelCheckboxFunctions);
138 checkboxLog = new Checkbox("log");
139 panelCheckboxFunctions.add(checkboxLog);
140 checkboxLn = new Checkbox("ln");
141 panelCheckboxFunctions.add(checkboxLn);
142 checkboxExp = new Checkbox("exp");
143 panelCheckboxFunctions.add(checkboxExp);
144 checkboxSin = new Checkbox("sin");
145 panelCheckboxFunctions.add(checkboxSin);
146 checkboxCos = new Checkbox("cos");
147 panelCheckboxFunctions.add(checkboxCos);
148 checkboxTan = new Checkbox("tan");
149 panelCheckboxFunctions.add(checkboxTan);
150 checkboxArcsin = new Checkbox("arcsin");
151 panelCheckboxFunctions.add(checkboxArcsin);
152 checkboxArccos = new Checkbox("arccos");
153 panelCheckboxFunctions.add(checkboxArccos);
154 checkboxArctan = new Checkbox("arctan");
155 panelCheckboxFunctions.add(checkboxArctan);
156
157 panelButtons = new Panel();
158 panelButtons.setLayout(new FlowLayout(FlowLayout.CENTER,5,5));
159 panelButtons.setFont(new Font("Dialog", Font.PLAIN, 14));
160 panelContainingRequest.add("South", panelButtons);
161
162 buttonSendRequest = new Button();
163 buttonSendRequest.setLabel("Send Request");
164 panelButtons.add(buttonSendRequest);
165
166 buttonSendRequest.addActionListener(
167 new ActionListener() {
168 public void actionPerformed(ActionEvent event) {
169 boolean gotToSend = false;
170 containing = "<OMOBJ>\n <OMA>\n <OMS cd=\"mfd2\" name=\"containing\"/>\n";
171
172 if (checkboxPlus.getState()) {
173 gotToSend = true;
174 containing += " <OMS cd=\"arith1\" name=\"plus\"/>\n";
175 }
176
177 if (checkboxMult.getState()) {
178 gotToSend = true;
179 containing += " <OMS cd=\"arith2\" name=\"times\"/>\n";
180 }
181
182 if (checkboxMinus.getState()) {
183 gotToSend = true;
184 containing += " <OMS cd=\"arith1\" name=\"minus\"/>\n";
185 }
186
187 if (checkboxDivide.getState()) {
188 gotToSend = true;
189 containing += " <OMS cd=\"arith1\" name=\"divide\"/>\n";
190 }
191
192 if (checkboxPower.getState()) {
193 gotToSend = true;
194 containing += " <OMS cd=\"arith1\" name=\"power\"/>\n";
195 }
196
197 if (checkboxEq.getState()) {
198 gotToSend = true;
199 containing += " <OMS cd=\"relation1\" name=\"eq\"/>\n";
200 }
201
202 if (checkboxNeq.getState()) {
203 gotToSend = true;
204 containing += " <OMS cd=\"relation1\" name=\"neq\"/>\n";
205 }
206
207 if (checkboxLt.getState()) {
208 gotToSend = true;
209 containing += " <OMS cd=\"relation1\" name=\"lt\"/>\n";
210 }
211
212 if (checkboxLeq.getState()) {
213 gotToSend = true;
214 containing += " <OMS cd=\"relation1\" name=\"leq\"/>\n";
215 }
216
217 if (checkboxGt.getState()) {
218 gotToSend = true;
219 containing += " <OMS cd=\"relation1\" name=\"gt\"/>\n";
220 }
221
222 if (checkboxGeq.getState()) {
223 gotToSend = true;
224 containing += " <OMS cd=\"relation1\" name=\"geq\"/>\n";
225 }
226
227 if (checkboxLog.getState()) {
228 gotToSend = true;
229 containing += " <OMS cd=\"transc1\" name=\"log\"/>\n";
230 }
231
232 if (checkboxLn.getState()) {
233 gotToSend = true;
234 containing += " <OMS cd=\"transc1\" name=\"ln\"/>\n";
235 }
236
237 if (checkboxExp.getState()) {
238 gotToSend = true;
239 containing += " <OMS cd=\"transc1\" name=\"exp\"/>\n";
240 }
241
242 if (checkboxSin.getState()) {
243 gotToSend = true;
244 containing += " <OMS cd=\"transc1\" name=\"sin\"/>\n";
245 }
246
247 if (checkboxCos.getState()) {
248 gotToSend = true;
249 containing += " <OMS cd=\"transc1\" name=\"cos\"/>\n";
250 }
251
252 if (checkboxTan.getState()) {
253 gotToSend = true;
254 containing += " <OMS cd=\"transc1\" name=\"tan\"/>\n";
255 }
256
257 if (checkboxArcsin.getState()) {
258 gotToSend = true;
259 containing += " <OMS cd=\"transc1\" name=\"arcsin\"/>\n";
260 }
261
262 if (checkboxArccos.getState()) {
263 gotToSend = true;
264 containing += " <OMS cd=\"transc1\" name=\"arccos\"/>\n";
265 }
266
267 if (checkboxArctan.getState()) {
268 gotToSend = true;
269 containing += " <OMS cd=\"transc1\" name=\"arctan\"/>\n";
270 }
271
272
273 if (gotToSend) {
274 panelMfd2.setIsConstainingRequest(true);
275
276 Selector selector = panelMfd2.getSelector();
277 selector.setOwner(RequestContaining.this);
278
279 containing += " </OMA>\n</OMOBJ>";
280
281 RequestContainingEvent requestContainingEvent = new RequestContainingEvent(RequestContaining.this);
282 requestContainingEvent.setAction(RequestContainingEvent.UPDATE_REQUEST, null);
283 fireRequestContainingEvent(requestContainingEvent);
284
285 panelMfd2.setObject(containing.getBytes());
286 }
287 }
288 }
289 );
290
291
292 panelResultRequest = new ScrollPane(ScrollPane.SCROLLBARS_AS_NEEDED);
293
294 panelResultRequest.setBackground(new Color(16777215));
295 add("Center", panelResultRequest);
296
297 jomeResult = new Jome();
298 jomeResult.setDrawBounds(false);
299
300 jomeResult.setLayout(new FlowLayout(FlowLayout.LEFT,10,5));
301 jomeResult.setFont(new Font("Times New Roman", Font.PLAIN, 14));
302 panelResultRequest.add(jomeResult);
303
304
305 addWindowListener(
306 new WindowAdapter() {
307 public void windowClosing(WindowEvent event) {
308 dispose();
309 }
310 }
311 );
312 }
313
314 public void setOpenMathResult(String result) throws ErrorMessageException {
315 try {
316 jomeResult.setOpenMath(result);
317
318 RequestContainingEvent requestContainingEvent = new RequestContainingEvent(this);
319 requestContainingEvent.setAction(RequestContainingEvent.UPDATE_RESULT, null);
320 fireRequestContainingEvent(requestContainingEvent);
321 }
322 catch (Exception e) {
323 throw((ErrorMessageException) e);
324 }
325 }
326
327 public String getOpenMathRequest() {
328 return containing;
329 }
330
331 public String getOpenMathResult() {
332 return jomeResult.getOpenMath();
333 }
334
335 public Jome getJomeResult() {
336 return jomeResult;
337 }
338
339 /***
340 */
341 public void addRequestContainingListener(RequestContainingListener requestContainingListener) {
342 listeners.addElement(requestContainingListener);
343 }
344
345 /***
346 */
347 public void removeRequestContainingListener(RequestContainingListener requestContainingListener) {
348 listeners.removeElement(requestContainingListener);
349 }
350
351 /***
352 * Fires a RequestContainingEvent event to registered listeners.
353 * @param requestContainingEvent event encapsulating relevant information.
354 */
355 public void fireRequestContainingEvent(RequestContainingEvent requestContainingEvent) {
356 for (int i = 0; i < listeners.size(); i++)
357 ((RequestContainingListener)listeners.elementAt(i)).consumeRequestContainingEvent(requestContainingEvent);
358 }
359 }
360