[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: pattern flags: Bug Fix



Ok, here's version 2 of the bug fix, which excludes the combined
flags.  It involves two functions, so i'm incuding it here as a
context diff (patch file) relative to the *original* 2.0 code.

				- Randy

*** enviro_iv.cc~       Thu Jul 20 15:03:19 2000
--- enviro_iv.cc        Mon Mar 19 11:06:33 2001
***************
*** 2290,2296 ****
    TypeDef* flagenm = TA_PatternSpec.sub_types.FindName("PatFlags");
    int i;
    for(i=1;i<flagenm->enum_vals.size;i++) {
!     patflagsmenu->AddItem(flagenm->enum_vals[i]->name,NULL,taivMenu::use_default,
                          new taivMenuCallback(EnvEditor)
                          (this,&EnvEditor::SetPatFlags));
    }
--- 2290,2299 ----
    TypeDef* flagenm = TA_PatternSpec.sub_types.FindName("PatFlags");
    int i;
    for(i=1;i<flagenm->enum_vals.size;i++) {
!     String nm = flagenm->enum_vals[i]->name;
!     if((nm == "TARG_EXT_FLAG") || (nm == "COMP_TARG_FLAG") || (nm == "COMP_EXT_FLAG") ||
!        (nm == "COMP_TARG_EXT_FLAG") || (nm == "TARG_EXT_VALUE")) continue;
!     patflagsmenu->AddItem(nm,NULL,taivMenu::use_default,
                          new taivMenuCallback(EnvEditor)
                          (this,&EnvEditor::SetPatFlags));
    }
***************
*** 2298,2304 ****
    patflagsmenu->AddSubMenu("Global PatternSpec Flags");
  
    for(i=1;i<flagenm->enum_vals.size;i++) {
!     patflagsmenu->AddItem(flagenm->enum_vals[i]->name,NULL,taivMenu::use_default,
                          new taivMenuCallback(EnvEditor)
                          (this,&EnvEditor::SetPatFlags));
    }
--- 2301,2310 ----
    patflagsmenu->AddSubMenu("Global PatternSpec Flags");
  
    for(i=1;i<flagenm->enum_vals.size;i++) {
!     String nm = flagenm->enum_vals[i]->name;
!     if((nm == "TARG_EXT_FLAG") || (nm == "COMP_TARG_FLAG") || (nm == "COMP_EXT_FLAG") ||
!        (nm == "COMP_TARG_EXT_FLAG") || (nm == "TARG_EXT_VALUE")) continue;
!     patflagsmenu->AddItem(nm,NULL,taivMenu::use_default,
                          new taivMenuCallback(EnvEditor)
                          (this,&EnvEditor::SetPatFlags));
    }
***************
*** 2414,2438 ****
  
  void EnvEditor::SetPatFlags(taivMenuEl* sel) { // set patflags from menu
    Apply(); // apply current settings
!   int index = ((((taivHierEl *) sel)->sub_no) * 8) + sel->itm_no;
!   switch (index) {
!   case 0: patflags = PatternSpec::NO_FLAGS; break;
!   case 8: patflags = PatternSpec::TARG_FLAG; specflags = false; break;
!   case 9: patflags = PatternSpec::EXT_FLAG; specflags = false; break;
!   case 10: patflags = PatternSpec::COMP_FLAG; specflags = false; break;
!   case 11: patflags = PatternSpec::TARG_VALUE; specflags = false; break;
!   case 12: patflags = PatternSpec::EXT_VALUE; specflags = false; break;
!   case 13: patflags = PatternSpec::NO_UNIT_FLAG; specflags = false; break;
!   case 14: patflags = PatternSpec::NO_UNIT_VALUE; specflags = false; break;
!   case 15: patflags = PatternSpec::NO_APPLY; specflags = false; break;
!   case 16: patflags = PatternSpec::TARG_FLAG; specflags = true; break;
!   case 17: patflags = PatternSpec::EXT_FLAG; specflags = true; break;
!   case 18: patflags = PatternSpec::COMP_FLAG; specflags = true; break;
!   case 19: patflags = PatternSpec::TARG_VALUE; specflags = true; break;
!   case 20: patflags = PatternSpec::EXT_VALUE; specflags = true; break;
!   case 21: patflags = PatternSpec::NO_UNIT_FLAG; specflags = true; break;
!   case 22: patflags = PatternSpec::NO_UNIT_VALUE; specflags = true; break;
!   case 23: patflags = PatternSpec::NO_APPLY; specflags = true; break;
    }
    if((patflags != PatternSpec::NO_FLAGS) &&
       (owner->auto_scale == true) && (cbar != NULL))
--- 2420,2444 ----
  
  void EnvEditor::SetPatFlags(taivMenuEl* sel) { // set patflags from menu
    Apply(); // apply current settings
!   patflags = PatternSpec::NO_FLAGS; specflags = false;
!   int submnu = ((taivHierEl *) sel)->sub_no;
!   if(submnu > 0) {            // submnu 1 = pattern flags, submnu 2 = global (spec) flags
!     if(submnu == 2)
!       specflags = true;               // global (spec) flags
!     int flag_sel = sel->itm_no;       // which flag item selected (TARG_FLAG (=0) - NO_APPLY (=12))
!     // can't just bit-shift because some combinations are represented and others are pure flags
!     // (i.e., TARG_EXT_FLAG is OR of TARG_FLAG and EXT_FLAG, but there aren't such combinations
!     // for TARG_VALUE and TARG_FLAG, for example..
!     switch (flag_sel) {
!     case 0: patflags = PatternSpec::TARG_FLAG; break;
!     case 1: patflags = PatternSpec::EXT_FLAG; break;
!     case 2: patflags = PatternSpec::COMP_FLAG; break;
!     case 3: patflags = PatternSpec::TARG_VALUE; break;
!     case 4: patflags = PatternSpec::EXT_VALUE; break;
!     case 5: patflags = PatternSpec::NO_UNIT_FLAG; break;
!     case 6: patflags = PatternSpec::NO_UNIT_VALUE; break;
!     case 7: patflags = PatternSpec::NO_APPLY; break;
!     }
    }
    if((patflags != PatternSpec::NO_FLAGS) &&
       (owner->auto_scale == true) && (cbar != NULL))