Changeset 3e755e5 in tol for tolbase/lib/byswidget


Ignore:
Timestamp:
Nov 6, 2008, 5:29:40 PM (18 years ago)
Author:
Christian Paz <cpaz@…>
Branches:
1941-docker-image-to-test, devel, master
Children:
b9d4214
Parents:
642ac37
Message:

added hierarchical tree option to bsersel

git-svn-id: ​https://www.tol-project.org/svn/tolp/trunk@130 be4846ae-f051-483a-831f-b64e7d08527f

File:
1 edited

Legend:

Unmodified
Added
Removed
  • tolbase/lib/byswidget/bsersel/bsersel.tcl

    r642ac37 r3e755e5  
    5050    # alg(sDi,$mag,$dim,-typ,$sDi)      - Tipo de la subdimension
    5151    # alg(sDi,$mag,$dim,-dex,$sDi)      - Lista dependencias existenciales
     52    # alg(sDi,$mag,$dim,-hie,$sDi)      - Lista de valores jerárquicos
    5253    # alg(sDi,$mag,$dim,-dva,$sDi)      - Lista dependencias de valor
    5354    # alg(sDi,$mag,$dim,TCL,<key>,$sDi) - Valor de clave TCL $-key
    … …  
    8485    set data(project)  [$self cget -project]
    8586    set data(iniEntry) [$self cget -inientry]
    86         set data(alreadytriggering) 0
     87    set data(alreadytriggering) 0
    8788    $self _readini
    8889  }
    … …  
    366367        set max $max+1
    367368    }
    368         set localtrig 0
    369         if { !$data(alreadytriggering) } {
    370                 set data(alreadytriggering) 1
    371                 set localtrig 1
    372                 Tolcon_Trace "cargando --> $mag"
    373                 . configure -cursor watch
    374                 ::progressbar::Show [mc "loading"] 60 2
    375                 ::progressbar::SetText [mc "Getting Values"]
    376         }
     369    set localtrig 0
     370    if { !$data(alreadytriggering) } {
     371        set data(alreadytriggering) 1
     372        set localtrig 1
     373        Tolcon_Trace "cargando --> $mag"
     374        . configure -cursor watch
     375        ::progressbar::Show [mc "loading"] 60 2
     376        ::progressbar::SetText [mc "Getting Values"]
     377    }
    377378    set iterador 0
    378379
    379380    variable alreadyTriggered
    380381    foreach dim [$self _getDim $mag] {
    381           #::TolInspector::Busy
     382      #::TolInspector::Busy
    382383      set lstSubDim [$self _getSubDim $mag $dim]
    383384      foreach sDi $lstSubDim {
    … …  
    400401    array unset alreadyTriggered
    401402    if { $localtrig } {
    402                 Tolcon_Trace "terminando --> $mag"
    403           set data(alreadytriggering) 0
    404           ::progressbar::Destroy
    405           . configure -cursor ""
     403        Tolcon_Trace "terminando --> $mag"
     404      set data(alreadytriggering) 0
     405      ::progressbar::Destroy
     406      . configure -cursor ""
    406407    }
    407408 
    … …  
    551552       "mul.dir" { $self _fillSubDimMulDir $mag $dim $sDi }
    552553       "mul.lib" { $self _fillSubDimMulInd $mag $dim $sDi 0}
    553            "mul.ind" { $self _fillSubDimMulInd $mag $dim $sDi }
    554            "uni.dat" { $self _fillSubDimDat $mag $dim $sDi 1}
    555            "mul.dat" { $self _fillSubDimDat $mag $dim $sDi 0}
     554       "mul.ind" { $self _fillSubDimMulInd $mag $dim $sDi }
     555       "uni.dat" { $self _fillSubDimDat $mag $dim $sDi 1}
     556       "mul.dat" { $self _fillSubDimDat $mag $dim $sDi 0}
     557       "uni.hie" { $self _fillSubDimHie $mag $dim $sDi 1}
     558       "mul.hie" { $self _fillSubDimHie $mag $dim $sDi 0}
    556559    }
    557560    #Tolcon_Trace "subDim: $mag $dim $sDi es de tipo $type"
    558561  }
    559        
     562
     563 
     564#/////////////////////////////////////////////////////////////////////////////
     565method _findcode {idcoltab cod} {
     566#
     567# PURPOSE: Find a value in the column col of tview and returns its index
     568# PARAMETERS:
     569#   idcoltab -> list of pairs id, cod
     570#   val      -> value to find
     571#/////////////////////////////////////////////////////////////////////////////
     572  foreach pair $idcoltab {
     573    if {[lindex $pair 1] eq $cod} {
     574      return [lindex $pair 0]
     575    }
     576  }
     577  return -1
     578}
     579#/////////////////////////////////////////////////////////////////////////////
     580method _fillSubDimHie {mag dim sDi trigger} {
     581#
     582# PURPOSE: Fills subdimension frame for a subdimension marked as hierarchical
     583# PARAMETERS:
     584#   mag -> magnitud identifier
     585#   dim -> dimension identifier
     586#   sDi -> subdimension identifier
     587#   trigger -> 0/1 trigger event for dependants?
     588#   multisel -> 0/1 allows multiselection
     589#/////////////////////////////////////////////////////////////////////////////
     590
     591  set w $algwid($mag,$dim,$sDi)
     592  set lstReg [$self _getSubDimValues $mag $dim $sDi]
     593  set defval [$self _getSubDimDefValue $mag $dim $sDi]
     594
     595  set valCont 0
     596  #if $multisel { set icosel 0 } else { set icosel 1 }
     597# -bonselcmd [list $self _trigger $mag $dim $sDi] \
     598# Si no existe crearlo
     599  if {![info exist ${selfns}::tmp($mag,$dim,$sDi)]} {
     600    ScrolledWindow $w.sw${sDi}
     601    if {$trigger} {
     602      set tmp($mag,$dim,$sDi) [ btreeview $w.sw${sDi}.tv \
     603        -bonselcmd [list $self _trigger $mag $dim $sDi] \
     604                -btogglehier false \
     605        -height 150 -linewidth 2 -borderwidth 1 \
     606        -bmultiselect false -bicosel false ]
     607    } else {
     608      set tmp($mag,$dim,$sDi) [ btreeview $w.sw${sDi}.tv \
     609        -btogglehier false \
     610        -height 150 -linewidth 2 -borderwidth 1 \
     611        -bmultiselect true -bicosel true ]
     612    }
     613   
     614    $tmp($mag,$dim,$sDi) bColumnInsert end cod -hide true
     615   
     616   
     617    $w.sw${sDi} setwidget $w.sw${sDi}.tv
     618    grid $w.sw${sDi} -sticky news
     619    #grid $w.sw${sDi}.tv  -row 0 -column 0 -sticky new
     620 
     621    grid columnconfigure $w 0 -weight 1
     622    grid rowconfigure    $w 0 -weight 1
     623  }
     624  # Insertar los valores
     625  # Crear elementos nuevos
     626    #set idx 0
     627    $tmp($mag,$dim,$sDi) delete root
     628    set alg(sDi,$mag,$dim,-hie,$sDi) ""
     629    set plotted 0
     630    set iteration -1
     631    set regidx 0
     632    set plottedreg ""
     633    set numels [expr [llength $lstReg]-1 ]
     634   
     635    while { ($plotted < $numels) && ($iteration < $numels) } {
     636       set iteration [expr $iteration + 1]
     637
     638       foreach reg $lstReg {
     639          set ide [lindex $reg 0]
     640          set abr [lindex $reg 1]
     641          set nom [lindex $reg 2]
     642          set des [lindex $reg 3]
     643          set par [lindex $reg 4]
     644          set lev [lindex $reg 5]
     645          if {$iteration eq 0} { lappend plottedreg 0 }
     646          if { $abr eq $defval } {
     647            set mark ON
     648          } else {
     649            set mark OFF
     650          }
     651          set isplotted [lindex $plottedreg $regidx]
     652
     653#          set cmd "Text WriteLn(\"Processing iteration $iteration regidx $regidx plotted $plotted plottedreg -> $plottedreg \");"
     654#          ::tol::console eval $cmd
     655
     656          if { $isplotted eq 0 } {
     657              set infCols [ list cod $abr ]
     658              if {$par ne ""} {
     659                 set paridx [$self _findcode $alg(sDi,$mag,$dim,-hie,$sDi) $par]
     660                 if { $paridx >= 0 } {
     661                   set plottedreg [ lreplace $plottedreg $regidx $regidx 1 ]
     662                   set plotted [expr $plotted+1]
     663                   set idx [ $tmp($mag,$dim,$sDi) insertNode $paridx 0 $mark $abr $nom $infCols ]
     664                 }
     665              } else {
     666                 set plottedreg [ lreplace $plottedreg $regidx $regidx 1 ]
     667                 set plotted [expr $plotted+1]
     668                 set idx [ $tmp($mag,$dim,$sDi) insertNode root 0 $mark $abr $nom $infCols ]
     669              }
     670              lappend alg(sDi,$mag,$dim,-hie,$sDi) [list $idx $abr]
     671          }
     672          set regidx [expr $regidx+1]
     673       }
     674       set regidx 0
     675    }
     676}
     677 
    560678#/////////////////////////////////////////////////////////////////////////////
    561679method _fillSubDimDat {mag dim sDi trigger} {
    … …  
    576694
    577695  if {[llength $lstReg]} {
    578         foreach reg $lstReg {
    579           lappend lstRegMod [linsert [lrange $reg 1 end] end [lindex $reg 0]]
    580           set valCont [expr $valCont+1]
    581           if {$defval eq [lindex $reg 1]} {
    582                    set defFound $valCont
    583           }
    584         }
     696    foreach reg $lstReg {
     697      lappend lstRegMod [linsert [lrange $reg 1 end] end [lindex $reg 0]]
     698      set valCont [expr $valCont+1]
     699      if {$defval eq [lindex $reg 1]} {
     700           set defFound $valCont
     701      }
     702    }
    585703  } else {
    586         set lstRegMod ""
     704    set lstRegMod ""
    587705  }
    588706  # Si no existe crearlo
    589707  if {![info exist ${selfns}::tmp($mag,$dim,$sDi)]} {
    590         label $w.l${sDi} -text [mc $sDi]
    591           if {$trigger} {
    592                   set tmp($mag,$dim,$sDi) [ bentrydate $w.bsf${sDi} \
    593                      -postcommand [list $self _trigger $mag $dim $sDi] ]
    594           } else {
    595                   set tmp($mag,$dim,$sDi) [bentrydate $w.bsf${sDi} ]
    596           }
    597 
    598        
    599         grid $w.l${sDi}    -row 0 -column 0 -sticky ne
    600         grid $w.bsf${sDi}  -row 0 -column 1 -sticky new
     708    label $w.l${sDi} -text [mc $sDi]
     709      if {$trigger} {
     710          set tmp($mag,$dim,$sDi) [ bentrydate $w.bsf${sDi} \
     711             -postcommand [list $self _trigger $mag $dim $sDi] ]
     712      } else {
     713          set tmp($mag,$dim,$sDi) [bentrydate $w.bsf${sDi} ]
     714      }
     715
     716   
     717    grid $w.l${sDi}    -row 0 -column 0 -sticky ne
     718    grid $w.bsf${sDi}  -row 0 -column 1 -sticky new
    601719 
    602         grid columnconfigure $w 1 -weight 1
    603         grid rowconfigure    $w 0 -weight 1
     720    grid columnconfigure $w 1 -weight 1
     721    grid rowconfigure    $w 0 -weight 1
    604722  }
    605723  puts $defval
    … …  
    608726
    609727#  if {$defval ne ""} {
    610 #        if {$defFound eq 1} {
    611 #               $tmp($mag,$dim,$sDi) selectIndex $defFound
    612 #        }
     728#    if {$defFound eq 1} {
     729#        $tmp($mag,$dim,$sDi) selectIndex $defFound
     730#    }
    613731#  }
    614732
    … …  
    646764    # Crear elementos nuevos
    647765    set idx 0
     766    set defval [$self _getSubDimDefValue $mag $dim $sDi]
     767
    648768    foreach reg $lstReg {
    649769      set ide [lindex $reg 0]
    … …  
    652772      set des [lindex $reg 3]
    653773      set wid rb$abr
    654       set defval [$self _getSubDimDefValue $mag $dim $sDi]
    655774      radiobutton $w.$wid -text $nom -value $abr \
    656775         -variable ${selfns}::tmp($mag,$dim,$sDi)
    … …  
    849968    set localtrig 0
    850969    if { !$data(alreadytriggering) } {
    851           set data(alreadytriggering) 1
    852           set localtrig 1
    853           . configure -cursor watch
    854     }
    855         #Tolcon_Trace "********** Launching _trigger $mag $dim $sDi"
    856          
     970         set data(alreadytriggering) 1
     971      set localtrig 1
     972      . configure -cursor watch
     973    }
     974    #Tolcon_Trace "********** Launching _trigger $mag $dim $sDi"
     975     
    857976    set def [$self cget -def]
    858977
    … …  
    863982    }
    864983    if { $localtrig } {
    865                 set data(alreadytriggering) 0
    866                 . configure -cursor ""
    867           }
    868          
     984        set data(alreadytriggering) 0
     985        . configure -cursor ""
     986      }
     987     
    869988  }
    870989
    … …  
    9421061    if [info exist ${selfns}::alg(sDi,$mag,$dim,TCL,-type,$sDi)] {
    9431062      set met [string tolower $alg(sDi,$mag,$dim,TCL,-type,$sDi)]
    944       if { ($met ne "dir") && ($met ne "dat") && ($met ne "lib")} {
     1063      if { ($met ne "hie") && ($met ne "dir") && ($met ne "dat") && ($met ne "lib")} {
    9451064        set met "ind"
    9461065      }
    … …  
    9841103      foreach sDi [$self _getSubDim $mag $dim] {
    9851104        set sDiLst  [$self _getSelSubDim $mag $dim $sDi]
    986                 set type [$self _getSubDimType $mag $dim $sDi]
     1105        set type [$self _getSubDimType $mag $dim $sDi]
    9871106        if {$res && ($alg(sDi,$mag,$dim,-req,$sDi) eq 1) && \
    988                         ( $type ne "uni.dat" && $type ne "mul.dat" ) && ([llength $sDiLst] eq 0)} {
     1107            ( $type ne "uni.dat" && $type ne "mul.dat" ) && ([llength $sDiLst] eq 0)} {
    9891108          set msg [mc "Must fill subdimension %1\$s of dimension %2\$s" \
    9901109             $alg(sDi,$mag,$dim,-nam,$sDi) $alg(Dim,$mag,-nam,$dim)]
    … …  
    10581177      set txt \
    10591178"${spa}foreach $dim [list [$self _getSelDim $mag $dim]] {
    1060 ${spa}  lappend $var ${mag}_[ListToStr $lstDim $alg(TCL,-dimSep) {[lindex $}    { 0]}]
     1179${spa}  lappend $var ${mag}_[ListToStr $lstDim $alg(TCL,-dimSep) {[lindex $}    { 0]}]
    10611180${spa}}"
    10621181    } else {
    … …  
    11041223      set txt \
    11051224"${spa}foreach $sDi [list [$self _getSelSubDim $mag $dim $sDi]] {
    1106 ${spa}  lappend $var ${dimTxt}[ListToStr $lstSDi $alg(TCL,-sDiSep) {[lindex $}  { 2]}]
     1225${spa}  lappend $var ${dimTxt}[ListToStr $lstSDi $alg(TCL,-sDiSep) {[lindex $}    { 2]}]
    11071226${spa}}"
    11081227    } else {
    … …  
    11291248    set lst ""
    11301249    set type [$self _getSubDimType $mag $dim $sDi]
    1131         #TODO: Validate here
    1132         switch -- $type {
    1133            "uni.dat" {
    1134                  if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
    1135                    if {$tmp($mag,$dim,$sDi) ne ""} {
    1136                            if {[ $tmp($mag,$dim,$sDi) cget -btext ] ne ""} {
    1137                                    set lst [ join [  $tmp($mag,$dim,$sDi) cget -btext ] ]
    1138                            } else {
    1139                                    set lst "00000000"
    1140                            }
    1141                    }
    1142                  }
    1143            }
    1144           "mul.dat" {
    1145                   if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
    1146                         if {$tmp($mag,$dim,$sDi) ne ""} {
    1147                                 if {[ $tmp($mag,$dim,$sDi) cget -btext ] ne ""} {
    1148                                          set lst [ join [  $tmp($mag,$dim,$sDi) cget -btext ] ]
    1149                                 } else {
    1150                                         set lst "00000000"
    1151                                 }
    1152                         }
    1153                   }
    1154           }
    1155            "uni.dir" {
    1156                  if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
    1157                    if {$tmp($mag,$dim,$sDi) ne ""} {
    1158                          set lst [list $tmp($mag,$dim,$sDi)]
    1159                    }
    1160                  }
    1161            }
    1162        "uni.ind" {     
     1250    #TODO: Validate here
     1251    switch -- $type {
     1252       "uni.hie" {
     1253         if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
     1254           if {$tmp($mag,$dim,$sDi) ne ""} {
     1255               if {[ $tmp($mag,$dim,$sDi) getSelected ] ne ""} {
     1256                    set lst [ join [  $tmp($mag,$dim,$sDi) getSelected cod ] ]
     1257               } else {
     1258                   set lst ""
     1259               }
     1260           }
     1261         }
     1262       }
     1263       "mul.hie" {
     1264         if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
     1265           if {$tmp($mag,$dim,$sDi) ne ""} {
     1266               if {[ $tmp($mag,$dim,$sDi) getSelected ] ne ""} {
     1267                    set lst [ join [  $tmp($mag,$dim,$sDi) getSelected cod ] ]
     1268               } else {
     1269                   set lst ""
     1270               }
     1271           }
     1272         }
     1273       }
     1274       "uni.dat" {
     1275         if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
     1276           if {$tmp($mag,$dim,$sDi) ne ""} {
     1277               if {[ $tmp($mag,$dim,$sDi) cget -btext ] ne ""} {
     1278                    set lst [ join [  $tmp($mag,$dim,$sDi) cget -btext ] ]
     1279               } else {
     1280                   set lst "00000000"
     1281               }
     1282           }
     1283         }
     1284       }
     1285      "mul.dat" {
     1286          if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
     1287            if {$tmp($mag,$dim,$sDi) ne ""} {
     1288                if {[ $tmp($mag,$dim,$sDi) cget -btext ] ne ""} {
     1289                     set lst [ join [  $tmp($mag,$dim,$sDi) cget -btext ] ]
     1290                } else {
     1291                    set lst "00000000"
     1292                }
     1293            }
     1294          }
     1295      }
     1296       "uni.dir" {
     1297         if {[info exist ${selfns}::tmp($mag,$dim,$sDi)] } {
     1298           if {$tmp($mag,$dim,$sDi) ne ""} {
     1299             set lst [list $tmp($mag,$dim,$sDi)]
     1300           }
     1301         }
     1302       }
     1303       "uni.ind" {
    11631304         if {[info exist ${selfns}::tmp($mag,$dim,$sDi)]} {
    11641305           set val [lindex [$tmp($mag,$dim,$sDi) key get] 0]
Note: See TracChangeset for help on using the changeset viewer.