Annotation of capa/capa51/JavaTools/TScore.java, revision 1.4
1.4 ! albertel 1: /* old score extrapolator widget
! 2: Copyright (C) 1992-2000 Michigan State University
! 3:
! 4: The CAPA system is free software; you can redistribute it and/or
! 5: modify it under the terms of the GNU Library General Public License as
! 6: published by the Free Software Foundation; either version 2 of the
! 7: License, or (at your option) any later version.
! 8:
! 9: The CAPA system is distributed in the hope that it will be useful,
! 10: but WITHOUT ANY WARRANTY; without even the implied warranty of
! 11: MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
! 12: Library General Public License for more details.
! 13:
! 14: You should have received a copy of the GNU Library General Public
! 15: License along with the CAPA system; see the file COPYING. If not,
! 16: write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
! 17: Boston, MA 02111-1307, USA.
! 18:
! 19: As a special exception, you have permission to link this program
! 20: with the TtH/TtM library and distribute executables, as long as you
! 21: follow the requirements of the GNU GPL in regard to all of the
! 22: software in the executable aside from TtH/TtM.
! 23: */
! 24:
1.1 albertel 25: import java.applet.*;
26: import java.awt.*;
27: import java.lang.*;
28: import java.util.*;
29: import java.net.*;
30: import java.awt.event.*;
31:
32: public class TScore extends Applet implements Runnable {
33: public float W[];
34: public int Entry_cnt, Exam_cnt;
35: public float S[], F[];
36: public int X[], C[], R[];
37: public float SF_ratio[], SF_percent[];
38: public float Sum_ratio[], Sum_percent[];
39: public float Exam_ratio[], Raw_exam_ratio[], Raw_epc_ratio[];
40: public float Term_score;
41:
42: ExpPanel [] HQpanel;
43: ExmPanel [] EXpanel;
44: Label TitleL;
45: Label EqL;
46:
47: public void init() {
48: String p;
49: int fs;
50: int idx;
51:
52: C = new int[2];
53: R = new int[2];
54: W = new float[5];
55:
56: // final exam set number
57: p=getParameter("FS");
58: fs = (p==null)?1:Integer.valueOf(p).intValue();
59: // how many entries
60: Entry_cnt= ((fs == 0)? 2 : 1 + 2*fs);
61: // how many exams
62: Exam_cnt = (Entry_cnt - 3 ) / 2;
63:
64: S = new float[Entry_cnt];
65: F = new float[Entry_cnt];
66: X = new int[Entry_cnt];
67: SF_ratio = new float[Entry_cnt];
68: SF_percent= new float[Entry_cnt];
69: Sum_ratio = new float[Entry_cnt];
70: Sum_percent = new float[Entry_cnt];
71: Raw_exam_ratio = new float[Exam_cnt];
72: Raw_epc_ratio = new float[Exam_cnt];
73: Exam_ratio = new float[Exam_cnt];
74:
75: p=getParameter("HW_W");
76: W[0] =(p==null)?1:Float.valueOf(p).floatValue();
77: p=getParameter("QZ_W");
78: W[1] =(p==null)?1:Float.valueOf(p).floatValue();
79: p=getParameter("EX_W");
80: W[2] =(p==null)?1:Float.valueOf(p).floatValue();
81: p=getParameter("FE_W");
82: W[3] =(p==null)?1:Float.valueOf(p).floatValue();
83: p=getParameter("PC_W");
84: W[4] =(p==null)?1:Float.valueOf(p).floatValue();
85:
86: p=getParameter("HW_C");
87: C[0] =(p==null)?1:Integer.valueOf(p).intValue();
88: p=getParameter("HW_R");
89: R[0] =(p==null)?1:Integer.valueOf(p).intValue();
90: p=getParameter("QZ_C");
91: C[1] =(p==null)?1:Integer.valueOf(p).intValue();
92: p=getParameter("QZ_R");
93: R[1] =(p==null)?1:Integer.valueOf(p).intValue();
94:
95: for(idx=0;idx<Entry_cnt;idx++) {
96: p=getParameter("X"+idx);
97: X[idx]=(p==null)?1:Integer.valueOf(p).intValue();
98: if( (idx>1) && (X[idx]==1) ) { // midterm exam, final extrapolated
99: SF_ratio[idx] = (float)0.0;
100: SF_percent[idx]= (float)0.0;
101: if( idx == (Entry_cnt - 1) ) { // final exam extrapolated, from hw
102: Sum_ratio[idx] = SF_ratio[0];
103: Sum_percent[idx] = SF_percent[0];
104: }
105: } else {
106: // homework, quiz extrapolated or not;exam,final not extrapolated
107: p=getParameter("S"+idx);
108: S[idx]=(p==null)?1:Float.valueOf(p).floatValue();
109: p=getParameter("F"+idx);
110: F[idx] =(p==null)?1:Float.valueOf(p).floatValue();
1.2 albertel 111: if ((float)F[idx] < 0.00000001) {
112: SF_ratio[idx] = (float) 0.0;
113: } else {
114: SF_ratio[idx] = (float) ((float)S[idx] / (float)F[idx]);
115: }
1.1 albertel 116: int tmp_i = (int) (10000 * SF_ratio[idx] );
117: SF_percent[idx]= (float)tmp_i / (float)100.0;
118: if( idx == (Entry_cnt - 1) ) { // final exam
119: Sum_ratio[idx] = SF_ratio[idx];
120: Sum_percent[idx] = SF_percent[idx];
121: }
122: }
123: }
124: Sum_ratio[0] = (float)(S[0] + ((float)R[0]*F[0]*SF_ratio[0]/(float)C[0])) / (float)(F[0]*(1.0 + (float)R[0]/(float)C[0]));
125: int tmp_i = (int)(10000 * Sum_ratio[0]);
126: Sum_percent[0] = (float)tmp_i / (float)100.0;
127: Sum_ratio[0] = Sum_percent[0] / (float)100.0;
128: Sum_ratio[1] = (float)(S[1] + (R[1]*F[1]*SF_ratio[1]/C[1])) / (float)(F[1]*(1.0 + R[1]/C[1]));
129: tmp_i = (int)(10000 * Sum_ratio[1]);
130: Sum_percent[1] = (float)tmp_i / (float)100.0;
131: Sum_ratio[1] = Sum_percent[1] / (float)100.0;
132:
133:
134: // if exam 1 is not given, use homework as default to extrapolate
135: // if epc 1 is not given, use exam 1 as epc 1
136: // if exam 2 is not given, use exam 1 to extrapolate
137: // if exam 3 is not given, use exam 2 to extrapolate
1.3 albertel 138: // I am lying, I only use the homework score
1.1 albertel 139:
140: float exam_sum = (float)0.0;
141: for(idx=0;idx<Exam_cnt;idx++) {
142: if( X[(idx+1)*2] == 1 ) {
143: // taken from homework
144: Raw_exam_ratio[idx] = SF_ratio[0];
145: } else {
146: Raw_exam_ratio[idx] = SF_ratio[(idx+1)*2];
147: }
148: if( X[(idx+1)*2 + 1] == 1 ) {
149: Raw_epc_ratio[idx] = Raw_exam_ratio[idx];
150: } else {
151: Raw_epc_ratio[idx] = SF_ratio[(idx+1)*2 + 1];
152: }
153:
154: if( Raw_epc_ratio[idx] > Raw_exam_ratio[idx] ) {
155: Exam_ratio[idx] = Raw_exam_ratio[idx] + W[4]*( Raw_epc_ratio[idx] - Raw_exam_ratio[idx] ) ;
156: } else {
157: Exam_ratio[idx] = Raw_exam_ratio[idx];
158: }
1.3 albertel 159: //System.out.print("idx="+idx+":Exam_ratio="+Exam_ratio[idx]+"\n");
1.1 albertel 160: Sum_ratio[2*(idx+1)] = Exam_ratio[idx];
161: tmp_i = (int)(10000 * Exam_ratio[idx] );
162: Sum_percent[2*(idx+1)] = (float)tmp_i / (float)100.0;
163: Sum_ratio[2*(idx+1)] = Sum_percent[2*(idx+1)] / (float)100.0;
164: exam_sum += Exam_ratio[idx];
165: }
166: exam_sum = (float)exam_sum / (float)Exam_cnt;
167:
168: Term_score = Sum_ratio[0] * W[0] + Sum_ratio[1] * W[1] + exam_sum * W[2] + Sum_ratio[Entry_cnt - 1] * W[3];
169:
170: tmp_i = (int)(10000 * Term_score);
171: Term_score = (float)tmp_i / (float)100.0;
172:
173:
174: // call to setup User Interface
175:
176: initGUI();
177:
178: }
179: public void initGUI() {
180: int row_cnt = Exam_cnt + 4;
181: int idx;
182: String [] title = {"Homework", "Quizz" };
183: HQpanel = new ExpPanel[2];
184: EXpanel = new ExmPanel[Exam_cnt+2];
185:
186: setLayout(new GridLayout(row_cnt,0,4,4));
187:
188: String t_str = "Term Score Extrapolation Applet";
189: TitleL = new Label(t_str, Label.CENTER);
190: add(TitleL);
191:
192: for(idx = 0; idx < 2; idx++) {
193: HQpanel[idx] = new ExpPanel(this,title[idx],X[idx],
194: S[idx],F[idx],C[idx],R[idx]);
195: add(HQpanel[idx]);
196: }
197: // Midterm Exam
198: for(idx =0; idx < Exam_cnt; idx++) {
199: EXpanel[idx] = new ExmPanel(this,idx+1,X[2*(idx+1)],1,X[2*idx+3],
200: S[2*(idx+1)],F[2*(idx+1)],W[4],S[2*idx+3],F[2*idx+3],Sum_ratio[2*(idx+1)]);
201: add(EXpanel[idx]);
202: }
203: // Final Exam
204: EXpanel[Exam_cnt] = new ExmPanel(this,0,X[Entry_cnt-1],0,0,
205: S[Entry_cnt-1],F[Entry_cnt-1],W[3],S[Entry_cnt-1],F[Entry_cnt-1],Sum_ratio[Entry_cnt-1]);
206: add(EXpanel[Exam_cnt]);
207:
208: String eq_str = "Term score=" + Sum_percent[0] + "*" + W[0] ;
209: eq_str = eq_str + "+" + Sum_percent[1] + "*" + W[1] ;
210: eq_str = eq_str + "+" + "(" ;
211: for(idx =1;idx<=Exam_cnt;idx++) {
212: if(idx>1) {
213: eq_str = eq_str + "+ ";
214: }
215: eq_str = eq_str + Sum_percent[2*idx] ;
216: }
217: eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+";
218: eq_str = eq_str + Sum_percent[2*idx] + "*" + W[3] + " = ";
219: eq_str = eq_str + " " + Term_score + "%";
220: // EqL = new Label(eq_str, Label.LEFT);
221: // add(EqL);
222:
223: }
224: public void recalcTermScore() {
225: float score[];
226: int idx;
227: float term_summ, exam_summ;
228:
229: score = new float[Exam_cnt+3];
230: term_summ = (float)0.0;
231: exam_summ = (float)0.0;
232: for(idx=0;idx<2;idx++) {
233: score[idx] = HQpanel[idx].getSubTotal();
234: term_summ = term_summ + score[idx] * W[idx];
235: }
236: for(idx =0; idx < Exam_cnt; idx++) {
237: score[idx+2] = EXpanel[idx].getSubTotal();
238: exam_summ = exam_summ + score[idx+2];
239: }
240: score[Exam_cnt+2] = EXpanel[Exam_cnt].getSubTotal();
241: exam_summ = exam_summ * W[2] / Exam_cnt;
242: term_summ = term_summ + exam_summ + score[Exam_cnt+2] * W[3];
243: int tmp_i = (int) ((float)100.0*term_summ);
244: term_summ = (float)(tmp_i / (float)100.0);
245: String eq_str = "Term score=" + score[0] + "*" + W[0] ;
246: eq_str = eq_str + "+" + score[1] + "*" + W[1] ;
247: eq_str = eq_str + "+" + "(" ;
248: for(idx=0;idx<Exam_cnt;idx++) {
249: if(idx>0) {
250: eq_str = eq_str + "+ ";
251: }
252: eq_str = eq_str + score[idx+2] ;
253: }
254: eq_str = eq_str + ") *" + W[2] + "/" + Exam_cnt + "+";
255: eq_str = eq_str + score[Exam_cnt+2] + "*" + W[3] + " = ";
256: eq_str = eq_str + " " + term_summ + " %";
257: // TitleL.setText("TTT");
258: TitleL.setText(eq_str);
259: }
260: public void paint(Graphics g) {
261: Dimension d = getSize();
262: g.drawRect(0,0, d.width - 1, d.height - 1);
263: }
264: public void run() { }
265: public void start() {
266: recalcTermScore();
267: }
268: public void stop() { }
269:
270: }
1.2 albertel 271: class ExpPanel extends Panel
272: implements ActionListener,
273: AdjustmentListener {
274: TScore controller;
275: TextField exT;
276: Scrollbar sB;
277: Label sumL;
278: int max = 100;
279: int block = 1;
280: float ff,ss;
281: int rr,cc;
282:
283: ExpPanel(TScore u,String t,
284: int x,float a,float b,int m,int n) {
285: GridBagConstraints c = new GridBagConstraints();
286: GridBagLayout gridbag = new GridBagLayout();
287: setLayout(gridbag);
288: int tmp_i;
289:
290: controller = u;
291: ss = a; ff = b; cc = m; rr = n;
292: float sf_ratio = (float)ss / (float)ff;
293: tmp_i = (int)(10000 * sf_ratio);
294: float sf_percent = (float)tmp_i / (float)100.0;
1.3 albertel 295: float sum_ratio = (float)(ss + ((float)rr*ff*sf_ratio/(float)(cc+rr))) / (float)(ff*(1.0 + (float)rr/(float)(cc+rr)));
296: //System.out.print("ss ="+ss+":rr="+rr+":ff="+ff+":sf_ratio="+sf_ratio+":cc="+cc+":sum_ratio="+sum_ratio+"\n");
1.2 albertel 297: tmp_i = (int)(10000 * sum_ratio);
298: float sum_percent = (float)tmp_i / (float)100.0;
299:
300: String cs = " " + ss + "/" + ff;
301: cs = cs + " = " + sf_percent + "%";
302: String r = "remaining " + rr + " sets at (%) ";
303: String s = " " + sum_percent + "%";
304:
305: //Set up default layout constraints.
306: c.fill = GridBagConstraints.NONE;
307:
308: Label tL = new Label(t, Label.LEFT);
309: // c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
310: c.gridwidth = 1;
311: c.gridx = 0;
312: c.gridy = 0;
313: gridbag.setConstraints(tL, c);
314: add(tL);
315:
316: Label cL = new Label(cs, Label.CENTER);
317: c.gridwidth = 2;
318: c.gridx = 1;
319: c.gridy = 0;
320: gridbag.setConstraints(cL, c);
321: add(cL);
322:
323: Label sL = new Label("subtotal=", Label.RIGHT);
324: c.gridwidth = 1;
325: c.gridx = 3;
326: c.gridy = 0;
327: gridbag.setConstraints(sL, c);
328: add(sL);
329:
330: sumL = new Label(s, Label.RIGHT);
331: c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
332: c.gridx = 4;
333: c.gridy = 0;
334: gridbag.setConstraints(sumL, c);
335: add(sumL);
336: if(x==1) {
337: Label rL = new Label(r, Label.RIGHT);
338: c.gridwidth = 2;
339: c.gridx = 0;
340: c.gridy = 1;
341: gridbag.setConstraints(rL, c);
342: add(rL);
343:
344: exT = new TextField("0", 3);
345: c.anchor = GridBagConstraints.EAST;
346: c.gridwidth = 1; //The default value.
347: c.gridx = 2;
348: c.gridy = 1;
349: gridbag.setConstraints(exT, c);
350: add(exT);
351: exT.addActionListener(this);
352: c.anchor = GridBagConstraints.CENTER; // default
353:
354: //Add the slider. It's horizontal, and it has the maximum
355: //value specified by the instance variable max. Its initial
356: //and minimum values are the default (0). A click increments
357: //the value by block units.
358: sB = new Scrollbar(Scrollbar.HORIZONTAL);
359: sB.setMaximum(max + 10);
360: sB.setBlockIncrement(block);
361: // c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
362: c.fill = GridBagConstraints.HORIZONTAL;
363: c.gridwidth = 2;
364: c.gridx = 3;
365: c.gridy = 1;
366: gridbag.setConstraints(sB, c);
367: add(sB);
368: sB.addAdjustmentListener(this);
369: exT.setText(String.valueOf(sf_percent));
370: sB.setValue((int)sf_percent);
371: }
372:
373: }
374: // Draws a box around this panel.
375: public void paint(Graphics g) {
376: Dimension d = getSize();
377: g.drawRect(0,0, d.width - 1, d.height - 1);
378: }
379: public Insets getInsets() {
380: return new Insets(5,5,5,8);
381: }
382: float getSubTotal() {
383: String s_str = sumL.getText().replace('%','\0').trim();
384: float s_real = Float.valueOf(s_str).floatValue();
385: return (s_real);
386: }
387: double getValue() {
388: double f;
389: try {
390: f = (double)Double.valueOf(exT.getText()).doubleValue();
1.3 albertel 391: if (f > max) {f=max;}
1.2 albertel 392: } catch (java.lang.NumberFormatException e) {
393: f = 0.0;
394: }
395: return f;
396: }
397: // entered into exT
398: public void actionPerformed(ActionEvent e) {
399: int tf = (int) getValue();
400: if (tf > max)
401: tf = max;
402: if (tf < 0)
403: tf = 0;
404: sB.setValue(tf);
405: exT.setText(String.valueOf((int)tf));
406: recalcSumm(tf);
407: }
408: // slider sB changed
409: public void adjustmentValueChanged(AdjustmentEvent e) {
410: Scrollbar source = (Scrollbar)e.getSource();
411: int my_i = (int)source.getValue();
412: exT.setText(String.valueOf(e.getValue()));
413: recalcSumm(my_i);
414: }
415: void recalcSumm(int tf) {
416: float my_r = (float) tf / (float)100.0;
1.3 albertel 417: int tmp_i= (int)(10000*(ss+((float)rr*ff*my_r/(cc+rr)))/(float)(ff*(1.0+(float)rr/(cc+rr))));
418: //System.out.print("ss ="+ss+":rr="+rr+":ff="+ff+":my_r="+my_r+":cc="+cc+":tmp_i="+((float)tmp_i/10000.0)+"\n");
1.2 albertel 419: float sum = (float)tmp_i / (float)100.0;
420: sumL.setText(sum + "%");
421: controller.recalcTermScore();
422: }
423: // Set the values in the slider and text field.
424: void setValue(double f) {
425: setSliderValue(f);
426: exT.setText(String.valueOf((float)f));
427: }
428: void setSliderValue(double f) {
429: int sliderValue = (int)f;
430:
431: if (sliderValue > max)
432: sliderValue = max;
433: if (sliderValue < 0)
434: sliderValue = 0;
435: sB.setValue(sliderValue);
436:
437: }
438: }
439: class ExmPanel extends Panel
440: implements ActionListener,
441: AdjustmentListener {
442: TScore controller;
443: TextField exT_ex, exT_pc;
444: Scrollbar sB_ex, sB_pc;
445: Label sumL;
446: int max = 100;
447: int block = 1;
448: int show_pc, exam_ex, epc_ex;
449: float s_ex, f_ex, s_pc, f_pc;
450: float c_factor;
451:
452: // exam_type 0 Final
453: // 1, 2, 3, 4
454: ExmPanel(TScore u,int exam_type,int exam_x,int show_epc,int epc_x,
455: float a,float b,float w,float m,float n,float ex_default) {
456: GridBagConstraints c = new GridBagConstraints();
457: GridBagLayout gridbag = new GridBagLayout();
458: setLayout(gridbag);
459: Label tL;
460: float exam_ratio, epc_ratio;
461: float sum;
462: int tmp_i;
463:
464: controller = u;
465: c_factor = w;
466: show_pc = show_epc;
467: exam_ex = exam_x;
468: epc_ex = epc_x;
469: s_ex = a; f_ex = b; s_pc = m; f_pc = n;
470: //Set up default layout constraints.
471: c.fill = GridBagConstraints.NONE;
472:
473: //Add the label. It displays this panel's title, centered.
474: if(exam_type == 0 ) { // Final exam
475: tL = new Label("Final", Label.LEFT);
476: } else {
477: tL = new Label("Exam " + exam_type, Label.LEFT);
478: }
479: c.anchor = GridBagConstraints.WEST;
480: c.gridwidth = 1;
481: c.gridx = 0;
482: c.gridy = 0;
483: gridbag.setConstraints(tL, c);
484: add(tL);
485: c.anchor = GridBagConstraints.CENTER;
486:
487: if( exam_x == 0 ) {
488: // exam not extrapolated
1.3 albertel 489: if ((float)f_ex < 0.00000001) {
490: exam_ratio = (float) 0.0;
491: } else {
492: exam_ratio = (float)s_ex / (float)f_ex;
493: }
1.2 albertel 494: tmp_i = (int) (10000 * exam_ratio );
495: float percent = (float)tmp_i / (float)100.0;
496: String cs = " " + a + "/" + b + " = " + percent + " %";
497: Label cL = new Label(cs, Label.CENTER);
498: c.gridwidth = 2;
499: c.gridx = 1;
500: c.gridy = 0;
501: gridbag.setConstraints(cL, c);
502: add(cL);
503: } else {
504: // extrapolate exam
505: exam_ratio = ex_default;
506: exT_ex = new TextField("0", 3);
507: exT_ex.setName("EXAM");
508: c.gridwidth = 1; //The default value.
509: c.gridx = 2;
510: c.gridy = 0;
511: gridbag.setConstraints(exT_ex, c);
512: add(exT_ex);
513: exT_ex.addActionListener(this);
514:
515: sB_ex = new Scrollbar(Scrollbar.HORIZONTAL);
516: sB_ex.setName("EXAMS");
517: sB_ex.setMaximum(max + 10);
518: sB_ex.setBlockIncrement(block);
519: c.gridwidth = 2;
520: c.gridx = 3;
521: c.gridy = 0;
522: gridbag.setConstraints(sB_ex, c);
523: add(sB_ex);
524: sB_ex.addAdjustmentListener(this);
525: }
526: epc_ratio = exam_ratio;
527: if(show_pc == 1) {
528: if(epc_x == 1) {
529: epc_ratio = exam_ratio;
530: } else {
531: epc_ratio = (float)s_pc / (float)f_pc;
532: }
533: if( epc_ratio > exam_ratio ) {
534: tmp_i= (int)(10000 * (exam_ratio + c_factor * (epc_ratio - exam_ratio)));
535: sum = (float)tmp_i / (float)100.0;
536: } else {
537: tmp_i= (int)(10000 * exam_ratio);
538: sum = (float)tmp_i / (float)100.0;
539: }
540: } else {
541: tmp_i= (int)(10000 * exam_ratio);
542: sum = (float)tmp_i / (float)100.0;
543: }
544:
545: Label sL = new Label("subtotal=", Label.RIGHT);
546: c.gridwidth = 1;
547: c.gridx = 5;
548: c.gridy = 0;
549: gridbag.setConstraints(sL, c);
550: add(sL);
551:
552: String s = " " + sum + "%";
553: sumL = new Label(s, Label.CENTER);
554: c.anchor = GridBagConstraints.EAST;
555: c.gridwidth = GridBagConstraints.REMAINDER; //It ends a row.
556: c.gridx = 6;
557: c.gridy = 0;
558: gridbag.setConstraints(sumL, c);
559: add(sumL);
560: c.anchor = GridBagConstraints.CENTER;
561:
562: if( show_epc == 1 ) {
563: Label eL = new Label("Correction " + exam_type, Label.LEFT);
564: c.gridwidth = 1;
565: c.gridx = 0;
566: c.gridy = 1;
567: gridbag.setConstraints(eL, c);
568: add(eL);
569: if( epc_x == 0 ) {
1.3 albertel 570: float ratio;
571: if ((float)f_pc < 0.00000001) {
572: ratio = (float) 0.0;
573: } else {
574: ratio = (float) ( s_pc / f_pc);
575: }
1.2 albertel 576: tmp_i = (int) (10000 * ratio );
577: float percent = (float)tmp_i / (float)100.0;
578: String cs = " " + s_pc + "/" + f_pc + " = " + percent + " %";
579: Label cL = new Label(cs, Label.CENTER);
580: c.gridwidth = 2;
581: c.gridx = 1;
582: c.gridy = 1;
583: gridbag.setConstraints(cL, c);
584: add(cL);
585: } else {
586: exT_pc = new TextField("0", 3);
587: exT_pc.setName("PC");
588: c.anchor = GridBagConstraints.EAST;
589: c.gridwidth = 1; //The default value.
590: c.gridx = 2;
591: c.gridy = 1;
592: gridbag.setConstraints(exT_pc, c);
593: add(exT_pc);
594: exT_pc.addActionListener(this);
595:
596: sB_pc = new Scrollbar(Scrollbar.HORIZONTAL);
597: sB_pc.setName("PCS");
598: sB_pc.setMaximum(max + 10);
599: sB_pc.setBlockIncrement(block);
600: c.gridwidth = GridBagConstraints.REMAINDER;
601: c.anchor = GridBagConstraints.CENTER;
602: c.fill = GridBagConstraints.HORIZONTAL;
603: // c.gridwidth = 2;
604: c.gridx = 3;
605: c.gridy = 1;
606: gridbag.setConstraints(sB_pc, c);
607: add(sB_pc);
608: sB_pc.addAdjustmentListener(this);
609: }
610: }
611: setExValue(exam_ratio,epc_ratio);
612: }
613: // Draws a box around this panel.
614: public void paint(Graphics g) {
615: Dimension d = getSize();
616: g.drawRect(0,0, d.width - 1, d.height - 1);
617: }
618: public Insets getInsets() {
619: return new Insets(5,5,5,8);
620: }
621: float getSubTotal() {
622: String s_str = sumL.getText().replace('%','\0').trim();
623: float s_real = Float.valueOf(s_str).floatValue();
624: return (s_real);
625: }
626: // entered into exT
627: public void actionPerformed(ActionEvent e) {
628: TextField source = (TextField)e.getSource();
629: String name = source.getName();
630: int tf = (int)Integer.valueOf(source.getText()).intValue();
631: if (tf > max)
632: tf = max;
633: if (tf < 0)
634: tf = 0;
635: if( name.equals(String.valueOf("EXAM")) ) {
636: sB_ex.setValue(tf);
637: exT_ex.setText(String.valueOf((int)tf));
638: } else {
639: sB_pc.setValue(tf);
640: exT_pc.setText(String.valueOf((int)tf));
641: }
642: recalcSumm();
643: }
644: // slider sB changed
645: public void adjustmentValueChanged(AdjustmentEvent e) {
646: Scrollbar source = (Scrollbar)e.getSource();
647: String name = source.getName();
648: int my_i = (int)source.getValue();
649:
650: if( name.equals(String.valueOf("EXAMS")) ) {
651: sB_ex.setValue(my_i);
652: exT_ex.setText(String.valueOf((int)my_i));
653: } else {
654: sB_pc.setValue(my_i);
655: exT_pc.setText(String.valueOf((int)my_i));
656: }
657: recalcSumm();
658: }
659: void recalcSumm() {
660: int tmp_i;
661: float exam , epc, sum;
662:
663: if( exam_ex == 1 ) {
664: tmp_i = (int)Integer.valueOf(exT_ex.getText()).intValue();
665: exam = (float) tmp_i / (float)100.0;
666: } else {
667: exam = (float)s_ex / (float)f_ex;
668: }
669: if( show_pc == 1 ) {
670: if(epc_ex == 1) {
671: tmp_i = (int)Integer.valueOf(exT_pc.getText()).intValue();
672: epc = (float) tmp_i / (float)100.0;
673: } else {
674: epc = (float)s_pc / (float)f_pc;
675: }
676: if( epc > exam ) {
677: tmp_i= (int)(10000 * (exam + c_factor * (epc - exam)));
678: sum = (float)tmp_i / (float)100.0;
679: } else {
680: tmp_i= (int)(10000 * exam);
681: sum = (float)tmp_i / (float)100.0;
682: }
683: } else {
684: tmp_i= (int)(10000 * exam);
685: sum = (float)tmp_i / (float)100.0;
686: }
687: sumL.setText(sum + "%");
688: controller.recalcTermScore();
689: }
690: void setExValue (float a, float b) {
691: int exm, epc;
692: exm = (int) (a*100.0);
693: epc = (int) (b*100.0);
694: if (exm > max)
695: exm = max;
696: if (exm < 0)
697: exm = 0;
698: if (epc > max)
699: epc = max;
700: if (epc < 0)
701: epc = 0;
702: if( exam_ex ==1 ) {
703: sB_ex.setValue(exm);
704: exT_ex.setText(String.valueOf(exm));
705: }
706: if( (show_pc == 1) && (epc_ex==1) ) {
707: sB_pc.setValue(epc);
708: exT_pc.setText(String.valueOf(epc));
709: }
710: }
711: }
712:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>