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

Password:

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

Oopt1.cpp

Go to the documentation of this file.
00001 //Filename    : OOPT1.CPP
00002 //Description : Optimization class - stage 1
00003 
00004 #include <OSYS.H>
00005 #include <OGAMESET.H>
00006 #include <OWORLDMT.H>
00007 #include <OBNDSLDR.H>
00008 #include <OVGA.H>
00009 #include <COLOR.H>
00010 #include <OFINANCE.H>
00011 #include <OFONT.H>
00012 #include <OGAMESTR.H>
00013 #include <OMOUSE.H>
00014 #include <OOPT.H>
00015 #include <OBUTTON.H>
00016 #include <OIFACE.H>
00017 #include <OIMGRES.H>
00018 #include <OTEXT.H>
00019 #include <OHELPIF.H>
00020 #include <OHELP.H>
00021 #include <OAUDIO.H>
00022 #include <OCONFIG.H>
00023 
00024 //------- Define constants -------//
00025 
00026 enum {
00027     REPORT_X1 = ZOOM_X1 + 15,
00028     REPORT_Y1 = ZOOM_Y1 + 25,
00029     REPORT_X2 = ZOOM_X2 - 15,
00030     REPORT_Y2 = ZOOM_Y2 - 60
00031 };
00032 
00033 enum {
00034     SEPARATOR_1 = REPORT_X1 + 250,
00035     SEPARATOR_2 = REPORT_X1 + 500,
00036     SEPARATOR_3 = REPORT_X1 + 620
00037 };
00038 
00039 enum {
00040     LINE_SPACING = 25,
00041     HEADING_HEIGHT = 30,
00042     FIRST_LINE_OFFSET = REPORT_Y1 + HEADING_HEIGHT + 20,
00043     DESCRIPTION_OFFSET = REPORT_X1 + 30,
00044     SLIDER_OFFSET = 1,
00045     DESCRIPTION_INDENT = 20,
00046     TARGET_OFFSET = SEPARATOR_1 + 15,
00047     TARGET_WIDTH = SEPARATOR_2 - SEPARATOR_1 - 30,
00048     TARGET_HEIGHT = 10,
00049     PREF_BUTTON_WIDTH = 16,
00050     PREF_BUTTON_HEIGHT = 16,
00051     PREF_BUTTON_DISTANCE = 10,
00052     PREF_BUTTON_OFFSET = 0,
00053     PREF_BUTTON_OFFSET1 = SEPARATOR_2 + 15,
00054     PREF_BUTTON_OFFSET2 = PREF_BUTTON_OFFSET1 + PREF_BUTTON_WIDTH + PREF_BUTTON_DISTANCE,
00055     PREF_BUTTON_OFFSET3 = PREF_BUTTON_OFFSET2 + PREF_BUTTON_WIDTH + PREF_BUTTON_DISTANCE,
00056     PREF_BUTTON_OFFSET4 = PREF_BUTTON_OFFSET3 + PREF_BUTTON_WIDTH + PREF_BUTTON_DISTANCE,
00057     RESULT_OFFSET = SEPARATOR_3 + 20,
00058     RESULT_LENGTH = 50
00059 };
00060 
00061 //-------- define static vars -----------//
00062 
00063 static Text result_text[REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT];
00064 static Button help_button_array[REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT];
00065 
00066 static char *title[] = {
00067     "Description",
00068     "Target",
00069     "      Preference",
00070     "Result(%)"
00071 };
00072 
00073 static char *heading[] = {
00074     "Revenue policies",
00075     "Cost rise and net budget change"
00076 };
00077 
00078 static char *pref_label[] = {
00079     "1", "2", "3", "R"
00080 };
00081 
00082 static char *optimize_label = "Optimize";
00083 
00084 //------- Begin of function Optimization::init_stage_1 -----------//
00086 void Optimization::init_stage_1() {
00087     for (int i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00088         for (int j = 0; j < PREF_COUNT; j++) {
00089             opt1_button_group_up_bitmap[i * PREF_COUNT + j] = NULL;
00090             opt1_button_group_down_bitmap[i * PREF_COUNT + j] = NULL;
00091         }
00092     }
00093 }
00094 
00095 //--------- End of function Optimization::init_stage_1 -----------//
00096 
00097 //------- Begin of function Optimization::deinit_stage_1 ---------//
00099 void Optimization::deinit_stage_1() {
00100     for (int i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00101         delete opt1_button_group_array[i];
00102 
00103         if(opt1_button_group_array[i]) {
00104             opt1_button_group_array[i]=NULL;
00105         }
00106 
00107         opt1_slider_group[i].deinit();
00108 
00109         for (int j = 0; j < PREF_COUNT; j++) {
00110             mem_del(opt1_button_group_up_bitmap[i * PREF_COUNT + j]);
00111             mem_del(opt1_button_group_down_bitmap[i * PREF_COUNT + j]);
00112             opt1_button_group_up_bitmap[i * PREF_COUNT + j] = NULL;
00113             opt1_button_group_down_bitmap[i * PREF_COUNT + j] = NULL;
00114         }
00115 
00116         //              opt1_button_group_array[i]->button_pressed=2;
00117         result_text[i].deinit();
00118         // ###### begin Gilbert 28/04/2001 #######//
00119         help_button_array[i].deinit();
00120         // ###### end Gilbert 28/04/2001 #######//
00121     }
00122     stage_init_flag = 0;
00123 }
00124 
00125 //--------- End of function Optimization::deinit_stage_1 -------//
00126 
00127 //------- Begin of function Optimization::report_stage_1 -------//
00129 void Optimization::report_stage_1(int refreshFlag) {
00130     if (refreshFlag == INFO_REPAINT || refresh_optimization_screen ) {
00131         user_interface.brighten(REPORT_X1+100, ZOOM_Y1, REPORT_X2-100, REPORT_Y1);
00132         user_interface.brighten(REPORT_X1+4, REPORT_Y1+4, REPORT_X2-2, REPORT_Y2-2);
00133         user_interface.rect(REPORT_X1+100, ZOOM_Y1, REPORT_X2-100, REPORT_Y1);
00134         //              font_charts.center_put( REPORT_X1, ZOOM_Y1, REPORT_X2, REPORT_Y1, "Stage 1 : Overall Revenue and Expenditure" );
00135         font_charts.center_put( REPORT_X1, ZOOM_Y1, REPORT_X2, REPORT_Y1, "Revenue and Expenditure" );
00136 
00137         // current stage not init'ed
00138         if (stage_init_flag != 1 || refresh_optimization_screen ) {
00139             deinit();
00140             ButtonGroup *buttonGroupPtr;
00141             double *targetValue, *lowerBound, *upperBound, *importWeight, lowerLimit, upperLimit;
00142             int pressedButton;
00143 
00144             for (int i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00145                 opt1_button_group_array[i] = new ButtonGroup(PREF_COUNT);
00146 
00147                 //                              if(finance.revenue_policy_array[i].target_value >= finance.revenue_policy_array[i].upper_limit)
00148                 //                                      finance.revenue_policy_array[i].target_value = finance.revenue_policy_array[i].upper_limit;
00149                 //                              else if(finance.revenue_policy_array[i].target_value <= finance.revenue_policy_array[i].lower_limit)
00150                 //                                      finance.revenue_policy_array[i].target_value = finance.revenue_policy_array[i].lower_limit;
00151 
00152                 //##### begin fred 980904#####//
00153                 targetValue = (i < REVENUE_POLICY_COUNT) ? &(finance.revenue_policy_array[i].target_value) : &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].target_value);
00154                 lowerBound = (i < REVENUE_POLICY_COUNT) ? &(finance.revenue_policy_array[i].lower_bound) : &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].lower_bound);
00155                 upperBound = (i < REVENUE_POLICY_COUNT) ? &(finance.revenue_policy_array[i].upper_bound) : &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].upper_bound);
00156                 importWeight = (i < REVENUE_POLICY_COUNT) ? &(finance.revenue_policy_array[i].import_weight) : &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].import_weight);
00157                 lowerLimit = (i < REVENUE_POLICY_COUNT) ? (finance.revenue_policy_array[i].lower_limit) : (finance.expense_policy_array[i - REVENUE_POLICY_COUNT].lower_limit);
00158                 upperLimit = (i < REVENUE_POLICY_COUNT) ? (finance.revenue_policy_array[i].upper_limit) : (finance.expense_policy_array[i - REVENUE_POLICY_COUNT].upper_limit);
00159 
00160                 //                              opt1_slider_group[i].init(
00161                 //                                      TARGET_OFFSET, SLIDER_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00162                 //                                      TARGET_WIDTH, TARGET_HEIGHT, targetValue, lowerBound, upperBound, *targetValue-(*targetValue-*lowerBound)*2, *targetValue+(*upperBound-*targetValue)*2);
00163 #if(GAME_VERSION>=200)
00164                 if ( *targetValue > *upperBound )
00165                     *targetValue = *upperBound;
00166 #endif
00167 
00168                 opt1_slider_group[i].init(
00169                     TARGET_OFFSET, SLIDER_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00170                     TARGET_WIDTH, TARGET_HEIGHT, targetValue, lowerBound, upperBound, lowerLimit, upperLimit,
00171                     1,V_YELLOW,V_GREEN,24);                 //## chea 110809 change by b.massy
00172                 //##### end fred 980904#####//
00173 
00174 #if(GAME_VERSION>=200)
00175                 if ( i == 0 ) {
00176                     if ( *upperBound < 5.0 )
00177                         opt1_slider_group[i].lock_max = 1;
00178                 }
00179 
00180                 // lock indirect cost rate's upper bound
00181 
00182                 if( i == PL_INDIRECT_COST_RATE ) {
00183                     opt1_slider_group[i].lock_max = 1;
00184                 }
00185 #endif
00186 
00187                 user_interface.create_button_bitmap(
00188                     PREF_BUTTON_OFFSET1-2,
00189                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00190                     PREF_BUTTON_OFFSET1 + PREF_BUTTON_WIDTH,
00191                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00192                     pref_label[0], &opt1_button_group_up_bitmap[PREF_COUNT * i], &opt1_button_group_down_bitmap[PREF_COUNT * i], &vga_back);
00193                 user_interface.create_button_bitmap(
00194                     PREF_BUTTON_OFFSET2-2,
00195                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00196                     PREF_BUTTON_OFFSET2 + PREF_BUTTON_WIDTH,
00197                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00198                     pref_label[1], &opt1_button_group_up_bitmap[PREF_COUNT * i + 1], &opt1_button_group_down_bitmap[PREF_COUNT * i + 1], &vga_back);
00199                 user_interface.create_button_bitmap(
00200                     PREF_BUTTON_OFFSET3-2,
00201                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00202                     PREF_BUTTON_OFFSET3 + PREF_BUTTON_WIDTH,
00203                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00204                     pref_label[2], &opt1_button_group_up_bitmap[PREF_COUNT * i + 2], &opt1_button_group_down_bitmap[PREF_COUNT * i + 2], &vga_back);
00205                 user_interface.create_button_bitmap(
00206                     PREF_BUTTON_OFFSET4-2,
00207                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00208                     PREF_BUTTON_OFFSET4 + PREF_BUTTON_WIDTH,
00209                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00210                     pref_label[3], &opt1_button_group_up_bitmap[PREF_COUNT * i + 3], &opt1_button_group_down_bitmap[PREF_COUNT * i + 3], &vga_back);
00211                 buttonGroupPtr = opt1_button_group_array[i];
00212 
00213                 //                              pressedButton = int(*importWeight * 2.0) - 1;
00214                 if(*importWeight==OPT_LOW_WEIGHT)
00215                     pressedButton =0;
00216                 if(*importWeight==OPT_MID_WEIGHT)
00217                     pressedButton =1;
00218                 if(*importWeight==OPT_HIGH_WEIGHT)
00219                     pressedButton =2;
00220 
00221                 if(((i < REVENUE_POLICY_COUNT) ?
00222                     (finance.revenue_policy_array[i].required_flag) :
00223                     (finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag) )) {
00224                     pressedButton = 3;
00225                     opt1_slider_group[i].enable_flag=0;
00226                 }
00227                 //                              else
00228                 //                              {
00229                 //                                      if(pressedButton==3)
00230                 //                                              pressedButton = 1;
00231                 //                                      opt1_slider_group[i].enable_flag=1;
00232                 //                              }
00233 
00234                 (*buttonGroupPtr)[0].create_bitmapW(
00235                     PREF_BUTTON_OFFSET1-2,
00236                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00237                     PREF_BUTTON_OFFSET1 + PREF_BUTTON_WIDTH,
00238                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00239                     ((pressedButton == 0) ? opt1_button_group_down_bitmap[PREF_COUNT * i] : opt1_button_group_up_bitmap[PREF_COUNT * i]) + 4);
00240                 (*buttonGroupPtr)[1].create_bitmapW(
00241                     PREF_BUTTON_OFFSET2-2,
00242                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00243                     PREF_BUTTON_OFFSET2 + PREF_BUTTON_WIDTH,
00244                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00245                     ((pressedButton == 1) ? opt1_button_group_down_bitmap[PREF_COUNT * i + 1] : opt1_button_group_up_bitmap[PREF_COUNT * i + 1]) + 4);
00246                 (*buttonGroupPtr)[2].create_bitmapW(
00247                     PREF_BUTTON_OFFSET3-2,
00248                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00249                     PREF_BUTTON_OFFSET3 + PREF_BUTTON_WIDTH,
00250                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00251                     ((pressedButton == 2) ? opt1_button_group_down_bitmap[PREF_COUNT * i + 2] : opt1_button_group_up_bitmap[PREF_COUNT * i + 2]) + 4);
00252                 (*buttonGroupPtr)[3].create_bitmapW(
00253                     PREF_BUTTON_OFFSET4-2,
00254                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00255                     PREF_BUTTON_OFFSET4 + PREF_BUTTON_WIDTH,
00256                     PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT,
00257                     ((pressedButton == 3) ? opt1_button_group_down_bitmap[PREF_COUNT * i + 3] : opt1_button_group_up_bitmap[PREF_COUNT * i + 3]) + 4);
00258 
00259                 buttonGroupPtr->button_pressed = pressedButton;
00260 
00261                 if(user_interface.backgd_flag==1)
00262                     help_button_array[i].create_text(REPORT_X1+10,
00263                                                      FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00264                                                      REPORT_X1+28,
00265                                                      FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))+18,
00266                                                      "?");
00267             }
00268 
00269             stage_init_flag = 1;
00270         }
00271 
00272         user_interface.h_line(REPORT_X1, REPORT_Y1+HEADING_HEIGHT, REPORT_X2-REPORT_X1);
00273         user_interface.v_line(SEPARATOR_1-1, REPORT_Y1+1, REPORT_Y2-REPORT_Y1-2);
00274         user_interface.v_line(SEPARATOR_2-1, REPORT_Y1+1, REPORT_Y2-REPORT_Y1-2);
00275         user_interface.v_line(SEPARATOR_3-1, REPORT_Y1+1, REPORT_Y2-REPORT_Y1-2);
00276         user_interface.rect(REPORT_X1, REPORT_Y1, REPORT_X2, REPORT_Y2, 2);
00277 
00278         font_chartsm.center_put( REPORT_X1+1, REPORT_Y1+1,
00279                                  SEPARATOR_1-1, REPORT_Y1+1+HEADING_HEIGHT, title[0] );
00280         font_chartsm.center_put( SEPARATOR_1+1, REPORT_Y1+1,
00281                                  SEPARATOR_2-1, REPORT_Y1+1+HEADING_HEIGHT, title[1] );
00282         font_chartsm.center_put( SEPARATOR_2+1, REPORT_Y1+1,
00283                                  SEPARATOR_3-1, REPORT_Y1+1+HEADING_HEIGHT, title[2] );
00284         font_chartsm.center_put( SEPARATOR_3+1, REPORT_Y1+1,
00285                                  REPORT_X2-1, REPORT_Y1+1+HEADING_HEIGHT, title[3] );
00286 
00287         if(user_interface.backgd_flag==1)
00288             image_interface.put_back(SEPARATOR_2+9,REPORT_Y1+7,"QUEST_UP");
00289 
00290         //              font_chartsm.put( DESCRIPTION_OFFSET, FIRST_LINE_OFFSET, heading[0]);
00291         //              font_chartsm.put( DESCRIPTION_OFFSET, FIRST_LINE_OFFSET + (REVENUE_POLICY_COUNT + 1) * LINE_SPACING, heading[1]);
00292 
00293         for (int i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00294             font_chartsm.put(
00295                 DESCRIPTION_OFFSET + DESCRIPTION_INDENT,
00296                 FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00297                 game_str_res.opt_stage1_str(i) );
00298             if(user_interface.backgd_flag==1)
00299                 image_interface.put_back(REPORT_X1+10,
00300                                          FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))
00301                                          ,"QUEST_UP");
00302 
00303             opt1_slider_group[i].paint();
00304             opt1_button_group_array[i]->paint(opt1_button_group_array[i]->button_pressed);
00305             opt1_slider_group[i].result_flag=optimization.is_optimized[0];
00306             opt1_slider_group[i].result_value = (i < REVENUE_POLICY_COUNT) ? finance.revenue_policy_array[i].result_value : finance.expense_policy_array[i - REVENUE_POLICY_COUNT].result_value;
00307             //                  opt1_slider_group[i].result_value=(double)((int)(opt1_slider_group[i].result_value*100.0)/100);
00308             result_text[i].init(
00309                 RESULT_OFFSET + RESULT_LENGTH - 50,
00310                 FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00311                 &(opt1_slider_group[i].result_value),24); //## chea 110899 change by b.massy add 24(1dec)
00312         }
00313 
00314         refresh_optimization_screen = 0;
00315     }
00316     else {                                          // refreshFlag == INFO_REFRESH
00317         vga.use_back();
00318         for (int i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00319             opt1_slider_group[i].result_flag=optimization.is_optimized[0]; {
00320                 //                      if (optimization.is_optimized[0]==1)
00321                 opt1_slider_group[i].result_value = (i < REVENUE_POLICY_COUNT) ? finance.revenue_policy_array[i].result_value : finance.expense_policy_array[i - REVENUE_POLICY_COUNT].result_value;
00322 
00323                 // chwg0513
00324                 if(i < REVENUE_POLICY_COUNT) {
00325                     if(finance.revenue_policy_array[i].required_flag) {
00326                         opt1_slider_group[i].enable_flag=0;
00327                         opt1_button_group_array[i]->push(3);
00328                         double *importWeight = &(finance.revenue_policy_array[i].import_weight);
00329                         *importWeight = OPT_MID_WEIGHT;
00330                     }
00331                     //## chea 031299 11.2.3 to make the opt bar enable again this is when a bar is locked use in report and will release here
00332                     else if(finance.revenue_policy_array[i].required_flag == 0 && opt1_slider_group[i].enable_flag ==0) {
00333                         opt1_slider_group[i].enable_flag=1;
00334                         opt1_button_group_array[i]->push(1);
00335                         double *importWeight = &(finance.revenue_policy_array[i].import_weight);
00336                         *importWeight = OPT_MID_WEIGHT;
00337                     }
00338 
00339                     //                                  else
00340                     //                                  {
00341                     //                                          if(opt1_button_group_array[i]->button_pressed==3)
00342                     //                                                  opt1_button_group_array[i]->push(1);
00343                     //
00344                     //                                          opt1_slider_group[i].enable_flag=1;
00345                     //                                  }
00346                 }
00347                 else {
00348                     if(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag) {
00349                         opt1_slider_group[i].enable_flag=0;
00350                         opt1_button_group_array[i]->push(3);
00351                         double *importWeight = &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].import_weight);
00352                         *importWeight = OPT_MID_WEIGHT;
00353                     }
00354                     //## chea 031299 11.2.3 to make the opt bar enable again this is when a bar is locked use in report and will release here
00355                     else if(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag == 0 && opt1_slider_group[i].enable_flag ==0) {
00356                         opt1_slider_group[i].enable_flag=1;
00357                         opt1_button_group_array[i]->push(1);
00358                         double *importWeight = &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].import_weight);
00359                         *importWeight = OPT_MID_WEIGHT;
00360                     }
00361 
00362                     //                                  else
00363                     //                                  {       if(opt1_button_group_array[i]->button_pressed==3)
00364                     //                                                  opt1_button_group_array[i]->push(1);
00365                     //                                          opt1_slider_group[i].enable_flag=1;
00366                     //                                  }
00367                 }
00368 
00369                 result_text[i].paint();
00370                 vga.blt_buf(RESULT_OFFSET + RESULT_LENGTH - 50,
00371                             FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00372                             RESULT_OFFSET + RESULT_LENGTH,
00373                             FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))+16);
00374             }
00375             opt1_slider_group[i].refresh();
00376         }
00377     }
00378 }
00379 
00380 //---------- End of function Optimization::report_stage_1 ------//
00381 
00382 //-------- Begin of function Optimization::detect_stage_1 ------//
00384 int Optimization::detect_stage_1() {
00385     if (stage_init_flag != 1)
00386         return 0;
00387 
00388     help.set_help(TARGET_OFFSET, SLIDER_OFFSET + FIRST_LINE_OFFSET,
00389                   TARGET_OFFSET+TARGET_WIDTH,REPORT_Y2-20,"H8.1.1.");
00390     help.set_help(TARGET_OFFSET, SLIDER_OFFSET + FIRST_LINE_OFFSET,
00391                   TARGET_OFFSET+30,REPORT_Y2-20,"H8.1.2.");
00392     help.set_help(TARGET_OFFSET+TARGET_WIDTH-30, SLIDER_OFFSET + FIRST_LINE_OFFSET,
00393                   TARGET_OFFSET+TARGET_WIDTH,REPORT_Y2-20,"H8.1.3.");
00394     help.set_help(  SEPARATOR_2, SLIDER_OFFSET + FIRST_LINE_OFFSET,
00395                     SEPARATOR_3,REPORT_Y2-20,"H8.1.4.");
00396     int i, j;
00397 
00398     vga.use_back();
00399 
00400     //--------- detect sliders ---------//
00401 
00402     if (mouse.in_area( SEPARATOR_1, REPORT_Y1+1+HEADING_HEIGHT,
00403                        SEPARATOR_2, REPORT_Y2 )) {
00404         for (i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00405             if(!((i < REVENUE_POLICY_COUNT) ?
00406                  (finance.revenue_policy_array[i].required_flag) :
00407                  (finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag))) {
00408                 if (opt1_slider_group[i].detect()) {
00409                     optimization.is_optimize_slider_modified[0]=0;
00410                     return 1;
00411                 }
00412             }
00413         }
00414     }
00415 
00416     //-------- detect "Preference Help" button ---------//
00417 
00418     if (mouse.single_click(SEPARATOR_2+9,REPORT_Y1+7,SEPARATOR_2+27,REPORT_Y1+25)) {
00419         String str;
00420         str  = DIR_RES;
00421         str += "SCORE";
00422 
00423         ResTxt rs;
00424         rs.init(str);
00425         image_interface.put_back(SEPARATOR_2+9,REPORT_Y1+7,"QUEST_DN");
00426         vga.blt_buf(SEPARATOR_2+9,REPORT_Y1+7,SEPARATOR_2+27,REPORT_Y1+25);
00427         sys.back_view_mode=sys.view_mode;
00428         help_if.help_textlist.topic_id=rs.locate_topic("Preference");
00429         if(help_if.help_textlist.topic_id>0) {
00430             help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
00431             sys.set_view_mode(MODE_HELP_DESC);
00432             sys.redraw_all_flag = 1;
00433             audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
00434         }
00435         return 1;
00436     }
00437 
00438     vga.use_front();
00439 
00440     //--------- if click on a pushed "R" to reset it ----------//
00441 
00442     // Unlock line if the state is IMPLEMENT
00443     for (i = 0; i <REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00444         if (mouse.single_click(
00445             PREF_BUTTON_OFFSET4-2,
00446             PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))-2,
00447             PREF_BUTTON_OFFSET4 + PREF_BUTTON_WIDTH,
00448             PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT
00449             )) {
00450             //------ click on a revenue item --------//
00451 
00452             if(i < REVENUE_POLICY_COUNT) {
00453                 if( finance.revenue_policy_array[i].applied_flag!=P_IMPLEMENT ) {
00454                     if(finance.revenue_policy_array[i].required_flag) {
00455                         finance.revenue_policy_array[i].required_flag=0;
00456                         opt1_slider_group[i].enable_flag=1;
00457                         opt1_slider_group[i].refresh();
00458 
00459                         finance.revenue_policy_array[i].reset_constraint_policy();
00460 
00461                         opt1_button_group_array[i]->push(1);
00462 
00463                         //## chea 041099 try to release the opt button
00464                         optimization.is_optimize_slider_modified[0]=0;
00465 
00466                         double *importWeight = &(finance.revenue_policy_array[i].import_weight);
00467                         *importWeight = OPT_MID_WEIGHT;
00468 
00469                         sys.redraw_all_flag=1;
00470                         return 1;
00471                     }
00472                 }
00473             }
00474             else {                                      //------ click on an expense item --------//
00475                 if(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].applied_flag!=P_IMPLEMENT) {
00476                     if(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag) {
00477                         finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag=0;
00478                         opt1_slider_group[i].enable_flag=1;
00479                         opt1_slider_group[i].refresh();
00480                         //## fred 990528
00481                         finance.expense_policy_array[i-REVENUE_POLICY_COUNT].reset_constraint_policy();
00482                         //##
00483                         opt1_button_group_array[i]->push(1);
00484 
00485                         //## chea 041099 try to release the opt button
00486                         optimization.is_optimize_slider_modified[0]=0;
00487 
00488                         double *importWeight = &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].import_weight);
00489                         *importWeight = OPT_MID_WEIGHT;
00490                         sys.redraw_all_flag=1;
00491                         return 1;
00492                     }
00493                 }
00494             }
00495         }
00496     }
00497 
00498     //----------- click on Preference 1, 2, 3 or R --------------//
00499 
00500     if (mouse.single_click( SEPARATOR_2, REPORT_Y1+1+HEADING_HEIGHT,
00501                             SEPARATOR_3, REPORT_Y2 )) {
00502         for (i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00503             if(!((i < REVENUE_POLICY_COUNT) ?
00504                  (finance.revenue_policy_array[i].required_flag) :
00505                  (finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag))) {
00506                 if  ( (j = opt1_button_group_array[i]->detect()) >= 0) {
00507                     //## chea 041099 try to release the opt button
00508                     optimization.is_optimize_slider_modified[0]=0;
00509 
00510                     if(j==3) {
00511                         if(i < REVENUE_POLICY_COUNT) {
00512                             finance.revenue_policy_array[i].required_flag=1;
00513                             finance.revenue_policy_array[i].set_constraint_policy();
00514                         }
00515                         else {
00516                             finance.expense_policy_array[i - REVENUE_POLICY_COUNT].required_flag=1;
00517                             finance.expense_policy_array[i - REVENUE_POLICY_COUNT].set_constraint_policy();
00518                         }
00519                         opt1_slider_group[i].enable_flag=0;
00520                         opt1_slider_group[i].refresh();
00521 
00522                         sys.redraw_all_flag=1;
00523                     }
00524 
00525                     ButtonGroup *buttonGroupPtr = opt1_button_group_array[i];
00526                     vga.use_back();
00527                     for (int k = 0; k < PREF_COUNT; k++) {
00528                         (*buttonGroupPtr)[k].body_ptr =
00529                             (void *) ((k==j)?(opt1_button_group_down_bitmap[i*PREF_COUNT+k] + 4):(opt1_button_group_up_bitmap[i*PREF_COUNT+k] + 4));
00530                     }
00531                     buttonGroupPtr->paint(buttonGroupPtr->button_pressed);
00532                     vga.blt_buf(PREF_BUTTON_OFFSET1, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)), PREF_BUTTON_OFFSET1 + PREF_BUTTON_WIDTH, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT);
00533                     vga.blt_buf(PREF_BUTTON_OFFSET2, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)), PREF_BUTTON_OFFSET2 + PREF_BUTTON_WIDTH, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT);
00534                     vga.blt_buf(PREF_BUTTON_OFFSET3, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)), PREF_BUTTON_OFFSET3 + PREF_BUTTON_WIDTH, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT);
00535                     vga.blt_buf(PREF_BUTTON_OFFSET4, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)), PREF_BUTTON_OFFSET4 + PREF_BUTTON_WIDTH, PREF_BUTTON_OFFSET + FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)) + PREF_BUTTON_HEIGHT);
00536 
00537                     double *importWeight = (i < REVENUE_POLICY_COUNT) ? &(finance.revenue_policy_array[i].import_weight) : &(finance.expense_policy_array[i - REVENUE_POLICY_COUNT].import_weight);
00538                     if(j==0)
00539                         *importWeight = OPT_LOW_WEIGHT;
00540                     else if(j==1)
00541                         *importWeight = OPT_MID_WEIGHT;
00542                     else if(j==2)
00543                         *importWeight = OPT_HIGH_WEIGHT;
00544 
00545                     //                                  *importWeight = double(j + 1) / 2.0;
00546                     return 1;
00547                 }
00548             }
00549         }
00550     }
00551 
00552     //------- click on the help of an item ---------//
00553 
00554     vga.use_back();
00555 
00556     for (i = 0; i < REVENUE_POLICY_COUNT + EXPENSE_POLICY_COUNT; i++) {
00557         if(help_button_array[i].detect()) {
00558             String str;
00559             str  = DIR_RES;
00560             str += "SCORE";
00561 
00562             ResTxt rs;
00563             rs.init(str);
00564 
00565             // ## chwg1203 begin ////////////////////////
00566             image_interface.put_back(REPORT_X1+10,
00567                                      FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))
00568                                      ,"QUEST_DN");
00569             vga.blt_buf(
00570                 REPORT_X1+10,
00571                 FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1)),
00572                 REPORT_X1+30,
00573                 FIRST_LINE_OFFSET + LINE_SPACING * (i + ((i >= REVENUE_POLICY_COUNT) ? 2 : 1))+20
00574                 );
00575             sys.back_view_mode=sys.view_mode;
00576             help_if.help_textlist.topic_id=rs.locate_topic(game_str_res.opt_stage1_str(i));
00577 
00578             if(help_if.help_textlist.topic_id>0) {
00579                 help_if.help_textlist.add_history(help_if.help_textlist.topic_id);
00580                 sys.set_view_mode(MODE_HELP_DESC);
00581                 sys.redraw_all_flag = 1;
00582                 audio.play_wav("BEEPS-1",audio.int_to_DsVolume(config.sound_effect_volume));
00583             }
00584             return 1;
00585         }
00586     }
00587 
00588     return 0;
00589 }
00590 
00591 //---------- End of function Optimization::detect_stage_1 ------//

Generated on Fri Aug 23 01:38:09 2002 for VirtualU by doxygen1.2.17