Virtual U.org
Get Personal Training on VU Today
    
Top shadow
 
 register/help
User Name:

Password:

Ocour_if.cpp Source File
Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members  

Ocour_if.cpp

Go to the documentation of this file.
00001 //Filename    : OCOUR_IF.CPP
00002 //Description : Course report
00003 // owner                        : Kevin(Ho)
00004 // Kevin 0824
00005 
00006 #include <OSYS.H>
00007 #include <OSTR.H>
00008 #include <OMISC.H>
00009 #include <OPSCHOOL.H>
00010 #include <OGAMESET.H>
00011 #include <OWORLDMT.H>
00012 #include <ODEPT.H>
00013 #include <OVGA.H>
00014 #include <OIFACE.H>
00015 #include <OINFO.H>
00016 #include <COLOR.H>
00017 #include <OFONT.H>
00018 #include <OGAMESTR.H>
00019 #include <OMOUSE.H>
00020 #include <OBUTTON.H>
00021 #include <OTEXT.H>
00022 #include <OHELP.H>
00023 #include <OGRPHYR.H>
00024 #include <OPieChrt.H>
00025 #include <OGRPH_PT.H>
00026 #include <OGRPH_PM.H>
00027 #include <OLIBTECH.H>
00028 #include <ORADIOV.H>
00029 #include <OVALSLDR.H>
00030 #include <OGRPNFYR.H>
00031 #include <OGRPNFT.H>
00032 
00033 //----------------- Departmental academic standing --------------------//
00034 //-------------------- Main screen Configuration ----------------------//
00035 
00036 enum {                                            // the bg image id
00037     BG_PIC_ID = 14
00038 };
00039 
00040 enum {                                            // screen coordinates
00041     REPORT_X1 = ZOOM_X1,
00042     REPORT_Y1 = ZOOM_Y1+5,
00043     REPORT_X2 = ZOOM_X2-15,
00044     REPORT_Y2 = ZOOM_Y2-35
00045 };
00046 
00047 enum {
00048     BOTTOM_BUTTON_X1 = REPORT_X1+120,
00049     BOTTOM_BUTTON_Y1 = REPORT_Y2-20,
00050     BOTTOM_BUTTON_X2 = REPORT_X2,
00051     BOTTOM_BUTTON_Y2 = REPORT_Y2+10
00052 };
00053 #if(GAME_VERSION>=200)
00054 enum {
00055     BOTTOM_BUTTON_WIDTH = 160,
00056     BOTTOM_BUTTON_HEIGHT = 22,
00057     BOTTOM_BUTTON_DISTANCE
00058     = (BOTTOM_BUTTON_X2-BOTTOM_BUTTON_X1-BOTTOM_BUTTON_WIDTH*3)/4
00059 };
00060 #else
00061 enum {
00062     BOTTOM_BUTTON_WIDTH = 250,
00063     BOTTOM_BUTTON_HEIGHT = 22,
00064     BOTTOM_BUTTON_DISTANCE
00065     = (BOTTOM_BUTTON_X2-BOTTOM_BUTTON_X1-BOTTOM_BUTTON_WIDTH*2)/3
00066 };
00067 #endif
00068 
00069 enum {
00070     TABLE_COLUMN_COUNT=7,
00071     TABLE_COLUMN_WIDTH=102,
00072     TABLE_X1 = REPORT_X1+10,
00073     TABLE_X2 = TABLE_X1 + TABLE_COLUMN_WIDTH*TABLE_COLUMN_COUNT
00074 };
00075 
00076 #if(GAME_VERSION>=200)
00077 enum {
00078     MODE_STATISTICS_GRAPH_WIDTH = 210,
00079     MODE_STATISTICS_GRAPH_HEIGHT = 115,
00080     MODE_STATISTICS_GRAPH_HORIZONTAL_DISTANCE = (REPORT_X2-REPORT_X1-MODE_STATISTICS_GRAPH_WIDTH*3)/3,
00081     MODE_STATISTICS_GRAPH_VERTICAL_DISTANCE = 20,
00082 };
00083 #endif
00084 
00085 #if(GAME_VERSION>=200)
00086 static ButtonGroup type_button_group(6);
00087 #else
00088 static ButtonGroup type_button_group(4);
00089 #endif
00090 //static short *type_button_up_bitmap[4];
00091 //static short *type_button_down_bitmap[4];
00092 
00093 #if(GAME_VERSION>=200)
00094 static char* reportTypeStrArray[]
00095 = {
00096     "Overview","Class types","Technology",
00097     "Overview","Summer teaching","Technology",
00098 };
00099 #else
00100 static char* reportTypeStrArray[]
00101 = {
00102     "Overview","Class types",
00103     "Overview","Summer teaching and technology",
00104 };
00105 #endif
00106 
00107 //static short *text_refresh_bitmap;
00108 static char *mode_course_title = "Course report";
00109 static char *mode_course_label[] = {
00110     "Class type",
00111     "Number of sections",
00112     "Enrollment",
00113     "Average class\r\nsize (Norm)",
00114     "Class size deviation from norm",
00115     "Students denied entrance\r\nto courses",
00116     //  "Students failing courses",   //## chea 210999 change to % to make more sence
00117     "Percent failing courses\r\n(prior trimester)",
00118     "Overall average class size"
00119 };
00120 static char *mode_teaching_label[] = {
00121     "Small seminars",
00122     "Medium-sized classes",
00123     "Lecture courses with section meetings",
00124     "Distance learning courses",
00125     "Total",
00126 };
00127 
00128 enum { DISP_TEACHING_METHOD_COUNT = 4 };
00129 
00130 static char mode_teaching_id[] = {
00131     SEMINAR,
00132     GENERAL,
00133     CLASS_WITH_BREAKOUT,
00134     DISTANCE_LEARN_COURSE,
00135     BREAKOUT_LAB,
00136     // teaching method
00137 
00138 };
00139 
00140 enum { REPORT_MODE_COUNT = 2 };
00141 enum { REPORT_MODE_INSTITUTION, REPORT_MODE_DEPARTMENT};
00142 
00143 #if(GAME_VERSION>=200)
00144 enum {
00145     REPORT_TYPE_DEPARTMENT_OVERVIEW, REPORT_TYPE_DEPARTMENT_CLASSTYPES, REPORT_TYPE_DEPARTMENT_TECHNOLOGY,
00146     REPORT_TYPE_INSTITUTION_OVERVIEW, REPORT_TYPE_INSTITUTION_SUMMERTEACHING, REPORT_TYPE_INSTITUTION_TECHNOLOGY,
00147 };
00148 #else
00149 enum {
00150     REPORT_TYPE_DEPARTMENT_OVERVIEW, REPORT_TYPE_DEPARTMENT_CLASSTYPES,
00151     REPORT_TYPE_INSTITUTION_OVERVIEW, REPORT_TYPE_INSTITUTION_SUMMERTEACHING,
00152 };
00153 #endif
00154 
00155 static char current_report_mode=REPORT_MODE_DEPARTMENT;
00156 
00157 static char report_init_flag = 0;
00158 
00159 // screen 1,3 setting
00160 static GraphPerformanceIndicatorTrimester mode_course_graphicon;
00161 static Text mode_course_text2;
00162 static Text mode_course_text[MAX_TEACHING_METHOD_N_TOTAL][8];
00163 
00164 // screen 2 setting
00165 static Text mode_course_current_fraction1;
00166 static Text mode_course_current_fraction2;
00167 static Text mode_course_current_fraction3;
00168 static PieChart mode_course_piechart1;
00169 static PieChart mode_course_piechart2;
00170 static ValueSlider mode_course_valueslider1;
00171 static ValueSlider mode_course_valueslider2;
00172 static ValueSlider mode_course_valueslider3;
00173 
00174 // screen 4 setting
00175 static RadioButtonVert mode_course_rbv;
00176 static ValueSlider mode_course_valueslider4;
00177 static GraphPerformanceIndicatorMonth mode_course_graphicon2;
00178 static char* mode_course_rblabel[]= {
00179     "None",
00180     "Encourage summer enrollment",
00181     "Strongly encourage summer enrollment",
00182 #if(GAME_VERSION>=200)
00183     "Require traditional undergraduates to enroll for at least two summer sessions before graduation.",
00184 #else
00185     "Require traditional undergraduates to enroll for at least two summer trimesters before graduation.",
00186 #endif
00187 };
00188 
00189 #if(GAME_VERSION>=200)
00190 // screen 5 setting
00191 static ValueSlider mode_course_technology_slider[3];
00192 // define three graphs here
00193 static GraphNonFinancialTrimester it_utilization_graph;
00194 static GraphNonFinancialYear outsourcing_credits_graph;
00195 static GraphNonFinancialTrimester distance_credits_graph;
00196 static char* graphTypeStrArray[]
00197 = {
00198     "Percentage of courses redesigned to make optimal use of information technology",
00199     "Outsourced credits",
00200     "Distance learning credits provided",
00201 };
00202 static char* sliderTypeStrArray[]
00203 = {
00204     "Departmental incentives for faculty to optimize IT in teaching",
00205     "Ease of outsourcing credits for closed courses",
00206     "Priority for provision of distance learning credits",
00207 };
00208 #endif
00209 
00210 enum {
00211     MODE_PRIORITY_BOX_HEIGHT = 165,
00212     MODE_PRIORITY_BOX_WIDTH = 650,
00213     MODE_PRIORITY_BOX_TAB1 = 40,
00214     MODE_PRIORITY_BOX_TAB2 = 240,
00215 #if(GAME_VERSION>=200)
00216     MODE_PRIORITY_BOX_TAB3 = 360,
00217 #else
00218     MODE_PRIORITY_BOX_TAB3 = 380,
00219 #endif
00220     MODE_PRIORITY_VALUE_SLIDER_HEIGHT = 18,
00221     MODE_PRIORITY_VALUE_SLIDER_WIDTH = 180,
00222 };
00223 
00224 //static short * mode_course_refresh1;
00225 
00226 //----- Begin of function Department::course_report ------//
00230 void Department::course_report(int refreshFlag) {
00231     if(department_array.current_report_type==REPORT_TYPE_INSTITUTION_OVERVIEW) {
00232         current_report_mode=REPORT_MODE_INSTITUTION;
00233         sys.is_institution_report=1;
00234         course_report_1(refreshFlag);
00235     }
00236     else if(department_array.current_report_type==REPORT_TYPE_DEPARTMENT_OVERVIEW) {
00237         current_report_mode=REPORT_MODE_DEPARTMENT;
00238         sys.is_institution_report=0;
00239         course_report_1(refreshFlag);
00240     }
00241     else if(department_array.current_report_type==REPORT_TYPE_INSTITUTION_SUMMERTEACHING) {
00242         current_report_mode=REPORT_MODE_INSTITUTION;
00243         sys.is_institution_report=1;
00244         course_report_4(refreshFlag);
00245     }
00246     else if(department_array.current_report_type==REPORT_TYPE_DEPARTMENT_CLASSTYPES) {
00247         current_report_mode=REPORT_MODE_DEPARTMENT;
00248         sys.is_institution_report=0;
00249         course_report_2(refreshFlag);
00250     }
00251 #if(GAME_VERSION>=200)
00252     else if(department_array.current_report_type==REPORT_TYPE_INSTITUTION_TECHNOLOGY) {
00253         current_report_mode=REPORT_MODE_INSTITUTION;
00254         sys.is_institution_report=1;
00255         course_report_5(refreshFlag);
00256     }
00257     else if(department_array.current_report_type==REPORT_TYPE_DEPARTMENT_TECHNOLOGY) {
00258         current_report_mode=REPORT_MODE_DEPARTMENT;
00259         sys.is_institution_report=0;
00260         course_report_5(refreshFlag);
00261     }
00262 #endif
00263 }
00264 
00265 //------- End of function FacultySummary::report ------//
00266 
00267 //-------- Begin of function Department::course_report1 ---------//
00269 void Department::course_report_1(int refreshFlag) {
00270 
00271     const static int vtab1=19;
00272     const static int vtab2=63;
00273     const static int vtab3=67;
00274     const static int vtab4=302;
00275     const static int vtab5=305;
00276     const static int vtab6=350;
00277 
00278     static int data_num=HISTORY_TRIMESTER_COUNT;
00279     static int *dataArray;
00280     static int v[MAX_TEACHING_METHOD_N_TOTAL][7];
00281     static int v2;
00282 
00283     // ##### Begin Marco ##### //
00284 #if(GAME_VERSION>=200)
00285     static int initialv[MAX_TEACHING_METHOD_N_TOTAL][7];
00286     static int initialv2;
00287 
00288     memset(initialv,0,sizeof(initialv));
00289 #endif
00290     // ##### End Marco ##### //
00291 
00292     //-----communication with sim engine's Output-----//
00293 
00294     memset(v,0,sizeof(v));
00295 
00296     if(current_report_mode==REPORT_MODE_INSTITUTION) {
00297         for(int i=0;i<MAX_TEACHING_METHOD_N_TOTAL;i++) {
00298             v[i][0]=department_array.class_section_count[i];
00299             v[i][1]=department_array.convention_student_count[i];
00300             v[i][2]=department_array.average_class_size[i];
00301             v[i][3]=department_array.size_deviation[i];
00302             v[i][4]=department_array.admission_denied_count[i];
00303             //                  v[i][5]=department_array.failure_count[i];   //## chea 210999 change to % to make more sence
00304             //## chea 210999 begin change to % to make more sence
00305             if(department_array.convention_student_count[i]<1)
00306                 v[i][5]=0;
00307             else
00308                 //## chea 210999 change to % to make more sence
00309                 v[i][5]=(int)((float)department_array.failure_count[i] / (float)department_array.convention_student_count[i] * 100.0f);
00310             //## chea 210999 end change to % to make more sence
00311             v[i][6]=department_array.normal_class_size[i];
00312 
00313             // ##### Begin Marco ##### //
00314 #if(GAME_VERSION>=200)
00315             initialv[i][0]=department_array.initial_class_section_count[i];
00316             initialv[i][1]=department_array.initial_convention_student_count[i];
00317             initialv[i][2]=department_array.initial_average_class_size[i];
00318             initialv[i][3]=department_array.initial_size_deviation[i];
00319             initialv[i][4]=department_array.initial_admission_denied_count[i];
00320             if(department_array.initial_convention_student_count[i]<1)
00321                 initialv[i][5]=0;
00322             else
00323                 initialv[i][5]=(int)((float)department_array.initial_failure_count[i] / (float)department_array.initial_convention_student_count[i] * 100.0f);
00324             initialv[i][6]=department_array.initial_normal_class_size[i];
00325 #endif
00326             // ##### End Marco ##### //
00327 
00328         }
00329         dataArray=department_array.experienced_class_size;
00330         v2=dataArray[data_num-1];
00331 
00332         // ##### Begin Marco ##### //
00333 #if(GAME_VERSION>=200)
00334         initialv2=department_array.initial_experienced_class_size;
00335 #endif
00336         // ##### End Marco ##### //
00337 
00338     }
00339     else {
00340         int deptRecno = department_array.selected_recno;
00341         Department* cur_dept_ptr = department_array[deptRecno];
00342         for(int i=0;i<MAX_TEACHING_METHOD_N_TOTAL;i++) {
00343             v[i][0]=cur_dept_ptr->course_array.class_section_count[i];
00344             v[i][1]=cur_dept_ptr->course_array.convention_student_count[i];
00345             v[i][2]=cur_dept_ptr->course_array.average_class_size[i];
00346             v[i][3]=cur_dept_ptr->course_array.size_deviation[i];
00347             v[i][4]=cur_dept_ptr->course_array.admission_denied_count[i];
00348             //## chea 210999 begin change to % to make more sence
00349             //                  v[i][5]=cur_dept_ptr->course_array.failure_count[i];
00350             if(cur_dept_ptr->course_array.convention_student_count[i]<1)
00351                 v[i][5]=0;
00352             else
00353                 //## chea 210999 change to % to make more sence
00354                 v[i][5]=(int)((float)cur_dept_ptr->course_array.failure_count[i] / (float)cur_dept_ptr->course_array.convention_student_count[i] * 100.0f);
00355             //## chea 210999 begin change to % to make more sence
00356             v[i][6]=cur_dept_ptr->course_array.normal_class_size[i];
00357 
00358             // ##### Begin Marco ##### //
00359 #if(GAME_VERSION>=200)
00360             initialv[i][0]=cur_dept_ptr->course_array.initial_class_section_count[i];
00361             initialv[i][1]=cur_dept_ptr->course_array.initial_convention_student_count[i];
00362             initialv[i][2]=cur_dept_ptr->course_array.initial_average_class_size[i];
00363             initialv[i][3]=cur_dept_ptr->course_array.initial_size_deviation[i];
00364             initialv[i][4]=cur_dept_ptr->course_array.initial_admission_denied_count[i];
00365             if(cur_dept_ptr->course_array.initial_convention_student_count[i]<1)
00366                 initialv[i][5]=0;
00367             else
00368                 initialv[i][5]=(int)((float)cur_dept_ptr->course_array.initial_failure_count[i] / (float)cur_dept_ptr->course_array.initial_convention_student_count[i] * 100.0f);
00369             initialv[i][6]=cur_dept_ptr->course_array.initial_normal_class_size[i];
00370 #endif
00371             // ##### End Marco #### //
00372 
00373         }
00374         dataArray=cur_dept_ptr->course_array.experienced_class_size;
00375         v2=dataArray[data_num-1];
00376 
00377         // #### begin Marco ##### //
00378 #if(GAME_VERSION>=200)
00379         initialv2=cur_dept_ptr->course_array.initial_experienced_class_size;
00380 #endif
00381         // ###### end marco ##### //
00382     }
00383 
00384     /*  int divideCourseCount[MAX_TEACHING_METHOD];
00385         memset(divideCourseCount,0,sizeof(divideCourseCount));
00386         for( int i=cur_dept_ptr->course_array.size() ; i>=1 ; i-- )
00387         {
00388         Course* coursePtr = cur_dept_ptr->course_array[i];
00389 
00390         v[(int)coursePtr->teaching_method][1]+=(float)coursePtr->class_section_count;
00391         v[(int)coursePtr->teaching_method][2]+=(float)coursePtr->convention_student_count;
00392         if( coursePtr->class_section_count > 0 )
00393         {
00394         v[(int)coursePtr->teaching_method][3]+=(float)coursePtr->convention_student_count / (float)coursePtr->class_section_count;
00395         divideCourseCount[coursePtr->teaching_method]++;
00396         }
00397         v[(int)coursePtr->teaching_method][5]+=(float)coursePtr->admission_denied_count;
00398         v[(int)coursePtr->teaching_method][6]+=(float)coursePtr->failure_count;
00399         }
00400         for(i=0;i<MAX_TEACHING_METHOD;i++)
00401         {
00402         if( divideCourseCount[i] )
00403         v[i][3]=v[i][3]/divideCourseCount[i];
00404         }
00405     */
00406 
00407     vga.use_back();
00408 
00409     if (refreshFlag == INFO_REPAINT) {
00410         //------------- paint the background ----------------//
00411         user_interface.bg_img(BG_PIC_ID, &vga_back);
00412 
00413         user_interface.brighten(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14);
00414         user_interface.rect(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14,1);
00415         font_charts.put(REPORT_X1+320,REPORT_Y1-2,"Courses");
00416 
00417         user_interface.brighten(TABLE_X1,REPORT_Y1+vtab1,TABLE_X2,REPORT_Y1+vtab6);
00418 
00419         user_interface.rect(
00420             TABLE_X1,REPORT_Y1+vtab5,
00421             TABLE_X2+1,REPORT_Y1+vtab6,1);
00422 
00423         //-------------- Show Text --------------//
00424         user_interface.rect(
00425             TABLE_X1,REPORT_Y1+vtab1,
00426             TABLE_X1+TABLE_COLUMN_WIDTH+17,REPORT_Y1+vtab2+4,1);
00427 
00428         user_interface.rect(
00429             TABLE_X1,REPORT_Y1+vtab3,
00430             TABLE_X1+TABLE_COLUMN_WIDTH+17,REPORT_Y1+vtab4+2,1);
00431 
00432         font_chartsm.put_paragraph(
00433             TABLE_X1+7,REPORT_Y1+vtab1+3,
00434             (int)(TABLE_X1+(1.1)*TABLE_COLUMN_WIDTH),REPORT_Y1+vtab2,
00435             mode_course_label[0],-1);
00436 
00437         user_interface.rect(
00438             TABLE_X1+TABLE_COLUMN_WIDTH+15,REPORT_Y1+vtab1,
00439             TABLE_X1+TABLE_COLUMN_WIDTH+TABLE_COLUMN_WIDTH+2,REPORT_Y1+vtab2+4,1);
00440 
00441         user_interface.rect(
00442             TABLE_X1+TABLE_COLUMN_WIDTH+15,REPORT_Y1+vtab3,
00443             TABLE_X1+TABLE_COLUMN_WIDTH+TABLE_COLUMN_WIDTH+2,REPORT_Y1+vtab4+2,1);
00444 
00445         font_chartsm.put_paragraph(
00446             TABLE_X1+TABLE_COLUMN_WIDTH+25,REPORT_Y1+vtab1+3,
00447             (int)(TABLE_X1+(2.1)*TABLE_COLUMN_WIDTH),REPORT_Y1+vtab2,
00448             mode_course_label[1],-1);
00449 
00450         for(int i=2;i<TABLE_COLUMN_COUNT;i++) {
00451             user_interface.rect(
00452                 TABLE_X1+i*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab1,
00453                 TABLE_X1+i*TABLE_COLUMN_WIDTH+TABLE_COLUMN_WIDTH+2,REPORT_Y1+vtab2+4,1);
00454 
00455             user_interface.rect(
00456                 TABLE_X1+i*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3,
00457                 TABLE_X1+i*TABLE_COLUMN_WIDTH+TABLE_COLUMN_WIDTH+2,REPORT_Y1+vtab4+2,1);
00458 
00459             font_chartsm.put_paragraph(
00460                 TABLE_X1+i*TABLE_COLUMN_WIDTH+7,REPORT_Y1+vtab1+3,
00461                 (int)(TABLE_X1+(i+1.1)*TABLE_COLUMN_WIDTH),REPORT_Y1+vtab2+10,
00462                 mode_course_label[i],-1);
00463         }
00464         for(i=0;i<3;i++) {
00465             font_chartsm.put_paragraph(
00466                 TABLE_X1+7,REPORT_Y1+vtab3+45*i+15,
00467                 TABLE_X1+10+TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+45*i+70,
00468                 mode_teaching_label[i],-1);
00469         }
00470 
00471         for(i=3;i<DISP_TEACHING_METHOD_COUNT+1;i++) {
00472             // ##### Begin Marco ##### //
00473 #if(GAME_VERSION>=200)
00474             if ( i == 3 )                               // skip to print out Distance Learning courses
00475                 continue;
00476 
00477             if (i == 4) {
00478                 font_chartsm.put_paragraph(
00479                     TABLE_X1+7,REPORT_Y1+vtab3+50*i,
00480                     TABLE_X1+10+TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+50*i+70,
00481                     mode_teaching_label[i],-1);
00482 
00483                 font_chart_purple_sm.put(TABLE_X1+7,REPORT_Y1+vtab3+50*4+20, "Initial");
00484                 vga_back.line(TABLE_X1+7,REPORT_Y1+vtab3+50*4+18, font_chart_purple_sm.text_width("Initial")+TABLE_X1+7,REPORT_Y1+vtab3+50*4+18,V_BLACK);
00485             }
00486             else {
00487 #endif
00488                 /* orginal */
00489                 font_chartsm.put_paragraph(
00490                     TABLE_X1+7,REPORT_Y1+vtab3+50*i+15,
00491                     TABLE_X1+10+TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+50*i+70,
00492                     mode_teaching_label[i],-1);
00493                 /* orginal */
00494 #if(GAME_VERSION>=200)
00495             }
00496 #endif
00497             // ##### End Marco ##### //
00498         }
00499 
00500         if(report_init_flag)
00501             course_report_deinit();
00502 
00503         report_init_flag=1;
00504 
00505         /*              text_refresh_bitmap=
00506                         vga_back.save_area(
00507                         TABLE_X1+TABLE_COLUMN_WIDTH,
00508                         REPORT_Y1+vtab3,
00509                         TABLE_X2,
00510                         REPORT_Y1+vtab4,
00511                         text_refresh_bitmap);
00512         */
00513         short x = BOTTOM_BUTTON_X1;
00514         short y = BOTTOM_BUTTON_Y1;
00515         font_chartsm.put(REPORT_X1,y+2,"    Department :");
00516         font_chartsm.put(REPORT_X1,y+30,"      Institution :");
00517 #if(GAME_VERSION>=200)
00518         for (i = 0; i < 3; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00519             type_button_group[i].create_text(x, y,
00520                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00521                                              reportTypeStrArray[i]);
00522         }
00523         x = BOTTOM_BUTTON_X1;
00524         y = BOTTOM_BUTTON_Y1+28;
00525         for (i = 3; i < 6; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00526             type_button_group[i].create_text(x, y,
00527                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00528                                              reportTypeStrArray[i]);
00529         }
00530 #else
00531         for (i = 0; i < 2; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00532             type_button_group[i].create_text(x, y,
00533                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00534                                              reportTypeStrArray[i]);
00535         }
00536         x = BOTTOM_BUTTON_X1;
00537         y = BOTTOM_BUTTON_Y1+28;
00538         for (i = 2; i < 4; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00539             type_button_group[i].create_text(x, y,
00540                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00541                                              reportTypeStrArray[i]);
00542         }
00543 #endif
00544         /*
00545           short x = BOTTOM_BUTTON_X1;
00546           short y = BOTTOM_BUTTON_Y1;
00547 
00548           font_chartsm.put(REPORT_X1,y+2,"    Department :");
00549           font_chartsm.put(REPORT_X1,y+30,"      Institution :");
00550 
00551           for (i = 0; i < 2; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE)
00552           {
00553           user_interface.create_button_bitmap(x, y,
00554           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00555           reportTypeStrArray[i], &type_button_up_bitmap[i],
00556           &type_button_down_bitmap[i], &vga_back);
00557           type_button_group[i].create_bitmapW(x, y,
00558           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00559           ((i == department_array.current_report_type) ? type_button_down_bitmap[i] : type_button_up_bitmap[i])+4);
00560           }
00561 
00562           x = BOTTOM_BUTTON_X1;
00563           y = BOTTOM_BUTTON_Y1+28;
00564 
00565           for (i = 2; i < 4; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE)
00566           {
00567           user_interface.create_button_bitmap(x, y,
00568           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00569           reportTypeStrArray[i], &type_button_up_bitmap[i],
00570           &type_button_down_bitmap[i], &vga_back);
00571           type_button_group[i].create_bitmapW(x, y,
00572           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00573           ((i == department_array.current_report_type) ? type_button_down_bitmap[i] : type_button_up_bitmap[i])+4);
00574           }
00575         */
00576         font_chartsm.put(TABLE_X1+110,REPORT_Y1+vtab5+15,mode_course_label[7]);
00577 
00578         mode_course_text2.right_put(TABLE_X1+400,REPORT_Y1+vtab5+15,&v2,4);
00579         mode_course_graphicon.init(TABLE_X1+500,REPORT_Y1+vtab5+5,
00580                                    TABLE_X1+600,REPORT_Y1+vtab5+40,
00581                                    1 ,&data_num ,dataArray, 1, 0, 3);
00582         mode_course_graphicon.paint();
00583 
00584         for(i=0;i<MAX_TEACHING_METHOD-1;i++) {
00585             int classId = mode_teaching_id[i];
00586 #if(GAME_VERSION>=200)
00587             if ( classId == 1 )                         // skip to print Distance Learning Courses Data
00588                 continue;
00589 #endif
00590             for(int j=0;j<6;j++) {
00591                 //## chea 210999 change failing to % (it print hoz)
00592                 if(j==5) {
00593                     mode_course_text[i][j].right_put
00594                         (
00595                             (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)-((j==2)?20:0)+((j==3)?10:0)),
00596                             REPORT_Y1+vtab3+50*i+15,
00597                             &(v[classId][j]),
00598                             3
00599                             );
00600                 }
00601                 else {
00602                     mode_course_text[i][j].right_put
00603                         (
00604                             (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)-((j==2)?20:0)+((j==3)?10:0)),
00605                             REPORT_Y1+vtab3+50*i+15,
00606                             &(v[classId][j]),
00607                             (j==3)?3:4
00608                             );
00609                 }
00610             }
00611             // (norm)
00612             mode_course_text[i][6].right_put
00613                 ( (int)(TABLE_X1+3.4*TABLE_COLUMN_WIDTH+25+((j==0)?45:30)),
00614                   REPORT_Y1+vtab3+50*i+15,
00615                   &(v[classId][6]),
00616                   13
00617                     );
00618 
00619         }
00620         for(int j=0;j<6;j++) {
00621             //## chea 210999 change failing to % (it print hoz)
00622             if(j==5) {
00623                 mode_course_text[MAX_TEACHING_METHOD-1][j].right_put
00624                     ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00625                       //REPORT_Y1+vtab3+50*4+15,
00626                       REPORT_Y1+vtab3+50*4,
00627                       &(v[MAX_TEACHING_METHOD_N_TOTAL-1][j]),
00628                       3
00629                         );
00630 
00631                 // ##### Begin Marco ##### //
00632 #if(GAME_VERSION>=200)
00633                 font_chart_purple_sm.right_put
00634                     ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00635                       REPORT_Y1+vtab3+50*4+20,
00636                       m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],3));
00637 
00638                 if ( font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],3)) > font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],3)) )
00639                     vga_back.line
00640                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],3)),
00641                           REPORT_Y1+vtab3+50*4+17,
00642                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00643                           REPORT_Y1+vtab3+50*4+17,
00644                           V_BLACK);
00645                 else
00646                     vga_back.line
00647                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],3)),
00648                           REPORT_Y1+vtab3+50*4+17,
00649                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00650                           REPORT_Y1+vtab3+50*4+17,
00651                           V_BLACK);
00652 #endif
00653                 // ##### End Marco ##### //
00654 
00655             }
00656             else {
00657 
00658                 mode_course_text[MAX_TEACHING_METHOD-1][j].right_put
00659                     ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00660                       //REPORT_Y1+vtab3+50*4+15,
00661                       REPORT_Y1+vtab3+50*4,
00662                       &(v[MAX_TEACHING_METHOD_N_TOTAL-1][j]),
00663                       (j==3)?3:4
00664                         );
00665 
00666                 // ##### Begin Marco ##### //
00667 #if(GAME_VERSION>=200)
00668                 font_chart_purple_sm.right_put
00669                     ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00670                       REPORT_Y1+vtab3+50*4+20,
00671                       m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4));
00672                 if (font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)) > font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)) )
00673                     vga_back.line
00674                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)),
00675                           REPORT_Y1+vtab3+50*4+17,
00676                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00677                           REPORT_Y1+vtab3+50*4+17,
00678                           V_BLACK);
00679                 else
00680                     vga_back.line
00681                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)),
00682                           REPORT_Y1+vtab3+50*4+17,
00683                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00684                           REPORT_Y1+vtab3+50*4+17,
00685                           V_BLACK);
00686 #endif
00687                 // ##### End Marco ##### //
00688 
00689             }
00690 
00691         }
00692 
00693     }
00694     else {
00695         // refresh screen
00696         for(int i=0;i<MAX_TEACHING_METHOD;i++)
00697             for(int j=0;j<7;j++)
00698                 mode_course_text[i][j].refresh();
00699         mode_course_text2.refresh();
00700         mode_course_graphicon.refresh();
00701 
00702         // ##### Begin Marco ##### //
00703 #if(GAME_VERSION>=200)
00704         for(int j=0;j<6;j++) {
00705             if(j==5) {
00706                 font_chart_purple_sm.right_put
00707                     ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00708                       REPORT_Y1+vtab3+50*4+20,
00709                       m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],3));
00710                 if (font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],3)) > font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],3)) )
00711                     vga_back.line
00712                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)),
00713                           REPORT_Y1+vtab3+50*4+17,
00714                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00715                           REPORT_Y1+vtab3+50*4+17,
00716                           V_BLACK);
00717                 else
00718                     vga_back.line
00719                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)),
00720                           REPORT_Y1+vtab3+50*4+17,
00721                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00722                           REPORT_Y1+vtab3+50*4+17,
00723                           V_BLACK);
00724             }
00725             else {
00726                 font_chart_purple_sm.right_put
00727                     ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00728                       REPORT_Y1+vtab3+50*4+20,
00729                       m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4));
00730                 if (font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)) > font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)) )
00731                     vga_back.line
00732                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chart_purple_sm.text_width(m.format(initialv[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)),
00733                           REPORT_Y1+vtab3+50*4+17,
00734                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00735                           REPORT_Y1+vtab3+50*4+17,
00736                           V_BLACK);
00737                 else
00738                     vga_back.line
00739                         ( (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0))-font_chartsm.text_width(m.format(v[MAX_TEACHING_METHOD_N_TOTAL-1][j],(j==3)?3:4)),
00740                           REPORT_Y1+vtab3+50*4+17,
00741                           (int)(TABLE_X1+(j+1.4)*TABLE_COLUMN_WIDTH+((j==0)?35:20)+((j==3)?10:0)),
00742                           REPORT_Y1+vtab3+50*4+17,
00743                           V_BLACK);
00744             }
00745         }
00746 #endif
00747         // ##### End Marco ##### //
00748 
00749     }
00750 
00751     type_button_group.paint(department_array.current_report_type);
00752 
00753     //  vga_back.rest_area(text_refresh_bitmap,0,0);
00754 
00755     /*  for(int i=1;i<TABLE_COLUMN_COUNT;i++)
00756         {
00757         for(int j=0;j<DISP_TEACHING_METHOD_COUNT;j++)
00758         {
00759         int classId = mode_teaching_id[j];
00760         int normClassSize = player_school.normal_class_size[classId];
00761 
00762         if(i==4)                // % class size deviation
00763         {
00764         float deviation;
00765 
00766         if( v[classId][1] > 0 )
00767         deviation = (float) 100 * (v[classId][3]-(float)normClassSize) / (float)normClassSize;
00768         else
00769         deviation = 0;          // no deviation if there is no section.
00770 
00771         Font *fontPtr = &font_chartsm;
00772 
00773         if( deviation < 0 )
00774         fontPtr = &font_red_san;
00775 
00776         fontPtr->center_put(
00777         TABLE_X1+i*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+45*j+15,
00778         TABLE_X1+(i+1)*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+45*j+15+font_chartsm.height(),
00779         m.format(deviation,3) );
00780         }
00781         else
00782         {
00783         font_chartsm.center_put(
00784         TABLE_X1+i*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+45*j+15,
00785         TABLE_X1+(i+1)*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+45*j+15+font_chartsm.height(),
00786         m.format((int)v[classId][i]) );
00787 
00788         if( i==3 )              // average class size, also display the norm
00789         {
00790         font_chartsm.center_put(
00791         TABLE_X1+i*TABLE_COLUMN_WIDTH+50,REPORT_Y1+vtab3+45*j+15,
00792         TABLE_X1+(i+1)*TABLE_COLUMN_WIDTH,REPORT_Y1+vtab3+45*j+15+font_chartsm.height(),
00793         m.format(-normClassSize) );             // use the negative sign to produce bracket display
00794         }
00795         }
00796         }
00797         }
00798     */
00799     vga.blt_buf(ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2);
00800 
00801 }
00802 
00803 void Department::course_report_2(int refreshFlag) {
00804 
00805     const static int vtab1=21;
00806     const static int vtab2=51;
00807     const static int vtab3=51;
00808     const static int vtab4=201;
00809     const static int vtab5=211;
00810     const static int vtab6=350;
00811     const static int tab1=TABLE_X1;
00812     const static int tab2=TABLE_X1+250;
00813     const static int tab3=TABLE_X1+250;
00814     const static int tab4=TABLE_X1+470;
00815     const static int tab5=TABLE_X1+470;
00816     const static int tab6=TABLE_X2-10;
00817 
00818     static int u[3]= {
00819         11,22,23
00820     }
00821     ,v[3]= {
00822         40,25,35
00823     };
00824     static xStart=1991,xEnd=1998;
00825     //-----communication with sim engine's Output-----//
00826 
00827     int deptRecno = department_array.selected_recno;
00828     Department* cur_dept_ptr = department_array[deptRecno];
00829     cur_dept_ptr->course_array;
00830 
00831     u[0]=cur_dept_ptr->course_preference[0];
00832     u[1]=cur_dept_ptr->course_preference[1];
00833     u[2]=cur_dept_ptr->course_preference[2];
00834     v[0]=cur_dept_ptr->course_preference_input[0];
00835     v[1]=cur_dept_ptr->course_preference_input[1];
00836     v[2]=cur_dept_ptr->course_preference_input[2];
00837 
00838     // normal teaching method percentage
00839     CourseTemplate* templ = course_res.get_template(department_id);
00840 
00841     vga.use_back();
00842 
00843     if (refreshFlag == INFO_REPAINT) {
00844         //------------- paint the background ----------------//
00845         user_interface.bg_img(BG_PIC_ID, &vga_back);
00846 
00847         user_interface.brighten(tab3,REPORT_Y1+vtab1,tab6,REPORT_Y1+vtab2);
00848         user_interface.brighten(tab1,REPORT_Y1+vtab3,tab6,REPORT_Y1+vtab6);
00849 
00850         user_interface.brighten(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14);
00851         user_interface.rect(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14,1);
00852         font_charts.put(REPORT_X1+320,REPORT_Y1-2,"Courses");
00853 
00854         user_interface.rect(tab1,REPORT_Y1+vtab3,tab6,REPORT_Y1+vtab4,1);
00855         user_interface.rect(tab1,REPORT_Y1+vtab4,tab6,REPORT_Y1+vtab6,1);
00856         user_interface.rect(tab3,REPORT_Y1+vtab1,tab4,REPORT_Y1+vtab6,1);
00857         user_interface.rect(tab5-3,REPORT_Y1+vtab1,tab6,REPORT_Y1+vtab6,1);
00858 
00859         if(report_init_flag)
00860             course_report_deinit();
00861         report_init_flag=1;
00862 
00863         short x = BOTTOM_BUTTON_X1;
00864         short y = BOTTOM_BUTTON_Y1;
00865         font_chartsm.put(REPORT_X1,y+2,"    Department :");
00866         font_chartsm.put(REPORT_X1,y+30,"      Institution :");
00867 #if(GAME_VERSION>=200)
00868         for (int i = 0; i < 3; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00869             type_button_group[i].create_text(x, y,
00870                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00871                                              reportTypeStrArray[i]);
00872         }
00873         x = BOTTOM_BUTTON_X1;
00874         y = BOTTOM_BUTTON_Y1+28;
00875         for (i = 3; i < 6; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00876             type_button_group[i].create_text(x, y,
00877                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00878                                              reportTypeStrArray[i]);
00879         }
00880 #else
00881         for (int i = 0; i < 2; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00882             type_button_group[i].create_text(x, y,
00883                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00884                                              reportTypeStrArray[i]);
00885         }
00886         x = BOTTOM_BUTTON_X1;
00887         y = BOTTOM_BUTTON_Y1+28;
00888         for (i = 2; i < 4; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
00889             type_button_group[i].create_text(x, y,
00890                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
00891                                              reportTypeStrArray[i]);
00892         }
00893 #endif
00894 
00895         mode_course_current_fraction1.right_put(tab3+90,REPORT_Y1+vtab5+15,u,3);
00896         mode_course_current_fraction2.right_put(tab3+90,REPORT_Y1+vtab5+65,u+1,3);
00897         mode_course_current_fraction3.right_put(tab3+90,REPORT_Y1+vtab5+115,u+2,3);
00898 
00899         for( i=0 ; i<3 ; i++ ) {                      // display normal teaching method percentage
00900 #if(GAME_VERSION>=200)
00901             //marco
00902             font_chart_purple_sm.right_put( tab3+150, REPORT_Y1+vtab5+15+i*50, m.format(cur_dept_ptr->initial_course_preference[i],3) );
00903 #else
00904             font_chartsm.right_put( tab3+150, REPORT_Y1+vtab5+15+i*50, m.format(-templ->target_preference[i],3) );
00905 #endif
00906         }
00907 
00908         mode_course_piechart1.init(tab3,REPORT_Y1+vtab3,tab4,REPORT_Y1+vtab4,3,u,&xStart,&xEnd,
00909                                    NULL, NULL, NULL, 1, 1, 0, 3);
00910         mode_course_piechart2.init(tab5-3,REPORT_Y1+vtab3,tab6,REPORT_Y1+vtab4,3,v,&xStart,&xEnd,
00911                                    NULL, NULL, NULL, 1, 1, 0, 3);
00912         mode_course_piechart1.paint();
00913         mode_course_piechart2.paint();
00914 
00915         //-------- draw the legend --------------//
00916         font_chartsm.put(tab1+75,REPORT_Y1+vtab5+15,"Seminar");
00917         font_chartsm.put(tab1+75,REPORT_Y1+vtab5+65,"Medium-sized classes");
00918         font_chartsm.put(tab1+75,REPORT_Y1+vtab5+115,"Lectures with breakouts");
00919         user_interface.bar(
00920             tab1+54,REPORT_Y1+vtab5+15,tab1+66,REPORT_Y1+vtab5+27,
00921             ((mode_course_piechart1.series_color)[0]));
00922         user_interface.bar(
00923             tab1+54,REPORT_Y1+vtab5+65,tab1+66,REPORT_Y1+vtab5+77,
00924             ((mode_course_piechart1.series_color)[1]));
00925         user_interface.bar(
00926             tab1+54,REPORT_Y1+vtab5+115,tab1+66,REPORT_Y1+vtab5+127,
00927             ((mode_course_piechart1.series_color)[2]));
00928 
00929         font_chartsm.put(tab3+45,REPORT_Y1+vtab1+10,"Current fraction");
00930         font_chartsm.put(tab5+45,REPORT_Y1+vtab1+10,"Target fraction");
00931         mode_course_valueslider1.init(tab5+15,REPORT_Y1+vtab5+10,200,20,0,100,&(v[0]),1,((mode_course_piechart1.series_color)[0]),3);
00932         mode_course_valueslider2.init(tab5+15,REPORT_Y1+vtab5+60,200,20,0,100,&(v[1]),1,((mode_course_piechart1.series_color)[1]),3);
00933         mode_course_valueslider3.init(tab5+15,REPORT_Y1+vtab5+110,200,20,0,100,&(v[2]),1,((mode_course_piechart1.series_color)[2]),3);
00934     }
00935     else {
00936         // refresh screen
00937         mode_course_current_fraction1.refresh();
00938         mode_course_current_fraction2.refresh();
00939         mode_course_current_fraction3.refresh();
00940         mode_course_piechart1.refresh();
00941         mode_course_piechart2.refresh();
00942     }
00943 
00944     mode_course_valueslider1.refresh();
00945     mode_course_valueslider2.refresh();
00946     mode_course_valueslider3.refresh();
00947     type_button_group.paint(department_array.current_report_type);
00948 
00949     vga.blt_buf(ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2);
00950 
00951 }
00952 
00953 void Department::course_report_4(int refreshFlag) {
00954 
00955     const static int vtab1=20;
00956     const static int vtab2=78;
00957     const static int vtab3=82;
00958     const static int vtab4=280;
00959     const static int vtab5=285;
00960     const static int vtab6=350;
00961 
00962     static int data_num=HISTORY_MONTH_COUNT;
00963     static float *dataArray;
00964 
00965     static int v1=0;
00966     static double v2=12.345;
00967     static int v3=23;
00968     //-----communication with sim engine's Output-----//
00969 
00970     int deptRecno = department_array.selected_recno;
00971     Department* cur_dept_ptr = department_array[deptRecno];
00972     cur_dept_ptr->course_array;
00973 
00974     v1=player_school.summer_emphasis;
00975 
00976     // BUGHERE
00977     dataArray=library_tech_office.tech_utilization_history;
00978     v2=library_tech_office.tech_utilization_history[HISTORY_MONTH_COUNT-1];
00980 
00981     vga.use_back();
00982 
00983     if (refreshFlag == INFO_REPAINT) {
00984         //------------- paint the background ----------------//
00985         user_interface.bg_img(BG_PIC_ID, &vga_back);
00986 
00987         user_interface.brighten(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14);
00988         user_interface.rect(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14,1);
00989         font_charts.put(REPORT_X1+320,REPORT_Y1-2,"Courses");
00990 
00991         user_interface.brighten(TABLE_X1,REPORT_Y1+vtab1,TABLE_X2,REPORT_Y1+vtab2);
00992         user_interface.brighten(TABLE_X1,REPORT_Y1+vtab3,TABLE_X2,REPORT_Y1+vtab6);
00993 
00994         user_interface.rect(
00995             TABLE_X1,REPORT_Y1+vtab1,
00996             TABLE_X2,REPORT_Y1+vtab2+3,1);
00997 
00998         user_interface.rect(
00999             TABLE_X1,REPORT_Y1+vtab3,
01000             TABLE_X2,REPORT_Y1+vtab6,1);
01001 
01002         //-------------- Show Text --------------//
01003         font_chartsm.put_paragraph(
01004             TABLE_X1+50,REPORT_Y1+vtab3+15,
01005             TABLE_X2,REPORT_Y1+vtab3+45,
01006             "Emphasis on summer course-taking");
01007 
01008         if(report_init_flag)
01009             course_report_deinit();
01010         report_init_flag=1;
01011 
01012         /*
01013           short x = BOTTOM_BUTTON_X1;
01014           short y = BOTTOM_BUTTON_Y1;
01015 
01016           font_chartsm.put(REPORT_X1,y+2,"    Department :");
01017           font_chartsm.put(REPORT_X1,y+30,"      Institution :");
01018 
01019           for (int i = 0; i < 2; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE)
01020           {
01021           user_interface.create_button_bitmap(x, y,
01022           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01023           reportTypeStrArray[i], &type_button_up_bitmap[i],
01024           &type_button_down_bitmap[i], &vga_back);
01025           type_button_group[i].create_bitmapW(x, y,
01026           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01027           ((i == department_array.current_report_type) ? type_button_down_bitmap[i] : type_button_up_bitmap[i])+4);
01028           }
01029 
01030           x = BOTTOM_BUTTON_X1;
01031           y = BOTTOM_BUTTON_Y1+28;
01032 
01033           for (i = 2; i < 4; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE)
01034           {
01035           user_interface.create_button_bitmap(x, y,
01036           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01037           reportTypeStrArray[i], &type_button_up_bitmap[i],
01038           &type_button_down_bitmap[i], &vga_back);
01039           type_button_group[i].create_bitmapW(x, y,
01040           x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01041           ((i == department_array.current_report_type) ? type_button_down_bitmap[i] : type_button_up_bitmap[i])+4);
01042           }
01043         */
01044         short x = BOTTOM_BUTTON_X1;
01045         short y = BOTTOM_BUTTON_Y1;
01046         font_chartsm.put(REPORT_X1,y+2,"    Department :");
01047         font_chartsm.put(REPORT_X1,y+30,"      Institution :");
01048 #if(GAME_VERSION>=200)
01049         for (int i = 0; i < 3; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
01050             type_button_group[i].create_text(x, y,
01051                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01052                                              reportTypeStrArray[i]);
01053         }
01054         x = BOTTOM_BUTTON_X1;
01055         y = BOTTOM_BUTTON_Y1+28;
01056         for (i = 3; i < 6; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
01057             type_button_group[i].create_text(x, y,
01058                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01059                                              reportTypeStrArray[i]);
01060         }
01061 #else
01062         for (int i = 0; i < 2; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
01063             type_button_group[i].create_text(x, y,
01064                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01065                                              reportTypeStrArray[i]);
01066         }
01067         x = BOTTOM_BUTTON_X1;
01068         y = BOTTOM_BUTTON_Y1+28;
01069         for (i = 2; i < 4; i++, x+=BOTTOM_BUTTON_WIDTH+BOTTOM_BUTTON_DISTANCE) {
01070             type_button_group[i].create_text(x, y,
01071                                              x+BOTTOM_BUTTON_WIDTH, y+BOTTOM_BUTTON_HEIGHT,
01072                                              reportTypeStrArray[i]);
01073         }
01074 #endif
01075 
01076         font_chartsm.put(REPORT_X1+50,REPORT_Y1+vtab1+25,"Percentage of courses using information technology");
01077 
01078         // Initialize the objected to be displayed
01079         //              if(mode_course_refresh1)
01080         //                      mem_del(mode_course_refresh1);
01081         //              mode_course_refresh1=NULL;
01082         //              mode_course_refresh=vga_back.save_area(REPORT_X1,REPORT_Y1+vtab5,REPORT_X2,REPORT_Y1+vtab6,mode_course_refresh);
01083         mode_course_text2.right_put(REPORT_X1+450,REPORT_Y1+vtab1+25,&v2,3);
01084         mode_course_graphicon2.init(REPORT_X1+550,REPORT_Y1+vtab1+10,
01085                                     REPORT_X1+650,REPORT_Y1+vtab1+50,
01086                                     1 ,&data_num ,dataArray, 1, 0, 3);
01087 
01088         mode_course_rbv.init(
01089             REPORT_X1+100,
01090             REPORT_Y1+vtab3+60,
01091             REPORT_X2,
01092             REPORT_Y1+vtab6,
01093             4,
01094             &v1,
01095             mode_course_rblabel,
01096             NULL
01097             );
01098 
01099         //              mode_course_valueslider4.init(REPORT_X1+250,REPORT_Y1+vtab5+26,200,20,0,100,&v3,1,V_YELLOW,3);
01100         // Pre-paint the graph here
01101         mode_course_graphicon2.paint();
01102         //              vga_back.rest_area(mode_course_refresh1,0,0);
01103     }
01104     else {
01105         // refresh screen
01106         mode_course_text2.refresh();
01107         mode_course_graphicon2.refresh();
01108         mode_course_rbv.refresh();
01109 
01110         /*              if(((*mode_course_rbv.sel_num)==1)||
01111                         ((*mode_course_rbv.sel_num)==2)||
01112                         ((*mode_course_rbv.sel_num)==3))
01113                         {
01114                         font_chartsm.put(TABLE_X1+50,REPORT_Y1+vtab5,
01115                         "Percent of summer teaching by regular faculty as part of normal teaching load");
01116                         }
01117                         else
01118                         {
01119                         vga_back.rest_area(mode_course_refresh1,0,0);
01120                         }
01121         */
01122     }
01123     /*  if(
01124         ((*mode_course_rbv.sel_num)==1)||
01125         ((*mode_course_rbv.sel_num)==2)||
01126         ((*mode_course_rbv.sel_num)==3)
01127         )
01128         {
01129         mode_course_valueslider4.refresh();
01130         }
01131     */
01132     type_button_group.paint(department_array.current_report_type);
01133 
01134     vga.blt_buf(ZOOM_X1, ZOOM_Y1, ZOOM_X2, ZOOM_Y2);
01135 
01136 }
01137 
01138 #if(GAME_VERSION>=200)
01139 // --- Begin of Department::course_report_5 --- //
01140 //
01141 void Department::course_report_5(int refreshFlag) {
01142     const static int vtab1=21;
01143     const static int vtab2=51;
01144     const static int vtab3=51;
01145     const static int vtab4=201;
01146     const static int vtab5=211;
01147     const static int vtab6=350;
01148     const static int tab1=TABLE_X1;
01149     const static int tab2=TABLE_X1+250;
01150     const static int tab3=TABLE_X1+250;
01151     const static int tab4=TABLE_X1+470;
01152     const static int tab5=TABLE_X1+470;
01153     const static int tab6=TABLE_X2-10;
01154 
01155     int deptRecno = department_array.selected_recno;
01156     Department* deptPtr = department_array[deptRecno];
01157     int sliderVar1=deptPtr->department_incentives;
01158     int sliderVar2=deptPtr->ease_outsourcing_credits;
01159     int sliderVar3=deptPtr->distance_learning_credits;
01160 
01161     vga.use_back();
01162 
01163     if ( (refreshFlag == INFO_REPAINT) || (info.is_begin_trimester()) ) {
01164         if(report_init_flag)
01165             course_report_deinit();
01166         report_init_flag=1;
01167 
01168         // used to store the three graphs data
01169         static float  dataArray[HISTORY_TRIMESTER_COUNT];
01170         static int  dataArray2[HISTORY_YEAR_COUNT];
01171         // used to store the three graphs data
01172         static int  dataArray3[HISTORY_TRIMESTER_COUNT];
01173         static int  numSeriesData = HISTORY_TRIMESTER_COUNT;
01174         static int  numSeriesData2 = HISTORY_YEAR_COUNT;
01175 
01176         memset( dataArray, 0, sizeof(dataArray) );
01177         memset( dataArray2, 0, sizeof(dataArray2) );
01178         memset( dataArray3, 0, sizeof(dataArray3) );
01179 
01180         //------------- paint the background ----------------//
01181         user_interface.bg_img(BG_PIC_ID, &vga_back);
01182 
01183         user_interface.brighten(tab1,REPORT_Y1+vtab3,tab6,REPORT_Y1+vtab6);
01184 
01185         user_interface.brighten(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14);
01186         user_interface.rect(REPORT_X1+100,REPORT_Y1-5,REPORT_X1+630,REPORT_Y1+14,1);
01187         font_charts.put(REPORT_X1+180,REPORT_Y1-2,"Information Technology and Distance Learning Credits");
01188 
01189         int shiftNumber;
01190         if ( player_school.is_trimester_off ) {
01191             if ( player_school.cur_trimester != 0 )
01192                 shiftNumber = player_school.cur_trimester - 1;
01193             else
01194                 shiftNumber = 2;
01195         }
01196         else
01197             shiftNumber = player_school.cur_trimester;
01198 
01199         if ( current_report_mode==REPORT_MODE_INSTITUTION ) {
01200             for ( int i=0; i<HISTORY_TRIMESTER_COUNT; i++ ) {
01201                 for ( int j=department_array.size(); j>0; j-- ) {
01202                     if ( department_array.is_deleted(j) )
01203                         continue;
01204 
01205                     dataArray[i] += department_array[j]->p_tech_utilization_history[i];
01206                     dataArray3[i] += department_array[j]->distance_credits_provided_history[i];
01207                 }
01208                 dataArray[i] /= department_array.size();
01209                 dataArray[i] = (int) dataArray[i];
01210             }
01211 
01212             for ( i=0; i<HISTORY_YEAR_COUNT; i++ ) {
01213                 for ( int j=department_array.size(); j>0; j-- ) {
01214                     if ( department_array.is_deleted(j) )
01215                         continue;
01216 
01217                     int index = HISTORY_TRIMESTER_COUNT - shiftNumber - (HISTORY_YEAR_COUNT-1-i)*3 - 1;
01218                     dataArray2[i] += department_array[j]->course_array.outsourcing_credits_history[MAX_TEACHING_METHOD][index];
01219                 }
01220             }
01221 
01222         }
01223         else {
01224             for ( int i=0; i<HISTORY_TRIMESTER_COUNT; i++ ) {
01225                 dataArray[i] = (int)deptPtr->p_tech_utilization_history[i];
01226                 dataArray3[i] = (int)deptPtr->distance_credits_provided_history[i];
01227             }
01228             for ( i=0; i<HISTORY_YEAR_COUNT; i++ ) {
01229                 int index = HISTORY_TRIMESTER_COUNT - shiftNumber - (HISTORY_YEAR_COUNT-1-i)*3 - 1;
01230                 dataArray2[i] = (int)deptPtr->course_array.outsourcing_credits_history[MAX_TEACHING_METHOD][index];
01231             }
01232         }
01233 
01234         // Three graph  --- Kenneth
01235         it_utilization_graph.init(
01236             REPORT_X1+20,
01237             REPORT_Y1+70,
01238             REPORT_X1+MODE_STATISTICS_GRAPH_WIDTH+20,
01239             REPORT_Y1+MODE_STATISTICS_GRAPH_HEIGHT+70,
01240             1, &numSeriesData, dataArray, 0,
01241             NULL, NULL, NULL, 1, 1, 1, 3);
01242         outsourcing_credits_graph.init(
01243             REPORT_X1+