View Javadoc

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      // The listeners
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 		// Le listener pour pouvoir fermer la fenÍtre
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